- Emacs Lisp는 Emacs를 확장하는 프로그래밍 언어로, 사용자가 Emacs를 개인화하고 효율적으로 사용할 수 있게 해줌
- Emacs Lisp는 함수 호출을 통해 모든 작업을 수행하며, 사용자는 키 바인딩이나 명령어를 통해 인터랙티브하게 함수 실행 가능
- Emacs Lisp의 함수는 입력을 받아 출력하며, 환경에 영향을 미치는 부작용을 가질 수 있음
- 버퍼는 데이터 구조로 사용되며, 텍스트의 속성 및 버퍼 로컬 변수를 통해 다양한 작업 수행 가능
- Emacs Lisp는 리스트와 심볼을 사용하여 코드 구조를 형성하며, 부분 평가 및 매크로를 통해 코드 확장 가능
Emacs Lisp Elements
Emacs Lisp 프로그래밍 언어의 큰 그림
- Protesilaos Stavrou가 작성한 이 책은 Emacs Lisp 프로그래밍 언어에 대한 큰 그림을 제공함
- Emacs는 프로그래머블 텍스트 편집기로, Emacs Lisp를 해석하여 동작함
- 사용자는 Emacs를 개인화하여 효율적인 작업 환경을 만들 수 있음
- Emacs Lisp를 통해 사용자는 반복적인 작업을 자동화하여 생산성을 높일 수 있음
- 이 책은 초보자와 고급 사용자를 위한 다양한 주제를 다룸
Emacs Lisp 평가
- Emacs에서의 모든 작업은 Emacs Lisp 함수 호출을 통해 이루어짐
- 사용자는 키 바인딩이나 명령어를 통해 인터랙티브하게 함수를 실행할 수 있음
- Emacs는 버퍼 내의 Elisp 코드를 평가할 수 있으며, 다양한 명령어를 통해 코드 실행 가능
-
eval-expression
명령어를 사용하여 현재 버퍼에서 Elisp 코드 평가 가능
- Emacs는 자체 문서화 기능을 통해 현재 상태를 보고함
부작용과 반환 값
- Emacs Lisp 함수는 입력을 받아 출력하며, 환경에 영향을 미치는 부작용을 가질 수 있음
- 함수의 반환 값은 다른 함수의 입력으로 사용될 수 있음
- 부작용을 통해 Emacs의 상태를 조작하여 원하는 작업을 수행할 수 있음
- 부작용을 신중하게 사용하면 Elisp의 잠재력을 최대한 활용 가능
- 경험을 통해 부작용과 반환 값을 적절히 다루는 직관을 키울 수 있음
데이터 구조로서의 버퍼
- 버퍼는 문자 시퀀스로 데이터를 저장하며, 다양한 함수로 버퍼 위치를 반환함
- 버퍼의 내용을 문자열로 추출하거나, 특정 위치 사이의 부분 문자열을 얻을 수 있음
- 버퍼에 결과를 표시하거나, 버퍼와 관련된 변수를 설정할 수 있음
- 버퍼는 변수의 번들처럼 작동하며, 버퍼 로컬 값을 가질 수 있음
- Emacs 창과 프레임도 데이터 구조로 사용 가능
텍스트의 속성
- 텍스트는 속성을 가질 수 있으며, Emacs Lisp를 통해 메타데이터를 검사 가능
- 텍스트 속성은 구문 강조와 같은 효과를 제공함
- 사용자는
describe-char
명령어를 통해 커서 위치의 문자 속성을 확인할 수 있음
- 사용자는 자신의 메이저 모드를 작성하여 텍스트 속성을 수동으로 추가할 수 있음
- 텍스트는 단순한 문자 이상의 정보를 가질 수 있음
심볼, 균형 잡힌 표현식, 인용
- Emacs Lisp는 많은 괄호를 사용하는 언어로, 코드 구조를 이해하기 쉽게 만듦
- 리스트는 함수 호출로 평가되거나 데이터로 반환될 수 있음
- 리스트를 평가하지 않으려면 단일 인용 부호를 사용함
-
car
와 cdr
함수는 리스트의 첫 번째 요소와 나머지 요소를 반환함
- Emacs Lisp는 매크로를 통해 코드 확장 가능
리스트 내부의 부분 평가
- Emacs Lisp 코드는 평가되거나 그대로 사용될 수 있음
- 리스트를 부분적으로 평가하여 특정 요소만 평가 가능
- 백틱(`)과 쉼표(,)를 사용하여 리스트 내부의 특정 요소를 평가 가능
-
,@
를 사용하여 리스트의 외부 괄호를 제거 가능
- 부분 평가는 매크로에서 더 일반적으로 사용됨
매크로 또는 특수 형식 내부의 평가
- Emacs Lisp 코드의 기본 사례는 평가되거나 평가되지 않는 리스트임
- 매크로는 코드가 다른 코드로 확장되어 평가되도록 하는 템플릿 시스템임
- 매크로 내부에서는 인용이 다르게 처리될 수 있음
- 매크로는 코드의 의도를 더 명확하게 표현하고 최적화를 가능하게 함
- 매크로를 통해 코드의 유연성과 재사용성을 높일 수 있음