100% found this document useful (1 vote)
13 views

An introduction to programming in emacs lisp 2nd Edition Robert J. Chassell - Instantly access the full ebook content in just a few seconds

The document provides information on downloading various programming ebooks, including 'An Introduction to Programming in Emacs Lisp' by Robert J. Chassell. It lists several recommended titles along with their download links. The document also includes details about the contents of the Emacs Lisp book, such as chapters on list processing, function definitions, and debugging.

Uploaded by

llffnag18
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
13 views

An introduction to programming in emacs lisp 2nd Edition Robert J. Chassell - Instantly access the full ebook content in just a few seconds

The document provides information on downloading various programming ebooks, including 'An Introduction to Programming in Emacs Lisp' by Robert J. Chassell. It lists several recommended titles along with their download links. The document also includes details about the contents of the Emacs Lisp book, such as chapters on list processing, function definitions, and debugging.

Uploaded by

llffnag18
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 49

Visit https://ebookultra.

com to download the full version and


explore more ebooks or textbooks

An introduction to programming in emacs lisp 2nd


Edition Robert J. Chassell

_____ Click the link below to download _____


https://ebookultra.com/download/an-introduction-to-
programming-in-emacs-lisp-2nd-edition-robert-j-chassell/

Explore and download more ebooks or textbooks at ebookultra.com


Here are some recommended products that we believe you will be
interested in. You can click the link to download.

An Introduction to Programming Using Alice 2 2 2nd Edition


Charles W. Herbert

https://ebookultra.com/download/an-introduction-to-programming-using-
alice-2-2-2nd-edition-charles-w-herbert/

An Introduction to Stata Programming 1st Edition


Christopher F. Baum

https://ebookultra.com/download/an-introduction-to-stata-
programming-1st-edition-christopher-f-baum/

Common Lisp A Gentle Introduction to Symbolic Computation


David S. Touretzky

https://ebookultra.com/download/common-lisp-a-gentle-introduction-to-
symbolic-computation-david-s-touretzky/

Introduction to Computing and Programming in Python a


Multimedia Approach Mark J. Guzdial

https://ebookultra.com/download/introduction-to-computing-and-
programming-in-python-a-multimedia-approach-mark-j-guzdial/
Python Programming An Introduction to Computer Science
John M. Zelle

https://ebookultra.com/download/python-programming-an-introduction-to-
computer-science-john-m-zelle/

C Programming An Introduction Rajiv Chopra

https://ebookultra.com/download/c-programming-an-introduction-rajiv-
chopra/

Programming Concepts in C 2nd Edition Robert Burns

https://ebookultra.com/download/programming-concepts-in-c-2nd-edition-
robert-burns/

An introduction to property law in Australia Third


Edition. Edition Robert Chambers

https://ebookultra.com/download/an-introduction-to-property-law-in-
australia-third-edition-edition-robert-chambers/

An Introduction to International Criminal Law and


Procedure Robert Cryer

https://ebookultra.com/download/an-introduction-to-international-
criminal-law-and-procedure-robert-cryer/
An introduction to programming in emacs lisp 2nd
Edition Robert J. Chassell Digital Instant Download
Author(s): Robert J. Chassell
ISBN(s): 9781882114436, 1882114434
Edition: 2nd
File Details: PDF, 1.06 MB
Year: 2001
Language: english
An Introduction to

Programming in Emacs Lisp


An Introduction to
Programming in Emacs Lisp
Second Edition

by Robert J. Chassell
Copyright c 1990, 1991, 1992, 1993, 1994, 1995, 1997, 2001, 2002 Free
Software Foundation, Inc.

Published by the Free Software Foundation, Inc.


59 Temple Place, Suite 330
Boston, MA 02111-1307 USA

Edition 2.05, 2001 Jan 5


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.1 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”.
(a) The FSF’s Back-Cover Text is: “You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free Software
Foundation raise funds for GNU development.”
i

Short Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
1 List Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Practicing Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 How To Write Function Definitions . . . . . . . . . . . . . . . . . . 29
4 A Few Buffer–Related Functions . . . . . . . . . . . . . . . . . . . . 51
5 A Few More Complex Functions . . . . . . . . . . . . . . . . . . . . 63
6 Narrowing and Widening . . . . . . . . . . . . . . . . . . . . . . . . . 77
7 car, cdr, cons: Fundamental Functions . . . . . . . . . . . . . 81
8 Cutting and Storing Text . . . . . . . . . . . . . . . . . . . . . . . . . 89
9 How Lists are Implemented . . . . . . . . . . . . . . . . . . . . . . . 113
10 Yanking Text Back . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11 Loops and Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
12 Regular Expression Searches . . . . . . . . . . . . . . . . . . . . . . 149
13 Counting: Repetition and Regexps . . . . . . . . . . . . . . . . . . 167
14 Counting Words in a defun . . . . . . . . . . . . . . . . . . . . . . 181
15 Readying a Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
16 Your ‘.emacs’ File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
17 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
18 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Appendix A The the-the Function . . . . . . . . . . . . . . . . . . 241
Appendix B Handling the Kill Ring . . . . . . . . . . . . . . . . . . . 243
Appendix C A Graph with Labelled Axes . . . . . . . . . . . . . . . 255
Appendix D GNU Free Documentation License . . . . . . . . . . . 279
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
ii
iii

Table of Contents

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
On Reading this Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
For Whom This is Written. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
Lisp History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
A Note for Novices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Thank You . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv

1 List Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Lisp Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Lisp Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Whitespace in Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 GNU Emacs Helps You Type Lists . . . . . . . . . . . . . . . 3
1.2 Run a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Generate an Error Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Symbol Names and Function Definitions . . . . . . . . . . . . . . . . . . 6
1.5 The Lisp Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.1 Byte Compiling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6.1 Evaluating Inner Lists . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7.1 Error Message for a Symbol Without a Function . . 11
1.7.2 Error Message for a Symbol Without a Value . . . . 11
1.8 Arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.8.1 Arguments’ Data Types . . . . . . . . . . . . . . . . . . . . . . . . 13
1.8.2 An Argument as the Value of a Variable or List . . 13
1.8.3 Variable Number of Arguments . . . . . . . . . . . . . . . . . 14
1.8.4 Using the Wrong Type Object as an Argument . . 14
1.8.5 The message Function . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9 Setting the Value of a Variable . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.9.1 Using set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.9.2 Using setq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9.3 Counting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2 Practicing Evaluation . . . . . . . . . . . . . . . . . . . . . 23
2.1 Buffer Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2 Getting Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3 Switching Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Buffer Size and the Location of Point . . . . . . . . . . . . . . . . . . . . 27
2.5 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
iv

3 How To Write Function Definitions . . . . . . . . 29


3.1 The defun Special Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Install a Function Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.1 Change a Function Definition . . . . . . . . . . . . . . . . . . . 32
3.3 Make a Function Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.1 An Interactive multiply-by-seven . . . . . . . . . . . . . 34
3.4 Different Options for interactive . . . . . . . . . . . . . . . . . . . . . . 35
3.5 Install Code Permanently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6 let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6.1 The Parts of a let Expression . . . . . . . . . . . . . . . . . . 37
3.6.2 Sample let Expression . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.3 Uninitialized Variables in a let Statement . . . . . . . 39
3.7 The if Special Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.1 The type-of-animal Function in Detail . . . . . . . . . 41
3.8 If–then–else Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.9 Truth and Falsehood in Emacs Lisp . . . . . . . . . . . . . . . . . . . . . 43
3.10 save-excursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.10.1 Template for a save-excursion Expression . . . . 45
3.11 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4 A Few Buffer–Related Functions . . . . . . . . . . . 51


4.1 Finding More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 A Simplified beginning-of-buffer Definition . . . . . . . . . . . . 52
4.3 The Definition of mark-whole-buffer . . . . . . . . . . . . . . . . . . . 54
4.3.1 Body of mark-whole-buffer . . . . . . . . . . . . . . . . . . . 55
4.4 The Definition of append-to-buffer . . . . . . . . . . . . . . . . . . . . 56
4.4.1 The append-to-buffer Interactive Expression . . . 57
4.4.2 The Body of append-to-buffer . . . . . . . . . . . . . . . . 57
4.4.3 save-excursion in append-to-buffer . . . . . . . . . . 58
4.5 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
v

5 A Few More Complex Functions . . . . . . . . . . . 63


5.1 The Definition of copy-to-buffer. . . . . . . . . . . . . . . . . . . . . . . 63
5.2 The Definition of insert-buffer . . . . . . . . . . . . . . . . . . . . . . . . 64
5.2.1 The Interactive Expression in insert-buffer . . . . 65
A Read-only Buffer. . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
‘b’ in an Interactive Expression . . . . . . . . . . . . . . . . . 65
5.2.2 The Body of the insert-buffer Function . . . . . . . 65
5.2.3 insert-buffer With an if Instead of an or . . . . . 66
5.2.4 The or in the Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2.5 The let Expression in insert-buffer . . . . . . . . . . 68
5.3 Complete Definition of beginning-of-buffer .. . . . . . . . . . . 69
5.3.1 Optional Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3.2 beginning-of-buffer with an Argument . . . . . . . 71
What happens in a large buffer . . . . . . . . . . . . . . . . . 71
What happens in a small buffer . . . . . . . . . . . . . . . . 72
5.3.3 The Complete beginning-of-buffer . . . . . . . . . . . 73
5.4 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5 optional Argument Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

6 Narrowing and Widening . . . . . . . . . . . . . . . . . . 77


6.1 The save-restriction Special Form . . . . . . . . . . . . . . . . . . . . 77
6.2 what-line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.3 Exercise with Narrowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

7 car, cdr, cons: Fundamental Functions . . . . . 81


7.1 car and cdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.2 cons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.2.1 Find the Length of a List: length . . . . . . . . . . . . . . 84
7.3 nthcdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.4 nth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.5 setcar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.6 setcdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.7 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
vi

8 Cutting and Storing Text . . . . . . . . . . . . . . . . . 89


8.1 zap-to-char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.1.1 The interactive Expression . . . . . . . . . . . . . . . . . . . 90
8.1.2 The Body of zap-to-char. . . . . . . . . . . . . . . . . . . . . . 91
8.1.3 The search-forward Function . . . . . . . . . . . . . . . . . 92
8.1.4 The progn Special Form . . . . . . . . . . . . . . . . . . . . . . . 93
8.1.5 Summing up zap-to-char . . . . . . . . . . . . . . . . . . . . . 93
8.2 kill-region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.2.1 condition-case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.2.2 delete-and-extract-region . . . . . . . . . . . . . . . . . . 96
8.3 delete-and-extract-region: Digressing into C . . . . . . . . . 98
8.4 Initializing a Variable with defvar . . . . . . . . . . . . . . . . . . . . . 100
8.4.1 defvar and an asterisk . . . . . . . . . . . . . . . . . . . . . . . . 101
8.5 copy-region-as-kill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.5.1 The Body of copy-region-as-kill .. . . . . . . . . . . 103
The kill-append function . . . . . . . . . . . . . . . . . . . . 104
The kill-new function . . . . . . . . . . . . . . . . . . . . . . . 105
8.6 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.7 Searching Exercises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

9 How Lists are Implemented . . . . . . . . . . . . . . 113


9.1 Symbols as a Chest of Drawers . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.2 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

10 Yanking Text Back . . . . . . . . . . . . . . . . . . . . . 117


10.1 Kill Ring Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
10.2 The kill-ring-yank-pointer Variable . . . . . . . . . . . . . . . 117
10.3 Exercises with yank and nthcdr . . . . . . . . . . . . . . . . . . . . . . . 119

11 Loops and Recursion. . . . . . . . . . . . . . . . . . . . 121


11.1 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.1.1 A while Loop and a List . . . . . . . . . . . . . . . . . . . . . 122
11.1.2 An Example: print-elements-of-list . . . . . . 123
11.1.3 A Loop with an Incrementing Counter . . . . . . . . 124
Example with incrementing counter . . . . . . . . . . . 125
The parts of the function definition . . . . . . . . . . . . 126
Putting the function definition together . . . . . . . . 127
11.1.4 Loop with a Decrementing Counter . . . . . . . . . . . 129
Example with decrementing counter . . . . . . . . . . . 129
The parts of the function definition . . . . . . . . . . . . 130
Putting the function definition together . . . . . . . . 130
11.2 Save your time: dolist and dotimes . . . . . . . . . . . . . . . . . . 131
The dolist Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
The dotimes Macro . . . . . . . . . . . . . . . . . . . . . . . . . . 133
vii

11.3 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134


11.3.1 Building Robots: Extending the Metaphor. . . . . 134
11.3.2 The Parts of a Recursive Definition . . . . . . . . . . . 135
11.3.3 Recursion with a List . . . . . . . . . . . . . . . . . . . . . . . . 136
11.3.4 Recursion in Place of a Counter . . . . . . . . . . . . . . 137
An argument of 3 or 4 . . . . . . . . . . . . . . . . . . . . . . . . 138
11.3.5 Recursion Example Using cond . . . . . . . . . . . . . . . 139
11.3.6 Recursive Patterns. . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Recursive Pattern: every . . . . . . . . . . . . . . . . . . . . . 141
Recursive Pattern: accumulate . . . . . . . . . . . . . . . . 142
Recursive Pattern: keep . . . . . . . . . . . . . . . . . . . . . . 143
11.3.7 Recursion without Deferments . . . . . . . . . . . . . . . . 143
11.3.8 No Deferment Solution . . . . . . . . . . . . . . . . . . . . . . . 145
11.4 Looping Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

12 Regular Expression Searches . . . . . . . . . . . . 149


12.1 The Regular Expression for sentence-end . . . . . . . . . . . . . 149
12.2 The re-search-forward Function. . . . . . . . . . . . . . . . . . . . . 150
12.3 forward-sentence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
The while loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
The regular expression search . . . . . . . . . . . . . . . . . . . . . . . . 154
12.4 forward-paragraph: a Goldmine of Functions . . . . . . . . . 155
The let* expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
The forward motion while loop . . . . . . . . . . . . . . . . . . . . . . 158
Between paragraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Within paragraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
No fill prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
With a fill prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
12.5 Create Your Own ‘TAGS’ File . . . . . . . . . . . . . . . . . . . . . . . . . . 163
12.6 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
12.7 Exercises with re-search-forward . . . . . . . . . . . . . . . . . . . . 166

13 Counting: Repetition and Regexps . . . . . . 167


13.1 The count-words-region Function . . . . . . . . . . . . . . . . . . . 167
13.1.1 The Whitespace Bug in count-words-region . . 170
13.2 Count Words Recursively . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
13.3 Exercise: Counting Punctuation . . . . . . . . . . . . . . . . . . . . . . . 179
viii

14 Counting Words in a defun . . . . . . . . . . . . . . 181


14.1 What to Count? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
14.2 What Constitutes a Word or Symbol? . . . . . . . . . . . . . . . . . 182
14.3 The count-words-in-defun Function . . . . . . . . . . . . . . . . . 183
14.4 Count Several defuns Within a File . . . . . . . . . . . . . . . . . . . 186
14.5 Find a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
14.6 lengths-list-file in Detail . . . . . . . . . . . . . . . . . . . . . . . . . 188
14.7 Count Words in defuns in Different Files . . . . . . . . . . . . . . 190
14.7.1 The append Function . . . . . . . . . . . . . . . . . . . . . . . . 191
14.8 Recursively Count Words in Different Files . . . . . . . . . . . . . 192
14.9 Prepare the Data for Display in a Graph . . . . . . . . . . . . . . . 193
14.9.1 Sorting Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
14.9.2 Making a List of Files. . . . . . . . . . . . . . . . . . . . . . . . 194
14.9.3 Counting function definitions . . . . . . . . . . . . . . . . . 197

15 Readying a Graph . . . . . . . . . . . . . . . . . . . . . . 203


15.1 The graph-body-print Function . . . . . . . . . . . . . . . . . . . . . . 208
15.2 The recursive-graph-body-print Function. . . . . . . . . . . 210
15.3 Need for Printed Axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
15.4 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

16 Your ‘.emacs’ File . . . . . . . . . . . . . . . . . . . . . . . 213


16.1 Site-wide Initialization Files. . . . . . . . . . . . . . . . . . . . . . . . . . . 213
16.2 Specifying Variables using defcustom . . . . . . . . . . . . . . . . . . 214
16.3 Beginning a ‘.emacs’ File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
16.4 Text and Auto Fill Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
16.5 Mail Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
16.6 Indent Tabs Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
16.7 Some Keybindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
16.8 Keymaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
16.9 Loading Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
16.10 Autoloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
16.11 A Simple Extension: line-to-top-of-window . . . . . . . . 224
16.12 X11 Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
16.13 Miscellaneous Settings for a ‘.emacs’ File . . . . . . . . . . . . . 227
16.14 A Modified Mode Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

17 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
17.1 debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
17.2 debug-on-entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
17.3 debug-on-quit and (debug). . . . . . . . . . . . . . . . . . . . . . . . . . 234
17.4 The edebug Source Level Debugger . . . . . . . . . . . . . . . . . . . . 235
17.5 Debugging Exercises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
ix

18 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Appendix A The the-the Function . . . . . . . . . . 241

Appendix B Handling the Kill Ring . . . . . . . . 243


B.1 The rotate-yank-pointer Function . . . . . . . . . . . . . . . . . . . 243
B.1.1 The Body of rotate-yank-pointer .. . . . . . . . . . 244
The else-part of the if expression . . . . . . . . . . . . . 245
The % remainder function . . . . . . . . . . . . . . . . . . . . . 247
Using % in rotate-yank-pointer . . . . . . . . . . . . . 248
Pointing to the last element . . . . . . . . . . . . . . . . . . . 248
B.2 yank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Passing the argument . . . . . . . . . . . . . . . . . . . . . . . . 250
Passing a negative argument . . . . . . . . . . . . . . . . . . 251
B.3 yank-pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

Appendix C A Graph with Labelled Axes . . . 255


C.1 The print-graph Varlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
C.2 The print-Y-axis Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
C.2.1 Side Trip: Compute a Remainder. . . . . . . . . . . . . . 258
C.2.2 Construct a Y Axis Element . . . . . . . . . . . . . . . . . . 259
C.2.3 Create a Y Axis Column. . . . . . . . . . . . . . . . . . . . . . 261
C.2.4 The Not Quite Final Version of print-Y-axis . . 262
C.3 The print-X-axis Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
C.3.1 X Axis Tic Marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
C.4 Printing the Whole Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
C.4.1 Testing print-graph . . . . . . . . . . . . . . . . . . . . . . . . . 270
C.4.2 Graphing Numbers of Words and Symbols . . . . . 271
C.4.3 A lambda Expression: Useful Anonymity . . . . . . . 272
C.4.4 The mapcar Function . . . . . . . . . . . . . . . . . . . . . . . . . 274
C.4.5 Another Bug . . . Most Insidious . . . . . . . . . . . . . . 274
C.4.6 The Printed Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Appendix D GNU Free Documentation License


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
x
On Reading this Text xi

Preface
Most of the GNU Emacs integrated environment is written in the pro-
gramming language called Emacs Lisp. The code written in this program-
ming language is the software—the sets of instructions—that tell the com-
puter 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 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.)
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.
Perhaps you want to understand programming; perhaps you want to ex-
tend Emacs; or perhaps you want to become a programmer. This introduc-
tion 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.

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.
Much of this introduction is dedicated to walk-throughs 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.
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
xii Preface

opportunity to get acquainted with Emacs as a Lisp programming environ-


ment. GNU Emacs supports programming and provides tools that you will
want to become comfortable using, such as M-. (the key which invokes the
find-tag 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.
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 para-
graph, and “come up for air” between paragraphs.
When I get to the end of a paragraph, I assume that 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 only make, as it were, 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.
A Note for Novices xiii

This book is intended as an approachable hill, rather than as a daunting


mountain.
This introduction to Programming in Emacs Lisp has a companion doc-
ument, The GNU Emacs Lisp Reference Manual. The reference manual has
more detail than this introduction. In the reference manual, all the infor-
mation 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.

Lisp History
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.
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.el’, that adds many Common Lisp features to Emacs Lisp.)

A Note for Novices


If you don’t know GNU Emacs, you can still read this document prof-
itably. 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 on-line tutorial. To use it, type C-h t. (This means you press and
release the hCTRLi key and the h at the same time, and then press and release
t.)
Also, I often refer to one of Emacs’ 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 Section 16.8, “Keymaps”, page 221.)
The abbreviation M-C-\ means that you type your hMETAi key, hCTRLi key
and h\i key all at the same time. (On many modern keyboards the hMETAi
key is labelled hALTi.) 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 hMETAi key, the hESCi key prefix is used in place of it. In
this case, M-C-\ means that you press and release your hESCi key and then
type the hCTRLi key and the h\i key at the same time. But usually M-C-\
means press the hCTRLi key along with the key that is labelled hALTi and, at
the same time, press the h\i key.
xiv Preface

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-u 6 M-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
section “Numeric Arguments” in The GNU Emacs Manual.
If you are reading this in Info using GNU Emacs, you can read through
this whole document just by pressing the space bar, hSPCi. (To learn about
Info, type C-h i and then select 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.

Thank You
My thanks to all who helped me with this book. My especial thanks to
Jim Blandy, Noah Friedman, Jim Kingdon, Roland McGrath, Frank Ritter,
Randy Smith, Richard M. Stallman, and Melissa Weisshaus. My thanks
also go to both Philip Johnson and David Stampe for their patient encour-
agement. My mistakes are my own.
Robert J. Chassell
Lisp Atoms 1

1 List Processing
To the untutored eye, Lisp is a strange programming language. In Lisp
code there are parentheses everywhere. Some people even claim that the
name stands for ‘Lots of Isolated Silly Parentheses’. But the claim is un-
warranted. Lisp stands for LISt Processing, and the programming language
handles lists (and lists of lists) by putting them between parentheses. The
parentheses mark the boundaries of the list. Sometimes a list is preceded by
a single apostrophe or quotation mark, ‘’’. Lists are the basis of Lisp.

1.1 Lisp Lists


In Lisp, a list looks like this: ’(rose violet daisy buttercup). This
list is preceded by a single apostrophe. It could just as well be written as
follows, which looks more like the kind of list you are likely to be familiar
with:
’(rose
violet
daisy
buttercup)
The elements of this list are the names of the four different flowers, separated
from each other by whitespace and surrounded by parentheses, like flowers
in a field with a stone wall around them.
Lists can also have numbers in them, as in this list: (+ 2 2). This list
has a plus-sign, ‘+’, followed by two ‘2’s, each separated by whitespace.
In Lisp, both data and programs are represented the same way; that is,
they are both lists of words, numbers, or other lists, separated by white-
space and surrounded by parentheses. (Since a program looks like data, one
program may easily serve as data for another; this is a very powerful feature
of Lisp.) (Incidentally, these two parenthetical remarks are not Lisp lists,
because they contain ‘;’ and ‘.’ as punctuation marks.)
Here is another list, this time with a list inside of it:
’(this list has (a list inside of it))
The components of this list are the words ‘this’, ‘list’, ‘has’, and the
list ‘(a list inside of it)’. The interior list is made up of the words ‘a’,
‘list’, ‘inside’, ‘of’, ‘it’.

1.1.1 Lisp Atoms


In Lisp, what we have been calling words are called atoms. This term
comes from the historical meaning of the word atom, which means ‘indivis-
ible’. As far as Lisp is concerned, the words we have been using in the lists
cannot be divided into any smaller parts and still mean the same thing as
part of a program; likewise with numbers and single character symbols like
2 Chapter 1: List Processing

‘+’. On the other hand, unlike an atom, a list can be split into parts. (See
Chapter 7, “car cdr & cons Fundamental Functions”, page 81.)

In a list, atoms are separated from each other by whitespace. They can
be right next to a parenthesis.

Technically speaking, a list in Lisp consists of parentheses surrounding


atoms separated by whitespace or surrounding other lists or surrounding
both atoms and other lists. A list can have just one atom in it or have
nothing in it at all. A list with nothing in it looks like this: (), and is called
the empty list. Unlike anything else, an empty list is considered both an
atom and a list at the same time.

The printed representation of both atoms and lists are called symbolic
expressions or, more concisely, s-expressions. The word expression by itself
can refer to either the printed representation, or to the atom or list as it
is held internally in the computer. Often, people use the term expression
indiscriminately. (Also, in many texts, the word form is used as a synonym
for expression.)

Incidentally, the atoms that make up our universe were named such when
they were thought to be indivisible; but it has been found that physical atoms
are not indivisible. Parts can split off an atom or it can fission into two parts
of roughly equal size. Physical atoms were named prematurely, before their
truer nature was found. In Lisp, certain kinds of atom, such as an array, can
be separated into parts; but the mechanism for doing this is different from
the mechanism for splitting a list. As far as list operations are concerned,
the atoms of a list are unsplittable.

As in English, the meanings of the component letters of a Lisp atom are


different from the meaning the letters make as a word. For example, the
word for the South American sloth, the ‘ai’, is completely different from the
two words, ‘a’, and ‘i’.

There are many kinds of atom in nature but only a few in Lisp: for
example, numbers, such as 37, 511, or 1729, and symbols, such as ‘+’, ‘foo’,
or ‘forward-line’. The words we have listed in the examples above are
all symbols. In everyday Lisp conversation, the word “atom” is not often
used, because programmers usually try to be more specific about what kind
of atom they are dealing with. Lisp programming is mostly about symbols
(and sometimes numbers) within lists. (Incidentally, the preceding three
word parenthetical remark is a proper list in Lisp, since it consists of atoms,
which in this case are symbols, separated by whitespace and enclosed by
parentheses, without any non-Lisp punctuation.)
Other documents randomly have
different content
Hence, the policy of Campaign of that army superior in Numbers,
is:
Incessantly to proffer battles which:

(a) Accepted, constantly reduces the inferior army and increases


its disproportion in numbers, or,
(b) Evaded, compels the inferior army to abandon important
posts, for whose defence it cannot afford the resulting loss
of troops; thus permitting to the numerically superior army
a continually increasing advantage in Position.

PRINCIPLE
All else being equal the advantage of Numbers is decisive of victory
in battle and Campaign.

Things being unequal, the advantage in Numbers may be nullified by


adverse advantages in Organization, Topography, Mobility, Time
and Position.

Victory resulting from advantage in Numbers is achieved by


simultaneously attacking two or more Tactical Keys from a
Kindred Strategic Key and two or more Kindred Points of
Command.

TO LOCATE THE AREA OF CONCENTRATION

That relative advantage in Mobility expressed by the situation of


the Strategic Front upon the Strategetic Center is materially
manifested upon the Chess-board by Kindred Chess-pieces posted
upon that great central diagonal which extends towards the
Objective Plane. Such advantage determines those points which
should be occupied in the proper development of the front so
posted; and consequently designates the direction and location of
that battlefield upon which the kindred army may concentrate in
overwhelming force, despite all possible resistance by the enemy.

MOST FAVORABLE BATTLEFIELD

That relative advantage in Organization expressed by superior


potential totality, is materially manifested upon the Chess-board by
the geometric and sub-geometric symbols of those Chess-pieces
possessed of the superior potential complement. Such symbols taken
in combination, describe that field of battle most favorable for the
execution of those Major Tactical evolutions which appertain to the
Chess-pieces of superior organization.

POSTS OF MAXIMUM SECURITY

That relative defensive advantage in Topography expressed by


inaccessibility to hostile attack is materially manifested upon the
Chess-board by Corps of Position, posted upon points of different
color to that occupied by the adverse Bishop; and this advantage
designates those posts situated on a projected field of battle which
may be occupied with the maximum of security.
That relative offensive advantage in Topography expressed by
accessibility to kindred attack is materially manifested upon the
Chess-board by Corps of Position posted upon points of the same
color as that occupied by the kindred Bishop; and this advantage
designates those posts situated on a projected field of battle which
may be attacked with the maximum facility.

CHARACTER OF THE MOST FAVORABLE BATTLE

That relative advantage in Position with the Column of Attack,


expressed:

1. By superior location, direction and development of the


Kindred Strategic Front of Operations; and
2. By the occupation of Points of Departure, of Manoeuvre, of
Command and of the Strategic Key of a True Strategic
Horizon, indicates that a Strategic Grand Battle in the first
instance; and in the second case that a Tactical Grand
Battle is most favorable in the existing situation.

That relative advantage in Position with the Column of Support,


expressed by superior facilities for occupying with the Kindred
Promotable Factors their corresponding Points of Junction in the
Kindred Logistic Horizon, is materially manifested upon the Chess-
board by the larger number of Pawn Altitudes which either are open,
or may be opened, despite all possible resistance by the enemy; and
such advantage designates those adverse Points of Impenetrability
and Points of Resistance to the march of the Kindred Promotable
Factors, which it is necessary to nullify.
That relative advantage in Position with the Column of Manoeuvre,
expressed by the security of the Kindred and the exposure of the
adverse Strategetic Rear to attack by the Kindred Column of
Support, is materially manifested upon the Chess-board by the
occupation by a Kindred Promotable Factor of the Point of Proximity;
and such advantage indicates that the advance with all possible
celerity of such Promotable Factor and Point of Proximity toward the
corresponding Point of Junction is a dominating influence in the
existing situation.

PROJECTED GRAND BATTLE

From the advantage in Position appertaining to the three Grand


Columns is deduced the character of the Grand Battle properly in
sequence.
Advantage in Position with the Column of Attack indicates the
opportunity, all else being equal, to engage in a victorious Strategic
Grand Battle against the hostile Formation in Mass, or in a Tactical
Grand Battle against the hostile Formation by Wings.
Advantage in Position with the Column of Support indicates the
opportunity to engage effectively in a series of minor battles, as
though having the advantage in Numbers.
Advantage in Position with the Column of Manoeuvre indicates the
opportunity to engage in a victorious Logistic Grand Battle against
the adverse Formation by Grand Columns.

LEAST FAVORABLE ADVERSE CONDITION

That relative advantage in Time expressed by restrictions of the


adversary’s choice of movements at his turn to play, is materially
manifested upon the Chess-board by Feints operated by Kindred
Chess-pieces against adverse vital points; and such advantage of the
Initiative dictates the next move of the opposing army.
The advantage of the Initiative determines which of the adverse
corps d’armee may and may not move.
The material expression of this advantage always is a Feint by a
Kindred Corps against a vital point either occupied or unoccupied,
which necessitates that upon his next move, the enemy either
evacuate, support, cover or sustain the post so menaced.
Such feint, therefore, restricts the move of the enemy to those of
his corps as are able to obviate the threatened loss and
proportionately reduces the immediate activity of his army.

RELATIVE ADVANTAGES IN LOCATION

“It is only the force brought into action that avails in battles
and campaigns—the rest does not count.”—Napoleon.

The distance which separates opposing Corps d’armee always


modifies the values of the Prime Strategetic Means.
Hence in the making of Grand Reconnaissance, it is next in
sequence to determine whether the Chess-pieces are:

I. In Contact.
II. In Presence.
III. At Distance.

Corps d’armee are in Contact with each other whenever their


logistic radii intersect; or, their radii offensive and the corresponding
adverse radii defensive are opposed to each other.
Corps d’armee are in Presence whenever the posts which they
occupy are contained within the same Strategic front, the same
Strategetic Horizon, or are in communication with their
corresponding posts of mobilization, development, or manoeuvre.
Corps d’armee are at Distance when the posts which they occupy
are not in communication with Kindred Corps d’armee posted upon
the strategic front adopted, or with posts of mobilization or
development contained within the corresponding Primary Base of
Operations, or, within the True Strategetic Horizon.

REQUISITES FOR SUCCESSFUL CAMPAIGNING

Every Campaign, whether upon the surface of the Earth or upon


the Chess-board is decided and usually is terminated by a Grand
Battle.
Those movements of opposing Grand Columns, whereby such
decisive conflict is brought about under circumstances which ensure
victory, by reason of superior advantages in Strategetic Means, are
termed Grand Manoeuvres; and a proper series of Grand
Manoeuvres, combined with their corresponding feints, strategems,
ambuscades and minor battles, the whole terminated by a resulting
Grand Battle, is termed a Grand Operation.
Those processes of Grand Manoeuvre, which produce an
opportunity to victoriously engage in battle, are the most subtle and
difficult known to the Strategetic Art.
Successful application of these processes in practice depends
wholly upon proper use of the MEANS at hand and the doing of the
utmost that can be done in the TIME available.
Nothing can be more repugnant to high art in Strategetics than
those crudities termed in the specious mouthings of pretentious
mediocrity “waiting moves,” “delayed strokes,” “defensive-
offensives,” “masterly inactivities,” and the like.
“Time past is gone and cannot be regained; time future is not and
may never be; time present is” and with it Opportunity, which an
instant later may be gone.
The gain of but “a foot of ground and a minute of time” would
have saved the French army at Rosbach and have cost Frederic the
Great one of his most lustrous victories and perhaps his army and
his crown.

PRINCIPLE
In Strategetics there is but a single method whereby Opportunity
may be availed of, and that is by so augmenting kindred
advantages and so depreciating adverse advantages as to
acquire for the kindred army that particular advantage of
Strategetic means which in the given situation is the proper
basis of the Strategetic movement next in sequence.

At Distance.

The chief requisite for success when acting against an adverse army
at Distance, is the advantage in MOBILITY.
The primary process is that of a Grand Manoeuvre against an
adverse army acting in the formation by Grand Columns, and the
object of such Grand Manoeuvre always is, by superior celerity of
movement, to occupy:

1. The Strategic Center by the Kindred Column of Attack, thus


intersecting the Route of Communication between the
adverse main body and its Base of Operation; or to occupy:
2. The Logistic Center with the Kindred Columns of Support and
of Manoeuvre, thus intersecting the Route of
Communication between the adverse main body and its
Chief Supporting Column and clearing the way for the
advance of the Kindred Column of Support against the flank
and rear of the adverse Main Body.

Obviously, the united Kindred Columns of Attack and of Support


always will constitute an overwhelming superiority in Numbers as
compared with the adverse main body.

In Presence.

The chief requisite for success when acting against an adverse


Grand Column in Presence, is the advantage in POSITION.

The primary process is that of a Grand Manoeuvre against an


adverse army acting in the Formation by Wings, and the object of
such Grand Manoeuvre always is, by availing to the uttermost of its
situation upon the Tactical Center, i.e., upon the area midway
between the adverse Wings thus isolated from each other; to act in
overwhelming Numbers, first against one and then against the other
hostile bodies.

In Contact.
The chief requisite for success when acting offensively against an
adverse Grand Column, or Wing, or Corps d’armee, in Contact,
is the advantage in NUMBERS.

The primary process is that of a Grand Battle in which the kindred


army has an overwhelming superiority in Numbers in contact, and at
least the equality in all other Prime Strategetic Means.
In this circumstance, the object of such Grand Battle always is:

1. To attack the hostile Formation in Mass frontally at the center,


and upon both wings obliquely; all three attacks being
made simultaneously and the evolutions so executed that
the hostile army never is able to penetrate between either
kindred wing and the kindred center, nor to outflank that
kindred wing which may be in the air.
2. In case the kindred army has the equality or inferiority in all
other Prime Strategetic Means, then the object of a Grand
Battle on the Offensive is to attack the hostile Formation in
Mass obliquely with the whole kindred army, and preferably
upon that wing which covers the route of communication of
the adverse army with its Base of Operations, but always
upon that wing which contains the Tactical Key of the actual
Battlefield.

Obviously, the concentration of the entire kindred army against a


single adverse wing always will constitute an overwhelming
superiority in Numbers.
In making such attack obliquely against a single adverse wing, the
center and remaining wing of the kindred army must not engage
until the kindred Van and Corps of Position of the attacking wing first
have formed the center of three sides of an octagon; of which the
Kindred Corps of Evolution will form the farthest side and the
Kindred Center and left wing Corps d’armee will form the nearest
and latest constructed side.
The chief requisite for success when acting defensively against a
Grand Column, or Wing, or Corps d’armee is the advantage in
TOPOGRAPHY.

The primary process is that of a Grand Battle in which the kindred


army, decidedly inferior in Numbers in the aggregate, has the
advantage in Topography and equality in all other Prime Strategetic
Means.
In this case the object is to support both flanks of the inferior
army upon impassable natural barriers, strengthening both wings at
the expense of the center, both in quantity and in quality of troops.
If the Tactical Defensive be selected, the center should retire
before the oncoming of the hostile army in order to enclose it
between the Kindred Wings, which will then overwhelm it by
superior Numbers, while the natural barriers on the flanks being
impassable will prevent the remaining hostile corps from
participating in the battle otherwise than as spectators.
Should the Tactical Offensive be selected, that kindred wing best
adapted for attack should engage supported by all kindred Corps of
Evolution, while advancing the Kindred Center in reserve and holding
the remaining wing refused and in observation.
All else being equal, relative advantage in either branch of Prime
Strategetic Means is sufficient to ensure victory in battle, and the
proper use of such advantage for securing victory is outlined thus:

PRINCIPLE
Utilize advantage in Prime Strategetic Means to obtain the
superiority in Numbers at the Point of Contact in an Offensive
Battle; and to nullify the adverse superiority in Numbers at the
point of contact in a Defensive Battle.
Between War and Chess there is a seeming incongruity, which is
the basis of that doubt of the utility of Chess-play, so commonly held
by laymen, and which fallacy few, even among proficients, are
competent to combat.
This doubt most frequently is voiced by the query:
If Chess and War are analagous, why was not
Napoleon a Master Chess-player and Morphy a great
military Commander?
This query readily is answered in the words of Frederic the Great,
viz.:
“To be possessed of talent is not sufficient.
Opportunity to display such talent and to its full extent
is necessary. All depends on the time in which we live.”
The Strategetic talent possessed in common by Morphy and
Napoleon, in both was brought to perfection by long and expert
training.
But circumstances placed the twelve year old Napoleon in the
midst of soldiers and in an era of war, while circumstances placed
the twelve year old Morphy in the midst of Chess-players and in an
era of Peace.
Napoleon was educated a General; Morphy was educated a lawyer.
To develop his self-evident and superlative Strategetic talent,
Napoleon’s education was of the best; to develop his self-evident
and superlative Strategetic talent, Morphy’s education was of the
worst.
Napoleon succeeded as a General; Morphy failed as a lawyer.
The innate capability of Napoleon for Strategetics was developed
in the direction of Warfare; the innate capability of Morphy for
Strategetics was developed in the direction of Chess-play.
In War, Napoleon is superlative; in Chess, Morphy is superlative.
Educated in the law, Napoleon might have proved like Morphy a
non-entity; educated in Chess, Napoleon might have proved like
Morphy a phenomenon.
Educated in War, Morphy might have rivalled Napoleon.
For the Chess-play of Morphy displays that perfect comprehension
of Strategetics, to which none but the great Captains in warfare have
attained.
Perfection in Strategetics consists in exactly interpreting in battle
and campaign, the System of Warfare invented by Epaminondas.
Those able to do this in War have achieved greatness, and the
great at Chess-play are those who best have imitated that exactness
with which Morphy employed this system on the Chess-board.
To those who imagine that Strategetic talent, as exemplified in
Warfare, is different from Strategetic talent as exemplified in Chess-
play, the following may afford matter for reflection.

“Frederic the Great was one of the finest Chess-players that


Germany ever produced.”—Wilhelm Steinitz.
PRIME STRATEGETIC PROPOSITION
SECTION ONE
PRIME STRATEGETIC PROPOSITION
SECTION ONE

(First Phase.)
In the consideration of every Strategetic Situation possible in
Warfare, or in Chess-play, the initial process always is a Grand
Reconnaissance.
Grand Reconnaissance is that exact scrutiny of existing conditions,
whereby is determined the relative advantages and disadvantages
possessed by the opposing armies in:

1. Time.
2. Numbers.
3. Position.
4. Organization.
5. Mobility.
6. Topography.

The First Phase in the demonstration of every Prime Strategetic


Proposition consists:

1. In determining by comparison of the relative advantages and


disadvantages in Time, which of the opposing armies has
the ability to MOVE, while the other must remain stationary.
2. In deducing the MOTIF of such movement.
3. In designating the DIRECTION of such movement.
The making of Grand Reconnaissance is a special privilege which
exclusively appertains to the advantage in Time. It always should be
made by the Commander-in-chief of that army which is able to put
itself in motion, while the opposing army must remain stationary,
and it never should be confounded with the advance of the Cavalry
Corps, nor confused with the work of scouts and spies; all of which
are matters entirely separate and distinct from Grand
Reconnaissance.
In the Grand Reconnaissance of any given Strategetic Situation
the element of Numbers primarily is to be considered, for the reason
that the basic fact of the Science of Strategetics is:
“THE GREATER FORCE ALWAYS OVERCOMES THE
LESSER.”—Napoleon.
Hence, unless more immediately vital considerations prevent,
superiority in Numbers, of itself, is decisive of victory; and thus it
readily is to be deduced that all else being equal, the advantage in
Time plus the advantage in Numbers constitutes the easiest and
simplest winning combination known to Strategetic Art.
But it so happens that the advantage in Time may be combined
not only with the greater force, but also with an equal, or even with
the lesser force, and from this it is self-evident that Strategetic
Situations are divided into three classes, viz.:

I. Numerical superiority, plus right to move.


II. Numerical equality, plus right to move.
III. Numerical inferiority, plus right to move.

There are two primary methods for availing of superiority in


Numbers to destroy the opposing lesser force, viz.:

1. By the Process of Attrition, i.e., by maintaining an incessant


tactical offensive and thus wearing down the opposing
army by exchanging pieces at every opportunity.
2. By Acting in Detachments, i.e., by means of the extra corps,
simultaneously to attack more points of vital importance
than the hostile army is able simultaneously to defend.

From the foregoing it is obvious that conversely there are two


principal considerations, which all else being equal, must dominate
the procedure of the Numerically inferior force, viz.:

I. To avoid further diminution of its aggregate.


II. To avoid creating indefensible vital points.

The second consideration in the making of a Grand


Reconnaissance by the commander-in-chief of an army having the
advantage in Time, is the element of Position; for the reason that by
unscientific posting of Corps d’armee, relative advantages in Time,
or in Numbers or in both, may be rendered nugatory, on account of
inability of the kindred Columns of Attack, of Support and of
Manoeuvre to perform their functions.
In case the Corps are scientifically posted and are in positions to
avail of advantage in Time and Numbers, those adverse vital points
whose occupation may be effected by superior force, always will be
the objectives of the movements of the latter.
Hence, the following:

PRINCIPLE
As the advantage in Time gives the right to MOVE and the
advantage in Numbers indicates the MOTIF of movement; so
does the advantage in Position, as expressed by the Strategic
Syllogism, specify the DIRECTION of that movement which
normally appertains to the army having the advantage in Time.
The proper direction of that movement which normally appertains
to the advantage in Time always is indicated by the plus signs in the
Strategic Syllogism, viz.:

+A. Signifies that the Normal direction of movement for the


army having the advantage in Time is along the
Strategetic Center towards the Objective Plane.
+S. Signifies that the Normal direction of movement for the
army having the advantage in Time is along one or
more pawn altitudes towards the Kindred Logistic
Horizon.
+M. Signifies that the Normal direction of movement for the
army having the advantage in Time is along the
shortest open pawn altitude towards the Kindred Point
of Junction.
+A+S. Signifies that the Normal direction of movement for the
army having the advantage in Time is double, i.e.,
+A. towards the Objective Plane.
+S. along one or more open Pawn altitudes toward
the Kindred Logistic Horizon.
+A+M. Signifies that the Normal direction of movement for the
army having the advantage in Time, is double, i.e.,
+A. towards the Objective Plane.
+M. Along the shortest open pawn altitude toward
the Kindred Point of Junction.
+S+M. Signifies that the Normal direction of movement for the
army having the advantage in Time is double, i.e.,
+S. Along one or more open Pawn altitudes toward
the Kindred Logistic Horizon.
+M. Along the shortest open Pawn Altitude toward
the Kindred Point of Junction.
+A+S+M. Signifies that the Normal direction of movement is
triple, i.e.,
+A. Toward the Objective Plane.
+S. Along one or more open Pawn altitudes, toward
the Kindred Logistic Horizon.
+M. Along the shortest open Pawn altitude, toward
the Kindred Point of Junction.

The First Phase in the demonstration of every Strategetic


Proposition is determined by the following:

THEOREM
Given the Normal ability to move, to determine the Normal motif and
direction of movement.

1. Designate that army having the advantage in Time and express


such advantage by the symbol +T, express the corresponding
disadvantage in Time which appertains to the opposing army, by the
symbol -T, and such symbols will constitute the First Term of the
First Phase of the demonstration of any Prime Strategetic
Proposition.
2. Express that superiority, equality, or inferiority in Numbers,
which appertains to each of the opposing armies by the symbols +N,
=N,-N, respectively; and such symbols will constitute the Second
Term of the First Phase of the demonstration of any Prime
Strategetic Proposition.
3. Express the objectives designated by the plus terms of the
Strategic Syllogism, viz.:

(a) Objective of +A = Objective Plane, i.e., O. P.


(b) ” +S = Logistic Horizon, i.e., L. H.
(c) ” +M = Point of Junction, i.e., P. J.
and the symbols denoting such objectives will constitute the Third
Term in the First Phase of the demonstration of any Prime
Strategetic Proposition.
4. Combine those three terms which appertain to the advantage in
Time, then combine those three terms which appertain to the
disadvantage in Time, and the resulting equation when expanded
will depict:

(a) The normal ability to move.


(b) The normal motif of movement.
(c) The normal directions of movement which appertain to each
of the opposing armies.

EXAMPLE

White. (+T+N) + (+A+S+M)


Black. (-T-N) + (-A-S-M)

EXPANDED

First Term. +T = Normal ability to move.


Second Term. +N = Normal motif of movement,
(a) Detachments, (b) Exchanges.
Third Term +O. P. = Normal objective of +A.
+L. H. = ” ” ” +S.
+P. J. = ” ” ” +M.

Hence, in the foregoing example the normal direction of


movement for White may be either toward the Objective Plane with
the Column of Attack, or toward the Logistic Horizon, or the Point of
Junction with the Column of Support, or toward both objectives, with
both columns simultaneously.
Meanwhile, the Black army having the disadvantage in Time is
unable to move, and consequently is stationary.
Furthermore, White having the superiority in Numbers may move
with an equal force against either objective designated by the Third
Term of the equation, and with his excess force against one or more
adverse vital points, simultaneously, against which latter movement,
Black obviously has no adequate defence.

TACTICO-LOGISTIC INEQUALITY
The Tactico-Logistic Inequality is the algebraic expression of the
relative advantages and disadvantages in Time and in Numbers
appertaining to opposing Strategetic Entireties.
Such advantages and disadvantages are denoted by the terms,
viz.:

+T. Signifies the absolute advantage in Time, i.e., the ability of an


army, a grand column, a wing or a corps d’armee to move,
while the opposing force must remain stationary.
-T. Signifies the absolute disadvantage in Time, i.e., the
obligation of an army, a grand column, a wing, or a corps
d’armee to remain stationary, while the opposing force is in
motion.
+N. Signifies the absolute advantage in Numbers, i.e., the larger
number of corps d’armee.
-N. Signifies the absolute disadvantage in Numbers, i.e., the
smaller number of corps d’armee.
=N. Signifies the equality in Numbers, i.e., the same number of
corps d’armee.

There are six forms of the Tactico-Logistic Inequality, viz.:

1. +T+N
-T-N
2. +T=N
-T=N
3. +T-N
-T+N
4. -T+N
+T-N
5. -T=N
+T=N
6. -T-N
+T+N

INITIAL STRATEGETIC EQUATION

The Initial Strategetic Equation is made up of those terms which


compose the Strategic Syllogism and the Tactico-Logistic Inequality,
viz.:

(+A+S+M) + (+T+N) - (-A-S-M) + (-T-N) =


the Normal Motif and Direction of Effort.

RULE
1. Set down in parenthesis those terms of the Strategic Syllogism
which appertain to White.
Set down in parenthesis those terms of the Tactico-Logistic
Inequality which appertain to White.
Connect the two kindred terms thus constructed, by the sign of
addition, to show that each is to augment the other, and superscore
all by the same vincula to show that all are to be taken together to
form one side of the resulting equation.
2. Repeat this process for the Black terms to construct the second
side of the Initial Strategetic Equation, and separate the White from
the Black terms by a minus sign.

STRATEGETIC VALUES
The Strategetic Values of the terms contained in the Strategic
Syllogism and in the Tactico-Logistic Inequality are shown by the
appended tables, viz.:

TABLE OF STRATEGIC VALUES.

Term. Post. Direction. Motif.


1. +A Grand Vertex Tactical Key of To give checkmate
Objective Plane
2. +M Point Proximity Point of Junction To queen a Pawn
en command
3. +A Major Vertex 1. Grand Vertex To gain winning
2. Point Aligned Position with
3. Point en Column of Attack
Potence
4. +M Point Proximity Point en To gain winning
en Menace Command Position with
Column of Support
5. +M Point Proximity Point en Menace To gain winning
en Presence Position with
Column of Support
6. +A Minor Vertex 1. Major Vertex To gain Superior
2. Point Aligned Position with
Column of Attack
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookultra.com

You might also like