使用 zsh 的行编辑器来环绕子进程

使用 zsh 的行编辑器来环绕子进程

是否可以使用 zsh 的内置行编辑器 ( zle) 将输入提供给子进程?也就是说,我想运行zlewrap mycommandwherezlewrap是 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 和应用程序都会以不一致的方式写入终端,因此偶尔会出现显示故障。

原文于http://www.zsh.org/mla/users/2005/msg00186.html

相关内容