GNUEmacsManual:2

From 흡혈양파의 번역工房
Revision as of 05:04, 25 March 2016 by Onionmixer (talk | contribs) (bold 표기 변경)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
문자, 키, 명령어

문자, 키, 명령어

본 장은 입력 명령어에 Emacs가 사용하는 문자 집합, Emacs가 키보드와 마우스 입력에 해석하는 키와 명령어에 대한 기본 개념을 설명한다.

사용자 입력 유형

GNU Emacs는 주로 키보드와 함께 사용하도록 설계되었다. 메뉴 바와 툴바를 통해 편집 명령어를 송출(issue)하는 데에 있어 마우스를 사용할 수도 있지만 키보드를 사용할 때만큼 효율적이진 않다. 따라서 본 매뉴얼은 키보드를 어떻게 편집하는지 위주로 하여 문서화한다.


Emacs에 대한 키보드 입력은 주로 ASCII의 확장 버전을 기반으로 한다. 'a', 'B', '3', '=', 공백 문자(SPC 로 표기)와 같은 간단한 문자는 해당 키를 타이핑하여 입력한다. RET, TAB, DEL, ESC, F1, Home, LEFT 와 같은 제어 문자도 이런 방식으로 입력되고, 영어가 아닌 키보드에서 발견되는 특정 문자도 마찬가지다(177 페이지의 19장 [국제] 참고).


Emacs는 수식 키를 이용해 입력되는 제어 문자도 인식한다. 자주 사용되는 두 개의 수식 키로 Control(보통 Ctrl 라고 부름)과 META (보통 Alt 라고 부름)[1]가 있다. 예를 들어 Control-aCtrl 을 누르면서 a 를 눌러 입력되는데, 줄여서 C-a 라고 부르겠다. 이와 비슷하게 META-a, 줄여서 M-aAlt 키를 누른 채 a 를 누르면 입력된다. 수식 키는 C-F1 또는 M-LEFT 와 같이 알파벳 문자에 적용 가능하다.


ESC 로 시작하는 두 개의 문자로 된 시퀀스를 이용해 Meta 문자를 입력할 수도 있다. 따라서 ESC a 를 입력하여 M-a 를 입력할 수 있다. ESC C-a 를 타이핑하여 C-M-a 를 입력할 수도 있다. META 와 달리 ESC 는 구분된 문자로 입력된다. 다음 문자를 타이핑하는 동안 ESC 를 누르지 않아도 되는 대신 ESC 를 눌렀다가 놓은 후 다음 문자를 입력한다. 이 기능은 META 키가 신뢰성 있게 기능하지 않는 특정 텍스트 터미널에서 유용하다.


그래픽 디스플레이 상에서 창 관리자는 M-TAB, M-SPC, C-M-d, C-M-1 을 포함해 일부 키보드 입력을 막을지도 모른다. 이러한 문제를 경험한다면 해당 키를 차단하지 않도록 창 관리자는 맞춤화하거나 영향을 받는 Emacs 명령어를 "리바인딩(rebind)"할 수 있다(412 페이지의 33장 [맞춤화] 참고).


마우스 클릭과 같은 특정 비키보드 입력은 물론이고 단순한 문자와 제어 문자를 모두 통틀어 입력 이벤트라고 부른다. Emacs가 내부적으로 입력 이벤트를 처리하는 방법에 관한 세부 내용은 The Emacs Lisp Reference Manual의 "Input Events"절을 참고한다.


일부 Emacs 명령어는 하나의 이벤트에 의해서만 호출되는데, 가령 C-f 는 버퍼에서 한 문자를 앞으로 이동(forward) 시킨다. 그 외 명령어는 C-x C-fC-x 4 C-f 처럼 두 개 이상의 입력 이벤트로 호출된다.


키 시퀀스, 줄여서 키는 단위로서 의미 있는 하나 이상의 입력 이벤트의 시퀀스를 의미한다. 키 시퀀스가 명령어를 호출할 경우 완전 키라고 부르는데, C-f, C-x C-f, C-x 4 C-f 는 모두 완전 키들이다. 키 시퀀스가 명령어를 호출하기에 충분히 길지 않을 경우 접두 키(prefix key)라고 부르는데, 앞의 예제에서 보면 C-xC-x 4 가 접두 키임을 알 수 있다. 모든 키 시퀀스는 완전 키와 접두 키, 둘 중 하나다.


접두 키는 잇따른 입력 이벤트와 결합하여 더 긴 키 시퀀스를 만든다. 예를 들어 C-x 는 접두 키이므로 C-x 만 타이핑하면 Emacs는 명령어를 호출하지 않고 추가 입력을 기다린다(1초 이상 멈추면 그 입력을 위해 C-x 키를 에코잉한다. 자세한 내용은 7 페이지의 1.2절 [에코 영역] 참고). C-x 는 다음 입력 이벤트와 결합하여 2-이벤트 키 시퀀스를 만드는데, 이러한 시퀀스 자체가 접두 키(예: C-x 4) 또는 완전 키(예: C-x C-f)가 될 것이다. 키 시퀀스의 길이에는 한계가 없지만 실제로 3 또는 4 입력 이벤트보다 긴 경우는 드물다.


완전 키에는 입력 이벤트를 추가할 수 없다. 예를 들어, C-f 는 완전 키이므로 2-이벤트 시퀀스인 C-f C-k 는 하나가 아니라 두 개의 키 시퀀스다.


기본적으로 Emacs 에서 접두 키는 C-c, C-h, C-x, C-x RET, C-x C-x a, C-x n, C-x r, C-x v, C-x 4, C-x 5, C-x 6, ESC, M-g, M-o 가 있다. (F1 과 F2 는 C-hC-x 6 를 나타낸다.) 이 목록은 절대적인 것은 아니며, Emacs의 맞춤화를 통해 새로운 접두 키를 만들 수 있다. 표준 접두 키 일부를 제거할 수도 있지만 대부분의 사용자에겐 권장하지 않는데, 가령 C-x 4 의 접두어 정의를 제거하면 C-x 4 C-f 는 무효한 키 시퀀스가 되어버리기 때문이다. 428 페이지의 33.3절 [키 바인딩]을 참고한다.


접두 키 다음에 도움말 문자(C-h 또는 F1)를 타이핑하면 해당 접두어로 시작되는 명령어 목록이 표시된다. 유일한 예외가 ESC 인데, ESC C-hC-M-h 와 동일하여 완전히 다른 작업을 수행한다. 하지만 F1 을 이용해 ESC 로 시작되는 명령어 목록을 표시할 수도 있다.


키와 명령어

본 매뉴얼은 특정 키가 하는 일을 알려주는 문단으로 구성된다. 하지만 Emacs는 키에 의미를 직접 할당하지 않는다. 대신 Emacs는 명령어라는 것에 의미를 할당한 후 명령어에 바인딩함으로써 키에 의미를 부여한다.


모든 명령어는 프로그래머가 선택한 이름을 갖는다. 이름은 주로 대시로 구분된 몇 개의 영단어로 구성되는데,

next-line

또는

forward-word

를 예로 들 수 있다. 내부적으로 각 명령어는 특별한 유형의 Lisp 함수로, 함수를 실행함으로써 명령어와 관련된 행동이 실행된다. The Emacs Lisp Reference Manual의 "What Is a Function" 절을 참고한다.


키와 명령어의 바인딩은 키맵(keymaps)이라는 테이블에 기록된다. 429 페이지의 33.3.1절 [키맵]절을 참고한다.


"C-n이 수직으로 한 행 아래로 이동한다"고 말하면 일반 사용 시에는 무관하지만 Emacs 맞춤화의 경우 중요하고 미묘한 차이가 있다.

next-line

명령어는 수직 아래로 이동한다. C-n

next-line

에 바인딩되어 있기 때문에 이러한 효과를 갖는다. C-n

forward-word

명령어로 리바인딩하면 C-n 은 하나의 워드를 앞으로 이동시킬 것이다.


엄밀히 말해 키는 명령어에 바인딩되어 있으나 본 매뉴얼에서는 C-n 과 같은 키를 명령어라고 부를 것이다. 주로 실제 작업을 수행하는 명령어 이름은 명령어를 실행하는 키를 언급한 후 괄호로 표기할 것이다. 가령 "명령어 C-n(

next-line

) 은 포인트를 수직 아래방향으로 이동시킨다"고 말하면

next-line

명령어가 수직 아래로 이동시키고 C-n 키는 주로 그에 바인딩됨을 의미한다.


맞춤화에 대해 논하면서 변수에 관해 알려줄 것이 있다. 명령어를 기술하다 보면 "이를 변경하기 위해선

mumble-foo

변수를 설정하라"는 식의 글이 따라올 것이다. 변수는 값을 저장하는 데에 사용되는 이름이다. 본 매뉴얼에 문서화된 변수 대부분은 맞춤화를 위한 것으로, 일부 명령어 또는 Emacs의 여러 부분들은 사용자가 설정한 값에 따라 다르게 변수를 시험하고 다르게 행동한다. 이러한 맞춤화에 관심이 생기기 전에는 변수에 관한 정보를 모두 무시해도 좋다. 그리고 나서 변수에 관한 기본 정보(420 페이지의 33.2절 [변수]절 참고)를 읽으면 특정 변수에 대한 정보가 이해되기 시작할 것이다.



Notes

  1. 관습상 Alt 를 META 라고 부르겠다.