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

« back to all changes in this revision

Viewing changes to .pc/gnome-3.0.diff/scripts/xdg-email

  • Committer: Bazaar Package Importer
  • Author(s): Chris Coulson
  • Date: 2011-04-08 02:00:05 UTC
  • Revision ID: james.westby@ubuntu.com-20110408020005-w273n8dprc3nylw6
Tags: 1.1.0~rc1-2ubuntu2
* Fix LP: #670128 - gnome-open uses firefox while it's not the preferred
  browser. Backport upstream changes to use the x-scheme-handler types
  for checking/setting the default browser/mail client in xdg-settings
  and xdg-email. In addition to this, we fix xdg-mime to get/set
  default mimetype handlers using the users mimeapps.list, rather than
  the defaults.list, which doesn't work anywhere
  - add debian/patches/gnome-3.0.diff
  - update debian/patches/series

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
#---------------------------------------------
 
3
#   xdg-email
 
4
#
 
5
#   Utility script to open the users favorite email program, using the
 
6
#       RFC 2368 mailto: URI spec
 
7
#
 
8
#   Refer to the usage() function below for usage.
 
9
#
 
10
#   Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org>
 
11
#   Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org>
 
12
#   Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
 
13
#   Copyright 2006, Jeremy White <jwhite@codeweavers.com>
 
14
#
 
15
#   LICENSE:
 
16
#
 
17
#   Permission is hereby granted, free of charge, to any person obtaining a
 
18
#   copy of this software and associated documentation files (the "Software"),
 
19
#   to deal in the Software without restriction, including without limitation
 
20
#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
21
#   and/or sell copies of the Software, and to permit persons to whom the
 
22
#   Software is furnished to do so, subject to the following conditions:
 
23
#
 
24
#   The above copyright notice and this permission notice shall be included
 
25
#   in all copies or substantial portions of the Software.
 
26
#
 
27
#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
28
#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
29
#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 
30
#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 
31
#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 
32
#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 
33
#   OTHER DEALINGS IN THE SOFTWARE.
 
34
#
 
35
#---------------------------------------------
 
36
 
 
37
manualpage()
 
38
{
 
39
cat << _MANUALPAGE
 
40
Name
 
41
 
 
42
xdg-email - command line tool for sending mail using the user's preferred
 
43
e-mail composer
 
44
 
 
45
Synopsis
 
46
 
 
47
xdg-email [--utf8] [--cc address] [--bcc address] [--subject text] [--body text
 
48
] [--attach file] [ mailto-uri | address(es) ]
 
49
 
 
50
xdg-email { --help | --manual | --version }
 
51
 
 
52
Description
 
53
 
 
54
xdg-email opens the user's preferred e-mail composer in order to send a mail to
 
55
address(es) or mailto-uri. RFC2368 defines mailto: URIs. xdg-email limits
 
56
support to, cc, subject and body fields in mailto-uri, all other fields are
 
57
silently ignored. address(es) must follow the syntax of RFC822. Multiple
 
58
addresses may be provided as separate arguments.
 
59
 
 
60
All information provided on the command line is used to prefill corresponding
 
61
fields in the user's e-mail composer. The user will have the opportunity to
 
62
change any of this information before actually sending the e-mail.
 
63
 
 
64
xdg-email is for use inside a desktop session only. It is not recommended to
 
65
use xdg-email as root.
 
66
 
 
67
See http://portland.freedesktop.org/EmailConfig for information on how the user
 
68
can change the e-mail composer that is used.
 
69
 
 
70
Options
 
71
 
 
72
--utf8
 
73
    Indicates that all command line options that follow are in utf8. Without
 
74
    this option, command line options are expected to be encoded according to
 
75
    locale. If the locale already specifies utf8 this option has no effect.
 
76
    This option does not affect mailto URIs that are passed on the command
 
77
    line.
 
78
--cc address
 
79
    Specify a recipient to be copied on the e-mail.
 
80
--bcc address
 
81
    Specify a recipient to be blindly copied on the e-mail.
 
82
--subject text
 
83
    Specify a subject for the e-mail.
 
84
--body text
 
85
    Specify a body for the e-mail. Since the user will be able to make changes
 
86
    before actually sending the e-mail, this can be used to provide the user
 
87
    with a template for the e-mail. text may contain linebreaks.
 
88
--attach file
 
89
 
 
90
    Specify an attachment for the e-mail. file must point to an existing file.
 
91
 
 
92
    Some e-mail applications require the file to remain present after xdg-email
 
93
    returns.
 
94
 
 
95
--help
 
96
    Show command synopsis.
 
97
--manual
 
98
    Show this manualpage.
 
99
--version
 
100
    Show the xdg-utils version information.
 
101
 
 
102
Environment Variables
 
103
 
 
104
xdg-email honours the following environment variables:
 
105
 
 
106
XDG_UTILS_DEBUG_LEVEL
 
107
    Setting this environment variable to a non-zero numerical value makes
 
108
    xdg-email do more verbose reporting on stderr. Setting a higher value
 
109
    increases the verbosity.
 
110
 
 
111
Exit Codes
 
112
 
 
113
An exit code of 0 indicates success while a non-zero exit code indicates
 
114
failure. The following failure codes can be returned:
 
115
 
 
116
1
 
117
    Error in command line syntax.
 
118
2
 
119
    One of the files passed on the command line did not exist.
 
120
3
 
121
    A required tool could not be found.
 
122
4
 
123
    The action failed.
 
124
5
 
125
    No permission to read one of the files passed on the command line.
 
126
 
 
127
Configuration
 
128
 
 
129
Visit http://portland.freedesktop.org/EmailConfig for information how to
 
130
configure xdg-email to use the email client of your choice.
 
131
 
 
132
Examples
 
133
 
 
134
xdg-email 'Jeremy White <jwhite@example.com>'
 
135
 
 
136
xdg-email --attach /tmp/logo.png \
 
137
          --subject 'Logo contest' \
 
138
          --body 'Attached you find the logo for the contest.' \
 
139
          'jwhite@example.com'
 
140
 
 
141
xdg-email --subject 'Your password is about to expire' \
 
142
          'jwhite@example.com' 'bastian@example.com' 'whipple@example.com'
 
143
 
 
144
_MANUALPAGE
 
145
}
 
146
 
 
147
usage()
 
148
{
 
149
cat << _USAGE
 
150
xdg-email - command line tool for sending mail using the user's preferred
 
151
e-mail composer
 
152
 
 
153
Synopsis
 
154
 
 
155
xdg-email [--utf8] [--cc address] [--bcc address] [--subject text] [--body text
 
156
] [--attach file] [ mailto-uri | address(es) ]
 
157
 
 
158
xdg-email { --help | --manual | --version }
 
159
 
 
160
_USAGE
 
161
}
 
162
 
 
163
#@xdg-utils-common@
 
164
 
 
165
#----------------------------------------------------------------------------
 
166
#   Common utility functions included in all XDG wrapper scripts
 
167
#----------------------------------------------------------------------------
 
168
 
 
169
DEBUG()
 
170
{
 
171
  [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
 
172
  [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
 
173
  shift
 
174
  echo "$@" >&2
 
175
}
 
176
 
 
177
#-------------------------------------------------------------
 
178
# Exit script on successfully completing the desired operation
 
179
 
 
180
exit_success()
 
181
{
 
182
    if [ $# -gt 0 ]; then
 
183
        echo "$@"
 
184
        echo
 
185
    fi
 
186
 
 
187
    exit 0
 
188
}
 
189
 
 
190
 
 
191
#-----------------------------------------
 
192
# Exit script on malformed arguments, not enough arguments
 
193
# or missing required option.
 
194
# prints usage information
 
195
 
 
196
exit_failure_syntax()
 
197
{
 
198
    if [ $# -gt 0 ]; then
 
199
        echo "xdg-email: $@" >&2
 
200
        echo "Try 'xdg-email --help' for more information." >&2
 
201
    else
 
202
        usage
 
203
        echo "Use 'man xdg-email' or 'xdg-email --manual' for additional info."
 
204
    fi
 
205
 
 
206
    exit 1
 
207
}
 
208
 
 
209
#-------------------------------------------------------------
 
210
# Exit script on missing file specified on command line
 
211
 
 
212
exit_failure_file_missing()
 
213
{
 
214
    if [ $# -gt 0 ]; then
 
215
        echo "xdg-email: $@" >&2
 
216
    fi
 
217
 
 
218
    exit 2
 
219
}
 
220
 
 
221
#-------------------------------------------------------------
 
222
# Exit script on failure to locate necessary tool applications
 
223
 
 
224
exit_failure_operation_impossible()
 
225
{
 
226
    if [ $# -gt 0 ]; then
 
227
        echo "xdg-email: $@" >&2
 
228
    fi
 
229
 
 
230
    exit 3
 
231
}
 
232
 
 
233
#-------------------------------------------------------------
 
234
# Exit script on failure returned by a tool application
 
235
 
 
236
exit_failure_operation_failed()
 
237
{
 
238
    if [ $# -gt 0 ]; then
 
239
        echo "xdg-email: $@" >&2
 
240
    fi
 
241
 
 
242
    exit 4
 
243
}
 
244
 
 
245
#------------------------------------------------------------
 
246
# Exit script on insufficient permission to read a specified file
 
247
 
 
248
exit_failure_file_permission_read()
 
249
{
 
250
    if [ $# -gt 0 ]; then
 
251
        echo "xdg-email: $@" >&2
 
252
    fi
 
253
 
 
254
    exit 5
 
255
}
 
256
 
 
257
#------------------------------------------------------------
 
258
# Exit script on insufficient permission to write a specified file
 
259
 
 
260
exit_failure_file_permission_write()
 
261
{
 
262
    if [ $# -gt 0 ]; then
 
263
        echo "xdg-email: $@" >&2
 
264
    fi
 
265
 
 
266
    exit 6
 
267
}
 
268
 
 
269
check_input_file()
 
270
{
 
271
    if [ ! -e "$1" ]; then
 
272
        exit_failure_file_missing "file '$1' does not exist"
 
273
    fi
 
274
    if [ ! -r "$1" ]; then
 
275
        exit_failure_file_permission_read "no permission to read file '$1'"
 
276
    fi
 
277
}
 
278
 
 
279
check_vendor_prefix()
 
280
{
 
281
    file_label="$2"
 
282
    [ -n "$file_label" ] || file_label="filename"
 
283
    file=`basename "$1"`
 
284
    case "$file" in
 
285
       [a-zA-Z]*-*)
 
286
         return
 
287
         ;;
 
288
    esac
 
289
 
 
290
    echo "xdg-email: $file_label '$file' does not have a proper vendor prefix" >&2
 
291
    echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
 
292
    echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
 
293
    echo "Use --novendor to override or 'xdg-email --manual' for additional info." >&2
 
294
    exit 1
 
295
}
 
296
 
 
297
check_output_file()
 
298
{
 
299
    # if the file exists, check if it is writeable
 
300
    # if it does not exists, check if we are allowed to write on the directory
 
301
    if [ -e "$1" ]; then
 
302
        if [ ! -w "$1" ]; then
 
303
            exit_failure_file_permission_write "no permission to write to file '$1'"
 
304
        fi
 
305
    else
 
306
        DIR=`dirname "$1"`
 
307
        if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
 
308
            exit_failure_file_permission_write "no permission to create file '$1'"
 
309
        fi
 
310
    fi
 
311
}
 
312
 
 
313
#----------------------------------------
 
314
# Checks for shared commands, e.g. --help
 
315
 
 
316
check_common_commands()
 
317
{
 
318
    while [ $# -gt 0 ] ; do
 
319
        parm="$1"
 
320
        shift
 
321
 
 
322
        case "$parm" in
 
323
            --help)
 
324
            usage
 
325
            echo "Use 'man xdg-email' or 'xdg-email --manual' for additional info."
 
326
            exit_success
 
327
            ;;
 
328
 
 
329
            --manual)
 
330
            manualpage
 
331
            exit_success
 
332
            ;;
 
333
 
 
334
            --version)
 
335
            echo "xdg-email 1.0.2"
 
336
            exit_success
 
337
            ;;
 
338
        esac
 
339
    done
 
340
}
 
341
 
 
342
check_common_commands "$@"
 
343
 
 
344
[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
 
345
if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
 
346
    # Be silent
 
347
    xdg_redirect_output=" > /dev/null 2> /dev/null"
 
348
else
 
349
    # All output to stderr
 
350
    xdg_redirect_output=" >&2"
 
351
fi
 
352
 
 
353
#--------------------------------------
 
354
# Checks for known desktop environments
 
355
# set variable DE to the desktop environments name, lowercase
 
356
 
 
357
detectDE()
 
358
{
 
359
    if [ x"$MAILER" != x"" ]; then DE=envvar;
 
360
    elif [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
 
361
    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
 
362
    elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
 
363
    elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
 
364
    elif [ x"$DESKTOP_SESSION" = x"LXDE" ]; then DE=lxde;
 
365
    elif [ -r ~/.muttrc ] && which mutt > /dev/null 2>&1; then
 
366
        DE=envvar
 
367
        MAILER="x-terminal-emulator -e mutt"
 
368
    else DE=""
 
369
    fi
 
370
}
 
371
 
 
372
#----------------------------------------------------------------------------
 
373
# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
 
374
# It also always returns 1 in KDE 3.4 and earlier
 
375
# Simply return 0 in such case
 
376
 
 
377
kfmclient_fix_exit_code()
 
378
{
 
379
    version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep '^KDE'`
 
380
    major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'`
 
381
    minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'`
 
382
    release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
 
383
    test "$major" -gt 3 && return $1
 
384
    test "$minor" -gt 5 && return $1
 
385
    test "$release" -gt 4 && return $1
 
386
    return 0
 
387
}
 
388
 
 
389
run_thunderbird()
 
390
{
 
391
    local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY ATTACH
 
392
    THUNDERBIRD="$1"
 
393
    MAILTO=$(echo "$2" | sed 's/^mailto://')
 
394
    echo "$MAILTO" | grep -qs "^?"
 
395
    if [ "$?" = "0" ] ; then
 
396
        MAILTO=$(echo "$MAILTO" | sed 's/^?//')
 
397
    else
 
398
        MAILTO=$(echo "$MAILTO" | sed 's/^/to=/' | sed 's/?/\&/')
 
399
    fi
 
400
 
 
401
    MAILTO=$(echo "$MAILTO" | sed 's/&/\n/g')
 
402
    TO=$(echo "$MAILTO" | grep '^to=' | sed 's/^to=//' | awk '{ printf "%s,",$0 }')
 
403
    CC=$(echo "$MAILTO" | grep '^cc=' | sed 's/^cc=//' | awk '{ printf "%s,",$0 }')
 
404
    BCC=$(echo "$MAILTO" | grep '^bcc=' | sed 's/^bcc=//' | awk '{ printf "%s,",$0 }')
 
405
    SUBJECT=$(echo "$MAILTO" | grep '^subject=' | tail -n 1)
 
406
    BODY=$(echo "$MAILTO" | grep '^body=' | tail -n 1)
 
407
    ATTACH=$(echo "$MAILTO" | sed 's/^attach=/\n\nfile:\/\//g' | awk '/^file:/ { printf "%s,",$0 }' | sed 's/,$//')
 
408
 
 
409
    if [ -z "$TO" ] ; then
 
410
        NEWMAILTO=
 
411
    else
 
412
        NEWMAILTO="to='$TO'"
 
413
    fi
 
414
    if [ -n "$CC" ] ; then
 
415
        NEWMAILTO="${NEWMAILTO},cc='$CC'"
 
416
    fi
 
417
    if [ -n "$BCC" ] ; then
 
418
        NEWMAILTO="${NEWMAILTO},bcc='$BCC'"
 
419
    fi
 
420
    if [ -n "$SUBJECT" ] ; then
 
421
        NEWMAILTO="${NEWMAILTO},$SUBJECT"
 
422
    fi
 
423
    if [ -n "$BODY" ] ; then
 
424
        NEWMAILTO="${NEWMAILTO},$BODY"
 
425
    fi
 
426
 
 
427
    if [ -n "$ATTACH" ] ; then
 
428
        NEWMAILTO="${NEWMAILTO},attachment='${ATTACH}'"
 
429
    fi
 
430
 
 
431
    NEWMAILTO=$(echo "$NEWMAILTO" | sed 's/^,//')
 
432
    DEBUG 1 "Running $THUNDERBIRD -compose \"$NEWMAILTO\""
 
433
    "$THUNDERBIRD" -compose "$NEWMAILTO"
 
434
    if [ $? -eq 0 ]; then
 
435
        exit_success
 
436
    else
 
437
        exit_failure_operation_failed
 
438
    fi
 
439
}
 
440
 
 
441
open_kde()
 
442
{
 
443
    local client kde_email_profile_name
 
444
    kde_email_profile_name=`kreadconfig --file emaildefaults --group Defaults --key Profile`
 
445
    client=`kreadconfig --file emaildefaults --group PROFILE_"$kde_email_profile_name" --key EmailClient | cut -d ' ' -f 1`
 
446
    echo $client | grep thunderbird > /dev/null 2>&1
 
447
    if [ $? -eq 0 ] ; then
 
448
        run_thunderbird "$client" "$1"
 
449
    fi
 
450
 
 
451
    if [ -f /etc/SuSE-release ] ; then
 
452
        # Workaround for SUSE 10.0
 
453
        [ -z "$client" ] && client="kmail"
 
454
        if ! which "$client" > /dev/null 2> /dev/null; then
 
455
            DEBUG 3 "KDE has $client configured as email client which isn't installed"
 
456
            if which gnome-open > /dev/null 2> /dev/null && which evolution > /dev/null 2> /dev/null; then
 
457
               DEBUG 3 "Try gnome-open instead"
 
458
               open_gnome "$1"
 
459
            fi
 
460
        fi
 
461
    fi
 
462
    DEBUG 1 "Running kmailservice \"$1\""
 
463
    if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
 
464
        KMAILSERVICE=`kde4-config --locate kmailservice --path exe 2>/dev/null`
 
465
    else
 
466
        KMAILSERVICE=`which kmailservice 2>/dev/null`
 
467
    fi
 
468
    # KDE uses locale's encoding when decoding the URI, so set it to UTF-8
 
469
    LC_ALL=C.UTF-8 $KMAILSERVICE "$1"
 
470
    kfmclient_fix_exit_code $?
 
471
 
 
472
    if [ $? -eq 0 ]; then
 
473
        exit_success
 
474
    else
 
475
        exit_failure_operation_failed
 
476
    fi
 
477
}
 
478
 
 
479
open_gnome()
 
480
{
 
481
    local client
 
482
    client=`gconftool-2 --get /desktop/gnome/url-handlers/mailto/command | cut -d ' ' -f 1` || ""
 
483
    echo $client | grep thunderbird > /dev/null 2>&1
 
484
    if [ $? -eq 0 ] ; then
 
485
        run_thunderbird "$client" "$1"
 
486
    fi
 
487
 
 
488
    if gvfs-open --help 2>/dev/null 1>&2; then
 
489
        DEBUG 1 "Running gvfs-open \"$1\""
 
490
        gvfs-open "$1"
 
491
    else
 
492
        DEBUG 1 "Running gnome-open \"$1\""
 
493
        gnome-open "$1"
 
494
    fi
 
495
 
 
496
    if [ $? -eq 0 ]; then
 
497
        exit_success
 
498
    else
 
499
        exit_failure_operation_failed
 
500
    fi
 
501
}
 
502
 
 
503
 
 
504
open_xfce()
 
505
{
 
506
    DEBUG 1 "Running exo-open \"$1\""
 
507
    exo-open "$1"
 
508
 
 
509
    if [ $? -eq 0 ]; then
 
510
        exit_success
 
511
    else
 
512
        exit_failure_operation_failed
 
513
    fi
 
514
}
 
515
 
 
516
open_envvar()
 
517
{
 
518
    local OLDIFS="$IFS"
 
519
    IFS=:
 
520
    for i in $MAILER; do
 
521
        IFS="$OLDIFS"
 
522
 
 
523
        eval "$i" '"$1"'
 
524
 
 
525
        if [ $? -eq 0 ]; then
 
526
            exit_success
 
527
        fi
 
528
    done
 
529
 
 
530
    exit_failure_operation_failed
 
531
}
 
532
 
 
533
open_generic()
 
534
{
 
535
    IFS=":"
 
536
    for browser in $BROWSER; do
 
537
        if [ x"$browser" != x"" ]; then
 
538
 
 
539
            browser_with_arg=`printf "$browser" "$1" 2>/dev/null`
 
540
            if [ $? -ne 0 ]; then browser_with_arg=$browser;
 
541
            fi
 
542
 
 
543
            if [ x"$browser_with_arg" = x"$browser" ]; then "$browser" "$1";
 
544
            else $browser_with_arg;
 
545
            fi
 
546
 
 
547
            if [ $? -eq 0 ]; then exit_success;
 
548
            fi
 
549
        fi
 
550
    done
 
551
 
 
552
    exit_failure_operation_impossible "no method available for opening '$1'"
 
553
}
 
554
 
 
555
url_encode()
 
556
{
 
557
result=$(echo "$1" | $utf8 | awk '
 
558
    BEGIN {
 
559
        for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0
 
560
        e = ""
 
561
        linenr = 1
 
562
    }
 
563
    {
 
564
        if ( linenr++ != 1 ) {
 
565
            e = e "%0D%0A"
 
566
        }
 
567
        for ( i=1; i<=length ($0); ++i ) {
 
568
            c = substr ($0, i, 1)
 
569
            if ( ord [c] > 127 ) {
 
570
                e = e "%" sprintf("%02X", ord [c])
 
571
            } else if ( c ~ /[@a-zA-Z0-9.-\\\/]/ ) {
 
572
                e = e c
 
573
            } else {
 
574
                e = e "%" sprintf("%02X", ord [c])
 
575
            }
 
576
        }
 
577
    }
 
578
    END {
 
579
        print e
 
580
    }
 
581
')
 
582
}
 
583
 
 
584
options=
 
585
mailto=
 
586
utf8="iconv -t utf8"
 
587
while [ $# -gt 0 ] ; do
 
588
    parm="$1"
 
589
    shift
 
590
 
 
591
    case "$parm" in
 
592
      --utf8)
 
593
        utf8="cat"
 
594
        ;;
 
595
 
 
596
      --to)
 
597
        if [ -z "$1" ] ; then
 
598
            exit_failure_syntax "email address argument missing for --to"
 
599
        fi
 
600
        url_encode "$1"
 
601
        options="${options}to=${result}&"
 
602
        shift
 
603
        ;;
 
604
 
 
605
      --cc)
 
606
        if [ -z "$1" ] ; then
 
607
             exit_failure_syntax "email address argument missing for --cc"
 
608
        fi
 
609
        url_encode "$1"
 
610
        options="${options}cc=${result}&"
 
611
        shift
 
612
        ;;
 
613
 
 
614
      --bcc)
 
615
        if [ -z "$1" ] ; then
 
616
            exit_failure_syntax "email address argument missing for --bcc"
 
617
        fi
 
618
        url_encode "$1"
 
619
        options="${options}bcc=${result}&"
 
620
        shift
 
621
        ;;
 
622
 
 
623
      --subject)
 
624
        if [ -z "$1" ] ; then
 
625
            exit_failure_syntax "text argument missing for --subject option"
 
626
        fi
 
627
        url_encode "$1"
 
628
        options="${options}subject=${result}&"
 
629
        shift
 
630
        ;;
 
631
 
 
632
      --body)
 
633
        if [ -z "$1" ] ; then
 
634
            exit_failure_syntax "text argument missing for --body option"
 
635
        fi
 
636
        url_encode "$1"
 
637
        options="${options}body=${result}&"
 
638
        shift
 
639
        ;;
 
640
 
 
641
      --attach)
 
642
        if [ -z "$1" ] ; then
 
643
            exit_failure_syntax "file argument missing for --attach option"
 
644
        fi
 
645
        check_input_file "$1"
 
646
        file=`readlink -f "$1"` # Normalize path
 
647
        if [ -z "$file" -o ! -f "$file" ] ; then
 
648
            exit_failure_file_missing "file '$1' does not exist"
 
649
        fi
 
650
 
 
651
        url_encode "$file"
 
652
        options="${options}attach=${result}&"
 
653
        shift
 
654
        ;;
 
655
 
 
656
      -*)
 
657
        exit_failure_syntax "unexpected option '$parm'"
 
658
        ;;
 
659
 
 
660
      mailto:*)
 
661
        mailto="$parm"
 
662
        ;;
 
663
 
 
664
      *@*)
 
665
        url_encode "$parm"
 
666
        if [ -z "${mailto}" ] ; then
 
667
            mailto="mailto:"${result}"?"
 
668
        else
 
669
            options="${options}to=${result}&"
 
670
        fi
 
671
        ;;
 
672
 
 
673
      *)
 
674
        exit_failure_syntax "unexpected argument '$parm'"
 
675
        ;;
 
676
    esac
 
677
done
 
678
 
 
679
if [ -z "${mailto}" ] ; then
 
680
    # TO address is optional
 
681
    mailto="mailto:?"
 
682
fi
 
683
 
 
684
case $mailto in
 
685
      *\?)
 
686
        mailto="${mailto}${options}"
 
687
        ;;
 
688
 
 
689
      *\?*)
 
690
        mailto="${mailto}&${options}"
 
691
        ;;
 
692
 
 
693
      *)
 
694
        mailto="${mailto}?${options}"
 
695
        ;;
 
696
esac
 
697
 
 
698
# Strip trailing ? and &
 
699
mailto=`echo "${mailto}"| sed 's/[?&]$//'`
 
700
 
 
701
# Shouldn't happen
 
702
[ x"${mailto}" != x"" ] || exit_failure_syntax
 
703
 
 
704
if which xdg-email-hook.sh > /dev/null 2> /dev/null; then
 
705
    xdg-email-hook.sh "${mailto}"
 
706
    if [ $? -eq 0 ]; then
 
707
        exit_success
 
708
    else
 
709
        exit_failure_operation_failed
 
710
    fi
 
711
fi
 
712
 
 
713
detectDE
 
714
 
 
715
if [ x"$DE" = x"" ]; then
 
716
    DE=generic
 
717
fi
 
718
 
 
719
# if BROWSER variable is not set, check some well known browsers instead
 
720
if [ x"$BROWSER" = x"" ]; then
 
721
    BROWSER=links2:links:lynx:w3m
 
722
    if [ -n "$DISPLAY" ]; then
 
723
        BROWSER=x-www-browser:firefox:mozilla:epiphany:konqueror:chromium-browser:google-chrome:$BROWSER
 
724
    fi
 
725
fi
 
726
 
 
727
case "$DE" in
 
728
    envvar)
 
729
    open_envvar "${mailto}"
 
730
    ;;
 
731
 
 
732
    kde)
 
733
    open_kde "${mailto}"
 
734
    ;;
 
735
 
 
736
    gnome)
 
737
    open_gnome "${mailto}"
 
738
    ;;
 
739
 
 
740
    xfce)
 
741
    open_xfce "${mailto}"
 
742
    ;;
 
743
 
 
744
    generic|lxde)
 
745
    open_generic "${mailto}"
 
746
    ;;
 
747
 
 
748
    *)
 
749
    exit_failure_operation_impossible "no method available for opening '${mailto}'"
 
750
    ;;
 
751
esac