सबप्रोसेस के चारों ओर लपेटने के लिए zsh के लाइन एडिटर का उपयोग करना


22

क्या यह संभव है कि एक उपप्रकार में zleइनपुट फीड करने के लिए zsh की बिल्ट-इन लाइन एडिटर ( ) का उपयोग किया जाए ? यही है, मैं दौड़ना चाहूंगा zlewrap mycommandजहां zlewrapएक zsh फ़ंक्शन है और mycommandकोई भी प्रोग्राम है जो सिर्फ स्टड से लाइनें पढ़ता है; zlewrapप्रभावी ढंग से करने के लिए zle लाइन संपादन क्षमताओं प्रदान करेगा mycommand। यह उस मॉडल पर है, rlwrapजो सिर्फ ऐसा करता है, लेकिन लाइन एडिटिंग के लिए रीडलाइन और ज़िल के साथ नहीं।


2
यह तब उपयोगी दिखता है: zsh.org/mla/users/2004/msg00917.html । यह एक आदेश के रूप में आसान नहीं है, लेकिन आप इस स्क्रिप्ट को अपने कार्यक्रम के लिए अनुकूलित कर सकते हैं (सुधार के लिए अनुवर्ती पढ़ें)।
imgx64

एक समस्या मेरे पास है जब मैं समाधानों के बारे में सोचता हूं कि आप कैसे इंगित करते हैं कि आप ZLE में 'संपादन' कब करना चाहते हैं और जब आप 'mycommand' के लौटने का इंतजार करना चाहते हैं? क्या यह केवल कभी एक पंक्ति में लौटता है?
बहुपद

2
@polynomial रैपर इस तरह एक बार में एक लाइन को उनके पीछे की प्रक्रिया में लौटाते हैं। उपयोग rlwrapकाफी व्यापक है और आपने शायद इसका उपयोग किया है। छोटी छद्म शैल चीजों के बारे में सोचें जो आपको mysql, sqlite, lftp, आदि जैसी चीज़ों में मिलती हैं। इन सभी में एक लाइन एडिटर का कुछ कार्यान्वयन होता है जो एक बार में लाइन या लाइनों के ब्लॉक को उनके पीछे वास्तविक प्रोसेसर पर लौटाता है। rlwrapकिसी भी कार्यक्रम के लिए बहुत करीने से हिट करता है जो STDIN को स्वीकार करता है, लेकिन यह अच्छा होगा कि रीडलाइन के बजाय zle शैली की बाइंडिंग और क्षमताएं हों, जो किसी से कम व्यापक हों।
कालेब

क्या आपने zsh- cs.elte.hu/zsh-manual/zsh_14.html के लिए मैनुअल को देखा है ? - मैं आपके प्रश्न को काफी नहीं समझता हूं, लेकिन शीर्षक को गूगलेड कर दिया, और उस पृष्ठ को ढूंढ लिया। यह मदद कर सकता है, लेकिन मुझे नहीं पता।
केवदोग K K

1
ठीक है, मैं सिर्फ मदद करने की कोशिश कर रहा था, क्योंकि मैं देखता हूं कि आपके सवाल का एक साल से अधिक समय में जवाब नहीं दिया गया है। क्षमा करें मेरी टिप्पणी पर्याप्त नहीं थी।
केवदोग K K

जवाबों:


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 "> "

वास्तविक विंडोज पीटीआई ( ttyविंडो में कमांड का आउटपुट ), और ">" प्रदर्शित करने के लिए संकेत के साथ देव / pts / x बदलें ।

ज़िश के रूप में कभी-कभार डिस्प्ले ग्लिच होंगे और एप्लिकेशन एक असंबद्ध तरीके से टर्मिनल को लिखेंगे।

Http://www.zsh.org/mla/users/2005/msg00186.html पर मूल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.