是否可以使用 zsh 的内置行编辑器 ( zle
) 将输入提供给子进程?也就是说,我想运行zlewrap mycommand
wherezlewrap
是 zsh 函数,并且mycommand
是任何仅从 stdin 读取行的程序;zlewrap
将有效地为mycommand
.这是在模型上rlwrap
它就是这样做的,但是使用 readline 而不是 zle 进行行编辑。
答案1
如果使用 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"
然后,在屏幕中运行过滤器
<Ctrl-A>:exec .!. zf /dev/pts/x "> "
将 /dev/pts/x 替换为实际的 Windows pty(tty
窗口中命令的输出),并将 "> " 替换为要显示的提示。
由于 zsh 和应用程序都会以不一致的方式写入终端,因此偶尔会出现显示故障。