an introduction to programming in emacs lisp, 2nd ed - robert j. chassell

Download An Introduction to Programming in Emacs Lisp, 2Nd Ed - Robert J. Chassell

Post on 27-Dec-2015

15 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 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 FreeSoftware Foundation, Inc.

    Published by the Free Software Foundation, Inc.59 Temple Place, Suite 330Boston, MA 02111-1307 USA

    Edition 2.05, 2001 Jan 5ISBN 1-882114-43-4Permission is granted to copy, distribute and/or modify this document underthe terms of the GNU Free Documentation License, Version 1.1 or any laterversion published by the Free Software Foundation; there being no InvariantSection, with the Front-Cover Texts being A GNU Manual, and with theBack-Cover Texts as in (a) below. A copy of the license is included in thesection entitled GNU Free Documentation License.(a) The FSFs Back-Cover Text is: You have freedom to copy and modifythis GNUManual, like GNU software. Copies published by the Free SoftwareFoundation raise funds for GNU development.

  • iShort Contents

    Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi1 List Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Practicing Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 How To Write Function Definitions . . . . . . . . . . . . . . . . . . 294 A Few BufferRelated Functions . . . . . . . . . . . . . . . . . . . . 515 A Few More Complex Functions . . . . . . . . . . . . . . . . . . . . 636 Narrowing and Widening . . . . . . . . . . . . . . . . . . . . . . . . . 777 car, cdr, cons: Fundamental Functions . . . . . . . . . . . . . 818 Cutting and Storing Text . . . . . . . . . . . . . . . . . . . . . . . . . 899 How Lists are Implemented . . . . . . . . . . . . . . . . . . . . . . . 11310 Yanking Text Back . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11711 Loops and Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . 12112 Regular Expression Searches . . . . . . . . . . . . . . . . . . . . . . 14913 Counting: Repetition and Regexps . . . . . . . . . . . . . . . . . . 16714 Counting Words in a defun . . . . . . . . . . . . . . . . . . . . . . 18115 Readying a Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20316 Your .emacs File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21317 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23118 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Appendix A The the-the Function . . . . . . . . . . . . . . . . . . 241Appendix B Handling the Kill Ring . . . . . . . . . . . . . . . . . . . 243Appendix C A Graph with Labelled Axes . . . . . . . . . . . . . . . 255Appendix D GNU Free Documentation License . . . . . . . . . . . 279Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

  • ii

  • iii

    Table of Contents

    Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiOn Reading this Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiFor Whom This is Written. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiiLisp History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiiiA Note for Novices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiiiThank You . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv

    1 List Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Lisp Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.1.1 Lisp Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.2 Whitespace in Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1.3 GNU Emacs Helps You Type Lists . . . . . . . . . . . . . . . 3

    1.2 Run a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Generate an Error Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Symbol Names and Function Definitions . . . . . . . . . . . . . . . . . . 61.5 The Lisp Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.5.1 Byte Compiling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.6 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.6.1 Evaluating Inner Lists . . . . . . . . . . . . . . . . . . . . . . . . . . 91.7 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.7.1 Error Message for a Symbol Without a Function . . 111.7.2 Error Message for a Symbol Without a Value . . . . 11

    1.8 Arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.8.1 Arguments Data Types . . . . . . . . . . . . . . . . . . . . . . . . 131.8.2 An Argument as the Value of a Variable or List . . 131.8.3 Variable Number of Arguments . . . . . . . . . . . . . . . . . 141.8.4 Using the Wrong Type Object as an Argument . . 141.8.5 The message Function . . . . . . . . . . . . . . . . . . . . . . . . . 16

    1.9 Setting the Value of a Variable . . . . . . . . . . . . . . . . . . . . . . . . . . 171.9.1 Using set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.9.2 Using setq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.9.3 Counting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2 Practicing Evaluation . . . . . . . . . . . . . . . . . . . . . 232.1 Buffer Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.2 Getting Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.3 Switching Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.4 Buffer Size and the Location of Point . . . . . . . . . . . . . . . . . . . . 272.5 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

  • iv

    3 How To Write Function Definitions . . . . . . . . 293.1 The defun Special Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2 Install a Function Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.2.1 Change a Function Definition . . . . . . . . . . . . . . . . . . . 323.3 Make a Function Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3.3.1 An Interactive multiply-by-seven . . . . . . . . . . . . . 343.4 Different Options for interactive . . . . . . . . . . . . . . . . . . . . . . 353.5 Install Code Permanently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.6 let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    3.6.1 The Parts of a let Expression . . . . . . . . . . . . . . . . . . 373.6.2 Sample let Expression . . . . . . . . . . . . . . . . . . . . . . . . . 383.6.3 Uninitialized Variables in a let Statement . . . . . . . 39

    3.7 The if Special Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.7.1 The type-of-animal Function in Detail . . . . . . . . . 41

    3.8 Ifthenelse Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.9 Truth and Falsehood in Emacs Lisp . . . . . . . . . . . . . . . . . . . . . 433.10 save-excursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3.10.1 Template for a save-excursion Expression . . . . 453.11 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    4 A Few BufferRelated Functions . . . . . . . . . . . 514.1 Finding More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.2 A Simplified beginning-of-buffer Definition . . . . . . . . . . . . 524.3 The Definition of mark-whole-buffer . . . . . . . . . . . . . . . . . . . 54

    4.3.1 Body of mark-whole-buffer . . . . . . . . . . . . . . . . . . . 554.4 The Definition of append-to-buffer . . . . . . . . . . . . . . . . . . . . 56

    4.4.1 The append-to-buffer Interactive Expression . . . 574.4.2 The Body of append-to-buffer . . . . . . . . . . . . . . . . 574.4.3 save-excursion in append-to-buffer . . . . . . . . . . 58

    4.5 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

  • v5 A Few More Complex Functions . . . . . . . . . . . 635.1 The Definition of copy-to-buffer. . . . . . . . . . . . . . . . . . . . . . . 635.2 The Definition of insert-buffer . . . . . . . . . . . . . . . . . . . . . . . . 64

    5.2.1 The Interactive Expression in insert-buffer . . . . 65A Read-only Buffer. . . . . . . . . . . . . . . . . . . . . . . . . . . . 65b in an Interactive Expression . . . . . . . . . . . . . . . . . 65

    5.2.2 The Body of the insert-buffer Function . . . . . . . 655.2.3 insert-buffer With an if Instead of an or . . . . . 665.2.4 The or in the Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.2.5 The let Expression in insert-buffer . . . . . . . . . . 68

    5.3 Complete Definition of beginning-of-

Recommended

View more >