10 고수되기
히스토리
@user 위에 글을 한글로 번역해줘. 멈추면 중단 지점부터 진행해줘.
- 처음 나오는 전문용어는 스펠링 남길 것
- 수식은 Latex로 표기 유지 할 것
- 인용은 기존 양식 유지
- 조직모드의 Heading Level 유지
- 영한 용어집 생성 (org-glossary)
10.1 서론
이제 이 책을 끝까지 읽으셨으니, 연구하고, 글을 쓰고, 책이나 논문 또는 세상에 공유하고 싶은 어떤 것이든지 출판할 수 있는 충분한 지식을 갖추게 되었습니다. Emacs Writing Studio (EWS) 장을 통해 작업하면서 Emacs 학습 곡선의 가장 가파른 부분을 마스터했습니다. 그러나 Emacs를 사용하다 보면 분명히 자신의 필요에 맞게 세밀하게 조정하고 싶어질 것입니다. Emacs 닌자가 되는 다섯 가지 단계가 있으며, 첫 번째 단계를 지금 밟고 계십니다:
- 기본 이해하기
- 설정 수정하기
- 함수 만들기
- 패키지 빌드하기
- 다른 사람 돕기
이 마지막 장은 Emacs를 마스터하는 길로 안내하는 제안을 제공하여 지식을 심화시키는 데 도움을 드립니다.
10.2 기본 이해하기
EWS는 글쓰기와 관련된 Emacs 사용의 대부분의 측면을 다룹니다. 그러나 이 책은 Emacs의 포괄적인 매뉴얼이 아니라 일련의 작업을 수행하는 방법에 대한 의견이 포함된 설명입니다. 이 책의 텍스트는 각 목표를 달성하는 방법을 하나만 설명하기 때문에 의견이 포함되어 있습니다.
Emacs의 유연성은 동일한 결과를 달성하는 방법이 항상 하나 이상 있다는 것을 의미합니다. 이 자유는 강점이자 약점이 될 수 있으며, 불필요한 논쟁과 혼란을 초래할 수 있습니다.
이 책을 읽고 난 후 더 알고 싶거나 다른 관점을 알고 싶다면, Debra Cameron의 Learning GNU Emacs, Mickey Petersen의 Mastering Emacs 또는 내장된 Emacs 매뉴얼을 읽어보시기를 권장합니다 (Cameron 2005; Petersen 2022).
Emacs에 대해 읽는 것은 새로운 것을 배우는 좋은 방법이지만, 때로는 누군가가 시스템을 사용하는 것을 보는 것이 좋습니다. YouTube는 Emacs 사용에 대해 논의하는 유익한 채널을 찾기에 좋은 곳으로, Prot Stavrou와 System Crafters 채널의 David Wilson의 동영상을 강력히 추천합니다.
10.3 설정 수정하기
Emacs Writing Studio는 철저히 테스트된 설정을 제공하고 Emacs의 커스터마이제이션 프론트엔드를 사용하여 Emacs를 설정하는 무코드 솔루션을 사용합니다. init 파일 내에서 기본 설정을 직접 변경하고 싶을 때가 올 것이며, 이는 Emacs Lisp를 배워야 함을 의미합니다.
왜 코드를 작성하여 Emacs를 설정하고 싶어하는지, 다른 프로그램에서 제공하는 현대적인 그래픽 기능을 사용하지 않는 이유는 무엇일까요? 상업용 소프트웨어는 작동 방식을 정의하기 위해 그래픽 메뉴를 제공합니다. 예를 들어, 그림 Figure 1에서 확인할 수 있듯이, 상자를 체크하거나, 목록에서 항목을 선택하거나, 텍스트 상자에 값을 입력하여 프로그램을 원하는 대로 구성할 수 있습니다.
아래 코드는 그림 Figure 1와 동일합니다. 이 예제는 Emacs가 처음 열릴 때 시작 메시지를 표시할지 여부를 결정합니다. 두 번째 줄은 초기 스크래치 메시지를 설정합니다. 이 경우, 매개변수는 따옴표 사이에 있는 문자열입니다. 마지막 줄은 커서 유형을 막대로 설정합니다. 이 변수에는 ‘bar’ 또는 ‘hollow’와 같은 다른 사전 정의된 옵션이 있습니다. 텍스트 앞에 단일 따옴표를 사용하여 Emacs가 이 옵션을 변수와 혼동하지 않도록 합니다. 이 줄들을 이미지와 비교하여 Elisp 코드를 역공학해보세요.
(setq inhibit-startup-message t
initial-scratch-message "Hello world"
cursor-type 'bar)
전체 표현이 괄호로 둘러싸여 있는 것을 주목하세요. Lisp 프로그래밍에서 일반적입니다. 이 괄호는 코드를 여러 수준으로 중첩할 때 초보 사용자를 혼란스럽게 할 수 있습니다. 그러나 문법에 익숙해지면 괄호는 코드의 논리를 이해하는 데 도움이 되는 유용한 마커가 됩니다.
표면적으로는 코드 기반 방법이 상자에 체크하고 텍스트를 입력하고 드롭다운 목록을 선택하는 것보다 복잡해 보이지만, 그래픽 인터페이스보다 훨씬 강력합니다. 간단한 Emacs Lisp를 작성하는 법을 배우면 Emacs가 실제로 컴퓨터에 대한 최대한의 사용자 친화성을 제공하는 시스템임을 깨닫게 될 것입니다. Emacs Lisp를 사용하는 것은 사용자 친화성의 정점입니다. 당신이 컴퓨터의 동작을 결정하지, 어떤 소프트웨어 회사가 당신의 행동을 제어하지 않습니다. 그러나 이 막대한 권한에는 큰 책임과 학습 곡선이 따릅니다.
init 파일을 수정하기 위해 Lisp를 배우는 가장 쉬운 방법은 EWS 설정에서 패턴을 복사하는 것입니다. 부록은 설정을 설명하고 수정하는 방법에 대한 몇 가지 지침을 제공합니다. 많은 Emacs 사용자들이 자신의 설정을 자유롭게 공유하며, 그들의 코드의 일부를 복사하는 것을 주저하지 마세요. Emacs는 자유 소프트웨어이므로 이 권한을 사용하고 동료 사용자들로부터 배우세요.
마지막 팁: 다른 Emacs 사용자로부터 코드를 복사할 때, 그 코드가 정확히 무엇을 하는지 이해할 때까지 설정에 아무것도 추가하지 마세요. 문서를 읽고 대체 버전을 시도하여 코드를 완전히 이해하세요.
10.3.1 키 시퀀스 수정하기
Emacs는 기본 기능과 내장 패키지에 대해 사전 정의된 키보드 단축키를 제공합니다. 대부분의 외부 패키지는 설정과의 충돌을 방지하기 위해 키보드 단축키를 정의하지 않습니다. EWS 설정은 가장 일반적인 기능에 대해 C-c w
접두사를 사용하여 단축키를 할당합니다. 부록에서 설명한 바와 같이, init 파일에 나열된 키보드 단축키를 쉽게 수정할 수 있습니다.
키보드의 동작을 세 가지 수준에서 변경할 수 있습니다: 프로그래밍 가능한 키보드, 운영 체제 / 윈도우 매니저, 그리고 Emacs.
일부 고급 키보드는 프로그래밍 가능하여 각 키의 출력을 정의할 수 있습니다. 예를 들어, 오른쪽 컨트롤 키를 Hyperkey로 매핑할 수 있습니다. 두 번째 수준에서, 운영 체제는 키보드 입력의 해석을 담당합니다. 예를 들어, Windows에서는 s-E
(Windows와 E)가 파일 탐색기를 엽니다. 이 바인딩을 지우면 Emacs에서 사용할 수 있게 됩니다. 각 운영 체제는 키보드 맵(keymaps)을 변경하는 고유한 방법을 가지고 있습니다. 일부 숙련된 Emacs 사용자들은 반복적인 손목 부상인 ‘Emacs Pinky’를 방지하기 위해 캡스 락 키를 컨트롤 키로 재매핑합니다.
마지막으로, Emacs 자체 내에서 키 시퀀스를 정의할 수 있습니다. 아래 예제는 F5 키를 토글하여 공백 모드를 전환합니다. 이 마이너 모드는 현재 버퍼의 공백을 문자로 표시합니다. 함수 이름 앞의 #'
문자는 Emacs가 이 함수를 평가하지 않고 값만 저장하도록 지시하는 기술적 요구사항입니다. 단축키를 제거하려면 함수 이름으로 nil을 사용하세요.
(keymap-global-set "<f5>" #'whitespace-mode)
이전 예제는 전역 키맵을 사용하여 모든 모드에서 단축키를 사용할 수 있음을 의미합니다. 특정 모드에 대해 단축키를 정의할 수도 있으며, 이는 해당 모드가 활성화된 경우에만 사용할 수 있습니다. 아래 예제는 동일한 단축키를 설정하지만, Org 모드가 활성화된 경우에만 적용됩니다. 따라서 다른 모드에서는 F5 키가 다른 기능을 수행할 수 있습니다.
(keymap-set org-mode-map "<f5>" #'whitespace-mode)
좋은 키보드 단축키의 비결은 의미 정보를 인코딩하는 것입니다. 따라서 거의 모든 EWS 특정 단축키는 w
가 ‘글쓰기’를 의미하는 C-c w
로 시작합니다. 이 접근 방식은 항상 작동하지 않으며, 가장 명확한 문자를 빠르게 소진할 수 있습니다.
일부 사람들은 Emacs의 기본 키보드 설정이 수정자 키를 자주 사용해야 하기 때문에 불편하다고 생각합니다. 이들은 이러한 키의 반복적인 사용이 ‘Emacs 핑키’라는 손목 부상을 유발할 수 있다고 주장합니다. Emacs 생태계 내에는 Evil Mode와 God Mode와 같은 패키지가 있어 기본 키 바인딩을 다른 모델로 변경할 수 있습니다.
10.3.2 Emacs는 생산성의 함정인가?
Emacs를 설정하는 것은 많은 시간이 소요될 수 있는 어려운 작업이며, 쉽게 수행할 수 있기 때문에 생산성의 함정이 될 수 있습니다. Emacs에서 누리는 자유는 모두가 개인적인 선호도를 가지고 있음을 의미합니다. Emacs 개발자들은 모든 개인적인 선호도를 충족시킬 수 없으므로, 사용자가 자신의 워크플로우에 맞게 개발해야 하는 골격 시스템을 제공합니다. Emacs Lisp는 레고 상자와 같아서 이를 사용하여 장난감을 만듭니다. Emacs 설정을 작업하는 것은 매우 재미있지만, 실제로 그것을 가지고 놀 때가 더 좋습니다.
설정을 지속적으로 세밀하게 조정하는 것은 유혹적일 수 있지만, 이는 생산성의 함정이 될 수 있습니다. 맞춤형 Emacs 시스템을 만드는 능력은 큰 유혹이 되어 가짜 생산성으로 이어질 수 있습니다. 이것은 세 가지 형태의 지연 중 하나입니다:
- 니힐리스틱 지연: TV 시청 및 컴퓨터 게임.
- 정교한 지연: 가짜 생산성, 예: Emacs 해킹, 생산성 도구 전환, 양보다는 질을 위한 노트 작성.
- 생산적인 지연: 백일몽.
Emacs 설정을 만지작거리는 것은 니힐리스틱 지연만큼 나쁘지 않지만, 가짜 생산성의 형태가 될 수 있습니다. 워크플로우에서 몇 번의 키 입력만 줄이기 위해 Emacs를 세밀하게 조정하는 데 소요되는 시간은 평생 동안 새로운 워크플로우로 절약할 시간보다 더 많을 수 있습니다. 글쓰기는 버퍼에 입력하는 단어 수보다 훨씬 더 많은 것에 관한 것입니다. 글쓰기는 키보드 효율성만큼이나 사색적인 행위입니다.
EWS 설정은 Emacs를 선호하는 워크플로우에 맞게 설정하는 데 소요되는 시간을 줄이는 데 도움을 줄 것입니다.
10.4 함수 만들기
컴퓨터가 Steve Jobs의 말처럼 “마음의 자전거"라면, Emacs는 마음의 핫로드로서 궁극적인 컴퓨팅 자유를 제공합니다. 맞춤형 함수를 작성하면 일반적인 /Emacs Writing Studio/를 개인적인 컴퓨팅 핫로드로 변환할 수 있습니다.
총체적 컴퓨팅 자유의 세 번째 단계는 자신의 워크플로우에 특화된 작업을 수행하기 위해 맞춤형 함수를 작성하는 것입니다. 대부분의 Emacs 코드는 사용자가 Emacs나 기존 패키지로 해결할 수 없는 무언가를 달성하고자 할 때 존재합니다. Emacs 방식은 사용자가 문제에 대한 자신의 해결책을 개발하는 것입니다.
Emacs를 실행하는 코드는 대부분 Elisp 함수의 모음으로 작성됩니다. 함수의 단순한 정의는 입력값을 출력값으로 변환하는 것입니다. 예를 들어, Emacs에서 키를 누를 때마다 self-insert
함수는 키 입력값을 열려 있는 버퍼에 문자로 변환합니다.
아래 코드는 간단한 Emacs 함수의 구조를 보여줍니다. 이 함수를 실행하면 Emacs는 시스템에서 이름을 추출하여 에코 영역에 인사말을 표시합니다.
(defun ews-greet-user ()
"미니버퍼에 인사말을 표시합니다."
(interactive)
(message "Hello %s, Welcome to Emacs." user-full-name))
이 함수가 어떻게 작동하는지 분석해 보겠습니다:
- 함수는
defun
매크로로 시작하여 새로운 함수를 정의합니다. 이 경우 함수 이름은ews-greet-user입니다. 함수 이름은 비공식적인 명명 규칙을 따르고ews로 시작합니다. 마지막 괄호는 비어 있으며, 이는 이 함수가 입력값을 가지지 않음을 의미합니다. - 두 번째 줄은 함수가 무엇을 하는지 설명합니다. 이는 Emacs가 자체 문서화되는 이유를 보여줍니다. 시스템의 각 함수는 문서 문자열을 가지고 있으며,
C-h v
로 읽을 수 있습니다. (interactive)
부분은 함수를 명령으로 변환합니다. 즉,M-x ews-greet-user
로 호출하거나 키 시퀀스에 바인딩할 수 있습니다.- 마지막 줄은
message
함수로 에코 영역에 메시지를 표시합니다. 이 경우,%s
는user-full-name
변수의 내용으로 대체됩니다.
이 함수를 스크래치 버퍼에 작성하여 시도할 수 있습니다. 그런 다음 커서를 마지막 닫는 괄호 뒤에 놓고 C-x C-e
(eval-last-sexp
)를 사용하여 활성화해야 합니다. 이 작업은 함수를 메모리에 등록하여 M-x
로 호출할 수 있게 합니다.
이 예제의 유용성은 의심스럽지만, 이 함수를 init 파일에 추가하여 모든 Emacs 세션에서 사용할 수 있게 할 수 있습니다.
함수를 어떻게 사용할지는 상상력에만 달려 있습니다. EWS는 ews.el
파일에 기본 기능을 강화하는 맞춤형 함수 세트를 제공합니다. 사용 가능한 모든 EWS 명령 목록을 보려면 M-x ^ews
를 사용하세요. 이 시퀀스는 미니버퍼 완성 메뉴에서 (^
) ’ews’로 시작하는 모든 명령을 보여줍니다.
10.5 패키지 빌드하기
Emacs의 다음 단계는 맞춤형 함수를 패키지를 통해 세상과 공유하는 것입니다. 대부분의 Emacs 패키지는 사용자가 자신의 워크플로우에서 문제를 해결하려고 시도하다가 이를 세상과 공유하기로 결정하면서 시작됩니다.
예를 들어, 내 패키지 Citar-Denote는 Emacs를 이용한 서지학적 노트 관리를 원해서 시작되었습니다. Emacs 코딩 경험이 없었지만, 그래도 시도해보았습니다. 먼저 Citar-Denote의 기본 버전을 공개했지만, 일부 작업을 어떻게 수행할지 몰랐습니다. 코드를 공유하자마자 다른 사람들이 빠르게 도와주었고, 곧 Citar-Denote 패키지는 서지학적 노트를 관리하는 완전한 기능을 갖춘 도구가 되었습니다.
10.6 다른 사람 돕기
Emacs 닌자가 되는 마지막 단계는 다른 사람의 여정에 도움을 주는 것입니다. Reddit과 같은 온라인 포럼을 통해 동료 사용자들을 도울 수 있으며, Emacs 커뮤니티가 활발합니다.
이 책은 저자가 Emacs를 저자로서 사용하는 방법을 공유하는 웹사이트로 시작되었습니다. 웹사이트가 인기를 얻으면서 지금 읽고 계신 책으로 전환되었습니다.
EWS 프로젝트는 Emacs 커뮤니티에 기여하는 저의 방법이자 소프트웨어가 어떻게 작동하는지 더 잘 이해하는 데 도움이 됩니다. 일부 비관론자들은 “할 수 없는 자가 가르친다"고 주장하지만, 어떤 주제를 가르치는 것은 지식을 체계화하고 그 주제에 대해 더 잘 이해하는 최고의 방법입니다.
따라서 Emacs 닌자로서의 임무는 여정에서 덜 진보한 다른 사람들을 돕는 것입니다. 다른 저자들에게 Emacs가 연구자, 저자, 교육자 또는 다른 어떤 일을 하든지 제공하는 자유에 대해 알리세요.
- 히스토리
@user 위에 글을 한글로 번역해줘. 멈추면 중단 지점부터 진행해줘.
- 처음 나오는 전문용어는 스펠링 남길 것
- 수식은 Latex로 표기 유지 할 것
- 인용은 기존 양식 유지
- 조직모드의 Heading Level 유지
- 영한 용어집 생성
영한 용어집
- Emacs
- 이맥스
- Emacs Lisp
- 이맥스 리스프
- EWS
- EWS (Emacs Writing Studio)
- init file
- init 파일
- keybindings
- 키 바인딩
- keymaps
- 키맵
- scratch buffer
- 스크래치 버퍼
- startup message
- 시작 메시지
- whitespace mode
- 공백 모드
- minor mode
- 마이너 모드
- buffer
- 버퍼
- function
- 함수
- command
- 명령
- package
- 패키지
- self-documenting
- 자체 문서화
- documentation string
- 문서 문자열
- interactive
- 인터랙티브
- message
- 메시지
- variable
- 변수
- global keymap
- 전역 키맵
- mode-specific
- 모드 특정
- productivity sink
- 생산성의 함정
- procrastination
- 지연
- nihilistic procrastination
- 니힐리스틱 지연
- sophisticated procrastination
- 정교한 지연
- productive procrastination
- 생산적인 지연
- workflow
- 워크플로우
- repetitive strain injury
- 반복적인 손목 부상
- Emacs Pinky
- 이맥스 핑키
- Evil Mode
- 이블 모드
- God Mode
- 갓 모드
- macro
- 매크로
- self-insert
- 셀프 인서트
- Hot Rod
- 핫로드
- bicycle for the mind
- 마음의 자전거