theme, font - 우리 emacs 예쁘게 예쁘게~ (windows)

emacs solarized theme

M-x package-install <RET> color-theme-solarized

패키지를 바로 설치하거나 아님 init file에 package install 목록을 만들어서 관리할 수 있다.

(load-theme 'solarized-light t)

theme는 solarized를 사용한다.

(setq windows? (eq system-type 'windows-nt))
(defun available-font? (font)
  (member font (font-family-list)))
(when windows?
  ;; font
  (when (available-font? "DejaVu Sans Mono")
    (set-face-attribute 'default nil
			:font "Dejavu Sans Mono-11"
			:weight `normal)
    (setq-default line-spacing 3)))

폰트는 DejaVu Sans Mono를 사용. windows에서만 이 폰트를 사용한다. 10보다는 11이 보기 좋아서 크기를 키웠고 줄 간격이 너무 좁아서 조절했다.

theme

theme는 tomorrow night을 사용하다가 최근에 solarized로 바꿨다. MELPA에 color-theme-solarized 이름으로 패키지가 등록돼 있다.

한번 설치해보고 별로 안 예쁘길래 tomorrow night을 계속 쓰고 있었는데, vimcast를 보다 보니 정말 예뻐 보이더라. 그래서 다시 한 번 시도해보기로 했다. light와 dark가 있는데, 내가 원하는 건 light. dark보다는 tomorrow night가 더 예쁜 것 같다.

font

M-x describe-font
name (opened by): -outline-Courier New-normal-normal-normal-mono-13-*-*-*-c-*-iso8859-1
       full name: Courier New-10.0
            size: 13
          height: 16
 baseline-offset:  0
relative-compose:  0

현재 사용하고 있는 폰트 정보를 출력한다. windows에서 기본 폰트는 Courier New.

(set-face-attribute 'default
					nil
					:font "Dejavu Sans Mono-11"
					:weight `normal)

windows에서 10은 너무 작아서 11로 설정했다. 함수 이름에 font가 아닌 face가 들어가는데, emacs에서는 text를 보여주는 스타일을 face라고 한다. weight라던지, 밑줄과 같은 font 꾸밈 효과도 다 face가 포함한다. 즉, facefont를 포함한다.

(w32-select-font)

사용 가능한 폰트를 다이얼로그로 확인할 수 있다. 그리고 emacs에서 폰트 설정으로 사용할 문자열도 쉽게 구할 수 있다.

*scratch* 버퍼 혹은 Lisp Interaction 모드에서 C-jeval한다. 원하는 폰트 그리고 크기와 같은 설정을 하고 확인 버튼을 누르면 다음 줄에 문자열이 찍힌다. 이걸 set-face-attribute 인자로 사용하면 된다. 여기서 C-jeval-print-last-sexp 커맨드에 바인딩 되어 있다.

(setq-default line-spacing 3)

테마도 괜찮은 거 같고 폰트는 익숙하니 좋다. 하지만 줄 간격이 너무 좁아 가독성이 떨어진다. 그래서 줄 간격을 조정.

system-type

windows에서는 DejaVu 폰트를 쓰면 된다. 하지만 OS X에는 더 예쁜 폰트가 많다. 뿌리는 같지만, Menlo가 더 예뻐. 그래서 OS마다 다른 세팅을 한다.

C-h v system-type

system-type으로 OS를 알 수 있다.

(setq windows? (eq system-type 'windows-nt))

windows?라는 심볼을 정의한다. t 또는 nil을 리턴.

(when windows?
  ...)

여기에 windows일 때만 eval하고 싶은 코드를 넣으면 된다.

(defun available-font? (font)
  (member font (font-family-list)))
(available-font? "DejaVu Sans Mono")

DejaVu는 따로 설치해야 하는 폰트. OS가 알아서 설치해주는 폰트가 아니다. 만약 폰트가 없다면 에러를 내면서 eval을 멈춰버린다. 그래서 폰트가 없더라도 init file 전체를 eval할 수 있게 폰트가 있는 찾는 함수를 만들었다.

font-family-list는 함수. 이 함수는 가능한 폰트 패밀리를 리턴한다. 리스트에서 첫번 째 element는 함수로 인식해 호출해주므로 리스트를 얻기 위해서는 함수로 eval해야 한다. 그래서 (font-family-list)로 감싼다. member는 list에 element가 있는지 찾는 함수. 없다면 nil을 리턴한다. available-font?는 딱 한 곳에서만 사용하기 때문에 global 함수로 만들 이유가 없다. 안으로 넣고 싶지만 이건 다음에 하도록 하고 여기서 마무리.

참고

Update <2017-09-25 Mon> 폰트는 최근에 바꿨다. 반듯한 org-table을 위해 1:2 비율을 맞춰서 사용하고 있다

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

크리에이티브 커먼즈 라이선스

Published: December 08 2013


Feedback plz <3 @ohyecloudy, ohyecloudy@gmail.com