GNU Info
Info Node: (emacs-lisp-intro.info)Top
(emacs-lisp-intro.info)Top
An Introduction to Programming in Emacs Lisp
********************************************
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.
List Processing What is Lisp?
Practicing Evaluation Running several programs.
Writing Defuns How to write function definitions.
Buffer Walk Through Exploring a few buffer-related functions.
More Complex A few, even more complex functions.
Narrowing & Widening Restricting your and Emacs attention to
a region.
car cdr & cons Fundamental functions in Lisp.
Cutting & Storing Text Removing text and saving it.
List Implementation How lists are implemented in the computer.
Yanking Pasting stored text.
Loops & Recursion How to repeat a process.
Regexp Search Regular expression searches.
Counting Words A review of repetition and regexps.
Words in a defun Counting words in a `defun'.
Readying a Graph A prototype graph printing function.
Emacs Initialization How to write a `.emacs' file.
Debugging How to run the Emacs Lisp debuggers.
Conclusion Now you have the basics.
the-the An appendix: how to find reduplicated words.
Kill Ring An appendix: how the kill ring works.
Full Graph How to create a graph with labelled axes.
GNU Free Documentation License
Index
About the Author
--- The Detailed Node Listing ---
Preface
Why Why learn Emacs Lisp?
On Reading this Text Read, gain familiarity, pick up habits....
Who You Are For whom this is written.
Lisp History
Note for Novices You can read this as a novice.
Thank You
List Processing
Lisp Lists What are lists?
Run a Program Any list in Lisp is a program ready to run.
Making Errors Generating an error message.
Names & Definitions Names of symbols and function definitions.
Lisp Interpreter What the Lisp interpreter does.
Evaluation Running a program.
Variables Returning a value from a variable.
Arguments Passing information to a function.
set & setq Setting the value of a variable.
Summary The major points.
Error Message Exercises
Lisp Lists
Numbers Lists List have numbers, other lists, in them.
Lisp Atoms Elemental entities.
Whitespace in Lists Formating lists to be readable.
Typing Lists How GNU Emacs helps you type lists.
The Lisp Interpreter
Complications Variables, Special forms, Lists within.
Byte Compiling Specially processing code for speed.
Evaluation
Evaluating Inner Lists Lists within lists...
Variables
fill-column Example
Void Function The error message for a symbol
without a function.
Void Variable The error message for a symbol without a value.
Arguments
Data types Types of data passed to a function.
Args as Variable or List An argument can be the value
of a variable or list.
Variable Number of Arguments Some functions may take a
variable number of arguments.
Wrong Type of Argument Passing an argument of the wrong type
to a function.
message A useful function for sending messages.
Setting the Value of a Variable
Using set Setting values.
Using setq Setting a quoted value.
Counting Using `setq' to count.
Practicing Evaluation
How to Evaluate Typing editing commands or C-x C-e
causes evaluation.
Buffer Names Buffers and files are different.
Getting Buffers Getting a buffer itself, not merely its name.
Switching Buffers How to change to another buffer.
Buffer Size & Locations Where point is located and the size of
the buffer.
Evaluation Exercise
How To Write Function Definitions
Primitive Functions
defun The `defun' special form.
Install Install a function definition.
Interactive Making a function interactive.
Interactive Options Different options for `interactive'.
Permanent Installation Installing code permanently.
let Creating and initializing local variables.
if What if?
else If--then--else expressions.
Truth & Falsehood What Lisp considers false and true.
save-excursion Keeping track of point, mark, and buffer.
Review
defun Exercises
Install a Function Definition
Effect of installation
Change a defun How to change a function definition.
Make a Function Interactive
Interactive multiply-by-seven An overview.
multiply-by-seven in detail The interactive version.
`let'
Prevent confusion
Parts of let Expression
Sample let Expression
Uninitialized let Variables
The `if' Special Form
if in more detail
type-of-animal in detail An example of an `if' expression.
Truth and Falsehood in Emacs Lisp
nil explained `nil' has two meanings.
`save-excursion'
Point and mark A review of various locations.
Template for save-excursion
A Few Buffer--Related Functions
Finding More How to find more information.
simplified-beginning-of-buffer Shows `goto-char',
`point-min', and `push-mark'.
mark-whole-buffer Almost the same as `beginning-of-buffer'.
append-to-buffer Uses `save-excursion' and
`insert-buffer-substring'.
Buffer Related Review Review.
Buffer Exercises
The Definition of `mark-whole-buffer'
mark-whole-buffer overview
Body of mark-whole-buffer Only three lines of code.
The Definition of `append-to-buffer'
append-to-buffer overview
append interactive A two part interactive expression.
append-to-buffer body Incorporates a `let' expression.
append save-excursion How the `save-excursion' works.
A Few More Complex Functions
copy-to-buffer With `set-buffer', `get-buffer-create'.
insert-buffer Read-only, and with `or'.
beginning-of-buffer Shows `goto-char',
`point-min', and `push-mark'.
Second Buffer Related Review
optional Exercise
The Definition of `insert-buffer'
insert-buffer code
insert-buffer interactive When you can read, but not write.
insert-buffer body The body has an `or' and a `let'.
if & or Using an `if' instead of an `or'.
Insert or How the `or' expression works.
Insert let Two `save-excursion' expressions.
The Interactive Expression in `insert-buffer'
Read-only buffer When a buffer cannot be modified.
b for interactive An existing buffer or else its name.
Complete Definition of `beginning-of-buffer'
Optional Arguments
beginning-of-buffer opt arg Example with optional argument.
beginning-of-buffer complete
`beginning-of-buffer' with an Argument
Disentangle beginning-of-buffer
Large buffer case
Small buffer case
Narrowing and Widening
Narrowing advantages The advantages of narrowing
save-restriction The `save-restriction' special form.
what-line The number of the line that point is on.
narrow Exercise
`car', `cdr', `cons': Fundamental Functions
Strange Names An historical aside: why the strange names?
car & cdr Functions for extracting part of a list.
cons Constructing a list.
nthcdr Calling `cdr' repeatedly.
nth
setcar Changing the first element of a list.
setcdr Changing the rest of a list.
cons Exercise
`cons'
Build a list
length How to find the length of a list.
Cutting and Storing Text
Storing Text Text is stored in a list.
zap-to-char Cutting out text up to a character.
kill-region Cutting text out of a region.
Digression into C Minor note on C programming language macros.
defvar How to give a variable an initial value.
copy-region-as-kill A definition for copying text.
cons & search-fwd Review
search Exercises
`zap-to-char'
Complete zap-to-char The complete implementation.
zap-to-char interactive A three part interactive expression.
zap-to-char body A short overview.
search-forward How to search for a string.
progn The `progn' special form.
Summing up zap-to-char Using `point' and `search-forward'.
`kill-region'
Complete kill-region The function definition.
condition-case Dealing with a problem.
delete-and-extract-region Doing the work.
Initializing a Variable with `defvar'
See variable current value
defvar and asterisk An old-time convention.
`copy-region-as-kill'
Complete copy-region-as-kill The complete function definition.
copy-region-as-kill body The body of `copy-region-as-kill'.
The Body of `copy-region-as-kill'
last-command & this-command
kill-append function
kill-new function
How Lists are Implemented
Lists diagrammed
Symbols as Chest Exploring a powerful metaphor.
List Exercise
Yanking Text Back
Kill Ring Overview The kill ring is a list.
kill-ring-yank-pointer The `kill-ring-yank-pointer' variable.
yank nthcdr Exercises
Loops and Recursion
while Causing a stretch of code to repeat.
dolist dotimes
Recursion Causing a function to call itself.
Looping exercise
`while'
Looping with while Repeat so long as test returns true.
Loop Example A `while' loop that uses a list.
print-elements-of-list Uses `while', `car', `cdr'.
Incrementing Loop A loop with an incrementing counter.
Decrementing Loop A loop with a decrementing counter.
A Loop with an Incrementing Counter
Incrementing Example Counting pebbles in a triangle.
Inc Example parts The parts of the function definition.
Inc Example altogether Putting the function definition together.
Loop with a Decrementing Counter
Decrementing Example More pebbles on the beach.
Dec Example parts The parts of the function definition.
Dec Example altogether Putting the function definition together.
Save your time: `dolist' and `dotimes'
dolist
dotimes
Recursion
Building Robots Same model, different serial number ...
Recursive Definition Parts Walk until you stop ...
Recursion with list Using a list as the test whether to recurse.
Recursive triangle function
Recursion with cond
Recursive Patterns Often used templates.
No Deferment Don't store up work ...
No deferment solution
Recursion in Place of a Counter
Recursive Example arg of 1 or 2
Recursive Example arg of 3 or 4
Recursive Patterns
Every
Accumulate
Keep
Regular Expression Searches
sentence-end The regular expression for `sentence-end'.
re-search-forward Very similar to `search-forward'.
forward-sentence A straightforward example of regexp search.
forward-paragraph A somewhat complex example.
etags How to create your own `TAGS' table.
Regexp Review
re-search Exercises
`forward-sentence'
Complete forward-sentence
fwd-sentence while loops Two `while' loops.
fwd-sentence re-search A regular expression search.
`forward-paragraph': a Goldmine of Functions
forward-paragraph in brief Key parts of the function definition.
fwd-para let The `let*' expression.
fwd-para while The forward motion `while' loop.
fwd-para between paragraphs Movement between paragraphs.
fwd-para within paragraph Movement within paragraphs.
fwd-para no fill prefix When there is no fill prefix.
fwd-para with fill prefix When there is a fill prefix.
fwd-para summary Summary of `forward-paragraph' code.
Counting: Repetition and Regexps
Why Count Words
count-words-region Use a regexp, but find a problem.
recursive-count-words Start with case of no words in region.
Counting Exercise
The `count-words-region' Function
Design count-words-region The definition using a `while' loop.
Whitespace Bug The Whitespace Bug in `count-words-region'.
Counting Words in a `defun'
Divide and Conquer
Words and Symbols What to count?
Syntax What constitutes a word or symbol?
count-words-in-defun Very like `count-words'.
Several defuns Counting several defuns in a file.
Find a File Do you want to look at a file?
lengths-list-file A list of the lengths of many definitions.
Several files Counting in definitions in different files.
Several files recursively Recursively counting in different files.
Prepare the data Prepare the data for display in a graph.
Count Words in `defuns' in Different Files
lengths-list-many-files Return a list of the lengths of defuns.
append Attach one list to another.
Prepare the Data for Display in a Graph
Sorting Sorting lists.
Files List Making a list of files.
Counting function definitions
Readying a Graph
Columns of a graph
graph-body-print How to print the body of a graph.
recursive-graph-body-print
Printed Axes
Line Graph Exercise
Your `.emacs' File
Default Configuration
Site-wide Init You can write site-wide init files.
defcustom Emacs will write code for you.
Beginning a .emacs File How to write a `.emacs file'.
Text and Auto-fill Automatically wrap lines.
Mail Aliases Use abbreviations for email addresses.
Indent Tabs Mode Don't use tabs with TeX
Keybindings Create some personal keybindings.
Keymaps More about key binding.
Loading Files Load (i.e., evaluate) files automatically.
Autoload Make functions available.
Simple Extension Define a function; bind it to a key.
X11 Colors Colors in version 19 in X.
Miscellaneous
Mode Line How to customize your mode line.
Debugging
debug How to use the built-in debugger.
debug-on-entry Start debugging when you call a function.
debug-on-quit Start debugging when you quit with C-g.
edebug How to use Edebug, a source level debugger.
Debugging Exercises
Handling the Kill Ring
rotate-yank-pointer Move a pointer along a list and around.
yank Paste a copy of a clipped element.
yank-pop Insert first element pointed to.
The `rotate-yank-pointer' Function
Understanding rotate-yk-ptr
rotate-yk-ptr body The body of `rotate-yank-pointer'.
The Body of `rotate-yank-pointer'
Digression concerning error How to mislead humans, but not computers.
rotate-yk-ptr else-part The else-part of the `if' expression.
Remainder Function The remainder, `%', function.
rotate-yk-ptr remainder Using `%' in `rotate-yank-pointer'.
kill-rng-yk-ptr last elt Pointing to the last element.
`yank'
rotate-yk-ptr arg Pass the argument to `rotate-yank-pointer'.
rotate-yk-ptr negative arg Pass a negative argument.
A Graph with Labelled Axes
Labelled Example
print-graph Varlist `let' expression in `print-graph'.
print-Y-axis Print a label for the vertical axis.
print-X-axis Print a horizontal label.
Print Whole Graph The function to print a complete graph.
The `print-Y-axis' Function
Height of label What height for the Y axis?
Compute a Remainder How to compute the remainder of a division.
Y Axis Element Construct a line for the Y axis.
Y-axis-column Generate a list of Y axis labels.
print-Y-axis Penultimate A not quite final version.
The `print-X-axis' Function
Similarities differences Much like `print-Y-axis', but not exactly.
X Axis Tic Marks Create tic marks for the horizontal axis.
Printing the Whole Graph
The final version A few changes.
Test print-graph Run a short test.
Graphing words in defuns Executing the final code.
lambda How to write an anonymous function.
mapcar Apply a function to elements of a list.
Another Bug Yet another bug ... most insidious.
Final printed graph The graph itself!
automatically generated by info2www version 1.2.2.9