mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 05:24:23 +01:00
51 lines
1.4 KiB
Plaintext
51 lines
1.4 KiB
Plaintext
# 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
|