about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 11:17:48 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 11:17:48 +0000
commit894cc61b1e21f508bfb0d31a1c855b00954fb0ba (patch)
tree213eb2184b38c8c645fd4e8f30c8fd553ccf540a /Completion
parent062fe4c5e8e8635416d7e1ab51f33a75d3301182 (diff)
downloadzsh-894cc61b1e21f508bfb0d31a1c855b00954fb0ba.tar.gz
zsh-894cc61b1e21f508bfb0d31a1c855b00954fb0ba.tar.xz
zsh-894cc61b1e21f508bfb0d31a1c855b00954fb0ba.zip
moved from Completion/Base/_jobs
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Zsh/Type/_jobs83
1 files changed, 83 insertions, 0 deletions
diff --git a/Completion/Zsh/Type/_jobs b/Completion/Zsh/Type/_jobs
new file mode 100644
index 000000000..bc52643ff
--- /dev/null
+++ b/Completion/Zsh/Type/_jobs
@@ -0,0 +1,83 @@
+#autoload
+
+local expl disp jobs job jids pfx='%' desc how expls
+
+if [[ "$1" = -t ]]; then
+  zstyle -T ":completion:${curcontext}:jobs" prefix-needed &&
+      [[ "$PREFIX" != %* && compstate[nmatches] -ne 0 ]] && return 1
+  shift
+fi
+zstyle -t ":completion:${curcontext}:jobs" prefix-hidden && pfx=''
+zstyle -T ":completion:${curcontext}:jobs" verbose       && desc=yes
+
+if [[ "$1" = -r ]]; then
+  jids=( "${(@k)jobstates[(R)running*]}" )
+  shift
+  expls='running job'
+elif [[ "$1" = -s ]]; then
+  jids=( "${(@k)jobstates[(R)suspended*]}" )
+  shift
+  expls='suspended job'
+else
+  [[ "$1" = - ]] && shift
+  jids=( "${(@k)jobtexts}" )
+  expls=job
+fi
+
+if [[ -n "$desc" ]]; then
+  disp=()
+  for job in "$jids[@]"; do
+    [[ -n "$desc" ]] &&
+        disp=( "$disp[@]" "${pfx}${(r:2:: :)job} -- ${(r:COLUMNS-8:: :)jobtexts[$job]}" )
+  done
+fi
+
+zstyle -s ":completion:${curcontext}:jobs" numbers how
+
+if [[ "$how" = (yes|true|on|1) ]]; then
+  jobs=( "$jids[@]" )
+else
+  local texts i text str tmp num max=0
+
+  # Find shortest unambiguous strings.
+
+  texts=( "$jobtexts[@]" )
+  jobs=()
+  for i in "$jids[@]"; do
+    text="$jobtexts[$i]"
+    str="${text%% *}"
+    if [[ "$text" = *\ * ]]; then
+      text="${text#* }"
+    else
+      text=""
+    fi
+    tmp=( "${(@M)texts:#${str}*}" )
+    num=1
+    while [[ -n "$text" && $#tmp -ge 2 ]]; do
+      str="${str} ${text%% *}"
+      if [[ "$text" = *\ * ]]; then
+        text="${text#* }"
+      else
+        text=""
+      fi
+      tmp=( "${(@M)texts:#${str}*}" )
+      (( num++ ))
+    done
+
+    [[ num -gt max ]] && max="$num"
+
+    jobs=( "$jobs[@]" "$str" )
+  done
+
+  if [[ "$how" = [0-9]## && max -gt how ]]; then
+    jobs=( "$jids[@]" )
+  else
+    [[ -z "$pfx" && -n "$desc" ]] && disp=( "${(@)disp#%}" )
+  fi
+fi
+
+if [[ -n "$desc" ]]; then
+  _wanted jobs expl "$expls" compadd "$@" -ld disp - "%$^jobs[@]"
+else
+  _wanted jobs expl "$expls" compadd "$@" - "%$^jobs[@]"
+fi