~ubuntu-branches/ubuntu/vivid/bash-completion/vivid-proposed

« back to all changes in this revision

Viewing changes to completions/mutt

  • Committer: Package Import Robot
  • Author(s): Angel Abad
  • Date: 2011-02-08 09:39:13 UTC
  • mfrom: (5.1.8 sid)
  • Revision ID: package-import@ubuntu.com-20110208093913-89h9hx9eq5j7vjpw
Tags: 1:1.3-1ubuntu1
* Merge from debian unstable. (LP: #715057) Remaining changes:
  - debian/patches/disable-avahi-browse.diff: Disable avahi-browse since
    it scales poorly in the current form:
    + Refresh patch
  - debian/patches/apt-get-changelog.patch:
    + Re-work patch because contrib dir no longer exists in upstream
      distribution.
* Dropped chages, applied upstream:
  - Fix p4 completion
  - Fix typo in openssl completion
  - Fix error while loading service(8) completions

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# mutt completion
 
2
#
 
3
# Mutt doesn't have an "addressbook" like Pine, but it has aliases and
 
4
# a "query" function to retrieve addresses, so that's what we use here.
 
5
 
 
6
have mutt || have muttng && {
 
7
 
 
8
# @param $1 (cur) Current word to complete
 
9
_muttaddr()
 
10
{
 
11
    _muttaliases "$1"
 
12
    _muttquery "$1"
 
13
 
 
14
    COMPREPLY=( "${COMPREPLY[@]}" $( compgen -u -- "$1" ) )
 
15
 
 
16
    return 0
 
17
} # _muttaddr()
 
18
 
 
19
 
 
20
# Find muttrc to use
 
21
# @output  muttrc filename
 
22
_muttrc()
 
23
{
 
24
    # Search COMP_WORDS for '-F muttrc' or '-Fmuttrc' argument
 
25
    set -- "${COMP_WORDS[@]}"
 
26
    while [ $# -gt 0 ]; do
 
27
        if [ "${1:0:2}" = -F ]; then
 
28
            if [ ${#1} -gt 2 ]; then
 
29
                muttrc="$(dequote "${1:2}")"
 
30
            else
 
31
                shift
 
32
                [ "$1" ] && muttrc="$(dequote "$1")"
 
33
            fi
 
34
            break
 
35
        fi
 
36
        shift
 
37
    done
 
38
 
 
39
    if [ -z "$muttrc" ]; then
 
40
        if [ -f ~/.${muttcmd}rc ]; then
 
41
            muttrc="~/.${muttcmd}rc"
 
42
        elif [ -f ~/.${muttcmd}/${muttcmd}rc ]; then
 
43
            muttrc="~/.${muttcmd}/${muttcmd}rc"
 
44
        fi
 
45
    fi
 
46
    printf "%s" "$muttrc"
 
47
} # _muttrc()
 
48
 
 
49
 
 
50
# Recursively build list of sourced config files
 
51
# @param $1  List of config files found so far
 
52
# @param $2  Config file to process
 
53
# @output  List of config files
 
54
_muttconffiles()
 
55
{
 
56
    local file sofar
 
57
    local -a newconffiles
 
58
 
 
59
    sofar=" $1 "
 
60
    shift
 
61
    while [[ "$1" ]]; do
 
62
        newconffiles=( $(sed -n 's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' $(eval echo $1) ) )
 
63
        for file in "${newconffiles[@]}"; do
 
64
            [[ ! -f "$file" || "${sofar/ ${file} / }" != "$sofar" ]] &&
 
65
                continue
 
66
            sofar="$sofar $file"
 
67
            sofar=" $(eval _muttconffiles \"$sofar\" $file) "
 
68
        done
 
69
        shift
 
70
    done
 
71
    printf '%s\n' $sofar
 
72
} # _muttconffiles()
 
73
 
 
74
 
 
75
# @param $1 (cur) Current word to complete
 
76
_muttaliases()
 
77
{
 
78
    local cur=$1 muttrc muttcmd=${COMP_WORDS[0]}
 
79
    local -a conffiles aliases
 
80
 
 
81
    muttrc=$(_muttrc)
 
82
    [ -z "$muttrc" ] && return 0
 
83
 
 
84
    conffiles=( $(eval _muttconffiles $muttrc $muttrc) )
 
85
    aliases=( $( sed -n 's|^alias[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' \
 
86
        $(eval echo "${conffiles[@]}") ) )
 
87
    COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "${aliases[*]}" -- "$cur" ) )
 
88
 
 
89
    return 0
 
90
}
 
91
 
 
92
 
 
93
# @param $1 (cur) Current word to complete
 
94
_muttquery()
 
95
{
 
96
    local cur=$1 querycmd muttcmd=${COMP_WORDS[0]}
 
97
    local -a queryresults
 
98
 
 
99
    querycmd="$( $muttcmd -Q query_command | sed -e 's|^query_command=\"\(.*\)\"$|\1|' -e 's|%s|'$cur'|' )"
 
100
    if [[ -z "$cur" || -z "$querycmd" ]]; then
 
101
        queryresults=()
 
102
    else
 
103
        queryresults=( $( $querycmd | \
 
104
            sed -n '2,$s|^\([^[:space:]]\{1,\}\).*|\1|p' ) )
 
105
    fi
 
106
 
 
107
    COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "${queryresults[*]}" \
 
108
        -- "$cur" ) )
 
109
 
 
110
    return 0
 
111
}
 
112
 
 
113
 
 
114
# @param $1 (cur) Current word to complete
 
115
_muttfiledir()
 
116
{
 
117
    local cur=$1 folder muttrc spoolfile muttcmd=${COMP_WORDS[0]}
 
118
 
 
119
    muttrc=$(_muttrc)
 
120
    if [[ $cur == [=+]* ]]; then
 
121
        folder="$( $muttcmd -F "$muttrc" -Q folder | sed -e 's|^folder=\"\(.*\)\"$|\1|' )"
 
122
        : folder:=~/Mail
 
123
 
 
124
        # Match any file in $folder beginning with $cur
 
125
        # (minus the leading '=' sign).
 
126
        _compopt_o_filenames
 
127
        COMPREPLY=( $( compgen -f -- "$folder/${cur:1}" ) )
 
128
        COMPREPLY=( ${COMPREPLY[@]#$folder/} )
 
129
        return 0
 
130
    elif [ "$cur" == !* ]; then
 
131
        spoolfile="$( $muttcmd -F "$muttrc" -Q spoolfile | \
 
132
            sed -e 's|^spoolfile=\"\(.*\)\"$|\1|' )"
 
133
        [ ! -z "$spoolfile" ] && eval cur="${cur/^!/$spoolfile}";
 
134
    fi
 
135
    _filedir
 
136
 
 
137
    return 0
 
138
} # _muttfiledir
 
139
 
 
140
 
 
141
_mutt()
 
142
{
 
143
    local cur prev
 
144
    _get_comp_words_by_ref -n =+! cur prev
 
145
    #cur=`_get_cword =+!`
 
146
    #prev=`_get_pword =+!`
 
147
 
 
148
    COMPREPLY=()
 
149
 
 
150
    case $cur in
 
151
    -*)
 
152
        COMPREPLY=( $( compgen -W '-A -a -b -c -e -f -F -H -i -m -n \
 
153
            -p -Q -R -s -v -x -y -z -Z -h' -- "$cur" ) )
 
154
        return 0
 
155
        ;;
 
156
    *)
 
157
        case $prev in
 
158
        -a|-f|-F|-H|-i)
 
159
            _muttfiledir "$cur"
 
160
            return 0
 
161
            ;;
 
162
        -A)
 
163
            _muttaliases "$cur"
 
164
            return 0
 
165
            ;;
 
166
        -e|-m|-Q|-s|-h|-p|-R|-v|-y|-z|-Z)
 
167
            return 0
 
168
            ;;
 
169
        *)
 
170
            _muttaddr "$cur"
 
171
            return 0
 
172
            ;;
 
173
        esac
 
174
        ;;
 
175
    esac
 
176
} # _mutt()
 
177
complete -F _mutt -o default mutt muttng
 
178
} # have mutt
 
179
 
 
180
# Local variables:
 
181
# mode: shell-script
 
182
# sh-basic-offset: 4
 
183
# sh-indent-comment: t
 
184
# indent-tabs-mode: nil
 
185
# End:
 
186
# ex: ts=4 sw=4 et filetype=sh