GNU 화면에서 '탭'과 'shift+tab'을 어떻게 바인딩하나요?

GNU 화면에서 '탭'과 'shift+tab'을 어떻게 바인딩하나요?

TabShiftTab화면을 어떻게 바인딩합니까? 내 문제는 이러한 키 입력을 지정하기 위해 화면 명령에 무엇을 전달해야 할지 모른다는 것입니다 bind.

그런데, 나도 알고 있어GNU 화면: 지역 간 이동하지만 대답은 거기에 없습니다.

다음은 모두 오류로 인해 실패합니다 -X: bind: character, ^x, or (octal) \032 expected.

screen -X bind "\033[Z" focus up
screen -X bind "^[[Z" focus up
screen -X bind "\t" focus up
screen -X bind \033[Z focus up
screen -X bind ^[[Z focus up
screen -X bind \t focus up

CtrlA:명령을 입력하기 위해 눌러도 마찬가지입니다 .

답변1

bindkey문자 시퀀스를 지정할 수 있는 것과는 달리 를 사용하면 CAP가 핵심 기능인 경우를 bind사용하는 것이 유일한 방법입니다 .bind -k CAPtermcap

예를 들어,

bind -k ku focus up

Up에 전송된 문자 시퀀스를 바인딩하는 작업을 수행합니다 focus up. 백탭의 경우 다음과 같아야 합니다.

bind -k kB focus up

불행히도 어떤 이유로 작동하지 않는 것 같습니다. 이유가 확실하지 않습니다. 내 첫 번째 해석이 잘못되었습니다. ncurses다음과 같은 termcap을 올바르게 처리하지 않는 것과 관련이 있는 것 같습니다 kcbt.

$ infocmp -1 | grep Z
    cbt=\E[Z,
    kcbt=\E[Z,
$ infocmp -1C | grep Z
    :bt=\E[Z:\

(kcbt는 kB로 변환되지 않습니다).

내 항목에 추가하면 ~/.screenrc:

 termcapinfo * kr=\E[Z
 bind -k kr focus up

즉, 내가 screen무슨 말을 하든 간에주인termincal ( *), F63( kr) 을 보내고 에 \E[Z바인딩 하면 작동합니다. 그러나 지금 누르면 다음이 전송됩니다.F63focus upShift+Tab화면 내 \EOC, 이는 터미널 에뮬레이터가 사용하는 문자 시퀀스입니다.화면구현(호스트 터미널과 반대)은 에 전송합니다 F63.

답변2

bindkey -k kB stuff ^[OZ
bind -k kB focus up

Ctrl제 경우에는 + A- Shift+ 를 누를 때 삽입된 문자열이 + 뒤에 Tab있다는 것이 문제입니다 .^[[ZCtrlA

  • ^[복사/스크롤백 모드로 전환
  • [중단하다
  • 그리고 보여줘Z

즉, 표준 VT100 스타일의 문자 이스케이프 시퀀스가 ​​복사/스크롤백 모드 문자 시퀀스와 충돌합니다. 그래서 +를 눌렀을 kB때 입력 버퍼에 삽입된 문자열을 변경하기 위해 백탭 termcap 이름에 대한 키 바인딩을 추가했습니다 .ShiftTab^[OB

화면 매뉴얼 페이지의 "입력 변환" 섹션을 참조하십시오.

관련 정보