about summary refs log tree commit diff
path: root/Completion/User/_mh
blob: c6c0182202355207679a9493b0495a86b6d21b8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#defcomp folder folders comp inc mark refile repl scan show next prev rmm pick whom mhn mhpath

# Completion for all possible MH commands.
# Alter the following two to your own mh directory and the directory
# where standard mh library files live.  (It works anyway, but this
# will save a little time.)

local mymhdir=~/Mail
local mhlib=/usr/lib/mh

local prev="$words[CURRENT-1]"

# To be on the safe side, check this exists and if not, get it anyway.
[[ -d $mymhdir ]] || mymhdir=$(mhpath +)

if [[ -iprefix - ]]; then
  # get list of options, which MH commands can generate themselves
  # awk is just too icky to use for this, sorry.  send me one if
  # you come up with it.
  compadd - $($words[1] -help | perl -ne 'if (/^\s*-\(?(\S+)/) {
    $n = $1;
    $n =~ s/\)//g;
    print $n =~ s/^\[([a-z]+)\]// ? "$n\n$1$n\n" : "$n\n";
  }')
  return
elif [[ -iprefix '+' || -iprefix '@' || "$prev" = -draftfolder ]]; then
  # Complete folder names.
  local mhpath

  if [[ $IPREFIX != '@' ]]; then
    [[ $IPREFIX = '+' ]] || IPREFIX=+
    mhpath=$mymhdir
  else
    mhpath=$(mhpath)
  fi

  # painless, or what?
  _path_files -W mhpath -/
elif [[ "$prev" = -(editor|(whatnow|rmm|show|more)proc) ]]; then
  compgen -c
elif [[ "$prev" = -file ]]; then
  compgen -f
elif [[ "$prev" = -(form|audit|filter) ]]; then
  # Need some MH template file, which may be in our own MH directory
  # or with the standard library.
  local mhfpath
  # This is the only place we need mhlib, so leave the test till here.
  [[ -d $mhlib ]] || { mhlib=$(mhparam mhlproc); mhlib=$mhlib:h; }
  mhfpath=($mymhdir $mhlib)

  compgen -W mhfpath -g '*(.)'
elif [[ "$prev" = -(no|)cc ]]; then
  compadd all to cc me
elif [[ "$prev" = -[rw]cache ]]; then
  compadd public private never ask
else
  # Generate sequences.
  local foldnam folddir f ret

  for f in $argv; do
    [[ $f = [@+]* ]] && foldnam=$f
  done
  if [[ $foldnam = '+'* ]]; then
    folddir=$mymhdir/${foldnam#+}
  elif [[ $foldnam = '@'* ]]; then
    folddir=$(mhpath)/${foldnam#@}
  else
    folddir=$(mhpath)
    # leaving foldnam empty works here
  fi

  compgen -s '$(mark $foldnam 2>/dev/null | awk -F: '\''{ print $1 }'\'')' &&
      ret=0
  compadd reply next cur prev first last all unseen && ret=0
  compgen -W folddir -g '<->' && ret=0

  return ret
fi