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

« back to all changes in this revision

Viewing changes to .pc/debian-changes-1.1.0~rc1-2ubuntu4/scripts/xdg-email

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Marsden
  • Date: 2011-05-07 18:12:59 UTC
  • Revision ID: james.westby@ubuntu.com-20110507181259-yrlu64g4d33h3f5j
Tags: 1.1.0~rc1-2ubuntu4
* scripts/xdg-mime:
 - Fix detectDE to detect LXDE.
 - Create ~/.local/share/applications/mimeapps.list when needed in
   non-gnome/kde environments.

* scripts/xdg-email:
 - Fix detectDE to detect LXDE.
 - Added open_lxde shell function, used when LXDE detected.
 - Added run_sylpheed function, used to call sylpheed (LP: 779156).

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
desktop_file_to_binary()
 
314
{
 
315
    search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
 
316
    desktop="`basename "$1"`"
 
317
    IFS=:
 
318
    for dir in $search; do
 
319
        unset IFS
 
320
        [ "$dir" -a -d "$dir/applications" ] || continue
 
321
        file="$dir/applications/$desktop"
 
322
        [ -r "$file" ] || continue
 
323
        # Remove any arguments (%F, %f, %U, %u, etc.).
 
324
        command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word`"
 
325
        command="`which "$command"`"
 
326
        readlink -f "$command"
 
327
        return
 
328
    done
 
329
}
 
330
 
 
331
#----------------------------------------
 
332
# Checks for shared commands, e.g. --help
 
333
 
 
334
check_common_commands()
 
335
{
 
336
    while [ $# -gt 0 ] ; do
 
337
        parm="$1"
 
338
        shift
 
339
 
 
340
        case "$parm" in
 
341
            --help)
 
342
            usage
 
343
            echo "Use 'man xdg-email' or 'xdg-email --manual' for additional info."
 
344
            exit_success
 
345
            ;;
 
346
 
 
347
            --manual)
 
348
            manualpage
 
349
            exit_success
 
350
            ;;
 
351
 
 
352
            --version)
 
353
            echo "xdg-email 1.0.2"
 
354
            exit_success
 
355
            ;;
 
356
        esac
 
357
    done
 
358
}
 
359
 
 
360
check_common_commands "$@"
 
361
 
 
362
[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
 
363
if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
 
364
    # Be silent
 
365
    xdg_redirect_output=" > /dev/null 2> /dev/null"
 
366
else
 
367
    # All output to stderr
 
368
    xdg_redirect_output=" >&2"
 
369
fi
 
370
 
 
371
#--------------------------------------
 
372
# Checks for known desktop environments
 
373
# set variable DE to the desktop environments name, lowercase
 
374
 
 
375
detectDE()
 
376
{
 
377
    if [ x"$MAILER" != x"" ]; then DE=envvar;
 
378
    elif [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
 
379
    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
 
380
    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;
 
381
    elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
 
382
    elif [ x"$DESKTOP_SESSION" = x"LXDE" ]; then DE=lxde;
 
383
    elif [ -r ~/.muttrc ] && which mutt > /dev/null 2>&1; then
 
384
        DE=envvar
 
385
        MAILER="x-terminal-emulator -e mutt"
 
386
    else DE=""
 
387
    fi
 
388
}
 
389
 
 
390
#----------------------------------------------------------------------------
 
391
# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
 
392
# It also always returns 1 in KDE 3.4 and earlier
 
393
# Simply return 0 in such case
 
394
 
 
395
kfmclient_fix_exit_code()
 
396
{
 
397
    version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep '^KDE'`
 
398
    major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'`
 
399
    minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'`
 
400
    release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
 
401
    test "$major" -gt 3 && return $1
 
402
    test "$minor" -gt 5 && return $1
 
403
    test "$release" -gt 4 && return $1
 
404
    return 0
 
405
}
 
406
 
 
407
run_thunderbird()
 
408
{
 
409
    local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY ATTACH
 
410
    THUNDERBIRD="$1"
 
411
    MAILTO=$(echo "$2" | sed 's/^mailto://')
 
412
    echo "$MAILTO" | grep -qs "^?"
 
413
    if [ "$?" = "0" ] ; then
 
414
        MAILTO=$(echo "$MAILTO" | sed 's/^?//')
 
415
    else
 
416
        MAILTO=$(echo "$MAILTO" | sed 's/^/to=/' | sed 's/?/\&/')
 
417
    fi
 
418
 
 
419
    MAILTO=$(echo "$MAILTO" | sed 's/&/\n/g')
 
420
    TO=$(echo "$MAILTO" | grep '^to=' | sed 's/^to=//' | awk '{ printf "%s,",$0 }')
 
421
    CC=$(echo "$MAILTO" | grep '^cc=' | sed 's/^cc=//' | awk '{ printf "%s,",$0 }')
 
422
    BCC=$(echo "$MAILTO" | grep '^bcc=' | sed 's/^bcc=//' | awk '{ printf "%s,",$0 }')
 
423
    SUBJECT=$(echo "$MAILTO" | grep '^subject=' | tail -n 1)
 
424
    BODY=$(echo "$MAILTO" | grep '^body=' | tail -n 1)
 
425
    ATTACH=$(echo "$MAILTO" | sed 's/^attach=/\n\nfile:\/\//g' | awk '/^file:/ { printf "%s,",$0 }' | sed 's/,$//')
 
426
 
 
427
    if [ -z "$TO" ] ; then
 
428
        NEWMAILTO=
 
429
    else
 
430
        NEWMAILTO="to='$TO'"
 
431
    fi
 
432
    if [ -n "$CC" ] ; then
 
433
        NEWMAILTO="${NEWMAILTO},cc='$CC'"
 
434
    fi
 
435
    if [ -n "$BCC" ] ; then
 
436
        NEWMAILTO="${NEWMAILTO},bcc='$BCC'"
 
437
    fi
 
438
    if [ -n "$SUBJECT" ] ; then
 
439
        NEWMAILTO="${NEWMAILTO},$SUBJECT"
 
440
    fi
 
441
    if [ -n "$BODY" ] ; then
 
442
        NEWMAILTO="${NEWMAILTO},$BODY"
 
443
    fi
 
444
 
 
445
    if [ -n "$ATTACH" ] ; then
 
446
        NEWMAILTO="${NEWMAILTO},attachment='${ATTACH}'"
 
447
    fi
 
448
 
 
449
    NEWMAILTO=$(echo "$NEWMAILTO" | sed 's/^,//')
 
450
    DEBUG 1 "Running $THUNDERBIRD -compose \"$NEWMAILTO\""
 
451
    "$THUNDERBIRD" -compose "$NEWMAILTO"
 
452
    if [ $? -eq 0 ]; then
 
453
        exit_success
 
454
    else
 
455
        exit_failure_operation_failed
 
456
    fi
 
457
}
 
458
 
 
459
open_kde()
 
460
{
 
461
    local client kde_email_profile_name
 
462
    kde_email_profile_name=`kreadconfig --file emaildefaults --group Defaults --key Profile`
 
463
    client=`kreadconfig --file emaildefaults --group PROFILE_"$kde_email_profile_name" --key EmailClient | cut -d ' ' -f 1`
 
464
    echo $client | grep thunderbird > /dev/null 2>&1
 
465
    if [ $? -eq 0 ] ; then
 
466
        run_thunderbird "$client" "$1"
 
467
    fi
 
468
 
 
469
    if [ -f /etc/SuSE-release ] ; then
 
470
        # Workaround for SUSE 10.0
 
471
        [ -z "$client" ] && client="kmail"
 
472
        if ! which "$client" > /dev/null 2> /dev/null; then
 
473
            DEBUG 3 "KDE has $client configured as email client which isn't installed"
 
474
            if which gnome-open > /dev/null 2> /dev/null && which evolution > /dev/null 2> /dev/null; then
 
475
               DEBUG 3 "Try gnome-open instead"
 
476
               open_gnome "$1"
 
477
            fi
 
478
        fi
 
479
    fi
 
480
    DEBUG 1 "Running kmailservice \"$1\""
 
481
    if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
 
482
        KMAILSERVICE=`kde4-config --locate kmailservice --path exe 2>/dev/null`
 
483
    else
 
484
        KMAILSERVICE=`which kmailservice 2>/dev/null`
 
485
    fi
 
486
    # KDE uses locale's encoding when decoding the URI, so set it to UTF-8
 
487
    LC_ALL=C.UTF-8 $KMAILSERVICE "$1"
 
488
    kfmclient_fix_exit_code $?
 
489
 
 
490
    if [ $? -eq 0 ]; then
 
491
        exit_success
 
492
    else
 
493
        exit_failure_operation_failed
 
494
    fi
 
495
}
 
496
 
 
497
open_gnome()
 
498
{
 
499
    local client
 
500
    local desktop
 
501
    desktop=`xdg-mime query default "x-scheme-handler/mailto"`
 
502
    client=`desktop_file_to_binary "$browser"`
 
503
    echo $client | grep thunderbird > /dev/null 2>&1
 
504
    if [ $? -eq 0 ] ; then
 
505
        run_thunderbird "$client" "$1"
 
506
    fi
 
507
 
 
508
    if gvfs-open --help 2>/dev/null 1>&2; then
 
509
        DEBUG 1 "Running gvfs-open \"$1\""
 
510
        gvfs-open "$1"
 
511
    else
 
512
        DEBUG 1 "Running gnome-open \"$1\""
 
513
        gnome-open "$1"
 
514
    fi
 
515
 
 
516
    if [ $? -eq 0 ]; then
 
517
        exit_success
 
518
    else
 
519
        exit_failure_operation_failed
 
520
    fi
 
521
}
 
522
 
 
523
 
 
524
open_xfce()
 
525
{
 
526
    DEBUG 1 "Running exo-open \"$1\""
 
527
    exo-open "$1"
 
528
 
 
529
    if [ $? -eq 0 ]; then
 
530
        exit_success
 
531
    else
 
532
        exit_failure_operation_failed
 
533
    fi
 
534
}
 
535
 
 
536
open_envvar()
 
537
{
 
538
    local OLDIFS="$IFS"
 
539
    IFS=:
 
540
    for i in $MAILER; do
 
541
        IFS="$OLDIFS"
 
542
 
 
543
        eval "$i" '"$1"'
 
544
 
 
545
        if [ $? -eq 0 ]; then
 
546
            exit_success
 
547
        fi
 
548
    done
 
549
 
 
550
    exit_failure_operation_failed
 
551
}
 
552
 
 
553
open_generic()
 
554
{
 
555
    IFS=":"
 
556
    for browser in $BROWSER; do
 
557
        if [ x"$browser" != x"" ]; then
 
558
 
 
559
            browser_with_arg=`printf "$browser" "$1" 2>/dev/null`
 
560
            if [ $? -ne 0 ]; then browser_with_arg=$browser;
 
561
            fi
 
562
 
 
563
            if [ x"$browser_with_arg" = x"$browser" ]; then "$browser" "$1";
 
564
            else $browser_with_arg;
 
565
            fi
 
566
 
 
567
            if [ $? -eq 0 ]; then exit_success;
 
568
            fi
 
569
        fi
 
570
    done
 
571
 
 
572
    exit_failure_operation_impossible "no method available for opening '$1'"
 
573
}
 
574
 
 
575
url_encode()
 
576
{
 
577
result=$(echo "$1" | $utf8 | awk '
 
578
    BEGIN {
 
579
        for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0
 
580
        e = ""
 
581
        linenr = 1
 
582
    }
 
583
    {
 
584
        if ( linenr++ != 1 ) {
 
585
            e = e "%0D%0A"
 
586
        }
 
587
        for ( i=1; i<=length ($0); ++i ) {
 
588
            c = substr ($0, i, 1)
 
589
            if ( ord [c] > 127 ) {
 
590
                e = e "%" sprintf("%02X", ord [c])
 
591
            } else if ( c ~ /[@a-zA-Z0-9.-\\\/]/ ) {
 
592
                e = e c
 
593
            } else {
 
594
                e = e "%" sprintf("%02X", ord [c])
 
595
            }
 
596
        }
 
597
    }
 
598
    END {
 
599
        print e
 
600
    }
 
601
')
 
602
}
 
603
 
 
604
options=
 
605
mailto=
 
606
utf8="iconv -t utf8"
 
607
while [ $# -gt 0 ] ; do
 
608
    parm="$1"
 
609
    shift
 
610
 
 
611
    case "$parm" in
 
612
      --utf8)
 
613
        utf8="cat"
 
614
        ;;
 
615
 
 
616
      --to)
 
617
        if [ -z "$1" ] ; then
 
618
            exit_failure_syntax "email address argument missing for --to"
 
619
        fi
 
620
        url_encode "$1"
 
621
        options="${options}to=${result}&"
 
622
        shift
 
623
        ;;
 
624
 
 
625
      --cc)
 
626
        if [ -z "$1" ] ; then
 
627
             exit_failure_syntax "email address argument missing for --cc"
 
628
        fi
 
629
        url_encode "$1"
 
630
        options="${options}cc=${result}&"
 
631
        shift
 
632
        ;;
 
633
 
 
634
      --bcc)
 
635
        if [ -z "$1" ] ; then
 
636
            exit_failure_syntax "email address argument missing for --bcc"
 
637
        fi
 
638
        url_encode "$1"
 
639
        options="${options}bcc=${result}&"
 
640
        shift
 
641
        ;;
 
642
 
 
643
      --subject)
 
644
        if [ -z "$1" ] ; then
 
645
            exit_failure_syntax "text argument missing for --subject option"
 
646
        fi
 
647
        url_encode "$1"
 
648
        options="${options}subject=${result}&"
 
649
        shift
 
650
        ;;
 
651
 
 
652
      --body)
 
653
        if [ -z "$1" ] ; then
 
654
            exit_failure_syntax "text argument missing for --body option"
 
655
        fi
 
656
        url_encode "$1"
 
657
        options="${options}body=${result}&"
 
658
        shift
 
659
        ;;
 
660
 
 
661
      --attach)
 
662
        if [ -z "$1" ] ; then
 
663
            exit_failure_syntax "file argument missing for --attach option"
 
664
        fi
 
665
        check_input_file "$1"
 
666
        file=`readlink -f "$1"` # Normalize path
 
667
        if [ -z "$file" -o ! -f "$file" ] ; then
 
668
            exit_failure_file_missing "file '$1' does not exist"
 
669
        fi
 
670
 
 
671
        url_encode "$file"
 
672
        options="${options}attach=${result}&"
 
673
        shift
 
674
        ;;
 
675
 
 
676
      -*)
 
677
        exit_failure_syntax "unexpected option '$parm'"
 
678
        ;;
 
679
 
 
680
      mailto:*)
 
681
        mailto="$parm"
 
682
        ;;
 
683
 
 
684
      *@*)
 
685
        url_encode "$parm"
 
686
        if [ -z "${mailto}" ] ; then
 
687
            mailto="mailto:"${result}"?"
 
688
        else
 
689
            options="${options}to=${result}&"
 
690
        fi
 
691
        ;;
 
692
 
 
693
      *)
 
694
        exit_failure_syntax "unexpected argument '$parm'"
 
695
        ;;
 
696
    esac
 
697
done
 
698
 
 
699
if [ -z "${mailto}" ] ; then
 
700
    # TO address is optional
 
701
    mailto="mailto:?"
 
702
fi
 
703
 
 
704
case $mailto in
 
705
      *\?)
 
706
        mailto="${mailto}${options}"
 
707
        ;;
 
708
 
 
709
      *\?*)
 
710
        mailto="${mailto}&${options}"
 
711
        ;;
 
712
 
 
713
      *)
 
714
        mailto="${mailto}?${options}"
 
715
        ;;
 
716
esac
 
717
 
 
718
# Strip trailing ? and &
 
719
mailto=`echo "${mailto}"| sed 's/[?&]$//'`
 
720
 
 
721
# Shouldn't happen
 
722
[ x"${mailto}" != x"" ] || exit_failure_syntax
 
723
 
 
724
if which xdg-email-hook.sh > /dev/null 2> /dev/null; then
 
725
    xdg-email-hook.sh "${mailto}"
 
726
    if [ $? -eq 0 ]; then
 
727
        exit_success
 
728
    else
 
729
        exit_failure_operation_failed
 
730
    fi
 
731
fi
 
732
 
 
733
detectDE
 
734
 
 
735
if [ x"$DE" = x"" ]; then
 
736
    DE=generic
 
737
fi
 
738
 
 
739
# if BROWSER variable is not set, check some well known browsers instead
 
740
if [ x"$BROWSER" = x"" ]; then
 
741
    BROWSER=links2:links:lynx:w3m
 
742
    if [ -n "$DISPLAY" ]; then
 
743
        BROWSER=x-www-browser:firefox:mozilla:epiphany:konqueror:chromium-browser:google-chrome:$BROWSER
 
744
    fi
 
745
fi
 
746
 
 
747
case "$DE" in
 
748
    envvar)
 
749
    open_envvar "${mailto}"
 
750
    ;;
 
751
 
 
752
    kde)
 
753
    open_kde "${mailto}"
 
754
    ;;
 
755
 
 
756
    gnome)
 
757
    open_gnome "${mailto}"
 
758
    ;;
 
759
 
 
760
    xfce)
 
761
    open_xfce "${mailto}"
 
762
    ;;
 
763
 
 
764
    generic|lxde)
 
765
    open_generic "${mailto}"
 
766
    ;;
 
767
 
 
768
    *)
 
769
    exit_failure_operation_impossible "no method available for opening '${mailto}'"
 
770
    ;;
 
771
esac