GNUEmacsManual:11

From 흡혈양파의 번역工房
Jump to: navigation, search
디스플레이 제어하기

디스플레이 제어하기

커다란 버퍼의 경우 그 일부만 창에 들어맞기 때문에 Emacs는 그 일부만 표시해야 한다. 이번 장에서는 텍스트의 어떤 부분을 표시할 것인지와 어떻게 표시할 것인지를 명시하도록 해주는 명령어와 변수를 설명하고자 한다.

스크롤하기

창이 너무 작아서 버퍼 내 텍스트를 모두 표시할 수 없다면 그 중 일부만 표시한다. 스크롤링(scrolling) 명령어들은 버퍼의 어떤 부분을 표시할 것인지 변경하도록 해준다.


"앞으로" 또는 "위로" 스크롤하면 창에 표시되는 버퍼의 부분을 차례로 보이고, 마찬가지로 버퍼는 창을 기준으로 버퍼 텍스트를 위로 이동시킨다. "뒤로" 또는 "아래로" 스크롤하면 버퍼의 앞 부분을 표시하고, 창을 기준으로 하여 텍스트를 아래방향으로 이동시킨다.


Emacs에서 "위로" 또는 "아래로" 스크롤하는 것은 텍스트를 기준으로 창이 이동하는 방향이 아니라 창에서 텍스트가 이동하는 방향을 나타낸다. 이러한 용어는 현재 널리 사용되는 "스크롤 업" 또는 "스크롤 다운"이란 용어가 유행하기 전에 Emacs에서 먼저 사용되었다. 따라서 Emacs 의미에서 PageDown 은 스크롤 "업"이라는 이상한 결과가 도출되었다.


창에 표시되는 버퍼의 부분은 항상 포인트를 포함한다. 포인트를 창의 상단이나 하단을 넘어 이동할 경우 스크롤이 자동으로 실행되어 화면으로 포인트를 다시 가져온다(71 페이지의 11.3절 [자동 스크롤링] 참고). 아니면 아래와 같은 명령어를 이용해 스크롤할 수도 있다.


C-v next PageDown 거의 하나의 화면만큼 순방향으로 스크롤한다(
scroll-up-command
).


M-v prior PageUp 역방향으로 스크롤한다(
scroll-down-command
).


C-v (
scroll-up-command
)는 거의 전체 창 높이만큼 순방향으로 스크롤한다. 이에 따라 창의 하단에 두 개의 행을 상단으로 가져와 놓아서 이전에 보이지 않던 행이 보이는 결과가 발생한다. 포인트가 상단에서 스크롤되어 나간(scrolled off) 텍스트에 있었다면 창의 새로운 최상단 행에서 표시된다. next (또는 PageDown) 키는 C-v 와 동일하다.


M-v (
scroll-down-command
)는 비슷한 방법으로 역방향 스크롤을 실행한다. prior (또는 PageUp) 키는 M-v 키와 동일하다.


이러한 스크롤 명령어에서 남겨진 중복 행의 수는 기본값이
2
next-screen-context-lines
변수로 제어된다. 수치적 접두 인자 n 을 이용해 명령어를 제공하면 n 개 행만큼 스크롤시킬 수 있는데, Emacs는 포인트는 변경하지 않은 채 남겨두어 텍스트와 포인트가 함께 위로 올라가거나 내려가도록 한다. 수치적 인자가 음수인 C-vM-v 와 같고, 그 반대도 마찬가지다.


기본적으로 이러한 명령어들은 더 이상 스크롤이 불가능할 때 오류를 신호로 보내는데 (삐 소리를 내거나 화면의 반짝거림을 통해) 창이 버퍼의 시작이나 끝에 도달했기 때문이다.
scroll-error-top-bottom
변수를
t
로 변경하면 명령어는 가능한 한 가장 먼 위치로 포인트를 이동시킨다. 그 자리에 포인트가 이미 존재할 경우 명령어는 오류를 보낸다.


일부 사용자들은 같은 화면으로 다시 스크롤하면 포인트를 간편하게 원래 위치로 돌릴 수 있다는 점 때문에 스크롤 명령어를 이용해 포인트를 동일한 화면 위치에 유지하는 것을 즐긴다. 이러한 행위는
scroll-preserve-screen-position
변수를 통해 활성화할 수 있다. 값이 t일 경우 Emacs는 스크롤 명령어가 포인트를 창 밖으로 이동시킬 때마다 최상위 또는 최하위 행으로 이동시키는 대신 동일한 화면 위치에 유지시키도록 한다. Emacs는 또 다른 non-nil 값을 이용해 스크롤 명령어가 창에 포인트를 남겨두더라도 이와 같은 방식으로 포인트를 조정한다. 이 변수는 본 절에서 문서화한 모든 스크롤 명령어에 영향을 미치며, 마우스 휠을 이용한 스크롤에도 영향을 미치는데 (162 페이지의 18.1절 [마우스 명령어] 참고), 일반적으로 nil 이 아닌
scroll-command
속성을 가진 명령어에 모두 영향을 미친다. The Emacs Lisp Reference Manual의 "Property Lists" 절을 참고한다.


M-x scroll-upM-x scroll-down 명령어는
scroll-error-top-bottom
을 준수하지 않는다는 점만 제외하면
scroll-up-command
scroll-down-command
와 비슷하게 행동한다. Emacs 24 이전에는 이러한 명령어들이 스크롤 업, 스크롤 다운의 기본 명령어였다. 명령어 M-x scroll-up-lineM-x scroll-down-line 은 한 번에 하나의 행씩 현재 창을 스크롤한다. 이러한 명령어 중 하나라도 사용하려면 키 바인딩을 제공해야 할 것이다(432 페이지의 33.3.6절 [Init 재바인딩] 참고).


리센터링(Recentering)

C-l 현재 행이 가장 중간 텍스트 행이 되도록 선택된 창을 스크롤하고, 잇따른 연속 호출 시에는 현재 행을 가장 최상 행, 최하 행 순으로 만든다. 화면을 다시 표시할 수도 있다(
recenter-top-bottom
).


M-x recenter 현재 창이 가장 중간의 텍스트 행이 되도록 선택된 창을 스크롤한다. 화면을 다시 표시할 수도 있다.


C-M-l 화면에 유용한 정보를 가져오기 위해 직관적으로 스크롤한다(
reposition-window
).


C-l (
recenter-top-bottom
) 명령어는 선택된 창을 리센터링(Recentering)하고 스크롤하여 현재 화면 행을 창의 정확히 중앙에 혹은 중앙에 최대한 가깝게 위치시킨다.


한 행에 C-l 을 두 번 타이핑하면 (C-l C-l) 창을 스크롤하여 포인트가 최상단 행에 오도록 한다. 세 번째로 C-l 를 타이핑하면 포인트가 최상단 화면 행에 위치할 때까지 화면을 스크롤한다. 이후 C-l 를 호출할 때마다 이 세 가지 위치를 순환한다.


목록 변수
recenter-positions
를 맞춤화하면 순환 순서를 변경할 수도 있다. 각 목록 요소는 심볼
top
,
middle
,
bottom
, 숫자 중 하나여야 하는데, 정수는 행을 명시된 화면 행으로 이동시키는 것을 의미하는 반면 0.0과 1.0 사이의 부동소수점 수는 창의 상단부터 화면 공간의 비율을 명시한다. 기본값은
(middle top bottom)
위에 설명한 순이다. 또한
scroll-margin
변수를 0 이 아닌 값 n 으로 변경하면 C-l 은 창의 상단 또는 하단과 포인트 사이에 항상 적어도 n 개의 화면 행을 남겨둔다(71 페이지의 11.3절 [자동 스크롤] 참고).


C-l 에 접두 인자를 제공할 수도 있다. 일반 접두 인자 C-u C-l 은 단순히 포인트를 리센터링(Recentering)시킨다. 음의 인자 n은 포인트를 창의 상단에서 n개 행 아래에 놓는다. 인자가 0이면 포인트를 최상단 행에 둔다. 음의 인자 -n은 포인트를 창의 하단에서 n개 행 위에 위치시킨다. 인자가 주어지면 C-l 은 화면을 지우지도 않고 여러 개의 화면 위치를 순환하지도 않는다.


recenter-redisplay
변수가
nil
이 아닌 값을 가질 경우 C-l 을 호출할 때마다 화면을 지우고 다시 표시하는데, 특수값 tty(기본값)는 텍스트 터미널 프레임에서만 이를 수행하라고 말한다. 재표시는 어떤 이유든 화면의 깨짐(garbled) 현상이 있을 때 유용하다(445 페이지의 34.2.3절 [깨진 화면] 참고).


좀 더 원시적(primitive) 명령어에 해당하는 M-x recenter
recenter-top-bottom
처럼 행동하지만 화면 위치들을 순환하지는 않는다.


C-M-l (
reposition-window
)는 화면에 유용한 정보를 얻도록 어느 정도 직관적으로 현재 창을 스크롤한다. 가령 Lisp 파일에서 이 명령어는 가능할 경우 현재 전체 defun 을 화면으로 가져오려고 시도한다.


자동 스크롤

Emacs는 눈에 보이는 텍스트 부분 밖으로 포인트가 이동할 때 자동 스크롤을 수행한다. 보통 자동 스크롤은 포인트를 창 세로를 기준으로 중심에 가져오지만 이러한 행위를 수정하는 방법에는 여러 가지가 있다.


scroll-conservatively
를 소수 n 으로 설정할 경우 포인트를 화면 밖으로 약간만 (n개 행을 넘지는 않는다) 이동하면 Emacs는 포인트를 화면으로 가져오기에 충분한 정도만 스크롤하고, 반대로 포인트를 시각적으로 만드는 데에 실패할 경우 Emacs는 창에 포인트를 중앙으로 놔둘 수 있을 정도로만 멀리 스크롤한다.
scroll-conservatively
를 큰 수로(100 초과) 설정하면 자동 스크롤은 포인트가 얼마나 멀리 움직이든 포인트를 절대 중앙화시키지 않으며, Emacs는 스크롤 방향에 따라 포인트가 눈에 보일 만큼만 창의 상단 또는 하단에서 텍스트를 스크롤한다.
scroll-conservatively
기본값은
0
으로, 포인트를 항상 창의 중앙으로 가져옴을 의미한다.


자동 스크롤을 제어하는 또 다른 방법은
scroll-step
변수를 맞춤화하는 방법이다. 이 값은 포인트가 화면 밖으로 이동할 때 자동으로 스크롤할 행의 수를 결정한다. 해당 행의 수만큼 스크롤하여 포인트를 눈에 보이도록 가져오지 못할 경우, 포인트가 대신 중심으로 위치한다. 기본값은 0이며, 스크롤 이후 포인트를 항상 중심화함을 의미한다.


자동 스크롤을 제어하는 세 번째 방법은 스크롤 이후 포인트의 수직 위치를 직접 명시하는
scroll-up-aggressively
scroll-down-aggressively
변수를 맞춤화하는 것이다.
scroll-up-aggressively
의 값은
nil
(기본값) 또는 0과 1 사이의 부동소수점 수여야 한다. 부동소수점 수는 포인트가 하단 창 가장자리 아래로 이동하면 (예: 순방향 스크롤) Emacs가 창을 스크롤하여 포인트가 하단 창 가장자리에서부터 창 높이의 f 부분이 되도록 한다. 따라서 f 가 크면 좀 더 적극적인 스크롤을 의미하여 새로운 텍스트가 더 많이 보이게 된다는 뜻이다. 기본값
nil
0.5
에 해당한다.


마찬가지로 포인트가 하단 창 가장자리 위로 가면
scroll-down-aggressively
가 사용된다(예: 역방향 스크롤). 값은 스크롤 이후에 포인트가 창 상단 여백에서 얼마나 떨어져 있어야 하는지를 명시한다. 따라서
scroll-up-aggressively
를 이용할 때처럼 값이 클수록 적극적이다.


scroll-conservatively
,
scroll-step
,
scroll-up-aggressively / scroll-down-aggressively
변수는 반대로 자동 스크롤을 제어한다. 따라서 이러한 방법 중 하나만 이용해 자동 스크롤을 맞춤화해야 한다. 여러 변수를 맞춤화하는 경우 우선순위는 다음과 같다:
scroll-conservatively
,
scroll-step
, 마지막으로
scroll-up-aggressively / scroll-down-aggressively
가 해당한다.


scroll-margin
변수는 포인트가 창 상단이나 하단에 얼마나 가까이 올 수 있는지를 제어한다(적극적 스크롤이 상단 및 하단 여백 사이의 창 비율보다 큰 분수 f 를 명시하더라도 마찬가지다). 그 값은 화면 행의 수로, 포인트가 창의 상단 또는 하단의 여러 행 사이에 올 경우 Emacs는 자동 스크롤을 수행한다.
scroll-margin
의 기본값은
0
이다.


수평 스크롤

수평 스크롤(horizontal scrolling)은 창 내에 모든 행을 옆으로 전환하여 왼쪽 여백 근처에 일부 텍스트가 표시되지 않도록 함을 의미한다. 창 내의 텍스트가 수평으로 스크롤되면 텍스트 행은 연속되는 대신 절단된다(87 페이지의 11.21절 [행 절단] 참고). 창이 절단된 행을 표시하면 Emacs는 포인트가 화면의 좌측 또는 우측 가장자리로 이동하여 없어질 때마다 자동 수평 스크롤을 수행한다. 자동 수평 스크롤을 비활성화시키기 위해서는
auto-hscroll-mode
변수를
nil
로 설정한다. 자동 수평 스크롤이 꺼지면 포인트는 화면의 가장자리 밖으로 이동하고, 이를 표시하기 위해 커서가 사라진다. (텍스트 터미널에서 커서는 대신 왼쪽 가장자리에 남겨진다.)


hscroll-margin
변수는 자동 스크롤이 발생하기 전에 포인트가 창의 왼쪽 가장자리와 오른쪽 가장자리에 얼마나 가까이 접근하는지를 제어한다. 이는 열의 수로 측정된다. 예를 들어, 값이 5일 경우 가장자리에서 5열 내에서 포인트를 이동시키면 해당 가장자리로부터 멀어지는 수평 스크롤이 발생한다.


hscroll-step
변수는 포인트가 가장자리에 너무 가까이 다가갈 때 창을 몇 개의 열만큼 스크롤할 것인지 결정한다. 기본값 0은 창 내에 포인트를 수평적으로 중심화시킴을 의미한다. 양의 정수는 스크롤할 열의 수를 명시한다. 부동소수점 수는 스크롤할 창의 너비 분수를 명시한다.


아래 명령어를 이용해 수평 스크롤을 명시적으로 수행하는 것도 가능하다:


C-x < 현재 창의 텍스트를 왼쪽으로 스크롤한다 (
scroll-left
).


C-x > 오른쪽으로 스크롤한다(
scroll-right
).


C-x < (
scroll-left
)는 선택된 창의 텍스트를 창의 전체 너비에서 두 열 적게 왼쪽으로 스크롤한다. (다시 말해 창의 텍스트는 창을 기준으로 왼쪽으로 이동한다.) 수치적 인자 n을 이용해 n개 열만큼 스크롤된다.


텍스트가 왼쪽으로 스크롤되고 포인트가 창의 왼쪽 가장자리 밖으로 이동하면 커서는 포인트가 텍스트 표시 부분으로 돌아올 때까지 창의 왼쪽 가장자리에서 freeze될 것이다. 이는
auto-hscroll-mode
의 현재 설정과는 상관이 없이 실행되는데, 왼쪽으로 스크롤된 텍스트는 창의 오른쪽 가장자리에서 실행되는 행위에만 영향을 미치기 때문이다.


C-x > (
scroll-right
)도 비슷하게 오른쪽으로 스크롤된다. 각 행이 창의 왼쪽 여백에서 시작하여 정상대로 표시되고 나면 창은 더 이상 오른쪽으로 스크롤될 수 없으며, 스크롤을 시도할 경우 어떠한 효과도 발생하지 않는다. C-x > 에 대한 인자를 정확히 계산할 필요가 없음을 의미하며, 인자가 충분히 클 경우 일반 디스플레이를 복구시킬 것이다.


이러한 명령어들을 이용해 창을 수평으로 스크롤할 경우 이는 자동 수평 스크롤의 하한 한계를 설정한다. 자동 스크롤은 창을 계속해서 스크롤하겠지만 사용자가 이전에
scroll-left
로 설정한 한계보다 오른쪽으로 더 나아가는 일은 없다.


좁히기

좁히기는 버퍼의 일부에만 초점을 두고 나머지는 일시적으로 접근할 수 없게 만드는 것을 의미한다. 여전히 접근할 수 있는 부분을 접근 가능한 부분(accessible portion)이라고 부른다. 좁히기를 취소하면 전체 버퍼로 다시 접근할 수 있도록 만드는 넓히기(widening)라고 불린다. 사실상 버퍼에서 좁히기의 한계를 버퍼의 제한이라 부른다.


좁히기는 어수선한 부분을 제거함으로써 하나의 하위루틴이나 단락에 더 쉽게 중점을 둘 수 있게 해준다. 또한 명령어나 반복되는 키보드 매크로를 대체하는 연산 범위를 제한하는 데에 사용되기도 한다.


C-x n n 포인트와 마크 사이로 좁힌다(
narrow-to-region
).


C-x n w 전체 버퍼로 다시 접근할 수 있도록 넓힌다(
widen
).


C-x n p 현재 페이지로 좁힌다(
narrow-to-page
).


C-x n d 현재 defun으로 좁힌다(
narrow-to-defun
).


버퍼의 일부로 좁혔다면 해당 부분만 존재하는 것처럼 나타난다. 나머지 부분은 볼 수도 없고 그 부분으로 이동할 수도 없으며 (움직임 명령어는 접근 가능한 부분 밖으로 적용되지 않을 것이다) 어떤 방식으로도 변경할 수 없다. 하지만 그 부분이 사라진 것은 아니며, 사실상 파일을 저장할 경우 접근할 수 없는 텍스트도 저장될 것이다. 좁히기를 실행할 때마다 '
Narrow
'라는 글자가 모드 행에 표시된다.


일차 좁히기 명령어는 C-x n n (
narrow-to-region
)이다. 이는 현재 버퍼의 제한을 설정하여 현재 영역 내에 위치한 텍스트로 접근 가능하게 만들지만 영역 앞이나 뒤에 있는 텍스트로는 모두 접근이 불가하다. 포인트와 마크는 변경되지 않는다.


아니면 C-x n p (
narrow-to-page
)를 이용해 현재 페이지로 좁히는 방법도 있다. 페이지의 정의는 211 페이지의 22.4절 [페이지]를 참고한다. C-x n d (
narrow-to-defun
)는 포인트를 포함하는 defun으로 좁힌다(241 페이지의 23.2절 [Defuns]를 참고).


좁히기를 취소하는 방법으로 C-x n w (
widen
)을 이용해 넓히는 방법이 있다. 그러면 버퍼의 모든 텍스트로 접근할 수 있게 된다.


C-x = 명령어를 이용하면 버퍼의 어떤 부분으로 좁히기를 실행하는지에 대한 정보를 얻을 수 있다. 22 페이지의 4.9절 [위치 정보]를 참고한다.


좁히기를 이해하지 못하는 사용자에게는 혼동이 야기될 수 있으므로
narrow-to-region
명령어는 비활성화되는 것이 보통이다. 이러한 명령어의 사용을 시도하면 확인을 요청하고 그것을 활성화할 선택권을 제공하는데, 명령어를 활성화하면 더 이상 확인(confirmation)을 필요로 하지 않는다. 437 페이지의 33.3.11절 [비활성화하기]를 참고한다.


뷰 모드

뷰 모드(view mode)는 순차적 화면대로 버퍼의 스캐닝을 허용하는 부 모드이다. 해당 모드는 버퍼를 편리하게 스크롤하는 명령어를 제공하지만 버퍼를 변경하는 명령어는 제공하지 않는다. 일반적인 Emacs 커서 움직임 명령어 외에도 SPC 를 타이핑하면 한 화면만큼 순방향으로 스크롤하고, S-SPC 또는 DEL 을 입력하면 역방향으로 한 화면을 스크롤하며,
s
는 증분 검색을 시작하게 해준다.


q 를 입력하면(
View-quit
) 뷰 모드를 비활성화하고, 뷰 모드가 활성화되기 이전의 위치와 버퍼로 전환된다. e (
View-exit
)라고 입력하면 뷰 모드를 비활성화하고 현재 버퍼 및 위치를 유지한다.


M-x view-buffer 는 존재하는 Emacs 버퍼를 입력하도록 요청하고 그것으로 전환하여 뷰 모드를 활성화한다. M-x view-file 은 파일의 입력을 요구하고, 뷰 모드를 활성화한 채로 해당 파일로 방문한다.


Follow 모드

Follow 모드는 동일한 버퍼를 표시하는 두 개의 창을 만들어 하나의 긴 "가상 창"으로 스크롤하는 부 모드(minor mode)이다. Follow 모드를 사용하기 위해서는 하나의 창만 존재하는 프레임으로 이동하여 C-x 3 을 이용하거나 M-x follow-mode 를 입력함으로써 나란히 위치한 두 개의 창으로 나눈다. 그때부터는 두 개의 창들 중 하나에서 버퍼를 편집하거나 스크롤하면 나머지 하나의 창이 그것을 따라간다.


Follow 모드에서, 하나의 창에 표시된 부분 밖으로 포인트를 이동시키고 나머지 창에서는 표시된 부분 안으로 포인트를 이동시키면 두 번째 창이 선택되는데, 여기서도 마찬가지로 둘은 하나의 큰 창에 포함된 두 부분으로 취급된다.


M-x follow-mode 를 두 번째로 입력하면 Follow 모드가 꺼진다.


텍스트 faces

Emacs는 faces라고 불리는 여러 스타일로 텍스트를 표시한다. 각 face는 폰트, 높이, 기울기, 전경색과 배경색, 밑줄 또는 윗줄과 같은 다양한 face 속성을 명시할 수 있다. 대부분의 주 모드는 Font Lock 모드를 통해 자동으로 텍스트에 faces를 할당한다. 이러한 faces가 할당되는 방식에 관한 정보는 78 페이지의 11.12절 [폰트 잠금]을 참고한다.


Faces가 최근에 어떻게 정의되었는지, 어떤 모양을 하는지를 확인하기 위해서는 M-x list-faces-display 를 입력한다. 접두 인자를 이용하면 정규 표현식의 입력을 요구하고, 정규 표현식에 일치하는 이름을 가진 faces만 표시한다(97 페이지의 12.6절 [Regexps]를 참고).


주어진 face를 여러 프레임에서 다르게 나타나게 하는 것도 가능하다. 가령 일부 텍스트 터미널은 폰트, 높이, 너비 등 일부 face 속성을 지원하지 않는 경우도 있고, 제한된 범위의 색상만 지원하는 경우도 있다. 또한 대부분의 Emacs faces는 가독성을 위해 밝은 프레임 배경과 어두운 프레임 배경에 따라 다르게 나타나도록 정의된다. 기본적으로 Emacs는 프레임의 현재 배경색을 바탕으로 각 프레임에 표시할 face 속성 집합을 자동으로 선택한다. 하지만 이는
frame-background-mode
변수를
nil
이 아닌 값으로 설정하여 오버라이드할 수 있다.
dark
의 값은 Emacs로 하여금 모든 프레임이 어두운 배경을 가진 것처럼 취급하게 만드는 반면
light
값은 프레임이 밝은 배경을 가진 것처럼 취급하게 만든다.


face 가 그 속성을 수정하도록 맞춤 설정하고 그러한 맞춤화는 향후 Emacs 세션에서 사용하도록 저장할 수도 있다. 상세한 내용은 416 페이지의 33.1.5절 [Face 맞춤화]를 참고한다.


default
face는 텍스트를 표시하기 위한 기본값으로, 그 모든 속성이 명시된다. 배경색 역시 프레임의 배경색으로 사용된다. 75 페이지의 11.9절 [색상]을 참고한다.


또 다른 특수 face로
cursor
face를 들 수 있다. 그래픽 디스플레이에서 해당 face의 배경색을 이용해 텍스트 커서를 그릴 수 있다. 해당 face의 나머지 속성들은 어떠한 효과도 없고, 커서 아래의 텍스트 전경색은 기본이 되는 텍스트의 배경색에서 취한다. 텍스트 터미널에서 텍스트 커서의 모양은
cursor
face가 아니라 터미널에 따라 결정된다.


특정 face 의 속성을 명시하기 위해 X 자원을 사용할 수도 있다. 493 페이지의 D.1절 [자원]을 참고한다.


Emacs는 가변 너비 폰트를 표시하지만 일부 Emacs 명령어, 특히 들여쓰기 명령어는 가변 문자 표시 너비를 설명하지 않는다. 따라서 대부분의 face, 특히 Font Lock 모드로 할당되는 faces의 경우 가변 너비 폰트를 사용하지 않길 권한다.


Faces에 대한 색상

Faces는 다양한 전경색과 배경색을 가질 수 있다. Face에 대한 색상을 명시할 때, 가령 face를 맞춤화할 때는 (416 페이지의 33.1.5절 [Face 맞춤화] 참고) 색상 이름(color name) 또는 RGB triplet을 이용할 수 있다.


색상 이름은 '
dark orange
' 또는 '
medium sea green
'처럼 사전에 정의된 이름이다. 색상 이름 목록은 M-x list-colors-display 라고 입력하면 확인할 수 있다. 색상이 표시되는 순서를 제어하기 위해서는
list-colors-sort
를 맞춤화한다. 그래픽 디스플레이에서 이 명령어를 실행하면 Emacs에 알려진 색상 이름의 범위를 모두 표시한다(
X의 rgb.txt 파일
에 정의된 표준 X11 색상명들이다). 텍스트 터미널에서 명령어를 실행하면 그러한 터미널에 안전하게 표시될 수 있는 소수의 색상 하위집합만 표시한다. 하지만 Emacs는 텍스트 터미널에서도 X11 색상 이름을 이해하며, face에 X11 색상 이름에서 정의한 색상이 주어지면 가장 가깝게 일치하는 터미널 색상을 이용해 표시된다.


RGB triplet은 '
#RRGGBB
' 형태의 문자열이다. R, G, B 구성요소 각각은 16진수로, 구성요소의 상대적 강도를 1~4자릿수 길이로 (보통 2자릿수가 사용) 명시한다. 구성요소들은 동일한 자릿수를 가져야 한다. 16진수 값 A부터 F까지는 대문자와 소문자가 허용된다.


M-x list-colors-display 명령어는 각 명명된 색상에 대해 동일한 RGB triplet 을 표시한다. 예를 들어 '
medium sea green
'은 '
#3CB371
'과 동일하다.


M-x set-face-foregroundM-x set-face-background 를 이용하면 face의 전경색과 배경색을 변경할 수 있다. 이 명령어들은 미니버퍼에서 완성을 이용해 face 이름과 색상의 입력을 요구한 후 명시된 색상을 이용해 해당 face를 설정한다. 이들은 모든 프레임에서 face 색상에 영향을 미치지만 그 효과는 맞춤화 버퍼 또는 X 자원을 이용할 때와 다르게 향후 Emacs 세션에서 지속되지 않는다. 명시된 프레임에 전경색과 배경색을 설정하기 위해 프레임 파라미터를 사용할 수도 있다. 172 페이지의 18.11절 [프레임 매개변수]를 참고한다.


표준 Faces

텍스트 모양을 명시하기 위한 표준 faces를 소개하겠다. 그것이 생성하는 효과를 원한다면 명시된 텍스트에 적용할 수 있다.


default
어떠한 face도 명시하지 않는 일반 텍스트에 사용되는 face이다. 배경색은 프레임의 배경색으로 사용된다.


bold
기본 폰트의 굵은 변형체를 이용하는 face이다.


italic
기본 폰트의 이탤릭 변형체를 이용하는 face이다.


bold-italic
기본 폰트의 굵은 이탤릭 변형체를 이용하는 face이다.


underline
텍스트에 밑줄을 치는 face이다.


fixed-pitch
강제로 고정 너비 폰트를 사용하는 face이다. 원한다면 다른 고정 너비의 폰트를 사용하도록 해당 face를 맞춤화할 수도 있지만 가변 너비 폰트로 만들어선 안 된다.


variable-pitch
강제로 가변 너비 폰트를 사용하는 face이다.


shadow
텍스트를 주변 일반 텍스트보다 덜 선명하게 만드는 데에 사용되는 face이다. 주로 기본으로 검정이나 하얀 전경색과 대조되도록 회색 그림자를 이용해 이루어진다.


구체적인 목적을 위해 텍스트 일부를 일시적으로 강조하는 데에 사용되는 face 몇 가지를 소개하겠다. (그 외 다수의 모드들이 이를 목적으로 고유의 face를 정의한다.)


Highlight
마우스 커서가 하이퍼링크 위로 이동하였을 때처럼 다양한 컨텍스트에서 텍스트 강조에 사용되는 face이다.


isearch
현재 Isearch 일치 결과를 강조하는 데에 사용되는 face이다(90 페이지의 12.1절 [증분 검색] 참고.)


query-replace
현재 Query Replace 일치 결과를 강조하는 데에 사용되는 face이다(103 페이지의 12.10절 [대체] 참고).


lazy-highlight
Isearch에 대한 "지연 일치 결과"와 Query Replace를 강조하는 데에 사용되는 face이다(현재 일치 결과 외의 일치 결과들).


region
활성 영역을 표시하기 위한 face이다(45 페이지의 8장 [마크] 참고). Emacs가 GTK 지원으로 빌드된 경우 현재 GTK 테마로부터 색상을 취한다.


secondary-selection
이차 X 선택을 표시하기 위한 face이다(58 페이지의 9.3.3절 [이차 선택] 참고).


trailing-whitespace
show-trailing-whitespace
nil
이 아닌 값일 때 행 끝에 초과 공간과 탭을 강조하기 위한 face이다(82 페이지의 11.16절 [쓸모 없는 여백] 참고).


escape-glyph
제어 문자와 escape 시퀀스를 표시하기 위한 face이다(85 페이지의 11.19절 [텍스트 표시] 참고).


nobreak-space
"no-break" 공백(space) 문자를 표시하기 위한 face이다(85 페이지의 11.19절 [텍스트 표시] 참고).


아래의 face들은 Emacs 프레임 부분들의 모양을 제어한다.


mode-line
현재 선택된 창의 모드 행, 툴킷 메뉴가 사용되지 않을 때에는 메뉴 바에 사용되는 face이다. 그래픽 디스플레이에서 그림자를 이용해 "raised" 효과를 내도록 그려지고 non-windows 터미널에서는 기본 face를 역전시켜(inverse) 그려지는 것이 기본값이다.


mode-line-inactive
mode-line과 같지만 (
mode-line-in-non-selected-windows
nil
이 아닌 경우) 선택된 창이 아니라 창의 모드 행에 사용된다.
mode-line
으로부터 상속되므로 해당 face에 이루어지는 변경 내용은 모든 창의 모드 행에 영향을 미친다.


mode-line-highlight
highlight
와 같지만 모드 행에서 마우스에 민감한 텍스트 부분에 사용된다. 그러한 텍스트 부분은 보통 마우스 포인터를 갖다 대면 툴팁이 나타난다(174 페이지의 18.17절 [툴팁]을 참고).


mode-line-buffer-id
모드 행에서 버퍼 식별 부분에 사용되는 face 이다.


header-line
모드 행이 창의 하단에 나타나는 것처럼 창의 상단에 나타나는 창의 헤더 행에 사용되는
mode-line
과 유사하다. 대부분의 창은 헤더 행을 갖고 있지 않으며, Info 모드와 같이 몇 가지 특수 모드만 하나를 생성한다.


vertical-border
텍스트 터미널 상에서 창들 간 수직 구분자에 사용되는 face 이다.


minibuffer-prompt
미니버퍼에 표시되는 prompt 문자열에 사용되는 face이다. 기본적으로 Emacs는 prompt 텍스트를 표시하는 데에 사용되는 텍스트 속성 목록인
minibuffer-prompt-properties
의 값에 이 face를 자동으로 추가한다. (이 변수는 사용자가 미니버퍼에 들어가면 실행된다.)


fringe
그래픽 디스플레이에서 창의 왼쪽과 오른쪽에 fringe 를 위한 face 이다. (Fringe는 텍스트 영역과 창의 오른쪽, 왼쪽 테두리 사이에 Emacs 프레임의 좁은 부분을 의미한다.) 81 페이지의 11.14절 [Fringes]를 참고한다.


cursor
이 face 의
:background
속성은 텍스트 커서의 색상을 명시한다. 86 페이지의 11.20절 [커서 표시]를 참고한다.


tooltip
툴팁 텍스트에 사용되는 face이다. GTK 지원으로 Emacs를 빌드하였다면 툴팁은 GTK를 통해 그려지고 이 face는 효과가 없는 것이 기본값이다. 174 페이지의 18.17절 [툴팁]을 참고한다.


mouse
마우스 포인터의 색상을 결정하는 face이다.


아래의 faces도 마찬가지로 Emacs 프레임 부분들의 모양을 제어하지만 텍스트 터미널 상에서만 혹은 Emacs가 툴킷 지원이 없는 X에 빌드되었을 때에만 해당한다. (그 외 모든 경우에 있어서 각 프레임 요소의 외관은 시스템 전용(system-wide) 설정으로 결정된다.)


scroll-bar
스크롤 바의 시각적 외관을 결정하는 face이다. 172 페이지의 18.12절 [스크롤 바]를 참고한다.


tool-bar
툴 바 아이콘의 색상을 결정하는 face이다. 173 페이지의 18.15절 [툴 바]를 참고한다.


menu
Emacs 메뉴의 폰트와 색상을 결정하는 face이다. 173 페이지의 18.14절 [메뉴 바]를 참고한다.


tty-menu-enabled-face
text-mode 터미널에서 활성화된 메뉴 항목을 표시하는 데에 사용되는 face이다.


tty-menu-disabled-face
text-mode 터미널에서 비활성화된 메뉴 항목을 표시하는 데에 사용되는 face이다.


tty-menu-selected-face
텍스트 모드 터미널에서 사용자가 마우스를 클릭하거나 RET 를 누르면 선택할 메뉴 항목을 표시하는 데에 사용되는 face이다.


텍스트 크기 조정

현재 버퍼에서 기본 face의 높이를 증가시키기 위해서는 C-x C-+ 또는 C-x C-= 를 입력한다. 높이를 감소시키기 위해서는 C-x C-- 라고 입력한다. 기본 (전역적) face 높이를 복구하려면 C-x C-0 을 입력한다. 이러한 키들은 모두 동일한 명령어 text-scale-adjust 에 바인딩되는데, 해당 명령어는 마지막으로 입력된 키를 살펴보고 어떤 행동을 취할 것인지 결정한다.


이러한 명령어들의 마지막 키는 C-x 를 붙이지 않고 반복할 수 있다. 가령 C-x C-= C-= C-= 는 face 높이를 3개의 step만큼 증가시킨다. 각 step은 텍스트 높이를
1.2
인수만큼 조정하는데 이 인수를 변경하려면
text-scale-mode-step
변수를 맞춤화한다.
text-scale-adjust
명령어에 대한 수치적 인자가 0일 경우 기본 높이로 복구되며 C-x C-0 을 입력하여도 마찬가지다.


text-scale-increase
text-scale-decrease
명령어는 각각 C-x C-+ 그리고 C-x C-- 와 마찬가지로 기본 face의 높이를 증가, 감소시킨다.
text-scale-adjust
보다 이 명령어들로 바인딩하는 편이 편리할지도 모른다.


text-scale-set
명령어는 현재 버퍼에서 기본 face의 높이를 접두 인자가 명시하는 절대 수준으로 조정한다.


위의 명령어들은 현재 폰트 크기 조정이 1이 아닌 경우
text-scale-mode
부 모드를 자동으로 활성화하고, 그 외의 경우 비활성화한다.


Font Lock 모드

Font Lock 모드는 항상 특정 버퍼에 국한된 부 모드로, faces를 버퍼 내 텍스트로 할당한다(혹은 폰트화한다). 각 버퍼의 주 모드는 Font Lock 모드에게 어떤 텍스트를 폰트화할 것인지 알려주는데, 가령 프로그래밍 언어 모드는 주석, 문자열, 함수명과 같은 구문적으로 상관된 구성개념을 폰트화(fontify)한다.


Font Lock 모드는 기본적으로 활성화된다. 현재 버퍼에서 토글하기 위해서는 M-x font-lock-mode 를 입력한다. 양의 수치적 인자는 Font Lock 모드를 무조건 활성화하고, 음 또는 0의 인자는 비활성화한다.


M-x global-font-lock-mode 라고 입력하면 모든 버퍼에서 Font Lock 모드를 토글할 수 있다. 향후 Emacs 세션에도 이 설정을 이용하려면
global-font-lock-mode
변수를 맞춤화하거나 (412 페이지의 33.1절 [간편한 맞춤화] 참고) 아래의 행을 init 파일로 추가한다:


(global-font-lock-mode 0)


Global Font Lock 모드를 비활성화했다 하더라도
font-lock-mode
함수를 모드 훅으로 추가하여 특정 주 모드에 Font Lock을 활성화할 수 있다. 예를 들어 C 파일의 편집에 Font Lock 모드를 활성화하려면 아래를 실행한다:


(add-hook 'c-mode-hook 'font-lock-mode)


Font Lock 모드는
font-lock-string-face
,
font-lock-comment-face
등을 포함해 일을 수행하도록 특별히 명명된 faces를 몇 가지 사용한다. 가장 쉽게 찾는 방법은 M-x customize-group RET font-lock-faces RET 를 이용하는 방법이다. 그리고 나서 이러한 faces의 외관을 변경하려면 맞춤화 가능한 버퍼를 사용하면 된다. 416 페이지의 33.1.5절 [Face 맞춤화]를 참고한다.


폰트화 기능을 지원하는 주 모드에 대해 Font Lock 모드가 적용하는 폰트화의 양을 수정하기 위해서는
font-lock-maximum-decoration
변수를 맞춤화한다. 값은 숫자(1은 폰트화 최소량을 의미하고 일부 모드는 3 수준까지 지원한다)이거나 t가 될 수 있는데 t는 "최대로 높은 값"(기본값)을 의미한다. 특정 주 모드마다 다른 숫자를 명시할 수도 있으므로 다음 값을 사용하면
C/C++
모드에는 수준 1을, 그 외에는 기본 수준을 이용할 수 있다:


'((c-mode . 1) (c++-mode . 1)))


주석과 문자열의 폰트화(또는 "구문적" 폰트화)는 버퍼 텍스트의 구문적 구조의 분석에 의존한다. Lisp 모드를 포함해 일부 모드는 속도를 위해 특별한 규칙에 의존하는데, 바로 가장 왼쪽 열에 소괄호 또는 중괄호가 열려 있는 것은 항상 defun의 시작을 정의하므로 어떠한 문자열이나 주석의 외부에 위치한다는 규칙이다. 따라서 열린 소괄호나 열린 중괄호가 문자열이나 주석 안에 위치한다면 가장 왼쪽 열에 위치시키는 일을 피해야 한다. 상세한 내용은 23.2.1절 [왼쪽 여백 괄호]를 참고한다.


항상 버퍼에 국한적인(buffer-local)
font-lock-beginning-of-syntax-function
변수는 Font Lock 모드가 어떻게 주석이나 문자열 외부의 위치를 찾도록 확보하는지를 명시한다. 가장 왼쪽 열에 괄호 규칙을 사용하는 모드에서 변수의 기본값은
beginning-of-defun
으로, Font Lock 모드에게 이 규칙을 사용하라고 알린다. 이 변수를
nil
로 설정하면 Font Lock은 더 이상 규칙에 의존하지 않는다. 이는 올바르지 않은 결과를 도출하는 실수는 피하지만 일부 사례의 경우 변경된 텍스트의 폰트화로 인해 버퍼의 시작부터 버퍼 텍스트를 다시 스캔해야 하는 수고를 감수해야 하기도 한다. 특히 큰 버퍼의 끝에 다가갈수록 스크롤 할 때 재표시 속도가 크게 저하될 수 있음을 의미한다.


Font Lock 강조 패턴은 이미 대부분의 모드에 존재하지만 추가 패턴까지 폰트화하고 싶은 때가 있다. 특정 모드에 대한 본인만의 강조 패턴을 추가하기 위해서는
font-lock-add-keywords
함수를 사용할 수 있다. 가령 C 주석에서 'FIXME:' 단어를 강조하려면 아래를 사용한다:


(add-hook 'c-mode-hook 
          (lambda () 
           (font-lock-add-keywords nil 
            '(("\\<\\(FIXME\\):" 1
               font-lock-warning-face t)))))


font-lock 강조 패턴에서 키워드를 제거하려면
font-lock-remove-keywords
함수를 사용한다. The Emacs Lisp Reference Manual의 "Search-based Fontification"절을 참고한다.


큰 버퍼를 폰트화할 때는 시간이 많이 소요될 수 있다. 파일을 방문하는 동안 긴 지연 시간을 피하기 위해 Emacs는 버퍼의 보이는 부분만 먼저 폰트화를 진행한다. 버퍼를 스크롤하면 각 부분은 보이는 즉시 폰트화되는데, 이러한 유형의 Font Lock을 Just-In-Time (또는 JIT) Lock이라고 부른다. '
jit-lock
' 맞춤화 그룹에서 변수를 맞춤화하면 idle 중에 폰트화를 실행하도록 JIT Lock에게 알리는 등 행동 방식을 변경할 수 있다. 417 페이지의 33.1.6절 [구체적 맞춤화]를 참고한다.


상호작용적 강조

Highlight Changes 모드는 가장 최근에 변경된 버퍼 부분의 텍스트에 다른 face를 제공함으로써 그 부분을 강조하는 부 모드다. Highlight Changes 모드를 활성화 또는 비활성화하려면 M-x highlight-changes-mode 를 사용한다.


Hi Lock 모드는 사용자가 명시하는 정규 표현식에 일치하는 텍스트를 강조하는 부 모드다. 예를 들어 사용자는 이것을 이용해 프로그램 소스 파일의 특정 변수에 대한 참조는 모두 강조하거나, 특정 프로그램의 많은 양의 출력에서 특정 부분을 강조하거나, 기사에서 특정 이름을 강조할 수 있다. Hi Lock 모드를 활성화 또는 비활성화 하기 위해서는 M-x hi-lock-mode 명령어를 사용한다. 모든 버퍼에 대해 Hi Lock 모드를 활성화하려면 M-x global-hi-lock-mode 를 사용하거나
.emacs
파일에
(global-hi-lock-mode 1)
를 위치시킨다.


Hi Lock 모드는 Font Lock 모드와 같이 작동하지만 (78 페이지의 11.12절 [폰트 잠금] 참고) 사용자가 강조할 정규 표현식을 분명히 명시한다는 점은 제외다. 아래의 명령어를 이용해 제어한다:


M-s h r regexp RET face RET C-x w h regexp RET face RET

face face를 이용해 regexp에 일치하는 텍스트를 강조한다(
highlight-regexp
). 버퍼가 로딩되어 있는 한 강조는 유지된다. 기본 face (노란색 배경) M-s h r whim RET RET 을 이용해 "whim"이란 단어의 모든 발생 결과를 강조하여 표시하는 경우를 예로 들 수 있겠다. 강조는 어떤 face든 사용 가능하며, Hi Lock은 몇 가지 고유의 face를 제공하는데 이는 기본값 목록에 사전에 로딩되어 있다. Face의 입력을 요청할 때 M-nM-p 를 사용하면 목록을 순환할 수 있다.
hi-lock-auto-select-face
옵션을
nil
이 아닌 값으로 설정하면 이 명령어가 (그리고 faces를 읽는 다른 Hi Lock 명령어들도) 사용자에게 입력값을 묻지 않고 기본 목록에서 다음 face를 자동으로 선택하도록 명시할 수 있다.
이 명령어를 여러 번 사용하면 다른 방식으로 다양한 정규 표현식을 강조하도록 명시할 수 있다.


M-s h u regexp RET C-x w r regexp RET

regexp의 강조를 해제한다(
unhighlight-regexp
).
메뉴에서 이것을 호출하면 목록으로부터 강조 해제를 위한 표현식을 선택한다. 키보드에서 이를 호출할 경우 미니버퍼를 사용한다. 그러면 가장 최근에 추가된 정규 표현식을 표시할 것인데, 다음으로 오래된 표현식을 표시하려면 M-n 을, 다음으로 새로운 표현식을 선택하려면 M-p 를 사용한다. (완성 기능을 이용해 수동으로 표현식을 입력하여도 좋다.) 강조를 해제하고자 하는 표현식이 미니버퍼에 표시되면 RET 을 눌러 미니버퍼를 종료하여 강조를 해제한다.


M-s h l regexp RET face RET C-x w l regexp RET face RET

face face를 이용해 regexp에 대한 일치 결과를 포함하는 전체 행을 강조한다(
highlight-lines-matching-regexp
).


M-s h p phrase RET face RET C-x w p phrase RET face RET

face face를 이용해 phrase의 일치 결과를 강조한다(
highlight-phrase
). phrase는 어떠한 regexp도 될 수 있지만 공백은 여백(whitespace)의 일치결과로 대체되고 첫 소문자는 대, 소문자에 민감해질 것이다.


M-s h. C-x w. 다음으로 이용 가능한 face를 이용해 포인트 주변에서 발견되는 심볼을 강조한다(
highlight-symbol-at-point
).


M-s h w C-x w b 프로그램의 변경을 금지하는 주석 구분자와 함께 현재 강조하는 regexp/face 쌍을 포인트에 버퍼로 삽입한다. (해당 키 바인딩은
hi-lock-write-interactive-patterns
명령어를 실행한다.)
이러한 패턴들은 사용자가 M-x hi-lock-find-patterns 를 호출하거나, Hi Lock 모드가 활성화되었을 때 (해당 모드가
hi-lock-find-patterns
를 실행하므로) 사용자가 파일을 방문할 경우 적절한 시기에 주석으로부터 추출된다.


M-s h f C-x w i 현재 버퍼에 주석으로부터 regexp/face 쌍을 추출한다(
hi-lock-find- patterns
). 따라서
highlight-regexp
를 이용해 대화형으로 패턴에 들어가고,
hi-lock-write-interactive-patterns
를 이용해 패턴에 보관하며, 편집을 마치면 (일치 결과의 괄호로 된 여러 부분마다 다른 faces를 포함하여) 이 명령어를 이용해 (
hi-lock-find-patterns
) Hi Lock모드가 편집된 패턴을 강조하도록 한다.
hi-lock-file-patterns-policy
변수는 파일을 방문하면 Hi Lock 모드가 파일에서 발견되는 패턴을 자동으로 추출하여 강조할 것인지 여부를 제어한다. 그 값은 {{RoundTitleNavy|nil{{(절대 강조하지 않는다),
ask
(사용자에게 문의한다), 또는 인자가 될 수 있다. 함수일 경우
hi-lock-find-patterns
는 패턴을 인자로 하여 그것을 호출하고, 함수가
nil
이 아닌 값을 리턴하면 패턴이 사용된다. 기본값은
ask
이다.
hi-lock-find-patterns
를 직접 호출하면 이 변수의 값이 무엇이든 패턴이 항상 강조됨을 주목한다.
또한
hi-lock-find-patterns
는 현재 주 모드의 심볼이
hi-lock-exclude-modes
목록의 member일 경우 아무 것도 실행하지 않는다.


창 Fringes

그래픽 디스플레이에서 각 Emacs 창에는 보통 왼쪽과 오른쪽 가장자리에 좁은 fringe라는 것이 존재한다. Fringe는 창에서 텍스트에 관한 정보를 제공하는 부호를 표시하는 데에 사용된다. M-x fringe-mode 를 입력하면 fringe를 비활성화시키거나 너비를 수정할 수 있다. 이 명령어는 모든 프레임의 fringe 에 영향을 미치므로, 선택된 프레임에서만 fringe를 수정하려면 M-x set-fringe-style 을 사용한다.
fringe-mode
변수를 맞춤화하면 fringe의 변경 내용을 영구적으로 적용할 수 있다.


Fringe는 연속 행을 나타내는 데에 가장 흔히 사용된다(22 페이지의 4.8절 [연속 행] 참고). 텍스트 한 행이 여러 화면 행으로 나뉘면 왼쪽 fringe는 첫 행을 제외한 각 화면 행에 곡선 화살표를 표시하면서 "this is not the real beginning(실제 시작 부분이 아닙니다)"라고 나타낸다. 오른쪽 fringe는 마지막 행을 제외한 화면 행마다 곡선 화살표와 함께 "this is not the real end(실제 끝 부분이 아닙니다)"라고 표시한다. 행의 방향이 right-to-left일 경우 (197 페이지의 19.19절 [양방향 편집] 참고) fringe 내에 곡선 화살표의 의미는 바뀐다.


Fringe는 "이 행에는 가로로 보이지 않는 곳에 스크롤되는 텍스트가 더 존재한다"는 의미를 지닌 가로 방향의 짧은 화살표를 이용해 행 절단을 나타낸다. 마우스로 화살표 중 하나를 클릭하면 디스플레이를 화살표 방향 가로로 스크롤한다.


Fringe는 버퍼 경계와 같은 것 (82 페이지의 11.15절 [경계 표시하기] 참고) 그리고 사용자가 디버깅하는 프로그램이 실행되는 장소를 나타내기도 한다(266 페이지의 24.6절 [디버거] 참고).


Fringe는 커서를 그리는 데에 사용되기도 하는데, 현재 행이 창의 행과 너비가 정확히 같고 포인트가 행의 끝에 있을 때에만 해당한다. 이 기능을 비활성화하기 위해서는
overflow-newline-into-fringe
변수를
nil
로 변경하면 Emacs는 창과 정확히 같은 너비의 행을 연속하거나 절단할 것이다.


경계 표시하기

그래픽 디스플레이에서 Emacs는 fringe 안에 버퍼 경계를 표시할 수 있다. 이 기능을 활성화하면 첫 행과 마지막 행이 fringe 내에 angle 이미지로 표시된다. 이는 창의 스크롤이 가능한지 여부를 알려주는 위, 아래방향 화살표 이미지와 결합할 수 있다.


버퍼 로컬 변수
indicate-buffer-boundaries
는 버퍼 경계와 창 스크롤이 fringe에 어떻게 표시되는지를 제어한다. 값이
ㅣleft
right
일 경우 angle과 화살표 비트맵이 각각 왼쪽 또는 오른쪽 fringe에 표시된다.


값이 alist일 경우 각 요소(
indicator . position
)는 indicator 중 하나의 위치를 명시한다. indicator
top
,
bottom
,
up
,
down
또는
t
중 하나여야 하는데,
t
는 alist 에 존재하지 않는 표시기(indicator)에 대한 기본 위치를 명시한다. position
left
,
right
또는
nil
중 하나여야 하는데, nil 은 이 표시기를 표시하지 않도록 명시한다.


예를 들어
((top . left) (t . right))
는 왼쪽 fringe 에 오른쪽 angle 비트맵을 위치시키고, 오른쪽 fringe에 하단 angle 비트맵을 위치시키며, 오른쪽 fringe에 위와 아래 방향 화살표 비트맵을 위치시킨다. 왼쪽 fringe에 angle 비트맵만 표시하고 화살표 비트맵은 표시하지 않을 경우
((top . left) (bottom . left))
를 사용한다.


쓸모 없는 여백

행 끝에 불필요한 공간이나 버퍼 끝에 빈 행을 인지하지 못하고 남겨두기 쉽다. 대부분의 경우 이렇게 끝에 오는 여백은 아무런 효과가 없지만 때로는 성가실 수도 있다.


show-trailing-whitespace
버퍼 로컬 변수를
t
로 설정하면 행 끝에 오는 여백을 눈에 보이게 만들 수 있다. Emacs 는
trailing-whitespace
face를 이용해 끝에 여백을 표시한다.


이 기능은 여백을 포함하는 행 끝에 포인트가 위치할 경우에는 적용되지 않는다. 엄밀히 말해 이것은 "끝에 오는 여백"이지만 이런 경우 여백을 표시하면 새로운 텍스트에 입력 중일 때 모양새가 바람직하지 못하다. 이런 특별한 경우는 포인트 위치만으로 공간이 존재하는지 표시하기에 충분하다.


M-x delete-trailing-whitespace 라고 입력하면 뒤에 모든 여백을 삭제한다. 이 명령어는 버퍼 내 각 행 끝에 있는 모든 추가 여백과 버퍼의 끝에 오는 모든 빈 행을 삭제하는데, 후자(버퍼의 끝에 오는 빈 행의 삭제)를 무시하려면
delete-trailing-lines
변수를
nil
로 변경한다. 영역이 활성화되어 있으면 이 명령어는 영역 내 각 행의 끝에서 추가 공간을 삭제한다.


그래픽 디스플레이 상에서 Emacs는 왼쪽 fringe에 작은 이미지와 함께 창의 끝에 사용되지 않은 행을 표시할 수 있다(81 페이지의 11.14절 [Fringes] 참고). 어떤 버퍼 텍스트에도 일치하지 않는 화면 행에 대한 이미지가 표시되므로 버퍼 끝에 빈 행에는 그러한 이미지가 없어서 눈에 띈다. 이 기능을 활성화하려면
indicate-empty-lines
변수를
nil
이 아닌 값으로 설정한다. 가령 이 변수의 기본값을 설정하여 모든 새로운 버퍼에 대해 이 기능을 활성화 또는 비활성화시킬 수 있다
(setq-default indicate-empty-lines t).


여백 모드는 특수 face 로 여백 문자를 그리거나 그것을 특수 glyph 로 표시함으로써 버퍼 내 여러 종류의 여백을 "시각화"하도록 해주는 버퍼 로컬 부 모드이다. 해당 모드를 토글하려면 M-x whitespace-mode 를 입력한다. 시각화되는 여백의 유형은
whitespace-style
목록 변수로 결정된다. 가능한 요소의 부분에 대한 목록은 다음과 같다(전체 목록은 변수에 관한 문서를 참고):


face
특수 faces를 사용하는 모든 시각화(visualizations)를 활성화한다. 이 요소는 특별한 의미를 지니는데, 목록에 존재하지 않는 경우
space-mark
,
tab-mark
,
newline-mark
를 제외한 시각화는 어떠한 효과도 없다.


trailing
끝에 오는 여백을 강조한다.


tabs
탭 문자를 강조한다.


spaces
공백(space)과 줄 바꿈 없는 공백 문자를 강조한다.


lines
80 개 이상의 열을 강조한다. 열 한계 값을 변경하려면
whitespace-line-column
변수를 맞춤화한다.


newline
새 행을 강조한다.


empty
빈 행을 강조한다.


space-mark
특수 glyph 로 공백(space)과 줄 바꿈 없는 문자를 그린다.


tab-mark
특수 glyph 로 탭 문자를 그린다.


newline-mark
특수 glyph 로 새 행 문자를 그린다.


선택적 표시

Emacs는 주어진 열의 개수 이상으로 들여 쓴 행을 숨기는 기능을 가진다. 이를 이용해 프로그램의 일부에 대해 개요를 얻을 수 있다.


현재 버퍼에서 행을 숨기기 위해서는 수치적 인자 n을 둔
C-x $
(
set-selective-display
)를 입력한다. 이후 최소 n 개의 열을 들여 쓴 행들이 화면에서 사라진다. 이러한 행의 존재는 하나 또는 그 이상의 숨겨진 행 앞에 위치한 시각적 행의 끝에 세 개의 점을 알 수 있다('...').


C-n
C-p
명령어는 숨겨진 행들이 마치 존재하지 않는 것처럼 그 사이를 이동한다.


숨은 행이라 하더라도 여전히 버퍼에 존재하며, 대부분의 편집 명령어들은 이것을 평소대로 바라보기 때문에 사용자는 숨겨진 텍스트 중간에서 포인트를 찾을 수 있을 것이다. 이러한 일이 발생하면 커서는 이전 행의 끝에 위치한 세 개의 점 다음에 표시된다. 포인트가 시각적 행의 끝에 그리고 그것이 끝나는 새 행 앞에 위치할 경우 커서는 세 개의 점 앞에 나타난다.


모든 행을 다시 시각적으로 만들기 위해서는 인자 없이
C-x $
를 입력한다.


selective-display-ellipses
변수를
nil
로 설정하면 숨겨진 행 앞의 행 끝에 세 개의 점이 표시되지 않는다. 따라서 숨겨진 행에 대한 표시가 전혀 없다. 이 변수는 설정 시 자동으로 로컬이 된다.


버퍼에서 텍스트의 부분을 숨기는 또 다른 방법은 217 페이지의 22.8절 [Outline Mode]를 참고한다.


선택적 모드 행 기능

버퍼 퍼센트 pos는 창의 상단 위에 버퍼의 비율을 나타낸다. Size Indication 모드를 켜기 위해서는 M-x size-indication-mode를 입력하여 버퍼의 크기를 추가로 표시할 수 있다. 크기는 다음과 같이 버퍼 퍼센트 바로 뒤에 표시된다.


pos of size


여기서 size는 버퍼 내에 사람이 읽을 수 있는 문자 수의 표현으로, 10^3 는 'k', 10^5 는 'M', 10^9는 'G' 등으로 요약되어 사용된다.


현재 포인트 행 번호는 Line Number 모드가 활성화되면 모드 행에 나타난다. 이 모드를 켜고 끄려면 M-x line-number-mode 명령어를 사용하면 되는데, 켜져 있는 것이 보통이다. 버퍼 퍼센트 pos 다음에 행 번호가 나타나며, 'L' 문자를 이용해 그것이 무엇인지 나타낸다.


이와 비슷하게 M-x column-number-mode 를 이용해 Column 번호 모드를 켜서 현재 열 번호를 표시할 수도 있다. 열 번호는 'C' 문자로 표시된다. 하지만 이 모드 두 가지가 활성화되면 '
L
'과 '
C
'보다는 괄호 안에 행 번호, 열 번호 순으로 표시된다. 예를 들면 다음과 같다: '
(561,2)
'. 이러한 명령어를 사용하는 방법과 부 모드에 관한 정보는 200 페이지의 20.2절 [부 모드]를 참고한다.


버퍼를 좁혔다면 (73 페이지의 11.5절 [좁히기] 참고) 표시된 행 번호는 버퍼의 접근 가능한 부분을 기준으로 한다. 따라서
goto-line
에 대한 인자로 적절하지 않다.(전체 파일을 기준으로 한 행 번호를 확인하려면
what-line
명령어를 사용한다.)


버퍼가 크면 (
line-number-display-limit
값보다 크면) 행 번호 계산 속도가 너무 느리기 때문에 Emacs는 속도를 계산하지 않으므로 모드 행에 행 번호가 표시되지 않을 것이다. 이러한 한계 값을 제거하기 위해서는
line-number-display-limit
nil
로 설정한다.


행 번호 계산은 버퍼 내 행이 너무 길 때에도 느려질 수 있다. 이러한 이유로 포인트 주위에 행의 평균 너비가
line-number-display-limit-width
의 값보다 클 경우 Emacs는 행 번호를 표시하지 않는다. 기본값은 200개 문자다.


Emacs는 모든 모드 행에 시간 및 시스템 부하를 표시하도록 선택할 수 있다. 이 기능을 활성화하려면 M-x display-time 을 입력하거나
display-time-mode
옵션을 맞춤화한다. 모드 행에 추가된 정보는 다음과 같은 모양을 한다.


hh:mmpm 1.11


여기서 hhmm 은 시간과 분으로, 뒤에 '
am
' 또는 '
pm
'이 항상 따라온다. 1.11 은 전체 시스템에서 실행 중이거나 실행할 준비가 된 (예: 이용 가능한 프로세서를 대기하는) 프로세스의 평균 개수로, 마지막 몇 분간 수집된 내용을 바탕으로 한다. (운영 체제가 지원할 수 없는 경우 일부 필드가 누락될 수 있다.) 24시간 형식을 선호한다면
display-time-24hr-format
변수를
t
로 설정한다.


아직 읽지 않은 메일이 있을 경우 'Mail'이란 단어가 부하 수준 다음에 표시된다. 그래픽 디스플레이에서는
display-time-use-mail-icon
을 맞춤화함으로써 'Mail' 대신 아이콘을 사용할 수 있는데, 이를 사용하면 모드 행에 어느 정도 공간을 절약할 수 있다. 메일 표시기를 눈에 띄게 표시하려면
display-time-mail-face
를 맞춤화하면 된다.
display-time-mail-file
을 사용해 확인할 메일 파일을 명시하거나,
display-time-mail-directory
를 설정하여 들어오는 메일을 확인하는 디렉터리를 명시할 수도 있다(디렉터리 내에 비어있지 않은 일반 파일은 '새로 도착한 메일'로 간주된다.).


랩톱 컴퓨터에서 Emacs 를 실행할 때는
display-battery-mode
명령어를 사용하거나
display-battery-mode
변수를 맞춤화하여 모드 행에 배터리 충전 정보를 표시하는 것이 가능하다.
battery-mode-line-format
변수는 배터리 충전을 표시하는 방식을 결정하는데, 정확한 모드 행 메시지는 운영 체제에 따라 다른데 현재 배터리 양을 총 충전 비율로 표시하는 것이 보통이다.


그래픽 디스플레이에서 모드 행은 3D 상자로 그려진다. 이 효과가 마음에 들지 않으면
mode-line
face를 맞춤화하고 box 속성을
nil
로 설정하여 비활성화할 수 있다. 416 페이지의 33.1.5절 [Face 맞춤화]를 참고한다.


선택되지 않은 창의 모드 행은
mode-line-inactive
라고 불리는 다른 face 에 표시되는 것이 기본값이다. 따라서 선택된 창만
mode-line
face에 표시된다. 이는 어떤 창을 선택하는지 표시하도록 돕는다. 미니버퍼가 선택되면 모드 행을 갖고 있지 않으므로 사용자가 미니버퍼를 활성화시킨 창은
mode-line
을 이용해 표시되는 모드 행을 갖게 되고, 그 결과 평소대로 미니버퍼에 들어가더라도 어떠한 모드 행도 변경하지 않는다.


mode-line-in-nonselected-windows
변수를
nil
로 설정하여
mode-line-inactive
의 사용을 비활성화하면 모든 모드 행은
mode-line
face에 표시된다.


eol-mnemonic-unix
,
eol-mnemonic-dos
,
eol-mnemonic-mac
,
eol-mnemonic-undecided
변수 각각을 사용자가 선호하는 문자열로 설정함으로써 행 끝 포맷 각각에 대한 모드 행 표시를 맞춤화할 수 있다.


텍스트가 어떻게 표시되는지

대부분 텍스트는 출력 문자들로, 버퍼에 나타날 때 말 그대로 화면 상에 표시된다. 출력 문자는 ASCII 숫자, 문자, 구두 문자는 물론이고 여러 non-ASCII 문자들도 포함한다.


ASCII 문자 집합은 비출력 제어 문자를 포함한다. 그 중 두 개가 특별히 표시되는데, 새 행 문자(Unicode 코드 포인트
U+000A
)는 새 행을 시작함으로써 표시되고, 탭 문자(
U+0009
)는 다음 탭의 위치 열로 확장되는 공백(space)으로 표시된다(보통 8개 열마다). 탭마다 공백의 수는 1부터 1000까지 정수값을 가져야 하는 버퍼 로컬 변수
tab-width
로 제어된다. 버퍼 내 탭 문자가 표시되는 방법은 명령어로서
TAB
의 정의와는 무관함을 주목한다.


코드가
U+0020
미만인 (8진수 40, 10진수 32) 다른 ASCII 제어 문자들은
escape-glyph
face를 이용해 삽입 기호('
^
') 다음에 문자의 비제어 버전이 따라온다. 예를 들어 '
control-A
' 문자
U+0001
은 '
^A
'로 표시된다.


U+0080
(8진수
200
)부터
U+009F
(8진수
237
)까지 코드의 raw byte 는
escape-glyph
face를 이용해 8진수 escape 시퀀스로 표시된다. 예를 들어 문자 코드
U+0098
(8진수
230
)은 '
\230
'으로 표시된다. 버퍼 로컬 변수
ctl-arrow
nil
로 변경하면 ASCII 제어 문자 역시 삽입 기호 escape 시퀀스 대신 8진수 escape 시퀀스로 표시된다.


일부 non-ASCII 문자들은 ASCII 공백 또는 하이푼(-) 문자와 동일한 모양을 갖고 있다. 그러한 문자들을 인식하지 않고 버퍼로 입력할 경우 붙여넣기(yanking) 등을 통해 문제가 발생하기도 하는데, 소스 코드 컴파일러는 보통 non-ASCII 공백(space)을 여백(whitespace) 문자로 취급하지 않는다는 점을 예로 들 수 있다. 이러한 문제를 해결하기 위해 Emacs는 그러한 문자들을 특별하게 표시하는데,
nobreak-space
face를 이용해
U+00A0
(줄 바꿈 없는 공백)을,
escape-glyph
face를 이용해
U+00AD
(소프트 하이픈),
U+2010
(하이픈),
U+2011
(줄 바꿈 없는 하이픈)을 표시한다. 이를 비활성화하기 위해서는
nobreak-char-display
변수를
nil
로 변경한다. 이 변수에
nil
이 아닌 값 또는
t
가 아닌 값을 제공할 경우 Emacs는 그러한 문자를 백슬래시 강조 문자 뒤에 공백이나 하이픈을 붙여 표시한다.


디스플레이 테이블을 이용하면 특정 문자 코드가 표시되는 방법을 맞춤화할 수도 있다. The Emacs Lisp Reference Manual의 "Display Tables" 절을 참고한다.


그래픽 디스플레이에는 Emacs가 이용할 수 있는 폰트의 glyph를 전혀 갖고 있지 않은 문자도 일부 존재한다. 이렇게 glyph가 없는 문자는 보통 16진 문자 코드를 포함하는 상자로 표시된다. 이와 비슷하게 텍스트 터미널에서 터미널 부호화를 이용해 표시할 수 없는 문자들은 (191 페이지의 19.12절 [터미널 부호화] 참고) 보통 물음표 기호로 표시된다.
glyphless-char-display-control
변수를 맞춤화하여 디스플레이 방법을 제어할 수 있다. 상세한 내용은 The Emacs Lisp Reference Manual의 "Glyphless Character Display"절을 참고한다.


커서 표시하기

텍스트 터미널 상에서 커서의 외형은 터미널에 의해 제어되는데, 이는 대게 Emacs의 통제 밖이다. 어떤 터미널은 두 개의 커서를 제공하는데, 하나는 "시각적인" 정적 커서이고 나머지는 "매우 시각적인" 깜빡이는 커서이다. 기본적으로 Emacs는 매우 시각적인 커서를 사용하여 사용자가 Emacs를 시작하거나 재개하면 그 커서로 전환된다.
visible-cursor
변수가
nil
이 되면 Emacs가 시작되거나 재개될 때 일반 커서를 사용한다.


그래픽 디스플레이에서는 훨씬 더 많은 텍스트 커서 속성들을 수정할 수 있다. 색상을 맞춤화하려면
cursor
라는 face의
:background
속성을 변경한다(416 페이지의 33.1.5절 [Face 맞춤화] 참고). (이 face의 다른 속성들은 효과가 없고, 커서 아래에 표시되는 텍스트는 프레임의 배경색을 이용해 그려진다.) 모양을 변경하기 위해서는 버퍼 로컬 변수인
cursor-type
를 맞춤화하는데, 이에
box
(기본값),
hollow
(빈 상자),
bar
(세로 막대),
(bar . n)
(너비가 n 픽셀인 세로 막대),
hbar
(가로 막대),
(hbar . n)
(높이가 n 픽셀인 가로 막대),
nil
(커서 없음)의 값이 가능하다.


Emacs 가 10초 동안 어떠한 입력도 수신하지 않으면 기본적으로 커서는 10초 후 깜빡거림을 중단하고, 입력 이벤트가 있을 경우 수 세기를 다시 시작한다. 이를 제어하기 위해서는
blink-cursor-blinks
변수를 맞춤화하며, 그 값은 중단하기 전에 입력이 없는 동안 얼마나 깜빡거릴 것인지 명시한다. 이 변수를 0이나 음수로 설정하면 커서는 영원히 깜빡거릴 것이다. 커서 깜빡임을 모두 비활성화하려면
blink-cursor-mode
변수를
nil
로 변경하거나 (412 페이지의 33.1절 [간단한 맞춤화] 참고) 다음 행을 init 파일로 추가한다.


(blink-cursor-mode 0)


아니면
blink-cursor-alist
라는 리스트 변수를 맞춤화하여 커서의 "깜빡임이 꺼질 때" 커서가 어떤 모양인지를 변경할 수 있다. 리스트 내 각 요소는
(on-type . off-type)
형태를 가져야 하는데 이는 커서가 깜빡일 때 on-type(on-type은 위에 설명한 커서 유형 중 하나에 해당)으로 표시된다면 깜빡임이 꺼지면 off-type 으로 표시됨을 의미한다.


탭 문자를 포함해 일부 문자들은 "추가 폭"을 가진다. 커서가 그러한 문자 위에 위치할 경우 보통 기본 문자 너비로 그려진다. 이때
x-stretch-cursor
nil
이 아닌 값으로 변경하면 커서를 확장시켜 넓은 문자를 덮도록 할 수 있다.


커서는 보통 선택되지 않은 창에 깜빡이지 않는 빈 상자로 나타난다. (막대 커서의 경우 대신 더 얇은 막대로 나타난다.) 선택되지 않은 창에서 커서를 끄기 위해서는
cursor-in-non-selected-windows
변수를
nil
로 변경한다.


커서를 더 시각적으로 만들기 위해서는 포인트를 포함한 행을 강조하는 부 모드인 HL Line 모드를 사용할 수 있다. M-x hl-line-mode 를 이용해 현재 버퍼에서 이 기능을 활성화 또는 비활성화한다. M-x global-hl-line-mode 를 이용하면 동일한 모드를 전역적으로 활성화 또는 비활성화한다.


행 절단

연속의 대안으로 (22 페이지의 4.8절 [연속 행] 참고) Emacs는 긴 행을 절단하여 표시할 수도 있다. 이는 창이나 화면 너비에 맞지 않는 모든 문자는 전혀 표시되지 않음을 의미한다. 그래픽 디스플레이에서 fringe 내 작은 직선 화살표는 행의 한쪽 끝에서 절단을 의미한다. 텍스트 터미널 상에서는 가장 왼쪽 열이나 오른쪽 열에 '
$
' 부호로 표시된다.


수평 스크롤은 자동으로 행 절단을 야기한다(72 페이지의 11.4절 [수평 스크롤]을 참고). M-x toggle-truncate-lines 명령어를 이용하면 특정 버퍼에 행 절단을 명시적으로 활성화할 수도 있다. 이는
truncate-lines
변수를 부분적으로 변경함으로써 작동한다. 해당 변수가
nil
외의 값을 가질 경우 긴 행이 절단되고, nil일 경우 여러 화면 행으로 연속된다. 어떤 값으로
truncate-lines
변수를 설정하든 현재 버퍼로 제한되며, 해당 시간까지는 기본값인
nil
이 적용된다.


분할 창이 너무 좁으면 Emacs는 자동으로 행 절단을 활성화한다. 이를 제어하는
truncate-partial-width-windows
변수는 156 페이지의 17.2절 [분할 창]을 참고한다.


시각 행 모드

일반 행 연속의 또 다른 방법으로 워드 랩(word wrap)을 사용하는 방법이 있다. 여기서는 각각의 긴 논리 행이 일반적 행 연속처럼 두 개 또는 이상의 화면 행으로 나뉜다. 하지만 Emacs는 오른쪽 창 가장자리 근처에 워드 경계에서 행의 래핑을 시도한다. 래핑은 워드 중간에서 발생하지 않으므로 텍스트 읽기가 쉬워진다.


워드 랩이란 선택적 부 모드인 Visual Line 모드에 의해 활성화된다. 현재 버퍼에서 Visual Line 모드를 켜려면 M-v visual-line-mode 를 입력하는데, 이 명령어를 반복하면 다시 꺼진다. 메뉴 바를 이용해 Visual Line 모드를 켤 수도 있으며, Options 메뉴에서 '
Line Wrapping in this Buffer
' 하위메뉴를 선택한 후 '
Word Wrap (Visual Line Mode)
' 메뉴 항목을 선택하면 된다. Visual Line 모드가 활성화되면 모드 행은 모드 디스플레이에 '
wrap
'이란 문자열을 표시한다. M-x global-visual-line-mode 명령어는 모든 버퍼에서 Visual Line 모드를 토글한다.


Visual Line 모드에서 일부 편집 명령어는 논리 행 대신 화면 행에 작업한다: C-a (
beginning-of-visual-line
) 는 화면 행 시작으로 이동하고, C-e (
end-of-visual-line
) 는 화면 행 끝으로 이동하며, C-k (
kill-visual-line
) 는 화면 행 끝까지 텍스트를 제거(kill)한다.


논리 행을 이동하기 위해서는 M-x next-logical-lineM-x previous-logical-line 명령어를 사용한다. 이 명령어들은 Visual Line 모드의 활성화 여부와 상관없이 각각 다음 논리 행과 이전 논리 행으로 포인트를 이동시킨다. 이 명령어들을 자주 사용하면 키 바인딩을 할당하기 편해질 것이다. 432 페이지의 33.3.6절 [Init 재바인딩]을 참고한다.


기본적으로 워드 래핑된 행은 fringe 표시기를 표시하지 않는다. Visual Line 모드는 여러 긴 논리 행을 포함하는 파일을 편집하는 데에 종종 사용되므로 각 래핑된 행에 대해 fringe 표시기를 갖게 되면 시각적으로 거슬릴지도 모른다. 이것은
visual-line-fringe-indicators
변수를 맞춤화하여 변경할 수 있다.


디스플레이 맞춤화

이번 절에서는 Emacs 화면 모양의 여러 측면들을 제어하는 변수를 설명한다. 초급 사용자는 건너뛰어도 좋다.


visible-bell
변수가
nil
이 아닌 경우 Emacs는 보통 종소리를 만들듯이 전체 화면을 깜빡거리게 만든다. 화면을 깜빡이게 만들지 못하는 터미널의 경우 이 변수는 어떠한 효과도 보이지 않을 것이다.


echo-keystrokes
변수는 다중문자 키의 에코잉을 제어하는데, 그 값은 에코잉의 시작을 야기하는 데에 필요한 pause 초 수로, 0은 에코잉을 전혀 하지 않음을 의미한다. 에코잉할 대상이 있을 때 값이 효력을 갖는다. 7 페이지의 1.2절 [에코 영역]을 참고한다.


그래픽 디스플레이에서 Emacs가 바쁠 경우 Emacs는 마우스 포인터를 모래시계로 표시한다. 이 기능을 비활성화하려면
display-hourglass
변수를
nil
로 설정한다.
hourglass-delay
변수는 모래시계가 표시되기 전에 "busy time" 초 수를 결정하며, 기본값은
1
로 설정된다.


마우스 포인터가 Emacs 프레임 안에 있는 경우 사용자가 텍스트를 삽입할 때나 텍스트가 흐릿해지는 상황을 방지하기 위해 문자를 입력할 때마다 Emacs는 마우스 포인터를 눈에 보이지 않게 만든다. (좀 더 정확히 말하자면 사용자가 "자체적으로 입력되는" 문자를 입력할 때마다 숨김이 발생한다는 의미다. 16 페이지의 4.1절 [텍스트 삽입하기] 참고). 마우스 포인터를 이동시키면 다시 표시된다. 이 기능을 비활성화하려면
make-pointer-invisible
변수를
nil
로 설정한다.


그래픽 디스플레이에서
underline-minimum-offset
변수는 밑줄 친 텍스트에서 기준선과 밑줄의 최소 픽셀 거리를 결정한다. 기본값은 1이며, 이를 증가시키면 특정 폰트에 있어 밑줄 친 텍스트의 가독성을 향상시킨다. (하지만 Emacs는 현재 행 영역 아래에는 절대 밑줄을 치지 않을 것이다.)
x-underline-at-descent-line
변수는 밑줄 친 텍스트를 어떻게 그릴 것인지 결정한다. 기본값은 폰트의 기준선에서 그리는
nil
인데, 이를
nil
로 변경하면 Emacs는 폰트의 descent line 과 동일한 높이에 밑줄을 그린다.


overline-margin
변수는 overline 자체의 높이를 포함해 텍스트 위에 overline의 수직 위치를 픽셀로 명시하며, 기본값은
2
다.


일부 텍스트 터미널에서는 굵은 face와 역상 영상(inverse video)을 함께 사용하면 읽기 힘든 텍스트가 생성된다. 이런 경우 bold face 의 효과를 억제하기 위해
nil
이 아닌 인자를 이용한
tty-suppress-bold-inverse-default-colors
함수를 호출한다.


Notes