초점이 없어지면 iTerm2에 "^ [[O"및 "^ [[I"가 나타남


23

요세미티에서 iTerm2 2.1.1을 사용하고 있습니다. tmux가 없습니다.

하여 ITerm가 (다른 Cmd를 탭하여 응용 프로그램 또는 다른 창을 클릭로 전환하는 경우)하는이 포커스를 잃을 때 ^[[I^[[O같다 터미널드립니다. 이로 인해 ^[[I^[[OVim에서 a 가 나타나거나 더 실망 스럽습니다.이 조합은 또 다른 작은 버퍼를 엽니 다.

샘플 : 시작 후 Cmd-Tab을 여러 번 누르기 cat

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

이것은 Terminal.app가 아닌 iTerm에서만 발생합니다. 또한 bash 또는 sh에서 재현하므로 zsh 문제는 아닌 것 같습니다. 일부 인터넷 검색 은 이것이 "초점"문제라고 제안했지만 터미널의 의미에서 "초점"이란 무엇이며 이것을 비활성화하거나 피할 수있는 방법이 있습니까?


이것은 Vim에서 일본어를 쓸 때 재현되는 것 같지만 여전히 어떤 행동이 원인인지 잘 모르겠습니다.
osyoyu

답변:


25

에 따르면 :

초점 상실 / 획득보고에 대한 지원을 추가하십시오. esc [? 1004h가 켜집니다; 단말기는 초점을 맞출 때 esc [I, 초점을 맞출 때 esc [O)를 보냅니다. 비활성화하려면 esc [? 1004l을 전송하십시오.

Cmd- R초점보고를 꺼집니다 재설정 (덕분에 )


1
Cmd-R나를위한 마법의 순서
bruceg

도움이되었습니다. 감사합니다. 이것은 찾기 위해 나에게 오랜 시간이 걸렸습니다 SEO 그래서이 구글 : 맥하여 ITerm iterm2 표시 클립 보드 내용 정력 전 버퍼 초점
BSB

11

이 답변을 테스트하는 데 유용한 Mac은 없지만 Linux의 XTerm 에서이 문제가 매우 가끔 발생하며 (iTerm2가 동일한 제어 코드를 가정 할 때) 아래 수정 사항이 도움이 될 수 있습니다.

문제가 발생한 터미널에서 다음 셸 명령을 실행하십시오.

printf "\e[?1004l"

(마지막 문자에는 소문자 'ell'이 있습니다.)

이 ANSI 제어 시퀀스는 Thomas Dickey의 답변에 나열된 것과 같지만 기능을 사용하지 않고 끕니다. Vim뿐만 아니라 모든 응용 프로그램에서 문자가 전혀 표시되지 않도록하여 문제를 해결해야합니다.


Linux에서는 다음 단계로 작업하는이 제어 시퀀스를 보여줄 수 있습니다.

  • 실행 xterm및 실행하여 기능을 활성화 printf "\e[?1004h"그것에서.
  • 동일한 XTerm에서xeyes 다른 GUI 응용 프로그램 실행하십시오 . (어떤 이유로, 해당 XTerm이 응용 프로그램을 시작할 때까지이 효과가 발생하지 않습니다. 왜 그런지 아십니까?)
  • 반복해서 볼 (창을 클릭하여 예를 들면)에 원래의 xterm에서 포커스를 전환 ^[[O하고 ^[[I원래 XTERM에 "입력"된다.
  • 이제 Xeye를 닫고 원래 XTerm으로 돌아간 다음 실행하십시오 printf "\e[?1004l"(위 수정에 설명 된대로 기능을 비활성화).
  • 위의 " run xeyes, focus focus "단계를 반복 하되 이번에는 터미널에 문자가 입력되지 않습니다.

이진 출력을 실수로 터미널에 덤프 한 경우에만 개인적으로이 문제가 발생하지만보다 정기적으로 발생하는 경우 printf쉘의 대화식 시작 스크립트 (예 :) 에 추가 할 수 있습니다 ~/.bashrc. 기능이 이미 비활성화되어있는 경우 제어 코드를 전송하는 데는 최소한 XTerm 하에서는 아무런 해를 끼치 지 않으므로이 문제가 가끔 발생하더라도 안전해야합니다.

쉘이 항상 해당 출력을 생성하는 것에 대해 우려하는 경우, 아마도 제어 코드를 잘 처리하지 않는 장소에서 사용하거나 쉘이 시작된 후 문제가 발생하는 경우가 있습니다. alias focusfix='printf "\e[?1004l"'수동으로 실행하는 것이 더 편리하도록 별칭 (예 :로 )을 설정하십시오.


Manjaro Linux, Gnome, terminator 및 oh-my-zsh를 실행 중입니다. 이 문제는 나에게 일어나고 있었고이 답변은 많은 도움이되었습니다.
Fabio Montefuscolo

2

"포커스"라는 용어 는 현재 키보드 및 마우스 입력 이벤트를 허용 하는 터미널 (또는 창)을 나타냅니다 . 오직 한 사람 만이 집중할 수 있습니다. 그래픽 환경에서 초점을 맞추고 잃는 방법을 설정하는 데 도움이되지 않는 프로토콜이 있습니다.

설명에서 ( 포커스가 회복되면 Tmux 현재 창 표시기 참조 ) iTerm2가이 xterm기능을 구현하는 것으로 보입니다 .

초점 / 초점

FocusIn / FocusOut은 다른 프로토콜을 사용하므로 마우스 이벤트와 결합 할 수 있습니다. 설정되면 xterm은 터미널에 포커스가있을 때 CSI I을 보내며 포커스를 잃으면 CSI O를 보냅니다.

개인 모드 1004로 활성화됩니다 (2007 년 xterm에 추가됨, 패치 # 224 ).

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

이 패치에 관련이있을 수 있습니다 : 빔 - 초점보고 모드 (1004 DECSET / DECRST) xterm이 호환 단말기에서 작동을위한 추가 지원 "xterm 등은"마우스를 하나의 환경에서 모든 기능이 동작을 동일시 :

/ * 포커스 리포팅은 xterm 호환 터미널 및 tmux에서 지원됩니다. * /

그래서 ... 당신은 해제 할 수 터미널이 xterm을 마우스 프로토콜을 사용하지 않는 정력을 말함으로써. 인용 된 패치는 vim에 FocusIn / FocusOut 기능 (일반적으로 꺼져 있어야 함)을 켜도록 지시하며, 논리에 결함이있는 경우 vim을 종료 한 후 기능을 활성화 상태로 둘 수 있습니다.

vim이 모드를 활성화하는 가장 큰 원인은 아니지만 다른 프로그램 (또는 스크립트)이 켜질 수 있습니다. 다른 답변에서 제안했듯이 script프로그램 ( typescript파일 생성)을 사용하여 출력을 터미널로 수집하여 범위를 좁힐 수 있습니다. 시간이 많이 걸리는 분석 (이 사이트는 첨부 파일 을 지원 하지 않는 것 같으므로 자세한 토론을 요청하는 데 적합하지 않은 것으로 보입니다). 나는 일반적 unmap으로이 목적을 위해 타이프 스크립트 파일을 읽을 수있는 형태로 변환 하는 데 사용 합니다.


자세한 답변 주셔서 감사합니다. Vim에게 Vim 에서이 문제 를 무시 \e\[O하고 \e\[I해결 하라고 지시 하지만 cat과 같은 다른 응용 rails server프로그램 (readline을 사용하는 프로그램 일 수 는 없음)에서는 그렇지 않습니다 .
osyoyu 2016 년

그렇다면 누구든지 정확하게 Vim에게 \ e [O와 \ e [I "를 무시하도록하는 방법을 말할 수 있습니까?
Libin Wen

0

이 문제를 해결하려면 포커스보고 모드를 활성화하는 프로그램을 알아야합니다. script (1) 명령으로 기록 된 로그를 가져와야합니다 .


포커스 리포팅은 기본적으로 꺼져 있고 이스케이프 시퀀스에 의해 켜져있는 기능입니까? 실제로이 문제는 새로운 터미널 창에서 발생하지 않지만 무언가수행 한 후에 재현 되므로이를 식별하려고 시도합니다.
osyoyu 2016 년

-2

포커스를 잃을 때 "^ @"로 표시되는 터미널을 해결하려고 시도 하여이 질문을 찾았습니다.

답변을 읽으면서 iTerm2 환경 설정-> 프로필-> "기본"-> 세션으로 이동하여 "유휴 상태 일 때 60 초마다 ASCII 코드 0을 보내십시오"

문제가 해결되었습니다. 누군가에게 도움이되기를 바랍니다.

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