Emacs/Tips

C20

개요

이 문서는 Emacs를 사용하는 데에 유용한 정보들을 모아놓는 것을 목적으로 한다. 우선은 특별한 분류없이 나열해 놓고, 어느 정도 분량이 축적되면 읽기 편하도록 정리한다.

공통

한글 설정

언어 환경

Emacs에서는 M-x prefer-coding-systemM-x set-language-environment[1]를 통해 (인)코딩 환경을 설정한다. 이 두 변수는 상호적으로 관계를 가지고 있으며, Emacs 메뉴얼에서도 둘의 관계를 다소 모호하게 서술하고 있다([1], [2]). 일단 메뉴얼의 언급을 인용하면, language environment는 텍스트를 읽을 때 어떤 코딩 시스템을 인식할 지를 정의하며, 설정한 language environtment에 따라 prioity list가 바뀐다. 그러나 정확한 이유는 알 수 없지만, 둘 다 설정하는 것이 가장 확실하다.

예시
(setq utf-translate-cjk-mode nil) ; disable CJK coding/encoding (Chinese/Japanese/Korean characters)
(set-language-environment 'utf-8)
(set-keyboard-coding-system 'utf-8-mac) ; For old Carbon emacs on OS X only
(setq locale-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(unless (eq system-type 'windows-nt)
(set-selection-coding-system 'utf-8))
(prefer-coding-system 'utf-8)

[3], [4]

;; 한영키 바꿔치기
(set-language-environment "Korean")
(prefer-coding-system 'utf-8)
(global-set-key (kbd "<S-kana>") 'toggle-input-method)
(global-set-key (kbd "<kana>") 'toggle-input-method)

[5]

실행속도 개선

Emacs는 그 자체로는 (현존하는 대부분의 컴퓨팅 파워의 경우) 실행시간이 그리 느리지 않다. 그러나 Emacs는 필연적으로 패키지를 많이 설치해야 하며, 이 과정에서 의존성과 더불어 실행 속도에 대한 이슈가 중요하게 된다. 이 섹션에서는 Emacs의 실행 속도를 개선하는 방법을 정리한다.

패키지 로딩 시간 측정

일반적으로 Emacs는 emacs-init-time를 사용해 전체 실행 속도를 측정한다(참고). 다만 이 경우 어떤 부분에서 많은 지연이 발생하는지 측정하는 것이 불가능하다. Matthias bloggt에서는 대신 get-internal-run-time를 사용하는 방식을 제안한다. 이 명령어는 코드를 실행한 시작지점부터 해당 지점까지 프로세서가 실행된 시간을 계산한다. 인터프리터 언어인 Lisp의 특성 덕분에, 이 명령어를 사용하면 원하는 지점마다 실행시간을 체크하는 것이 가능하다. 아래 코드와 같이 두 개의 리스트를 만들고, 하나는 섹션이름, 다른 하나는 런타임 수치를 저장한다.

;; an example section
(add-to-list 'section-names "an example section")
(some emacs lisp)
(and some more)
(add-to-list 'init-runtime (get-internal-run-time))

이 데이터는 저장 후 가공하거나, 출처에서 나왔듯 Gnuplot을 사용해 그래프로 띄워도 된다.

혹은 댓글에서 Sacha Chua가 제안하였듯, 더욱 간단하게 use-package를 사용하는 방법도 있다. use-package-verbose 옵션을 t로 주면, 특정 패키지를 로딩하는 시간이 0.1초를 초과할 경우 *Messages* 버퍼에 기록된다. 0.1초란 수치는 use-package-minimum-reported-time 값으로 정의되어 있으며, 바꿀 수 있다.

패키지 관련

개별 패키지별로 유용한 Tip들의 모음. 해당 패키지 페이지가 작성되면 링크만 남기고 해당 페이지로 옮길 예정.

Org-mode

알림

테스트 예정.

  1. 현재 버퍼에 대해서만 설정하려면 current-language-environment 값을 변경해야 한다.
blog comments powered by Disqus