是否可以使用 zsh 的内置行编辑器 ( zle
) 将输入提供给子进程?也就是说,我想运行zlewrap mycommand
wherezlewrap
是一个 zsh 函数,并且mycommand
是任何只从 stdin 读取行的程序;zlewrap
将有效地将 zle 的行编辑功能提供给mycommand
. 这是在其模型上rlwrap
执行此操作,但使用 readline 而不是用于行编辑的 zle。
如果使用 GNU screen,您可以执行以下操作:
将一个名为的文件放入zf
您的$PATH
文件中:
#! /usr/bin/env zsh
zmodload -i zsh/zle
trap 'printf "\03"; exit' INT
HISTSIZE=100
while a=; vared -p "${2:-zle> }" -eh a; do
{
s=$(stty -g)
stty -echo -iexten -isig lnext '' werase '' eof '' rprnt '' kill ''
printf "%s\r" "$a"
print -rs -- "$a"
stty "$s"
} < $1
done
printf "\04"
Run Code Online (Sandbox Code Playgroud)
然后,在屏幕中运行过滤器
<Ctrl-A>:exec .!. zf /dev/pts/x "> "
Run Code Online (Sandbox Code Playgroud)
将 /dev/pts/x 替换为实际的 Windows pty(tty
窗口中命令的输出),并将 "> " 替换为要显示的提示。
由于 zsh 和应用程序都会以不一致的方式写入终端,因此偶尔会出现显示故障。
原文位于http://www.zsh.org/mla/users/2005/msg00186.html