mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Make line editor input go straight to the current TCP session.
 | |
| # Returns when the string $TCP_TALK_ESCAPE (default :) is read on its own.
 | |
| # Otherwise, $TCP_TALK_ESCAPE followed by whitespace at the start of a line
 | |
| # is stripped off and the rest of the line passed to the shell.
 | |
| #
 | |
| # History is not currently handled, because this is difficult.
 | |
| 
 | |
| : ${TCP_TALK_ESCAPE:=:}
 | |
| 
 | |
| tcp-accept-line-or-exit() {
 | |
|   emulate -L zsh
 | |
|   setopt extendedglob
 | |
|   local match mbegin mend
 | |
| 
 | |
|   if [[ $BUFFER = ${TCP_TALK_ESCAPE}[[:blank:]]#(#b)(*) ]]; then
 | |
|     if [[ -z $match[1] ]]; then
 | |
|       BUFFER=
 | |
|       zle -A .accept-line accept-line
 | |
|       PS1=$TCP_SAVE_PS1
 | |
|       unset TCP_SAVE_PS1
 | |
|       zle -I
 | |
|       print '\r[Normal keyboard input restored]' >&2
 | |
|     else
 | |
|       BUFFER=$match[1]
 | |
|     fi
 | |
|     zle .accept-line
 | |
|   else
 | |
|     # BUGS: is deleted from the command line and doesn't appear in
 | |
|     # the history.
 | |
| 
 | |
|     # The following attempt to get the BUFFER into the history falls
 | |
|     # foul of the fact that we need to accept the current line first.
 | |
|     # But we don't actually want to accept the current line at all.
 | |
|     # print -s -r - $BUFFER
 | |
| 
 | |
|     # This is my function to send data over a TCP connection; replace
 | |
|     # it with something else or nothing.
 | |
|     tcp_send $BUFFER
 | |
|     BUFFER=
 | |
|   fi
 | |
| }
 | |
| 
 | |
| TCP_SAVE_PS1=${PS1##\[T*\]}
 | |
| if [[ -o prompt_subst ]]; then
 | |
|   PS1="T[\$TCP_SESS]$TCP_SAVE_PS1"
 | |
| else
 | |
|   PS1="[T]$TCP_SAVE_PS1"
 | |
| fi
 | |
| zle -N tcp-accept-line-or-exit
 | |
| zle -A tcp-accept-line-or-exit accept-line
 |