#매뉴얼: #이맥스리스프
2023-11-14 Note emacslisp manual notes- #개발팁: #이맥스 #리스프 - #질의응답
- #이맥스리스프 #디버깅
- #이맥스리스프: #모든파일 #린터 #포메터 - #디레드 #매크로
- #이맥스리스프: #조직모드 #파싱트리 다루는 방법
- #매뉴얼: #둠이맥스 #이맥스리스프
- #둠이맥스: #이맥스리스프 #키바인딩 #설정
info 로 들어가서 봐
이걸 어떻게 어디서 만들어 온것인가?! orgabilize 로 가져온 것 같은데?!
An Introduction to Programming in Emacs Lisp
Emacs Lisp 프로그래밍 소개
The GNU Emacs website is at https://www.gnu.org/software/emacs/.
GNU Emacs 웹사이트는 https://www.gnu.org/software/emacs/.
To view this manual in other formats, click here.
이 설명서를 다른 형식으로 보려면 여기를 클릭하세요.
This is An Introduction to Programming in Emacs Lisp, for people who are not programmers.
이 문서는 프로그래머가 아닌 분들을 위한 이맥스리스프 프로그래밍 입문서입니다.
Distributed with Emacs version 29.1.
Emacs 버전 29.1 과 함께 배포됩니다.
Copyright © 1990–1995, 1997, 2001–2023 Free Software Foundation, Inc.
저작권 © 1990-1995, 1997, 2001-2023 Free Software Foundation, Inc.
Printed copies available from https://shop.fsf.org/. Published by:
인쇄본은 https://shop.fsf.org/ 에서 구할 수 있습니다. 게시자:
GNU Press, https://www.fsf.org/licensing/gnu-press/
a division of the email: sales@fsf.org
Free Software Foundation, Inc. Tel: +1 (617) 542-5942
51 Franklin Street, Fifth Floor Fax: +1 (617) 542-2652
Boston, MA 02110-1301 USA
ISBN 1-882114-43-4
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; there being no Invariant Section, with the Front-Cover Texts being “A GNU Manual”, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License”.
자유 소프트웨어 재단이 발행한 GNU 자유 문서 라이선스 버전 1.3 또는 그 이후 버전에 따라 이 문서를 복사, 배포 및/또는 수정할 수 있는 권한이 부여되며, 불변 섹션은 없으며, 앞 표지 텍스트는 “GNU 매뉴얼"이고 뒷 표지 텍스트는 아래 (a)와 같이 표시됩니다. 라이선스 사본은 “GNU 자유 문서 라이선스"라는 제목의 섹션에 포함되어 있습니다.
(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.”
(a) FSF 의 뒷표지 텍스트는 다음과 같습니다: “여러분은 이 GNU 매뉴얼을 자유롭게 복사하고 수정할 수 있습니다. FSF 에서 사본을 구입하는 것은 GNU 를 개발하고 소프트웨어의 자유를 증진하는 데 도움이 됩니다.”
This master menu first lists each chapter and index; then it lists every node in every chapter.
이 마스터 메뉴는 먼저 각 챕터와 인덱스를 나열한 다음, 모든 챕터의 모든 노드를 나열합니다.
Preface서문
Most of the GNU Emacs integrated environment is written in the programming language called Emacs Lisp. The code written in this programming language is the software—the sets of instructions—that tell the computer what to do when you give it commands. Emacs is designed so that you can write new code in Emacs Lisp and easily install it as an extension to the editor.
대부분의 GNU Emacs 통합 환경은 Emacs Lisp 라는 프로그래밍 언어로 작성되어 있습니다. 이 프로그래밍 언어로 작성된 코드는 사용자가 명령을 내릴 때 컴퓨터가 수행할 작업을 알려주는 소프트웨어, 즉 명령어 집합입니다. Emacs 는 Emacs Lisp 로 새 코드를 작성하고 편집기의 확장으로 쉽게 설치할 수 있도록 설계되었습니다.
(GNU Emacs is sometimes called an “extensible editor”, but it does much more than provide editing capabilities. It is better to refer to Emacs as an “extensible computing environment”. However, that phrase is quite a mouthful. It is easier to refer to Emacs simply as an editor. Moreover, everything you do in Emacs—find the Mayan date and phases of the moon, simplify polynomials, debug code, manage files, read letters, write books—all these activities are kinds of editing in the most general sense of the word.)
(GNU Emacs 를 “확장 가능한 편집기"라고 부르기도 하지만, 편집 기능을 제공하는 것 이상의 역할을 합니다. 이맥스를 “확장 가능한 컴퓨팅 환경"이라고 부르는 것이 더 낫습니다. 하지만 이 문구는 꽤나 어려운 표현입니다. Emacs 를 단순히 편집기라고 부르는 것이 더 쉽습니다. 마야의 날짜와 달의 위상 찾기, 다항식 단순화, 코드 디버그, 파일 관리, 편지 읽기, 책 쓰기 등 Emacs 에서 하는 모든 활동은 가장 일반적인 의미에서 편집의 일종입니다.)
Why Study Emacs Lisp?
왜 Emacs Lisp 를 공부해야 할까요?]]
On Reading this Text
이 텍스트를 읽을 때]]
For Whom This is Written
이 글의 대상]]
Lisp History Lisp 역사]]
A Note for Novices
초보자를 위한 참고 사항]]
Thank You 감사합니다]]
Why Study Emacs Lisp?
왜 Emacs Lisp 를 공부해야 할까요?
Although Emacs Lisp is usually thought of in association only with Emacs, it is a full computer programming language. You can use Emacs Lisp as you would any other programming language.
Emacs Lisp 는 일반적으로 Emacs 와 연관해서만 생각되지만, 완전한 컴퓨터 프로그래밍 언어입니다. 다른 프로그래밍 언어와 마찬가지로 Emacs Lisp 를 사용할 수 있습니다.
Perhaps you want to understand programming; perhaps you want to extend Emacs; or perhaps you want to become a programmer. This introduction to Emacs Lisp is designed to get you started: to guide you in learning the fundamentals of programming, and more importantly, to show you how you can teach yourself to go further.
프로그래밍을 이해하고 싶거나, 이맥스를 확장하고 싶거나, 프로그래머가 되고 싶을 수도 있습니다. 이 Emacs Lisp 입문서는 프로그래밍의 기초를 배우고, 더 중요한 것은 스스로 더 발전할 수 있는 방법을 보여주기 위해 설계되었습니다.
On Reading this Text
이 텍스트를 읽을 때
All through this document, you will see little sample programs you can run inside of Emacs. If you read this document in Info inside of GNU Emacs, you can run the programs as they appear. (This is easy to do and is explained when the examples are presented.) Alternatively, you can read this introduction as a printed book while sitting beside a computer running Emacs. (This is what I like to do; I like printed books.) If you don’t have a running Emacs beside you, you can still read this book, but in this case, it is best to treat it as a novel or as a travel guide to a country not yet visited: interesting, but not the same as being there.
이 문서 전체에 걸쳐, 이맥스에서 실행할 수 있는 작은 샘플 프로그램들을 볼 수 있습니다. GNU Emacs 내부의 정보에서 이 문서를 읽으면 나타나는 대로 프로그램을 실행할 수 있습니다. (이 방법은 간단하며 예제가 제시될 때 설명되어 있습니다.) 또는 이 소개서를 인쇄된 책으로 이맥스를 실행하는 컴퓨터 옆에 앉아서 읽을 수도 있습니다. (저는 인쇄된 책을 좋아합니다.) 실행 중인 Emac 이 옆에 없는 경우에도 이 책을 읽을 수 있지만, 이 경우에는 소설이나 아직 방문하지 않은 국가에 대한 여행 가이드처럼 흥미롭지만 그곳에 있는 것과 같지는 않은 것으로 취급하는 것이 가장 좋습니다.
Much of this introduction is dedicated to walkthroughs or guided tours of code used in GNU Emacs. These tours are designed for two purposes: first, to give you familiarity with real, working code (code you use every day); and, second, to give you familiarity with the way Emacs works. It is interesting to see how a working environment is implemented. Also, I hope that you will pick up the habit of browsing through source code. You can learn from it and mine it for ideas. Having GNU Emacs is like having a dragon’s cave of treasures.
이 소개의 대부분은 GNU Emacs 에서 사용되는 코드에 대한 워크스루 또는 가이드 투어에 할애되어 있습니다. 이 투어는 두 가지 목적을 위해 설계되었습니다. 첫째, 실제 작동하는 코드(매일 사용하는 코드)에 익숙해지도록 하고, 둘째, Emacs 의 작동 방식에 익숙해지도록 하기 위해서입니다. 작업 환경이 어떻게 구현되는지 보는 것은 흥미롭습니다. 또한 소스 코드를 살펴보는 습관을 들였으면 좋겠습니다. 이를 통해 배우고 아이디어를 얻을 수 있습니다. GNU 이맥스는 보물이 가득한 용의 동굴을 발견한 것과 같습니다.
In addition to learning about Emacs as an editor and Emacs Lisp as a programming language, the examples and guided tours will give you an opportunity to get acquainted with Emacs as a Lisp programming environment. GNU Emacs supports programming and provides tools that you will want to become comfortable using, such as M-. (the key which invokes the xref-find-definitions
command). You will also learn about buffers and other objects that are part of the environment. Learning about these features of Emacs is like learning new routes around your home town.
예제와 가이드 투어를 통해 편집기로서의 이맥스와 프로그래밍 언어로서의 이맥스 리스프에 대해 배울 수 있을 뿐만 아니라, 리스프 프로그래밍 환경으로서의 이맥스에 익숙해질 수 있는 기회를 제공합니다. GNU Emacs 는 프로그래밍을 지원하며 M-. ( xref-find-definitions
명령을 호출하는 키)와 같이 익숙하게 사용할 수 있는 도구를 제공합니다. 또한 환경의 일부인 버퍼 및 기타 객체에 대해서도 배우게 됩니다. 이맥스의 이러한 기능에 대해 배우는 것은 마치 고향의 새로운 길을 배우는 것과 같습니다.
Finally, I hope to convey some of the skills for using Emacs to learn aspects of programming that you don’t know. You can often use Emacs to help you understand what puzzles you or to find out how to do something new. This self-reliance is not only a pleasure, but an advantage.
마지막으로, 여러분이 모르는 프로그래밍의 측면을 배우기 위해 이맥스를 사용하는 몇 가지 기술을 전달하고자 합니다. 여러분은 종종 이해가 안 되는 부분을 이해하거나 새로운 작업을 수행하는 방법을 찾기 위해 이맥스를 사용할 수 있습니다. 이러한 자립심은 즐거움일 뿐만 아니라 장점이기도 합니다.
For Whom This is Written
이 글의 대상
This text is written as an elementary introduction for people who are not programmers. If you are a programmer, you may not be satisfied with this primer. The reason is that you may have become expert at reading reference manuals and be put off by the way this text is organized.
이 글은 프로그래머가 아닌 사람들을 위한 기초 입문서로 작성되었습니다. 프로그래머라면 이 입문서가 만족스럽지 않을 수도 있습니다. 그 이유는 참조 매뉴얼을 읽는 데 전문가가 되어 이 텍스트의 구성 방식에 거부감을 느낄 수 있기 때문입니다.
An expert programmer who reviewed this text said to me:
이 글을 검토한 전문 프로그래머가 이렇게 말했습니다:
/I prefer to learn from reference manuals. I “dive into” each paragraph, and “come up for air” between paragraphs.
저는 참조 매뉴얼을 통해 배우는 것을 선호합니다. 각 단락을 ‘파고들고’, 단락 사이사이에 ‘숨을 고르며’ 공부합니다./
/When I get to the end of a paragraph, I assume that subject is done, finished, that I know everything I need (with the possible exception of the case when the next paragraph starts talking about it in more detail). I expect that a well written reference manual will not have a lot of redundancy, and that it will have excellent pointers to the (one) place where the information I want is.
한 단락이 끝나면 그 주제에 대한 설명이 끝났고, 필요한 모든 것을 알고 있다고 가정합니다(다음 단락에서 더 자세히 설명하기 시작하는 경우는 예외로 합니다). 잘 쓰여진 참조 매뉴얼에는 중복되는 내용이 많지 않을 것이며, 내가 원하는 정보가 있는 (한 곳)에 대한 훌륭한 포인터가 있을 것으로 기대합니다./
This introduction is not written for this person!
이 소개글은 이 분을 위해 작성된 글이 아닙니다!
Firstly, I try to say everything at least three times: first, to introduce it; second, to show it in context; and third, to show it in a different context, or to review it.
첫째, 저는 모든 말을 최소한 세 번 이상 하려고 노력합니다. 첫째는 소개할 때, 둘째는 맥락에서 보여줄 때, 셋째는 다른 맥락에서 보여 주거나 검토할 때입니다.
Secondly, I hardly ever put all the information about a subject in one place, much less in one paragraph. To my way of thinking, that imposes too heavy a burden on the reader. Instead I try to explain only what you need to know at the time. (Sometimes I include a little extra information so you won’t be surprised later when the additional information is formally introduced.)
둘째, 저는 한 주제에 대한 모든 정보를 한 단락에 넣지 않고 한 곳에 모으는 경우가 거의 없습니다. 제 생각에는 독자에게 너무 많은 부담을 주는 것 같습니다. 대신 그때그때 꼭 알아야 할 내용만 설명하려고 노력합니다. (나중에 추가 정보가 공식적으로 소개될 때 놀라지 않도록 약간의 추가 정보를 포함할 때도 있습니다.)
When you read this text, you are not expected to learn everything the first time. Frequently, you need make only a nodding acquaintance with some of the items mentioned. My hope is that I have structured the text and given you enough hints that you will be alert to what is important, and concentrate on it.
이 텍스트를 읽을 때 처음부터 모든 것을 배울 필요는 없습니다. 종종 언급된 일부 항목에 대해 고개를 끄덕이는 정도만 알아두면 됩니다. 제가 이 글을 체계적으로 구성하고 충분한 힌트를 드렸기 때문에 여러분은 무엇이 중요한지에 대해 경각심을 갖고 집중할 수 있을 것입니다.
You will need to dive into some paragraphs; there is no other way to read them. But I have tried to keep down the number of such paragraphs. This book is intended as an approachable hill, rather than as a daunting mountain.
일부 단락을 자세히 살펴봐야 합니다. 다른 방법으로 읽을 방법이 없습니다. 그러나 저는 그러한 단락의 수를 줄이려고 노력했습니다. 이 책은 벅찬 산이 아니라 접근하기 쉬운 언덕으로 의도되었습니다.
This book, An Introduction to Programming in Emacs Lisp, has a companion document, The GNU Emacs Lisp Reference Manual in The GNU Emacs Lisp Reference Manual. The reference manual has more detail than this introduction. In the reference manual, all the information about one topic is concentrated in one place. You should turn to it if you are like the programmer quoted above. And, of course, after you have read this Introduction, you will find the Reference Manual useful when you are writing your own programs.
이 책인 이맥스 리스프 프로그래밍 입문에는 동반 문서인 GNU 이맥스 리스프 참조 매뉴얼이 있으며, 이 문서는 GNU 이맥스 리스프 참조 매뉴얼에 있습니다. 참조 매뉴얼에는 이 소개보다 더 자세한 내용이 있습니다. 참조 설명서에는 한 주제에 대한 모든 정보가 한 곳에 집중되어 있습니다. 위에서 인용한 프로그래머와 같은 분이라면 참고하시기 바랍니다. 물론 이 소개를 읽은 후에는 직접 프로그램을 작성할 때 참조 설명서가 유용하다는 것을 알게 될 것입니다.
Lisp HistoryLisp 역사
Lisp was first developed in the late 1950s at the Massachusetts Institute of Technology for research in artificial intelligence. The great power of the Lisp language makes it superior for other purposes as well, such as writing editor commands and integrated environments.
Lisp 는 1950 년대 후반에 매사추세츠 공과대학에서 인공 지능 연구를 위해 처음 개발되었습니다. Lisp 언어의 강력한 성능 덕분에 편집기 명령어 작성 및 통합 환경과 같은 다른 용도로도 탁월합니다.
GNU Emacs Lisp is largely inspired by Maclisp, which was written at MIT in the 1960s. It is somewhat inspired by Common Lisp, which became a standard in the 1980s. However, Emacs Lisp is much simpler than Common Lisp. (The standard Emacs distribution contains an optional extensions file, cl-lib.el
, that adds many Common Lisp features to Emacs Lisp.)
GNU Emacs Lisp 는 1960 년대에 MIT 에서 작성된 Maclisp 에서 크게 영감을 받았습니다. 1980 년대에 표준이 된 커먼 리스프에서 어느 정도 영감을 받았습니다. 그러나 이맥스 리스프는 커먼 리스프보다 훨씬 간단합니다. (표준 Emacs 배포에는 선택적 확장 파일( cl-lib.el
)이 포함되어 있으며, 이 확장 파일은 Emacs Lisp 에 많은 Common Lisp 기능을 추가합니다.)
A Note for Novices
초보자를 위한 참고 사항
If you don’t know GNU Emacs, you can still read this document profitably. However, I recommend you learn Emacs, if only to learn to move around your computer screen. You can teach yourself how to use Emacs with the built-in tutorial. To use it, type C-h t. (This means you press and release the CTRL key and the h at the same time, and then press and release t.)
GNU 이맥스를 모르더라도 이 문서를 유익하게 읽을 수 있습니다. 하지만 컴퓨터 화면에서 이동하는 방법을 배우기 위해서라도 이맥스를 배우는 것이 좋습니다. 내장된 튜토리얼을 통해 Emacs 사용법을 스스로 배울 수 있습니다. 사용하려면 C-h t 을 입력합니다(즉, CTRL 키와 h 키를 동시에 눌렀다가 뗀 다음 t 을 눌렀다가 뗀다는 의미입니다).
Also, I often refer to one of Emacs’s standard commands by listing the keys which you press to invoke the command and then giving the name of the command in parentheses, like this: M-C-\ (indent-region
). What this means is that the indent-region
command is customarily invoked by typing M-C-\. (You can, if you wish, change the keys that are typed to invoke the command; this is called rebinding. See .) The abbreviation M-C-\ means that you type your META key, CTRL key and \ key all at the same time. (On many modern keyboards the META key is labeled ALT.) Sometimes a combination like this is called a keychord, since it is similar to the way you play a chord on a piano. If your keyboard does not have a META key, the ESC key prefix is used in place of it. In this case, M-C-\ means that you press and release your ESC key and then type the CTRL key and the \ key at the same time. But usually M-C-\ means press the CTRL key along with the key that is labeled ALT and, at the same time, press the \ key.
또한, 저는 종종 명령을 호출하기 위해 누르는 키를 나열한 다음 괄호 안에 명령 이름을 지정하여 Emacs 의 표준 명령 중 하나를 참조합니다(예: M-C-\ ( indent-region
). 즉, indent-region
명령은 일반적으로 M-C-\ 을 입력하여 호출됩니다. (원하는 경우 명령을 호출하기 위해 입력하는 키를 변경할 수 있으며, 이를 리바인딩이라고 합니다. 키맵을 참조하세요.) M-C-\ 라는 약어는 META 키, CTRL 키, \ 키를 동시에 입력한다는 의미입니다. (대부분의 최신 키보드에서는 META 키에 ALT 이라는 레이블이 붙어 있습니다.) 피아노에서 화음을 연주하는 방식과 유사하기 때문에 이러한 조합을 키코드라고 부르기도 합니다. 키보드에 META 키가 없는 경우 ESC 키 접두사가 대신 사용됩니다. 이 경우 M-C-\ 는 ESC 키를 눌렀다가 뗀 다음 CTRL 키와 \ 키를 동시에 입력한다는 의미입니다. 그러나 일반적으로 M-C-\ 는 ALT 키와 함께 CTRL 키를 누른 다음 동시에 \ 키를 누르는 것을 의미합니다.
In addition to typing a lone keychord, you can prefix what you type with C-u, which is called the universal argument. The C-u keychord passes an argument to the subsequent command. Thus, to indent a region of plain text by 6 spaces, mark the region, and then type C-u6M-C-\. (If you do not specify a number, Emacs either passes the number 4 to the command or otherwise runs the command differently than it would otherwise.) See Numeric Arguments in The GNU Emacs Manual.
단독 키코드를 입력하는 것 외에도 범용 인수라고 하는 C-u 를 입력 앞에 붙일 수 있습니다. C-u 키코드는 인수를 후속 명령에 전달합니다. 따라서 일반 텍스트 영역을 6 칸 들여쓰기하려면 해당 영역을 표시한 다음 C-u6M-C-\ 을 입력합니다(숫자를 지정하지 않으면 Emac 은 숫자 4 를 명령에 전달하거나 그렇지 않은 경우와 다르게 명령을 실행합니다). 숫자 인수는 GNU Emacs 매뉴얼을 참조하세요.
If you are reading this in Info using GNU Emacs, you can read through this whole document just by pressing the space bar, SPC. (To learn about Info, type C-h i and then select Info.)
GNU Emac 을 사용하여 Info 에서 이 문서를 읽는 경우 스페이스바( SPC )를 누르기만 하면 전체 문서를 읽을 수 있습니다. (Info 에 대해 알아보려면 C-h i 을 입력한 다음 Info 를 선택합니다.)
A note on terminology: when I use the word Lisp alone, I often am referring to the various dialects of Lisp in general, but when I speak of Emacs Lisp, I am referring to GNU Emacs Lisp in particular.
용어에 대한 참고 사항: Lisp 라는 단어만 사용할 때는 일반적으로 Lisp 의 다양한 방언을 지칭하는 경우가 많지만, Emacs Lisp 에 대해 말할 때는 특히 GNU Emacs Lisp 를 지칭합니다.
이전: 초보자를 위한 참고 사항, 위로: 서문 [목차][색인]
Thank You감사합니다
My thanks to all who helped me with this book. My especial thanks to Jim Blandy, Noah Friedman, JimKingdon, Roland McGrath, FrankRitter, RandySmith, RichardM.Stallman, and MelissaWeisshaus. My thanks also go to both PhilipJohnson and DavidStampe for their patient encouragement. My mistakes are my own.
이 책에 도움을 주신 모든 분들께 감사드립니다. 특히 짐 블랜디, 노아 프리드먼, 짐 킹던, 롤랜드 맥그라스, 프랭크 리터, 랜디 스미스, 리처드 M. 스톨만, 멜리사 와이즈하우스에게 감사의 마음을 전합니다. 또한 인내심을 갖고 격려해 준 필립 존슨과 데이비드 스탬프에게도 감사를 표합니다. 제 실수는 제 책임입니다.
Robert J. Chassell bob@gnu.org
로버트 J. 채셀 bob@gnu.org