1 minute read

;;; prettify-symbols-mode
(add-hook 'prog-mode-hook 'prettify-symbols-mode)

왜 prog-mode-hook을 사용?

Prog mode is a basic major mode for buffers containing programming language source code. Most of the programming language major modes built into Emacs are derived from it.

22.2.5 Basic Major Modes

프로그래밍 언어 메이저(major) 모드가 대부분 상속받는 모드. 여기에 걸면 대부분 적용된다.

특정 모드의 parent 모드는 어떻게 구할 수 있나?

parent 정보는 어디에 저장될까? 궁금해서 emacs-lisp-mode 관련 코드를 살펴봤다.

(define-derived-mode emacs-lisp-mode prog-mode "Emacs-Lisp" ...)

define-derived-mode 함수를 호출해 모드를 상속받는다.

(defmacro define-derived-mode (child parent name &optional docstring &rest body)
  ;; ...
  (put ',child 'derived-mode-parent ',parent)

내부를 보면 put 함수 호출이 보인다. 이건 뭘까?

심볼은 Print name, Value, Function, Property list 이렇게 총 4개의 컴포넌트를 가지고 있다. 여기서 프로퍼티 리스트에 관련된 함수다. put 함수는 프로퍼티 리스트에 값을 넣는다.

(get 'emacs-lisp-mode 'derived-mode-parent)
;;=> prog-mode
(get 'prog-mode 'derived-mode-parent)
;;=> nil

put 함수로 넣었으니 get 함수로 가져올 수 있다.

예쁘게 바꾸고 싶은 심볼이 더 있는데, 어디에서 설정하면 되나?

C-h v prettify-symbols-alist
(("lambda" . 955))

prettify-symbols-alist 변수에 추가하면 된다. 화살표도 많이 쓰는데, 난 아직 눈에 안 익어서 기본값 유지.

24.4 이전 버전에는 어떻게 사용해야 하나?

prettify-symbols-mode 마이너 모드는 버전 24.4부터 내장됐다. 이전 버전에서는 pretty-mode를 사용하면 된다.

참고

C-x C-s C-x C-c