Shift 및 Alt 커서 조합을 올바르게 허용하도록 emacs를 어떻게 구성합니까?

Shift 및 Alt 커서 조합을 올바르게 허용하도록 emacs를 어떻게 구성합니까?

emacs터미널에서 org-mode를 사용하고 Shift커서와 함께 및 와 같은 Alt문자를 입력합니다 . 나는 알아차렸고 터미널에도 이 동작이 표시되었습니다.2A2B3Avim

이 동작을 변경할 수 있는 터미널 설정이 있습니까, 아니면 emacs 및 vim 자체의 설정입니까?

Giles의 조언에 대한 후속 조치:

터미널 에뮬레이터는KDE 콘솔. 제공된 몇 가지 조언으로 인해 메뉴로 이동하여 및 에 대한 및 옵션을 Settings->Configure Shortcuts비활성화했습니다 .Shift+LeftShift+RightPrevious TabNext Tab

이맥스

Shift+Left -> ^[2D

Shift+Right -> ^[2D

Alt+Left -> ^[3D

Alt+Right -> ^[3C

Shift+Left -> ^[[1;2D

Shift+Right -> ^[[1;2C

Alt+Left -> ^[[1;3D

Alt+Right -> ^[[1;3C

답변1

이 질문에 대한 Giles의 의견과 더 많은 웹 검색에 대한 조언을 따른 후 이 링크를 찾았습니다.https://github.com/bendikro/emacs-conf/blob/master/emacs-conf/key-bounds.el일부 섹션에서는 키를 적절하게 정의합니다.

;; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; Fix for screen / tmux
;; some snipped code

;; Fix ALT + arrow keys inside screen/tmux
(define-key input-decode-map "\e[1;3A" [M-up])
(define-key input-decode-map "\e[1;3B" [M-down])
(define-key input-decode-map "\e[1;3C" [M-right])
(define-key input-decode-map "\e[1;3D" [M-left])

저도 복사해서 수정했는데 Shift지금은 잘 되는 것 같습니다.

답변2

터미널과 통합된 애플리케이션 자체의 설정입니다.

Xterm은 확장된 키 이벤트를 매개변수가 있는 제어 시퀀스로 보내는 DEC VT 동작을 에뮬레이트합니다. 많은 순진한 프로그램은 키보드 제어 시퀀스가 ​​매개변수가 없는 단순한 제어 시퀀스일 것으로 잘못 예상하기 때문에 이를 올바르게 디코딩하지 못합니다. 그들 중 일부는 너무 순진해서 중간과 마지막 문자를 제대로 찾지도 않습니다. 제어 시퀀스의 일부만 디코딩하고 나머지는 일반 입력으로 처리하여 현재 보고 있는 것과 같은 이상한 상황을 초래합니다.

vim은 이러한 키보드 시퀀스를 올바르게 디코딩할 수 있으며 이를 확인하는 방법은 xterm-modifier-keys온라인 도움말 섹션을 참조하세요.

vim처럼 termcap 변수를 설정할 필요는 없지만 nvim의 경우에도 마찬가지입니다.

차이점은 이와 같은 앱이반품터미널에 있다고 생각하도록 요청애플리케이션 커서 키 모드그리고응용 키보드 모드. 일반적으로 터미널은 다음 위치에 있습니다.일반 커서 키 모드그리고일반 키보드 모드. 이러한 응용 프로그램은 터미널에 제어 시퀀스를 인쇄하여 터미널에 일정 기간 동안 모드를 전환하도록 지시합니다.

답변3

터미널 설명( TERM설정이 "xterm"이라고 가정)은 필요한 정보를 제공합니다(예를 들어 이전 설명 참조).xterm+pcfkeys입구).

xterm1999년부터(그리고 몇 년 후에 시작된 모방자 konsole 및 gnome-terminal - 참조xterm FAQ)은 Shift, Control, Alt 및 Meta 수정자를 사용하여 확장된 기능 키 세트를 제공합니다.

Shift, Control 또는 Alt가 설정되었는지 여부를 나타내는 매개변수를 기능 키에 추가합니다. 이 코드는 PC 키보드가 있는 DEC VT510에 대한 설명을 기반으로 합니다.

xterm이 DEC VT를 "모방"했는지 여부는 물론 논쟁의 여지가 있습니다. 당시에는 자유롭게 사용할 수 있는 설명서가 없었기 때문에 "설명"은 이메일을 통해 몇 줄의 텍스트로 작성되었습니다. 일부 변화가 예상됩니다.

초기 동작이 변경됨2002년, xterm이 사용할 수정자를 알려주는 두 번째 인수로 숫자를 보냅니다("1" 다음에, emacs는 반복 횟수로 해석할 수 있음).

konsole을 참조하는 vim 및 emacs의 후속 예는 매우 흥미롭습니다.

  • 둘 다용어 모자즉, (자세한 내용은용어 정보10년 넘게 설명되었지만 이 프로그램 중 어느 것도 실제로는 그렇지 않습니다.사용터미널 설명 때문에이름이러한 함수를 참조하는 파일은 termcap 파일에서 찾을 수 없습니다(찾을 수 없을 수도 있음).
  • 두 프로그램 모두 vim의 문서와 같은 몇 가지 해결 방법이 있습니다.xterm-시프트-키,xterm 수정자 키,xterm 코드. Emacs의 경우 문서가 그다지 간결하지 않습니다(키맵에 대한 토론예), 그러나 소스 코드를 읽는 것이 도움이 됩니다.lisp/term/xterm.el
  • 흥미롭게도 emacs의 에코는 vim의 에코와 다르며 전자는 오래되고 쓸모없는 동작과 유사합니다. 구식일 뿐만 아니라 konsole 및 gnome 터미널 개발자가 이를 복사하여 10년 넘게 xterm의 변경 사항을 추적하지 않았습니다(그 결과 수많은 버그 보고서가 작성되었습니다). emacs 솔루션은 이러한 결과일 수 있습니다.

관련 정보