터미널에서 Emacs가 Shift + Up을 인식하지 못합니다


15

종종 이맥스에서 지역을 선택하기 위해 Shift+ Up/Down를 사용 합니다. GUI 모드에서는 잘 작동하지만 옵션 emacs으로 호출 하면 + -nw만 사용하여 줄을 선택할 수 있습니다 . +는 , 나는 미니 버퍼에서이 오류 메시지가없는 작업을 얻을 않습니다 :ShiftDownShiftUp

<select> is undefined

이 문제를 어떻게 해결할 수 있습니까?

답변:


13

텍스트 터미널은 키가 아닌 문자 (보다 정확하게는 바이트) 만 전송합니다. 키 및 키 코드 (수정자가있는 키)는 문자 시퀀스로 인코딩됩니다. 인쇄 가능한 문자를 삽입하는 키는 그대로 전송됩니다. 기능 키는 이스케이프 시퀀스로 전송됩니다. 대부분의 이스케이프 시퀀스는 Escape 문자 ( ?\eEmacs 구문)와 두 개 이상의 인쇄 가능한 문자로 구성됩니다. 참조 제어 및 위 / 키를 아래로 사용하기 위해 터미널에서 이맥스에 의해방법 키보드 입력 및 텍스트 출력 작업을 할? 자세한 내용은.

Emacs에는 이스케이프 시퀀스 를 자체 키 개념으로 변환 하는 메커니즘이 있습니다. 변환 표 input-decode-map는 Emacs가 시작될 때 (또는보다 정확하게는 새로운 프레임이 열릴 때 초기화됩니다 :이 변수는 각 터미널마다 다른 값을가집니다). 때때로 Emacs는 터미널이 보낸 모든 이스케이프 시퀀스를 알지 못합니다.

귀하의 경우, Emacs가 Shift+가 보낸 이스케이프 시퀀스에 대해 잘못된 해석을 한 것으로 보입니다 Up. 해석하지 S-up말고 해석해야합니다 select. 먼저 이스케이프 시퀀스가 ​​무엇인지 파악하십시오. 에서 *scratch*버퍼 눌러 Ctrl+ Q다음 Shift+ Up. 이 명령으로 C-q인해 이스케이프 문자 인 다음 문자가 문자 그대로 삽입되고 나머지 이스케이프 시퀀스가 ​​이어집니다. 하자 그 말을 Shift+는 Up전송 \e[1;2A다음에 해당하는 항목을 재정의해야, 우리의 시스템에 input-mode-map:

(define-key input-decode-map "\e[1;2A" [S-up])

원칙적으로 input-decode-map터미널마다 설정해야합니다. 실제로 동일한 이스케이프 시퀀스가 ​​다른 키를 인코딩하는 두 개의 터미널을 갖는 경우는 거의 없으므로 전역 설정이 제대로 작동합니다.


귀하의 답변은 내 질문에 대답하는 것 같습니다 -emacs.stackexchange.com/questions/33988 . Are the (define-key ...)init.el에 들어가는 명령? 내가 볼 수있는 자세한 예가 있습니까?
vfclists

@vfclists define-key명령은 init 파일로 이동합니다. 그것은 ~/.emacs.d/init.el또는 다른 몇 개의 위치 일 수 있습니다 . define-key을 검색하여 사용의 많은 예를 찾을 수 define-key있지만 바인딩 할 맵을 찾는 것이 또 다른 문제입니다. 여러지도가 관여 : global-map, input-decode-map, function-key-map, keyboard-translate-map. Spacemacs를 모르기 때문에 질문에 어떻게 대답해야할지 모르겠습니다. 표준 인터페이스를 혼란스럽게 정의하는 Spacemacs와 같은 패키지는 사용하지 않는 것이 좋습니다.
Gilles 'SO- 악한 중지'

나는 org-mode를 배우기 위해 일반 emacs로 전환했으며 input-decode-map몇 가지 예제를 찾은 후 작업을 수행했습니다 . input-decode-map사용자가 버퍼에 텍스트를 입력 할 때 적용 할 수 있습니까 ?
vfclists

@vfclists input-decode-map는 적용되는 키맵 중 하나입니다. 자세한 내용 은 설명서 를 참조하십시오.
Gilles 'SO- 악한 중지'

5

emacs에서 영역은 포인트 (커서)와 마크 ( "마킹 된"커서의 이전 위치)에 의해 구분됩니다.

따라서 "지역을 선택"하려면 해당 마크를 배치 한 다음 포인트를 움직여야합니다.

마크를 배치하는 가장 쉬운 방법은을 누르는 것 C-SPC입니다. 그런 다음 커서를 움직이면 "영역"이 확장되는 것을 볼 수 있습니다.

"지역을 선택 해제"하려면 C-SPC다시 누를 수 있습니다 .

"shift + movement"는 다른 소프트웨어의 일반적인 키 바인딩이므로 기본적으로이 "select region"동작을 에뮬레이트합니다. 그러나 시프트는 수정 자 키로 emacs에 전송 될 수 없으므로 터미널에서는 작동하지 않습니다.

일반적으로이 C-SPC방법은 영역을 선택하는 다른 방법보다 훨씬 강력합니다. 이동에 대해 위 / 아래 / 왼쪽 / 오른쪽으로 제한되지 않으며 (예 : 검색을 사용할 수 있음), 필요하지 않습니다. 불편한 키 조합을 오랫동안 유지해야합니다.

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