ZSH: कैसे सीधे ZLE विगेट्स?


12

दस्तावेज़ धारा 18.4 विजेट में कहता है , कि "विजेट का काम केवल कुछ छोटी कार्रवाई करना है"। लेकिन मुझे इन कार्यों को करने का एक सामान्य विवरण नहीं मिल रहा है, अर्थात कैसे एक विजेट को कॉल किया जाए।

मैंने उदाहरणों में देखा है (उदाहरण के लिए यह Q & A देखें ) कि विजेट्स कुंजियों का उपयोग करने के लिए बाध्य कर सकते हैं bindkey KEY WIDGET। फिर एक का उपयोग कर विजेट कॉल कर सकते हैं KEY

मैं टॉगल करना चाहता था set-local-historyऔर मैंने कोशिश की:

$ zle set-local-history 1
zle: widgets can only be called when ZLE is active

zle -hकाम नहीं है, लेकिन मुझे यहाँ तर्कों का विवरण मिला है । लेकिन लगता नहीं कि ऐसा कुछ है --call

मैं क्या गलत कर रहा हूं? बिना बाँध के विजेट को कॉल करना कैसे संभव है? मैं वर्तमान स्थिति कैसे प्रिंट कर सकता हूं? ( set-local-historyराज्य को जीतता है)

जवाबों:


9

आप विजेट को विजेट द्वारा निष्पादित कर सकते हैं execute-named-cmd, जो ESC-x(emacs बाइंडिंग) या :(vi बाइंडिंग) से बंधा है :

execute-named-cmd (ESC-x) (:) (unbound)

एक संपादक कमांड का नाम पढ़ें और इसे निष्पादित करें।

यह कमांड लाइन के नीचे एक मिनी-बफर खोलता है , जहां आप zle विजेट शुरू कर सकते हैं। (स्वतः पूर्णता उपलब्ध है!):

$ [ESC-x]
execute: set-[TAB]
set-local-history  set-mark-command

zle(स्थानीय इतिहास सहित) की स्थिति को क्वेरी करने के लिए, वैरिएबल $ZLE_STATE(केवल विजेट फ़ंक्शंस के अंदर पहुंच योग्य) का उपयोग करें:

ZLE_STATE (scalar)

इसमें अंतरिक्ष-पृथक शब्दों का एक सेट होता है जो वर्तमान ज़ेल स्थिति का वर्णन करता है।

वर्तमान में, दिखाए गए राज्य ओवरराइट-मोड या vi-प्रतिस्थापित विगेट्स द्वारा निर्धारित इन्सर्ट मोड हैं और क्या इतिहास कमांड सेट-लोकल-हिस्ट्री विजेट द्वारा नियंत्रित आयातित प्रविष्टियों पर जाएँगे। स्ट्रिंग में insert सम्‍मिलित है यदि वर्णों को कमांड लाइन पर डाला जाता है, मौजूदा वर्णों को दाईं ओर ले जाते हैं या overwriteयदि वर्ण मौजूदा वर्णों को अधिलेखित करने के लिए डाले जाते हैं। इसमें localhistoryअगर केवल स्थानीय इतिहास आदेशों का दौरा किया जाएगा या globalhistoryआयातित इतिहास आदेशों का भी दौरा किया जाएगा।

सबस्ट्रिंग को वर्णानुक्रम में क्रमबद्ध किया जाता है ताकि यदि आप भविष्य में प्रूफ के तरीके से दो विशिष्ट सब्सट्रेटिंग का परीक्षण करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi

से सभी उद्धरण man zshzle


उह, मुझे लगता है कि मैंने दोनों उद्धरण पहले ही देख लिए हैं, लेकिन मुझे तीन ब्रेसिज़ में मूल्य समझ में नहीं आया। मैन पेज कहता है: "ये विशेष पैरामीटर हमेशा विजेट फ़ंक्शंस में उपलब्ध होते हैं, लेकिन ZLE के बाहर किसी भी तरह से विशेष नहीं होते हैं।" इसका मतलब है, ZLE_STATE प्राप्त करने के लिए, मुझे फ़ंक्शन और कस्टम विजेट को परिभाषित करने की आवश्यकता है, है ना?
लम्बरी

@ लंबर: आप सही हैं, ZLE_STATEकेवल विजेट फ़ंक्शन के अंदर परिभाषित किया गया है। मैंने अपना जवाब परिष्कृत किया। आपका लक्ष्य क्या है? [जंगली अनुमान: अपने संकेत में स्थानीय / वैश्विक इतिहास को इंगित करने के लिए मैं एक विजेट का उपयोग करता हूं (i) एक शेल चर सेट करता हूं (यह विजेट के अंदर संभव है) और (ii) निष्पादित करें zle set-local-history।]
mpy

मेरा प्राथमिक लक्ष्य zle विगेट्स की अवधारणा को समझना था। सेट-लोकल-हिस्ट्री के साथ खेलते हुए, मैं जानना चाहता था कि क्या यह वर्तमान में ग्लोबल या लोकल पर सेट है। मैंने सोचा कि वर्तमान स्थिति प्राप्त करने के लिए हमें एक होना चाहिए (वर्तमान में सक्षम विकल्पों को प्राप्त करने के लिए "सेटटॉप" के समान)। मेरा मूल लक्ष्य पहले ही हल हो गया था इस प्रश्नोत्तर
लंबर

1
मैं उम्मीद करूँगा कि यदि परीक्षण " *globalhistory*insert*" के बजाय " " होना चाहिए*insert*globalhistory* कि उदाहरण के पहले वाक्य को पढ़ने के आधार पर ?
वोल्कर सीगल

@VolkerSiegel: एक बहुत अच्छी बात है, धन्यवाद! मैंने स्रोत कोड के साथ जांच की और स्वयं दिए गए उदाहरण की कोशिश की, यह निष्कर्ष निकाला कि मैन पेज में उदाहरण गलत है, न कि कथन ("वर्णानुक्रम में क्रमबद्ध")। मैंने अपना उत्तर संपादित किया और zsh- कार्यकर्ताओं की मेलिंग सूची के लिए एक रास्ता भेजूँगा
खसखस

1

यदि आप उपयोग कर रहे हैं तो आप tmuxबाध्य कुंजी को कॉल कर सकते हैं send-keys

उदाहरण:

# Current pane
$ tmux send-keys C-r

# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.