diff options
| author | Robert J. Chassell | 2006-11-05 16:20:01 +0000 |
|---|---|---|
| committer | Robert J. Chassell | 2006-11-05 16:20:01 +0000 |
| commit | b006b42c592c5af5fd0b4d9f65fce67e45d10a37 (patch) | |
| tree | e2ae115e0db8b25c7a968be6a55f9af22f586aa6 | |
| parent | faefde3642efc2fd80f57db3d2c5ff66c12fc652 (diff) | |
| download | emacs-b006b42c592c5af5fd0b4d9f65fce67e45d10a37.tar.gz emacs-b006b42c592c5af5fd0b4d9f65fce67e45d10a37.zip | |
More minor changes.
Center images for TeX output.
(kill-new function): Remove indentation for sentence talking about
momentarily skipping code.
(cons & search-fwd Review): Document @code{funcall}. Document
@code{re-search-forward} with existing @code{search-forward}.
Reference chapter on regular expression searches.
(Recursion with list): Specify a more recent version as being Emacs.
(Recursion with list, Every, recursive-graph-body-print): Change
`if ... progn' expression to `when'.
(Recursive triangle function): For printing in small book, ensure
section name is not last on bottom of preceding page.
(Keep): Remove extraneous space in function definition example.
(sentence-end): Specify `in English' for glyphs that end a sentence.
Note that in GNU Emacs 22, the name refers to both a variable and a
function.
(fwd-sentence while loops): Write a function as one, not as a form
(fwd-para let): Add `which' to sentence with `parstart' and `parsep'.
(etags): Move sentences involving `find-tag' and sources. State
location of Emacs `src' directory.
(Design count-words-region): Better explain two backslashes in a row.
(Find a File): Fix grammar; add a `to' and write `to visit'. Change
`named' to `selected'.
(lengths-list-file): Remove extraneous parenthesis from reference.
(lengths-list-many-files): Explain `expand-file-name' better.
(Files List): Rephrase sentence regarding Lisp sources directory
| -rw-r--r-- | lispintro/ChangeLog | 29 | ||||
| -rw-r--r-- | lispintro/emacs-lisp-intro.texi | 152 |
2 files changed, 109 insertions, 72 deletions
diff --git a/lispintro/ChangeLog b/lispintro/ChangeLog index 84d6cee96da..4784cfde92b 100644 --- a/lispintro/ChangeLog +++ b/lispintro/ChangeLog | |||
| @@ -1,3 +1,32 @@ | |||
| 1 | 2006-11-05 Robert J. Chassell <bob@rattlesnake.com> | ||
| 2 | |||
| 3 | * emacs-lisp-intro.texi: More minor changes. | ||
| 4 | Center images for TeX output. | ||
| 5 | (kill-new function): Remove indentation for sentence talking about | ||
| 6 | momentarily skipping code. | ||
| 7 | (cons & search-fwd Review): Document @code{funcall}. Document | ||
| 8 | @code{re-search-forward} with existing @code{search-forward}. | ||
| 9 | Reference chapter on regular expression searches. | ||
| 10 | (Recursion with list): Specify a more recent version as being Emacs. | ||
| 11 | (Recursion with list, Every, recursive-graph-body-print): Change | ||
| 12 | `if ... progn' expression to `when'. | ||
| 13 | (Recursive triangle function): For printing in small book, ensure | ||
| 14 | section name is not last on bottom of preceding page. | ||
| 15 | (Keep): Remove extraneous space in function definition example. | ||
| 16 | (sentence-end): Specify `in English' for glyphs that end a sentence. | ||
| 17 | Note that in GNU Emacs 22, the name refers to both a variable and a | ||
| 18 | function. | ||
| 19 | (fwd-sentence while loops): Write a function as one, not as a form | ||
| 20 | (fwd-para let): Add `which' to sentence with `parstart' and `parsep'. | ||
| 21 | (etags): Move sentences involving `find-tag' and sources. State | ||
| 22 | location of Emacs `src' directory. | ||
| 23 | (Design count-words-region): Better explain two backslashes in a row. | ||
| 24 | (Find a File): Fix grammar; add a `to' and write `to visit'. Change | ||
| 25 | `named' to `selected'. | ||
| 26 | (lengths-list-file): Remove extraneous parenthesis from reference. | ||
| 27 | (lengths-list-many-files): Explain `expand-file-name' better. | ||
| 28 | (Files List): Rephrase sentence regarding Lisp sources directory | ||
| 29 | |||
| 1 | 2006-11-04 Robert J. Chassell <bob@rattlesnake.com> | 30 | 2006-11-04 Robert J. Chassell <bob@rattlesnake.com> |
| 2 | 31 | ||
| 3 | * emacs-lisp-intro.texi: Replace 22.0.100 with 22.1.100. | 32 | * emacs-lisp-intro.texi: Replace 22.0.100 with 22.1.100. |
diff --git a/lispintro/emacs-lisp-intro.texi b/lispintro/emacs-lisp-intro.texi index 3d954f6f942..621dd038693 100644 --- a/lispintro/emacs-lisp-intro.texi +++ b/lispintro/emacs-lisp-intro.texi | |||
| @@ -8800,6 +8800,7 @@ Make STRING the latest kill in the kill ring. | |||
| 8800 | @noindent | 8800 | @noindent |
| 8801 | Let's skip over the rest of the documentation for the moment. | 8801 | Let's skip over the rest of the documentation for the moment. |
| 8802 | 8802 | ||
| 8803 | @noindent | ||
| 8803 | Also, let's skip over the initial @code{if} expression and those lines | 8804 | Also, let's skip over the initial @code{if} expression and those lines |
| 8804 | of code involving @code{menu-bar-update-yank-menu}. We will explain | 8805 | of code involving @code{menu-bar-update-yank-menu}. We will explain |
| 8805 | them below. | 8806 | them below. |
| @@ -9486,6 +9487,10 @@ For example: | |||
| 9486 | @end group | 9487 | @end group |
| 9487 | @end smallexample | 9488 | @end smallexample |
| 9488 | 9489 | ||
| 9490 | @item funcall | ||
| 9491 | @code{funcall} evaluates its first argument as a function. It passes | ||
| 9492 | its remaining arguments to its first argument. | ||
| 9493 | |||
| 9489 | @item nthcdr | 9494 | @item nthcdr |
| 9490 | Return the result of taking @sc{cdr} `n' times on a list. | 9495 | Return the result of taking @sc{cdr} `n' times on a list. |
| 9491 | @iftex | 9496 | @iftex |
| @@ -9550,15 +9555,19 @@ Record whatever narrowing is in effect in the current buffer, if any, | |||
| 9550 | and restore that narrowing after evaluating the arguments. | 9555 | and restore that narrowing after evaluating the arguments. |
| 9551 | 9556 | ||
| 9552 | @item search-forward | 9557 | @item search-forward |
| 9553 | Search for a string, and if the string is found, move point. | 9558 | Search for a string, and if the string is found, move point. With a |
| 9559 | regular expression, use the similar @code{re-search-forward}. | ||
| 9560 | (@xref{Regexp Search, , Regular Expression Searches}, for an | ||
| 9561 | explanation of regular expression patterns and searches.) | ||
| 9554 | 9562 | ||
| 9555 | @need 1250 | 9563 | @need 1250 |
| 9556 | @noindent | 9564 | @noindent |
| 9557 | Takes four arguments: | 9565 | @code{search-forward} and @code{re-search-forward} take four |
| 9566 | arguments: | ||
| 9558 | 9567 | ||
| 9559 | @enumerate | 9568 | @enumerate |
| 9560 | @item | 9569 | @item |
| 9561 | The string to search for. | 9570 | The string or regular expression to search for. |
| 9562 | 9571 | ||
| 9563 | @item | 9572 | @item |
| 9564 | Optionally, the limit of the search. | 9573 | Optionally, the limit of the search. |
| @@ -9665,7 +9674,7 @@ This sounds more complicated than it is and is easier seen in a diagram: | |||
| 9665 | @ifset print-postscript-figures | 9674 | @ifset print-postscript-figures |
| 9666 | @sp 1 | 9675 | @sp 1 |
| 9667 | @tex | 9676 | @tex |
| 9668 | @image{cons-1} | 9677 | @center @image{cons-1} |
| 9669 | %%%% old method of including an image | 9678 | %%%% old method of including an image |
| 9670 | % \input /usr/local/lib/tex/inputs/psfig.tex | 9679 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 9671 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-1.eps}} | 9680 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-1.eps}} |
| @@ -9728,7 +9737,7 @@ bouquet | |||
| 9728 | @ifset print-postscript-figures | 9737 | @ifset print-postscript-figures |
| 9729 | @sp 1 | 9738 | @sp 1 |
| 9730 | @tex | 9739 | @tex |
| 9731 | @image{cons-2} | 9740 | @center @image{cons-2} |
| 9732 | %%%% old method of including an image | 9741 | %%%% old method of including an image |
| 9733 | % \input /usr/local/lib/tex/inputs/psfig.tex | 9742 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 9734 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-2.eps}} | 9743 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-2.eps}} |
| @@ -9777,7 +9786,7 @@ bouquet | |||
| 9777 | @ifset print-postscript-figures | 9786 | @ifset print-postscript-figures |
| 9778 | @sp 1 | 9787 | @sp 1 |
| 9779 | @tex | 9788 | @tex |
| 9780 | @image{cons-2a} | 9789 | @center @image{cons-2a} |
| 9781 | %%%% old method of including an image | 9790 | %%%% old method of including an image |
| 9782 | % \input /usr/local/lib/tex/inputs/psfig.tex | 9791 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 9783 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-2a.eps}} | 9792 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-2a.eps}} |
| @@ -9844,7 +9853,7 @@ bouquet flowers | |||
| 9844 | @ifset print-postscript-figures | 9853 | @ifset print-postscript-figures |
| 9845 | @sp 1 | 9854 | @sp 1 |
| 9846 | @tex | 9855 | @tex |
| 9847 | @image{cons-3} | 9856 | @center @image{cons-3} |
| 9848 | %%%% old method of including an image | 9857 | %%%% old method of including an image |
| 9849 | % \input /usr/local/lib/tex/inputs/psfig.tex | 9858 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 9850 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-3.eps}} | 9859 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-3.eps}} |
| @@ -9916,7 +9925,7 @@ bouquet flowers | |||
| 9916 | @ifset print-postscript-figures | 9925 | @ifset print-postscript-figures |
| 9917 | @sp 1 | 9926 | @sp 1 |
| 9918 | @tex | 9927 | @tex |
| 9919 | @image{cons-4} | 9928 | @center @image{cons-4} |
| 9920 | %%%% old method of including an image | 9929 | %%%% old method of including an image |
| 9921 | % \input /usr/local/lib/tex/inputs/psfig.tex | 9930 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 9922 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-4.eps}} | 9931 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-4.eps}} |
| @@ -10033,7 +10042,7 @@ Here is a fanciful representation: | |||
| 10033 | @ifset print-postscript-figures | 10042 | @ifset print-postscript-figures |
| 10034 | @sp 1 | 10043 | @sp 1 |
| 10035 | @tex | 10044 | @tex |
| 10036 | @image{drawers} | 10045 | @center @image{drawers} |
| 10037 | %%%% old method of including an image | 10046 | %%%% old method of including an image |
| 10038 | % \input /usr/local/lib/tex/inputs/psfig.tex | 10047 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 10039 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/drawers.eps}} | 10048 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/drawers.eps}} |
| @@ -10214,7 +10223,7 @@ kill-ring kill-ring-yank-pointer | |||
| 10214 | @ifset print-postscript-figures | 10223 | @ifset print-postscript-figures |
| 10215 | @sp 1 | 10224 | @sp 1 |
| 10216 | @tex | 10225 | @tex |
| 10217 | @image{cons-5} | 10226 | @center @image{cons-5} |
| 10218 | %%%% old method of including an image | 10227 | %%%% old method of including an image |
| 10219 | % \input /usr/local/lib/tex/inputs/psfig.tex | 10228 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 10220 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-5.eps}} | 10229 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/cons-5.eps}} |
| @@ -11446,7 +11455,7 @@ Also, place your cursor immediately after the last closing parenthesis | |||
| 11446 | of the @code{print-elements-recursively} function, before the comment. | 11455 | of the @code{print-elements-recursively} function, before the comment. |
| 11447 | Otherwise, the Lisp interpreter will try to evaluate the comment. | 11456 | Otherwise, the Lisp interpreter will try to evaluate the comment. |
| 11448 | 11457 | ||
| 11449 | If you are using a more recent version, you can evaluate this | 11458 | If you are using a more recent version of Emacs, you can evaluate this |
| 11450 | expression directly in Info. | 11459 | expression directly in Info. |
| 11451 | 11460 | ||
| 11452 | @findex print-elements-recursively | 11461 | @findex print-elements-recursively |
| @@ -11457,11 +11466,10 @@ expression directly in Info. | |||
| 11457 | (defun print-elements-recursively (list) | 11466 | (defun print-elements-recursively (list) |
| 11458 | "Print each element of LIST on a line of its own. | 11467 | "Print each element of LIST on a line of its own. |
| 11459 | Uses recursion." | 11468 | Uses recursion." |
| 11460 | (if list ; @r{do-again-test} | 11469 | (when list ; @r{do-again-test} |
| 11461 | (progn | ||
| 11462 | (print (car list)) ; @r{body} | 11470 | (print (car list)) ; @r{body} |
| 11463 | (print-elements-recursively ; @r{recursive call} | 11471 | (print-elements-recursively ; @r{recursive call} |
| 11464 | (cdr list))))) ; @r{next-step-expression} | 11472 | (cdr list)))) ; @r{next-step-expression} |
| 11465 | 11473 | ||
| 11466 | (print-elements-recursively animals) | 11474 | (print-elements-recursively animals) |
| 11467 | @end group | 11475 | @end group |
| @@ -11483,7 +11491,7 @@ Put in yet another way, if the list is not empty, the first robot | |||
| 11483 | assemblies a second robot and tells it what to do; the second robot is | 11491 | assemblies a second robot and tells it what to do; the second robot is |
| 11484 | a different individual from the first, but is the same model. | 11492 | a different individual from the first, but is the same model. |
| 11485 | 11493 | ||
| 11486 | When the second evaluation occurs, the @code{if} expression is | 11494 | When the second evaluation occurs, the @code{when} expression is |
| 11487 | evaluated and if true, prints the first element of the list it | 11495 | evaluated and if true, prints the first element of the list it |
| 11488 | receives as its argument (which is the second element of the original | 11496 | receives as its argument (which is the second element of the original |
| 11489 | list). Then the function `calls itself' with the @sc{cdr} of the list | 11497 | list). Then the function `calls itself' with the @sc{cdr} of the list |
| @@ -11502,7 +11510,7 @@ works on a shorter list. | |||
| 11502 | Eventually, the function invokes itself on an empty list. It creates | 11510 | Eventually, the function invokes itself on an empty list. It creates |
| 11503 | a new instance whose argument is @code{nil}. The conditional expression | 11511 | a new instance whose argument is @code{nil}. The conditional expression |
| 11504 | tests the value of @code{list}. Since the value of @code{list} is | 11512 | tests the value of @code{list}. Since the value of @code{list} is |
| 11505 | @code{nil}, the @code{if} expression tests false so the then-part is | 11513 | @code{nil}, the @code{when} expression tests false so the then-part is |
| 11506 | not evaluated. The function as a whole then returns @code{nil}. | 11514 | not evaluated. The function as a whole then returns @code{nil}. |
| 11507 | 11515 | ||
| 11508 | @need 1200 | 11516 | @need 1200 |
| @@ -11522,6 +11530,7 @@ nil | |||
| 11522 | @end group | 11530 | @end group |
| 11523 | @end smallexample | 11531 | @end smallexample |
| 11524 | 11532 | ||
| 11533 | @need 2000 | ||
| 11525 | @node Recursive triangle function, Recursion with cond, Recursion with list, Recursion | 11534 | @node Recursive triangle function, Recursion with cond, Recursion with list, Recursion |
| 11526 | @comment node-name, next, previous, up | 11535 | @comment node-name, next, previous, up |
| 11527 | @subsection Recursion in Place of a Counter | 11536 | @subsection Recursion in Place of a Counter |
| @@ -11881,11 +11890,10 @@ The @code{print-elements-recursively} function looks like this: | |||
| 11881 | (defun print-elements-recursively (list) | 11890 | (defun print-elements-recursively (list) |
| 11882 | "Print each element of LIST on a line of its own. | 11891 | "Print each element of LIST on a line of its own. |
| 11883 | Uses recursion." | 11892 | Uses recursion." |
| 11884 | (if list ; @r{do-again-test} | 11893 | (when list ; @r{do-again-test} |
| 11885 | (progn | ||
| 11886 | (print (car list)) ; @r{body} | 11894 | (print (car list)) ; @r{body} |
| 11887 | (print-elements-recursively ; @r{recursive call} | 11895 | (print-elements-recursively ; @r{recursive call} |
| 11888 | (cdr list))))) ; @r{next-step-expression} | 11896 | (cdr list)))) ; @r{next-step-expression} |
| 11889 | 11897 | ||
| 11890 | (print-elements-recursively animals) | 11898 | (print-elements-recursively animals) |
| 11891 | @end group | 11899 | @end group |
| @@ -11896,9 +11904,9 @@ The pattern for @code{print-elements-recursively} is: | |||
| 11896 | 11904 | ||
| 11897 | @itemize @bullet | 11905 | @itemize @bullet |
| 11898 | @item | 11906 | @item |
| 11899 | If the list be empty, do nothing. | 11907 | When the list is empty, do nothing. |
| 11900 | @item | 11908 | @item |
| 11901 | But if the list has at least one element, | 11909 | But when the list has at least one element, |
| 11902 | @itemize @minus | 11910 | @itemize @minus |
| 11903 | @item | 11911 | @item |
| 11904 | act on the beginning of the list (the @sc{car} of the list), | 11912 | act on the beginning of the list (the @sc{car} of the list), |
| @@ -12017,7 +12025,7 @@ Here is an example that uses @code{cond}: | |||
| 12017 | 12025 | ||
| 12018 | ;; Third do-again-test: when to skip element; | 12026 | ;; Third do-again-test: when to skip element; |
| 12019 | ;; recursively call shorter list with next-step expression | 12027 | ;; recursively call shorter list with next-step expression |
| 12020 | (t (keep-three-letter-words (cdr word-list))))) | 12028 | (t (keep-three-letter-words (cdr word-list))))) |
| 12021 | @end group | 12029 | @end group |
| 12022 | 12030 | ||
| 12023 | @group | 12031 | @group |
| @@ -12379,9 +12387,9 @@ The symbol @code{sentence-end} is bound to the pattern that marks the | |||
| 12379 | end of a sentence. What should this regular expression be? | 12387 | end of a sentence. What should this regular expression be? |
| 12380 | 12388 | ||
| 12381 | Clearly, a sentence may be ended by a period, a question mark, or an | 12389 | Clearly, a sentence may be ended by a period, a question mark, or an |
| 12382 | exclamation mark. Indeed, only clauses that end with one of those three | 12390 | exclamation mark. Indeed, in English, only clauses that end with one |
| 12383 | characters should be considered the end of a sentence. This means that | 12391 | of those three characters should be considered the end of a sentence. |
| 12384 | the pattern should include the character set: | 12392 | This means that the pattern should include the character set: |
| 12385 | 12393 | ||
| 12386 | @smallexample | 12394 | @smallexample |
| 12387 | [.?!] | 12395 | [.?!] |
| @@ -12466,9 +12474,11 @@ sentence-end | |||
| 12466 | 12474 | ||
| 12467 | @noindent | 12475 | @noindent |
| 12468 | (Well, not in GNU Emacs 22; that is because of an effort to make the | 12476 | (Well, not in GNU Emacs 22; that is because of an effort to make the |
| 12469 | process simpler. When its value is @code{nil}, then use the value | 12477 | process simpler and to handle more glyphs and languages. When the |
| 12470 | defined by the function @code{sentence-end}, and that returns a value | 12478 | value of @code{sentence-end} is @code{nil}, then use the value defined |
| 12471 | constructed from the variables @code{sentence-end-base}, | 12479 | by the function @code{sentence-end}. (Here is a use of the difference |
| 12480 | between a value and a function in Emacs Lisp.) The function returns a | ||
| 12481 | value constructed from the variables @code{sentence-end-base}, | ||
| 12472 | @code{sentence-end-double-space}, @code{sentence-end-without-period}, | 12482 | @code{sentence-end-double-space}, @code{sentence-end-without-period}, |
| 12473 | and @code{sentence-end-without-space}. The critical variable is | 12483 | and @code{sentence-end-without-space}. The critical variable is |
| 12474 | @code{sentence-end-base}; its global value is similar to the one | 12484 | @code{sentence-end-base}; its global value is similar to the one |
| @@ -12817,7 +12827,7 @@ end of the paragraph, @code{(point)} returns the value of point, and then | |||
| 12817 | @code{save-excursion} restores point to its original position. Thus, | 12827 | @code{save-excursion} restores point to its original position. Thus, |
| 12818 | the @code{let} binds @code{par-end} to the value returned by the | 12828 | the @code{let} binds @code{par-end} to the value returned by the |
| 12819 | @code{save-excursion} expression, which is the position of the end of | 12829 | @code{save-excursion} expression, which is the position of the end of |
| 12820 | the paragraph. (The @code{(end-of-paragraph-text)} function uses | 12830 | the paragraph. (The @code{end-of-paragraph-text} function uses |
| 12821 | @code{forward-paragraph}, which we will discuss shortly.) | 12831 | @code{forward-paragraph}, which we will discuss shortly.) |
| 12822 | 12832 | ||
| 12823 | @need 1200 | 12833 | @need 1200 |
| @@ -13210,8 +13220,8 @@ Otherwise, the variable will be set to @code{nil}. | |||
| 13210 | 13220 | ||
| 13211 | The next two local variables in the @code{let*} expression are | 13221 | The next two local variables in the @code{let*} expression are |
| 13212 | designed to remove instances of @samp{^} from @code{parstart} and | 13222 | designed to remove instances of @samp{^} from @code{parstart} and |
| 13213 | @code{parsep}, the local variables indicate the paragraph start and | 13223 | @code{parsep}, the local variables which indicate the paragraph start |
| 13214 | the paragraph separator. The next expression sets @code{parsep} | 13224 | and the paragraph separator. The next expression sets @code{parsep} |
| 13215 | again. That is to handle fill prefixes. | 13225 | again. That is to handle fill prefixes. |
| 13216 | 13226 | ||
| 13217 | This is the setting that requires the definition call @code{let*} | 13227 | This is the setting that requires the definition call @code{let*} |
| @@ -13524,11 +13534,14 @@ a car with his eyes shut!) | |||
| 13524 | @cindex @file{TAGS} file, create own | 13534 | @cindex @file{TAGS} file, create own |
| 13525 | 13535 | ||
| 13526 | Besides @kbd{C-h f} (@code{describe-function}), another way to see the | 13536 | Besides @kbd{C-h f} (@code{describe-function}), another way to see the |
| 13527 | source of a function is to type @kbd{M-.} (@code{find-tag}) and the | 13537 | source of a function is to type @kbd{M-.} (@code{find-tag}) and the |
| 13528 | name of the function when prompted for it. This is a good habit to | 13538 | name of the function when prompted for it. This is a good habit to |
| 13529 | get into. This will take you directly to the source. If the | 13539 | get into. The @kbd{M-.} (@code{find-tag}) command takes you directly |
| 13530 | @code{find-tag} function first asks you for the name of a @file{TAGS} | 13540 | to the source for a function, variable, or node. The function depends |
| 13531 | table, give it the name of a @file{TAGS} file such as | 13541 | on tags tables to tell it where to go. |
| 13542 | |||
| 13543 | If the @code{find-tag} function first asks you for the name of a | ||
| 13544 | @file{TAGS} table, give it the name of a @file{TAGS} file such as | ||
| 13532 | @file{/usr/local/src/emacs/src/TAGS}. (The exact path to your | 13545 | @file{/usr/local/src/emacs/src/TAGS}. (The exact path to your |
| 13533 | @file{TAGS} file depends on how your copy of Emacs was installed. I | 13546 | @file{TAGS} file depends on how your copy of Emacs was installed. I |
| 13534 | just told you the location that provides both my C and my Emacs Lisp | 13547 | just told you the location that provides both my C and my Emacs Lisp |
| @@ -13537,10 +13550,6 @@ sources.) | |||
| 13537 | You can also create your own @file{TAGS} file for directories that | 13550 | You can also create your own @file{TAGS} file for directories that |
| 13538 | lack one. | 13551 | lack one. |
| 13539 | 13552 | ||
| 13540 | The @kbd{M-.} (@code{find-tag}) command takes you directly to the | ||
| 13541 | source for a function, variable, node, or other source. The function | ||
| 13542 | depends on tags tables to tell it where to go. | ||
| 13543 | |||
| 13544 | You often need to build and install tags tables yourself. They are | 13553 | You often need to build and install tags tables yourself. They are |
| 13545 | not built automatically. A tags table is called a @file{TAGS} file; | 13554 | not built automatically. A tags table is called a @file{TAGS} file; |
| 13546 | the name is in upper case letters. | 13555 | the name is in upper case letters. |
| @@ -13562,7 +13571,7 @@ M-x compile RET etags *.el RET | |||
| 13562 | @end smallexample | 13571 | @end smallexample |
| 13563 | 13572 | ||
| 13564 | @noindent | 13573 | @noindent |
| 13565 | to create a @file{TAGS} file. | 13574 | to create a @file{TAGS} file for Emacs Lisp. |
| 13566 | 13575 | ||
| 13567 | For example, if you have a large number of files in your | 13576 | For example, if you have a large number of files in your |
| 13568 | @file{~/emacs} directory, as I do---I have 137 @file{.el} files in it, | 13577 | @file{~/emacs} directory, as I do---I have 137 @file{.el} files in it, |
| @@ -13570,11 +13579,10 @@ of which I load 12---you can create a @file{TAGS} file for the Emacs | |||
| 13570 | Lisp files in that directory. | 13579 | Lisp files in that directory. |
| 13571 | 13580 | ||
| 13572 | @need 1250 | 13581 | @need 1250 |
| 13573 | The @code{etags} program takes all the | 13582 | The @code{etags} program takes all the usual shell `wildcards'. For |
| 13574 | usual shell `wildcards'. For example, if you have two directories for | 13583 | example, if you have two directories for which you want a single |
| 13575 | which you want a single @file{TAGS file}, type | 13584 | @file{TAGS} file, type @w{@code{etags *.el ../elisp/*.el}}, where |
| 13576 | @w{@code{etags *.el ../elisp/*.el}}, | 13585 | @file{../elisp/} is the second directory: |
| 13577 | where @file{../elisp/} is the second directory: | ||
| 13578 | 13586 | ||
| 13579 | @smallexample | 13587 | @smallexample |
| 13580 | M-x compile RET etags *.el ../elisp/*.el RET | 13588 | M-x compile RET etags *.el ../elisp/*.el RET |
| @@ -13592,10 +13600,11 @@ to see a list of the options accepted by @code{etags} as well as a | |||
| 13592 | list of supported languages. | 13600 | list of supported languages. |
| 13593 | 13601 | ||
| 13594 | The @code{etags} program handles more than 20 languages, including | 13602 | The @code{etags} program handles more than 20 languages, including |
| 13595 | Emacs Lisp, Common Lisp, Scheme, C, C++, Ada, Fortran, Java, LaTeX, | 13603 | Emacs Lisp, Common Lisp, Scheme, C, C++, Ada, Fortran, HTML, Java, |
| 13596 | Pascal, Perl, Python, Texinfo, makefiles, and most assemblers. The | 13604 | LaTeX, Pascal, Perl, Postscript, Python, TeX, Texinfo, makefiles, and |
| 13597 | program has no switches for specifying the language; it recognizes the | 13605 | most assemblers. The program has no switches for specifying the |
| 13598 | language in an input file according to its file name and contents. | 13606 | language; it recognizes the language in an input file according to its |
| 13607 | file name and contents. | ||
| 13599 | 13608 | ||
| 13600 | @file{etags} is very helpful when you are writing code yourself and | 13609 | @file{etags} is very helpful when you are writing code yourself and |
| 13601 | want to refer back to functions you have already written. Just run | 13610 | want to refer back to functions you have already written. Just run |
| @@ -13625,8 +13634,8 @@ visit-tags-table}. | |||
| 13625 | The GNU Emacs sources come with a @file{Makefile} that contains a | 13634 | The GNU Emacs sources come with a @file{Makefile} that contains a |
| 13626 | sophisticated @code{etags} command that creates, collects, and merges | 13635 | sophisticated @code{etags} command that creates, collects, and merges |
| 13627 | tags tables from all over the Emacs sources and puts the information | 13636 | tags tables from all over the Emacs sources and puts the information |
| 13628 | into one @file{TAGS} file in the @file{src/} directory below the top | 13637 | into one @file{TAGS} file in the @file{src/} directory. (The |
| 13629 | level of your Emacs source directory. | 13638 | @file{src/} directory is below the top level of your Emacs directory.) |
| 13630 | 13639 | ||
| 13631 | @need 1250 | 13640 | @need 1250 |
| 13632 | To build this @file{TAGS} file, go to the top level of your Emacs | 13641 | To build this @file{TAGS} file, go to the top level of your Emacs |
| @@ -13921,9 +13930,9 @@ single backslash has special meaning to the Emacs Lisp interpreter. | |||
| 13921 | It indicates that the following character is interpreted differently | 13930 | It indicates that the following character is interpreted differently |
| 13922 | than usual. For example, the two characters, @samp{\n}, stand for | 13931 | than usual. For example, the two characters, @samp{\n}, stand for |
| 13923 | @samp{newline}, rather than for a backslash followed by @samp{n}. Two | 13932 | @samp{newline}, rather than for a backslash followed by @samp{n}. Two |
| 13924 | backslashes in a row stand for an ordinary, `unspecial' backslash, | 13933 | backslashes in a row stand for an ordinary, `unspecial' backslash, so |
| 13925 | which in this case is followed by a letter, the combination of which | 13934 | Emacs Lisp interpreter ends of seeing a single backslash followed by a |
| 13926 | is important to @code{re-search-forward}.) | 13935 | letter. So it discovers the letter is special.) |
| 13927 | 13936 | ||
| 13928 | We need a counter to count how many words there are; this variable | 13937 | We need a counter to count how many words there are; this variable |
| 13929 | must first be set to 0 and then incremented each time Emacs goes | 13938 | must first be set to 0 and then incremented each time Emacs goes |
| @@ -15115,7 +15124,7 @@ creating one if none already exists." | |||
| 15115 | 15124 | ||
| 15116 | @noindent | 15125 | @noindent |
| 15117 | (The most recent version of the @code{find-file} function definition | 15126 | (The most recent version of the @code{find-file} function definition |
| 15118 | permits you to specify optional wildcards visit multiple files; that | 15127 | permits you to specify optional wildcards to visit multiple files; that |
| 15119 | makes the definition more complex and we will not discuss it here, | 15128 | makes the definition more complex and we will not discuss it here, |
| 15120 | since it is not relevant. You can see its source using either | 15129 | since it is not relevant. You can see its source using either |
| 15121 | @kbd{M-.} (@code{find-tag}) or @kbd{C-h f} (@code{describe-function}).) | 15130 | @kbd{M-.} (@code{find-tag}) or @kbd{C-h f} (@code{describe-function}).) |
| @@ -15158,7 +15167,7 @@ suppress warning messages. These optional arguments are irrelevant.) | |||
| 15158 | 15167 | ||
| 15159 | However, the @code{find-file-noselect} function does not select the | 15168 | However, the @code{find-file-noselect} function does not select the |
| 15160 | buffer in which it puts the file. Emacs does not switch its attention | 15169 | buffer in which it puts the file. Emacs does not switch its attention |
| 15161 | (or yours if you are using @code{find-file-noselect}) to the named | 15170 | (or yours if you are using @code{find-file-noselect}) to the selected |
| 15162 | buffer. That is what @code{switch-to-buffer} does: it switches the | 15171 | buffer. That is what @code{switch-to-buffer} does: it switches the |
| 15163 | buffer to which Emacs attention is directed; and it switches the | 15172 | buffer to which Emacs attention is directed; and it switches the |
| 15164 | buffer displayed in the window to the new buffer. We have discussed | 15173 | buffer displayed in the window to the new buffer. We have discussed |
| @@ -15235,10 +15244,10 @@ and symbols in a function definition should change the buffer. | |||
| 15235 | Besides, the buffer is not going to be saved, even if it were changed. | 15244 | Besides, the buffer is not going to be saved, even if it were changed. |
| 15236 | This line is entirely the consequence of great, perhaps excessive, | 15245 | This line is entirely the consequence of great, perhaps excessive, |
| 15237 | caution. The reason for the caution is that this function and those | 15246 | caution. The reason for the caution is that this function and those |
| 15238 | it calls work on the sources for Emacs and it is very inconvenient if | 15247 | it calls work on the sources for Emacs and it is inconvenient if they |
| 15239 | they are inadvertently modified. It goes without saying that I did | 15248 | are inadvertently modified. It goes without saying that I did not |
| 15240 | not realize a need for this line until an experiment went awry and | 15249 | realize a need for this line until an experiment went awry and started |
| 15241 | started to modify my Emacs source files @dots{} | 15250 | to modify my Emacs source files @dots{} |
| 15242 | 15251 | ||
| 15243 | Next comes a call to widen the buffer if it is narrowed. This | 15252 | Next comes a call to widen the buffer if it is narrowed. This |
| 15244 | function is usually not needed---Emacs creates a fresh buffer if none | 15253 | function is usually not needed---Emacs creates a fresh buffer if none |
| @@ -15290,7 +15299,7 @@ version, you may have to evaluate the following: | |||
| 15290 | @end smallexample | 15299 | @end smallexample |
| 15291 | 15300 | ||
| 15292 | @noindent | 15301 | @noindent |
| 15293 | (@xref{defcustom, , Specifying Variables using @code{defcustom}}.) | 15302 | (@xref{defcustom, , Specifying Variables using @code{defcustom}}. |
| 15294 | Then evaluate the @code{lengths-list-file} expression.) | 15303 | Then evaluate the @code{lengths-list-file} expression.) |
| 15295 | 15304 | ||
| 15296 | @need 1200 | 15305 | @need 1200 |
| @@ -15402,8 +15411,8 @@ These considerations lead us directly to the function itself: | |||
| 15402 | @end smallexample | 15411 | @end smallexample |
| 15403 | 15412 | ||
| 15404 | @code{expand-file-name} is a built-in function that converts a file | 15413 | @code{expand-file-name} is a built-in function that converts a file |
| 15405 | name to the absolute, long, path name form of the directory in which | 15414 | name to the absolute, long, path name form. The function employs the |
| 15406 | the function is called. | 15415 | name of the directory in which the function is called. |
| 15407 | 15416 | ||
| 15408 | @c !!! 22.1.100 lisp sources location here | 15417 | @c !!! 22.1.100 lisp sources location here |
| 15409 | @need 1500 | 15418 | @need 1500 |
| @@ -15895,8 +15904,8 @@ Thus, on my system, | |||
| 15895 | @end smallexample | 15904 | @end smallexample |
| 15896 | 15905 | ||
| 15897 | @noindent | 15906 | @noindent |
| 15898 | tells me that my Lisp sources directory contains 1031 @samp{.el} | 15907 | tells me that in and below my Lisp sources directory are 1031 |
| 15899 | files. | 15908 | @samp{.el} files. |
| 15900 | 15909 | ||
| 15901 | @code{files-in-below-directory} returns a list in reverse alphabetical | 15910 | @code{files-in-below-directory} returns a list in reverse alphabetical |
| 15902 | order. An expression to sort the list in alphabetical order looks | 15911 | order. An expression to sort the list in alphabetical order looks |
| @@ -16821,7 +16830,7 @@ The numbers-list consists of the Y-axis values." | |||
| 16821 | 16830 | ||
| 16822 | The recursive function is a little more difficult. It has four parts: | 16831 | The recursive function is a little more difficult. It has four parts: |
| 16823 | the `do-again-test', the printing code, the recursive call, and the | 16832 | the `do-again-test', the printing code, the recursive call, and the |
| 16824 | `next-step-expression'. The `do-again-test' is an @code{if} | 16833 | `next-step-expression'. The `do-again-test' is a @code{when} |
| 16825 | expression that determines whether the @code{numbers-list} contains | 16834 | expression that determines whether the @code{numbers-list} contains |
| 16826 | any remaining elements; if it does, the function prints one column of | 16835 | any remaining elements; if it does, the function prints one column of |
| 16827 | the graph using the printing code and calls itself again. The | 16836 | the graph using the printing code and calls itself again. The |
| @@ -16838,8 +16847,7 @@ Used within recursive-graph-body-print function." | |||
| 16838 | @end group | 16847 | @end group |
| 16839 | 16848 | ||
| 16840 | @group | 16849 | @group |
| 16841 | (if numbers-list | 16850 | (when numbers-list |
| 16842 | (progn | ||
| 16843 | (setq from-position (point)) | 16851 | (setq from-position (point)) |
| 16844 | (insert-rectangle | 16852 | (insert-rectangle |
| 16845 | (column-of-graph height (car numbers-list))) | 16853 | (column-of-graph height (car numbers-list))) |
| @@ -16849,7 +16857,7 @@ Used within recursive-graph-body-print function." | |||
| 16849 | (forward-char symbol-width) | 16857 | (forward-char symbol-width) |
| 16850 | (sit-for 0) ; @r{Draw graph column by column.} | 16858 | (sit-for 0) ; @r{Draw graph column by column.} |
| 16851 | (recursive-graph-body-print-internal | 16859 | (recursive-graph-body-print-internal |
| 16852 | (cdr numbers-list) height symbol-width)))) | 16860 | (cdr numbers-list) height symbol-width))) |
| 16853 | @end group | 16861 | @end group |
| 16854 | @end smallexample | 16862 | @end smallexample |
| 16855 | 16863 | ||
| @@ -21039,7 +21047,7 @@ If we want to multiply 3 by 7, we can write: | |||
| 21039 | @ifset print-postscript-figures | 21047 | @ifset print-postscript-figures |
| 21040 | @sp 1 | 21048 | @sp 1 |
| 21041 | @tex | 21049 | @tex |
| 21042 | @image{lambda-1} | 21050 | @center @image{lambda-1} |
| 21043 | %%%% old method of including an image | 21051 | %%%% old method of including an image |
| 21044 | % \input /usr/local/lib/tex/inputs/psfig.tex | 21052 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 21045 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/lambda-1.eps}} | 21053 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/lambda-1.eps}} |
| @@ -21081,7 +21089,7 @@ Similarly, we can write: | |||
| 21081 | @ifset print-postscript-figures | 21089 | @ifset print-postscript-figures |
| 21082 | @sp 1 | 21090 | @sp 1 |
| 21083 | @tex | 21091 | @tex |
| 21084 | @image{lambda-2} | 21092 | @center @image{lambda-2} |
| 21085 | %%%% old method of including an image | 21093 | %%%% old method of including an image |
| 21086 | % \input /usr/local/lib/tex/inputs/psfig.tex | 21094 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 21087 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/lambda-2.eps}} | 21095 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/lambda-2.eps}} |
| @@ -21120,7 +21128,7 @@ If we want to divide 100 by 50, we can write: | |||
| 21120 | @ifset print-postscript-figures | 21128 | @ifset print-postscript-figures |
| 21121 | @sp 1 | 21129 | @sp 1 |
| 21122 | @tex | 21130 | @tex |
| 21123 | @image{lambda-3} | 21131 | @center @image{lambda-3} |
| 21124 | %%%% old method of including an image | 21132 | %%%% old method of including an image |
| 21125 | % \input /usr/local/lib/tex/inputs/psfig.tex | 21133 | % \input /usr/local/lib/tex/inputs/psfig.tex |
| 21126 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/lambda-3.eps}} | 21134 | % \centerline{\psfig{figure=/usr/local/lib/emacs/man/lambda-3.eps}} |