about summary refs log tree commit diff
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2005-04-12 22:45:15 +0000
committerClint Adams <clint@users.sourceforge.net>2005-04-12 22:45:15 +0000
commitf82136ac94a7bc9e2d50223bbccd04a307a5a6d2 (patch)
treeb9e577dcc28241d3ea962d0bb6ca32f3f22c6fac
parentc15768c99dab0d3d12d8969f4377bef6c1e46c8e (diff)
downloadzsh-f82136ac94a7bc9e2d50223bbccd04a307a5a6d2.tar.gz
zsh-f82136ac94a7bc9e2d50223bbccd04a307a5a6d2.tar.xz
zsh-f82136ac94a7bc9e2d50223bbccd04a307a5a6d2.zip
* 21135: complete attached sessions after screen -x.
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_screen114
2 files changed, 119 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f2c6a4096..9997f0409 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-04-12  Clint Adams  <clint@zsh.org>
+
+	* 21135: Completion/Unix/Command/_screen: complete attached
+	sessions after screen -x.
+
 2005-04-11  Clint Adams  <clint@zsh.org>
 
 	* 21132: Completion/Unix/Type/_pdf, Completion/X/Command/_xpdf:
diff --git a/Completion/Unix/Command/_screen b/Completion/Unix/Command/_screen
new file mode 100644
index 000000000..c2ecd0382
--- /dev/null
+++ b/Completion/Unix/Command/_screen
@@ -0,0 +1,114 @@
+#compdef screen
+
+local curcontext="$curcontext" state line expl
+local scr_cmds sessions
+
+scr_cmds=(
+  acladd            aclchg            acldel            aclgrp
+  aclumask          activity          addacl            allpartial
+  altscreen         at                attrcolor         autodetach
+  autonuke          backtick          bce               bd_bc_down
+  bd_bc_left        bd_bc_right       bd_bc_up          bd_bell
+  bd_braille_table  bd_eightdot       bd_info           bd_link
+  bd_lower_left     bd_lower_right    bd_ncrc           bd_port
+  bd_scroll         bd_skip           bd_start_braille  bd_type
+  bd_upper_left     bd_upper_right    bd_width          bell_msg
+  bind              bindkey           blanker           blankerprg
+  break             breaktype         bufferfile        c1
+  caption           chacl             charset           chdir
+  clear             colon             command           compacthist
+  console           copy              crlf              debug
+  defautonuke       defbce            defbreaktype      defc1
+  defcharset        defencoding       defescape         defflow
+  defgr             defhstatus        defkanji          deflog
+  deflogin          defmode           defmonitor        defnonblock
+  defobuflimit      defscrollback     defshell          defsilence
+  defslowpaste      defutf8           defwrap           defwritelock
+  detach            digraph           dinfo             displays
+  dumptermcap       echo              encoding          escape
+  eval              exec              fit               flow
+  focus             gr                hardcopy          hardcopy_append
+  hardcopydir       hardstatus        height            help
+  history           hstatus           idle              ignorecase
+  info              kanji             kill              lastmsg
+  license           lockscreen        log               logfile
+  login             logtstamp         mapdefault        mapnotnext
+  maptimeout        markkeys          maxwin            meta
+  monitor           msgminwait        msgwait           multiuser
+  nethack           next              nonblock          number
+  obuflimit         only              other             partial
+  password          paste             pastefont         pow_break
+  pow_detach        pow_detach_msg    prev              printcmd
+  process           quit              readbuf           readreg
+  redisplay         register          remove            removebuf
+  reset             resize            screen            scrollback
+  select            sessionname       setenv            setsid
+  shell             shelltitle        silence           silencewait
+  sleep             slowpaste         sorendition       source
+  split             startup_message   stuff             su
+  suspend           term              termcap           termcapinfo
+  terminfo          time              title             umask
+  unsetenv          utf8              vbell             vbell_msg
+  vbellwait         verbose           version           wall
+  width             windowlist        windows           wrap
+  writebuf          writelock         xoff              xon
+  zmodem            zombie
+)
+
+_arguments -C \
+  "-a[force all capabilities into each window's termcap]" \
+  '-A[adapt all windows to the new display width & height]' \
+  "-c[read configuration file instead of '.screenrc']:config file:_files -/" \
+  '-d[detach the elsewhere running screen (with -r: reattach here)]: :->attached-sessions' \
+  '-dmS[start as daemon, screen session in detached mode]: :->detached-sessions' \
+  '-D[detach and logout remote (with -r: reattach here)]' \
+  '-e[change command characters]:command characters' \
+  '-f-[set flow control]:flow control:((n\:flow\ control\ off a\:flow\ control\ auto \:flow\ control\ on))' \
+  '-h[set the size of the scrollback history buffer]:buffer size' \
+  '-i[interrupt output sooner when flow control is on]' \
+  '(-l)-ln[login mode off (do not update utmp database)]' \
+  '(-ln)-l[login mode on (update utmp database)]' \
+  '(-)'{-ls,-list}'[list sessions/socket directory]' \
+  "-L[terminal's last character can be safely updated]" \
+  '-m[ignore $STY variable, do create a new screen session]' \
+  '-O[choose optimal output rather than exact vt100 emulation]' \
+  '-p[preselect the named window]:window number or name:((\=\:windowlist -\:blank\ window \:window\ number))' \
+  '-q[quiet startup, exit with non-zero return code if unsuccessful]' \
+  '-r[reattach to a detached screen process]: :->detached-sessions' \
+  '-R[reattach if possible, otherwise start a new session]' \
+  '-s[shell to execute rather than $SHELL]:shell name: _command_names -e' \
+  '-S[name this session <pid>.sockname instead of <pid>.<tty>.<host>]:session name' \
+  "-t[set title (window's name)]:title" \
+  '-T[use term as $TERM for windows, rather than "screen"]:terminal type:_terminals' \
+  '-U[tell screen to use UTF-8 encoding]' \
+  '(-)-v[print screen version]' \
+  '(-)-wipe[do nothing, clean up SockDir]' \
+  '-x[attach to a not detached screen (multi display mode)]: :->attached-sessions' \
+  '-X[execute command as a screen command in the specified session]:screencmd:(${scr_cmds[@]})' \
+  '*::arguments: _normal'
+
+if [[ -n $state ]]; then
+  case $state in
+    attached-sessions)
+      sessions=(
+        ${${${(M)${(f)"$(_call_program screen-sessions $words[1] \
+            -ls)"}:#*[Aa]ttached*}##[[:blank:]]}%%[[:blank:]]*}
+      )
+    ;;
+    detached-sessions)
+      sessions=(
+        ${${${(M)${(f)"$(_call_program screen-sessions $words[1] \
+            -ls)"}:#*[Dd]etached*}##[[:blank:]]}%%[[:blank:]]*}
+      )
+    ;;
+  esac
+
+  # check if initial PID is necessary to make sessions unambiguous
+  if [[ ${#${(u)sessions#*.}} -lt $#sessions ]]; then
+    _wanted screen-sessions expl "${state%-*} screen process" \
+	compadd -a sessions
+  else
+    _wanted screen-sessions expl "${state%-*} screen process" \
+	compadd ${sessions#*.}
+  fi
+fi