zsh의 라인 편집기를 사용하여 서브 프로세스 둘러보기


22

zsh의 내장 라인 편집기 ( zle)를 사용하여 서브 프로세스에 입력을 공급할 수 있습니까? 즉, zsh 함수가있는 zlewrap mycommand곳 에서 stdin에서 행을 읽는 프로그램입니다. zle의 라인 편집 기능을 효과적으로 제공합니다 . 이것은 단지 이것을 수행 하는 모델에 있지만 라인 편집을 위해 zle이 아닌 readline을 사용합니다.zlewrapmycommandzlewrapmycommandrlwrap


2
도움이 될 것 같습니다 : zsh.org/mla/users/2004/msg00917.html . 단일 명령만큼 쉽지는 않지만 이 스크립트 를 프로그램에 적용 할 수 있습니다 (수정을 위해 후속 조치를 읽으십시오).
imgx64

솔루션을 생각할 때 내가 겪고있는 한 가지 문제는 ZLE에서 '편집'하고 싶을 때와 'mycommand'가 돌아 오기를 기다리고 싶을 때 어떻게 표시합니까? 한 줄만 반환합니까?
다항식

2
이와 같은 @polynomial 래퍼는 한 번에 한 줄씩 뒤에있는 프로세스로 돌아갑니다. 의 사용 rlwrap은 매우 널리 퍼져 있으며 아마도 사용했을 것입니다. mysql, sqlite, lftp 등과 같은 작은 의사 셸을 생각해보십시오. 모두 라인 프로세서 또는 라인 블록을 한 번에 한 줄씩 돌려주는 실제 편집기로 라인 편집기를 구현했습니다. rlwrapSTDIN을 허용하는 모든 프로그램에는 매우 명중하지만, 덜 광범위한 사람인 readline보다는 zle 스타일 바인딩 및 기능을 갖는 것이 좋습니다.
Caleb

당신에 대한 매뉴얼 봤어 zsh- cs.elte.hu/zsh-manual/zsh_14.html ? -귀하의 질문을 잘 이해하지 못하지만 Google에서 제목을 찾아서 해당 페이지를 찾았습니다. 도움이 될지 모르지만 모르겠습니다.
Kevdog777

1
좋아, 나는 당신의 질문에 1 년 넘게 답변되지 않은 것을 보았 기 때문에 방금 도와 주려고했습니다. 내 의견이 충분하지 않아서 죄송합니다.
Kevdog777

답변:


4

GNU 화면을 사용하는 방법은 다음과 같습니다.

라는 파일을 넣어 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의 원본

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.