फोकस खो जाने पर iTerm2 पर "^ [[O] और" ^ [[I "दिखाई देता है


23

मैं yosemite पर iTerm2 2.1.1 का उपयोग कर रहा हूं। कोई tmux नहीं।

जब iTerm फोकस खो देता है (जब Cmd-Tab द्वारा किसी अन्य एप्लिकेशन पर स्विच किया जाता है या किसी अन्य विंडो पर क्लिक किया जाता है), a ^[[Iऔर ^[[Oलगता है कि टर्मिनल को भेजा जा रहा है। यह ^[[I^[[Oविम में प्रकट होने, या अधिक निराशाजनक होने का कारण बनता है , यह संयोजन एक और छोटा बफर खोलता है।

नमूना: शुरू करने के बाद कई बार सीएमडी-टैब दबाना cat

% cat
^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I

यह केवल iTerm पर होता है न कि Terminal.app पर। इसके अलावा, यह बैश या श पर प्रजनन करता है, इसलिए यह एक zsh मुद्दा नहीं लगता है। कुछ Googling ने सुझाव दिया कि यह एक "फ़ोकस" मुद्दा है, लेकिन टर्मिनल के अर्थ में "फ़ोकस" क्या है, और क्या इसे अक्षम करने या इससे बचने का कोई तरीका है?


ऐसा लगता है जब मैं जापानी (विम में) लिख रहा हूं, लेकिन फिर भी मुझे यकीन नहीं है कि कार्रवाई का क्या कारण है ...
ओशोयू

जवाबों:


25

के अनुसार इस :

खोए हुए / प्राप्त किए गए फ़ोकस की रिपोर्टिंग के लिए समर्थन जोड़ें। esc [; 1004h इसे चालू करता है; तब टर्मिनल esc भेजता है [I ध्यान केंद्रित करते समय, esc [O जब डी-फोकसिंग करता है। अक्षम करने के लिए esc [? 1004l भेजें।

Cmd- Rफोकस रिपोर्टिंग बंद हो जाएगा रीसेट करने के लिए (धन्यवाद करने के लिए इस )


1
Cmd-Rमेरे लिए जादू का क्रम है
bruceg

इतना मददगार, धन्यवाद। यह मैं खोजने के लिए काफी समय लगा तो एसईओ इस गूगल: मैक iterm iterm2 प्रदर्शन क्लिपबोर्ड सामग्री vim पूर्व बफर फोकस
BSB

11

मेरे पास इस उत्तर का परीक्षण करने के लिए एक मैक काम नहीं है, लेकिन मैं लिनक्स में XTerm में इस समस्या का सामना कभी-कभार करता हूं और (iTerm2 एक ही नियंत्रण कोड का सम्मान करता है) आपको मददगार नीचे ठीक मिल सकता है।

टर्मिनल के अंदर निम्नलिखित शेल कमांड चलाएँ जहाँ आप समस्या देख रहे हैं:

printf "\e[?1004l"

(ध्यान दें कि अंतिम वर्ण कम-मामला 'ell' है।)

यह एएनएसआई नियंत्रण अनुक्रम थॉमस डिके के उत्तर में सूचीबद्ध एक की तरह है, लेकिन यह सुविधा को बंद कर देता है (बजाय)। यह सभी अनुप्रयोगों में आपकी समस्या को हल करना चाहिए, न कि केवल विम, पात्रों को बिल्कुल होने से रोककर।


लिनक्स पर मैं निम्न चरणों के साथ काम करने वाले इस नियंत्रण अनुक्रम को प्रदर्शित कर सकता हूं:

  • इसमें रन xtermकरके फीचर को इनेबल करें printf "\e[?1004h"
  • उसी XTerm सेxeyes किसी अन्य GUI एप्लिकेशन को चलाएं या चलाएं । (किसी कारण से, यह प्रभाव मेरे लिए तब तक नहीं होता है जब तक कि प्रश्न में XTerm एक एप्लिकेशन लॉन्च नहीं करता है। कोई भी जानता है कि क्यों?)
  • बार-बार मूल XTerm (जैसे विंडोज़ पर क्लिक करके) में फोकस को स्विच करें और देखें ^[[Oऔर ^[[Iमूल XTerm में "टाइप" किया जा रहा है।
  • अब Xeyes को बंद करें, मूल XTerm पर वापस लौटें, और चलाएं printf "\e[?1004l"(सुविधा को अक्षम करने के लिए, जैसा कि ऊपर दिए गए फिक्स में वर्णित है)।
  • ऊपर दिए गए " रन xeyes, स्विच फ़ोकस " को दोहराएं , लेकिन इस बार टर्मिनल में कोई वर्ण दर्ज नहीं किया गया है।

मैं व्यक्तिगत रूप से केवल इस समस्या को देखता हूं अगर मैंने अनजाने में टर्मिनल को द्विआधारी आउटपुट डंप किया है, लेकिन यदि आप इसे अधिक नियमित रूप से सामना कर रहे हैं, तो आप इसे printfअपने शेल की इंटरैक्टिव स्टार्टअप स्क्रिप्ट (जैसे ~/.bashrc) में जोड़ना चाह सकते हैं । यदि सुविधा पहले से ही अक्षम है, तो नियंत्रण कोड भेजने के लिए कोई नुकसान (XTerm के तहत कम से कम) प्रतीत नहीं होता है, इसलिए यह सुरक्षित होना चाहिए, भले ही आप कभी-कभी इस समस्या को देखें।

यदि आप अपने शेल के बारे में चिंतित हैं जो हमेशा उस आउटपुट को उत्पन्न करते हैं, तो शायद इसलिए कि आप कभी-कभी उन जगहों पर इसका उपयोग करते हैं जो उन नियंत्रण कोडों को अच्छी तरह से संभाल नहीं पाते हैं, या यदि शेल शुरू होने के बाद समस्या कभी-कभी ट्रिगर होती है, तो आप सेट करना पसंद कर सकते हैं alias focusfix='printf "\e[?1004l"'मैन्युअल रूप से चलाने के लिए इसे और अधिक सुविधाजनक बनाने के लिए एक उपनाम (जैसे के साथ )।


मैं मंजरो लाइनक्स, गनोम, टर्मिनेटर और ओह-माय-ज़श चला रहा हूं। यह समस्या मुझे हो रही थी और इस जवाब से मुझे बहुत मदद मिली।
फैबियो मोंटेफुसकोलो

2

"फ़ोकस" शब्द किस टर्मिनल (या विंडो) को दर्शाता है जो वर्तमान में कीबोर्ड और माउस इनपुट घटनाओं को स्वीकार कर रहा है। केवल एक पर ध्यान केंद्रित किया जा सकता है; एक ग्राफिकल वातावरण में फ़ोकस हासिल करने और खोने के तरीके को स्थापित करने के लिए प्रोटोकॉल हैं जो कि पता लगाने में मददगार नहीं होंगे।

विवरण से ( ध्यान केंद्रित होने पर Tmux करेंट पेन इंडिकेटर भी देखें ), ऐसा प्रतीत होता है कि iTerm2 इस xtermसुविधा को लागू करता है:

Focusin / FocusOut

FocusIn / FocusOut को माउस के किसी भी इवेंट के साथ जोड़ा जा सकता है क्योंकि यह एक अलग प्रोटोकॉल का उपयोग करता है। जब सेट किया जाता है, तो यह टर्मिनल लाभ प्राप्त होने पर CSI I भेजने के लिए xterm का कारण बनता है, और जब यह फोकस खोता है तो CSI O।

यह निजी मोड 1004 द्वारा सक्षम है (2007 में xterm में जोड़ा गया, पैच # 224 ):

CSI ? Pm h
      DEC Private Mode Set (DECSET).
           Ps = 1 0 0 4  -> Send FocusIn/FocusOut events. 

और इस पैच से संबंधित हो सकता है: विम - फोकस रिपोर्टिंग मोड के लिए समर्थन जोड़ें (DECSET / DECRST 1004) xterm संगत टर्मिनलों पर काम करता है , जो एक सेटिंग में "xterm" माउस सुविधाओं के सभी व्यवहार को समान करता है:

/ * फोकस रिपोर्टिंग xterm संगत टर्मिनलों और tmux द्वारा समर्थित है। * /

इसलिए ... आप इसे अक्षम करके बता सकते हैं कि आपका टर्मिनल xterm माउस प्रोटोकॉल का उपयोग नहीं करता है। उद्धृत पैच फ़ोकस / फ़ोकट्यूट फ़ीचर (जो सामान्य रूप से बंद होना चाहिए) को चालू करने के लिए विम को बताता है, और यदि इसके तर्क में कुछ दोष है, तो विम से बाहर निकलने के बाद सक्षम सुविधा को छोड़ सकते हैं।

जबकि विम मोड के सक्षम होने का सबसे संभावित कारण है, यह संभव है कि कोई अन्य प्रोग्राम (या स्क्रिप्ट) इसे चालू करता है। जैसा कि एक अन्य उत्तर में सुझाया गया है, आप scriptप्रोग्राम का उपयोग करके अपने टर्मिनल पर आउटपुट एकत्र करके ( typescriptफ़ाइल का निर्माण ) करके इसे कम कर सकते हैं । विश्लेषण करना जो समय लेने वाला हो सकता है (और चूंकि यह साइट संलग्नक का समर्थन करने के लिए प्रकट नहीं होता है , यह विस्तृत समाधान की मांग करने के लिए उपयुक्त नहीं लगता है)। मैं आमतौर पर unmapटाइपस्क्रिप्ट फ़ाइलों को इस उद्देश्य के लिए पठनीय रूप में बदलने के लिए उपयोग करता हूं ।


आपके विस्तृत उत्तर के लिए धन्यवाद। विम को इस मुद्दे को नजरअंदाज करने \e\[Oऔर \e\[Iहल करने के लिए कह रहा है , लेकिन अन्य अनुप्रयोगों में नहीं है जैसे बिल्ली या rails server(संभवत: प्रोग्राम का उपयोग करते हुए?)।
ओशोयू

तो ... क्या कोई बता सकता है कि वास्तव में "विम को अनदेखा करने के लिए" ई [ओ] और \ ई [आई "को कैसे बता रहा है?
लीबिन वेन

0

इस समस्या को हल करने के लिए, आपको यह जानना होगा कि कौन सा प्रोग्राम फोकस रिपोर्टिंग मोड को सक्षम करता है। आपको स्क्रिप्ट (1) कमांड द्वारा दर्ज लॉग लेना चाहिए ।


क्या फोकस एक ऐसी सुविधा की रिपोर्टिंग है जो डिफ़ॉल्ट रूप से बंद है, और एक एस्केप अनुक्रम द्वारा चालू है? वास्तव में, मैंने देखा कि यह मुद्दा एक नई टर्मिनल विंडो पर नहीं होता है, लेकिन कुछ करने के बाद पुन: पेश होता है , इसलिए मैं इसे पहचानने की कोशिश करूंगा।
ओशोयू

-2

फोकस खो जाने पर मैंने अपने टर्मिनल "^ @" को हल करने की कोशिश करके यह प्रश्न पाया।

उत्तरों के माध्यम से पढ़ते हुए, मैंने iTerm2 वरीयताओं में जाने की कोशिश की -> प्रोफाइल -> "डिफ़ॉल्ट" -> सत्र और अनियंत्रित: "जब निष्क्रिय हो, ASCII कोड 0 हर 60 सेकंड पर भेजें"

समस्या हल हो गई, आशा है कि यह किसी की मदद करेगा

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