~willismonroe/ubuntu/precise/xdg-utils/typo-fix-996304

« back to all changes in this revision

Viewing changes to scripts/xdg-open

  • Committer: Bazaar Package Importer
  • Author(s): Per Olofsson
  • Date: 2006-08-29 17:35:02 UTC
  • Revision ID: james.westby@ubuntu.com-20060829173502-ffe063dqe8ajg2rm
Tags: upstream-1.0~beta3
ImportĀ upstreamĀ versionĀ 1.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
#---------------------------------------------
 
3
#   xdg-open
 
4
#
 
5
#   Utility script to open a URL in the registered default application.
 
6
#
 
7
#   Refer to the usage() function below for usage.
 
8
#
 
9
#   Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
 
10
#   Copyright 2006, Jeremy White <jwhite@codeweavers.com>
 
11
#
 
12
#   LICENSE:
 
13
#
 
14
#   Permission is hereby granted, free of charge, to any person obtaining a
 
15
#   copy of this software and associated documentation files (the "Software"),
 
16
#   to deal in the Software without restriction, including without limitation
 
17
#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
18
#   and/or sell copies of the Software, and to permit persons to whom the
 
19
#   Software is furnished to do so, subject to the following conditions:
 
20
#
 
21
#   The above copyright notice and this permission notice shall be included
 
22
#   in all copies or substantial portions of the Software.
 
23
#
 
24
#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
25
#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
26
#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 
27
#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 
28
#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 
29
#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 
30
#   OTHER DEALINGS IN THE SOFTWARE.
 
31
#
 
32
#---------------------------------------------
 
33
 
 
34
manualpage()
 
35
{
 
36
cat << _MANUALPAGE
 
37
Name
 
38
 
 
39
xdg-open - opens a file or URL in the user's preferred application
 
40
 
 
41
Synopsis
 
42
 
 
43
xdg-open { file | URL }
 
44
 
 
45
xdg-open { --help | --manual | --version }
 
46
 
 
47
Description
 
48
 
 
49
xdg-open opens a file or URL in the user's preferred application. If a URL is
 
50
provided the URL will be opened in the user's preferred web browser. If a file
 
51
is provided the file will be opened in the preferred application for files of
 
52
that type. xdg-open supports file, ftp, http and https URLs.
 
53
 
 
54
xdg-open is for use inside a desktop session only. It is not recommended to use
 
55
xdg-open as root.
 
56
 
 
57
Options
 
58
 
 
59
--help
 
60
    Show command synopsis.
 
61
--manual
 
62
    Show this manualpage.
 
63
--version
 
64
    Show the xdg-utils version information.
 
65
 
 
66
Exit Codes
 
67
 
 
68
An exit code of 0 indicates success while a non-zero exit code indicates
 
69
failure. The following failure codes can be returned:
 
70
 
 
71
1
 
72
    Error in command line syntax.
 
73
2
 
74
    One of the files passed on the command line did not exist.
 
75
3
 
76
    A required tool could not be found.
 
77
4
 
78
    The action failed.
 
79
 
 
80
Examples
 
81
 
 
82
xdg-open 'http://www.freedesktop.org/'
 
83
 
 
84
Opens the Freedesktop.org website in the user's default browser
 
85
 
 
86
xdg-open /tmp/foobar.png
 
87
 
 
88
Opens the PNG image file /tmp/foobar.png in the user's default image viewing
 
89
application.
 
90
 
 
91
_MANUALPAGE
 
92
}
 
93
 
 
94
usage()
 
95
{
 
96
cat << _USAGE
 
97
xdg-open - opens a file or URL in the user's preferred application
 
98
 
 
99
Synopsis
 
100
 
 
101
xdg-open { file | URL }
 
102
 
 
103
xdg-open { --help | --manual | --version }
 
104
 
 
105
_USAGE
 
106
}
 
107
 
 
108
#@xdg-utils-common@
 
109
 
 
110
#----------------------------------------------------------------------------
 
111
#   Common utility functions included in all XDG wrapper scripts
 
112
#----------------------------------------------------------------------------
 
113
 
 
114
DEBUG()
 
115
{
 
116
  [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt $1 ] && return 0;
 
117
  shift
 
118
  echo "$@" >&2
 
119
}
 
120
 
 
121
#-------------------------------------------------------------
 
122
# Exit script on successfully completing the desired operation
 
123
 
 
124
exit_success()
 
125
{
 
126
    if [ $# -gt 0 ]; then
 
127
        echo "$@"
 
128
        echo
 
129
    fi
 
130
 
 
131
    exit 0
 
132
}
 
133
 
 
134
 
 
135
#-----------------------------------------
 
136
# Exit script on malformed arguments, not enough arguments
 
137
# or missing required option.
 
138
# prints usage information
 
139
 
 
140
exit_failure_syntax()
 
141
{
 
142
    if [ $# -gt 0 ]; then
 
143
        echo "xdg-open: $@" >&2
 
144
        echo "Try 'xdg-open --help' for more information." >&2
 
145
    else
 
146
        usage
 
147
        echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info."
 
148
    fi
 
149
 
 
150
    exit 1
 
151
}
 
152
 
 
153
#-------------------------------------------------------------
 
154
# Exit script on missing file specified on command line
 
155
 
 
156
exit_failure_file_missing()
 
157
{
 
158
    if [ $# -gt 0 ]; then
 
159
        echo "xdg-open: $@" >&2
 
160
    fi
 
161
 
 
162
    exit 2
 
163
}
 
164
 
 
165
#-------------------------------------------------------------
 
166
# Exit script on failure to locate necessary tool applications
 
167
 
 
168
exit_failure_operation_impossible()
 
169
{
 
170
    if [ $# -gt 0 ]; then
 
171
        echo "xdg-open: $@" >&2
 
172
    fi
 
173
 
 
174
    exit 3
 
175
}
 
176
 
 
177
#-------------------------------------------------------------
 
178
# Exit script on failure returned by a tool application
 
179
 
 
180
exit_failure_operation_failed()
 
181
{
 
182
    if [ $# -gt 0 ]; then
 
183
        echo "xdg-open: $@" >&2
 
184
    fi
 
185
 
 
186
    exit 4
 
187
}
 
188
 
 
189
#------------------------------------------------------------
 
190
# Exit script on insufficient permission to read a specified file
 
191
 
 
192
exit_failure_file_permission_read()
 
193
{
 
194
    if [ $# -gt 0 ]; then
 
195
        echo "xdg-open: $@" >&2
 
196
    fi
 
197
 
 
198
    exit 5
 
199
}
 
200
 
 
201
#------------------------------------------------------------
 
202
# Exit script on insufficient permission to read a specified file
 
203
 
 
204
exit_failure_file_permission_write()
 
205
{
 
206
    if [ $# -gt 0 ]; then
 
207
        echo "xdg-open: $@" >&2
 
208
    fi
 
209
 
 
210
    exit 6
 
211
}
 
212
 
 
213
check_input_file()
 
214
{
 
215
    if [ ! -e "$1" ]; then
 
216
        exit_failure_file_missing "file '$1' does not exist"
 
217
    fi
 
218
    if [ ! -r "$1" ]; then
 
219
        exit_failure_file_permission_read "no permission to read file '$1'"
 
220
    fi
 
221
}
 
222
 
 
223
check_vendor_prefix()
 
224
{
 
225
    file=`basename "$1"`
 
226
    case "$file" in
 
227
       [a-zA-Z]*-*)
 
228
         return
 
229
         ;;
 
230
    esac
 
231
 
 
232
    echo "xdg-open: filename '$file' does not have a proper vendor prefix" >&2
 
233
    echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
 
234
    echo 'with a dash ("-"). An example filename is '"'example-$file'" >&2
 
235
    echo "Use --novendor to override or 'xdg-open --manual' for additional info." >&2
 
236
    exit 1
 
237
}
 
238
 
 
239
check_output_file()
 
240
{
 
241
    # if the file exists, check if it is writeable
 
242
    # if it does not exists, check if we are allowed to write on the directory
 
243
    if [ -e "$1" ]; then
 
244
        if [ ! -w "$1" ]; then
 
245
            exit_failure_file_permission_write "no permission to write to file '$1'"
 
246
        fi
 
247
    else
 
248
        DIR=`dirname "$1"`
 
249
        if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
 
250
            exit_failure_file_permission_write "no permission to create file '$1'"
 
251
        fi
 
252
    fi
 
253
}
 
254
 
 
255
#----------------------------------------
 
256
# Checks for shared commands, e.g. --help
 
257
 
 
258
check_common_commands()
 
259
{
 
260
    while [ $# -gt 0 ] ; do
 
261
        parm="$1"
 
262
        shift
 
263
 
 
264
        case "$parm" in
 
265
            --help)
 
266
            usage
 
267
            echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info."
 
268
            exit_success
 
269
            ;;
 
270
 
 
271
            --manual)
 
272
            manualpage
 
273
            exit_success
 
274
            ;;
 
275
 
 
276
            --version)
 
277
            echo "xdg-open 1.0beta3"
 
278
            exit_success
 
279
            ;;
 
280
        esac
 
281
    done
 
282
}
 
283
 
 
284
check_common_commands "$@"
 
285
if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
 
286
    # Be silent
 
287
    xdg_redirect_output=" > /dev/null 2> /dev/null"
 
288
else
 
289
    # All output to stderr
 
290
    xdg_redirect_output=" >&2"
 
291
fi
 
292
 
 
293
#--------------------------------------
 
294
# Checks for known desktop environments
 
295
# set variable DE to the desktop environments name, lowercase
 
296
 
 
297
detectDE()
 
298
{
 
299
    if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
 
300
    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
 
301
    elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
 
302
    fi
 
303
}
 
304
 
 
305
#----------------------------------------------------------------------------
 
306
# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
 
307
# It also always returns 1 in KDE 3.4 and earlier
 
308
# Simply return 0 in such case
 
309
 
 
310
kfmclient_fix_exit_code()
 
311
{
 
312
    version=`kde-config --version 2>/dev/null | grep KDE`
 
313
    major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'`
 
314
    minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'`
 
315
    release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
 
316
    test "$major" -gt 3 && return $1
 
317
    test "$minor" -gt 5 && return $1
 
318
    test "$release" -gt 4 && return $1
 
319
    return 0
 
320
}
 
321
 
 
322
open_kde()
 
323
{
 
324
    kfmclient exec "$1"
 
325
    kfmclient_fix_exit_code $?
 
326
 
 
327
    if [ $? -eq 0 ]; then
 
328
        exit_success
 
329
    else
 
330
        exit_failure_operation_failed
 
331
    fi
 
332
}
 
333
 
 
334
open_gnome()
 
335
{
 
336
    gnome-open "$1"
 
337
 
 
338
    if [ $? -eq 0 ]; then
 
339
        exit_success
 
340
    else
 
341
        exit_failure_operation_failed
 
342
    fi
 
343
}
 
344
 
 
345
open_xfce()
 
346
{
 
347
    exo-open "$1"
 
348
 
 
349
    if [ $? -eq 0 ]; then
 
350
        exit_success
 
351
    else
 
352
        exit_failure_operation_failed
 
353
    fi
 
354
}
 
355
 
 
356
open_generic()
 
357
{
 
358
    IFS=":"
 
359
    for browser in $BROWSER; do
 
360
        if [ x"$browser" != x"" ]; then
 
361
 
 
362
            browser_with_arg=`echo "$browser" | sed s#%s#"$1"#`
 
363
 
 
364
            if [ x"$browser_with_arg" = x"$browser" ]; then "$browser" "$1";
 
365
            else $browser_with_arg;
 
366
            fi
 
367
 
 
368
            if [ $? -eq 0 ]; then exit_success;
 
369
            fi
 
370
        fi
 
371
    done
 
372
 
 
373
    exit_failure_operation_impossible "no method available for opening '$1'"
 
374
}
 
375
 
 
376
[ x"$1" != x"" ] || exit_failure_syntax
 
377
 
 
378
url=
 
379
while [ $# -gt 0 ] ; do
 
380
    parm="$1"
 
381
    shift
 
382
 
 
383
    case "$parm" in
 
384
      -*)
 
385
        exit_failure_syntax "unexpected option '$parm'"
 
386
        ;;
 
387
 
 
388
      *)
 
389
        if [ -n "$url" ] ; then
 
390
            exit_failure_syntax "unexpected argument '$parm'"
 
391
        fi
 
392
        url="$parm"
 
393
        ;;
 
394
    esac
 
395
done
 
396
 
 
397
if [ -z "${url}" ] ; then
 
398
    exit_failure_syntax "file or URL argument missing"
 
399
fi
 
400
 
 
401
detectDE
 
402
 
 
403
if [ x"$DE" = x"" ]; then
 
404
    # if BROWSER variable is not set, check some well known browsers instead
 
405
    if [ x"$BROWSER" = x"" ]; then
 
406
        BROWSER=firefox:mozilla:netscape
 
407
    fi
 
408
    DE=generic
 
409
fi
 
410
 
 
411
case "$DE" in
 
412
    kde)
 
413
    open_kde "$url"
 
414
    ;;
 
415
 
 
416
    gnome)
 
417
    open_gnome "$url"
 
418
    ;;
 
419
 
 
420
    generic)
 
421
    open_generic "$url"
 
422
    ;;
 
423
 
 
424
    *)
 
425
    exit_failure_operation_impossible "no method available for opening '$url'"
 
426
    ;;
 
427
esac