about summary refs log tree commit diff
path: root/Completion/X/Command/_mozilla
blob: 0be25b8d377c9750b55c453bddff4b9a4e4f3a4c (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#compdef mozilla mozilla-firefox mozilla-xremote-client firefox iceweasel=firefox

local curcontext="$curcontext" state line expl ret=1 suf
typeset -A opt_args

local popts="-installer -CreateProfile -P -ProfileWizard -ProfileManager -SelectProfile"
local -a mozopts

if [[ $service = *remote* ]]; then
  state=remote
else
  if [[ $service = *firefox* ]]; then
    mozopts=(
    '-browser[open browser window]' \
    '-console[start with debugging console]' \
    '-h[output help message]' \
    '-help[output help message]' \
    '-inspector[start with DOM Inspector]:URL to inspect:->location' \
    '-install-global-extension[install an extension]:extension to install:_files' \
    '-new-window[load URL in new window]:URL to load:->location' \
    '-new-tab[load URL in new tab]:URL to load:->location' \
    '-no-remote[run with multiple profiles]' \
    '-profile[specify profile file]:profile file:_files' \
    '-v[show version]' \
    '-version[show version]' \
    '-safe-mode[disable extensions and themes for this session]'
    )
  else
    mozopts=(
      "($popts)-installer[start with 4.x migration window]"
      "($popts)-ProfileWizard[start with profile wizard]"
      "($popts)-SelectProfile[start with profile selection dialog]"
      '-splash[enable splash screen]'
      '-chat[start with IRC client]'
      '-news[start with news]'
      '-venkman[start with JavaScript debugger]'
      '-terminal[start with command line terminal]'
      '-mail[start with mail]'
      '-compose[start with messenger compose]:URL:_urls' 
    )
  fi
  _x_arguments -C  $mozopts \
    '-height[height of startup window]:height' \
    '(-)'{-h,-help}'[show usage message]' \
      "($popts)-CreateProfile:profile" \
    '-width[width of startup window]:width' \
    '(-)'{-v,-version}'[show the version number and build date]' \
    "($popts)-P[start with profile]:profile:->profile" \
    "($popts)-ProfileManager[start with profile manager]" \
    '-UILocale:locale' \
    '-contentLocale:locale' \
    '-remote[execute a command in an existing Mozilla]:remote command:->remote' \
    '-jsconsole[start with JavaScript Console]' \
    '-edit[start with editor]:URL:_urls' \
    '-chrome[load the specified chrome]:URL:_urls' \
    '*:location:->urls' && ret=0
fi

[[ "$state" = "urls" ]] &&
  _files "$@" && return 0

# Handle mozilla remote commands
if [[ "$state" = "remote" ]]; then  
  local -a remote_commands
  remote_commands=(openURL openFile saveAs mailto addBookmark ping)

  compset -P '*\('
  if compset -S '(|\\)\)*'; then
    set - -S "" "$@"
  else
    set - -S"${${QIPREFIX:+)}:-\)}$compstate[quote] " "$@"
  fi
  case $IPREFIX in
    openURL*)
      if compset -P "*,"; then
        _wanted option expl 'option' compadd "$@" new-tab new-window && ret=0
      else
        compset -S ',*'
        state=urls
      fi
    ;;
    addBookmark*) state=urls;;
    openFile*) _files "$@" -W ~;;
    saveAs*) 
      if compset -P "*,"; then
        _wanted types expl 'data type' \
            compadd "$@" -M 'm:{a-zA-Z}={A-Za-z}' HTML Text PostScript && ret=0
      else
        compset -S ",*" || suf=","
        _files -qS "$suf" -W ~ && ret=0
      fi
    ;;
    mailto*)
      _email_addresses -s, -c && ret=0
    ;;
    *)
      compset -S '(|\\)\(*' || suf="${${QIPREFIX:+(}:-\(}"
      _wanted commands expl 'remote command' \
          compadd -qS "$suf" -M 'm:{a-zA-Z}={A-Za-z}' -a \
                  remote_commands && ret=0
    ;;
  esac
fi

if [[ "$state" = "urls" ]]; then
  # Complete mozilla urls
  if compset -P about: ; then
    _wanted values expl 'about what' \
        compadd "$@" authors blank cache document fonts global hype image-cache \
            license logo memory-cache mozilla plugins && ret=0
  elif compset -P news: ; then
    _newsgroups "$@" && ret=0
  elif compset -P mailto: ; then
    _email_addresses -c && ret=0
  else
    _tags prefixes
    while _tags; do
      while _next_label prefixes expl 'URL prefix' "$@"; do
        _urls "$expl[@]" && ret=0
	compset -S '[^:]*'
        compadd -S '' "$expl[@]" about: news: mailto: mocha: javascript: && ret=0
      done
      (( ret )) || return 0
    done
  fi
fi

if [[ $state == "profile" ]]; then
  if [[ $service == *firefox* ]]; then
    local -a profiles text profiledir
    case "$OSTYPE" in
    darwin*) profiledir=~/"Library/Application Support/Firefox" ;;
    *)       profiledir=~/.mozilla/firefox/ ;;
    esac
    profiles=(${(f)"$(< ${profiledir}/profiles.ini)"})
    profiles=(${(M)${profiles}:#(\[Profile|(Path|Name)=)*})
    text=${(F)profiles}
    profiles=(${(f)text//(#b)\[Profile([0-9]##)\]
Name=([^
]##|)
Path=([^
]##|)/$match[2]})
    profiles=(${profiles%:})
    compadd $profiles
  else
    compadd ~/.mozilla/*/*.slt(\:h\:t)
  fi
fi

return ret