home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2001 May / SGI Freeware 2001 May - Disc 3.iso / dist / fw_elisp-intro.idb / usr / freeware / info / emacs-lisp-intro.info-3.z / emacs-lisp-intro.info-3
Encoding:
GNU Info File  |  1998-10-28  |  43.6 KB  |  1,025 lines

  1. This is Info file emacs-lisp-intro.info, produced by Makeinfo version
  2. 1.67 from the input file emacs-lisp-intro.texi.
  3.  
  4.    This is an introduction to `Programming in Emacs Lisp', for people
  5. who are not programmers.
  6.  
  7.    Edition 1.05, 21 October 1997
  8.  
  9.    Copyright (C) 1990, '91, '92, '93, '94, '95, '97 Free Software
  10. Foundation, Inc.
  11.  
  12.    Permission is granted to make and distribute verbatim copies of this
  13. manual provided the copyright notice and this permission notice are
  14. preserved on all copies.
  15.  
  16.    Permission is granted to copy and distribute modified versions of
  17. this manual under the conditions for verbatim copying, provided also
  18. that the sections entitled "Copying" and "GNU General Public License"
  19. are included exactly as in the original, and provided that the entire
  20. resulting derived work is distributed under the terms of a permission
  21. notice identical to this one.
  22.  
  23.    Permission is granted to copy and distribute translations of this
  24. manual into another language, under the above conditions for modified
  25. versions, except that this permission notice may be stated in a
  26. translation approved by the Free Software Foundation.
  27.  
  28. 
  29. File: emacs-lisp-intro.info,  Node: defun,  Next: Install,  Prev: Primitive Functions,  Up: Writing Defuns
  30.  
  31. The `defun' Special Form
  32. ========================
  33.  
  34.    In Lisp, a symbol such as `mark-whole-buffer' has code attached to
  35. it that tells the computer what to do when the function is called.
  36. This code is called the "function definition" and is created by
  37. evaluating a Lisp expression that starts with the symbol `defun' (which
  38. is an abbreviation for *define function*).  Because `defun' does not
  39. evaluate its arguments in the usual way, it is called a "special form".
  40.  
  41.    In subsequent sections, we will look at function definitions from the
  42. Emacs source code, such as `mark-whole-buffer'.  In this section, we
  43. will describe a simple function definition so you can see how it looks.
  44. This function definition uses arithmetic because it makes for a simple
  45. example.  Some people dislike examples using arithmetic; however, if
  46. you are such a person, do not despair.  Hardly any of the code we will
  47. study in the remainder of this introduction involves arithmetic or
  48. mathematics.  The examples mostly involve text in one way or another.
  49.  
  50.    A function definition has up to five parts following the word
  51. `defun':
  52.  
  53.   1. The name of the symbol to which the function definition should be
  54.      attached.
  55.  
  56.   2. A list of the arguments that will be passed to the function.  If no
  57.      arguments will be passed to the function, this is an empty list,
  58.      `()'.
  59.  
  60.   3. Documentation describing the function.  (Technically optional, but
  61.      strongly recommended.)
  62.  
  63.   4. Optionally, an expression to make the function interactive so you
  64.      can use it by typing `M-x' and then the name of the function; or by
  65.      typing an appropriate key or keychord.
  66.  
  67.   5. The code that instructs the computer what to do: the "body" of the
  68.      function definition.
  69.  
  70.    It is helpful to think of the five parts of a function definition as
  71. being organized in a template, with slots for each part:
  72.  
  73.      (defun FUNCTION-NAME (ARGUMENTS...)
  74.        "OPTIONAL-DOCUMENTATION..."
  75.        (interactive ARGUMENT-PASSING-INFO)     ; optional
  76.        BODY...)
  77.  
  78.    As an example, here is the code for a function that multiplies its
  79. argument by 7.  (This example is not interactive.  *Note Making a
  80. Function Interactive: Interactive, for that information.)
  81.  
  82.      (defun multiply-by-seven (number)
  83.        "Multiply NUMBER by seven."
  84.        (* 7 number))
  85.  
  86.    This definition begins with a parenthesis and the symbol `defun',
  87. followed by the name of the function.
  88.  
  89.    The name of the function is followed by a list that contains the
  90. arguments that will be passed to the function.  This list is called the
  91. "argument list".  In this case, the list has only one element, the
  92. symbol, `number'.  When the function is used, the symbol will be bound
  93. to the value that is used as the argument to the function.
  94.  
  95.    Instead of choosing the word `number' for the name of the argument,
  96. I could have picked any other name.  For example, I could have chosen
  97. the word `multiplicand'.  I picked the word `number' because it tells
  98. what kind of value is intended for this slot; but I could just as well
  99. have chosen the word `multiplicand' to indicate the role that the value
  100. placed in this slot will play in the workings of the function.  I could
  101. have called it `foogle', but that would have been a bad choice because
  102. it would not tell humans what it means.  The choice of name is up to
  103. the programmer and should be chosen to make the meaning of the function
  104. clear.
  105.  
  106.    Indeed, you can choose any name you wish for a symbol in an argument
  107. list, even the name of a symbol used in some other function: the name
  108. you use in an argument list is private to that particular definition.
  109. In that definition, the name refers to a different entity than any use
  110. of the same name outside the function definition.  Suppose you have a
  111. nick-name `Shorty' in your family; when your family members refer to
  112. `Shorty', they mean you.  But outside your family, in a movie, for
  113. example, the name `Shorty' refers to someone else.  Because a name in an
  114. argument list is private to the function definition, you can change the
  115. value of such a symbol inside the body of a function without changing
  116. its value outside the function.  The effect is similar to that produced
  117. by a `let' expression.  (*Note `let': let.)
  118.  
  119.    The argument list is followed by the documentation string that
  120. describes the function.  This is what you see when you type `C-h f' and
  121. the name of a function.  Incidentally, when you write a documentation
  122. string like this, you should make the first line a complete sentence
  123. since some commands, such as `apropos', print only the first line of a
  124. multi-line documentation string.  Also, you should not indent the
  125. second line of a documentation string, if you have one, because that
  126. looks odd when you use `C-h f' (`describe-function').  The
  127. documentation string is optional, but it is so useful, it should be
  128. included in almost every function you write.
  129.  
  130.    The third line of the example consists of the body of the function
  131. definition.  (Most functions' definitions, of course, are longer than
  132. this.)  In this case, the body is the list, `(* 7 number)', which says
  133. to multiply the value of NUMBER by 7.  (In Emacs Lisp, `*' is the
  134. function for multiplication, just as `+' is the function for addition.)
  135.  
  136.    When you use the `multiply-by-seven' function, the argument `number'
  137. evaluates to the actual number you want used.  Here is an example that
  138. shows how `multiply-by-seven' is used; but don't try to evaluate this
  139. yet!
  140.  
  141.      (multiply-by-seven 3)
  142.  
  143. The symbol `number', specified in the function definition in the next
  144. section, is given or "bound to" the value 3 in the actual use of the
  145. function.  Note that although `number' was inside parentheses in the
  146. function definition, the argument passed to the `multiply-by-seven'
  147. function is not in parentheses.  The parentheses are written in the
  148. function definition so the computer can figure out where the argument
  149. list ends and the rest of the function definition begins.
  150.  
  151.    If you evaluate this example, you are likely to get an error message.
  152. (Go ahead, try it!)  This is because we have written the function
  153. definition, but not yet told the computer about the definition--we have
  154. not yet installed (or `loaded') the function definition in Emacs.
  155. Installing a function is the process that tells the Lisp interpreter the
  156. definition of the function.  Installation is described in the next
  157. section.
  158.  
  159. 
  160. File: emacs-lisp-intro.info,  Node: Install,  Next: Interactive,  Prev: defun,  Up: Writing Defuns
  161.  
  162. Install a Function Definition
  163. =============================
  164.  
  165.    If you are reading this inside of Info in Emacs, you can try out the
  166. `multiply-by-seven' function by first evaluating the function
  167. definition and then evaluating `(multiply-by-seven 3)'.  A copy of the
  168. function definition follows.  Place the cursor after the last
  169. parenthesis of the function definition and type `C-x C-e'.  When you do
  170. this, `multiply-by-seven' will appear in the echo area.  (What this
  171. means is that when a function definition is evaluated, the value it
  172. returns is the name of the defined function.)  At the same time, this
  173. action installs the function definition.
  174.  
  175.      (defun multiply-by-seven (number)
  176.        "Multiply NUMBER by seven."
  177.        (* 7 number))
  178.  
  179. By evaluating this `defun', you have just installed `multiply-by-seven'
  180. in Emacs.  The function is now just as much a part of Emacs as
  181. `forward-word' or any other editing function you use.
  182. (`multiply-by-seven' will stay installed until you quit Emacs.  To
  183. reload code automatically whenever you start Emacs, see *Note
  184. Installing Code Permanently: Permanent Installation.)
  185.  
  186.    You can see the effect of installing `multiply-by-seven' by
  187. evaluating the following sample.  Place the cursor after the following
  188. expression and type `C-x C-e'.  The number 21 will appear in the echo
  189. area.
  190.  
  191.      (multiply-by-seven 3)
  192.  
  193.    If you wish, you can read the documentation for the function by
  194. typing `C-h f' (`describe-function') and then the name of the function,
  195. ` multiply-by-seven'.  When you do this, a `*Help*' window will appear
  196. on your screen that says:
  197.  
  198.      multiply-by-seven:
  199.      Multiply NUMBER by seven.
  200.  
  201. (To return to a single window on your screen, type `C-x 1'.)
  202.  
  203. * Menu:
  204.  
  205. * Change a defun::              How to change a function definition.
  206.  
  207. 
  208. File: emacs-lisp-intro.info,  Node: Change a defun,  Prev: Install,  Up: Install
  209.  
  210. Change a Function Definition
  211. ----------------------------
  212.  
  213.    If you want to change the code in `multiply-by-seven', just rewrite
  214. it.  To install the new version in place of the old one, evaluate the
  215. function definition again.  This is how you modify code in Emacs.  It is
  216. very simple.
  217.  
  218.    As an example, you can change the `multiply-by-seven' function to
  219. add the number to itself seven times instead of multiplying the number
  220. by seven.  The produces the same answer, but by a different path.  At
  221. the same time, we will add a comment to the code;  a comment is text
  222. that the Lisp interpreter ignores, but that a human reader may find
  223. useful or enlightening.  In this case the comment is that this is the
  224. "second version".
  225.  
  226.      (defun multiply-by-seven (number)       ; Second version.
  227.        "Multiply NUMBER by seven."
  228.        (+ number number number number number number number))
  229.  
  230.    The comment follows a semicolon, `;'.  In Lisp, everything on a line
  231. that follows a semicolon is a comment.  The end of the line is the end
  232. of the comment.  To stretch a comment over two or more lines, begin
  233. each line with a semicolon.
  234.  
  235.    *Note Beginning a `.emacs' File: Beginning a .emacs File, and *Note
  236. Comments: (elisp)Comments, for more about comments.
  237.  
  238.    You can install this version of the `multiply-by-seven' function by
  239. evaluating it in the same way you evaluated the first function: place
  240. the cursor after the last parenthesis and type `C-x C-e'.
  241.  
  242.    In summary, this is how you write code in Emacs Lisp: you write a
  243. function; install it; test it; and then make fixes or enhancements and
  244. install it again.
  245.  
  246. 
  247. File: emacs-lisp-intro.info,  Node: Interactive,  Next: Interactive Options,  Prev: Install,  Up: Writing Defuns
  248.  
  249. Make a Function Interactive
  250. ===========================
  251.  
  252.    You make a function interactive by placing a list that begins with
  253. the special form `interactive' immediately after the documentation.  A
  254. user can invoke an interactive function by typing `M-x' and then the
  255. name of the function; or by typing the keys to which it is bound, for
  256. example, by typing `C-n' for `next-line' or `C-x h' for
  257. `mark-whole-buffer'.
  258.  
  259.    Interestingly, when you call an interactive function interactively,
  260. the value returned is not automatically displayed in the echo area.
  261. This is because you often call an interactive function for its side
  262. effects, such as moving forward by a word or line, and not for the
  263. value returned.  If the returned value were displayed in the echo area
  264. each time you typed a key, it would be very distracting.
  265.  
  266.    Both the use of the special form `interactive' and one way to
  267. display a value in the echo area can be illustrated by creating an
  268. interactive version of `multiply-by-seven'.
  269.  
  270.    Here is the code:
  271.  
  272.      (defun multiply-by-seven (number)       ; Interactive version.
  273.        "Multiply NUMBER by seven."
  274.        (interactive "p")
  275.        (message "The result is %d" (* 7 number)))
  276.  
  277. You can install this code by placing your cursor after it and typing
  278. `C-x C-e'.  The name of the function will appear in your echo area.
  279. Then, you can use this code by typing `C-u' and a number and then
  280. typing `M-x multiply-by-seven' and pressing <RET>.  The phrase `The
  281. result is ...' followed by the product will appear in the echo area.
  282.  
  283.    Speaking more generally, you invoke a function like this in either
  284. of two ways:
  285.  
  286.   1. By typing a prefix argument that contains the number to be passed,
  287.      and then typing `M-x' and the name of the function, as with `C-u 3
  288.      M-x forward-sentence'; or,
  289.  
  290.   2. By typing whatever key or keychord the function is bound to, as
  291.      with `C-u 3 M-e'.
  292.  
  293. Both the examples just mentioned work identically to move point forward
  294. three sentences.  (Since `multiply-by-seven' is not bound to a key, it
  295. could not be used as an example of key binding.)
  296.  
  297.    (*Note Some Keybindings: Keybindings, to learn how to bind a command
  298. to a key.)
  299.  
  300.    A prefix argument is passed to an interactive function by typing the
  301. <META> key followed by a number, for example, `M-3 M-e', or by typing
  302. `C-u' and then a number, for example, `C-u 3 M-e' (if you type `C-u'
  303. without a number, it defaults to 4).
  304.  
  305. * Menu:
  306.  
  307. * multiply-by-seven in detail::  The interactive version.
  308.  
  309. 
  310. File: emacs-lisp-intro.info,  Node: multiply-by-seven in detail,  Prev: Interactive,  Up: Interactive
  311.  
  312. An Interactive `multiply-by-seven'.
  313. -----------------------------------
  314.  
  315.    Let's look at the use of the special form `interactive' and then at
  316. the function `message' in the interactive version of
  317. `multiply-by-seven'.  You will recall that the function definition
  318. looks like this:
  319.  
  320.      (defun multiply-by-seven (number)       ; Interactive version.
  321.        "Multiply NUMBER by seven."
  322.        (interactive "p")
  323.        (message "The result is %d" (* 7 number)))
  324.  
  325.    In this function, the expression, `(interactive "p")', is a list of
  326. two elements.  The `"p"' tells Emacs to pass the prefix argument to the
  327. function and use its value for the argument of the function.
  328.  
  329.    The argument will be a number.  This means that the symbol `number'
  330. will be bound to a number in the line:
  331.  
  332.      (message "The result is %d" (* 7 number))
  333.  
  334. For example, if your prefix argument is 5, the Lisp interpreter will
  335. evaluate the line as if it were:
  336.  
  337.      (message "The result is %d" (* 7 5))
  338.  
  339. (If you are reading this in GNU Emacs, you can evaluate this expression
  340. yourself.)  First, the interpreter will evaluate the inner list, which
  341. is `(* 7 5)'.  This returns a value of 35.  Next, it will evaluate the
  342. outer list, passing the values of the second and subsequent elements of
  343. the list to the function `message'.
  344.  
  345.    As we have seen, `message' is an Emacs Lisp function especially
  346. designed for sending a one line message to a user.  (*Note The
  347. `message' function: message.) In summary, the `message' function prints
  348. its first argument in the echo area as is, except for occurrences of
  349. `%d', `%s', or `%c'.  When it sees one of these control sequences, the
  350. function looks to the second and subsequent arguments and prints the
  351. value of the argument in the location in the string where the control
  352. sequence is located.
  353.  
  354.    In the interactive `multiply-by-seven' function, the control string
  355. is `%d', which requires a number, and the value returned by evaluating
  356. `(* 7 5)' is the number 35.  Consequently, the number 35 is printed in
  357. place of the `%d' and the message is `The result is 35'.
  358.  
  359.    (Note that when you call the function `multiply-by-seven', the
  360. message is printed without quotes, but when you call `message', the
  361. text is printed in double quotes.  This is because the value returned by
  362. `message' is what appears in the echo area when you evaluate an
  363. expression whose first element is `message'; but when embedded in a
  364. function, `message' prints the text as a side effect without quotes.)
  365.  
  366. 
  367. File: emacs-lisp-intro.info,  Node: Interactive Options,  Next: Permanent Installation,  Prev: Interactive,  Up: Writing Defuns
  368.  
  369. Different Options for `interactive'
  370. ===================================
  371.  
  372.    In the example, `multiply-by-seven' used `"p"' as the argument to
  373. `interactive'.  This argument told Emacs to interpret your typing
  374. either `C-u' followed by a number or <META> followed by a number as a
  375. command to pass that number to the function as its argument.  Emacs has
  376. more than twenty characters predefined for use with `interactive'.  In
  377. almost every case, one or other of these options will enable you to
  378. pass the right information interactively to a function.  (*Note Code
  379. Characters for `interactive': (elisp)Interactive Codes.)
  380.  
  381.    For example, the character `r' causes Emacs to pass the beginning
  382. and end of the region (the current values of point and mark) to the
  383. function as two separate arguments.  It is used as follows:
  384.  
  385.      (interactive "r")
  386.  
  387.    On the other hand, a `B' tells Emacs to ask for the name of a buffer
  388. that will be passed to the function.  In this case, Emacs will ask for
  389. the name by prompting the user in the minibuffer, using a string that
  390. follows the `B', as in `"BAppend to buffer: "'.  Not only will Emacs
  391. prompt for the name, but Emacs will complete the name if you type
  392. enough of it and press <TAB>.
  393.  
  394.    A function with two or more arguments can have information passed to
  395. each argument by adding parts to the string that follows `interactive'.
  396. When you do this, the information is passed to each argument in the
  397. same order it is specified in the `interactive' list.  In the string,
  398. each part is separated from the next part by a `\n', which is a
  399. newline.  For example, you could follow `"BAppend to buffer: "' with a
  400. `\n') and an `r'.  This would cause Emacs to pass the values of point
  401. and mark to the function as well as prompt you for the buffer--three
  402. arguments in all.
  403.  
  404.    In this case, the function definition would look like the following,
  405. where `buffer', `start', and `end' are the symbols to which
  406. `interactive' binds the buffer and the current values of the beginning
  407. and ending of the region:
  408.  
  409.      (defun NAME-OF-FUNCTION (buffer start end)
  410.        "DOCUMENTATION..."
  411.        (interactive "BAppend to buffer: \nr")
  412.        BODY-OF-FUNCTION...)
  413.  
  414. (The space after the colon in the prompt makes it look better when you
  415. are prompted.  The `append-to-buffer' function looks exactly like this.
  416. *Note The Definition of `append-to-buffer': append-to-buffer.)
  417.  
  418.    If a function does not have arguments, then `interactive' does not
  419. require any.  Such a function contains the simple expression
  420. `(interactive)'.  The `mark-whole-buffer' function is like this.
  421.  
  422.    Alternatively, if the special letter-codes are not right for your
  423. application, you can pass your own arguments to `interactive' as a
  424. list.  *Note Using `Interactive': (elisp)interactive, for more
  425. information about this advanced technique.
  426.  
  427. 
  428. File: emacs-lisp-intro.info,  Node: Permanent Installation,  Next: let,  Prev: Interactive Options,  Up: Writing Defuns
  429.  
  430. Install Code Permanently
  431. ========================
  432.  
  433.    When you install a function definition by evaluating it, it will stay
  434. installed until you quit Emacs.  The next time you start a new session
  435. of Emacs, the function will not be installed unless you evaluate the
  436. function definition again.
  437.  
  438.    At some point, you may want to have code installed automatically
  439. whenever you start a new session of Emacs.  There are several ways of
  440. doing this:
  441.  
  442.    * If you have code that is just for yourself, you can put the code
  443.      for the function definition in your `.emacs' initialization file.
  444.      When you start Emacs, your `.emacs' file is automatically
  445.      evaluated and all the function definitions within it are installed.
  446.      *Note Your `.emacs' File: Emacs Initialization.
  447.  
  448.    * Alternatively, you can put the function definitions that you want
  449.      installed in one or more files of their own and use the `load'
  450.      function to cause Emacs to evaluate and thereby install each of the
  451.      functions in the files.  *Note Loading Files: Loading Files.
  452.  
  453.    * On the other hand, if you have code that your whole site will use,
  454.      it is usual to put it in a file called `site-init.el' that is
  455.      loaded when Emacs is built.  This makes the code available to
  456.      everyone who uses your machine.  (See the `INSTALL' file that is
  457.      part of the Emacs distribution.)
  458.  
  459.    Finally, if you have code that everyone who uses Emacs may want, you
  460. can post it on a computer network or send a copy to the Free Software
  461. Foundation.  (When you do this, please put a copyleft notice on the code
  462. before posting it.)  If you send a copy of your code to the Free
  463. Software Foundation, it may be included in the next release of Emacs.
  464. In large part, this is how Emacs has grown over the past years, by
  465. donations.
  466.  
  467. 
  468. File: emacs-lisp-intro.info,  Node: let,  Next: if,  Prev: Permanent Installation,  Up: Writing Defuns
  469.  
  470. `let'
  471. =====
  472.  
  473.    The `let' expression is a special form in Lisp that you will need to
  474. use in most function definitions.  Because it is so common, `let' will
  475. be described in this section.
  476.  
  477.    `let' is used to attach or bind a symbol to a value in such a way
  478. that the Lisp interpreter will not confuse the variable with a variable
  479. of the same name that is not part of the function.  To understand why
  480. this special form is necessary, consider the situation in which you own
  481. a home that you generally refer to as `the house', as in the sentence,
  482. "The house needs painting."  If you are visiting a friend and your host
  483. refers to `the house', he is likely to be referring to *his* house, not
  484. yours, that is, to a different house.  If he is referring to his house
  485. and you think he is referring to your house, you may be in for some
  486. confusion.  The same thing could happen in Lisp if a variable that is
  487. used inside of one function has the same name as a variable that is
  488. used inside of another function, and the two are not intended to refer
  489. to the same value.
  490.  
  491.    The `let' special form prevents this kind of confusion.  `let'
  492. creates a name for a "local variable" that overshadows any use of the
  493. same name outside the `let' expression.  This is like understanding
  494. that whenever your host refers to `the house', he means his house, not
  495. yours.  (Symbols used in argument lists work the same way.  *Note The
  496. `defun' Special Form: defun.)
  497.  
  498.    Local variables created by a `let' expression retain their value
  499. *only* within the `let' expression itself (and within expressions
  500. called within the `let' expression); the local variables have no effect
  501. outside the `let' expression.
  502.  
  503.    `let' can create more than one variable at once.  Also, `let' gives
  504. each variable it creates an initial value, either a value specified by
  505. you, or `nil'.  (In the jargon, this is called `binding the variable to
  506. the value'.)  After `let' has created and bound the variables, it
  507. executes the code in the body of the `let', and returns the value of
  508. the last expression in the body, as the value of the whole `let'
  509. expression.  (`Execute' is a jargon term that means to evaluate a list;
  510. it comes from the use of the word meaning `to give practical effect to'
  511. (`Oxford English Dictionary').  Since you evaluate an expression to
  512. perform an action, `execute' has evolved as a synonym to `evaluate'.)
  513.  
  514. * Menu:
  515.  
  516. * Parts of let Expression::
  517. * Sample let Expression::
  518. * Uninitialized let Variables::
  519.  
  520. 
  521. File: emacs-lisp-intro.info,  Node: Parts of let Expression,  Next: Sample let Expression,  Prev: let,  Up: let
  522.  
  523. The Parts of a `let' Expression
  524. -------------------------------
  525.  
  526.    A `let' expression is a list of three parts.  The first part is the
  527. symbol `let'.  The second part is a list, called a "varlist", each
  528. element of which is either a symbol by itself or a two-element list,
  529. the first element of which is a symbol.  The third part of the `let'
  530. expression is the body of the `let'.  The body usually consists of one
  531. or more lists.
  532.  
  533.    A template for a `let' expression looks like this:
  534.  
  535.      (let VARLIST BODY...)
  536.  
  537. The symbols in the varlist are the variables that are given initial
  538. values by the `let' special form.  Symbols by themselves are given the
  539. initial value of `nil'; and each symbol that is the first element of a
  540. two-element list is bound to the value that is returned when the Lisp
  541. interpreter evaluates the second element.
  542.  
  543.    Thus, a varlist might look like this: `(thread (needles 3))'.  In
  544. this case, in a `let' expression, Emacs binds the symbol `thread' to an
  545. initial value of `nil', and binds the symbol `needles' to an initial
  546. value of 3.
  547.  
  548.    When you write a `let' expression, what you do is put the
  549. appropriate expressions in the slots of the `let' expression template.
  550.  
  551.    If the varlist is composed of two-element lists, as is often the
  552. case, the template for the `let' expression looks like this:
  553.  
  554.      (let ((VARIABLE VALUE)
  555.            (VARIABLE VALUE)
  556.            ...)
  557.            BODY...)
  558.  
  559. 
  560. File: emacs-lisp-intro.info,  Node: Sample let Expression,  Next: Uninitialized let Variables,  Prev: Parts of let Expression,  Up: let
  561.  
  562. Sample `let' Expression
  563. -----------------------
  564.  
  565.    The following expression creates and gives initial values to the two
  566. variables `zebra' and `tiger'.  The body of the `let' expression is a
  567. list which calls the `message' function.
  568.  
  569.      (let ((zebra 'stripes)
  570.            (tiger 'fierce))
  571.        (message "One kind of animal has %s and another is %s."
  572.                 zebra tiger))
  573.  
  574.    Here, the varlist is `((zebra 'stripes) (tiger 'fierce))'.
  575.  
  576.    The two variables are `zebra' and `tiger'.  Each variable is the
  577. first element of a two-element list and each value is the second
  578. element of its two-element list.  In the varlist, Emacs binds the
  579. variable `zebra' to the value `stripes', and binds the variable `tiger'
  580. to the value `fierce'.  In this case, both values are symbols preceded
  581. by a quote.  The values could just as well have been another list or a
  582. string.  The body of the `let' follows after the list holding the
  583. variables.  In this case, the body is a list that uses the `message'
  584. function to print a string in the echo area.
  585.  
  586.    You may evaluate the example in the usual fashion, by placing the
  587. cursor after the last parenthesis and typing `C-x C-e'.  When you do
  588. this, the following will appear in the echo area:
  589.  
  590.      "One kind of animal has stripes and another is fierce."
  591.  
  592.    As we have seen before, the `message' function prints its first
  593. argument, except for `%s'.  In this case, the value of the variable
  594. `zebra' is printed at the location of the first `%s' and the value of
  595. the variable `tiger' is printed at the location of the second `%s'.
  596.  
  597. 
  598. File: emacs-lisp-intro.info,  Node: Uninitialized let Variables,  Prev: Sample let Expression,  Up: let
  599.  
  600. Uninitialized Variables in a `let' Statement
  601. --------------------------------------------
  602.  
  603.    If you do not bind the variables in a `let' statement to specific
  604. initial values, they will automatically be bound to an initial value of
  605. `nil', as in the following expression:
  606.  
  607.      (let ((birch 3)
  608.            pine
  609.            fir
  610.            (oak 'some))
  611.        (message
  612.         "Here are %d variables with %s, %s, and %s value."
  613.         birch pine fir oak))
  614.  
  615. Here, the varlist is `((birch 3) pine fir (oak 'some))'.
  616.  
  617.    If you evaluate this expression in the usual way, the following will
  618. appear in your echo area:
  619.  
  620.      "Here are 3 variables with nil, nil, and some value."
  621.  
  622. In this case, Emacs binds the symbol `birch' to the number 3, binds the
  623. symbols `pine' and `fir' to `nil', and binds the symbol `oak' to the
  624. value `some'.
  625.  
  626.    Note that in the first part of the `let', the variables `pine' and
  627. `fir' stand alone as atoms that are not surrounded by parentheses; this
  628. is because they are being bound to `nil', the empty list.  But `oak' is
  629. bound to `some' and so is a part of the list `(oak 'some)'.  Similarly,
  630. `birch' is bound to the number 3 and so is in a list with that number.
  631. (Since a number evaluates to itself, the number does not need to be
  632. quoted.  Also, the number is printed in the message using a `%d' rather
  633. than a `%s'.)  The four variables as a group are put into a list to
  634. delimit them from the body of the `let'.
  635.  
  636. 
  637. File: emacs-lisp-intro.info,  Node: if,  Next: else,  Prev: let,  Up: Writing Defuns
  638.  
  639. The `if' Special Form
  640. =====================
  641.  
  642.    A third special form, in addition to `defun' and `let', is the
  643. conditional `if'.  This form is used to instruct the computer to make
  644. decisions.  You can write function definitions without using `if', but
  645. it is used often enough, and is important enough, to be included here.
  646. It is used, for example, in the code for the function
  647. `beginning-of-buffer'.
  648.  
  649.    The basic idea behind an `if', is that "*if* a test is true, *then*
  650. an expression is evaluated."  If the test is not true, the expression
  651. is not evaluated.  For example, you might make a decision such as, "if
  652. it is warm and sunny, then go to the beach!"
  653.  
  654.    An `if' expression written in Lisp does not use the word `then'; the
  655. test and the action are the second and third elements of the list whose
  656. first element is `if'.  Nonetheless, the test part of an `if'
  657. expression is often called the "if-part" and the second argument is
  658. often called the "then-part".
  659.  
  660.    Also, when an `if' expression is written, the true-or-false-test is
  661. usually written on the same line as the symbol `if', but the action to
  662. carry out if the test is true, the "then-part", is written on the
  663. second and subsequent lines.  This makes the `if' expression easier to
  664. read.
  665.  
  666.      (if TRUE-OR-FALSE-TEST
  667.          ACTION-TO-CARRY-OUT-IF-TEST-IS-TRUE)
  668.  
  669. The true-or-false-test will be an expression that is evaluated by the
  670. Lisp interpreter.
  671.  
  672.    Here is an example that you can evaluate in the usual manner.  The
  673. test is whether the number 5 is greater than the number 4.  Since it
  674. is, the message `5 is greater than 4!' will be printed.
  675.  
  676.      (if (> 5 4)                             ; if-part
  677.          (message "5 is greater than 4!"))   ; then-part
  678.  
  679. (The function `>' tests whether its first argument is greater than its
  680. second argument and returns true if it is.)
  681.  
  682.    Of course, in actual use, the test in an `if' expression will not be
  683. fixed for all time as it is by the expression `(> 5 4)'.  Instead, at
  684. least one of the variables used in the test will be bound to a value
  685. that is not known ahead of time.  (If the value were known ahead of
  686. time, we would not need to run the test!)
  687.  
  688.    For example, the value may be bound to an argument of a function
  689. definition.  In the following function definition, the character of the
  690. animal is a value that is passed to the function.  If the value bound to
  691. `characteristic' is `fierce', then the message, `It's a tiger!' will be
  692. printed; otherwise, `nil' will be returned.
  693.  
  694.      (defun type-of-animal (characteristic)
  695.        "Print message in echo area depending on CHARACTERISTIC.
  696.      If the CHARACTERISTIC is the symbol `fierce',
  697.      then warn of a tiger."
  698.        (if (equal characteristic 'fierce)
  699.            (message "It's a tiger!")))
  700.  
  701. If you are reading this inside of GNU Emacs, you can evaluate the
  702. function definition in the usual way to install it in Emacs, and then
  703. you can evaluate the following two expressions to see the results:
  704.  
  705.      (type-of-animal 'fierce)
  706.      
  707.      (type-of-animal 'zebra)
  708.  
  709. When you evaluate `(type-of-animal 'fierce)', you will see the
  710. following message printed in the echo area: `"It's a tiger!"'; and when
  711. you evaluate `(type-of-animal 'zebra)' you will see `nil' printed in
  712. the echo area.
  713.  
  714. * Menu:
  715.  
  716. * type-of-animal in detail::    An example of an `if' expression.
  717.  
  718. 
  719. File: emacs-lisp-intro.info,  Node: type-of-animal in detail,  Prev: if,  Up: if
  720.  
  721. The `type-of-animal' Function in Detail
  722. ---------------------------------------
  723.  
  724.    Let's look at the `type-of-animal' function in detail.
  725.  
  726.    The function definition for `type-of-animal' was written by filling
  727. the slots of two templates, one for a function definition as a whole,
  728. and a second for an `if' expression.
  729.  
  730.    The template for every function that is not interactive is:
  731.  
  732.      (defun NAME-OF-FUNCTION (ARGUMENT-LIST)
  733.        "DOCUMENTATION..."
  734.        BODY...)
  735.  
  736.    The parts of the function that match this template look like this:
  737.  
  738.      (defun type-of-animal (characteristic)
  739.        "Print message in echo area depending on CHARACTERISTIC.
  740.      If the CHARACTERISTIC is the symbol `fierce',
  741.      then warn of a tiger."
  742.        BODY: THE `if' EXPRESSION)
  743.  
  744.    In this case, the name of function is `type-of-animal'; it is passed
  745. the value of one argument.  The argument list is followed by a
  746. multi-line documentation string.  The documentation string is included
  747. in the example because it is a good habit to write documentation string
  748. for every function definition.  The body of the function definition
  749. consists of the `if' expression.
  750.  
  751.    The template for an `if' expression looks like this:
  752.  
  753.      (if TRUE-OR-FALSE-TEST
  754.          ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE)
  755.  
  756.    In the `type-of-animal' function, the actual code for the `if' looks
  757. like this:
  758.  
  759.      (if (equal characteristic 'fierce)
  760.          (message "It's a tiger!")))
  761.  
  762.    Here, the true-or-false-test is the expression:
  763.  
  764.      (equal characteristic 'fierce)
  765.  
  766. In Lisp, `equal' is a function that determines whether its first
  767. argument is equal to its second argument.  The second argument is the
  768. quoted symbol `'fierce' and the first argument is the value of the
  769. symbol `characteristic'--in other words, the argument passed to this
  770. function.
  771.  
  772.    In the first exercise of `type-of-animal', the argument `fierce' is
  773. passed to `type-of-animal'.  Since `fierce' is equal to `fierce', the
  774. expression, `(equal characteristic 'fierce)', returns a value of true.
  775. When this happens, the `if' evaluates the second argument or then-part
  776. of the `if': `(message "It's tiger!")'.
  777.  
  778.    On the other hand, in the second exercise of `type-of-animal', the
  779. argument `zebra' is passed to `type-of-animal'.  `zebra' is not equal
  780. to `fierce', so the then-part is not evaluated and `nil' is returned by
  781. the `if' expression.
  782.  
  783. 
  784. File: emacs-lisp-intro.info,  Node: else,  Next: Truth & Falsehood,  Prev: if,  Up: Writing Defuns
  785.  
  786. If-then-else Expressions
  787. ========================
  788.  
  789.    An `if' expression may have an optional third argument, called the
  790. "else-part", for the case when the true-or-false-test returns false.
  791. When this happens, the second argument or then-part of the overall `if'
  792. expression is *not* evaluated, but the third or else-part *is*
  793. evaluated.  You might think of this as the cloudy day alternative for
  794. the decision `if it is warm and sunny, then go to the beach, else read
  795. a book!".
  796.  
  797.    The word "else" is not written in the Lisp code; the else-part of an
  798. `if' expression comes after the then-part.  In the written Lisp, the
  799. else-part is usually written to start on a line of its own and is
  800. indented less than the then-part:
  801.  
  802.      (if TRUE-OR-FALSE-TEST
  803.          ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE)
  804.        ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-FALSE)
  805.  
  806.    For example, the following `if' expression prints the message `4 is
  807. not greater than 5!' when you evaluate it in the usual way:
  808.  
  809.      (if (> 4 5)                             ; if-part
  810.          (message "5 is greater than 4!")    ; then-part
  811.        (message "4 is not greater than 5!")) ; else-part
  812.  
  813. Note that the different levels of indentation make it easy to
  814. distinguish the then-part from the else-part.  (GNU Emacs has several
  815. commands that automatically indent `if' expressions correctly.  *Note
  816. GNU Emacs Helps You Type Lists: Typing Lists.)
  817.  
  818.    We can extend the `type-of-animal' function to include an else-part
  819. by simply incorporating an additional part to the `if' expression.
  820.  
  821.    You can see the consequences of doing this if you evaluate the
  822. following version of the `type-of-animal' function definition to
  823. install it and then evaluate the two subsequent expressions to pass
  824. different arguments to the function.
  825.  
  826.      (defun type-of-animal (characteristic)  ; Second version.
  827.        "Print message in echo area depending on CHARACTERISTIC.
  828.      If the CHARACTERISTIC is the symbol `fierce',
  829.      then warn of a tiger;
  830.      else say it's not fierce."
  831.        (if (equal characteristic 'fierce)
  832.            (message "It's a tiger!")
  833.          (message "It's not fierce!")))
  834.  
  835.      (type-of-animal 'fierce)
  836.      
  837.      (type-of-animal 'zebra)
  838.  
  839. When you evaluate `(type-of-animal 'fierce)', you will see the
  840. following message printed in the echo area: `"It's a tiger!"'; but when
  841. you evaluate `(type-of-animal 'zebra)', you will see `"It's not
  842. fierce!"'.
  843.  
  844.    (Of course, if the CHARACTERISTIC were `ferocious', the message
  845. `"It's not fierce!"' would be printed; and it would be misleading!
  846. When you write code, you need to take into account the possibility that
  847. some such argument will be tested by the `if' and write your program
  848. accordingly.)
  849.  
  850. 
  851. File: emacs-lisp-intro.info,  Node: Truth & Falsehood,  Next: save-excursion,  Prev: else,  Up: Writing Defuns
  852.  
  853. Truth and Falsehood in Lisp
  854. ===========================
  855.  
  856.    There is an important aspect to the truth test in an `if'
  857. expression.  So far, we have spoken of `true' and `false' as values of
  858. predicates as if they were new kinds of Lisp objects.  In fact, `false'
  859. is just our old friend `nil'.  Anything else--anything at all--is
  860. `true'.
  861.  
  862.    The expression that tests for truth is interpreted as "true" if the
  863. result of evaluating it is a value that is not `nil'.  In other words,
  864. the result of the test is considered true if the value returned is a
  865. number such as 47, a string such as `"hello"', or a symbol (other than
  866. `nil') such as `flowers', or a list, or even a buffer!
  867.  
  868.    Before illustrating this, we need an explanation of `nil'.
  869.  
  870.    In Lisp, the symbol `nil' has two meanings.  First, it means the
  871. empty list.  Second, it means false and is the value returned when a
  872. true-or-false-test tests false.  `nil' can be written as an empty list,
  873. `()', or as `nil'.  As far as the Lisp interpreter is concerned, `()'
  874. and `nil' are the same.  Humans, however, tend to use `nil' for false
  875. and `()' for the empty list.
  876.  
  877.    In Lisp, any value that is not `nil'--is not the empty list--is
  878. considered true.  This means that if an evaluation returns something
  879. that is not an empty list, an `if' expression will test true.  For
  880. example, if a number is put in the slot for the test, it will be
  881. evaluated and will return itself, since that is what numbers do when
  882. evaluated.  In this case, the `if' expression will test true.  The
  883. expression tests false only when `nil', an empty list, is returned by
  884. evaluating the expression.
  885.  
  886.    You can see this by evaluating the two expressions in the following
  887. examples.
  888.  
  889.    In the first example, the number 4 is evaluated as the test in the
  890. `if' expression and returns itself; consequently, the then-part of the
  891. expression is evaluated and returned: `true' appears in the echo area.
  892. In the second example, the `nil' indicates false; consequently, the
  893. else-part of the expression is evaluated and returned: `false' appears
  894. in the echo area.
  895.  
  896.      (if 4
  897.          'true
  898.        'false)
  899.      
  900.      (if nil
  901.          'true
  902.        'false)
  903.  
  904.    Incidentally, if some other useful value is not available for a test
  905. that returns true, then the Lisp interpreter will return the symbol `t'
  906. for true.  For example, the expression `(> 5 4)' returns `t' when
  907. evaluated, as you can see by evaluating it in the usual way:
  908.  
  909.      (> 5 4)
  910.  
  911. On the other hand, this function returns `nil' if the test is false.
  912.  
  913.      (> 4 5)
  914.  
  915. 
  916. File: emacs-lisp-intro.info,  Node: save-excursion,  Next: Review,  Prev: Truth & Falsehood,  Up: Writing Defuns
  917.  
  918. `save-excursion'
  919. ================
  920.  
  921.    The `save-excursion' function is the fourth and final special form
  922. that we will discuss in this chapter.
  923.  
  924.    In Emacs Lisp programs used for editing, the `save-excursion'
  925. function is very common.  It saves the location of point and mark,
  926. executes the body of the function, and then restores point and mark to
  927. their previous positions if their locations were changed.  Its primary
  928. purpose is to keep the user from being surprised and disturbed by
  929. unexpected movement of point or mark.
  930.  
  931.    Before discussing `save-excursion', however, it may be useful first
  932. to review what point and mark are in GNU Emacs.  "Point" is the current
  933. location of the cursor.  Wherever the cursor is, that is point.  More
  934. precisely, on terminals where the cursor appears to be on top of a
  935. character, point is immediately before the character.  In Emacs Lisp,
  936. point is an integer.  The first character in a buffer is number one,
  937. the second is number two, and so on.  The function `point' returns the
  938. current position of the cursor as a number.  Each buffer has its own
  939. value for point.
  940.  
  941.    The "mark" is another position in the buffer; its value can be set
  942. with a command such as `C-<SPC>' (`set-mark-command').  If a mark has
  943. been set, you can use the command `C-x C-x' (`exchange-point-and-mark')
  944. to cause the cursor to jump to the mark and set the mark to be the
  945. previous position of point.  In addition, if you set another mark, the
  946. position of the previous mark is saved in the mark ring.  Many mark
  947. positions can be saved this way.  You can jump the cursor to a saved
  948. mark by typing `C-u C-<SPC>' one or more times.
  949.  
  950.    The part of the buffer between point and mark is called "the
  951. region".  Numerous commands work on the region, including
  952. `center-region', `count-lines-region', `kill-region', and
  953. `print-region'.
  954.  
  955.    The `save-excursion' special form saves the locations of point and
  956. mark and restores those positions after the code within the body of the
  957. special form is evaluated by the Lisp interpreter.  Thus, if point were
  958. in the beginning of a piece of text and some code moved point to the end
  959. of the buffer, the `save-excursion' would put point back to where it
  960. was before, after the expressions in the body of the function were
  961. evaluated.
  962.  
  963.    In Emacs, a function frequently moves point as part of its internal
  964. workings even though a user would not expect this.  For example,
  965. `count-lines-region' moves point.  To prevent the user from being
  966. bothered by jumps that are both unexpected and (from the user's point of
  967. view) unnecessary, `save-excursion' is often used to keep point and
  968. mark in the location expected by the user.  The use of `save-excursion'
  969. is good housekeeping.
  970.  
  971.    To make sure the house stays clean, `save-excursion' restores the
  972. values of point and mark even if something goes wrong in the code inside
  973. of it (or, to be more precise and to use the proper jargon, "in case of
  974. abnormal exit").  This feature is very helpful.
  975.  
  976.    In addition to recording the values of point and mark,
  977. `save-excursion' keeps track of the current buffer, and restores it,
  978. too.  This means you can write code that will change the buffer and
  979. have `save-excursion' switch you back to the original buffer.  This is
  980. how `save-excursion' is used in `append-to-buffer'.  (*Note The
  981. Definition of `append-to-buffer': append-to-buffer.)
  982.  
  983. * Menu:
  984.  
  985. * Template for save-excursion::  One slot to fill in.
  986.  
  987. 
  988. File: emacs-lisp-intro.info,  Node: Template for save-excursion,  Prev: save-excursion,  Up: save-excursion
  989.  
  990. Template for a `save-excursion' Expression
  991. ------------------------------------------
  992.  
  993.    The template for code using `save-excursion' is simple:
  994.  
  995.      (save-excursion
  996.        BODY...)
  997.  
  998. The body of the function is one or more expressions that will be
  999. evaluated in sequence by the Lisp interpreter.  If there is more than
  1000. one expression in the body, the value of the last one will be returned
  1001. as the value of the `save-excursion' function.  The other expressions
  1002. in the body are evaluated only for their side effects; and
  1003. `save-excursion' itself is used only for its side effect (which is
  1004. restoring the positions of point and mark).
  1005.  
  1006.    In more detail, the template for a `save-excursion' expression looks
  1007. like this:
  1008.  
  1009.      (save-excursion
  1010.        FIRST-EXPRESSION-IN-BODY
  1011.        SECOND-EXPRESSION-IN-BODY
  1012.        THIRD-EXPRESSION-IN-BODY
  1013.         ...
  1014.        LAST-EXPRESSION-IN-BODY)
  1015.  
  1016. An expression, of course, may be a symbol on its own or a list.
  1017.  
  1018.    In Emacs Lisp code, a `save-excursion' expression often occurs
  1019. within the body of a `let' expression.  It looks like this:
  1020.  
  1021.      (let VARLIST
  1022.        (save-excursion
  1023.          BODY...))
  1024.  
  1025.