Xwindow용 emacs에서 사용하는 키를 Xshell에서 사용하기

터미널 에뮬레이터에서는 사용자가 키를 입력할 때 해당 키의 문자열을 서버에 전송합니다. 반면에 Xwindow는 해당 키의 키 이벤트를 전송합니다.

예를 들어 프로세스의 중단을 보통 의미하는 Ctrl+C의 경우 터미널이 인식하기 위해서는 ASCII 코드의 3번째 문자(\003)를 전송해야 합니다. 반면에 Xwindow에서는 Control Pressed 이벤트와 C pressed 이벤트를 전송합니다. 키보드에는 Ctrl, Alt 키 등의 많은 기능 키가 존재합니다. 보통 이런 키들의 조합을 프로그램에서 사용하는데 터미널 프로그램의 경우 모든 키 조합에 대한 문자열이 준비되어 있어야 사용이 가능합니다. 반면에 Xwindow 응용 프로그램은 이런 키들의 이벤트들을 조합하기만 하면 되므로 같은 프로그램의 터미널 버전보다 훨씬 더 많은 단축 키를 제공할 수 있습니다.

다음은 Xwindow용 Emacs에서 한 줄 전체를 지우는 명령인 ‘kill-whole-line’을 위해 Ctrl+Shift+BackSpace 키가 사용됩니다. 하지만 대부분의 터미널 에뮬레이터들은 기본적으로 Ctrl+Shift+BackSpace 키에 대한 값을 가지고 있지 않습니다. 이렇게 터미널에서 기본적으로 사용하지 않는 키 조합을 사용하는 방법에 대해 알아 보겠습니다.

 

  1. Emacs의 키 지정 기능을 사용하여 해당 기능에 대한 키 재지정
    (global-set-key (kbd "M-9") ‘kill-whole-line)
    아시다시피 M-9(Meta+9) 키 조합dl 'kill-whole-lie’ 기능을 수행할 것을 의미합니다. M-9 키 조합에 대한 문자열은 Xshell과 텍스트 기반 Emacs에서 모두 사용될 수 있습니다.

  2. M-9 키 조합에 대한 문자열 알아내기
    Xshell은 Meta-9 키가 눌렸을 경우 ^[9 문자열을 보냅니다. 이 문자열은 ^[(Escape character, \003)와 9 두 문자를 포함합니다.
    Meta-9 키 조합을 예로 든 이유는 Emacs에서 이 키가 다른 어디에도 쓰이지 않는 것 같기 때문입니다.

  3. 해당 키를 Xshell에서 매핑하기
    키 매핑에 대해서는 다음 문서가 도움이 됩니다.

    위 1에서와 같이 Meta-9 키를 해당 기능에 설정하기 위해서는, ‘문자열’ 부분의 값이 ‘\0339’가 되어야 합니다.