2017년 emacs 설정
Ubuntu 16.04를 설치하면서 새로이 emacs를 설치하고 설정하게 되어 과정들을 한 글에 요약해서 정리하는 것이 목적인 글입니다.(기존의 글들의 내용을 정리하는 것)
설치는
sudo apt-get install emacs로 합니다.
한글은 GUI의 옵션탭에서 설정하면 쉽게 입력이 가능합니다.
터미널에서 emacs를 실행시켜준 후 C-f로 ~/.emacs 파일을 실행하여 편집해야 합니다.
1) 창 크기와 시작 위치 설정
;;frame size
(add-to-list 'default-frame-alist '(height . 80))
(add-to-list 'default-frame-alist '(width . 82))
(set-frame-position (selected-frame) 1921 0)
듀얼모니터를 사용중이라 프레임의 위치가 1921, 0이 된 것입니다. 창의 왼쪽 상단의 위치를 픽셀단위로 지정하는 것입니다.
윈도우의 경우에는 1921대신 0, 높이는 66
2) 글꼴 설정
;;emacs windows
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "Ubuntu Mono" :foundry "unknown" :slant normal :weight normal :height 130 :width normal)))))
Ubuntu Mono 글꼴의 13pt(아마도)를 기본글꼴로 설정합니다.
윈도우의 경우에는
;;emacs windows
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "VeraGothic" :foundry "unknown" :slant normal :weight normal :height 98 :width normal)))))
3) MELPA 설정
최근의 emacs package들은 대개 MELPA라는 시스템을 통해서 관리되고 있는 것 같습니다.
http://melpa.org/#/getting-started
를 참조하여 MELPA를 설정하면 됩니다.
windows의 경우 https대신에 http를 사용하고 X-x package-refresh-contents를 한 번 해 주어야 합니다
이후에
X-x package-install <package name>
를 이용하거나
X-x package-list-packages
로 리스트를 켜서 설치하고 싶은 패키지를 i로 마크하고 x를 눌러 설치하면 됩니다.(u는 언마크, d는 삭제용마크, U는 업그레이드가능한 패키지 모두 마크)
4) 테마 설정
MELPA에 등록된 zenburn을 설치한 후 .emacs 파일에
(load-theme 'zenburn t)
를 추가해주면 됩니다. 주의할 것은 (package-initialize)뒤에 해당 명령어가 와야 합니다.
5)paredit 설치
MELPA로 설치 후
1. (require 'paredit)을 추가해주고
2. (mapc (lambda (mode)
(let ((hook (intern (concat (symbol-name mode)
"-mode-hook"))))
(add-hook hook (lambda () (paredit-mode +1)))))
'(emacs-lisp inferior-lisp slime lisp-interaction scheme))
도 추가해 줍니다. 2번은 lisp관련 모드를 실행시에 자동으로 paredit mode를 켜준다는 의미 입니다.
6)rainbow-delimiters 설치
MELPA로 설치 후
1. (require 'rainbow-delimiters)를 추가
2. (add-hook 'prog-mode-hook 'rainbow-delimiters-mode) 추가
7)유용한 UI 세팅
;;UI settings
(show-paren-mode 1) ;;show paren mode
(setq show-paren-delay 0)
(setq inhibit-startup-screen t) ;;skip startup screen and specify default mode
(setq initial-major-mode 'python-mode)
(setq initial-scratch-message "")
(display-time) ;;show time on status bar
(transient-mark-mode t) ;; show selected area
(global-linum-mode t) ;; show line numbers
(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)
(require 'cl-lib)
(defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate)
"Prevent annoying \"Active processes exist\" query when you quit Emacs."
(cl-letf (((symbol-function #'process-list) (lambda ())))
ad-do-it))
8)단축키 설정
(global-set-key [C-kanji] 'set-mark-command) ;;윈도우 특정
(global-set-key [f3] 'compile)
(global-set-key [f4] 'gdb)
(global-set-key [f5] 'comment-region)
(global-set-key [f6] 'uncomment-region)
(global-set-key [f7] 'python-indent-shift-left)
(global-set-key [f8] 'python-indent-shift-right)
;;(global-set-key [f7] 'previous-buffer)
;;(global-set-key [f8] 'next-buffer)
(global-set-key [f12] 'shell)
9)company mode 설치
이전에는 auto-complete을 사용하였으나 company mode가 좀 더 편리하다는 결과를 발견. auto complete을 하려면 다른 el파일들(popup이나 fuzzy)도 받아야 해서 불편했기에 바꾸기로 결정
MELPA에서 company를 설치하고
;;company mode
(add-hook 'after-init-hook '(global-company-mode '(not inferior-python-mode)))
(setq company-dabbrev-downcase 0)
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 1)
(with-eval-after-load 'company
(dolist (key '("<return>" "RET"))
;; Here we are using an advanced feature of define-key that lets
;; us pass an "extended menu item" instead of an interactive
;; function. Doing this allows RET to regain its usual
;; functionality when the user has not explicitly interacted with
;; Company.
(define-key company-active-map (kbd key)
`(menu-item nil company-complete
:filter ,(lambda (cmd)
(when (company-explicit-action-p)
cmd)))))
(define-key company-active-map (kbd "M-n") nil)
(define-key company-active-map (kbd "M-p") nil)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(define-key company-active-map (kbd "TAB") 'company-complete-selection)
(define-key company-active-map (kbd "<tab>") 'company-complete-selection)
;; (define-key company-active-map (kbd "TAB") 'company-complete-common-or-cycle)
;; (define-key company-active-map (kbd "<tab>") 'company-complete-common-or-cycle)
;; (define-key company-active-map (kbd "S-TAB") 'company-select-previous)
;; (define-key company-active-map (kbd "<backtab>") 'company-select-previous)
)
추가 (윈도우에서는 idle delay를 0.001과같이 해준다)
10)괄호 자동 완성
(add-hook 'prog-mode-hook 'electric-pair-mode)