From 5c1f3b65a6f5abeae8459f41adb8fd2316971515 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 6 Feb 2003 12:21:49 +0000 Subject: 18202: New TCP function system plus small error message change in ztcp. --- Functions/TCP/tcp_talk | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Functions/TCP/tcp_talk (limited to 'Functions/TCP/tcp_talk') diff --git a/Functions/TCP/tcp_talk b/Functions/TCP/tcp_talk new file mode 100644 index 000000000..9376b9436 --- /dev/null +++ b/Functions/TCP/tcp_talk @@ -0,0 +1,50 @@ +# 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 -- cgit 1.4.1