Alt işlemleri sarmak için zsh'ın satır düzenleyicisini kullanma


22

zleGirdiyi bir alt işleme beslemek için zsh'nin yerleşik çizgi düzenleyicisini ( ) kullanmak mümkün müdür ? Yani, bir zsh fonksiyonunun zlewrap mycommandnerede zlewrapolduğunu ve mycommandsadece stdin'den satır okuyan herhangi bir programın çalışmasını istiyorum ; zlewrapetkin bir şekilde zle'ın çizgi düzenleme yeteneklerini sağlar mycommand. Bu rlwrapsadece bunu yapan modelde , ancak satır düzenleme için okuma çizgisi ve sıfır değil.


2
Bu yardımcı görünüyor: zsh.org/mla/users/2004/msg00917.html . Tek bir komut kadar kolay değildir, ancak bu betiği programınıza uyarlayabilirsiniz (düzeltmeleri takip edin).
imgx64

Çözümleri düşündüğümde karşılaştığım bir sorun, ZLE'de ne zaman 'düzenleme' yapmak istediğinizi ve 'komutumun' ne zaman gelmesini beklemek istediğinizi nasıl belirtirsiniz? Sadece bir satır geri dönüyor mu?
polinom

2
Bu gibi @polynomial sarmalayıcılar, her seferinde bir satır arkasındaki sürece döndürür. Kullanımı rlwrapoldukça yaygındır ve muhtemelen kullandınız. MySQL, sqlite, lftp, vb. Gibi şeylerde elde ettiğiniz küçük sözde kabuk olaylarını düşünün. Hepsi bir seferde satırlarında veya satır bloklarında arkalarında bulunan işlemciye geri dönen bir satır düzenleyicisinin bazı uygulamalarına sahiptir. rlwrapSTDIN'i kabul eden herhangi bir program için gayet iyi vurur, ancak daha az kapsamlı olan okuma satırlarından ziyade zle tarzı bağlamalar ve yeteneklere sahip olmak güzel olurdu.
Caleb

zsh- cs.elte.hu/zsh-manual/zsh_14.html kullanım kılavuzuna baktınız mı? - Sorunuzu tam olarak anlamadım, ancak başlığı Googled ve bu sayfayı buldum. Yardımcı olabilir, ama bilmiyorum.
Kevdog777

1
Tamam, sadece yardım etmeye çalışıyordum, sorunuzun bir yıldır cevaplanmadığını görüyorum. Üzgünüm, yorumum yeterince iyi değildi.
Kevdog777,

Yanıtlar:


4

GNU ekranını kullanıyorsanız nasıl yapabilirsiniz:

Adlı bir dosya koyun zfsenin içinde $PATHbirlikte:

#! /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"

Ve sonra, filtreyi ekranda çalıştırın.

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

/ Dev / pts / x ttykomutunu asıl Windows pty ( pencerede komutun çıktısı ) ve ">" ile istemi değiştirin.

Zaman zaman hem zsh hem de uygulama terminale kayıtsız bir şekilde yazacak gibi ara sıra ekran hataları ortaya çıkacaktır.

Http://www.zsh.org/mla/users/2005/msg00186.html adresinde orijinal

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.