나는 이멕스 23을 xterm
과 함께 사용하고 있는데, POSIX
로케일을 en_US.utf8
으로 바꾸면 21 세기에 리눅스 시스템을 도입하려고하고있다. 문제점 :이 로케일에서 키보드의 Alt 키를 사용하면 xterm
은 2 문자 시퀀스를 보냅니다. 예를 들어 Alt-f
이 메타 문자로 표시되도록 이맥을 수정하고 싶습니다. 두 문자 시퀀스 "\303\246"
이 아닙니다. 나는 이것이 입력 코딩을위한 작업일지도 모른다고 생각하지만, 이맥스 문서에서 나는 어떻게 하나를 쓰는지를 알지 못했다.`emacs -nw`는 UTF-8 로켈을 사용하여 xterm에서 어떻게 작동합니까?
나는 이멕스가 메타 이스케이프를 도입하기 위해 접두사 문자로 취급 할 수 있도록 키맵에 8 진수 '\303'
을 추가하고자합니다. 이 방법을 선호하는 방법은 '\303'
을 다음 키를 가져 와서 메타 키로 조정하는 함수에 바인딩하는 것입니다. 그러나 나는 그 중 하나를 이해할 수 없다.
최악의 경우 'a'
~ 'z'
의 메타 키를 바인딩하는 루프 또는 동등하게 무서운 것을 작성하는 것 같아요.
나는 set-terminal-coding-system
주변에 엉망했지만, 문제의 핵심은 UTF-8 로켈에서, xterm
Alt 키가 더 이상 메타처럼 동작 비 ASCII 문자 —를 보낼 수있는 Alt 키를 사용한다는 것입니다. 따라서 터미널 코딩 시스템을 UTF-8로 설정하면 분음 기호가있는 라틴 문자 만 입력 할 수 있습니다. 내가 바라던 행동이 아니야.
나는 xterm
이 메타 키 주위에서 무엇을하고 있는지 추측하는 것을 포함하는 정말 무서운 대답을 발견했습니다. 개선을위한 제안은 환영합니다 — 나는이 일을 깨끗하게 할 수있는 코드를 찾고 싶습니다.
(unless (display-graphic-p)
(defun make-meta-key()
(interactive)
(let ((e (read-event)))
(if (numberp e)
(let ((keys (vector (event-convert-list (list 'meta
(+ (event-basic-type e) 64))))))
(let ((result (key-binding keys)))
(command-execute result)))
(error "this can't happen"))))
(global-set-key [?\M-C] 'make-meta-key))
이 xterm
가 무엇을하고 있는지 주위를 작동하는 것 같다 :
당신이 '설정 - 터미널 - 코딩 - system'를 통해 그것을 설정하는 것을 시도했다 : 개정 더 메타 시퀀스를 처리하는? 'M- : (terminal-coding-system)'을 반환하는 것은 무엇입니까? 제가 올바르게 이해한다면, Alt가 메타로 변환되지 않았을 가능성이 있습니다 - 터미널 설정을 확인하십시오 –
@AlexOtt'nil'도'utf-8'도 작동하지 않습니다. 나는 그 결함이'emacs'가 아닌'xterm'에 있다고 생각합니다. 이것은'xterm'이하는 이상한 것들에 대한 실질적인 해결책입니다. 예를 들어, rxvt를 사용하면,'emacs -nw'는 Alt 키로 "그냥 작동합니다". –
man [xterm] (http://invisible-island.net/xterm/manpage/xterm.html), [eightBitInput] (http://invisible-island.net/xterm/manpage/xterm.html#VT100- Widget-Resources : eightBitInput). –