Document history initiated: 15 May 2021
아주 오래전에 올려둔 Mac에서 Emacs설정방법등에 적혀있던 내용이 너무 오래되서, 최근 시스템변경하면서 설정하는김에 다시 정리해 둡니다.
최근 시스템 변경을 하면서 처음부터 설치를 하는 방법을 선택하고 여러가지 시스템설정에 업데이트가 있었습니다. 그동안 트렌드를 반영하여 업데이틀 할 예정이고, 테마와 관련된 몇 가지 설정들은 Subicura님의 블로그를 참고하였습니다.
간단 요약:
- iTerm2 및 oh-my-zsh (이는 Mac OS X Catalina부터 기본 shell script가 bash에서 zsh로 변경된것에 기인합니다 [1])를 사용하고, 여기에 맞춰 다양한 컬러테마를 적용할수있습니다. 필자의 경우, Powerlevel10k를 사용하고 이에맞춰 폰트를 MesloLGS NF로 변경하였습니다.
- Brew에서 설치하는 Emacs 기본 배포판의 경우에는 Big Sur의 GUI앱이 따라오지 않습니다. 개인적으로 Aquamacs는 사용하지 않습니다. 결국 또 다른 Emacs의 수정 배포판들을 찾아야 하는데 저의 경우에는 emacs-plus (해당 깃허브 링크 참조)를 사용하게 되었습니다. 일단 장점은 brew에서 설치/관리가 가능합니다. 1과 마찬가지로 폰트를 MesloLGS NF로 변경하였습니다.
내용:
1. iTerm2 의 설정
많은 부분에서 기존의 설정을 답습해옵니다. 번거로움을 피하기위해 재차 요약하자면 다음과 같습니다. 자잘한 부분의 보기좋은 모습 편집은 포함시키지 않았습니다.
1-1. 키 설정 변경: Left Command key를 Emacs의 Meta키로 사용하기 위한 설정
Preferences -> Profiles -> Keys에서 Left/Right Option key를 ESC+로 설정해둡니다. 이는 이맥스의 Meta키의 디폴트값이 ESC+이다보니, 편의성을 위해 Option키로 대체시킵니다.
이 다음 Preferences -> Keys -> Remap Modifiers에서 왼쪽 옵션키와 커맨드키를 서로 바꿔치기 합니다. 결과적으로, 이제 iterm2사용중에서는 왼쪽 커맨드키는 Meta키로 대응됩니다. 만약 iTerm2 외적으로 Command키가 필요한 경우 오른쪽 커맨드키를 활용하면 됩니다.
1-2. 테마
원래는 iTerm2 와 Emacs모두 Solarized Dark를 사용했엇는데, Subicura님의 블로그를 보고 Snazzy를 사용하고 있습니다. (다만 Emacs에서도 synazzy theme가 있지만, 색상이 과한 느낌이라 그대로 Solarized Dark를 이용하고 있습니다) iTerm2와 직접적이지는 않지만, 터미널이 Zsh로 바뀌었는김에 저는 oh-my-zsh를 사용하고 있습니다. 적용한 테마는 Powerlevel10k이고, 이 때 폰트는 MesloLGS NF입니다. 추가 폰트이므로 테마적용하면서 함께 설치할 필요가 있습니다. (같은 폰트를 이후에 Emacs에서도 사용할 예정입니다. 기존에는 Meslo를 사용했었습니다)
덧붙여 터미널내부의 색환경 설정을 위해 예전 설정과 같지만, zsh환경이므로 .zshrc에다 다음을 추가해둡니다.
export TERM=xterm-256color
2. Emacs의 설치/설정
2-1. 설치 및 기본 설정
언제부터인가, Brew에서의 기본 Emacs에서 GUI가 제공되지 않고 있는듯 합니다. 그로인해 현재는 Emacs-Plus 패키지 ( github page: https://github.com/d12frosted/homebrew-emacs-plus )를 사용하고 있고 역시 Brew를 통해 탭한다음에 사용할수 있습니다.
brew tap d12frosted/emacs-plus
brew install emacs-plus@27
필자의 경우에는 기존의 .emacs파일을 가져와서 적당히 문제생기는 부분만 구글링을 통해 수정했지만, 새로운 사용자의 경우에는 다음과 같은 몇가지 부분을 미리 추가해둘 필요가 있을 것 같습니다. 기본적으로 Emacs의 경우에는 실행시 .emacs를 읽어들여 설정을 진행합니다. 그래서 Emacs GUI에서 자체적으로 저장해두는 설정들의 대부분은 .emacs에 자체적으로 추가해줍니다. 이 부분은 ;; 코멘트화된 라인으로 따로 설명해두었으므로, 익숙하지 않은 사람들의 경우에는 따로 수정을 가하지 않는게 좋습니다.
이 외에 package저장소를 추가해두는게 좋은데 필자의 경우에는 다음과 같이 ~/.emacs파일에 추가해둡니다. 만약 “~/”에 .emacs파일이 없다면 직접 생성하셔도 무방합니다.
(require ‘package)
(add-to-list ‘package-archives
‘(“melpa” . “http://melpa.org/packages/”) t)
(package-initialize)
(setq package-enable-at-startup nil)
2-2. “emacs -nw” alisas 및 emacs server 관련
현재는 emacs는 GUI를 디폴트로, em에는 alias를 설정해두어 “emacs -nw”를 수행하도록 합니다. -nw (no window)옵션을 사용할 경우 GUI없이 터미널 자체적으로 Emacs가 실행됩니다. 위에서 언급한것처럼, zsh를 사용하므로 .zshrc마지막에 다음을 추가해줍니다.
alias em=’emacs -nw’
현재 필자는 emacsclient를 잘 사용하지 않으므로 M-x server-start를 사용하는 경우는 LaTex로 작업중 Skym과 상호작용을 할때 밖에 없습니다. 그래서 다음 옵션은 필요한 사용자만 .emacs에 설정해주면 됩니다. (옵션은 자체로 ;; 코멘트화시켰습니다)
;; (server-start)
잠깐 emacsclient를 사용할때는 다음과 같은 alias를 역시 .zshrc에 추가해두곤 했습니다. 다만, emacs/ec 두가지와 다르게 세가지가 적용되고, 언제 서버를 사용하고 말고가 번거로워서 현재는 사용하지 않고 있습니다.
;; alias ec=’emacsclient’
2-3. 키 설정
iTerm2에서 설정한 키맵의 경우 터미널 내에서 이맥스를 실행할 경우에만 유효하다. 필자의 경우, LaTex작업과 본격적 코딩작업의 경우 GUI를 활용하므로 다음을 추가로 설정해주어서 Mac의 Option키를 super로, Command 키를 Meta키로 대응시켜야 합니다.
(setq mac-option-modifier ‘super)
(setq mac-command-modifier ‘meta)
2-4. 폰트 및 테마 관련
2-4-1. 폰트
앞서 말씀드렸다시피, 필자는 원래 Meslo를 주로 사용하다가 현재는 MesloLGS NF를 사용합니다. 이는 .emacs에서 custom-set-faces로 수정해줄수 있습니다만, 일반적으로는 M-x customize-face에서 default를 넣고 들어간 곳에서 Font Family에 “MesloLGS NF”를 넣어주고 저장합니다. 그러면 .emacs파일의 customize-set-faces란이 자동으로 수정되어 있습니다.
2-4-2. Emacs GUI theme
앞서 설명드렸다시피 저는 sanityinc-solarized-dark를 GUI의 기본 테마로 사용합니다. Solarized-dark 테마에 대한 디테일은 해당 링크에서 확인하실수 있습니다. iTerm2는 최근 Synazzy를 쓰고 있습니다만, 해당 테마의 경우 강조색상들이 매우 밝은 편이라서 오랫동안 텍스트 작업을 하게 되는 Emacs에는 (저에게) 어울리지 않는다는 결론을 내렸습니다.
이 경우 GUI를 사용할때만 테마를 적용하고 싶으므로, when window-system 이라는 옵션을 적용하여 테마를 적용합니다.
(when window-system
(load-theme ‘sanityinc-solarized-dark t)
)
Sanityinc-solarized-dark를 사용한지 매우 오래되었다보니 여러가지 시인성에 있어서 적응한 부분도 있습니다. 한가지 중요한 단점이, 코멘트 처리된 색상이 기본 폰트색깔과 비슷하기에 구분이 어렵습니다. 그래서 필자의 경우 다음과 같은 부분을 .emacs에 추가해줍니다.
(when window-system
(set-face-foreground ‘font-lock-comment-face “dark red”)
(put ‘upcase-region ‘disabled nil)
)
2-4-3. Emacs terminal theme
필자의 경우 기본 테마를 사용합니다. 시인성은 이미 충분히 좋은 상태라 생각합니다. 장기적으로 사용하기에 조금 눈이 피로할때가 있긴 한데, 어차피 오래 집중하는 글쓰기 및 코딩은 GUI에서 사용하고, 일반적으로 계산 조건 파싱등에 쓰이는 input파일 및 간단한 스크립팅을 터미널에서 사용하므로 특별한 테마설정은 해 주지 않습니다.
2-5. 기타 자잘한 설정들
필자의 .emacs파일에는 과거부터 써오던 흔적들이 남겨져 있다보니 조금 이런저런 설정들이 짜깁기 되어있습니다. 특히 org, LaTex + AUCTeX, 혹은 frame-window관련설정들이 그렇습니다만, 이런건 일반적이지 않은 부분들이니 새로 글타래를 열도록 하겠습니다. 그 외의 자잘하지만 유용한 설정들만 언급하도록 하겠습니다.
2-5-1. .h파일을 자동으로 C++ 모드로 가져오기:
(add-to-list ‘auto-mode-alist ‘(“\\.h\\’” . c++-mode))
2-5-2. ring-bell 무시하기
(setq ring-bell-function ‘ignore)
2-5-3. word-wrapping
(setq word-wrap t)
(setq longlines-wrap-follows-window-size t)
2-5-4. reload setting
(defun reload-dotemacs()
“Reload .emacs”
(interactive)
(load-file “~/.emacs”))
2-5-5. Start-up screen 무시하기
.emacs에서 다음을 추가하면 됩니다.
(custom-set-variables
‘(inhibit-startup-screen t))
최근에 사용하고 있던 emacs-plus@27 GUI의 경우 startup-screen자체에서 제일 마지막에 손쉽게 설정변경을 해주는 옵션이 생겼습니다 (다른 배포판은 확인해보지 않았습니다). 이를 선택하면 위 설정내용이 .emacs에 자동으로 삽입됩니다.
각주:
[1] Shell script의 기본은 달라지지 않았으나 zsh가 기존의 bash에서 무엇이 다른가 싶어서 몇가지 검색결과, 대부분 필자가 사용하는 수준에서는 달라지는게 없다는 결론을 내리게 되었습니다. 몇가지 편의성 기능들이 달라지고, 이들의 보여주는 수준이 더 유려합니다. 그러무로 굳이 옮기지 않을 이유가 없습니다. 혹시 기존의 bash script를 그대로 수행하기 원한다면 hashbang을 이용해서 다음과 같이 기술하면 될 듯 합니다.
#!/bin/bash
zsh와 bash의 자세한 차이점은 링크한 스택오버플로우 답변에 잘 나와있습니다. 혹은 linux기반으로 설명되어있는 링크한 블로그의 글 역시 도움이 됩니다.
Leave a Reply