[Top] | [Contents] | [Index] | [ ? ] |
This is an introduction to Programming in Emacs Lisp, for people who are not programmers.
This master menu first lists each chapter and index; then it lists every node in every chapter.
Preface | What to look for. | |
1. List Processing | What is Lisp? | |
2. Practicing Evaluation | Running several programs. | |
3. How To Write Function Definitions | How to write function definitions. | |
4. A Few Buffer--Related Functions | Exploring a few buffer-related functions. | |
5. A Few More Complex Functions | A few, even more complex functions. | |
6. Narrowing and Widening | Restricting your and Emacs attention to a region. | |
7. car , cdr , cons : Fundamental Functions | Fundamental functions in Lisp. | |
8. Cutting and Storing Text | Removing text and saving it. | |
9. How Lists are Implemented | How lists are implemented in the computer. | |
10. Yanking Text Back | Pasting stored text. | |
11. Loops and Recursion | How to repeat a process. | |
12. Regular Expression Searches | Regular expression searches. | |
13. Counting: Repetition and Regexps | A review of repetition and regexps. | |
14. Counting Words in a defun | Counting words in a defun . | |
15. Readying a Graph | A prototype graph printing function. | |
16. Your `.emacs' File | How to write a `.emacs' file. | |
17. Debugging | How to run the Emacs Lisp debuggers. | |
18. Conclusion | Now you have the basics. | |
A. The the-the Function | An appendix: how to find reduplicated words. | |
B. Handling the Kill Ring | An appendix: how the kill ring works. | |
C. A Graph with Labelled Axes | How to create a graph with labelled axes. | |
D. GNU Free Documentation License | ||
Index | ||
About the Author | ||
-- The Detailed Node Listing --- | ||
---|---|---|
Preface | ||
Why Study Emacs Lisp? | Why learn Emacs Lisp? | |
On Reading this Text | Read, gain familiarity, pick up habits.... | |
For Whom This is Written | For whom this is written. | |
Lisp History | ||
A Note for Novices | You can read this as a novice. | |
Thank You | ||
List Processing | ||
1.1 Lisp Lists | What are lists? | |
1.2 Run a Program | Any list in Lisp is a program ready to run. | |
1.3 Generate an Error Message | Generating an error message. | |
1.4 Symbol Names and Function Definitions | Names of symbols and function definitions. | |
1.5 The Lisp Interpreter | What the Lisp interpreter does. | |
1.6 Evaluation | Running a program. | |
1.7 Variables | Returning a value from a variable. | |
1.8 Arguments | Passing information to a function. | |
1.9 Setting the Value of a Variable | Setting the value of a variable. | |
1.10 Summary | The major points. | |
1.11 Exercises | ||
Lisp Lists | ||
Numbers, Lists inside of Lists | List have numbers, other lists, in them. | |
1.1.1 Lisp Atoms | Elemental entities. | |
1.1.2 Whitespace in Lists | Formating lists to be readable. | |
1.1.3 GNU Emacs Helps You Type Lists | How GNU Emacs helps you type lists. | |
The Lisp Interpreter | ||
Complications | Variables, Special forms, Lists within. | |
1.5.1 Byte Compiling | Specially processing code for speed. | |
Evaluation | ||
1.6.1 Evaluating Inner Lists | Lists within lists... | |
Variables | ||
fill-column , an Example Variable | ||
1.7.1 Error Message for a Symbol Without a Function | The error message for a symbol without a function. | |
1.7.2 Error Message for a Symbol Without a Value | The error message for a symbol without a value. | |
Arguments | ||
1.8.1 Arguments' Data Types | Types of data passed to a function. | |
1.8.2 An Argument as the Value of a Variable or List | An argument can be the value of a variable or list. | |
1.8.3 Variable Number of Arguments | Some functions may take a variable number of arguments. | |
1.8.4 Using the Wrong Type Object as an Argument | Passing an argument of the wrong type to a function. | |
1.8.5 The message Function | A useful function for sending messages. | |
Setting the Value of a Variable | ||
1.9.1 Using set | Setting values. | |
1.9.2 Using setq | Setting a quoted value. | |
1.9.3 Counting | Using setq to count. | |
Practicing Evaluation | ||
How to Evaluate | Typing editing commands or C-x C-e causes evaluation. | |
2.1 Buffer Names | Buffers and files are different. | |
2.2 Getting Buffers | Getting a buffer itself, not merely its name. | |
2.3 Switching Buffers | How to change to another buffer. | |
2.4 Buffer Size and the Location of Point | Where point is located and the size of the buffer. | |
2.5 Exercise | ||
How To Write Function Definitions | ||
An Aside about Primitive Functions | ||
3.1 The defun Special Form | The defun special form. | |
3.2 Install a Function Definition | Install a function definition. | |
3.3 Make a Function Interactive | Making a function interactive. | |
3.4 Different Options for interactive | Different options for interactive . | |
3.5 Install Code Permanently | Installing code permanently. | |
3.6 let | Creating and initializing local variables. | |
3.7 The if Special Form | What if? | |
3.8 If--then--else Expressions | If--then--else expressions. | |
3.9 Truth and Falsehood in Emacs Lisp | What Lisp considers false and true. | |
3.10 save-excursion | Keeping track of point, mark, and buffer. | |
3.11 Review | ||
3.12 Exercises | ||
Install a Function Definition | ||
The effect of installation | ||
3.2.1 Change a Function Definition | How to change a function definition. | |
Make a Function Interactive | ||
An Interactive multiply-by-seven , An Overview | An overview. | |
3.3.1 An Interactive multiply-by-seven | The interactive version. | |
let
| ||
let Prevents Confusion | ||
3.6.1 The Parts of a let Expression | ||
3.6.2 Sample let Expression | ||
3.6.3 Uninitialized Variables in a let Statement | ||
The if Special Form
| ||
if in more detail | ||
3.7.1 The type-of-animal Function in Detail | An example of an if expression. | |
Truth and Falsehood in Emacs Lisp | ||
An explanation of nil | nil has two meanings. | |
save-excursion
| ||
Point and Mark | A review of various locations. | |
3.10.1 Template for a save-excursion Expression | ||
A Few Buffer--Related Functions | ||
4.1 Finding More Information | How to find more information. | |
4.2 A Simplified beginning-of-buffer Definition | Shows goto-char , | |
point-min , and push-mark .
| ||
4.3 The Definition of mark-whole-buffer | Almost the same as beginning-of-buffer . | |
4.4 The Definition of append-to-buffer | Uses save-excursion and | |
insert-buffer-substring .
| ||
4.5 Review | ||
4.6 Exercises | ||
The Definition of mark-whole-buffer
| ||
An overview of mark-whole-buffer | ||
4.3.1 Body of mark-whole-buffer | Only three lines of code. | |
The Definition of append-to-buffer
| ||
An Overview of append-to-buffer | ||
4.4.1 The append-to-buffer Interactive Expression | A two part interactive expression. | |
4.4.2 The Body of append-to-buffer | Incorporates a let expression. | |
4.4.3 save-excursion in append-to-buffer | How the save-excursion works. | |
A Few More Complex Functions | ||
5.1 The Definition of copy-to-buffer | With set-buffer , get-buffer-create . | |
5.2 The Definition of insert-buffer | Read-only, and with or . | |
5.3 Complete Definition of beginning-of-buffer | Shows goto-char , | |
point-min , and push-mark .
| ||
5.4 Review | ||
5.5 optional Argument Exercise | ||
The Definition of insert-buffer
| ||
The Code for insert-buffer | ||
5.2.1 The Interactive Expression in insert-buffer | When you can read, but not write. | |
5.2.2 The Body of the insert-buffer Function | The body has an or and a let . | |
5.2.3 insert-buffer With an if Instead of an or | Using an if instead of an or . | |
5.2.4 The or in the Body | How the or expression works. | |
5.2.5 The let Expression in insert-buffer | Two save-excursion expressions. | |
The Interactive Expression in insert-buffer
| ||
A Read-only Buffer | When a buffer cannot be modified. | |
`b' in an Interactive Expression | An existing buffer or else its name. | |
Complete Definition of beginning-of-buffer
| ||
5.3.1 Optional Arguments | ||
5.3.2 beginning-of-buffer with an Argument | Example with optional argument. | |
5.3.3 The Complete beginning-of-buffer | ||
beginning-of-buffer with an Argument
| ||
Disentangle beginning-of-buffer | ||
What happens in a large buffer | ||
What happens in a small buffer | ||
Narrowing and Widening | ||
The Advantages of Narrowing | The advantages of narrowing | |
6.1 The save-restriction Special Form | The save-restriction special form. | |
6.2 what-line | The number of the line that point is on. | |
6.3 Exercise with Narrowing | ||
car , cdr , cons : Fundamental Functions
| ||
Strange Names | An historical aside: why the strange names? | |
7.1 car and cdr | Functions for extracting part of a list. | |
7.2 cons | Constructing a list. | |
7.3 nthcdr | Calling cdr repeatedly. | |
7.4 nth | ||
7.5 setcar | Changing the first element of a list. | |
7.6 setcdr | Changing the rest of a list. | |
7.7 Exercise | ||
cons
| ||
Build a list | ||
7.2.1 Find the Length of a List: length | How to find the length of a list. | |
Cutting and Storing Text | ||
Storing Text in a List | Text is stored in a list. | |
8.1 zap-to-char | Cutting out text up to a character. | |
8.2 kill-region | Cutting text out of a region. | |
8.3 delete-and-extract-region : Digressing into C | Minor note on C programming language macros. | |
8.4 Initializing a Variable with defvar | How to give a variable an initial value. | |
8.5 copy-region-as-kill | A definition for copying text. | |
8.6 Review | ||
8.7 Searching Exercises | ||
zap-to-char
| ||
The Complete zap-to-char Implementation | The complete implementation. | |
8.1.1 The interactive Expression | A three part interactive expression. | |
8.1.2 The Body of zap-to-char | A short overview. | |
8.1.3 The search-forward Function | How to search for a string. | |
8.1.4 The progn Special Form | The progn special form. | |
8.1.5 Summing up zap-to-char | Using point and search-forward . | |
kill-region
| ||
The Complete kill-region Definition | The function definition. | |
8.2.1 condition-case | Dealing with a problem. | |
8.2.2 delete-and-extract-region | Doing the work. | |
Initializing a Variable with defvar
| ||
Seeing the Current Value of a Variable | ||
8.4.1 defvar and an asterisk | An old-time convention. | |
copy-region-as-kill
| ||
The complete copy-region-as-kill function definition | The complete function definition. | |
8.5.1 The Body of copy-region-as-kill | The body of copy-region-as-kill . | |
The Body of copy-region-as-kill
| ||
last-command and this-command | ||
The kill-append function | ||
The kill-new function | ||
How Lists are Implemented | ||
Lists diagrammed | ||
9.1 Symbols as a Chest of Drawers | Exploring a powerful metaphor. | |
9.2 Exercise | ||
Yanking Text Back | ||
10.1 Kill Ring Overview | The kill ring is a list. | |
10.2 The kill-ring-yank-pointer Variable | The kill-ring-yank-pointer variable. | |
10.3 Exercises with yank and nthcdr | ||
Loops and Recursion | ||
11.1 while | Causing a stretch of code to repeat. | |
11.2 Save your time: dolist and dotimes | ||
11.3 Recursion | Causing a function to call itself. | |
11.4 Looping Exercise | ||
while
| ||
Looping with while | Repeat so long as test returns true. | |
11.1.1 A while Loop and a List | A while loop that uses a list. | |
11.1.2 An Example: print-elements-of-list | Uses while , car , cdr . | |
11.1.3 A Loop with an Incrementing Counter | A loop with an incrementing counter. | |
11.1.4 Loop with a Decrementing Counter | A loop with a decrementing counter. | |
A Loop with an Incrementing Counter | ||
Example with incrementing counter | Counting pebbles in a triangle. | |
The parts of the function definition | ||
Putting the function definition together | ||
Loop with a Decrementing Counter | ||
Example with decrementing counter | More pebbles on the beach. | |
The parts of the function definition | ||
Putting the function definition together | ||
Save your time: dolist and dotimes
| ||
The dolist Macro | ||
The dotimes Macro | ||
Recursion | ||
11.3.1 Building Robots: Extending the Metaphor | Same model, different serial number ... | |
11.3.2 The Parts of a Recursive Definition | Walk until you stop ... | |
11.3.3 Recursion with a List | Using a list as the test whether to recurse. | |
11.3.4 Recursion in Place of a Counter | ||
11.3.5 Recursion Example Using cond | ||
11.3.6 Recursive Patterns | Often used templates. | |
11.3.7 Recursion without Deferments | Don't store up work ... | |
11.3.8 No Deferment Solution | ||
Recursion in Place of a Counter | ||
An argument of 1 or 2 | ||
An argument of 3 or 4 | ||
Recursive Patterns | ||
Recursive Pattern: every | ||
Recursive Pattern: accumulate | ||
Recursive Pattern: keep | ||
Regular Expression Searches | ||
12.1 The Regular Expression for sentence-end | The regular expression for sentence-end . | |
12.2 The re-search-forward Function | Very similar to search-forward . | |
12.3 forward-sentence | A straightforward example of regexp search. | |
12.4 forward-paragraph : a Goldmine of Functions | A somewhat complex example. | |
12.5 Create Your Own `TAGS' File | How to create your own `TAGS' table. | |
12.6 Review | ||
12.7 Exercises with re-search-forward | ||
forward-sentence
| ||
Complete forward-sentence function definition | ||
The while loops | Two while loops. | |
The regular expression search | A regular expression search. | |
forward-paragraph : a Goldmine of Functions
| ||
Shortened forward-paragraph function definition | Key parts of the function definition. | |
The let* expression | ||
The forward motion while loop | ||
Between paragraphs | Movement between paragraphs. | |
Within paragraphs | Movement within paragraphs. | |
No fill prefix | When there is no fill prefix. | |
With a fill prefix | When there is a fill prefix. | |
Summary | Summary of forward-paragraph code. | |
Counting: Repetition and Regexps | ||
Counting words | ||
13.1 The count-words-region Function | Use a regexp, but find a problem. | |
13.2 Count Words Recursively | Start with case of no words in region. | |
13.3 Exercise: Counting Punctuation | ||
The count-words-region Function
| ||
Designing count-words-region | The definition using a while loop. | |
13.1.1 The Whitespace Bug in count-words-region | ||
Counting Words in a defun
| ||
Divide and Conquer | ||
14.1 What to Count? | What to count? | |
14.2 What Constitutes a Word or Symbol? | What constitutes a word or symbol? | |
14.3 The count-words-in-defun Function | Very like count-words . | |
14.4 Count Several defuns Within a File | Counting several defuns in a file. | |
14.5 Find a File | Do you want to look at a file? | |
14.6 lengths-list-file in Detail | A list of the lengths of many definitions. | |
14.7 Count Words in defuns in Different Files | Counting in definitions in different files. | |
14.8 Recursively Count Words in Different Files | Recursively counting in different files. | |
14.9 Prepare the Data for Display in a Graph | Prepare the data for display in a graph. | |
Count Words in defuns in Different Files
| ||
Determine the lengths of defuns | Return a list of the lengths of defuns. | |
14.7.1 The append Function | Attach one list to another. | |
Prepare the Data for Display in a Graph | ||
14.9.1 Sorting Lists | Sorting lists. | |
14.9.2 Making a List of Files | Making a list of files. | |
14.9.3 Counting function definitions | ||
Readying a Graph | ||
Printing the Columns of a Graph | ||
15.1 The graph-body-print Function | How to print the body of a graph. | |
15.2 The recursive-graph-body-print Function | ||
15.3 Need for Printed Axes | ||
15.4 Exercise | ||
Your `.emacs' File | ||
Emacs' Default Configuration | ||
16.1 Site-wide Initialization Files | You can write site-wide init files. | |
16.2 Specifying Variables using defcustom | Emacs will write code for you. | |
16.3 Beginning a `.emacs' File | How to write a .emacs file . | |
16.4 Text and Auto Fill Mode | Automatically wrap lines. | |
16.5 Mail Aliases | Use abbreviations for email addresses. | |
16.6 Indent Tabs Mode | Don't use tabs with TeX | |
16.7 Some Keybindings | Create some personal keybindings. | |
16.8 Keymaps | More about key binding. | |
16.9 Loading Files | Load (i.e., evaluate) files automatically. | |
16.10 Autoloading | Make functions available. | |
16.11 A Simple Extension: line-to-top-of-window | Define a function; bind it to a key. | |
16.12 X11 Colors | Colors in version 19 in X. | |
16.13 Miscellaneous Settings for a `.emacs' File | ||
16.14 A Modified Mode Line | How to customize your mode line. | |
Debugging | ||
17.1 debug | How to use the built-in debugger. | |
17.2 debug-on-entry | Start debugging when you call a function. | |
17.3 debug-on-quit and (debug) | Start debugging when you quit with C-g. | |
17.4 The edebug Source Level Debugger | How to use Edebug, a source level debugger. | |
17.5 Debugging Exercises | ||
Handling the Kill Ring | ||
B.1 The rotate-yank-pointer Function | Move a pointer along a list and around. | |
B.2 yank | Paste a copy of a clipped element. | |
B.3 yank-pop | Insert first element pointed to. | |
The rotate-yank-pointer Function
| ||
rotate-yank-pointer in Outline | ||
B.1.1 The Body of rotate-yank-pointer | The body of rotate-yank-pointer . | |
The Body of rotate-yank-pointer
| ||
Digression about the word `error' | How to mislead humans, but not computers. | |
The else-part of the if expression | ||
The % remainder function | The remainder, % , function. | |
Using % in rotate-yank-pointer | ||
Pointing to the last element | ||
yank
| ||
Passing the argument | Pass the argument to rotate-yank-pointer . | |
Passing a negative argument | Pass a negative argument. | |
A Graph with Labelled Axes | ||
Labelled Example Graph | ||
C.1 The print-graph Varlist | let expression in print-graph . | |
C.2 The print-Y-axis Function | Print a label for the vertical axis. | |
C.3 The print-X-axis Function | Print a horizontal label. | |
C.4 Printing the Whole Graph | The function to print a complete graph. | |
The print-Y-axis Function
| ||
What height should the label be? | What height for the Y axis? | |
C.2.1 Side Trip: Compute a Remainder | How to compute the remainder of a division. | |
C.2.2 Construct a Y Axis Element | Construct a line for the Y axis. | |
C.2.3 Create a Y Axis Column | Generate a list of Y axis labels. | |
C.2.4 The Not Quite Final Version of print-Y-axis | A not quite final version. | |
The print-X-axis Function
| ||
Similarities and differences | Much like print-Y-axis , but not exactly. | |
C.3.1 X Axis Tic Marks | Create tic marks for the horizontal axis. | |
Printing the Whole Graph | ||
Changes for the Final Version | A few changes. | |
C.4.1 Testing print-graph | Run a short test. | |
C.4.2 Graphing Numbers of Words and Symbols | Executing the final code. | |
C.4.3 A lambda Expression: Useful Anonymity | How to write an anonymous function. | |
C.4.4 The mapcar Function | Apply a function to elements of a list. | |
C.4.5 Another Bug ... Most Insidious | Yet another bug ... most insidious. | |
C.4.6 The Printed Graph | The graph itself! | |