Usando o editor de linhas do zsh para envolver subprocessos

22

É possível usar o editor de linhas interno do zsh ( zle ) para alimentar a entrada de um subprocesso? Isto é, eu gostaria de executar zlewrap mycommand onde zlewrap é uma função zsh e mycommand é qualquer programa que apenas leia linhas de stdin; zlewrap efetivamente forneceria os recursos de edição de linha do zle para mycommand . Este é o modelo de rlwrap que faz exatamente isso, mas com readline e não zle for line edição.

    
por Gilles 06.01.2011 / 22:32

1 resposta

4

Aqui está como você pode fazer isso usando a tela GNU:

Coloque um arquivo chamado zf no seu $PATH com:

#! /usr/bin/env zsh
zmodload -i zsh/zle
trap 'printf ""; 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 ""

E, em seguida, execute o filtro na tela como

<Ctrl-A>:exec .!. zf /dev/pts/x "> "

Substitua / dev / pts / x pelo pty atual do Windows (saída do comando tty na janela) e ">" pelo prompt a ser exibido.

Haverá falhas visuais ocasionais como zsh e o aplicativo gravará no terminal de maneira não controlada.

Original no link

    
por 26.08.2012 / 22:04