mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef screen
 | |
| 
 | |
| local curcontext="$curcontext" state line expl
 | |
| local scr_cmds sessions
 | |
| 
 | |
| scr_cmds=(
 | |
|   acladd	aclchg		acldel		aclgrp		aclumask
 | |
|   activity	addacl		allpartial	at		attrcolor
 | |
|   autodetach	autonuke	backtick	bce		bell_msg
 | |
|   bind		bindkey		break		breaktype	bufferfile
 | |
|   c1		caption		charset		chdir		clear
 | |
|   colon		command		compacthist	console		copy
 | |
|   copy_reg	crlf		debug		defautonuke	defbce
 | |
|   defbreaktype	defc1		defcharset	defencoding	defescape
 | |
|   defflow	defgr		defhstatus	defkanji	deflog
 | |
|   deflogin	defmode		defmonitor	defobuflimit	defscrollback
 | |
|   defshell	defsilence	defslowpaste	defutf8		defwrap
 | |
|   defwritelock	defzombie	detach		digraph		dinfo
 | |
|   displays	dumptermcap	echo		encoding	escape
 | |
|   eval		exec		fit		flow		focus
 | |
|   gr		hardcopy	hardcopy_append	hardcopydir	hardstatus
 | |
|   height	help		history		hstatus		ignorecase
 | |
|   info		ins_reg		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		term
 | |
|   termcap	termcapinfo	terminfo	time		title
 | |
|   unsetenv	utf8		vbell		vbell_msg	vbellwait
 | |
|   verbose	version		wall		width		windowlist
 | |
|   windows	wrap		writebuf	writelock	xoff
 | |
|   xon		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)]' \
 | |
|   '-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
 |