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

Gil*_*il' 22 zsh line-editor

是否可以使用 zsh 的内置行编辑器 ( zle) 将输入提供给子进程?也就是说,我想运行zlewrap mycommandwherezlewrap是一个 zsh 函数,并且mycommand是任何只从 stdin 读取行的程序;zlewrap将有效地将 zle 的行编辑功能提供给mycommand. 这是在其模型上rlwrap执行此操作,但使用 readline 而不是用于行编辑的 zle。

Sté*_*las 4

如果使用 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