theme, font - 우리 emacs 예쁘게 예쁘게~ (windows)
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가 포함한다. 즉, face가 font를 포함한다.
(w32-select-font)
사용 가능한 폰트를 다이얼로그로 확인할 수 있다. 그리고 emacs에서 폰트 설정으로 사용할 문자열도 쉽게 구할 수 있다.
*scratch*
버퍼 혹은 Lisp Interaction 모드에서 C-j
로 eval 한다. 원하는 폰트 그리고 크기와 같은 설정을 하고 확인 버튼을 누르면 다음 줄에 문자열이 찍힌다. 이걸 set-face-attribute
인자로 사용하면 된다. 여기서 C-j
는 eval-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 함수로 만들 이유가 없다. 안으로 넣고 싶지만 이건 다음에 하도록 하고 여기서 마무리.
참고
- ChangeFontsPermanentlyOnWindows - emacswiki
- Set Fonts - emacswiki
- LineSpacing - emacswiki
- Emacs: How to List & Set Font - ergoemacs
Update 반듯한 org-table을 위해 1:2 비율을 맞춰서 사용하고 있다
폰트는 최근에 바꿨다.C-x C-s C-x C-c