about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Base/Core/_main_complete3
-rw-r--r--Completion/Unix/Command/_calendar40
-rw-r--r--Completion/Zsh/Command/_command2
-rw-r--r--Completion/Zsh/Command/_precommand3
4 files changed, 39 insertions, 9 deletions
diff --git a/Completion/Base/Core/_main_complete b/Completion/Base/Core/_main_complete
index b6f676d43..a2bf8e144 100644
--- a/Completion/Base/Core/_main_complete
+++ b/Completion/Base/Core/_main_complete
@@ -32,6 +32,9 @@ local func funcs ret=1 tmp _compskip format nm call match min max i num\
       _saved_insert="${compstate[insert]}" \
       _saved_colors="$ZLS_COLORS"
 
+# _precommand sets this to indicate we are following a precommand modifier
+local -a precommands
+
 typeset -U _lastdescr _comp_ignore _comp_colors
 
 [[ -z "$curcontext" ]] && curcontext=:::
diff --git a/Completion/Unix/Command/_calendar b/Completion/Unix/Command/_calendar
index 10adfb700..a79fc7298 100644
--- a/Completion/Unix/Command/_calendar
+++ b/Completion/Unix/Command/_calendar
@@ -1,12 +1,34 @@
 #compdef calendar
 
-_arguments \
-  '-a[process files of all users]' \
-  '-A[print today and the following num days]:number of days:' \
-  '-b[enforce special KOI8 date calculation mode]' \
-  '-B[print today and the previous num days]:number of days:' \
-  '-f[use file as the default calendar]:calendar file:_files' \
-  '-l[print today and the following num days]:number of days:' \
-  '-w[print today and the following num days only if today is Friday]:number of days:' \
-  '-t[act as though today is the date specified]:date:'
+if [[ $+functions[calendar] -eq 1 && -z $precommands[(r)command] ]]; then
+  # The shell function is loaded, and we're not instructed to
+  # use an external command, so complete that.
+  _arguments \
+    '-a[show all calendar items]' \
+    '-b[brief, display first line only]' \
+    '-d[move events to done file]' \
+    '-D[never move events to done file]' \
+    '-r[show all remaining items from start or now]' \
+    '-s[use sched to schedule a warning]' \
+    '-v[verbose]' \
+    '-B[select number of lines to display]:lines: ' \
+    '-C[select calendar file]:calendar file:_path_files' \
+    '-n[select max number of events]:max number of events: ' \
+    '-S[select show programme]:show programme:_command_names' \
+    '1:date/time: ' \
+    '(-r)2:end date/time: '
+else
+  # This is only one particular version of calendar.
+  # Some variant of BSD, I think.
 
+  _arguments \
+    '-a[process files of all users]' \
+    '-A[print today and the following num days]:number of days:' \
+    '-b[enforce special KOI8 date calculation mode]' \
+    '-B[print today and the previous num days]:number of days:' \
+    '-f[use file as the default calendar]:calendar file:_files' \
+    '-l[print today and the following num days]:number of days:' \
+    '-w[print today and the following num days only if today is Friday]:number of days:' \
+    '-t[act as though today is the date specified]:date:'
+
+fi
diff --git a/Completion/Zsh/Command/_command b/Completion/Zsh/Command/_command
index 72d7b6e99..7cfb52c2f 100644
--- a/Completion/Zsh/Command/_command
+++ b/Completion/Zsh/Command/_command
@@ -2,6 +2,8 @@
 
 local ret
 
+# indicate if this is a precommand modifier
+[[ $service = command ]] && precommands+=(command)
 if [[ CURRENT -ge 3 ]]; then
   compset -n 2
   _normal && ret=0
diff --git a/Completion/Zsh/Command/_precommand b/Completion/Zsh/Command/_precommand
index f45688fc7..12f45ca31 100644
--- a/Completion/Zsh/Command/_precommand
+++ b/Completion/Zsh/Command/_precommand
@@ -1,5 +1,8 @@
 #compdef - nohup eval time rusage noglob nocorrect exec catchsegv aoss
 
+# precommands is made local in _main_complete
+precommands+=($words[1])
+
 shift words
 (( CURRENT-- ))