emacs lisp 시작하기

이맥스 설정파일은 이맥스 리스프 소스코드로 이루어져있습니다. 이맥스 리스프의 기초를 알고 있으면 설정을 할 때 도움이 됩니다.

함수의 호출

리스프는 (fun-name arg0 arg1) 형태로 함수를 호출합니다. 다른 언어와 다르게 모든 언어의 구성 요소가 함수입니다. 조건문, 반복문, 함수 정의, 변수 선언 등의 모든 문법이 함수 호출 문법을 따릅니다.

;; + 함수는 인자를 여러개 받아서 다 더한 값을 리턴합니다.
(+ 1 2)
(+ 1 2 3)

;; message 함수는 c의 printf 함수와 비슷합니다.
;; 포맷 스트링과 인자를 받아 포매팅한 뒤 메세지 버퍼에 출력합니다.
(message "hello world")
(message "%s %s" 2 4)

설정파일의 일부분만 실행하기

이맥스 설정파일 혹은 아무 텍스트 버퍼에서 (+ 1 2)를 입력한 뒤 커서를 닫는 괄호 ) 뒤에 두고 Ctrl-x Ctrl-e 를 입력해 보세요. 이맥스의 아래 조그만 박스에 결과 값인 3이 나오는 것을 볼 수 있습니다. 이맥스를 설졍할 때에는 이렇게 일부 설정 코드만 실행하는 일이 자주 있습니다.

주석

emacs lisp는 ; 글자부터 라인의 끝까지를 주석으로 인식하고 무시합니다. 잠시 특별한 설정값을 무시하게 만들거나 설정에 대한 설명을 쓰기 위해서 사용합니다.

자료구조

리스트

()는 함수를 호출하는 문법이었습니다. 앞에 작은 따옴표를 붙이면 '() 리스트 자료구조가 됩니다. '(1 2 3)은 1, 2, 3을 포함하는 리스트입니다. 설정할 때 여러 값을 입력해야 하는 경우 자주 사용합니다.

페어

리스트는 원소를 0개부터 n개까지 가질 수 있습니다. 두 개의 원소를 표현하고 싶을 때 종종 페어를 사용합니다. 두 개의 원소 사이에 . 을 집어넣어 pair를 만들 수 있습니다. '(1 . 3) 는 1과 3을 가진 페어입니다. 키 밸류 형식의 설정을 하거나 값이 두개가 필요한 설정을 만들 때 자주 사용합니다.

페어와 리스트는 알고 보면 같은 걸 의미하지만 설정파일을 만드는 입장에서 자세한 내용을 알 필요 없습니다.

함수와 변수의 구분

emacs lisp는 함수와 변수의 영역을 구분합니다. 함수를 다른 함수의 인자로 보낼 때는 작은 따옴표를 함수 이름 앞에 붙여주어야 합니다. 언제 ' 를 붙여야 하는지 이해할 필요는 없습니다. 다른 예시코드를을 보고 ' 를 붙이고 있다면 따라서 붙여주고, ' 가 안붙어 있다면 따라서 안 붙여주면 됩니다.

;; 아래 설정을 통해
;; f5 키를 누르면 build-project 함수가 호출되게 만들 수 있습니다.
(global-set-key (kbd "<f5>") 'build-project)

:config :foo 같이 콜론 뒤에 글자가 오는 행태는 심볼을 만듭니다

emacs lisp 설정에 사용되는 함수들을 보다 보면 python의 keyword 인자같은 문법을 볼 때가 있습니다. 뒤에서 사용할 use-package 함수가 바로 그런 함수입니다.