diff options
| author | Miles Bader | 2005-03-31 09:58:14 +0000 |
|---|---|---|
| committer | Miles Bader | 2005-03-31 09:58:14 +0000 |
| commit | 773415d9340f12db3bd8654de5014deec57d49b7 (patch) | |
| tree | 579ecf466891c80df147934b0db24cb89d0abe3d | |
| parent | e9d5a4e18a8955cf60e78c54a511fd8e1259716f (diff) | |
| parent | 7c315e1cff9019c8af55921fab6f571e68b09623 (diff) | |
| download | emacs-773415d9340f12db3bd8654de5014deec57d49b7.tar.gz emacs-773415d9340f12db3bd8654de5014deec57d49b7.zip | |
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-31
Merge from emacs--cvs-trunk--0
Patches applied:
* emacs--cvs-trunk--0 (patch 206-222)
- Update from CVS
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 45-52)
- Update from CVS
- Update from CVS: texi Makefile.in CVS keyw cruft
- Update from CVS: ChangeLog tweaks
209 files changed, 10068 insertions, 5179 deletions
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index e182242276b..9ce510a6ee6 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE | |||
| @@ -1,5 +1,10 @@ | |||
| 1 | Tasks needed before the next release. | 1 | Tasks needed before the next release. |
| 2 | 2 | ||
| 3 | * THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE | ||
| 4 | |||
| 5 | `undo-ask-before-discard', currently set to t for debugging purposes | ||
| 6 | has to be set to nil: when t, it can leak memory and cause other problems. | ||
| 7 | |||
| 3 | * NEW FEATURES | 8 | * NEW FEATURES |
| 4 | 9 | ||
| 5 | ** Face remapping. | 10 | ** Face remapping. |
diff --git a/etc/ChangeLog b/etc/ChangeLog index 5632e1aaf12..aaefbea4b09 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog | |||
| @@ -1,3 +1,16 @@ | |||
| 1 | 2005-03-30 Thien-Thi Nguyen <ttn@gnu.org> | ||
| 2 | |||
| 3 | * TUTORIAL: Add title line. | ||
| 4 | * TUTORIAL.bg, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, | ||
| 5 | * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, | ||
| 6 | * TUTORIAL.ko, TUTORIAL.nl, TUTORIAL.pl, TUTORIAL.pt_BR, | ||
| 7 | * TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl | ||
| 8 | * TUTORIAL.sv, TUTORIAL.th, TUTORIAL.zh: Likewise. | ||
| 9 | |||
| 10 | 2005-03-29 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 11 | |||
| 12 | * gnus-refcard.tex, gnus-logo.eps: New files. | ||
| 13 | |||
| 1 | 2005-03-23 David Ponce <david@dponce.com> | 14 | 2005-03-23 David Ponce <david@dponce.com> |
| 2 | 15 | ||
| 3 | * NEWS: Mention recentf-keep. | 16 | * NEWS: Mention recentf-keep. |
| @@ -182,6 +182,26 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types. | |||
| 182 | 182 | ||
| 183 | * Changes in Emacs 22.1 | 183 | * Changes in Emacs 22.1 |
| 184 | 184 | ||
| 185 | ** Improved Thai support. A new minor mode `thai-word-mode' (which is | ||
| 186 | automatically activated if you select Thai as a language | ||
| 187 | environment) changes key bindings of most word-oriented commands to | ||
| 188 | versions which recognize Thai words. Affected commands are | ||
| 189 | M-f (forward-word) | ||
| 190 | M-b (backward-word) | ||
| 191 | M-d (kill-word) | ||
| 192 | M-DEL (backward-kill-word) | ||
| 193 | M-t (transpose-words) | ||
| 194 | M-q (fill-paragraph) | ||
| 195 | |||
| 196 | ** iso-acc.el is now obsolete. Use one of the latin input methods instead. | ||
| 197 | |||
| 198 | --- | ||
| 199 | ** Languange environment and various default coding systems are setup | ||
| 200 | more correctly according to the current locale name. If the locale | ||
| 201 | name doesn't specify a charset, the default is what glibc defines. | ||
| 202 | This change may result in using the different coding systems as | ||
| 203 | default in some locale (e.g. vi_VN). | ||
| 204 | |||
| 185 | +++ | 205 | +++ |
| 186 | ** The commands copy-file, rename-file, make-symbolic-link and | 206 | ** The commands copy-file, rename-file, make-symbolic-link and |
| 187 | add-name-to-file, when given a directory as the "new name" argument, | 207 | add-name-to-file, when given a directory as the "new name" argument, |
| @@ -221,6 +241,7 @@ converts whitespace around point to N spaces. | |||
| 221 | ** Control characters and escape glyphs are now shown in the new | 241 | ** Control characters and escape glyphs are now shown in the new |
| 222 | escape-glyph face. | 242 | escape-glyph face. |
| 223 | 243 | ||
| 244 | +++ | ||
| 224 | ** Non-breaking space and hyphens are now prefixed with an escape | 245 | ** Non-breaking space and hyphens are now prefixed with an escape |
| 225 | character, unless the new user variable `show-nonbreak-escape' is set | 246 | character, unless the new user variable `show-nonbreak-escape' is set |
| 226 | to nil. | 247 | to nil. |
| @@ -297,6 +318,7 @@ you about it. | |||
| 297 | +++ | 318 | +++ |
| 298 | ** line-move-ignore-invisible now defaults to t. | 319 | ** line-move-ignore-invisible now defaults to t. |
| 299 | 320 | ||
| 321 | +++ | ||
| 300 | ** In Outline mode, hide-body no longer hides lines at the top | 322 | ** In Outline mode, hide-body no longer hides lines at the top |
| 301 | of the file that precede the first header line. | 323 | of the file that precede the first header line. |
| 302 | 324 | ||
| @@ -313,6 +335,7 @@ suffix are from every line before processing all the lines. | |||
| 313 | ** `apply-macro-to-region-lines' now operates on all lines that begin | 335 | ** `apply-macro-to-region-lines' now operates on all lines that begin |
| 314 | in the region, rather than on all complete lines in the region. | 336 | in the region, rather than on all complete lines in the region. |
| 315 | 337 | ||
| 338 | --- | ||
| 316 | ** global-whitespace-mode is a new alias for whitespace-global-mode. | 339 | ** global-whitespace-mode is a new alias for whitespace-global-mode. |
| 317 | 340 | ||
| 318 | +++ | 341 | +++ |
| @@ -320,7 +343,10 @@ in the region, rather than on all complete lines in the region. | |||
| 320 | for matching the beginning and end of a symbol. A symbol is a | 343 | for matching the beginning and end of a symbol. A symbol is a |
| 321 | non-empty sequence of either word or symbol constituent characters, as | 344 | non-empty sequence of either word or symbol constituent characters, as |
| 322 | specified by the syntax table. | 345 | specified by the syntax table. |
| 346 | --- | ||
| 347 | *** rx.el has new corresponding `symbol-end' and `symbol-start' elements. | ||
| 323 | 348 | ||
| 349 | +++ | ||
| 324 | ** Passing resources on the command line now works on MS Windows. | 350 | ** Passing resources on the command line now works on MS Windows. |
| 325 | You can use --xrm to pass resource settings to Emacs, overriding any | 351 | You can use --xrm to pass resource settings to Emacs, overriding any |
| 326 | existing values. For example: | 352 | existing values. For example: |
| @@ -363,6 +389,7 @@ in the current input method to input a character at point. | |||
| 363 | ** Commands winner-redo and winner-undo, from winner.el, are now bound to | 389 | ** Commands winner-redo and winner-undo, from winner.el, are now bound to |
| 364 | C-c <left> and C-c <right>, respectively. This is an incompatible change. | 390 | C-c <left> and C-c <right>, respectively. This is an incompatible change. |
| 365 | 391 | ||
| 392 | --- | ||
| 366 | ** Help commands `describe-function' and `describe-key' now show function | 393 | ** Help commands `describe-function' and `describe-key' now show function |
| 367 | arguments in lowercase italics on displays that support it. To change the | 394 | arguments in lowercase italics on displays that support it. To change the |
| 368 | default, customize face `help-argument-name' or redefine the function | 395 | default, customize face `help-argument-name' or redefine the function |
| @@ -390,9 +417,11 @@ not the case, then `comint-kill-region' behaves just like | |||
| 390 | `kill-region' if read-only are involved: it copies the text to the | 417 | `kill-region' if read-only are involved: it copies the text to the |
| 391 | kill-ring, but does not delete it. | 418 | kill-ring, but does not delete it. |
| 392 | 419 | ||
| 420 | +++ | ||
| 393 | ** You can now use next-error (C-x `) and previous-error to advance to | 421 | ** You can now use next-error (C-x `) and previous-error to advance to |
| 394 | the next/previous matching line found by M-x occur. | 422 | the next/previous matching line found by M-x occur. |
| 395 | 423 | ||
| 424 | +++ | ||
| 396 | ** Telnet now prompts you for a port number with C-u M-x telnet. | 425 | ** Telnet now prompts you for a port number with C-u M-x telnet. |
| 397 | 426 | ||
| 398 | +++ | 427 | +++ |
| @@ -441,6 +470,7 @@ decides whether the buffer should be reverted. Currently, this means | |||
| 441 | that auto reverting works for Dired buffers (although this may not | 470 | that auto reverting works for Dired buffers (although this may not |
| 442 | work properly on all operating systems) and for the Buffer Menu. | 471 | work properly on all operating systems) and for the Buffer Menu. |
| 443 | 472 | ||
| 473 | +++ | ||
| 444 | ** If the new user option `auto-revert-check-vc-info' is non-nil, Auto | 474 | ** If the new user option `auto-revert-check-vc-info' is non-nil, Auto |
| 445 | Revert mode reliably updates version control info (such as the version | 475 | Revert mode reliably updates version control info (such as the version |
| 446 | control number in the mode line), in all version controlled buffers in | 476 | control number in the mode line), in all version controlled buffers in |
| @@ -480,6 +510,7 @@ This option allows you to specify environment variables for inferior | |||
| 480 | compilation processes without affecting the environment that all | 510 | compilation processes without affecting the environment that all |
| 481 | subprocesses inherit. | 511 | subprocesses inherit. |
| 482 | 512 | ||
| 513 | +++ | ||
| 483 | ** Grep has been decoupled from compilation mode setup. | 514 | ** Grep has been decoupled from compilation mode setup. |
| 484 | 515 | ||
| 485 | --- | 516 | --- |
| @@ -540,6 +571,7 @@ C-c C-f. | |||
| 540 | ** M-x compare-windows now can automatically skip non-matching text to | 571 | ** M-x compare-windows now can automatically skip non-matching text to |
| 541 | resync points in both windows. | 572 | resync points in both windows. |
| 542 | 573 | ||
| 574 | --- | ||
| 543 | ** New command `strokes-global-set-stroke-string'. | 575 | ** New command `strokes-global-set-stroke-string'. |
| 544 | This is like `strokes-global-set-stroke', but it allows you to bind | 576 | This is like `strokes-global-set-stroke', but it allows you to bind |
| 545 | the stroke directly to a string to insert. This is convenient for | 577 | the stroke directly to a string to insert. This is convenient for |
| @@ -547,10 +579,12 @@ using strokes as an input method. | |||
| 547 | 579 | ||
| 548 | ** Gnus package | 580 | ** Gnus package |
| 549 | 581 | ||
| 582 | --- | ||
| 550 | *** Gnus now includes Sieve and PGG | 583 | *** Gnus now includes Sieve and PGG |
| 551 | Sieve is a library for managing Sieve scripts. PGG is a library to handle | 584 | Sieve is a library for managing Sieve scripts. PGG is a library to handle |
| 552 | PGP/MIME. | 585 | PGP/MIME. |
| 553 | 586 | ||
| 587 | --- | ||
| 554 | *** There are many news features, bug fixes and improvements. | 588 | *** There are many news features, bug fixes and improvements. |
| 555 | See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details. | 589 | See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details. |
| 556 | 590 | ||
| @@ -570,6 +604,7 @@ buffer list. | |||
| 570 | *** The desktop package can be customized to restore only some buffers immediately, | 604 | *** The desktop package can be customized to restore only some buffers immediately, |
| 571 | remaining buffers are restored lazily (when Emacs is idle). | 605 | remaining buffers are restored lazily (when Emacs is idle). |
| 572 | 606 | ||
| 607 | +++ | ||
| 573 | *** New commands: | 608 | *** New commands: |
| 574 | - desktop-revert reverts to the last loaded desktop. | 609 | - desktop-revert reverts to the last loaded desktop. |
| 575 | - desktop-change-dir kills current desktop and loads a new. | 610 | - desktop-change-dir kills current desktop and loads a new. |
| @@ -578,6 +613,7 @@ remaining buffers are restored lazily (when Emacs is idle). | |||
| 578 | - desktop-lazy-complete runs the desktop load to completion. | 613 | - desktop-lazy-complete runs the desktop load to completion. |
| 579 | - desktop-lazy-abort aborts lazy loading of the desktop. | 614 | - desktop-lazy-abort aborts lazy loading of the desktop. |
| 580 | 615 | ||
| 616 | --- | ||
| 581 | *** New customizable variables: | 617 | *** New customizable variables: |
| 582 | - desktop-save. Determins whether the desktop should be saved when it is | 618 | - desktop-save. Determins whether the desktop should be saved when it is |
| 583 | killed. | 619 | killed. |
| @@ -595,6 +631,7 @@ remaining buffers are restored lazily (when Emacs is idle). | |||
| 595 | +++ | 631 | +++ |
| 596 | *** New command line option --no-desktop | 632 | *** New command line option --no-desktop |
| 597 | 633 | ||
| 634 | --- | ||
| 598 | *** New hooks: | 635 | *** New hooks: |
| 599 | - desktop-after-read-hook run after a desktop is loaded. | 636 | - desktop-after-read-hook run after a desktop is loaded. |
| 600 | - desktop-no-desktop-file-hook run when no desktop file is found. | 637 | - desktop-no-desktop-file-hook run when no desktop file is found. |
| @@ -608,6 +645,7 @@ to get the old behavior. The new options `save-place-save-skipped' | |||
| 608 | and `save-place-skip-check-regexp' allow further fine-tuning of this | 645 | and `save-place-skip-check-regexp' allow further fine-tuning of this |
| 609 | feature. | 646 | feature. |
| 610 | 647 | ||
| 648 | +++ | ||
| 611 | ** You can have several Emacs servers on the same machine. | 649 | ** You can have several Emacs servers on the same machine. |
| 612 | 650 | ||
| 613 | % emacs --eval '(setq server-name "foo")' -f server-start & | 651 | % emacs --eval '(setq server-name "foo")' -f server-start & |
| @@ -646,18 +684,21 @@ in left fringe, the bottom angle bitmap in right fringe, and both | |||
| 646 | arrow bitmaps in right fringe. To show just the angle bitmaps in the | 684 | arrow bitmaps in right fringe. To show just the angle bitmaps in the |
| 647 | left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). | 685 | left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). |
| 648 | 686 | ||
| 687 | +++ | ||
| 649 | ** New command `display-local-help' displays any local help at point | 688 | ** New command `display-local-help' displays any local help at point |
| 650 | in the echo area. It is bound to `C-h .'. It normally displays the | 689 | in the echo area. It is bound to `C-h .'. It normally displays the |
| 651 | same string that would be displayed on mouse-over using the | 690 | same string that would be displayed on mouse-over using the |
| 652 | `help-echo' property, but, in certain cases, it can display a more | 691 | `help-echo' property, but, in certain cases, it can display a more |
| 653 | keyboard oriented alternative. | 692 | keyboard oriented alternative. |
| 654 | 693 | ||
| 694 | +++ | ||
| 655 | ** New user option `help-at-pt-display-when-idle' allows to | 695 | ** New user option `help-at-pt-display-when-idle' allows to |
| 656 | automatically show the help provided by `display-local-help' on | 696 | automatically show the help provided by `display-local-help' on |
| 657 | point-over, after suitable idle time. The amount of idle time is | 697 | point-over, after suitable idle time. The amount of idle time is |
| 658 | determined by the user option `help-at-pt-timer-delay' and defaults | 698 | determined by the user option `help-at-pt-timer-delay' and defaults |
| 659 | to one second. This feature is turned off by default. | 699 | to one second. This feature is turned off by default. |
| 660 | 700 | ||
| 701 | --- | ||
| 661 | ** New commands `scan-buf-next-region' and `scan-buf-previous-region' | 702 | ** New commands `scan-buf-next-region' and `scan-buf-previous-region' |
| 662 | move to the start of the next (previous, respectively) region with | 703 | move to the start of the next (previous, respectively) region with |
| 663 | non-nil help-echo property and display any help found there in the | 704 | non-nil help-echo property and display any help found there in the |
| @@ -681,7 +722,7 @@ On 32bit machines, it is now 256M (i.e. 268435455). | |||
| 681 | now reads arguments for the function interactively if it is | 722 | now reads arguments for the function interactively if it is |
| 682 | an interactively callable function. | 723 | an interactively callable function. |
| 683 | 724 | ||
| 684 | 725 | --- | |
| 685 | ** sql changes. | 726 | ** sql changes. |
| 686 | 727 | ||
| 687 | *** The variable `sql-product' controls the highlightng of different | 728 | *** The variable `sql-product' controls the highlightng of different |
| @@ -753,6 +794,7 @@ defaults. | |||
| 753 | appropriate sql-interactive-mode wrapper for the current setting of | 794 | appropriate sql-interactive-mode wrapper for the current setting of |
| 754 | `sql-product'. | 795 | `sql-product'. |
| 755 | 796 | ||
| 797 | --- | ||
| 756 | ** M-x view-file and commands that use it now avoid interfering | 798 | ** M-x view-file and commands that use it now avoid interfering |
| 757 | with special modes such as Tar mode. | 799 | with special modes such as Tar mode. |
| 758 | 800 | ||
| @@ -764,6 +806,7 @@ When more than one word is specified, at least two of those words must | |||
| 764 | be present for an item to match. Regular expression matching is still | 806 | be present for an item to match. Regular expression matching is still |
| 765 | available. | 807 | available. |
| 766 | 808 | ||
| 809 | +++ | ||
| 767 | *** The new option `apropos-sort-by-scores' causes the matching items | 810 | *** The new option `apropos-sort-by-scores' causes the matching items |
| 768 | to be sorted according to their score. The score for an item is a | 811 | to be sorted according to their score. The score for an item is a |
| 769 | number calculated to indicate how well the item matches the words or | 812 | number calculated to indicate how well the item matches the words or |
| @@ -776,6 +819,7 @@ matching item. | |||
| 776 | since there are situations where one or the other will shut down | 819 | since there are situations where one or the other will shut down |
| 777 | the operating system or your X server. | 820 | the operating system or your X server. |
| 778 | 821 | ||
| 822 | --- | ||
| 779 | ** New minor mode, Visible mode, toggles invisibility in the current buffer. | 823 | ** New minor mode, Visible mode, toggles invisibility in the current buffer. |
| 780 | When enabled, it makes all invisible text visible. When disabled, it | 824 | When enabled, it makes all invisible text visible. When disabled, it |
| 781 | restores the previous value of `buffer-invisibility-spec'. | 825 | restores the previous value of `buffer-invisibility-spec'. |
| @@ -784,6 +828,7 @@ restores the previous value of `buffer-invisibility-spec'. | |||
| 784 | ** New command `kill-whole-line' kills an entire line at once. | 828 | ** New command `kill-whole-line' kills an entire line at once. |
| 785 | By default, it is bound to C-S-<backspace>. | 829 | By default, it is bound to C-S-<backspace>. |
| 786 | 830 | ||
| 831 | --- | ||
| 787 | ** New commands to operate on pairs of open and close characters: | 832 | ** New commands to operate on pairs of open and close characters: |
| 788 | `insert-pair', `delete-pair', `raise-sexp'. | 833 | `insert-pair', `delete-pair', `raise-sexp'. |
| 789 | 834 | ||
| @@ -820,6 +865,7 @@ into the kill ring. With a zero prefix arg, copies absolute file names. | |||
| 820 | +++ | 865 | +++ |
| 821 | ** Dired-x: | 866 | ** Dired-x: |
| 822 | 867 | ||
| 868 | +++ | ||
| 823 | *** Omitting files is now a minor mode, dired-omit-mode. The mode toggling | 869 | *** Omitting files is now a minor mode, dired-omit-mode. The mode toggling |
| 824 | command is bound to M-o. A new command dired-mark-omitted, bound to M-O, | 870 | command is bound to M-o. A new command dired-mark-omitted, bound to M-O, |
| 825 | marks omitted files. The variable dired-omit-files-p is obsoleted, use the | 871 | marks omitted files. The variable dired-omit-files-p is obsoleted, use the |
| @@ -883,6 +929,7 @@ possible matches. | |||
| 883 | the current Info node name into the kill ring. With a zero prefix | 929 | the current Info node name into the kill ring. With a zero prefix |
| 884 | arg, puts the node name inside the `info' function call. | 930 | arg, puts the node name inside the `info' function call. |
| 885 | 931 | ||
| 932 | --- | ||
| 886 | *** New face `info-xref-visited' distinguishes visited nodes from unvisited | 933 | *** New face `info-xref-visited' distinguishes visited nodes from unvisited |
| 887 | and a new option `Info-fontify-visited-nodes' to control this. | 934 | and a new option `Info-fontify-visited-nodes' to control this. |
| 888 | 935 | ||
| @@ -894,6 +941,7 @@ references and following them calls `browse-url'. | |||
| 894 | If you prefer the old behavior, you can set the new user option | 941 | If you prefer the old behavior, you can set the new user option |
| 895 | `Info-hide-note-references' to nil. | 942 | `Info-hide-note-references' to nil. |
| 896 | 943 | ||
| 944 | --- | ||
| 897 | *** Images in Info pages are supported. | 945 | *** Images in Info pages are supported. |
| 898 | Info pages show embedded images, in Emacs frames with image support. | 946 | Info pages show embedded images, in Emacs frames with image support. |
| 899 | Info documentation that includes images, processed with makeinfo | 947 | Info documentation that includes images, processed with makeinfo |
| @@ -966,6 +1014,7 @@ Such individual settings are now preserved when windows are split | |||
| 966 | horizontally or vertically, a saved window configuration is restored, | 1014 | horizontally or vertically, a saved window configuration is restored, |
| 967 | or when the frame is resized. | 1015 | or when the frame is resized. |
| 968 | 1016 | ||
| 1017 | +++ | ||
| 969 | ** New functions frame-current-scroll-bars and window-current-scroll-bars. | 1018 | ** New functions frame-current-scroll-bars and window-current-scroll-bars. |
| 970 | 1019 | ||
| 971 | These functions return the current locations of the vertical and | 1020 | These functions return the current locations of the vertical and |
| @@ -979,6 +1028,7 @@ horizontal scroll bars in a frame or window. | |||
| 979 | +++ | 1028 | +++ |
| 980 | ** Under X, mouse-wheel-mode is turned on by default. | 1029 | ** Under X, mouse-wheel-mode is turned on by default. |
| 981 | 1030 | ||
| 1031 | +++ | ||
| 982 | ** The X resource useXIM can be used to turn off use of XIM, which may | 1032 | ** The X resource useXIM can be used to turn off use of XIM, which may |
| 983 | speed up Emacs with slow networking to the X server. | 1033 | speed up Emacs with slow networking to the X server. |
| 984 | 1034 | ||
| @@ -988,6 +1038,7 @@ XIM by default, the X resource useXIM can be used to turn it on. | |||
| 988 | +++ | 1038 | +++ |
| 989 | ** `undo-only' does an undo which does not redo any previous undo. | 1039 | ** `undo-only' does an undo which does not redo any previous undo. |
| 990 | 1040 | ||
| 1041 | --- | ||
| 991 | ** `uniquify-strip-common-suffix' tells uniquify to prefer | 1042 | ** `uniquify-strip-common-suffix' tells uniquify to prefer |
| 992 | `file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'. | 1043 | `file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'. |
| 993 | 1044 | ||
| @@ -1002,6 +1053,7 @@ Emacs prompts her for confirmation. | |||
| 1002 | ** GUD mode has its own tool bar for controlling execution of the inferior | 1053 | ** GUD mode has its own tool bar for controlling execution of the inferior |
| 1003 | and other common debugger commands. | 1054 | and other common debugger commands. |
| 1004 | 1055 | ||
| 1056 | --- | ||
| 1005 | ** recentf changes. | 1057 | ** recentf changes. |
| 1006 | 1058 | ||
| 1007 | The recent file list is now automatically cleanup when recentf mode is | 1059 | The recent file list is now automatically cleanup when recentf mode is |
| @@ -1034,6 +1086,7 @@ You can now put the init files .emacs and .emacs_SHELL under | |||
| 1034 | --- | 1086 | --- |
| 1035 | ** partial-completion-mode now does partial completion on directory names. | 1087 | ** partial-completion-mode now does partial completion on directory names. |
| 1036 | 1088 | ||
| 1089 | --- | ||
| 1037 | ** skeleton.el now supports using - to mark the skeleton-point without | 1090 | ** skeleton.el now supports using - to mark the skeleton-point without |
| 1038 | interregion interaction. @ has reverted to only setting | 1091 | interregion interaction. @ has reverted to only setting |
| 1039 | skeleton-positions and no longer sets skeleton-point. Skeletons | 1092 | skeleton-positions and no longer sets skeleton-point. Skeletons |
| @@ -1041,6 +1094,7 @@ You can now put the init files .emacs and .emacs_SHELL under | |||
| 1041 | instead. The updated skeleton-insert docstring explains these new | 1094 | instead. The updated skeleton-insert docstring explains these new |
| 1042 | features along with other details of skeleton construction. | 1095 | features along with other details of skeleton construction. |
| 1043 | 1096 | ||
| 1097 | --- | ||
| 1044 | ** MH-E changes. | 1098 | ** MH-E changes. |
| 1045 | 1099 | ||
| 1046 | Upgraded to MH-E version 7.82. There have been major changes since | 1100 | Upgraded to MH-E version 7.82. There have been major changes since |
| @@ -1086,6 +1140,7 @@ file.) | |||
| 1086 | ** The new command `revert-buffer-with-coding-system' (C-x RET r) | 1140 | ** The new command `revert-buffer-with-coding-system' (C-x RET r) |
| 1087 | revisits the current file using a coding system that you specify. | 1141 | revisits the current file using a coding system that you specify. |
| 1088 | 1142 | ||
| 1143 | +++ | ||
| 1089 | ** The new command `recode-file-name' changes the encoding of the name | 1144 | ** The new command `recode-file-name' changes the encoding of the name |
| 1090 | of a file. | 1145 | of a file. |
| 1091 | 1146 | ||
| @@ -1208,6 +1263,7 @@ either Unicode (the mule-unicode charsets) or the iso-8859 charsets, | |||
| 1208 | when possible. The latter are more space-efficient. This is | 1263 | when possible. The latter are more space-efficient. This is |
| 1209 | controlled by user option utf-fragment-on-decoding. | 1264 | controlled by user option utf-fragment-on-decoding. |
| 1210 | 1265 | ||
| 1266 | +++ | ||
| 1211 | ** The new command `set-file-name-coding-system' (C-x RET F) sets | 1267 | ** The new command `set-file-name-coding-system' (C-x RET F) sets |
| 1212 | coding system for encoding and decoding file names. A new menu item | 1268 | coding system for encoding and decoding file names. A new menu item |
| 1213 | (Options->Mule->Set Coding Systems->For File Name) invokes this | 1269 | (Options->Mule->Set Coding Systems->For File Name) invokes this |
| @@ -1272,6 +1328,7 @@ when Emacs visits them. | |||
| 1272 | default, all trivial operations involving whole lines are performed | 1328 | default, all trivial operations involving whole lines are performed |
| 1273 | automatically. The game uses faces for better visual feedback. | 1329 | automatically. The game uses faces for better visual feedback. |
| 1274 | 1330 | ||
| 1331 | --- | ||
| 1275 | ** The new variable `x-select-request-type' controls how Emacs | 1332 | ** The new variable `x-select-request-type' controls how Emacs |
| 1276 | requests X selection. The default value is nil, which means that | 1333 | requests X selection. The default value is nil, which means that |
| 1277 | Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, | 1334 | Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, |
| @@ -1303,9 +1360,11 @@ by two new user options: `tex-start-options', which should hold | |||
| 1303 | command-line options to feed to TeX, and `tex-start-commands' which should hold | 1360 | command-line options to feed to TeX, and `tex-start-commands' which should hold |
| 1304 | TeX commands to use at startup. | 1361 | TeX commands to use at startup. |
| 1305 | 1362 | ||
| 1363 | --- | ||
| 1306 | *** verbatim environments are now highlighted in courier by font-lock | 1364 | *** verbatim environments are now highlighted in courier by font-lock |
| 1307 | and super/sub-scripts are made into super/sub-scripts. | 1365 | and super/sub-scripts are made into super/sub-scripts. |
| 1308 | 1366 | ||
| 1367 | +++ | ||
| 1309 | *** New major mode doctex-mode for *.dtx files. | 1368 | *** New major mode doctex-mode for *.dtx files. |
| 1310 | 1369 | ||
| 1311 | +++ | 1370 | +++ |
| @@ -1316,6 +1375,7 @@ different Emacs window will select that window (minibuffer window can | |||
| 1316 | be selected only when it is active). The default is nil, so that this | 1375 | be selected only when it is active). The default is nil, so that this |
| 1317 | feature is not enabled. | 1376 | feature is not enabled. |
| 1318 | 1377 | ||
| 1378 | +++ | ||
| 1319 | ** On X, when the window manager requires that you click on a frame to | 1379 | ** On X, when the window manager requires that you click on a frame to |
| 1320 | select it (give it focus), the selected window and cursor position | 1380 | select it (give it focus), the selected window and cursor position |
| 1321 | normally changes according to the mouse click position. If you set | 1381 | normally changes according to the mouse click position. If you set |
| @@ -1337,10 +1397,12 @@ search multiple buffers. There is also a new command | |||
| 1337 | buffers to search by their filename. Internally, Occur mode has been | 1397 | buffers to search by their filename. Internally, Occur mode has been |
| 1338 | rewritten, and now uses font-lock, among other changes. | 1398 | rewritten, and now uses font-lock, among other changes. |
| 1339 | 1399 | ||
| 1400 | +++ | ||
| 1340 | ** The default values of paragraph-start and indent-line-function have | 1401 | ** The default values of paragraph-start and indent-line-function have |
| 1341 | been changed to reflect those used in Text mode rather than those used | 1402 | been changed to reflect those used in Text mode rather than those used |
| 1342 | in Indented-Text mode. | 1403 | in Indented-Text mode. |
| 1343 | 1404 | ||
| 1405 | --- | ||
| 1344 | ** New user option `query-replace-skip-read-only': when non-nil, | 1406 | ** New user option `query-replace-skip-read-only': when non-nil, |
| 1345 | `query-replace' and related functions simply ignore | 1407 | `query-replace' and related functions simply ignore |
| 1346 | a match if part of it has a read-only property. | 1408 | a match if part of it has a read-only property. |
| @@ -1371,6 +1433,7 @@ can optionally enable mouse highlighting only after you move the | |||
| 1371 | mouse, so that highlighting disappears when you press a key. You can | 1433 | mouse, so that highlighting disappears when you press a key. You can |
| 1372 | also disable mouse highlighting. | 1434 | also disable mouse highlighting. |
| 1373 | 1435 | ||
| 1436 | +++ | ||
| 1374 | ** You can now customize if selecting a region by dragging the mouse | 1437 | ** You can now customize if selecting a region by dragging the mouse |
| 1375 | shall not copy the selected text to the kill-ring by setting the new | 1438 | shall not copy the selected text to the kill-ring by setting the new |
| 1376 | variable mouse-drag-copy-region to nil. | 1439 | variable mouse-drag-copy-region to nil. |
| @@ -1790,6 +1853,7 @@ count backward from the end of the year. | |||
| 1790 | prompts for a year and a week number, and moves to the first | 1853 | prompts for a year and a week number, and moves to the first |
| 1791 | day of that ISO week. | 1854 | day of that ISO week. |
| 1792 | 1855 | ||
| 1856 | --- | ||
| 1793 | ** The new variable `calendar-minimum-window-height' affects the | 1857 | ** The new variable `calendar-minimum-window-height' affects the |
| 1794 | window generated by the function `generate-calendar-window'. | 1858 | window generated by the function `generate-calendar-window'. |
| 1795 | 1859 | ||
| @@ -1799,6 +1863,7 @@ optional arguments, in order to only report on the specified holiday | |||
| 1799 | rather than all. This makes customization of variables such as | 1863 | rather than all. This makes customization of variables such as |
| 1800 | `christian-holidays' simpler. | 1864 | `christian-holidays' simpler. |
| 1801 | 1865 | ||
| 1866 | --- | ||
| 1802 | ** The function `simple-diary-display' now by default sets a header line. | 1867 | ** The function `simple-diary-display' now by default sets a header line. |
| 1803 | This can be controlled through the variables `diary-header-line-flag' | 1868 | This can be controlled through the variables `diary-header-line-flag' |
| 1804 | and `diary-header-line-format'. | 1869 | and `diary-header-line-format'. |
| @@ -1819,6 +1884,7 @@ formats. | |||
| 1819 | 1884 | ||
| 1820 | ** VC Changes | 1885 | ** VC Changes |
| 1821 | 1886 | ||
| 1887 | +++ | ||
| 1822 | *** The key C-x C-q no longer checks files in or out, it only changes | 1888 | *** The key C-x C-q no longer checks files in or out, it only changes |
| 1823 | the read-only state of the buffer (toggle-read-only). We made this | 1889 | the read-only state of the buffer (toggle-read-only). We made this |
| 1824 | change because we held a poll and found that many users were unhappy | 1890 | change because we held a poll and found that many users were unhappy |
| @@ -2268,17 +2334,23 @@ from the file name or buffer contents. | |||
| 2268 | --- | 2334 | --- |
| 2269 | ** Perl mode has a new variable `perl-indent-continued-arguments'. | 2335 | ** Perl mode has a new variable `perl-indent-continued-arguments'. |
| 2270 | 2336 | ||
| 2337 | --- | ||
| 2338 | ** Fortran mode does more font-locking by default. Use level 3 | ||
| 2339 | highlighting for the old default. | ||
| 2340 | |||
| 2271 | +++ | 2341 | +++ |
| 2272 | ** Fortran mode has a new variable `fortran-directive-re'. | 2342 | ** Fortran mode has a new variable `fortran-directive-re'. |
| 2273 | Adapt this to match the format of any compiler directives you use. | 2343 | Adapt this to match the format of any compiler directives you use. |
| 2274 | Lines that match are never indented, and are given distinctive font-locking. | 2344 | Lines that match are never indented, and are given distinctive font-locking. |
| 2275 | 2345 | ||
| 2276 | +++ | 2346 | +++ |
| 2277 | ** F90 mode has new navigation commands `f90-end-of-block', | 2347 | ** F90 mode and Fortran mode have new navigation commands |
| 2278 | `f90-beginning-of-block', `f90-next-block', `f90-previous-block'. | 2348 | `f90-end-of-block', `f90-beginning-of-block', `f90-next-block', |
| 2349 | `f90-previous-block', `fortran-end-of-block', | ||
| 2350 | `fortran-beginning-of-block'. | ||
| 2279 | 2351 | ||
| 2280 | --- | 2352 | --- |
| 2281 | ** F90 mode now has support for hs-minor-mode (hideshow). | 2353 | ** F90 mode and Fortran mode have support for hs-minor-mode (hideshow). |
| 2282 | It cannot deal with every code format, but ought to handle a sizeable | 2354 | It cannot deal with every code format, but ought to handle a sizeable |
| 2283 | majority. | 2355 | majority. |
| 2284 | 2356 | ||
| @@ -2432,17 +2504,31 @@ anyone has committed to the repository since you last executed | |||
| 2432 | "checkout", "update" or "commit". That means using cvs diff options | 2504 | "checkout", "update" or "commit". That means using cvs diff options |
| 2433 | -rBASE -rHEAD. | 2505 | -rBASE -rHEAD. |
| 2434 | 2506 | ||
| 2507 | --- | ||
| 2435 | ** New variable `hs-set-up-overlay' allows customization of the overlay | 2508 | ** New variable `hs-set-up-overlay' allows customization of the overlay |
| 2436 | used to effect hiding for hideshow minor mode. Integration with isearch | 2509 | used to effect hiding for hideshow minor mode. Integration with isearch |
| 2437 | handles the overlay property `display' specially, preserving it during | 2510 | handles the overlay property `display' specially, preserving it during |
| 2438 | temporary overlay showing in the course of an isearch operation. | 2511 | temporary overlay showing in the course of an isearch operation. |
| 2439 | 2512 | ||
| 2513 | +++ | ||
| 2440 | ** New command `recode-region' decodes the region again by a specified | 2514 | ** New command `recode-region' decodes the region again by a specified |
| 2441 | coding system. | 2515 | coding system. |
| 2442 | 2516 | ||
| 2443 | 2517 | ||
| 2444 | * New modes and packages in Emacs 22.1 | 2518 | * New modes and packages in Emacs 22.1 |
| 2445 | 2519 | ||
| 2520 | +++ | ||
| 2521 | ** The new package longlines.el provides a minor mode for editing text | ||
| 2522 | files composed of long lines, based on the `use-hard-newlines' | ||
| 2523 | mechanism. The long lines are broken up by inserting soft newlines, | ||
| 2524 | which are automatically removed when saving the file to disk or | ||
| 2525 | copying into the kill ring, clipboard, etc. By default, Longlines | ||
| 2526 | mode inserts soft newlines automatically during editing, a behavior | ||
| 2527 | referred to as "soft word wrap" in other text editors. This is | ||
| 2528 | similar to Refill mode, but more reliable. To turn the word wrap | ||
| 2529 | feature off, set `longlines-auto-wrap' to nil. | ||
| 2530 | |||
| 2531 | +++ | ||
| 2446 | ** The new package conf-mode.el handles thousands of configuration files, with | 2532 | ** The new package conf-mode.el handles thousands of configuration files, with |
| 2447 | varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, | 2533 | varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, |
| 2448 | var : value, var value or keyword var value) and sections ([section] or | 2534 | var : value, var value or keyword var value) and sections ([section] or |
| @@ -2450,12 +2536,12 @@ section { }). Many files under /etc/, or with suffixes like .cf through | |||
| 2450 | .config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are | 2536 | .config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are |
| 2451 | recognized. | 2537 | recognized. |
| 2452 | 2538 | ||
| 2453 | ** The new package password.el provide a password cache and expiring mechanism. | 2539 | +++ |
| 2454 | |||
| 2455 | ** The new package dns-mode.el add syntax highlight of DNS master files. | 2540 | ** The new package dns-mode.el add syntax highlight of DNS master files. |
| 2456 | The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used | 2541 | The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used |
| 2457 | to increment the SOA serial. | 2542 | to increment the SOA serial. |
| 2458 | 2543 | ||
| 2544 | +++ | ||
| 2459 | ** The new package flymake.el does on-the-fly syntax checking of program | 2545 | ** The new package flymake.el does on-the-fly syntax checking of program |
| 2460 | source files. See the Flymake's Info manual for more details. | 2546 | source files. See the Flymake's Info manual for more details. |
| 2461 | 2547 | ||
| @@ -2463,12 +2549,15 @@ source files. See the Flymake's Info manual for more details. | |||
| 2463 | of hierarchical data as an outline. For example, the tree-widget is | 2549 | of hierarchical data as an outline. For example, the tree-widget is |
| 2464 | well suited to display a hierarchy of directories and files. | 2550 | well suited to display a hierarchy of directories and files. |
| 2465 | 2551 | ||
| 2552 | +++ | ||
| 2466 | ** The wdired.el package allows you to use normal editing commands on Dired | 2553 | ** The wdired.el package allows you to use normal editing commands on Dired |
| 2467 | buffers to change filenames, permissions, etc... | 2554 | buffers to change filenames, permissions, etc... |
| 2468 | 2555 | ||
| 2556 | +++ | ||
| 2469 | ** The thumbs.el package allows you to preview image files as thumbnails | 2557 | ** The thumbs.el package allows you to preview image files as thumbnails |
| 2470 | and can be invoked from a Dired buffer. | 2558 | and can be invoked from a Dired buffer. |
| 2471 | 2559 | ||
| 2560 | +++ | ||
| 2472 | ** The new python.el package is used to edit Python and Jython programs. | 2561 | ** The new python.el package is used to edit Python and Jython programs. |
| 2473 | 2562 | ||
| 2474 | ** The URL package (which had been part of W3) is now part of Emacs. | 2563 | ** The URL package (which had been part of W3) is now part of Emacs. |
| @@ -2477,6 +2566,7 @@ and can be invoked from a Dired buffer. | |||
| 2477 | ** The new global minor mode `size-indication-mode' (off by default) | 2566 | ** The new global minor mode `size-indication-mode' (off by default) |
| 2478 | shows the size of accessible part of the buffer on the mode line. | 2567 | shows the size of accessible part of the buffer on the mode line. |
| 2479 | 2568 | ||
| 2569 | --- | ||
| 2480 | ** GDB-Script-mode is used for files like .gdbinit. | 2570 | ** GDB-Script-mode is used for files like .gdbinit. |
| 2481 | 2571 | ||
| 2482 | --- | 2572 | --- |
| @@ -2532,6 +2622,7 @@ versions of cua.el and cua-mode.el. To ensure proper operation, you | |||
| 2532 | must remove older versions of cua.el or cua-mode.el as well as the | 2622 | must remove older versions of cua.el or cua-mode.el as well as the |
| 2533 | loading and customization of those packages from the .emacs file. | 2623 | loading and customization of those packages from the .emacs file. |
| 2534 | 2624 | ||
| 2625 | +++ | ||
| 2535 | ** The new keypad setup package provides several common bindings for | 2626 | ** The new keypad setup package provides several common bindings for |
| 2536 | the numeric keypad which is available on most keyboards. The numeric | 2627 | the numeric keypad which is available on most keyboards. The numeric |
| 2537 | keypad typically has the digits 0 to 9, a decimal point, keys marked | 2628 | keypad typically has the digits 0 to 9, a decimal point, keys marked |
| @@ -2659,6 +2750,7 @@ There is also Global Reveal mode which affects all buffers. | |||
| 2659 | ** The new package ibuffer provides a powerful, completely | 2750 | ** The new package ibuffer provides a powerful, completely |
| 2660 | customizable replacement for buff-menu.el. | 2751 | customizable replacement for buff-menu.el. |
| 2661 | 2752 | ||
| 2753 | +++ | ||
| 2662 | ** The new package table.el implements editable, WYSIWYG, embedded | 2754 | ** The new package table.el implements editable, WYSIWYG, embedded |
| 2663 | `text tables' in Emacs buffers. It simulates the effect of putting | 2755 | `text tables' in Emacs buffers. It simulates the effect of putting |
| 2664 | these tables in a special major mode. The package emulates WYSIWYG | 2756 | these tables in a special major mode. The package emulates WYSIWYG |
| @@ -2681,16 +2773,20 @@ mode-lines in inverse-video. | |||
| 2681 | --- | 2773 | --- |
| 2682 | ** cplus-md.el has been removed to avoid problems with Custom. | 2774 | ** cplus-md.el has been removed to avoid problems with Custom. |
| 2683 | 2775 | ||
| 2776 | +++ | ||
| 2684 | ** New package benchmark.el contains simple support for convenient | 2777 | ** New package benchmark.el contains simple support for convenient |
| 2685 | timing measurements of code (including the garbage collection component). | 2778 | timing measurements of code (including the garbage collection component). |
| 2686 | 2779 | ||
| 2780 | --- | ||
| 2687 | ** The new Lisp library fringe.el controls the appearance of fringes. | 2781 | ** The new Lisp library fringe.el controls the appearance of fringes. |
| 2688 | 2782 | ||
| 2783 | --- | ||
| 2689 | ** `cfengine-mode' is a major mode for editing GNU Cfengine | 2784 | ** `cfengine-mode' is a major mode for editing GNU Cfengine |
| 2690 | configuration files. | 2785 | configuration files. |
| 2691 | 2786 | ||
| 2692 | * Incompatible Lisp Changes in Emacs 22.1 | 2787 | * Incompatible Lisp Changes in Emacs 22.1 |
| 2693 | 2788 | ||
| 2789 | +++ | ||
| 2694 | ** The new interactive-specification `G' reads a file name | 2790 | ** The new interactive-specification `G' reads a file name |
| 2695 | much like `F', but if the input is a directory name (even defaulted), | 2791 | much like `F', but if the input is a directory name (even defaulted), |
| 2696 | it returns just the directory name. | 2792 | it returns just the directory name. |
| @@ -2709,6 +2805,17 @@ the command `undefined'. (In earlier Emacs versions, it used | |||
| 2709 | * Lisp Changes in Emacs 22.1 | 2805 | * Lisp Changes in Emacs 22.1 |
| 2710 | 2806 | ||
| 2711 | +++ | 2807 | +++ |
| 2808 | ** The new function `filter-buffer-substring' extracts a buffer | ||
| 2809 | substring, passes it through a set of filter functions, and returns | ||
| 2810 | the filtered substring. It is used instead of `buffer-substring' or | ||
| 2811 | `delete-and-extract-region' when copying text into a user-accessible | ||
| 2812 | data structure, like the kill-ring, X clipboard, or a register. The | ||
| 2813 | list of filter function is specified by the new variable | ||
| 2814 | `buffer-substring-filters'. For example, Longlines mode uses | ||
| 2815 | `buffer-substring-filters' to remove soft newlines from the copied | ||
| 2816 | text. | ||
| 2817 | |||
| 2818 | +++ | ||
| 2712 | ** An element of buffer-undo-list can now have the form (apply FUNNAME | 2819 | ** An element of buffer-undo-list can now have the form (apply FUNNAME |
| 2713 | . ARGS), where FUNNAME is a symbol other than t or nil. That stands | 2820 | . ARGS), where FUNNAME is a symbol other than t or nil. That stands |
| 2714 | for a high-level change that should be undone by evaluating (apply | 2821 | for a high-level change that should be undone by evaluating (apply |
| @@ -2734,6 +2841,7 @@ save-some-buffers will always save that buffer without asking | |||
| 2734 | ** The function symbol-file tells you which file defined | 2841 | ** The function symbol-file tells you which file defined |
| 2735 | a certain function or variable. | 2842 | a certain function or variable. |
| 2736 | 2843 | ||
| 2844 | +++ | ||
| 2737 | ** Lisp code can now test if a given buffer position is inside a | 2845 | ** Lisp code can now test if a given buffer position is inside a |
| 2738 | clickable link with the new function `mouse-on-link-p'. This is the | 2846 | clickable link with the new function `mouse-on-link-p'. This is the |
| 2739 | function used by the new `mouse-1-click-follows-link' functionality. | 2847 | function used by the new `mouse-1-click-follows-link' functionality. |
| @@ -2814,6 +2922,7 @@ been declared obsolete. | |||
| 2814 | the up-event that was discarded in case the last key sequence read for a | 2922 | the up-event that was discarded in case the last key sequence read for a |
| 2815 | previous 'k' or 'K' argument was a down-event; otherwise nil is used. | 2923 | previous 'k' or 'K' argument was a down-event; otherwise nil is used. |
| 2816 | 2924 | ||
| 2925 | +++ | ||
| 2817 | ** Function `translate-region' accepts also a char-table as TABLE | 2926 | ** Function `translate-region' accepts also a char-table as TABLE |
| 2818 | argument. | 2927 | argument. |
| 2819 | 2928 | ||
| @@ -2830,6 +2939,7 @@ argument. | |||
| 2830 | been renamed to `disabled-command-function'. The variable | 2939 | been renamed to `disabled-command-function'. The variable |
| 2831 | `disabled-command-hook' has been kept as an obsolete alias. | 2940 | `disabled-command-hook' has been kept as an obsolete alias. |
| 2832 | 2941 | ||
| 2942 | +++ | ||
| 2833 | ** Function `compute-motion' now calculates the usable window | 2943 | ** Function `compute-motion' now calculates the usable window |
| 2834 | width if the WIDTH argument is nil. If the TOPOS argument is nil, | 2944 | width if the WIDTH argument is nil. If the TOPOS argument is nil, |
| 2835 | the usable window height and width is used. | 2945 | the usable window height and width is used. |
| @@ -2838,6 +2948,7 @@ the usable window height and width is used. | |||
| 2838 | ** `visited-file-modtime' and `calendar-time-from-absolute' now return | 2948 | ** `visited-file-modtime' and `calendar-time-from-absolute' now return |
| 2839 | a list of two integers, instead of a cons. | 2949 | a list of two integers, instead of a cons. |
| 2840 | 2950 | ||
| 2951 | +++ | ||
| 2841 | ** If a command sets transient-mark-mode to `only', that | 2952 | ** If a command sets transient-mark-mode to `only', that |
| 2842 | enables Transient Mark mode for the following command only. | 2953 | enables Transient Mark mode for the following command only. |
| 2843 | During that following command, the value of transient-mark-mode | 2954 | During that following command, the value of transient-mark-mode |
| @@ -3099,6 +3210,7 @@ then this function returns the regexp constructed from the variables | |||
| 3099 | `format' are now documented. Some flags that were accepted but not | 3210 | `format' are now documented. Some flags that were accepted but not |
| 3100 | implemented (such as "*") are no longer accepted. | 3211 | implemented (such as "*") are no longer accepted. |
| 3101 | 3212 | ||
| 3213 | +++ | ||
| 3102 | ** New function `macroexpand-all' expands all macros in a form. | 3214 | ** New function `macroexpand-all' expands all macros in a form. |
| 3103 | It is similar to the Common-Lisp function of the same name. | 3215 | It is similar to the Common-Lisp function of the same name. |
| 3104 | One difference is that it guarantees to return the original argument | 3216 | One difference is that it guarantees to return the original argument |
| @@ -3125,6 +3237,7 @@ sure saved files have the current year in any copyright headers. | |||
| 3125 | string. The old behavior is available if you call | 3237 | string. The old behavior is available if you call |
| 3126 | `insert-for-yank-1' instead. | 3238 | `insert-for-yank-1' instead. |
| 3127 | 3239 | ||
| 3240 | +++ | ||
| 3128 | ** New function `get-char-property-and-overlay' accepts the same | 3241 | ** New function `get-char-property-and-overlay' accepts the same |
| 3129 | arguments as `get-char-property' and returns a cons whose car is the | 3242 | arguments as `get-char-property' and returns a cons whose car is the |
| 3130 | return value of `get-char-property' called with those arguments and | 3243 | return value of `get-char-property' called with those arguments and |
| @@ -3224,6 +3337,7 @@ contents are detected automatically. However, certain implicit | |||
| 3224 | changes to mode lines, header lines, or display properties may require | 3337 | changes to mode lines, header lines, or display properties may require |
| 3225 | forcing an explicit window update. | 3338 | forcing an explicit window update. |
| 3226 | 3339 | ||
| 3340 | --- | ||
| 3227 | ** New function `redirect-debugging-output' can be used to redirect | 3341 | ** New function `redirect-debugging-output' can be used to redirect |
| 3228 | debugging output on the stderr file handle to a file. | 3342 | debugging output on the stderr file handle to a file. |
| 3229 | 3343 | ||
| @@ -3667,7 +3781,7 @@ variable is used by read-file-name-internal to filter the completion list. | |||
| 3667 | ** The new variable `read-file-name-function' can be used by lisp code | 3781 | ** The new variable `read-file-name-function' can be used by lisp code |
| 3668 | to override the internal read-file-name function. | 3782 | to override the internal read-file-name function. |
| 3669 | 3783 | ||
| 3670 | 3784 | +++ | |
| 3671 | ** The new variable `read-file-name-completion-ignore-case' specifies | 3785 | ** The new variable `read-file-name-completion-ignore-case' specifies |
| 3672 | whether completion ignores case when reading a file name with the | 3786 | whether completion ignores case when reading a file name with the |
| 3673 | `read-file-name' function. | 3787 | `read-file-name' function. |
| @@ -3919,6 +4033,7 @@ A new predicate `supports' has also been added to the `defface' face | |||
| 3919 | specification language, which can be used to do this test for faces | 4033 | specification language, which can be used to do this test for faces |
| 3920 | defined with defface. | 4034 | defined with defface. |
| 3921 | 4035 | ||
| 4036 | --- | ||
| 3922 | ** The function face-differs-from-default-p now truly checks whether the | 4037 | ** The function face-differs-from-default-p now truly checks whether the |
| 3923 | given face displays differently from the default face or not (previously | 4038 | given face displays differently from the default face or not (previously |
| 3924 | it did only a very cursory check). | 4039 | it did only a very cursory check). |
| @@ -3932,6 +4047,7 @@ inheritance is used when determining the value of a face attribute. | |||
| 3932 | ** New functions face-attribute-relative-p and merge-face-attribute | 4047 | ** New functions face-attribute-relative-p and merge-face-attribute |
| 3933 | help with handling relative face attributes. | 4048 | help with handling relative face attributes. |
| 3934 | 4049 | ||
| 4050 | +++ | ||
| 3935 | ** The priority of faces in an :inherit attribute face-list is reversed. | 4051 | ** The priority of faces in an :inherit attribute face-list is reversed. |
| 3936 | If a face contains an :inherit attribute with a list of faces, earlier | 4052 | If a face contains an :inherit attribute with a list of faces, earlier |
| 3937 | faces in the list override later faces in the list; in previous releases | 4053 | faces in the list override later faces in the list; in previous releases |
| @@ -4422,6 +4538,7 @@ formerly used for that purpose is now an alias for locale-coding-system. | |||
| 4422 | display a prompt but don't use the minibuffer, now display the prompt | 4538 | display a prompt but don't use the minibuffer, now display the prompt |
| 4423 | using the text properties (esp. the face) of the prompt string. | 4539 | using the text properties (esp. the face) of the prompt string. |
| 4424 | 4540 | ||
| 4541 | --- | ||
| 4425 | ** New function x-send-client-message sends a client message when | 4542 | ** New function x-send-client-message sends a client message when |
| 4426 | running under X. | 4543 | running under X. |
| 4427 | 4544 | ||
| @@ -4431,6 +4548,7 @@ all overlays in the buffer by just calling (remove-overlay). | |||
| 4431 | 4548 | ||
| 4432 | ** New packages: | 4549 | ** New packages: |
| 4433 | 4550 | ||
| 4551 | +++ | ||
| 4434 | *** The new package gdb-ui.el provides an enhanced graphical interface to | 4552 | *** The new package gdb-ui.el provides an enhanced graphical interface to |
| 4435 | GDB. You can interact with GDB through the GUD buffer in the usual way, but | 4553 | GDB. You can interact with GDB through the GUD buffer in the usual way, but |
| 4436 | there are also further buffers which control the execution and describe the | 4554 | there are also further buffers which control the execution and describe the |
| @@ -4447,9 +4565,11 @@ current syntactic context (as returned by parse-partial-sexp). | |||
| 4447 | binary data structures, such as network packets, to and from Lisp | 4565 | binary data structures, such as network packets, to and from Lisp |
| 4448 | data structures. | 4566 | data structures. |
| 4449 | 4567 | ||
| 4568 | --- | ||
| 4450 | *** The TCL package tcl-mode.el was replaced by tcl.el. | 4569 | *** The TCL package tcl-mode.el was replaced by tcl.el. |
| 4451 | This was actually done in Emacs-21.1, and was not documented. | 4570 | This was actually done in Emacs-21.1, and was not documented. |
| 4452 | 4571 | ||
| 4572 | +++ | ||
| 4453 | *** The new package button.el implements simple and fast `clickable buttons' | 4573 | *** The new package button.el implements simple and fast `clickable buttons' |
| 4454 | in emacs buffers. `buttons' are much lighter-weight than the `widgets' | 4574 | in emacs buffers. `buttons' are much lighter-weight than the `widgets' |
| 4455 | implemented by widget.el, and can be used by lisp code that doesn't | 4575 | implemented by widget.el, and can be used by lisp code that doesn't |
diff --git a/etc/TUTORIAL b/etc/TUTORIAL index b5632ae707b..dd3b25bce3b 100644 --- a/etc/TUTORIAL +++ b/etc/TUTORIAL | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Emacs Tutorial | ||
| 1 | You are looking at the Emacs tutorial. See end for copying conditions. | 2 | You are looking at the Emacs tutorial. See end for copying conditions. |
| 2 | Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. | 3 | Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.bg b/etc/TUTORIAL.bg index 8bd4b2a19ad..ba32e814b91 100644 --- a/etc/TUTORIAL.bg +++ b/etc/TUTORIAL.bg | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | âúâåäåíèåòî íà Åìàêñ | ||
| 1 | Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. | 2 | Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. |
| 2 | Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. | 3 | Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.cn b/etc/TUTORIAL.cn index cb3e93d956a..e286d4f19c8 100644 --- a/etc/TUTORIAL.cn +++ b/etc/TUTORIAL.cn | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Emacs ¿ìËÙÖ¸ÄÏ | ||
| 1 | ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ | 2 | ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ |
| 2 | Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. | 3 | Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.cs b/etc/TUTORIAL.cs index 525e481d3db..bac3a3a228e 100644 --- a/etc/TUTORIAL.cs +++ b/etc/TUTORIAL.cs | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | tutoriál k Emacsu | ||
| 1 | Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci. | 2 | Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci. |
| 2 | Do èe¹tiny pøelo¾il Milan Zamazal <pdm@zamazal.org>. | 3 | Do èe¹tiny pøelo¾il Milan Zamazal <pdm@zamazal.org>. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.de b/etc/TUTORIAL.de index a007fef752b..3f03d983651 100644 --- a/etc/TUTORIAL.de +++ b/etc/TUTORIAL.de | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Einführung in Emacs | ||
| 1 | Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc. | 2 | Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc. |
| 2 | 3 | ||
| 3 | Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal | 4 | Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal |
diff --git a/etc/TUTORIAL.es b/etc/TUTORIAL.es index e4850649c7d..939ad3c2a23 100644 --- a/etc/TUTORIAL.es +++ b/etc/TUTORIAL.es | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | tutorial de Emacs | ||
| 1 | Usted esta viendo el tutorial de Emacs. Vea al final las condiciones | 2 | Usted esta viendo el tutorial de Emacs. Vea al final las condiciones |
| 2 | de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software | 3 | de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software |
| 3 | Foundation. | 4 | Foundation. |
diff --git a/etc/TUTORIAL.fr b/etc/TUTORIAL.fr index 38853c608b9..99bf4c00ff2 100644 --- a/etc/TUTORIAL.fr +++ b/etc/TUTORIAL.fr | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Didacticiel d'Emacs | ||
| 1 | Didacticiel d'Emacs. Voir la fin de ce document pour les conditions. | 2 | Didacticiel d'Emacs. Voir la fin de ce document pour les conditions. |
| 2 | Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc. | 3 | Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.it b/etc/TUTORIAL.it index 02a91045d0e..6611675b583 100644 --- a/etc/TUTORIAL.it +++ b/etc/TUTORIAL.it | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Esercitazione di Emacs | ||
| 1 | Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc. | 2 | Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc. |
| 2 | Condizioni d'uso alla fine del file. | 3 | Condizioni d'uso alla fine del file. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.ja b/etc/TUTORIAL.ja index ad25a0a31cc..48d807f6ce0 100644 --- a/etc/TUTORIAL.ja +++ b/etc/TUTORIAL.ja | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Emacs $BF~Lg%,%$%I$G$9(B | ||
| 1 | $B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#%U%!%$%k:G8e$r;2>H$N$3$H!#(B | 2 | $B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#%U%!%$%k:G8e$r;2>H$N$3$H!#(B |
| 2 | Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. | 3 | Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.ko b/etc/TUTORIAL.ko index 72782dc330a..5df936a998f 100644 --- a/etc/TUTORIAL.ko +++ b/etc/TUTORIAL.ko | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B | ||
| 1 | $(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B | 2 | $(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B |
| 2 | $(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B. | 3 | $(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.nl b/etc/TUTORIAL.nl index b4849dd73a1..905021095db 100644 --- a/etc/TUTORIAL.nl +++ b/etc/TUTORIAL.nl | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Emacs-inleiding | ||
| 1 | Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan. | 2 | Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan. |
| 2 | Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation | 3 | Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.pl b/etc/TUTORIAL.pl index 501df8f6521..5b5b4d4eb8c 100644 --- a/etc/TUTORIAL.pl +++ b/etc/TUTORIAL.pl | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | krótki samouczek Emacsa | ||
| 1 | Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001 | 2 | Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001 |
| 2 | Free Software Foundation, Inc. Szczegó³y na koñcu pliku. | 3 | Free Software Foundation, Inc. Szczegó³y na koñcu pliku. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.pt_BR b/etc/TUTORIAL.pt_BR index 58101c28edb..6492c1ce3dd 100644 --- a/etc/TUTORIAL.pt_BR +++ b/etc/TUTORIAL.pt_BR | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Tutorial do Emacs | ||
| 1 | Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as | 2 | Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as |
| 2 | condições. | 3 | condições. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.ro b/etc/TUTORIAL.ro index 670c39bc454..d4dde10f237 100644 --- a/etc/TUTORIAL.ro +++ b/etc/TUTORIAL.ro | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | tutorialului de Emacs | ||
| 1 | Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*- | 2 | Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*- |
| 2 | Traducere din englezã de Tudor Hulubei <tudor@gnu.org>. | 3 | Traducere din englezã de Tudor Hulubei <tudor@gnu.org>. |
| 3 | Mulþumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi ºi sugestii. | 4 | Mulþumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi ºi sugestii. |
diff --git a/etc/TUTORIAL.ru b/etc/TUTORIAL.ru index 84f4b4c6c82..10b96e56076 100644 --- a/etc/TUTORIAL.ru +++ b/etc/TUTORIAL.ru | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | ÕÞÅÂÎÉË Emacs | ||
| 1 | ÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ. | 2 | ÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ. |
| 2 | Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. | 3 | Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.sk b/etc/TUTORIAL.sk index f294088aba9..58812197287 100644 --- a/etc/TUTORIAL.sk +++ b/etc/TUTORIAL.sk | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | tútorial k Emacsu | ||
| 1 | Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci. | 2 | Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci. |
| 2 | Do èe¹tiny prelo¾il Milan Zamazal <pdm@zamazal.org>, do slovenèiny Miroslav | 3 | Do èe¹tiny prelo¾il Milan Zamazal <pdm@zamazal.org>, do slovenèiny Miroslav |
| 3 | Va¹ko <zemiak@zoznam.sk>. | 4 | Va¹ko <zemiak@zoznam.sk>. |
diff --git a/etc/TUTORIAL.sl b/etc/TUTORIAL.sl index 263019643db..f1e64ec748d 100644 --- a/etc/TUTORIAL.sl +++ b/etc/TUTORIAL.sl | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Prvo berilo za Emacs | ||
| 1 | Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu. | 2 | Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu. |
| 2 | Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. | 3 | Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. |
| 3 | 4 | ||
diff --git a/etc/TUTORIAL.sv b/etc/TUTORIAL.sv index 65d1548c378..2f9bbe7ceab 100644 --- a/etc/TUTORIAL.sv +++ b/etc/TUTORIAL.sv | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | användarhandledningen till Emacs | ||
| 1 | Detta är den Svenska användarhandledningen till Emacs. I slutet finns | 2 | Detta är den Svenska användarhandledningen till Emacs. I slutet finns |
| 2 | kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free | 3 | kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free |
| 3 | Software Foundation, Inc. | 4 | Software Foundation, Inc. |
diff --git a/etc/TUTORIAL.th b/etc/TUTORIAL.th index f3708c9d60f..85280907c60 100644 --- a/etc/TUTORIAL.th +++ b/etc/TUTORIAL.th | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | 0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B | ||
| 1 | ,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software | 2 | ,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software |
| 2 | Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B. | 3 | Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B. |
| 3 | 0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B. | 4 | 0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B. |
diff --git a/etc/TUTORIAL.zh b/etc/TUTORIAL.zh index a1383dc26bb..f8d1d208252 100644 --- a/etc/TUTORIAL.zh +++ b/etc/TUTORIAL.zh | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | Emacs §Ö³t«ü«n¡] | ||
| 1 | ±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£¶§À¦³Ãö½Æ»s±ø¥ó¡C | 2 | ±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£¶§À¦³Ãö½Æ»s±ø¥ó¡C |
| 2 | Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. | 3 | Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. |
| 3 | 4 | ||
diff --git a/etc/gnus-logo.eps b/etc/gnus-logo.eps new file mode 100644 index 00000000000..95408ba9af6 --- /dev/null +++ b/etc/gnus-logo.eps | |||
| @@ -0,0 +1,1055 @@ | |||
| 1 | %!PS-Adobe-2.0 EPSF-2.0 | ||
| 2 | %%Title: gnuslogo1.ps | ||
| 3 | %%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley | ||
| 4 | %%BoundingBox: 0 0 493 505 | ||
| 5 | %%Pages: 1 | ||
| 6 | %%DocumentFonts: | ||
| 7 | %%EndComments | ||
| 8 | %%EndProlog | ||
| 9 | |||
| 10 | %%Page: 1 1 | ||
| 11 | |||
| 12 | % remember original state | ||
| 13 | /origstate save def | ||
| 14 | |||
| 15 | % build a temporary dictionary | ||
| 16 | 20 dict begin | ||
| 17 | |||
| 18 | % define string to hold a scanline's worth of data | ||
| 19 | /pix 62 string def | ||
| 20 | |||
| 21 | % lower left corner | ||
| 22 | 0 0 translate | ||
| 23 | |||
| 24 | % size of image (on paper, in 1/72inch coords) | ||
| 25 | 493.0 505.0 scale | ||
| 26 | |||
| 27 | % dimensions of data | ||
| 28 | 493 505 1 | ||
| 29 | |||
| 30 | % mapping matrix | ||
| 31 | [493 0 0 -505 0 505] | ||
| 32 | |||
| 33 | {currentfile pix readhexstring pop} | ||
| 34 | image | ||
| 35 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 36 | ffffffffffffffffffffffffffffffffffffffffff01fffffff8 | ||
| 37 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 38 | fffffffffffffffffffffffffffffffffffffffff8003ffffff8 | ||
| 39 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 40 | fffffffffffffffffffffffffffffffffffffffff0000ffffff8 | ||
| 41 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 42 | ffffffffffffffffffffffffffffffffffffffff8000007ffff8 | ||
| 43 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 44 | ffffffffffffffffffffffffffffffffffffffff0000003ffff8 | ||
| 45 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 46 | fffffffffffffffffffffffffffffffffffffffe0000000ffff8 | ||
| 47 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 48 | fffffffffffffffffffffffffffffffffffffff000000003fff8 | ||
| 49 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 50 | fffffffffffffffffffffffffffffffffffffff000000000fff8 | ||
| 51 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 52 | ffffffffffffffffffffffffffffffffffffffc0000000007ff8 | ||
| 53 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 54 | ffffffffffffffffffffffffffffffffffffff80000000003ff8 | ||
| 55 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 56 | ffffffffffffffffffffffffffffffffffffff00000000001ff8 | ||
| 57 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 58 | fffffffffffffffffffffffffffffffffffffe00000000000ff8 | ||
| 59 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 60 | fffffffffffffffffffffffffffffffffffffc00000000000ff8 | ||
| 61 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 62 | fffffffffffffffffffffffffffffffffffff8000000000007f8 | ||
| 63 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 64 | fffffffffffffffffffffffffffffffffffff0000000000003f8 | ||
| 65 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 66 | fffffffffffffffffffffffffffffffffffff0000000000003f8 | ||
| 67 | fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff | ||
| 68 | ffffffffffffffffffffffffffffffffffffe0000000000001f8 | ||
| 69 | fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff | ||
| 70 | ffffffffffffffffffffffffffffffffffffc0000000000000f8 | ||
| 71 | ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff | ||
| 72 | ffffffffffffffffffffffffffffffffffffc0000000000000f8 | ||
| 73 | ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff | ||
| 74 | ffffffffffffffffffffffffffffffffffff8000000000000078 | ||
| 75 | fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff | ||
| 76 | ffffffffffffffffffffffffffffffffffff0000000000000038 | ||
| 77 | fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff | ||
| 78 | fffffffffffffffffffffffffffffffffffe0000000000000038 | ||
| 79 | fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff | ||
| 80 | fffffffffffffffffffffffffffffffffffe0000000000000038 | ||
| 81 | fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff | ||
| 82 | fffffffffffffffffffffffffffffffffffc0000000000000018 | ||
| 83 | ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff | ||
| 84 | fffffffffffffffffffffffffffffffffffc0000000000000018 | ||
| 85 | ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff | ||
| 86 | fffffffffffffffffffffffffffffffffff80000000000000018 | ||
| 87 | ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff | ||
| 88 | fffffffffffffffffffffffffffffffffff80000000000000008 | ||
| 89 | ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff | ||
| 90 | fffffffffffffffffffffffffffffffffff00000000000000008 | ||
| 91 | fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff | ||
| 92 | fffffffffffffffffffffffffffffffffff00000000000000008 | ||
| 93 | fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff | ||
| 94 | ffffffffffffffffffffffffffffffffffe00000000000000008 | ||
| 95 | fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff | ||
| 96 | ffffffffffffffffffffffffffffffffffe00000000000000008 | ||
| 97 | fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff | ||
| 98 | ffffffffffffffffffffffffffffffffffc00000000000000000 | ||
| 99 | ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff | ||
| 100 | ffffffffffffffffffffffffffffffffffc00000000000000000 | ||
| 101 | ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff | ||
| 102 | ffffffffffffffffffffffffffffffffff800000000000000000 | ||
| 103 | ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff | ||
| 104 | ffffffffffffffffffffffffffffffffff800000000000000000 | ||
| 105 | ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff | ||
| 106 | ffffffffffffffffffffffffffffffffff000040000000000000 | ||
| 107 | fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff | ||
| 108 | ffffffffffffffffffffffffffffffffff0007ffc00000000000 | ||
| 109 | fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff | ||
| 110 | fffffffffffffffffffffffffffffffffe001ffffc0000000000 | ||
| 111 | fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff | ||
| 112 | fffffffffffffffffffffffffffffffffc003ffffe0000000000 | ||
| 113 | fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff | ||
| 114 | fffffffffffffffffffffffffffffffffc007fffffc000000000 | ||
| 115 | fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff | ||
| 116 | fffffffffffffffffffffffffffffffff800fffffff000000000 | ||
| 117 | ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff | ||
| 118 | fffffffffffffffffffffffffffffffff801fffffff800000000 | ||
| 119 | ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff | ||
| 120 | fffffffffffffffffffffffffffffffff003ffffffff00000000 | ||
| 121 | ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff | ||
| 122 | fffffffffffffffffffffffffffffffff007ffffffff00000000 | ||
| 123 | ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff | ||
| 124 | ffffffffffffffffffffffffffffffffe00fffffffff80000000 | ||
| 125 | fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff | ||
| 126 | ffffffffffffffffffffffffffffffffe01fffffffffc0000008 | ||
| 127 | fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff | ||
| 128 | ffffffffffffffffffffffffffffffffc03fffffffffc0000008 | ||
| 129 | fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff | ||
| 130 | ffffffffffffffffffffffffffffffffc07ffffffffff0000000 | ||
| 131 | fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff | ||
| 132 | ffffffffffffffffffffffffffffffff807ffffffffff0000000 | ||
| 133 | fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff | ||
| 134 | ffffffffffffffffffffffffffffffff80fffffffffff0000008 | ||
| 135 | fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff | ||
| 136 | ffffffffffffffffffffffffffffffff81fffffffffff8000008 | ||
| 137 | fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff | ||
| 138 | ffffffffffffffffffffffffffffffff01fffffffffff8000008 | ||
| 139 | ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff | ||
| 140 | ffffffffffffffffffffffffffffffff03fffffffffffc000008 | ||
| 141 | ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff | ||
| 142 | fffffffffffffffffffffffffffffffe03fffffffffffc000008 | ||
| 143 | ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff | ||
| 144 | fffffffffffffffffffffffffffffffe07fffffffffffe000008 | ||
| 145 | ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff | ||
| 146 | fffffffffffffffffffffffffffffffe07fffffffffffe000008 | ||
| 147 | ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff | ||
| 148 | fffffffffffffffffffffffffffffffe0ffffffffffffe000008 | ||
| 149 | ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff | ||
| 150 | fffffffffffffffffffffffffffffffc0ffffffffffffe000008 | ||
| 151 | ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff | ||
| 152 | fffffffffffffffffffffffffffffffc1fffffffffffff000008 | ||
| 153 | ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff | ||
| 154 | fffffffffffffffffffffffffffffffc3fffffffffffff000008 | ||
| 155 | ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff | ||
| 156 | fffffffffffffffffffffffffffffff87fffffffffffff000008 | ||
| 157 | ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff | ||
| 158 | fffffffffffffffffffffffffffffff87fffffffffffff000008 | ||
| 159 | ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff | ||
| 160 | fffffffffffffffffffffffffffffff87fffffffffffff000008 | ||
| 161 | ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff | ||
| 162 | fffffffffffffffffffffffffffffff8ffffffffffffff000008 | ||
| 163 | ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff | ||
| 164 | fffffffffffffffffffffffffffffffcffffffffffffff000008 | ||
| 165 | fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff | ||
| 166 | ffffffffffffffffffffffffffffe7fdffffffffffffff000008 | ||
| 167 | fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff | ||
| 168 | ffffffffffffffffffffffffffffe7fdffffffffffffff000008 | ||
| 169 | fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff | ||
| 170 | ffffffffffffffffffffffffffffc7ffffffffffffffff000008 | ||
| 171 | fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff | ||
| 172 | fffffffffeffffffffffffffffff87ffffffffffffffff000008 | ||
| 173 | f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff | ||
| 174 | fffffffffcffffffffffffffffff87ffffffffffffffff000008 | ||
| 175 | f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff | ||
| 176 | fffffffff8ffffffffffffffffff07ffffffffffffffff000008 | ||
| 177 | f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff | ||
| 178 | fffffffff8fffffffffffffffffe0fffffffffffffffff000008 | ||
| 179 | f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff | ||
| 180 | fffffffff0fffffffffffffffffe0fffffffffffffffff000018 | ||
| 181 | e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff | ||
| 182 | fffffffff0fffffffffffffffffc0fffffffffffffffff000018 | ||
| 183 | e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff | ||
| 184 | ffffffffe0fffffffffffffffffc1fffffffffffffffff000018 | ||
| 185 | c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff | ||
| 186 | ffffffffe0fffffffffffffffff81fffffffffffffffff000018 | ||
| 187 | c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff | ||
| 188 | ffffffffc0fffffffffffffffff83fffffffffffffffff000018 | ||
| 189 | 800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff | ||
| 190 | ffffffff01fffffffffffffffff03fffffffffffffffff000038 | ||
| 191 | 800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff | ||
| 192 | ffffffff01fffffffffffffffff03fffffffffffffffff800038 | ||
| 193 | 00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff | ||
| 194 | fffffffe03ffffffffffffffffe07fffffffffffffffff800038 | ||
| 195 | 00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff | ||
| 196 | fffffffc03ffffffffffffffffe07fffffffffffffffff800038 | ||
| 197 | 00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff | ||
| 198 | fffffff803ffffffffffffffffc07fffffffffffffffff800038 | ||
| 199 | 00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff | ||
| 200 | fffffff007ffffffffffffffffc0ffffffffffffffffff800038 | ||
| 201 | 0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff | ||
| 202 | fffffff007ffffffffffffffff80ffffffffffffffffff800078 | ||
| 203 | 0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff | ||
| 204 | ffffffc00fffffffffffffffff81ffffffffffffffffff800078 | ||
| 205 | 8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff | ||
| 206 | ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8 | ||
| 207 | 8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff | ||
| 208 | ffffff801fffffffffffffffff03ffffffffffffffffff8000f8 | ||
| 209 | c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff | ||
| 210 | fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8 | ||
| 211 | e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff | ||
| 212 | fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8 | ||
| 213 | f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff | ||
| 214 | fffff0003ffffffffffffffff80fffffffffffffffffff8000f8 | ||
| 215 | f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff | ||
| 216 | ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8 | ||
| 217 | f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f | ||
| 218 | ffff00007fffffffffffffffe01fffffffffffffffffff0001f8 | ||
| 219 | fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007 | ||
| 220 | fffc00007fffffffffffffffc01fffffffffffffffffff0001f8 | ||
| 221 | fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000 | ||
| 222 | ffe000007ffffbffffffffff801fffffffffffffffffff0001f8 | ||
| 223 | fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000 | ||
| 224 | 00000000fffff3ffffffffff003fffffffffffffffffff0001f8 | ||
| 225 | fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000 | ||
| 226 | 00000001fffff1fffffffffe003fffffffffffffffffff0003f8 | ||
| 227 | ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000 | ||
| 228 | 00000001ffffe1fffffffffc007fffffffffffffffffff0003f8 | ||
| 229 | ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000 | ||
| 230 | 00000003ffffe0fffffffff0007fffffffffffffffffff0003f8 | ||
| 231 | ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000 | ||
| 232 | 00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8 | ||
| 233 | ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000 | ||
| 234 | 00000007ffffc07fffffff8000ffffffffffffffffffff0003f8 | ||
| 235 | fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000 | ||
| 236 | 00000007ffff803fffffff0000fffffffffffffffffffe0007f8 | ||
| 237 | fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000 | ||
| 238 | 00000007ffff801ffffffc0001fffffffffffffffffffe0007f8 | ||
| 239 | fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000 | ||
| 240 | 0000000fffff000ffffff80003fffffffffffffffffffe0007f8 | ||
| 241 | fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000 | ||
| 242 | 0000000fffff0007ffffe00003fffffffffffffffffffe0007f8 | ||
| 243 | ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000 | ||
| 244 | 0000001ffffe0001ffff800007fffffffffffffffffffe000ff8 | ||
| 245 | ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000 | ||
| 246 | 0000001ffffe0000fffc000007fffffffffffffffffffe000ff8 | ||
| 247 | ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000 | ||
| 248 | 0000003ffffe0000000000000ffffffffffffffffffffe000ff8 | ||
| 249 | fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000 | ||
| 250 | 0000003ffffc0000000000000ffffffffffffffffffffe000ff8 | ||
| 251 | fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000 | ||
| 252 | 0000007ffff80000000000001ffffffffffffffffffffe001ff8 | ||
| 253 | fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000 | ||
| 254 | 0000007ffff80000000000001ffffffffffffffffffffe001ff8 | ||
| 255 | fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000 | ||
| 256 | 000000fffff80000000000003ffffffffffffffffffffc001ff8 | ||
| 257 | fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000 | ||
| 258 | 000003fffff00000000000007ffffffffffffffffffffc001ff8 | ||
| 259 | fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000 | ||
| 260 | 000007ffffe00000000000007ffffffffffffffffffffe003ff8 | ||
| 261 | fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000 | ||
| 262 | 000007ffffe0000000000000fffffffffffffffffffffc003ff8 | ||
| 263 | ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000 | ||
| 264 | 00001fffffc0000000000001fffffffffffffffffffffc003ff8 | ||
| 265 | ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000 | ||
| 266 | 00001fffffc0000000000003fffffffffffffffffffffc003ff8 | ||
| 267 | ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000 | ||
| 268 | 00003fffff80000000000003fffffffffffffffffffffc007ff8 | ||
| 269 | ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000 | ||
| 270 | 00007fffff80000000000007fffffffffffffffffffffc007ff8 | ||
| 271 | ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000 | ||
| 272 | 0000ffffff0000000000000ffffffffffffffffffffffc007ff8 | ||
| 273 | fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000 | ||
| 274 | 0001ffffff0000000000001ffffffffffffffffffffffc007ff8 | ||
| 275 | fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000 | ||
| 276 | 0003fffffe0000000000001ffffffffffffffffffffff800fff8 | ||
| 277 | fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000 | ||
| 278 | 0007fffffe0000000000003ffffffffffffffffffffff800fff8 | ||
| 279 | fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000 | ||
| 280 | 001ffffffc0000000000007ffffffffffffffffffffff800fff8 | ||
| 281 | fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000 | ||
| 282 | 003ffffffc000000000000fffffffffffffffffffffff800fff8 | ||
| 283 | ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000 | ||
| 284 | 00fffffff8000000000003fffffffffffffffffffffff001fff8 | ||
| 285 | ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000 | ||
| 286 | 03fffffff8000000000003fffffffffffffffffffffff001fff8 | ||
| 287 | ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000 | ||
| 288 | 07fffffff0000000000007fffffffffffffffffffffff001fff8 | ||
| 289 | ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000 | ||
| 290 | 3ffffffff000000000000ffffffffffffffffffffffff003fff8 | ||
| 291 | ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f | ||
| 292 | fffffffff000000000003ffffffffffffffffffffffff003fff8 | ||
| 293 | ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 294 | fffffffff800000000007ffffffffffffffffffffffff003fff8 | ||
| 295 | fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 296 | fffffffff80000000000ffffffffffffffffffffffffe003fff8 | ||
| 297 | fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 298 | fffffffffc0000000003ffffffffffffffffffffffffe007fff8 | ||
| 299 | fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 300 | fffffffffe0000000007ffffffffffffffffffffffffe007fff8 | ||
| 301 | fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 302 | fffffffffe000000000fffffffffffffffffffffffffe00ffff8 | ||
| 303 | fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 304 | ffffffffff000000001fffffffffffffffffffffffffe00ffff8 | ||
| 305 | ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff | ||
| 306 | ffffffffff800000007fffffffffffffffffffffffffc00ffff8 | ||
| 307 | ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff | ||
| 308 | ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8 | ||
| 309 | ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff | ||
| 310 | ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8 | ||
| 311 | ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff | ||
| 312 | fffffffffff800001fffffffffffffffffffffffffffc01ffff8 | ||
| 313 | ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff | ||
| 314 | fffffffffffe00007fffffffffffffffffffffffffffc01ffff8 | ||
| 315 | ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff | ||
| 316 | ffffffffffff8003ffffffffffffffffffffffffffff801ffff8 | ||
| 317 | ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff | ||
| 318 | ffffffffffffffffffffffffffffffffffffffffffff803ffff8 | ||
| 319 | fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff | ||
| 320 | ffffffffffffffffffffffffffffffffffffffffffff803ffff8 | ||
| 321 | fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff | ||
| 322 | ffffffffffffffffffffffffffffffffffffffffffff803ffff8 | ||
| 323 | fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff | ||
| 324 | ffffffffffffffffffffffffffffffffffffffffffff007ffff8 | ||
| 325 | fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff | ||
| 326 | ffffffffffffffffffffffffffffffffffffffffffff007ffff8 | ||
| 327 | fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff | ||
| 328 | ffffffffffffffffffffffffffffffffffffffffffff007ffff8 | ||
| 329 | fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff | ||
| 330 | fffffffffffffffffffffffffffffffffffffffffffe00fffff8 | ||
| 331 | ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff | ||
| 332 | fffffffffffffffffffffffffffffffffffffffffffe00fffff8 | ||
| 333 | ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff | ||
| 334 | fffffffffffffffffffffffffffffffffffffffffffe00fffff8 | ||
| 335 | ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff | ||
| 336 | fffffffffffffffffffffffffffffffffffffffffffe00fffff8 | ||
| 337 | ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff | ||
| 338 | fffffffffffffffffffffffffffffffffffffffffffe01fffff8 | ||
| 339 | ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff | ||
| 340 | fffffffffffffffffffffffffffffffffffffffffffc01fffff8 | ||
| 341 | ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff | ||
| 342 | fffffffffffffffffffffffffffffffffffffffffffc01fffff8 | ||
| 343 | ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff | ||
| 344 | fffffffffffffffffffffffffffffffffffffffffffc01fffff8 | ||
| 345 | fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff | ||
| 346 | fffffffffffffffffffffffffffffffffffffffffffc03fffff8 | ||
| 347 | fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff | ||
| 348 | fffffffffffffffffffffffffffffffffffffffffff803fffff8 | ||
| 349 | fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff | ||
| 350 | fffffffffffffffffffffffffffffffffffffffffff803fffff8 | ||
| 351 | fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff | ||
| 352 | fffffffffffffffffffffffffffffffffffffffffff007fffff8 | ||
| 353 | fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff | ||
| 354 | fffffffffffffffffffffffffffffffffffffffffff007fffff8 | ||
| 355 | fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff | ||
| 356 | fffffffffffffffffffffffffffffffffffffffffff007fffff8 | ||
| 357 | ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff | ||
| 358 | ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 | ||
| 359 | ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff | ||
| 360 | ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 | ||
| 361 | ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff | ||
| 362 | ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 | ||
| 363 | ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff | ||
| 364 | ffffffffffffffffffffffffffffffffffffffffffe01ffffff8 | ||
| 365 | ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff | ||
| 366 | ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 | ||
| 367 | ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff | ||
| 368 | ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 | ||
| 369 | ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff | ||
| 370 | ffffffffffffffffffffffffffffffffffffffffffc03ffffff8 | ||
| 371 | fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff | ||
| 372 | ffffffffffffffffffffffffffffffffffffffffff803ffffff8 | ||
| 373 | fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff | ||
| 374 | ffffffffffffffffffffffffffffffffffffffffff803ffffff8 | ||
| 375 | fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff | ||
| 376 | ffffffffffffffffffffffffffffffffffffffffff807ffffff8 | ||
| 377 | fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff | ||
| 378 | ffffffffffffffffffffffffffffffffffffffffff807ffffff8 | ||
| 379 | fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff | ||
| 380 | ffffffffffffffffffffffffffffffffffffffffff007ffffff8 | ||
| 381 | fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff | ||
| 382 | ffffffffffffffffffffffffffffffffffffffffff00fffffff8 | ||
| 383 | fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff | ||
| 384 | ffffffffffffffffffffffffffffffffffffffffff00fffffff8 | ||
| 385 | ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff | ||
| 386 | fffffffffffffffffffffffffffffffffffffffffe01fffffff8 | ||
| 387 | ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff | ||
| 388 | fffffffffffffffffffffffffffffffffffffffffe01fffffff8 | ||
| 389 | ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff | ||
| 390 | fffffffffffffffffffffffffffffffffffffffffe01fffffff8 | ||
| 391 | ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff | ||
| 392 | fffffffffffffffffffffffffffffffffffffffffe03fffffff8 | ||
| 393 | ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff | ||
| 394 | fffffffffffffffffffffffffffffffffffffffffe03fffffff8 | ||
| 395 | ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff | ||
| 396 | fffffffffffffffffffffffffffffffffffffffffc07fffffff8 | ||
| 397 | ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff | ||
| 398 | fffffffffffffffffffffffffffffffffffffffffc07fffffff8 | ||
| 399 | fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff | ||
| 400 | fffffffffffffffffffffffffffffffffffffffff807fffffff8 | ||
| 401 | fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff | ||
| 402 | fffffffffffffffffffffffffffffffffffffffff807fffffff8 | ||
| 403 | fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff | ||
| 404 | fffffffffffffffffffffffffffffffffffffffff80ffffffff8 | ||
| 405 | fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff | ||
| 406 | fffffffffffffffffffffffffffffffffffffffff80ffffffff8 | ||
| 407 | fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff | ||
| 408 | fffffffffffffffffffffffffffffffffffffffff01ffffffff8 | ||
| 409 | fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff | ||
| 410 | fffffffffffffffffffffffffffffffffffffffff01ffffffff8 | ||
| 411 | fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff | ||
| 412 | fffffffffffffffffffffffffffffffffffffffff01ffffffff8 | ||
| 413 | fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff | ||
| 414 | ffffffffffffffffffffffffffffffffffffffffe01ffffffff8 | ||
| 415 | fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff | ||
| 416 | ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 | ||
| 417 | ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff | ||
| 418 | ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 | ||
| 419 | ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff | ||
| 420 | ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 | ||
| 421 | ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff | ||
| 422 | ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 | ||
| 423 | ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff | ||
| 424 | ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 | ||
| 425 | ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff | ||
| 426 | ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 | ||
| 427 | ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff | ||
| 428 | ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 | ||
| 429 | ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff | ||
| 430 | ffffffffffffffffffffffffffffffffffffffff80fffffffff8 | ||
| 431 | ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff | ||
| 432 | ffffffffffffffffffffffffffffffffffffffff81fffffffff8 | ||
| 433 | ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff | ||
| 434 | ffffffffffffffffffffffffffffffffffffffff81fffffffff8 | ||
| 435 | ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff | ||
| 436 | ffffffffffffffffffffffffffffffffffffffff01fffffffff8 | ||
| 437 | ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff | ||
| 438 | ffffffffffffffffffffffffffffffffffffffff03fffffffff8 | ||
| 439 | ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff | ||
| 440 | fffffffffffffffffffffffffffffffffffffffe03fffffffff8 | ||
| 441 | fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff | ||
| 442 | fffffffffffffffffffffffffffffffffffffffe03fffffffff8 | ||
| 443 | fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff | ||
| 444 | fffffffffffffffffffffffffffffffffffffffe03fffffffff8 | ||
| 445 | fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff | ||
| 446 | fffffffffffffffffffffffffffffffffffffffe07fffffffff8 | ||
| 447 | fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff | ||
| 448 | fffffffffffffffffffffffffffffffffffffffc07fffffffff8 | ||
| 449 | fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff | ||
| 450 | fffffffffffffffffffffffffffffffffffffffc07fffffffff8 | ||
| 451 | fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff | ||
| 452 | fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 | ||
| 453 | fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff | ||
| 454 | fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 | ||
| 455 | fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff | ||
| 456 | fffffffffffffffffffffffffffffffffffffff80ffffffffff8 | ||
| 457 | fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff | ||
| 458 | fffffffffffffffffffffffffffffffffffffff80ffffffffff8 | ||
| 459 | fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff | ||
| 460 | fffffffffffffffffffffffffffffffffffffff00ffffffffff8 | ||
| 461 | fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 462 | fffffffffffffffffffffffffffffffffffffff01ffffffffff8 | ||
| 463 | fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 464 | fffffffffffffffffffffffffffffffffffffff01ffffffffff8 | ||
| 465 | fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 466 | ffffffffffffffffffffffffffffffffffffffe01ffffffffff8 | ||
| 467 | ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 468 | ffffffffffffffffffffffffffffffffffffffe03ffffffffff8 | ||
| 469 | ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 470 | fffffffffffffffffffdffffffffffffffffffe03ffffffffff8 | ||
| 471 | ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 472 | fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8 | ||
| 473 | ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff | ||
| 474 | fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 | ||
| 475 | fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff | ||
| 476 | fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 | ||
| 477 | fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff | ||
| 478 | fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 | ||
| 479 | fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff | ||
| 480 | ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8 | ||
| 481 | ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff | ||
| 482 | ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8 | ||
| 483 | fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff | ||
| 484 | ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 | ||
| 485 | fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff | ||
| 486 | ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 | ||
| 487 | fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff | ||
| 488 | ffffffffffffffffff03ffffffffffffffffff00fffffffffff8 | ||
| 489 | fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff | ||
| 490 | ffffffffffffffffff03ffffffffffffffffff01fffffffffff8 | ||
| 491 | fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff | ||
| 492 | ffffffffffffffffff07ffffffffffffffffff01fffffffffff8 | ||
| 493 | fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff | ||
| 494 | fffffffffffffffffe07fffffffffffffffffe01fffffffffff8 | ||
| 495 | fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff | ||
| 496 | fffffffffffffffffc07fffffffffffffffffe03fffffffffff8 | ||
| 497 | fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff | ||
| 498 | fffffffffffffffffc07fffffffffffffffffc03fffffffffff8 | ||
| 499 | fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff | ||
| 500 | fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 | ||
| 501 | fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff | ||
| 502 | fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 | ||
| 503 | fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff | ||
| 504 | fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 | ||
| 505 | fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff | ||
| 506 | fffffffffffffffff03ffffffffffffffffff807fffffffffff8 | ||
| 507 | fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff | ||
| 508 | ffffffffffffffffe01ffffffffffffffffff807fffffffffff8 | ||
| 509 | fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff | ||
| 510 | ffffffffffffffffe03ffffffffffffffffff807fffffffffff8 | ||
| 511 | fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff | ||
| 512 | ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 | ||
| 513 | fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff | ||
| 514 | ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 | ||
| 515 | fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff | ||
| 516 | ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 | ||
| 517 | fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff | ||
| 518 | ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 | ||
| 519 | ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff | ||
| 520 | ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8 | ||
| 521 | ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff | ||
| 522 | fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 | ||
| 523 | ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff | ||
| 524 | fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 | ||
| 525 | ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff | ||
| 526 | fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8 | ||
| 527 | ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff | ||
| 528 | fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8 | ||
| 529 | ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff | ||
| 530 | fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8 | ||
| 531 | ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff | ||
| 532 | fffffffffffffff807ffffffffffffffffffc03ffffffffffff8 | ||
| 533 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 534 | fffffffffffffff807ffffffffffffffffff803ffffffffffff8 | ||
| 535 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 536 | fffffffffffffff00fffffffffffffffffff803ffffffffffff8 | ||
| 537 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 538 | fffffffffffffff00fffffffffffffffffff807ffffffffffff8 | ||
| 539 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 540 | ffffffffffffffe01fffffffffffffffffff807ffffffffffff8 | ||
| 541 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 542 | ffffffffffffffe03fffffffffffffffffff807ffffffffffff8 | ||
| 543 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 544 | ffffffffffffffc03fffffffffffffffffff807ffffffffffff8 | ||
| 545 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 546 | ffffffffffffff807fffffffffffffffffff00fffffffffffff8 | ||
| 547 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 548 | ffffffffffffff807fffffffffffffffffff00fffffffffffff8 | ||
| 549 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 550 | ffffffffffffff00ffffffffffffffffffff00fffffffffffff8 | ||
| 551 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 552 | ffffffffffffff00fffffffffffffffffffe00fffffffffffff8 | ||
| 553 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 554 | fffffffffffffe01fffffffffffffffffffe01fffffffffffff8 | ||
| 555 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 556 | fffffffffffffe03fffffffffffffffffffe01fffffffffffff8 | ||
| 557 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 558 | fffffffffffffc03fffffffffffffffffffc01fffffffffffff8 | ||
| 559 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 560 | fffffffffffffc07fffffffffffffffffffc01fffffffffffff8 | ||
| 561 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 562 | fffffffffffff807fffffffffffffffffffc03fffffffffffff8 | ||
| 563 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 564 | fffffffffffff00ffffffffffffffffffffc03fffffffffffff8 | ||
| 565 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 566 | fffffffffffff00ffffffffffffffffffff803fffffffffffff8 | ||
| 567 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 568 | ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 | ||
| 569 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 570 | ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 | ||
| 571 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 572 | ffffffffffffc03ffffffffffffffffffff807fffffffffffff8 | ||
| 573 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 574 | ffffffffffffc03ffffffffffffffffffff007fffffffffffff8 | ||
| 575 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 576 | ffffffffffff807ffffffffffffffffffff007fffffffffffff8 | ||
| 577 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 578 | ffffffffffff807ffffffffffffffffffff007fffffffffffff8 | ||
| 579 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 580 | ffffffffffff00fffffffffffffffffffff007fffffffffffff8 | ||
| 581 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 582 | fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8 | ||
| 583 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 584 | fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8 | ||
| 585 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff | ||
| 586 | fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8 | ||
| 587 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff | ||
| 588 | fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8 | ||
| 589 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff | ||
| 590 | fffffffffff803ffffffffffffffffffffc00ffffffffffffff8 | ||
| 591 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff | ||
| 592 | fffffffffff807ffffffffffffffffffffc00ffffffffffffff8 | ||
| 593 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff | ||
| 594 | fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 | ||
| 595 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff | ||
| 596 | fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 | ||
| 597 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff | ||
| 598 | ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 | ||
| 599 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff | ||
| 600 | ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 | ||
| 601 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff | ||
| 602 | ffffffffff801fffffffffffffffffffff801ffffffffffffff8 | ||
| 603 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff | ||
| 604 | ffffffffff803fffffffffffffffffffff801ffffffffffffff8 | ||
| 605 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff | ||
| 606 | ffffffffff003fffffffffffffffffffff803ffffffffffffff8 | ||
| 607 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff | ||
| 608 | fffffffffe007fffffffffffffffffffff803ffffffffffffff8 | ||
| 609 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff | ||
| 610 | fffffffffc007fffffffffffffffffffff003ffffffffffffff8 | ||
| 611 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff | ||
| 612 | fffffffffc00ffffffffffffffffffffff003ffffffffffffff8 | ||
| 613 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff | ||
| 614 | fffffffff800ffffffffffffffffffffff003ffffffffffffff8 | ||
| 615 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff | ||
| 616 | fffffffff801ffffffffffffffffffffff003ffffffffffffff8 | ||
| 617 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff | ||
| 618 | fffffffff803ffffffffffffffffffffff007ffffffffffffff8 | ||
| 619 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff | ||
| 620 | fffffffff003fffffffffffffffffffffe007ffffffffffffff8 | ||
| 621 | fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff | ||
| 622 | ffffffffe007fffffffffffffffffffffe007ffffffffffffff8 | ||
| 623 | fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff | ||
| 624 | ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 | ||
| 625 | fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff | ||
| 626 | ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 | ||
| 627 | fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff | ||
| 628 | ffffffff800ffffffffffffffffffffffe00fffffffffffffff8 | ||
| 629 | fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff | ||
| 630 | ffffffff000ffffffffffffffffffffffe00fffffffffffffff8 | ||
| 631 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff | ||
| 632 | fffffffe001ffffffffffffffffffffffe00fffffffffffffff8 | ||
| 633 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff | ||
| 634 | fffffffc003ffffffffffffffffffffffe00fffffffffffffff8 | ||
| 635 | ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff | ||
| 636 | 9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8 | ||
| 637 | ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff | ||
| 638 | 0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8 | ||
| 639 | ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe | ||
| 640 | 07fffff0007ffffffffffffffffffffffc01fffffffffffffff8 | ||
| 641 | ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe | ||
| 642 | 07ffffe000fffffffffffffffffffffffc01fffffffffffffff8 | ||
| 643 | fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8 | ||
| 644 | 03ffffc000fffffffffffffffffffffffc01fffffffffffffff8 | ||
| 645 | fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0 | ||
| 646 | 03ffff8001fffffffffffffffffffffff801fffffffffffffff8 | ||
| 647 | fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0 | ||
| 648 | 01ffff0003fffffffffffffffffffffff803fffffffffffffff8 | ||
| 649 | fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 | ||
| 650 | 00fffe0003fffffffffffffffffffffff803fffffffffffffff8 | ||
| 651 | fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 | ||
| 652 | 00fffe0003fffffffffffffffffffffff803fffffffffffffff8 | ||
| 653 | fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0 | ||
| 654 | 003ffc0007fffffffffffffffffffffff003fffffffffffffff8 | ||
| 655 | ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80 | ||
| 656 | 001fe0001ffffffffffffffffffffffff003fffffffffffffff8 | ||
| 657 | ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00 | ||
| 658 | 000fc0001ffffffffffffffffffffffff007fffffffffffffff8 | ||
| 659 | ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00 | ||
| 660 | 000000001ffffffffffffffffffffffff007fffffffffffffff8 | ||
| 661 | ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00 | ||
| 662 | 000000003ffffffffffffffffffffffff007fffffffffffffff8 | ||
| 663 | ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00 | ||
| 664 | 000000003ffffffffffffffffffffffff007fffffffffffffff8 | ||
| 665 | ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800 | ||
| 666 | 000000007fffffffffffffffffffffffe007fffffffffffffff8 | ||
| 667 | fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800 | ||
| 668 | 000000007fffffffffffffffffffffffe007fffffffffffffff8 | ||
| 669 | fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000 | ||
| 670 | 00000001ffffffffffffffffffffffffe007fffffffffffffff8 | ||
| 671 | fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000 | ||
| 672 | 00000001ffffffffffffffffffffffffe007fffffffffffffff8 | ||
| 673 | fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000 | ||
| 674 | 00000001ffffffffffffffffffffffffe007fffffffffffffff8 | ||
| 675 | fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000 | ||
| 676 | 00000003ffffffffffffffffffffffffc00ffffffffffffffff8 | ||
| 677 | fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000 | ||
| 678 | 00000003ffffffffffffffffffffffffc00ffffffffffffffff8 | ||
| 679 | ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000 | ||
| 680 | 00000007ffffffffffffffffffffffffc00ffffffffffffffff8 | ||
| 681 | ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000 | ||
| 682 | 0000000fffffffffffffffffffffffffc01ffffffffffffffff8 | ||
| 683 | ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000 | ||
| 684 | 0000001fffffffffffffffffffffffffc01ffffffffffffffff8 | ||
| 685 | ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000 | ||
| 686 | 0000001fffffffffffffffffffffffffc01ffffffffffffffff8 | ||
| 687 | ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000 | ||
| 688 | 0000003fffffffffffffffffffffffffc01ffffffffffffffff8 | ||
| 689 | fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000 | ||
| 690 | 0000007fffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 691 | fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000 | ||
| 692 | 0000007fffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 693 | fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000 | ||
| 694 | 000000ffffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 695 | fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000 | ||
| 696 | 000001ffffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 697 | fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 | ||
| 698 | 000001ffffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 699 | fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 | ||
| 700 | 000003ffffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 701 | ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000 | ||
| 702 | 000003ffffffffffffffffffffffffff801ffffffffffffffff8 | ||
| 703 | ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000 | ||
| 704 | 000007ffffffffffffffffffffffffff803ffffffffffffffff8 | ||
| 705 | ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000 | ||
| 706 | 00000fffffffffffffffffffffffffff003ffffffffffffffff8 | ||
| 707 | ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000 | ||
| 708 | 00000fffffffffffffffffffffffffff803ffffffffffffffff8 | ||
| 709 | ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000 | ||
| 710 | 00001fffffffffffffffffffffffffff803ffffffffffffffff8 | ||
| 711 | ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200 | ||
| 712 | 00003fffffffffffffffffffffffffff007ffffffffffffffff8 | ||
| 713 | fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700 | ||
| 714 | 00007fffffffffffffffffffffffffff00fffffffffffffffff8 | ||
| 715 | fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80 | ||
| 716 | 0000ffffffffffffffffffffffffffff00fffffffffffffffff8 | ||
| 717 | fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80 | ||
| 718 | 0001ffffffffffffffffffffffffffff00fffffffffffffffff8 | ||
| 719 | fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0 | ||
| 720 | 0001ffffffffffffffffffffffffffff00fffffffffffffffff8 | ||
| 721 | fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0 | ||
| 722 | 0003ffffffffffffffffffffffffffff01fffffffffffffffff8 | ||
| 723 | ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0 | ||
| 724 | 0007ffffffffffffffffffffffffffff01fffffffffffffffff8 | ||
| 725 | ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0 | ||
| 726 | 0007ffffffffffffffffffffffffffff01fffffffffffffffff8 | ||
| 727 | ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8 | ||
| 728 | 001fffffffffffffffffffffffffffff07fffffffffffffffff8 | ||
| 729 | ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc | ||
| 730 | 007fffffffffffffffffffffffffffff07fffffffffffffffff8 | ||
| 731 | ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe | ||
| 732 | 00ffffffffffffffffffffffffffffff07fffffffffffffffff8 | ||
| 733 | ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff | ||
| 734 | dfffffffffffffffffffffffffffffff0ffffffffffffffffff8 | ||
| 735 | fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff | ||
| 736 | fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 | ||
| 737 | fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff | ||
| 738 | fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 | ||
| 739 | fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff | ||
| 740 | fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 | ||
| 741 | fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff | ||
| 742 | fffffffffffffffffffffffffffffffe3ffffffffffffffffff8 | ||
| 743 | fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff | ||
| 744 | ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 | ||
| 745 | ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff | ||
| 746 | ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 | ||
| 747 | ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff | ||
| 748 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 749 | ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff | ||
| 750 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 751 | ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff | ||
| 752 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 753 | ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff | ||
| 754 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 755 | fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff | ||
| 756 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 757 | fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff | ||
| 758 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 759 | fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff | ||
| 760 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 761 | fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff | ||
| 762 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 763 | fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff | ||
| 764 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 765 | fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff | ||
| 766 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 767 | ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff | ||
| 768 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 769 | ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff | ||
| 770 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 771 | ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff | ||
| 772 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 773 | ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff | ||
| 774 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 775 | ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff | ||
| 776 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 777 | fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff | ||
| 778 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 779 | fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff | ||
| 780 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 781 | fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff | ||
| 782 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 783 | fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff | ||
| 784 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 785 | fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff | ||
| 786 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 787 | ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff | ||
| 788 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 789 | ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff | ||
| 790 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 791 | ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff | ||
| 792 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 793 | ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff | ||
| 794 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 795 | ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff | ||
| 796 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 797 | ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff | ||
| 798 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 799 | ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff | ||
| 800 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 801 | fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff | ||
| 802 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 803 | fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff | ||
| 804 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 805 | fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff | ||
| 806 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 807 | fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff | ||
| 808 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 809 | ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff | ||
| 810 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 811 | ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff | ||
| 812 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 813 | ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff | ||
| 814 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 815 | ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff | ||
| 816 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 817 | ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff | ||
| 818 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 819 | ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff | ||
| 820 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 821 | fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff | ||
| 822 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 823 | fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff | ||
| 824 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 825 | fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff | ||
| 826 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 827 | fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff | ||
| 828 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 829 | ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff | ||
| 830 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 831 | ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff | ||
| 832 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 833 | ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff | ||
| 834 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 835 | ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff | ||
| 836 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 837 | ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff | ||
| 838 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 839 | ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff | ||
| 840 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 841 | fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff | ||
| 842 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 843 | fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff | ||
| 844 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 845 | fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff | ||
| 846 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 847 | fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff | ||
| 848 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 849 | fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff | ||
| 850 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 851 | fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff | ||
| 852 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 853 | fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff | ||
| 854 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 855 | ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff | ||
| 856 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 857 | ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff | ||
| 858 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 859 | ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff | ||
| 860 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 861 | ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff | ||
| 862 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 863 | fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff | ||
| 864 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 865 | fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff | ||
| 866 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 867 | fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff | ||
| 868 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 869 | fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff | ||
| 870 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 871 | fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff | ||
| 872 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 873 | ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff | ||
| 874 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 875 | ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff | ||
| 876 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 877 | ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff | ||
| 878 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 879 | ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff | ||
| 880 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 881 | ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff | ||
| 882 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 883 | ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff | ||
| 884 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 885 | fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff | ||
| 886 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 887 | fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff | ||
| 888 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 889 | fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff | ||
| 890 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 891 | fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff | ||
| 892 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 893 | fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff | ||
| 894 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 895 | ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff | ||
| 896 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 897 | ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff | ||
| 898 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 899 | ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff | ||
| 900 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 901 | ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff | ||
| 902 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 903 | ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff | ||
| 904 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 905 | ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff | ||
| 906 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 907 | fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff | ||
| 908 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 909 | fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff | ||
| 910 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 911 | fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff | ||
| 912 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 913 | fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff | ||
| 914 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 915 | fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff | ||
| 916 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 917 | fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff | ||
| 918 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 919 | fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff | ||
| 920 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 921 | ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff | ||
| 922 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 923 | ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff | ||
| 924 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 925 | ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff | ||
| 926 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 927 | ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff | ||
| 928 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 929 | ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff | ||
| 930 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 931 | fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff | ||
| 932 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 933 | fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff | ||
| 934 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 935 | fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff | ||
| 936 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 937 | fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff | ||
| 938 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 939 | fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff | ||
| 940 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 941 | fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff | ||
| 942 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 943 | ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff | ||
| 944 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 945 | ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff | ||
| 946 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 947 | ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff | ||
| 948 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 949 | ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff | ||
| 950 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 951 | ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff | ||
| 952 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 953 | ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff | ||
| 954 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 955 | ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff | ||
| 956 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 957 | ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff | ||
| 958 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 959 | ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff | ||
| 960 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 961 | fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff | ||
| 962 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 963 | fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff | ||
| 964 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 965 | fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff | ||
| 966 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 967 | fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff | ||
| 968 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 969 | fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff | ||
| 970 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 971 | fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff | ||
| 972 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 973 | fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff | ||
| 974 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 975 | fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff | ||
| 976 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 977 | ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff | ||
| 978 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 979 | ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff | ||
| 980 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 981 | ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff | ||
| 982 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 983 | ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff | ||
| 984 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 985 | ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff | ||
| 986 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 987 | ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff | ||
| 988 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 989 | ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff | ||
| 990 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 991 | ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff | ||
| 992 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 993 | ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff | ||
| 994 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 995 | ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff | ||
| 996 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 997 | ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 998 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 999 | fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1000 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1001 | fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1002 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1003 | fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1004 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1005 | fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1006 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1007 | fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1008 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1009 | fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1010 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1011 | fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1012 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1013 | fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1014 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1015 | fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1016 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1017 | ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1018 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1019 | ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1020 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1021 | ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1022 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1023 | ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1024 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1025 | ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1026 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1027 | ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1028 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1029 | ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1030 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1031 | ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1032 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1033 | ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1034 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1035 | ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1036 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1037 | ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1038 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1039 | ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1040 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1041 | ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1042 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1043 | ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff | ||
| 1044 | fffffffffffffffffffffffffffffffffffffffffffffffffff8 | ||
| 1045 | |||
| 1046 | |||
| 1047 | showpage | ||
| 1048 | |||
| 1049 | % stop using temporary dictionary | ||
| 1050 | end | ||
| 1051 | |||
| 1052 | % restore original state | ||
| 1053 | origstate restore | ||
| 1054 | |||
| 1055 | %%Trailer | ||
diff --git a/etc/gnus-refcard.tex b/etc/gnus-refcard.tex new file mode 100644 index 00000000000..343de2d6f6f --- /dev/null +++ b/etc/gnus-refcard.tex | |||
| @@ -0,0 +1,1427 @@ | |||
| 1 | \documentclass{article} | ||
| 2 | |||
| 3 | % Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex | ||
| 4 | % refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and | ||
| 5 | % gnuslogo-booklet.eps). | ||
| 6 | % | ||
| 7 | % From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps), | ||
| 8 | % we can generate the refcard and the booklet version. Appropriate Makefile | ||
| 9 | % rules were added. This simplifies to distribute the refcard with Emacs. | ||
| 10 | % | ||
| 11 | % (Reiner Steib, March 2005) | ||
| 12 | |||
| 13 | \usepackage{ifthen} | ||
| 14 | \ifthenelse{\isundefined{\booklettrue}}{ | ||
| 15 | \typeout{Creating reference card...} | ||
| 16 | }{ | ||
| 17 | \typeout{Creating reference booklet...}} | ||
| 18 | |||
| 19 | \usepackage{supertabular} | ||
| 20 | |||
| 21 | \newlength{\logowidth} \setlength{\logowidth} {6.861in} | ||
| 22 | \newlength{\logoheight} \setlength{\logoheight}{7.013in} | ||
| 23 | |||
| 24 | \usepackage{graphicx} | ||
| 25 | |||
| 26 | \usepackage{geometry} | ||
| 27 | |||
| 28 | \ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 29 | % Reference Card | ||
| 30 | |||
| 31 | \def\Guide{Card}\def\guide{card} | ||
| 32 | \def\logoscale{0.25} | ||
| 33 | |||
| 34 | % Page setup for the refcard: | ||
| 35 | |||
| 36 | % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in} | ||
| 37 | % \setlength{\topmargin}{-1.0in} | ||
| 38 | % % the same settings work for A4, although there is a bit of space at the | ||
| 39 | % % top and bottom of the page. | ||
| 40 | % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in} | ||
| 41 | |||
| 42 | \ifthenelse{\isundefined{\letterpapertrue}}{ | ||
| 43 | \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm} | ||
| 44 | }{ | ||
| 45 | \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm} | ||
| 46 | } | ||
| 47 | |||
| 48 | }{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 49 | % Reference Booklet | ||
| 50 | |||
| 51 | \def\Guide{Booklet}\def\guide{booklet} | ||
| 52 | \def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib | ||
| 53 | |||
| 54 | % FIXME: Use geometry package. --rsteib | ||
| 55 | % \ifthenelse{\isundefined{\letterpapertrue}}{ | ||
| 56 | % \textwidth 4.9in \textheight 7.35in \topmargin -1.0in | ||
| 57 | % }{ | ||
| 58 | % \textwidth 4.5in \textheight 7.5in \topmargin -1.0in | ||
| 59 | % } | ||
| 60 | % \oddsidemargin -0.5in \evensidemargin -0.5in | ||
| 61 | \ifthenelse{\isundefined{\letterpapertrue}}{ | ||
| 62 | \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm} | ||
| 63 | }{ | ||
| 64 | % FIXME: Use geometry package. --rsteib | ||
| 65 | \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm} | ||
| 66 | } | ||
| 67 | |||
| 68 | \def\sec{\section} | ||
| 69 | \def\subsec{\subsection} | ||
| 70 | \def\subsubsec{\subsubsection} | ||
| 71 | \def\blankpage{\vspace*{\fill}\par | ||
| 72 | %\centerline{(This page intentionally left blank.)} | ||
| 73 | \par\vspace*{\fill}\pagebreak} | ||
| 74 | }%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 75 | |||
| 76 | % \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % | ||
| 77 | %% include file for the Gnus refcard and booklet | ||
| 78 | |||
| 79 | \def\progver{5.10}\def\refver{5.10-2} % program and refcard versions | ||
| 80 | \def\date{Mar, 2005} | ||
| 81 | \def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} | ||
| 82 | |||
| 83 | %% | ||
| 84 | \newlength{\keycolwidth} | ||
| 85 | \newenvironment{keys}[1]% #1 is the widest key | ||
| 86 | {\nopagebreak%\noindent% | ||
| 87 | \settowidth{\keycolwidth}{#1}% | ||
| 88 | \addtolength{\keycolwidth}{\tabcolsep}% | ||
| 89 | \addtolength{\keycolwidth}{-\columnwidth}% | ||
| 90 | \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% | ||
| 91 | {\end{supertabular}\\} | ||
| 92 | |||
| 93 | %% uncomment the first definition if you do not want pagebreaks in maps | ||
| 94 | %%\newcommand{\esamepage}{\samepage} | ||
| 95 | \newcommand{\esamepage}{} | ||
| 96 | |||
| 97 | \newcommand*{\B}[1]{{\bf#1})} % bold l)etter | ||
| 98 | |||
| 99 | \newcommand{\Title}{% | ||
| 100 | \begin{center} | ||
| 101 | {\bf\LARGE Gnus \progver\ Reference \Guide\\} | ||
| 102 | %{\normalsize \Guide\ version \refver} | ||
| 103 | \end{center} | ||
| 104 | } | ||
| 105 | |||
| 106 | % \newcommand*{\LogoOLD}[1]{\centerline{% | ||
| 107 | % \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight | ||
| 108 | % {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}} | ||
| 109 | |||
| 110 | \newcommand*{\Logo}[1]{\centerline{% | ||
| 111 | \includegraphics[width=\logoscale\logowidth]{gnus-logo}}} | ||
| 112 | |||
| 113 | \newcommand{\Copyright}{% | ||
| 114 | \begin{center} | ||
| 115 | Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* | ||
| 116 | Copyright \copyright\ 1995 Vladimir Alexiev | ||
| 117 | $<$vladimir@cs.ualberta.ca$>$.\\* | ||
| 118 | Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* | ||
| 119 | Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\* | ||
| 120 | Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne | ||
| 121 | Ingebrigtsen.\\* | ||
| 122 | and the Emacs Help Bindings feature (C-h b).\\* | ||
| 123 | Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* | ||
| 124 | \end{center} | ||
| 125 | |||
| 126 | Permission is granted to make and distribute copies of this reference | ||
| 127 | \guide{} provided the copyright notice and this permission are preserved on | ||
| 128 | all copies. Please send corrections, additions and suggestions to the | ||
| 129 | current maintainer's email address. \Guide{} last edited on \date. | ||
| 130 | } | ||
| 131 | |||
| 132 | \newcommand{\Notes}{% | ||
| 133 | \subsection*{Notes} | ||
| 134 | {\esamepage | ||
| 135 | Gnus is complex. Currently it has some 876 interactive (user-callable) | ||
| 136 | functions. Of these 618 are in the two major modes (Group and | ||
| 137 | Summary/Article). Many of these functions have more than one binding, some | ||
| 138 | have 3 or even 4 bindings. The total number of keybindings is 677. So in | ||
| 139 | order to save 40\% space, every function is listed only once on this | ||
| 140 | \guide, under the ``more logical'' binding. Alternative bindings are given | ||
| 141 | in parentheses in the beginning of the description. | ||
| 142 | |||
| 143 | Many Gnus commands are affected by the numeric prefix. Normally you enter a | ||
| 144 | prefix by holding the Meta key and typing a number, but in most Gnus modes | ||
| 145 | you don't need to use Meta since the digits are not self-inserting. The | ||
| 146 | prefixed behavior of commands is given in [brackets]. Often the prefix is | ||
| 147 | used to specify: | ||
| 148 | |||
| 149 | \quad [distance] How many objects to move the point over. | ||
| 150 | |||
| 151 | \quad [scope] How many objects to operate on (including the current one). | ||
| 152 | |||
| 153 | \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it | ||
| 154 | determines how many objects to operate on. Else if there are some objects | ||
| 155 | marked with the process mark \#, these are operated on. Else only the | ||
| 156 | current object is affected. | ||
| 157 | |||
| 158 | \quad [level] A group subscribedness level. Only groups with a lower or | ||
| 159 | equal level will be affected by the operation. If no prefix is given, | ||
| 160 | `gnus-group-default-list-level' is used. If | ||
| 161 | `gnus-group-use-permanent-levels', then a prefix to the `g' and `l' | ||
| 162 | commands will also set the default level. | ||
| 163 | |||
| 164 | \quad [score] An article score. If no prefix is given, | ||
| 165 | `gnus-summary-default-score' is used. \\*[\baselineskip] | ||
| 166 | % some keys | ||
| 167 | Gnus startup-commands:\\* | ||
| 168 | \begin{keys}{M-x gnus-unplugged} | ||
| 169 | M-x gnus & start Gnus. \\ | ||
| 170 | M-x gnus-no-server & start Gnus without connecting to server | ||
| 171 | (i.e. to read mail). \\ | ||
| 172 | \end{keys} | ||
| 173 | Additionally, there are the two commands \texttt{gnus-plugged} and | ||
| 174 | \texttt{gnus-unplugged}, which are only used if you want to download | ||
| 175 | news and/or read previously downloaded news offline (see C-c C-i g Gnus | ||
| 176 | Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in | ||
| 177 | \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus | ||
| 178 | Unplugged. | ||
| 179 | % | ||
| 180 | \begin{keys}{C-c C-i} | ||
| 181 | C-c C-i & Go to the Gnus online {\bf info}.\\ | ||
| 182 | C-c C-b & Send a Gnus {\bf bug} report.\\ | ||
| 183 | \end{keys} | ||
| 184 | }} | ||
| 185 | |||
| 186 | \newcommand{\GroupLevels}{% | ||
| 187 | The table below assumes that you use the default Gnus levels. | ||
| 188 | Fill your user-specific levels in the blank cells.\\[1\baselineskip] | ||
| 189 | \begin{tabular}{|c|l|l|} | ||
| 190 | \hline | ||
| 191 | Level & Groups & Status \\ | ||
| 192 | \hline | ||
| 193 | 1 & draft/mail groups & \\ | ||
| 194 | 2 & mail groups & \\ | ||
| 195 | 3 & & subscribed \\ | ||
| 196 | 4 & & \\ | ||
| 197 | 5 & default list level & \\ | ||
| 198 | \hline | ||
| 199 | 6 & & unsubscribed \\ | ||
| 200 | 7 & & \\ | ||
| 201 | \hline | ||
| 202 | 8 & & zombies \\ | ||
| 203 | \hline | ||
| 204 | 9 & & killed \\ | ||
| 205 | \hline | ||
| 206 | \end{tabular}} | ||
| 207 | |||
| 208 | \newcommand{\MarkCharacters}{% | ||
| 209 | {\esamepage If a command directly sets a mark, it is shown in parentheses.\\* | ||
| 210 | \newlength{\markcolwidth} | ||
| 211 | \settowidth{\markcolwidth}{` '}% widest character | ||
| 212 | \addtolength{\markcolwidth}{4\tabcolsep} | ||
| 213 | \addtolength{\markcolwidth}{-\columnwidth} | ||
| 214 | \newlength{\markdblcolwidth} | ||
| 215 | \setlength{\markdblcolwidth}{\columnwidth} | ||
| 216 | \addtolength{\markdblcolwidth}{-2\tabcolsep} | ||
| 217 | \begin{tabular}{|c|p{-\markcolwidth}|} | ||
| 218 | \hline | ||
| 219 | \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.} | ||
| 220 | All these marks appear in the first column of the summary line, and so | ||
| 221 | are mutually exclusive.}\\ | ||
| 222 | \hline | ||
| 223 | ` ' & (M-u, M SPC, M c) Not read.\\ | ||
| 224 | ! & (!, M !, M t) Ticked (interesting).\\ | ||
| 225 | ? & (?, M ?) Dormant (only followups are interesting).\\ | ||
| 226 | E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ | ||
| 227 | G & (C, B DEL) Canceled article (or deleted in mailgroups).\\ | ||
| 228 | \$ & (M-d, M s x, S x). Marked as spam.\\ | ||
| 229 | \hline\hline | ||
| 230 | \multicolumn{2}{|p{\markdblcolwidth}|} | ||
| 231 | {The marks below mean that the article | ||
| 232 | is read (killed, uninteresting), and have more or less the same effect. | ||
| 233 | Some commands however explicitly differentiate between them (e.g.\ M | ||
| 234 | M-C-r, adaptive scoring).}\\ | ||
| 235 | \hline | ||
| 236 | r & (d, M d, M r) Deleted (marked as {\bf read}).\\ | ||
| 237 | C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ | ||
| 238 | F & SOUPed article. See the manual.\\ | ||
| 239 | O & {\bf Old} (read in a previous session).\\ | ||
| 240 | K & (k, M k; C-k, M K) {\bf Killed}.\\ | ||
| 241 | M & Article marked as read by duplicate suppression.\\ | ||
| 242 | Q & Article is part of a sparse thread (see ``Threading'' | ||
| 243 | in the manual).\\ | ||
| 244 | R & {\bf Read} (viewed in actuality).\\ | ||
| 245 | X & Killed by a kill file.\\ | ||
| 246 | Y & Killed due to low score.\\ | ||
| 247 | \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline | ||
| 248 | \multicolumn{2}{|p{\markdblcolwidth}|} | ||
| 249 | {{\bf Marks not affecting visibility}}\\ | ||
| 250 | \hline | ||
| 251 | \# & (\#, M \#, M P p) Processable (will be affected by the next operation). | ||
| 252 | [2]\\ | ||
| 253 | A & {\bf Answered} (followed-up or replied). [2]\\ | ||
| 254 | F & Forwarded. [2]\\ | ||
| 255 | $\ast$ & Cached. [2]\\ | ||
| 256 | S & Saved. [2]\\ | ||
| 257 | N & Recently arrived. [2]\\ | ||
| 258 | . & Unseen. [2]\\ | ||
| 259 | + & Over default score. [3]\\ | ||
| 260 | $-$ & Under default score. [3]\\ | ||
| 261 | $=$ & Has children (thread underneath it). Add `\%e' to | ||
| 262 | `gnus-summary-line-format'. [3]\\ | ||
| 263 | \hline | ||
| 264 | \end{tabular} | ||
| 265 | }} | ||
| 266 | |||
| 267 | \newcommand{\GroupModeGeneral}{% | ||
| 268 | \begin{keys}{C-c M-C-x} | ||
| 269 | RET & (=) Enter this group. [Prefix: how many (read) articles to fetch. | ||
| 270 | Positive: newest articles, negative: oldest ones; non-numerical: | ||
| 271 | view all articles, not just unread]\\ | ||
| 272 | M-RET & Enter group quickly.\\ | ||
| 273 | M-SPC & Same as RET but does not expunge and hide dormants.\\ | ||
| 274 | M-C-RET & Enter group without any processing, changes will not be permanent.\\ | ||
| 275 | SPC & Select this group and display the first (unread) article. [Same | ||
| 276 | prefix as above.]\\ | ||
| 277 | ? & Give a very short help message.\\ | ||
| 278 | $<$ & Go to the beginning of the Group buffer.\\ | ||
| 279 | $>$ & Go to the end of the Group buffer.\\ | ||
| 280 | , & Jump to the lowest-level group with unread articles.\\ | ||
| 281 | . & Jump to the first group with unread articles.\\ | ||
| 282 | \^{} & Enter the Server buffer mode.\\ | ||
| 283 | a & Post an {\bf article} to a group | ||
| 284 | [Prefix: use group under point to find posting-style].\\ | ||
| 285 | b & Find {\bf bogus} groups and delete them.\\ | ||
| 286 | c & Mark all unticked articles in this group as read ({\bf catch-up}). | ||
| 287 | [p/p]\\ | ||
| 288 | g & Check the server for new articles ({\bf get}). [level]\\ | ||
| 289 | M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ | ||
| 290 | j & {\bf Jump} to a group.\\ | ||
| 291 | m & {\bf Mail} a message to someone | ||
| 292 | [Prefix: use group under point to find posting-style].\\ | ||
| 293 | n & Go to the {\bf next} group with unread articles. [distance]\\ | ||
| 294 | M-n & Go to the {\bf next} group on the same or lower level. | ||
| 295 | [distance]\\ | ||
| 296 | p & (DEL) Go to the {\bf previous} group with unread articles. | ||
| 297 | [distance]\\ | ||
| 298 | M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\ | ||
| 299 | q & {\bf Quit} Gnus.\\ | ||
| 300 | r & Re-read the init file ({\bf reset}).\\ | ||
| 301 | s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if | ||
| 302 | `gnus-save-newsrc-file').\\ | ||
| 303 | z & Suspend (kill all buffers of) Gnus.\\ | ||
| 304 | B & {\bf Browse} a foreign server.\\ | ||
| 305 | C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\ | ||
| 306 | F & {\bf Find} new groups and process them.\\ | ||
| 307 | N & Go to the {\bf next} group. [distance]\\ | ||
| 308 | P & Go to the {\bf previous} group. [distance]\\ | ||
| 309 | Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ | ||
| 310 | R & {\bf Restart} Gnus.\\ | ||
| 311 | Z & Clear the dribble buffer.\\ | ||
| 312 | M-c & Clear data from group (marks and list of read articles). \\ | ||
| 313 | C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level | ||
| 314 | (depending on `gnus-group-sort-function').\\ | ||
| 315 | C-c C-x & Run all expirable articles in this group through the {\bf expiry} | ||
| 316 | process.\\ | ||
| 317 | C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ | ||
| 318 | C-c M-g & Activate all {\bf groups}.\\ | ||
| 319 | C-c C-i & Gnus online-manual ({\bf info}).\\ | ||
| 320 | C-x C-t & {\bf Transpose} two groups.\\ | ||
| 321 | H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ | ||
| 322 | H c & Display this group's {\bf charter}. [Prefix: query for group]\\ | ||
| 323 | H C & Display this group's {\bf control message} (using | ||
| 324 | ange-ftp). [Prefix: query for group]\\ | ||
| 325 | H v & (V) Display the Gnus {\bf version} number.\\ | ||
| 326 | H d & (C-c C-d) Show the {\bf description} of this group | ||
| 327 | [Prefix: re-read from server].\\ | ||
| 328 | M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\ | ||
| 329 | D g & Regenerate a Sieve script from group parameters.\\ | ||
| 330 | D u & Regenerate Sieve script and {\bf upload} to server.\\ | ||
| 331 | \end{keys} | ||
| 332 | } | ||
| 333 | |||
| 334 | \newcommand{\ListGroups}{% | ||
| 335 | {\esamepage | ||
| 336 | \begin{keys}{A M} | ||
| 337 | A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ | ||
| 338 | A k & (C-c C-l) List all {\bf killed} groups. | ||
| 339 | [Prefix: look at active-file from server]\\ | ||
| 340 | A l & List all groups on a specific level. | ||
| 341 | [Prefix: also list groups with no unread articles]\\ | ||
| 342 | A a & (C-c C-a) List all groups whose names match a regexp | ||
| 343 | ({\bf apropos}).\\ | ||
| 344 | A A & List the server's active-file.\\ | ||
| 345 | A M & List groups that {\bf match} a regexp.\\ | ||
| 346 | A m & List groups that {\bf match} a regexp and have unread articles. | ||
| 347 | [level]\\ | ||
| 348 | A s & (l) List all {\bf subscribed} groups with unread articles. | ||
| 349 | [level; 5 and lower is the default]\\ | ||
| 350 | A u & (L) List all groups (including read and {\bf unsubscribed}). | ||
| 351 | [level; 7 and lower is the default]\\ | ||
| 352 | A z & List all {\bf zombie} groups.\\ | ||
| 353 | A c & List all groups with cached articles. [level]\\ | ||
| 354 | A ? & List all groups with dormant articles. [level]\\ | ||
| 355 | \end{keys} | ||
| 356 | } | ||
| 357 | |||
| 358 | \newcommand{\CreateEditGroups}{% | ||
| 359 | {\esamepage | ||
| 360 | The select methods are indicated in parentheses.\\* | ||
| 361 | \begin{keys}{G DEL} | ||
| 362 | G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ | ||
| 363 | G c & {\bf Customize} this group's parameters.\\ | ||
| 364 | G d & Make a {\bf directory} group (every file must be a posting and files | ||
| 365 | must have numeric names). (nndir)\\ | ||
| 366 | G D & Enter a {\bf directory} as a (temporary) group. | ||
| 367 | (nneething without recording articles read)\\ | ||
| 368 | G e & (M-e) {\bf Edit} this group's select method.\\ | ||
| 369 | G E & {\bf Edit} this group's info (select method, articles read, etc).\\ | ||
| 370 | G f & Make a group based on a {\bf file}. (nndoc)\\ | ||
| 371 | G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\ | ||
| 372 | G k & Make a {\bf kiboze} group. (nnkiboze)\\ | ||
| 373 | G m & {\bf Make} a new group.\\ | ||
| 374 | G p & Edit this group's {\bf parameters}.\\ | ||
| 375 | G r & Rename this group (does not work with read-only groups!).\\ | ||
| 376 | G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\ | ||
| 377 | G v & Add this group to a {\bf virtual} group. [p/p]\\ | ||
| 378 | G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ | ||
| 379 | G w & Create ephemeral group based on web-search. [Prefix: make solid group | ||
| 380 | instead]\\ | ||
| 381 | G R & Make an {\bf RSS} group.\\ | ||
| 382 | G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\ | ||
| 383 | G x & Expunge all deleted articles in an nnimap mailbox.\\ | ||
| 384 | G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\ | ||
| 385 | \end{keys} | ||
| 386 | You can also create mail-groups and read your mail with Gnus (very useful | ||
| 387 | if you are subscribed to mailing lists), using one of the methods | ||
| 388 | nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info | ||
| 389 | (C-c C-i g Reading Mail RET). | ||
| 390 | }} | ||
| 391 | |||
| 392 | % TODO: | ||
| 393 | \newcommand{\SoupCommands}{% | ||
| 394 | \begin{keys}{G s w} | ||
| 395 | G s b & gnus-group-brew-soup: not documented.\\ | ||
| 396 | G s p & gnus-soup-pack-packet: not documented.\\ | ||
| 397 | G s r & nnsoup-pack-replies: not documented.\\ | ||
| 398 | G s s & gnus-soup-send-replies: not documented.\\ | ||
| 399 | G s w & gnus-soup-save-areas: not documented.\\ | ||
| 400 | \end{keys}} | ||
| 401 | |||
| 402 | \newcommand{\MarkGroups}{% | ||
| 403 | \begin{keys}{M m} | ||
| 404 | M m & (\#) Set the process {\bf mark} on this group. [scope]\\ | ||
| 405 | M r & Mark all groups matching regular expression.\\ | ||
| 406 | M u & (M-\#) Remove the process mark from this group ({\bf unmark}). | ||
| 407 | [scope]\\ | ||
| 408 | M U & Remove the process mark from all groups (\textbf{umark all}).\\ | ||
| 409 | M w & Mark all groups in the current region. [prefix: unmark]\\ | ||
| 410 | M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\ | ||
| 411 | \end{keys}} | ||
| 412 | |||
| 413 | \newcommand{\GroupTopicsGeneral}{% | ||
| 414 | {\esamepage | ||
| 415 | Topics are ``categories'' for groups. Press t in the group-buffer to | ||
| 416 | toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\* | ||
| 417 | \begin{keys}{C-c C-x} | ||
| 418 | T n & Prompt for topic {\bf name} and create it.\\ | ||
| 419 | T m & {\bf Move} the current group to some other topic [p/p].\\ | ||
| 420 | T j & {\bf Jump} to a topic.\\ | ||
| 421 | T c & {\bf Copy} the current group to some other topic [p/p].\\ | ||
| 422 | T D & Remove (not delete) the current group [p/p].\\ | ||
| 423 | T M & {\bf Move} all groups matching a regexp to a topic.\\ | ||
| 424 | T C & {\bf Copy} all groups matching a regexp to a topic.\\ | ||
| 425 | T H & Toggle {\bf hiding} of empty topics.\\ | ||
| 426 | T r & {\bf Rename} a topic.\\ | ||
| 427 | T DEL & Delete an empty topic.\\ | ||
| 428 | T \# & Mark all groups in the current topic with the process-mark.\\ | ||
| 429 | T M-\# & Remove the process-mark from all groups in the current topic.\\ | ||
| 430 | T TAB & (TAB) Indent current topic [Prefix: unindent].\\ | ||
| 431 | M-TAB & Unindent the current topic.\\ | ||
| 432 | RET & (SPC) Either unfold topic or enter group [level].\\ | ||
| 433 | T s & {\bf Show} the current topic. [Prefix: show permanently]\\ | ||
| 434 | T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\ | ||
| 435 | C-c C-x & Expire all articles in current group or topic.\\ | ||
| 436 | C-k & {\bf Kill} a group or topic.\\ | ||
| 437 | C-y & {\bf Yank} a group or topic.\\ | ||
| 438 | A T & List active-file using {\bf topics}.\\ | ||
| 439 | G p & Edit topic-{\bf parameters}.\\ | ||
| 440 | T M-n & Go to {\bf next} topic. [distance]\\ | ||
| 441 | T M-p & Go to {\bf previous} topic. [distance]\\ | ||
| 442 | \end{keys} | ||
| 443 | } | ||
| 444 | } | ||
| 445 | |||
| 446 | \newcommand{\TopicSorting}{% | ||
| 447 | {\esamepage | ||
| 448 | \begin{keys}{T S m} | ||
| 449 | T S a & Sort {\bf alphabetically}.\\ | ||
| 450 | T S u & Sort by number of {\bf unread} articles.\\ | ||
| 451 | T S l & Sort by group {\bf level}.\\ | ||
| 452 | T S v & Sort by group score ({\bf value}).\\ | ||
| 453 | T S r & Sort by group {\bf rank}.\\ | ||
| 454 | T S m & Sort by {\bf method}.\\ | ||
| 455 | T S e & Sort by {\bf server} name.\\ | ||
| 456 | T S s & Sort according to `gnus-group-sort-function'.\\ | ||
| 457 | \end{keys} | ||
| 458 | With a prefix these commands will sort in reverse order. | ||
| 459 | } | ||
| 460 | } | ||
| 461 | |||
| 462 | \newcommand{\SubscribeKillYankGroups}{% | ||
| 463 | {\esamepage | ||
| 464 | \begin{keys}{S C-k} | ||
| 465 | S k & (C-k) {\bf Kill} this group.\\ | ||
| 466 | S l & Set the {\bf level} of this group. [p/p]\\ | ||
| 467 | S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ | ||
| 468 | S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ | ||
| 469 | S w & (C-w) Kill all groups in the region.\\ | ||
| 470 | S y & (C-y) {\bf Yank} the last killed group.\\ | ||
| 471 | S z & Kill all {\bf zombie} groups.\\ | ||
| 472 | S C-k & Kill all groups on a certain level.\\ | ||
| 473 | \end{keys} | ||
| 474 | } | ||
| 475 | } | ||
| 476 | |||
| 477 | \newcommand{\SummaryModeGeneral}{% | ||
| 478 | {\esamepage | ||
| 479 | \begin{keys}{M-RET} | ||
| 480 | SPC & (A SPC, A n) Select an article, scroll it one page, move to the | ||
| 481 | next one.\\ | ||
| 482 | DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ | ||
| 483 | RET & (A RET) Scroll this article one line forward. [distance]\\ | ||
| 484 | M-RET & (A M-RET) Scroll this article one line backward. [distance]\\ | ||
| 485 | = & Expand the Summary window (fullsize). | ||
| 486 | [Prefix: shrink to display article window]\\ | ||
| 487 | % | ||
| 488 | \& & Execute a command on all articles whose header matches a regexp. | ||
| 489 | [Prefix: move backwards]\\ | ||
| 490 | M-\& & Execute a command on all articles having the process mark.\\ | ||
| 491 | % | ||
| 492 | M-n & (G M-n) Go to the {\bf next} summary line of an unread article. | ||
| 493 | [distance]\\ | ||
| 494 | M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. | ||
| 495 | [distance]\\ | ||
| 496 | M-s & {\bf Search} through all subsequent articles for a regexp.\\ | ||
| 497 | M-r & Search through all previous articles for a regexp.\\ | ||
| 498 | % | ||
| 499 | A P & {\bf Postscript}-print current buffer.\\ | ||
| 500 | % | ||
| 501 | M-k & Edit this group's {\bf kill} file.\\ | ||
| 502 | M-K & Edit the general {\bf kill} file.\\ | ||
| 503 | % | ||
| 504 | C-t & Toggle {\bf truncation} of summary lines.\\ | ||
| 505 | Y g & Regenerate the summary-buffer.\\ | ||
| 506 | Y c & Insert all cached articles into the summary-buffer.\\ | ||
| 507 | % | ||
| 508 | M-C-e & {\bf Edit} the group-parameters.\\ | ||
| 509 | M-C-a & Customize the group-parameters.\\ | ||
| 510 | % | ||
| 511 | % article handling | ||
| 512 | % | ||
| 513 | A $<$ & ($<$, A b) Scroll to the beginning of this article.\\ | ||
| 514 | A $>$ & ($>$, A e) Scroll to the end of this article.\\ | ||
| 515 | A s & (s) Perform an i{\bf search} in the article buffer.\\ | ||
| 516 | % | ||
| 517 | A D & (C-d) Un{\bf digestify} this article into a separate group. | ||
| 518 | [Prefix: force digest]\\ | ||
| 519 | M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped | ||
| 520 | in an nnvirtual group [p/p]\\ | ||
| 521 | % | ||
| 522 | A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ | ||
| 523 | A r & (\^{}, A \^{}) Fetch the parent(s) of this article. | ||
| 524 | [Prefix: if positive fetch \textit{n} ancestors; | ||
| 525 | negative: fetch only the \textit{n}th ancestor]\\ | ||
| 526 | A t & {\bf Translate} this article.\\ | ||
| 527 | A R & Fetch all articles mentioned in the {\bf References}-header.\\ | ||
| 528 | A T & Fetch full \textbf{thread} in which the current article appears.\\ | ||
| 529 | M-\^{} & Fetch the article with a given Message-ID.\\ | ||
| 530 | S y & {\bf Yank} the current article into an existing message-buffer. | ||
| 531 | [p/p]\\ | ||
| 532 | A M & Setup group parameters for {\bf mailing} lists from | ||
| 533 | headers. [Prefix: replace old settings]\\ | ||
| 534 | \end{keys} | ||
| 535 | } | ||
| 536 | } | ||
| 537 | |||
| 538 | \newcommand{\MIMESummary}{% | ||
| 539 | {\esamepage | ||
| 540 | For the commands operating on one MIME part (a subset of gnus-article-*), a | ||
| 541 | prefix selects which part to operate on. If the point is placed over a | ||
| 542 | MIME button in the article buffer, use the corresponding bindings for the | ||
| 543 | article buffer instead. | ||
| 544 | |||
| 545 | \begin{keys}{W M w} | ||
| 546 | K v & (b, W M b) {\bf View} the MIME-part.\\ | ||
| 547 | K o & {\bf Save} the MIME part.\\ | ||
| 548 | K c & {\bf Copy} the MIME part.\\ | ||
| 549 | K e & View the MIME part {\bf externally}.\\ | ||
| 550 | K i & View the MIME part {\bf internally}.\\ | ||
| 551 | K $\mid$ & Pipe the MIME part to an external command.\\ | ||
| 552 | K b & Make all the MIME parts have buttons in front of them.\\ | ||
| 553 | K m & Try to repair {\bf multipart-headers}.\\ | ||
| 554 | K C & View the MIME part using a different {\bf charset}.\\ | ||
| 555 | X m & Save all parts matching a MIME type to a directory. [p/p]\\ | ||
| 556 | M-t & Toggle the buttonized display of the article buffer.\\ | ||
| 557 | W M w & Decode RFC2047-encoded words in the article headers.\\ | ||
| 558 | W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\ | ||
| 559 | W M v & View all MIME parts in the current article.\\ | ||
| 560 | \end{keys} | ||
| 561 | } | ||
| 562 | } | ||
| 563 | |||
| 564 | \newcommand{\SortSummary}{% | ||
| 565 | {\esamepage | ||
| 566 | \begin{keys}{C-c C-s C-a} | ||
| 567 | C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\ | ||
| 568 | % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus | ||
| 569 | C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\ | ||
| 570 | C-c C-s C-i & Sort the summary-buffer by article score.\\ | ||
| 571 | C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\ | ||
| 572 | C-c C-s C-c & Sort the summary-buffer by length.\\ | ||
| 573 | C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\ | ||
| 574 | C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\ | ||
| 575 | C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\ | ||
| 576 | C-c C-s C-o & Sort the summary-buffer using the default method.\\ | ||
| 577 | \end{keys} | ||
| 578 | With a prefix these functions sort in reverse order. | ||
| 579 | } | ||
| 580 | } | ||
| 581 | |||
| 582 | \newcommand{\MailGroups}{% formerly \Bsubmap | ||
| 583 | {\esamepage | ||
| 584 | These commands (except `B c') are only valid in a mail group.\\* | ||
| 585 | \begin{keys}{B M-C-e} | ||
| 586 | B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!). | ||
| 587 | [p/p]\\ | ||
| 588 | B B & Crosspost this article to another group.\\ | ||
| 589 | B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ | ||
| 590 | B e & {\bf Expire} all expirable articles in this group. [p/p]\\ | ||
| 591 | B i & {\bf Import} a random file into this group.\\ | ||
| 592 | B I & Create an empty article in this group.\\ | ||
| 593 | B m & {\bf Move} the article from one mail group to another. [p/p]\\ | ||
| 594 | B p & Query whether the article was {\bf posted} as well.\\ | ||
| 595 | B q & {\bf Query} where the article will end up after fancy splitting\\ | ||
| 596 | B r & {\bf Respool} this mail article. [p/p]\\ | ||
| 597 | B t & {\bf Trace} the fancy splitting patterns applied to this article.\\ | ||
| 598 | B w & (e) Edit this article.\\ | ||
| 599 | B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group | ||
| 600 | (!). [p/p]\\ | ||
| 601 | K E & {\bf Encrypt} article body. [p/p]\\ | ||
| 602 | \end{keys} | ||
| 603 | } | ||
| 604 | } | ||
| 605 | |||
| 606 | \newcommand{\DraftGroup}{% formerly \Dsubmap | ||
| 607 | {\esamepage | ||
| 608 | The ``drafts''-group contains messages that have been saved but not sent | ||
| 609 | and rejected articles. \\* | ||
| 610 | \begin{keys}{B DEL} | ||
| 611 | D e & \textbf{edit} message.\\ | ||
| 612 | D s & \textbf{Send} message. [p/p]\\ | ||
| 613 | D S & \textbf{Send} all messages.\\ | ||
| 614 | D t & \textbf{Toggle} sending (mark as unsendable).\\ | ||
| 615 | B DEL & \textbf{Delete} message (like in mailgroup).\\ | ||
| 616 | \end{keys} | ||
| 617 | } | ||
| 618 | } | ||
| 619 | |||
| 620 | \newcommand{\SelectArticles}{% formerly \Gsubmap | ||
| 621 | {\esamepage | ||
| 622 | These commands select the target article. They do not understand the prefix.\\* | ||
| 623 | \begin{keys}{G C-n} | ||
| 624 | h & Enter article-buffer.\\ | ||
| 625 | G b & (,) Go to the {\bf best} article (the one with highest score).\\ | ||
| 626 | G f & (.) Go to the {\bf first} unread article.\\ | ||
| 627 | G n & (n) Go to the {\bf next} unread article.\\ | ||
| 628 | G p & (p) Go to the {\bf previous} unread article.\\ | ||
| 629 | % | ||
| 630 | G N & (N) Go to {\bf the} next article.\\ | ||
| 631 | G P & (P) Go to the {\bf previous} article.\\ | ||
| 632 | % | ||
| 633 | G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ | ||
| 634 | G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ | ||
| 635 | % | ||
| 636 | G l & (l) Go to the previously read article ({\bf last-read-article}).\\ | ||
| 637 | G o & Pop an article off the summary history and go to it.\\ | ||
| 638 | % | ||
| 639 | G g & Search an article via subject.\\ | ||
| 640 | G j & (j) Search an article via Message-Id or subject.\\ | ||
| 641 | \end{keys} | ||
| 642 | } | ||
| 643 | } | ||
| 644 | |||
| 645 | \newcommand{\ArticleModeGeneral}{% | ||
| 646 | {\esamepage | ||
| 647 | The normal navigation keys work in Article mode. Some additional keys are:\\ | ||
| 648 | \begin{keys}{C-c RET} | ||
| 649 | C-c \^{} & Get the article with the Message-ID near point.\\ | ||
| 650 | C-c RET & Send reply to address near point.\\ | ||
| 651 | h & Go to the \textbf{header}-line of the article in the | ||
| 652 | summary-buffer.\\ | ||
| 653 | s & Go to \textbf{summary}-buffer.\\ | ||
| 654 | RET & (middle mouse button) Activate the button at point to follow | ||
| 655 | an URL or Message-ID.\\ | ||
| 656 | TAB & Move the point to the next button.\\ | ||
| 657 | M-TAB & Move point to previous button.\\ | ||
| 658 | \end{keys} | ||
| 659 | } | ||
| 660 | } | ||
| 661 | |||
| 662 | \newcommand{\WashArticle}{% formerly \Wsubmap | ||
| 663 | {\esamepage | ||
| 664 | \begin{keys}{W W H} | ||
| 665 | W 6 & Translate a base64 article.\\ | ||
| 666 | W a & Strip certain {\bf headers} from body.\\ | ||
| 667 | W b & Make Message-IDs and URLs in the article mouse-clickable | ||
| 668 | {\bf buttons}.\\ | ||
| 669 | W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\ | ||
| 670 | W d & Treat {\bf dumbquotes}.\\ | ||
| 671 | W e & Treat {\bf emphasized} text.\\ | ||
| 672 | W h & Treat {\bf HTML}.\\ | ||
| 673 | W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\ | ||
| 674 | W m & {\bf Morse} decode article.\\ | ||
| 675 | W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\ | ||
| 676 | W p & Verify X-{\bf PGP}-Sig header.\\ | ||
| 677 | W q & Treat {\bf quoted}-printable in the article.\\ | ||
| 678 | W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ | ||
| 679 | W s & Verify (and decrypt) a {\bf signed} message.\\ | ||
| 680 | W t & (t) {\bf Toggle} display of all headers.\\ | ||
| 681 | W u & {\bf Unsplit} broken URLs.\\ | ||
| 682 | W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ | ||
| 683 | W w & Do word {\bf wrap} in the article.\\ | ||
| 684 | W B & Add clickable {\bf buttons} to the article headers.\\ | ||
| 685 | W C & {\bf Capitalize} first word in each sentence.\\ | ||
| 686 | W Q & Fill long lines.\\ | ||
| 687 | W Z & Translate a HZ-encoded article.\\ | ||
| 688 | % | ||
| 689 | W G u & {\bf Unfold} folded header lines.\\ | ||
| 690 | W G f & {\bf Fold} all header lines.\\ | ||
| 691 | W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\ | ||
| 692 | % | ||
| 693 | W Y c & Repair broken {\bf citations}.\\ | ||
| 694 | W Y a & Repair broken {\bf attribution} lines.\\ | ||
| 695 | W Y u & {\bf Unwrap} broken citation lines.\\ | ||
| 696 | W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\ | ||
| 697 | \end{keys} | ||
| 698 | } | ||
| 699 | } | ||
| 700 | |||
| 701 | \newcommand{\BlankAndWhitespace}{% | ||
| 702 | {\esamepage | ||
| 703 | \begin{keys}{W E w} | ||
| 704 | W E l & Strip blank {\bf lines} from the beginning of the article.\\ | ||
| 705 | W E m & Replace blank lines with empty lines and remove {\bf multiple} | ||
| 706 | blank lines.\\ | ||
| 707 | W E t & Remove {\bf trailing} blank lines.\\ | ||
| 708 | W E a & Strip blank lines at the beginning and the end | ||
| 709 | (W E l, W E m and W E t).\\ | ||
| 710 | W E A & Strip {\bf all} blank lines.\\ | ||
| 711 | W E s & Strip leading blank lines from the article body.\\ | ||
| 712 | W E e & Strip trailing blank lines from the article body.\\ | ||
| 713 | W E w & Remove leading {\bf whitespace} from all headers.\\ | ||
| 714 | \end{keys} | ||
| 715 | } | ||
| 716 | } | ||
| 717 | |||
| 718 | \newcommand{\Picons}{% | ||
| 719 | {\esamepage | ||
| 720 | \begin{keys}{W D D} | ||
| 721 | W D s & (W g) Display {\bf smilies}.\\ | ||
| 722 | W D x & (W f) Look for and display any X-{\bf Face} headers.\\ | ||
| 723 | W D d & Display any Face headers.\\ | ||
| 724 | W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\ | ||
| 725 | W D m & Toggle picons in {\bf mail} headers (To and Cc).\\ | ||
| 726 | W D f & Toggle picons in {\bf From}.\\ | ||
| 727 | W D D & Remove all images from the article buffer.\\ | ||
| 728 | \end{keys} | ||
| 729 | } | ||
| 730 | } | ||
| 731 | |||
| 732 | \newcommand{\TimeAndDate}{% | ||
| 733 | {\esamepage | ||
| 734 | \begin{keys}{W T u} | ||
| 735 | W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\ | ||
| 736 | W T i & Display the article timestamp in {\bf ISO} 8601.\\ | ||
| 737 | W T l & Display the article timestamp in the {\bf local} timezone.\\ | ||
| 738 | W T s & Display according to `gnus-article-time-format'.\\ | ||
| 739 | W T e & Display the time {\bf elapsed} since it was sent.\\ | ||
| 740 | W T o & Display the {\bf original} timestamp.\\ | ||
| 741 | W T p & Display the date in format that's {\bf | ||
| 742 | pronounceable} in English.\\ | ||
| 743 | \end{keys} | ||
| 744 | } | ||
| 745 | } | ||
| 746 | |||
| 747 | \newcommand{\HideHighlightArticle}{% | ||
| 748 | {\esamepage | ||
| 749 | \begin{keys}{W W C-c} | ||
| 750 | W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ | ||
| 751 | W W h & Hide article {\bf headers}.\\ | ||
| 752 | W W b & Hide {\bf boring} headers.\\ | ||
| 753 | W W s & Hide {\bf signature}.\\ | ||
| 754 | W W l & Hide {\bf list} identifiers in subject-header.\\ | ||
| 755 | W W P & Hide {\bf PEM} (privacy enhanced messages).\\ | ||
| 756 | W W B & Hide banner specified by group parameter.\\ | ||
| 757 | W W c & Hide {\bf citation}.\\ | ||
| 758 | W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\ | ||
| 759 | W W C & Hide cited text in articles that aren't roots.\\ | ||
| 760 | W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ | ||
| 761 | W H c & Highlight article {\bf citations}.\\ | ||
| 762 | W H h & Highlight article {\bf headers}.\\ | ||
| 763 | W H s & Highlight article {\bf signature}.\\ | ||
| 764 | \end{keys} | ||
| 765 | For all hiding-commands: A positive prefix always hides, and a negative | ||
| 766 | prefix will show what was previously hidden. | ||
| 767 | }} | ||
| 768 | |||
| 769 | \newcommand{\MIMEArticleMode}{% | ||
| 770 | {\esamepage | ||
| 771 | \begin{keys}{RET} | ||
| 772 | RET & (BUTTON-2) Toggle display of the MIME object.\\ | ||
| 773 | v & Prompt for a method and then view object using this method.\\ | ||
| 774 | o & Prompt for a filename and save the MIME object.\\ | ||
| 775 | C-o & Prompt for a filename to save the MIME object to and remove it.\\ | ||
| 776 | d & {\bf Delete} the MIME object.\\ | ||
| 777 | c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\ | ||
| 778 | i & Display the MIME object in this buffer.\\ | ||
| 779 | C & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\ | ||
| 780 | E & View internally. \\ | ||
| 781 | e & View {\bf externally}. \\ | ||
| 782 | t & View the MIME object as a different {\bf type}.\\ | ||
| 783 | p & {\bf Print} the MIME object.\\ | ||
| 784 | $\mid$ & Pipe the MIME object to a process.\\ | ||
| 785 | . & Take action on the MIME object.\\ | ||
| 786 | \end{keys} | ||
| 787 | } | ||
| 788 | } | ||
| 789 | |||
| 790 | %% end of article mode for reading .......................................... | ||
| 791 | |||
| 792 | \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap | ||
| 793 | {\esamepage | ||
| 794 | \begin{keys}{M M-C-r} | ||
| 795 | d & (M d, M r) Mark this article as read and move to the next one. | ||
| 796 | [scope]\\ | ||
| 797 | D & Mark this article as read and move to the previous one. [scope]\\ | ||
| 798 | ! & (u, M !, M t) Tick this article (mark it as interesting) and move | ||
| 799 | to the next one. [scope]\\ | ||
| 800 | U & Tick this article and move to the previous one. [scope]\\ | ||
| 801 | M ? & (?) Mark this article as dormant (only followups are | ||
| 802 | interesting). [scope]\\ | ||
| 803 | M D & Show all {\bf dormant} articles (normally they are hidden unless they | ||
| 804 | have any followups).\\ | ||
| 805 | M M-D & Hide all {\bf dormant} articles.\\ | ||
| 806 | C-w & Mark all articles between point and mark as read.\\ | ||
| 807 | M-u & (M SPC, M c) Clear all marks from this article and move to the next | ||
| 808 | one. [scope]\\ | ||
| 809 | M-U & Clear all marks from this article and move to the previous one. | ||
| 810 | [scope]\\ | ||
| 811 | % | ||
| 812 | M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\ | ||
| 813 | % | ||
| 814 | M k & (k) {\bf Kill} all articles with the same subject then select the | ||
| 815 | next unread one.\\ | ||
| 816 | M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ | ||
| 817 | % | ||
| 818 | M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\ | ||
| 819 | M C-c & {\bf Catch-up} all articles in this group.\\ | ||
| 820 | M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\ | ||
| 821 | % | ||
| 822 | M b & Set a {\bf bookmark} in this article.\\ | ||
| 823 | M B & Remove the {\bf bookmark} from this article.\\ | ||
| 824 | % | ||
| 825 | M M-r & (x) Expunge all {\bf read} articles from this group.\\ | ||
| 826 | M M-C-r & Expunge all articles having a given mark.\\ | ||
| 827 | M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ | ||
| 828 | M M C-h & Displays some more keys doing ticking slightly differently.\\ | ||
| 829 | \end{keys} | ||
| 830 | The variable `gnus-summary-goto-unread' controls what happens after a mark | ||
| 831 | has been set (C-x C-i g Setting Marks RET) | ||
| 832 | }} | ||
| 833 | |||
| 834 | \newcommand{\MarkByScore}{% | ||
| 835 | \begin{keys}{M V m} | ||
| 836 | M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ | ||
| 837 | M V k & {\bf Kill} all low-scored articles. [score]\\ | ||
| 838 | M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ | ||
| 839 | M V u & Mark all high-scored articles as interesting (tick them). [score]\\ | ||
| 840 | \end{keys} | ||
| 841 | } | ||
| 842 | } | ||
| 843 | |||
| 844 | \newcommand{\ProcessMark}{% | ||
| 845 | {\esamepage | ||
| 846 | These commands set and remove the process mark (\#). You only need to use | ||
| 847 | it if the set of articles you want to operate on is non-contiguous. Else | ||
| 848 | use a numeric prefix.\\* | ||
| 849 | \begin{keys}{M P R} | ||
| 850 | M P p & (\#, M \#) Mark this article.\\ | ||
| 851 | M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\ | ||
| 852 | M P b & Mark all articles in {\bf buffer}.\\ | ||
| 853 | M P r & Mark all articles in the {\bf region}.\\ | ||
| 854 | M P g & Unmark all articles in the region.\\ | ||
| 855 | M P R & Mark all articles matching a {\bf regexp}.\\ | ||
| 856 | M P G & Unmark all articles matching a regexp.\\ | ||
| 857 | M P t & Mark all articles in this (sub){\bf thread}.\\ | ||
| 858 | M P T & Unmark all articles in this (sub){\bf thread}.\\ | ||
| 859 | M P s & Mark all articles in the current {\bf series}.\\ | ||
| 860 | M P S & Mark all {\bf series} that already contain a marked article.\\ | ||
| 861 | M P a & Mark {\bf all} articles (in series order).\\ | ||
| 862 | M P U & \textbf{unmark} all articles.\\ | ||
| 863 | M P i & {\bf Invert} the list of process-marked articles.\\ | ||
| 864 | M P k & Push the current process-mark set onto stack and unmark | ||
| 865 | all articles.\\ | ||
| 866 | M P y & Pop process-mark set from stack and restore it.\\ | ||
| 867 | M P w & Push process-mark set on the stack.\\ | ||
| 868 | M P v & Mark all articles with score over the default score. [Prefix: score]\\ | ||
| 869 | \end{keys} | ||
| 870 | } | ||
| 871 | } | ||
| 872 | |||
| 873 | \newcommand{\Limiting}{% | ||
| 874 | {\esamepage | ||
| 875 | \begin{keys}{/M} | ||
| 876 | // & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\ | ||
| 877 | /a & Limit the summary-buffer to articles matching {\bf author}.\\ | ||
| 878 | /x & Limit depending on ``extra'' headers.\\ | ||
| 879 | /u & (x) Limit to {\bf unread} articles. | ||
| 880 | [Prefix: also exclude ticked and dormant articles]\\ | ||
| 881 | /. & Limit to unseen articles.\\ | ||
| 882 | /m & Limit to articles marked with specified {\bf mark}.\\ | ||
| 883 | /t & Ask for a number and exclude articles younger than that many days. | ||
| 884 | [Prefix: exclude older articles]\\ | ||
| 885 | /n & Limit to current article. [p/p]\\ | ||
| 886 | /w & Pop the previous limit off the stack and restore it. | ||
| 887 | [Prefix: pop all limits]\\ | ||
| 888 | /v & Limit to score. [score]\\ | ||
| 889 | /E & (M S) Include all expunged articles in the limit.\\ | ||
| 890 | /D & Include all dormant articles in the limit.\\ | ||
| 891 | /* & Limit to cached articles.\\ | ||
| 892 | Y C & Include all cached articles in the limit.\\ | ||
| 893 | /d & Exclude all dormant articles from the limit.\\ | ||
| 894 | /M & Exclude all marked articles.\\ | ||
| 895 | /T & Include all articles from the current thread in the limit.\\ | ||
| 896 | /c & Exclude all dormant articles that have no children from the limit.\\ | ||
| 897 | /C & Mark all excluded unread articles as read. | ||
| 898 | [Prefix: also mark ticked and dormant articles]\\ | ||
| 899 | /o & Insert all {\bf old} articles. [Prefix: how many]\\ | ||
| 900 | /N & Insert all {\bf new} articles.\\ | ||
| 901 | /p & Limit to articles {\bf predicated} in the `display' group parameter.\\ | ||
| 902 | % /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus | ||
| 903 | \end{keys} | ||
| 904 | } | ||
| 905 | } | ||
| 906 | |||
| 907 | \newcommand{\OutputArticles}{% formerly \Osubmap | ||
| 908 | {\esamepage | ||
| 909 | \begin{keys}{O m} | ||
| 910 | O o & (o, C-o) Save this article using the default article saver. [p/p]\\ | ||
| 911 | O b & Save this article's {\bf body} in plain file format [p/p]\\ | ||
| 912 | O f & Save this article in plain {\bf file} format. [p/p]\\ | ||
| 913 | O F & like O f, but overwrite file's contents. [p/p]\\ | ||
| 914 | O h & Save this article in {\bf mh} folder format. [p/p]\\ | ||
| 915 | O m & Save this article in {\bf mail} format. [p/p]\\ | ||
| 916 | O r & Save this article in {\bf rmail} format. [p/p]\\ | ||
| 917 | O v & Save this article in {\bf vm} format. [p/p]\\ | ||
| 918 | O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\ | ||
| 919 | O P & \textbf{Print} this article using Muttprint. [p/p]\\ | ||
| 920 | \end{keys} | ||
| 921 | } | ||
| 922 | } | ||
| 923 | |||
| 924 | \newcommand{\PostReplyetc}{% formerly \Ssubmap | ||
| 925 | {\esamepage | ||
| 926 | These commands put you in a separate news or mail buffer. See the section | ||
| 927 | about composing messages for more information.\\* | ||
| 928 | %After | ||
| 929 | %editing the article, send it by pressing C-c C-c. If you are in a | ||
| 930 | %foreign group and want to post the article using the foreign server, give | ||
| 931 | %a prefix to C-c C-c.\\* | ||
| 932 | \begin{keys}{S O m} | ||
| 933 | S p & (a) {\bf Post} an article to this group.\\ | ||
| 934 | S f & (f) Post a {\bf followup} to this article.\\ | ||
| 935 | S F & (F) Post a {\bf followup} and include the original. [p/p]\\ | ||
| 936 | S o p & Forward this article as a {\bf post} to a newsgroup.\\ | ||
| 937 | S M-c & Send a complaint about excessive crossposting to the author of this | ||
| 938 | article. [p/p]\\ | ||
| 939 | % | ||
| 940 | S m & (m) Send a {\bf mail} to some other person.\\ | ||
| 941 | S r & (r) Mail a {\bf reply} to the author of this article.\\ | ||
| 942 | S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ | ||
| 943 | S B r & Like S r but ignore the Reply-To: header.\\ | ||
| 944 | S B R & Like S R but ignore the Reply-To: header.\\ | ||
| 945 | S w & Mail a {\bf wide} reply to this article.\\ | ||
| 946 | S W & Mail a {\bf wide} reply to this article and include | ||
| 947 | the original.\\ | ||
| 948 | S v & Mail a {\bf very} wide reply to this article.\\ | ||
| 949 | S V & Mail a {\bf very} wide reply to this article and include the original.\\ | ||
| 950 | S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\ | ||
| 951 | S D b & Resend {\bf bounced} mail.\\ | ||
| 952 | S D r & {\bf Resend} mail to a different person.\\ | ||
| 953 | S D e & {\bf Edit} and resend.\\ | ||
| 954 | % | ||
| 955 | S n & Post a followup via {\bf news} even if you got the message | ||
| 956 | through mail.\\ | ||
| 957 | S N & Post a followup via {\bf news} and include the original mail. | ||
| 958 | [p/p]\\ | ||
| 959 | % | ||
| 960 | S c & (C) {\bf Cancel} this article (only works if it is | ||
| 961 | your own). [p/p]\\ | ||
| 962 | S s & {\bf Supersede} this article with a new one (only for own | ||
| 963 | articles).\\ | ||
| 964 | % | ||
| 965 | S O m & Digest these series and forward by {\bf mail}. [p/p]\\ | ||
| 966 | S O p & Digest these series and forward as a {\bf post} to a newsgroup. | ||
| 967 | [p/p]\\ | ||
| 968 | % | ||
| 969 | S u & {\bf Uuencode} a file and post it as a series.\\ | ||
| 970 | \end{keys} | ||
| 971 | If you want to cancel or supersede an article you just posted (before it | ||
| 972 | has appeared on the server), go to the *post-news* buffer, change | ||
| 973 | `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. | ||
| 974 | }} | ||
| 975 | |||
| 976 | \newcommand{\Threading}{% formerly \Tsubmap | ||
| 977 | {\esamepage | ||
| 978 | \begin{keys}{T M-\#} | ||
| 979 | T \# & Mark this thread with the process mark.\\ | ||
| 980 | T M-\# & Remove process-marks from this thread.\\ | ||
| 981 | % | ||
| 982 | T t & Re-{\bf thread} the current article's thread.\\ | ||
| 983 | T \^{} & Make the current article child of the marked (or previous) article.\\ | ||
| 984 | % movement | ||
| 985 | T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\ | ||
| 986 | T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\ | ||
| 987 | T d & {\bf Descend} this thread. [distance]\\ | ||
| 988 | T u & Ascend this thread ({\bf up}-thread). [distance]\\ | ||
| 989 | T o & Go to the top of this thread.\\ | ||
| 990 | % | ||
| 991 | T s & {\bf Show} the thread hidden under this article.\\ | ||
| 992 | T h & {\bf Hide} this (sub)thread.\\ | ||
| 993 | % | ||
| 994 | T i & {\bf Increase} the score of this thread.\\ | ||
| 995 | T l & (M-C-l) {\bf Lower} the score of this thread.\\ | ||
| 996 | % | ||
| 997 | T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix: | ||
| 998 | tick it, positive prefix: unmark it.]\\ | ||
| 999 | % | ||
| 1000 | T H & {\bf Hide} all threads.\\ | ||
| 1001 | T S & {\bf Show} all hidden threads.\\ | ||
| 1002 | T T & (M-C-t) {\bf Toggle} threading.\\ | ||
| 1003 | \end{keys} | ||
| 1004 | } | ||
| 1005 | } | ||
| 1006 | |||
| 1007 | \newcommand{\Scoring}{% formerly \Vsubmap | ||
| 1008 | {\esamepage | ||
| 1009 | Read about Adaptive Scoring in the online info.\\* | ||
| 1010 | \begin{keys}{\bf A p m l} | ||
| 1011 | V a & {\bf Add} a new score entry, specifying all elements.\\ | ||
| 1012 | V c & Specify a new score file as {\bf current}.\\ | ||
| 1013 | V e & {\bf Edit} the current score alist.\\ | ||
| 1014 | V f & Edit a score {\bf file} and make it the current one.\\ | ||
| 1015 | V m & {\bf Mark} all articles below a given score as read.\\ | ||
| 1016 | V s & Set the {\bf score} of this article.\\ | ||
| 1017 | V t & Display all score rules applied to this article ({\bf track}).\\ | ||
| 1018 | W w & List {\bf words} used in scoring.\\ | ||
| 1019 | V x & {\bf Expunge} all low-scored articles. [score]\\ | ||
| 1020 | V C & {\bf Customize} the current score file through a user-friendly | ||
| 1021 | interface.\\ | ||
| 1022 | V F & {\bf Flush} the cache of score files.\\ | ||
| 1023 | V R & {\bf Re-score} the summary buffer.\\ | ||
| 1024 | V S & Display the {\bf score} of this article.\\ | ||
| 1025 | \bf A p m l& Make a scoring entry based on this article.\\ | ||
| 1026 | \end{keys} | ||
| 1027 | The four letters stand for:\\* | ||
| 1028 | \quad \B{A}ction: I)ncrease, L)ower;\\* | ||
| 1029 | \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines, | ||
| 1030 | message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\* | ||
| 1031 | \quad \B{m}atch type:\\* | ||
| 1032 | \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\* | ||
| 1033 | \qquad date: b)efore, a)t, n)this,\\* | ||
| 1034 | \qquad number: $<$, =, $>$;\\* | ||
| 1035 | \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate. | ||
| 1036 | |||
| 1037 | If you type the second letter in uppercase, the remaining two are assumed | ||
| 1038 | to be s)ubstring and t)emporary. | ||
| 1039 | If you type the third letter in uppercase, the last one is assumed to be | ||
| 1040 | t)emporary. | ||
| 1041 | |||
| 1042 | \quad Extra keys for manual editing of a score file:\\* | ||
| 1043 | \begin{keys}{C-c C-c} | ||
| 1044 | C-c C-c & Finish editing the score file.\\ | ||
| 1045 | C-c C-d & Insert the current {\bf date} as number of days.\\ | ||
| 1046 | \end{keys} | ||
| 1047 | } | ||
| 1048 | } | ||
| 1049 | |||
| 1050 | \newcommand{\ExtractSeries}{% formerly \Xsubmap | ||
| 1051 | {\esamepage | ||
| 1052 | Gnus recognizes if the current article is part of a series (multipart | ||
| 1053 | posting whose parts are identified by numbers in their subjects, e.g.{} | ||
| 1054 | 1/10\dots10/10) and processes the series accordingly. You can mark and | ||
| 1055 | process more than one series at a time. If the posting contains any | ||
| 1056 | archives, they are expanded and gathered in a new group.\\* | ||
| 1057 | \begin{keys}{X p} | ||
| 1058 | X b & Un-{\bf binhex} these series. [p/p]\\ | ||
| 1059 | X o & Simply {\bf output} these series (no decoding). [p/p]\\ | ||
| 1060 | X p & Unpack these {\bf postscript} series. [p/p]\\ | ||
| 1061 | X s & Un-{\bf shar} these series. [p/p]\\ | ||
| 1062 | X u & {\bf Uudecode} these series. [p/p]\\ | ||
| 1063 | \end{keys} | ||
| 1064 | |||
| 1065 | Each one of these commands has four variants:\\* | ||
| 1066 | \begin{keys}{X v \bf Z} | ||
| 1067 | X \bf z & Decode these series. [p/p]\\ | ||
| 1068 | X \bf Z & Decode and save these series. [p/p]\\ | ||
| 1069 | X v \bf z & Decode and view these series. [p/p]\\ | ||
| 1070 | X v \bf Z & Decode, save and view these series. [p/p]\\ | ||
| 1071 | \end{keys} | ||
| 1072 | where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u). | ||
| 1073 | |||
| 1074 | An alternative binding for the most-often used of these commands is\\* | ||
| 1075 | \begin{keys}{C-c C-v C-v} | ||
| 1076 | C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ | ||
| 1077 | \end{keys} | ||
| 1078 | }} | ||
| 1079 | |||
| 1080 | \newcommand{\ExitSummary}{% formerly \Zsubmap | ||
| 1081 | {\esamepage | ||
| 1082 | \begin{keys}{Z G} | ||
| 1083 | Z Z & (q, Z Q) Exit this group.\\ | ||
| 1084 | Z E & (Q) {\bf Exit} without updating the group information.\\ | ||
| 1085 | % | ||
| 1086 | Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ | ||
| 1087 | Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ | ||
| 1088 | % | ||
| 1089 | Z n & Mark all articles as read and go to the {\bf next} group.\\ | ||
| 1090 | Z N & Exit and go to {\bf the} next group.\\ | ||
| 1091 | Z P & Exit and go to the {\bf previous} group.\\ | ||
| 1092 | % | ||
| 1093 | Z G & (M-g) Check for new articles in this group ({\bf get}).\\ | ||
| 1094 | Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}). | ||
| 1095 | [Prefix: select all articles, read and unread.]\\ | ||
| 1096 | Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\ | ||
| 1097 | \end{keys} | ||
| 1098 | } | ||
| 1099 | } | ||
| 1100 | |||
| 1101 | \newcommand{\MsgCompositionGeneral}{% | ||
| 1102 | Press C-c ? in the composition-buffer to get this information.\\* | ||
| 1103 | {\esamepage | ||
| 1104 | \begin{keys}{C-c C-m} | ||
| 1105 | % sending | ||
| 1106 | C-c C-c & Send message and exit. [Prefix: send via foreign server]\\ | ||
| 1107 | C-c C-s & Send message. [Prefix: send via foreign server]\\ | ||
| 1108 | C-c C-d & Don't send message (save as \textbf{draft}).\\ | ||
| 1109 | C-c C-k & \textbf{Kill} message-buffer.\\ | ||
| 1110 | C-c C-m & {\bf Mail} reply to the address near point. | ||
| 1111 | [Prefix: include the original]\\ | ||
| 1112 | % modify headers/body | ||
| 1113 | C-c C-o & Sort headers.\\ | ||
| 1114 | C-c C-e & \textbf{Elide} region.\\ | ||
| 1115 | C-c C-v & Kill everything outside region.\\ | ||
| 1116 | C-c C-r & Do a \textbf{Rot-13} on the body.\\ | ||
| 1117 | C-c C-w & Insert signature (from `message-signature-file').\\ | ||
| 1118 | C-c C-z & Kill everything up to signature.\\ | ||
| 1119 | C-c C-y & \textbf{Yank} original message.\\ | ||
| 1120 | C-c C-q & Fill the yanked message.\\ | ||
| 1121 | C-c M-C-y & \textbf{Yank} a buffer and quote it.\\ | ||
| 1122 | M-RET & Insert four newlines and format quoted text. [Prefix: | ||
| 1123 | justify as well]\\ | ||
| 1124 | C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\ | ||
| 1125 | \end{keys} | ||
| 1126 | } | ||
| 1127 | } | ||
| 1128 | |||
| 1129 | \newcommand{\MsgCompositionMovementArticle}{% | ||
| 1130 | The following functions create the header-field if necessary.\\* | ||
| 1131 | {\esamepage | ||
| 1132 | \begin{keys}{C-c C-f C-u} | ||
| 1133 | C-c TAB & Move to \textbf{signature}.\\ | ||
| 1134 | C-c C-b & Move to \textbf{body}.\\ | ||
| 1135 | C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\ | ||
| 1136 | C-c C-f C-c & Move to \textbf{Cc:}.\\ | ||
| 1137 | C-c C-f C-b & Move to \textbf{Bcc:}.\\ | ||
| 1138 | C-c C-f C-w & Move to \textbf{Fcc:}.\\ | ||
| 1139 | C-c C-f C-s & Move to \textbf{Subject:}.\\ | ||
| 1140 | C-c C-f C-r & Move to \textbf{Reply-To:}.\\ | ||
| 1141 | C-c C-f C-f & Move to \textbf{Followup-To:}.\\ | ||
| 1142 | C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\ | ||
| 1143 | C-c C-f C-u & Move to \textbf{Summary:}.\\ | ||
| 1144 | C-c C-f C-k & Move to \textbf{Keywords:}.\\ | ||
| 1145 | C-c C-f C-d & Move to \textbf{Distribution:}.\\ | ||
| 1146 | C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\ | ||
| 1147 | C-c C-f C-o & Move to \textbf{From:}.\\ | ||
| 1148 | C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for | ||
| 1149 | an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\ | ||
| 1150 | C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\ | ||
| 1151 | C-c M-n & Insert \textbf{Disposition-Notification-To:} | ||
| 1152 | (request receipt).\\ | ||
| 1153 | \end{keys} | ||
| 1154 | } | ||
| 1155 | } | ||
| 1156 | |||
| 1157 | \newcommand{\MsgCompositionMML}{% | ||
| 1158 | {\esamepage | ||
| 1159 | \begin{keys}{C-c C-m P} | ||
| 1160 | C-c C-m f & (C-c C-a) Attach \textbf{file}.\\ | ||
| 1161 | C-c C-m b & Attach contents of \textbf{buffer}.\\ | ||
| 1162 | C-c C-m e & Attach \textbf{external} file (ftp..).\\ | ||
| 1163 | C-c C-m P & Create MIME-\textbf{preview} (new | ||
| 1164 | buffer). [Prefix: show raw MIME preview]\\ | ||
| 1165 | C-c C-m v & \textbf{Validate} article.\\ | ||
| 1166 | C-c C-m p & Insert \textbf{part}.\\ | ||
| 1167 | C-c C-m m & Insert \textbf{multi}-part.\\ | ||
| 1168 | C-c C-m q & \textbf{Quote} region.\\ | ||
| 1169 | C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\ | ||
| 1170 | C-c C-m c o & Encrypt message using PGP.\\ | ||
| 1171 | C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\ | ||
| 1172 | C-c C-m s s & Sign message using \textbf{S/MIME}.\\ | ||
| 1173 | C-c C-m s o & Sign message using PGP.\\ | ||
| 1174 | C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\ | ||
| 1175 | C-c C-m C-n & Remove security related MML tags from message.\\ | ||
| 1176 | % TODO: narrow headers (C-c C-m n) ? | ||
| 1177 | \end{keys} | ||
| 1178 | } | ||
| 1179 | } | ||
| 1180 | |||
| 1181 | %% TODO: | ||
| 1182 | \newcommand{\ServerMode}{% | ||
| 1183 | {\esamepage | ||
| 1184 | To enter this mode, press \^{} while in Group mode.\\* | ||
| 1185 | \begin{keys}{SPC} | ||
| 1186 | SPC & (RET) Browse this server.\\ | ||
| 1187 | a & {\bf Add} a new server.\\ | ||
| 1188 | c & {\bf Copy} this server.\\ | ||
| 1189 | e & {\bf Edit} a server.\\ | ||
| 1190 | k & {\bf Kill} this server. [scope]\\ | ||
| 1191 | l & {\bf List} all servers.\\ | ||
| 1192 | q & Return to the group buffer ({\bf quit}).\\ | ||
| 1193 | s & Request that the server scan its sources for new articles.\\ | ||
| 1194 | g & Request that the server regenerate its data.\\ | ||
| 1195 | y & {\bf Yank} the previously killed server.\\ | ||
| 1196 | O & Try to {\bf open} a connection to this server.\\ | ||
| 1197 | C & {\bf Close} connection to this server.\\ | ||
| 1198 | D & Mark this server as unreachable ({\bf deny}).\\ | ||
| 1199 | M-o & {\bf Open} the connection to all servers.\\ | ||
| 1200 | M-c & {\bf Close} the connection to all servers.\\ | ||
| 1201 | R & Make all denied servers into closed servers.\\ | ||
| 1202 | L & Set server status to offline.\\ | ||
| 1203 | \end{keys} | ||
| 1204 | } | ||
| 1205 | } | ||
| 1206 | |||
| 1207 | \newcommand{\BrowseServer}{% | ||
| 1208 | {\esamepage | ||
| 1209 | To enter this mode, press `B' while in Group mode.\\* | ||
| 1210 | \begin{keys}{RET} | ||
| 1211 | RET & Enter the current group.\\ | ||
| 1212 | SPC & Enter the current group and display the first article.\\ | ||
| 1213 | ? & Give a very short help message.\\ | ||
| 1214 | n & Go to the {\bf next} group. [distance]\\ | ||
| 1215 | p & Go to the {\bf previous} group. [distance]\\ | ||
| 1216 | q & (l) {\bf Quit} browse mode.\\ | ||
| 1217 | u & Subscribe to the current group. [scope]\\ | ||
| 1218 | \end{keys} | ||
| 1219 | } | ||
| 1220 | } | ||
| 1221 | |||
| 1222 | \newcommand{\GroupUnplugged}{% | ||
| 1223 | {\esamepage | ||
| 1224 | \begin{keys}{J S} | ||
| 1225 | J j & Toggle plugged-state.\\ | ||
| 1226 | J s & Fetch articles from all groups for offline-reading.\\ | ||
| 1227 | J u & Fetch all eligible articles from this group.\\ | ||
| 1228 | J S & \textbf{Send} all sendable messages in the drafts group.\\ | ||
| 1229 | % | ||
| 1230 | J c & Enter \textbf{category} buffer.\\ | ||
| 1231 | J a & \textbf{Add} this group to an Agent category [p/p].\\ | ||
| 1232 | J r & \textbf{Remove} this group from its Agent category [p/p].\\ | ||
| 1233 | J Y & Synchronize flags changed while unplugged with remote server.\\ | ||
| 1234 | \end{keys} | ||
| 1235 | } | ||
| 1236 | } | ||
| 1237 | |||
| 1238 | \newcommand{\SummaryUnplugged}{% | ||
| 1239 | {\esamepage | ||
| 1240 | \begin{keys}{J M-\#} | ||
| 1241 | J \# & \textbf{Mark} the article for downloading.\\ | ||
| 1242 | J M-\# & \textbf{Unmark} the article for downloading.\\ | ||
| 1243 | @ & \textbf{Toggle} whether to download the article.\\ | ||
| 1244 | J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\ | ||
| 1245 | J u & Download all downloadable articles from group.\\ | ||
| 1246 | \end{keys} | ||
| 1247 | } | ||
| 1248 | } | ||
| 1249 | |||
| 1250 | \newcommand{\ServerUnplugged}{% | ||
| 1251 | {\esamepage | ||
| 1252 | \begin{keys}{J a} | ||
| 1253 | J a & \textbf{Add} the current server to the list of servers covered | ||
| 1254 | by the agent.\\ | ||
| 1255 | J r & \textbf{Remove} the current server from the list of servers covered | ||
| 1256 | by the agent.\\ | ||
| 1257 | \end{keys} | ||
| 1258 | } | ||
| 1259 | } | ||
| 1260 | |||
| 1261 | % end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % | ||
| 1262 | |||
| 1263 | |||
| 1264 | % o some things might not be updated: scoring and server modes, maybe more | ||
| 1265 | % o Gnus Unplugged category-buffer commands need to be written | ||
| 1266 | |||
| 1267 | \begin{document} | ||
| 1268 | |||
| 1269 | \def\progver{5.10}\def\refver{5.10-1} % program and refcard versions | ||
| 1270 | \def\date{Jan 10th, 2004} | ||
| 1271 | \def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} | ||
| 1272 | |||
| 1273 | \ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 1274 | \raggedbottom\raggedright | ||
| 1275 | \twocolumn | ||
| 1276 | % use \tiny to shrink it to 4 pages (needs a high-resolution printer though) | ||
| 1277 | % \tiny | ||
| 1278 | \scriptsize | ||
| 1279 | \pagestyle{plain} | ||
| 1280 | \Title | ||
| 1281 | \par | ||
| 1282 | \Logo{refcard} | ||
| 1283 | }{ | ||
| 1284 | \setcounter{page}{0} | ||
| 1285 | \thispagestyle{empty} | ||
| 1286 | \vspace*{\fill} | ||
| 1287 | \Title | ||
| 1288 | \vspace{0.4in} | ||
| 1289 | \Logo{booklet} | ||
| 1290 | \vspace*{\fill} | ||
| 1291 | \pagebreak | ||
| 1292 | }%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 1293 | |||
| 1294 | % TODO: how does this work ? | ||
| 1295 | %\tableofcontents | ||
| 1296 | |||
| 1297 | \Notes | ||
| 1298 | % | ||
| 1299 | |||
| 1300 | \section*{Group-Mode} | ||
| 1301 | \GroupModeGeneral | ||
| 1302 | \subsection*{Group Subscribedness-Levels} | ||
| 1303 | \GroupLevels | ||
| 1304 | \subsection*{List Groups} | ||
| 1305 | \ListGroups | ||
| 1306 | \subsection*{Create/Edit Foreign Groups} | ||
| 1307 | \CreateEditGroups | ||
| 1308 | \subsection*{Unsubscribe, Kill and Yank Groups} | ||
| 1309 | \SubscribeKillYankGroups | ||
| 1310 | \subsection*{Mark Groups} | ||
| 1311 | \MarkGroups | ||
| 1312 | \subsection*{Group-Unplugged} | ||
| 1313 | \GroupUnplugged | ||
| 1314 | % topics in group-mode | ||
| 1315 | \subsection*{Group Topics} | ||
| 1316 | \GroupTopicsGeneral | ||
| 1317 | \subsubsection*{Topic Sorting} | ||
| 1318 | \TopicSorting | ||
| 1319 | |||
| 1320 | % \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak} | ||
| 1321 | |||
| 1322 | % summary-mode | ||
| 1323 | \section*{Summary Mode} | ||
| 1324 | \SummaryModeGeneral | ||
| 1325 | \subsection*{Select Articles} | ||
| 1326 | \SelectArticles | ||
| 1327 | % | ||
| 1328 | \subsection*{Threading} | ||
| 1329 | \Threading | ||
| 1330 | % | ||
| 1331 | \subsection*{Limiting} | ||
| 1332 | \Limiting | ||
| 1333 | \subsection*{Sort the Summary-Buffer} | ||
| 1334 | \SortSummary | ||
| 1335 | \subsection*{Score (Value) Commands} | ||
| 1336 | \Scoring | ||
| 1337 | |||
| 1338 | \ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 1339 | \subsection*{Output Articles} | ||
| 1340 | \OutputArticles | ||
| 1341 | \subsection*{Extract Series (Uudecode etc)} | ||
| 1342 | \ExtractSeries | ||
| 1343 | }{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 1344 | |||
| 1345 | \subsection*{MIME operations from the Summary-Buffer} | ||
| 1346 | \MIMESummary | ||
| 1347 | |||
| 1348 | \ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 1349 | \subsection*{Extract Series (Uudecode etc)} | ||
| 1350 | \ExtractSeries | ||
| 1351 | \subsection*{Output Articles} | ||
| 1352 | \OutputArticles | ||
| 1353 | }%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
| 1354 | |||
| 1355 | % | ||
| 1356 | \subsection*{Post, Followup, Reply, Forward, Cancel} | ||
| 1357 | \PostReplyetc | ||
| 1358 | |||
| 1359 | \ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard | ||
| 1360 | |||
| 1361 | \subsection*{Message Composition} | ||
| 1362 | |||
| 1363 | \MsgCompositionGeneral | ||
| 1364 | \subsubsection*{Jumping in message-buffer} | ||
| 1365 | \MsgCompositionMovementArticle | ||
| 1366 | \subsubsection*{Attachments/MML} | ||
| 1367 | \MsgCompositionMML | ||
| 1368 | % marking articles | ||
| 1369 | \subsection*{Mark Articles} | ||
| 1370 | \MarkArticlesGeneral | ||
| 1371 | \subsubsection*{Mark Based on Score} | ||
| 1372 | \MarkByScore | ||
| 1373 | \subsubsection*{The Process Mark} | ||
| 1374 | \ProcessMark | ||
| 1375 | \subsubsection*{Mark Indication-Characters} | ||
| 1376 | \MarkCharacters | ||
| 1377 | % | ||
| 1378 | \ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% | ||
| 1379 | |||
| 1380 | \subsection*{Summary-Unplugged} | ||
| 1381 | \SummaryUnplugged | ||
| 1382 | \subsection*{Mail-Group Commands} | ||
| 1383 | \MailGroups | ||
| 1384 | \subsection*{Draft-Group Commands} | ||
| 1385 | \DraftGroup | ||
| 1386 | % exiting | ||
| 1387 | \subsection*{Exit the Summary-Buffer} | ||
| 1388 | \ExitSummary | ||
| 1389 | % | ||
| 1390 | % | ||
| 1391 | \section*{Article Mode (reading)} | ||
| 1392 | \ArticleModeGeneral | ||
| 1393 | \subsection*{Wash the Article-Buffer} | ||
| 1394 | \WashArticle | ||
| 1395 | \subsubsection*{Blank Lines and Whitespace} | ||
| 1396 | \BlankAndWhitespace | ||
| 1397 | \subsubsection*{Picons, X-faces, Smileys} | ||
| 1398 | \Picons | ||
| 1399 | \subsubsection*{Time and Date} | ||
| 1400 | \TimeAndDate | ||
| 1401 | \subsection*{Hide/Highlight Parts of the Article} | ||
| 1402 | \HideHighlightArticle | ||
| 1403 | \subsection*{MIME operations from the Article-Buffer (reading)} | ||
| 1404 | \MIMEArticleMode | ||
| 1405 | % | ||
| 1406 | % | ||
| 1407 | \section*{Server Mode} | ||
| 1408 | \ServerMode | ||
| 1409 | \subsection*{Unplugged-Server} | ||
| 1410 | \ServerUnplugged | ||
| 1411 | % | ||
| 1412 | % | ||
| 1413 | \section*{Browse Server Mode} | ||
| 1414 | \BrowseServer | ||
| 1415 | |||
| 1416 | %\pagebreak | ||
| 1417 | \vspace*{\fill} | ||
| 1418 | \Copyright | ||
| 1419 | |||
| 1420 | \end{document} | ||
| 1421 | |||
| 1422 | %%% Local Variables: | ||
| 1423 | %%% mode: latex | ||
| 1424 | %%% TeX-master: t | ||
| 1425 | %%% End: | ||
| 1426 | |||
| 1427 | % arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1 | ||
diff --git a/leim/ChangeLog b/leim/ChangeLog index 988575249e0..b88f4c9254a 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog | |||
| @@ -1,7 +1,12 @@ | |||
| 1 | 2005-03-18 handa <handa@m17n.org> | 1 | 2005-03-26 Kenichi Handa <handa@m17n.org> |
| 2 | |||
| 3 | * quail/latin-ltx.el ("TeX"): Enable quail-completion by typing | ||
| 4 | TAB. | ||
| 5 | |||
| 6 | 2005-03-18 Kenichi Handa <handa@m17n.org> | ||
| 2 | 7 | ||
| 3 | * quail/thai.el (quail-thai-update-translation): Delete it. | 8 | * quail/thai.el (quail-thai-update-translation): Delete it. |
| 4 | (thai-generate-quail-map): Generate is simple map. | 9 | (thai-generate-quail-map): Generate a simpler map. |
| 5 | ("thai-kesmanee"): Don't use quail-thai-update-translation. | 10 | ("thai-kesmanee"): Don't use quail-thai-update-translation. |
| 6 | (thai-generate-quail-map): Likewise. | 11 | (thai-generate-quail-map): Likewise. |
| 7 | 12 | ||
diff --git a/leim/quail/latin-ltx.el b/leim/quail/latin-ltx.el index e670316b212..4b75135e79b 100644 --- a/leim/quail/latin-ltx.el +++ b/leim/quail/latin-ltx.el | |||
| @@ -39,7 +39,8 @@ system, including many technical ones. Examples: | |||
| 39 | \\'a -> á \\`{a} -> à | 39 | \\'a -> á \\`{a} -> à |
| 40 | \\pi -> π \\int -> ∫ ^1 -> ¹" | 40 | \\pi -> π \\int -> ∫ ^1 -> ¹" |
| 41 | 41 | ||
| 42 | nil t t nil nil nil nil nil nil nil t) | 42 | '(("\t" . quail-completion)) |
| 43 | t t nil nil nil nil nil nil nil t) | ||
| 43 | 44 | ||
| 44 | (quail-define-rules | 45 | (quail-define-rules |
| 45 | ("!`" ?¡) | 46 | ("!`" ?¡) |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6ca04808b67..91e775869e6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,12 +1,524 @@ | |||
| 1 | 2005-03-31 Kenichi Handa <handa@etlken2> | ||
| 2 | |||
| 3 | * textmodes/fill.el (fill-text-properties-at): New function. | ||
| 4 | (fill-newline): Use fill-text-properties-at instead of | ||
| 5 | text-properties-at. | ||
| 6 | |||
| 7 | 2005-03-31 Karl Berry <karl@freefriends.org> | ||
| 8 | |||
| 9 | * textmodes/tex-mode.el (tex-compile): shell-quote-argument, | ||
| 10 | not comint-quote-filename. | ||
| 11 | |||
| 12 | 2005-03-31 Olive Lin <olive.lin@versateladsl.be> (tiny change) | ||
| 13 | |||
| 14 | * textmodes/tex-mode.el (tex-start-tex) shell-quote-argument, | ||
| 15 | not comint-quote-filename. | ||
| 16 | |||
| 17 | 2005-03-31 Thien-Thi Nguyen <ttn@gnu.org> | ||
| 18 | |||
| 19 | * help-fns.el (help-with-tutorial): Revert last change. | ||
| 20 | |||
| 21 | 2005-03-31 Kim F. Storm <storm@cua.dk> | ||
| 22 | |||
| 23 | * emulation/cua-base.el (cua-scroll-down): Add CUA property. | ||
| 24 | |||
| 25 | 2005-03-30 Paul Eggert <eggert@cs.ucla.edu> | ||
| 26 | |||
| 27 | * calendar/cal-china.el: Update reference to "Calendrical | ||
| 28 | Calculations" book; there's a new edition. | ||
| 29 | * calendar/cal-coptic.el: Likewise. | ||
| 30 | * calendar/cal-french.el: Likewise. | ||
| 31 | * calendar/cal-hebrew.el: Likewise. | ||
| 32 | * calendar/cal-islam.el: Likewise. | ||
| 33 | * calendar/cal-iso.el: Likewise. | ||
| 34 | * calendar/cal-julian.el: Likewise. | ||
| 35 | * calendar/cal-mayan.el: Likewise. | ||
| 36 | * calendar/cal-persia.el: Likewise. | ||
| 37 | * calendar/calendar.el: Likewise. | ||
| 38 | * calendar/holidays.el: Likewise. | ||
| 39 | * calendar/lunar.el: Likewise. | ||
| 40 | * calendar/solar.el: Likewise. | ||
| 41 | |||
| 42 | * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing | ||
| 43 | white space from doc string. | ||
| 44 | |||
| 45 | 2005-03-30 Jay Belanger <belanger@truman.edu> | ||
| 46 | |||
| 47 | * calc/calc-help.el (calc-full-help): Remove email address. | ||
| 48 | |||
| 49 | 2005-03-30 Thien-Thi Nguyen <ttn@gnu.org> | ||
| 50 | |||
| 51 | * help-fns.el (help-with-tutorial): Delete title line. | ||
| 52 | |||
| 53 | 2005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 54 | |||
| 55 | * calendar/cal-x.el (calendar-one-frame-setup) | ||
| 56 | (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t | ||
| 57 | rather than 'symbol for set-window-dedicated-p. | ||
| 58 | |||
| 59 | * calendar/appt.el (appt-buffer-name): Make it a constant. | ||
| 60 | (appt-add): Doc fix. | ||
| 61 | |||
| 62 | * filesets.el (filesets-menu-path, filesets-menu-before) | ||
| 63 | (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs. | ||
| 64 | (filesets-menu-cache-file): Use directory ~/.emacs.d. | ||
| 65 | (filesets-add-submenu): Delete and use add-submenu instead. | ||
| 66 | |||
| 67 | 2005-03-30 Carsten Dominik <dominik@science.uva.nl> | ||
| 68 | |||
| 69 | * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) | ||
| 70 | (org-agenda-convert-date, org-agenda-goto-calendar): New commands. | ||
| 71 | (org-diary-default-entry): New function. | ||
| 72 | (org-get-entries-from-diary): Better parsing of diary entries | ||
| 73 | (org-agenda-check-no-diary): New function. | ||
| 74 | ("diary-lib"): Advice to function `add-to-diary-list', to allow | ||
| 75 | linking to diary entries. | ||
| 76 | (org-agenda-execute-calendar-command): New function | ||
| 77 | (org-agenda): Improved visible section in window. And | ||
| 78 | use `org-fit-agenda-window'. | ||
| 79 | (org-fit-agenda-window): New option. | ||
| 80 | (org-move-subtree-down): Better handling of empty lines | ||
| 81 | at end of subtree. | ||
| 82 | (org-cycle): Numeric prefix is interpreted now as show-subtree N | ||
| 83 | levels up. | ||
| 84 | (org-fontify-done-headline): New option. | ||
| 85 | (org-headline-done-face): New face. | ||
| 86 | (org-set-font-lock-defaults): Use `org-headline-done-face'. | ||
| 87 | (org-table-copy-down): renamed from | ||
| 88 | `org-table-copy-from-above'. When current field is non-empty, it | ||
| 89 | is copied to next row. | ||
| 90 | (org-table-copy-from-above): Fixed bug which made it | ||
| 91 | impossible to copy fields containing only a single non-white | ||
| 92 | character. | ||
| 93 | |||
| 94 | 2005-03-30 Kim F. Storm <storm@cua.dk> | ||
| 95 | |||
| 96 | * kmacro.el (kmacro-end-macro): Isearch may store this command | ||
| 97 | into the macro -- so ignore it when executing keyboard macro. | ||
| 98 | |||
| 99 | 2005-03-30 Nick Roberts <nickrob@snap.net.nz> | ||
| 100 | |||
| 101 | * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position. | ||
| 102 | |||
| 103 | 2005-03-29 Kenichi Handa <handa@m17n.org> | ||
| 104 | |||
| 105 | * language/thai.el ("Thai"): Set setup-function and exit-function | ||
| 106 | for Thai language environment. | ||
| 107 | |||
| 108 | * language/thai-util.el: Require thai-word. | ||
| 109 | (thai-word-mode-map): New variable. | ||
| 110 | (thai-word-mode): New minor mode. | ||
| 111 | (setup-thai-language-environment-internal): New function. | ||
| 112 | (exit-thai-language-environment-internal): New function. | ||
| 113 | |||
| 114 | * language/thai-word.el (thai-word-table): Declare it by defvar, | ||
| 115 | use dolist to initialize it. | ||
| 116 | (thai-kill-word, thai-backward-kill-word, thai-transpose-words) | ||
| 117 | (thai-fill-find-break-point): New functions. | ||
| 118 | |||
| 119 | 2005-03-29 Richard M. Stallman <rms@gnu.org> | ||
| 120 | |||
| 121 | * simple.el (idle-update-delay): Move definition up. | ||
| 122 | (set-mark): Doc fix. | ||
| 123 | |||
| 124 | 2005-03-29 Chong Yidong <cyd@stupidchicken.com> | ||
| 125 | |||
| 126 | * longlines.el: New file. | ||
| 127 | |||
| 128 | * simple.el (buffer-substring-filters): New variable. | ||
| 129 | (filter-buffer-substring): New function. | ||
| 130 | (kill-region, copy-region-as-kill): Use it. | ||
| 131 | |||
| 132 | * register.el (copy-to-register, append-to-register) | ||
| 133 | (prepend-to-register): Use filter-buffer-substring. | ||
| 134 | |||
| 135 | 2005-03-30 Nick Roberts <nickrob@snap.net.nz> | ||
| 136 | |||
| 137 | * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text. | ||
| 138 | (gud-filter-pending-text): Move in front of gdb. | ||
| 139 | (gud-overlay-arrow-position): New variable. | ||
| 140 | (gud-sentinel, gud-display-line): Use it in place of | ||
| 141 | overlay-arrow-position. | ||
| 142 | |||
| 143 | 2005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 144 | |||
| 145 | * progmodes/fortran.el (fortran-if-indent): Doc fix. | ||
| 146 | (fortran-font-lock-keywords-2): Add "where", "elsewhere". | ||
| 147 | (fortran-font-lock-keywords-4): New variable. | ||
| 148 | (fortran-blocks-re, fortran-end-block-re) | ||
| 149 | (fortran-start-block-re): New constants, for hideshow. | ||
| 150 | (hs-special-modes-alist): Add a Fortran entry. | ||
| 151 | (fortran-mode-map): Bind fortran-end-of-block, | ||
| 152 | fortran-beginning-of-block to \M-\C-n, \M-\C-p. | ||
| 153 | (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4. | ||
| 154 | (fortran-looking-at-if-then, fortran-end-of-block) | ||
| 155 | (fortran-beginning-of-block): New functions, for hideshow. | ||
| 156 | |||
| 157 | * progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc | ||
| 158 | fix. Tweak regexp. | ||
| 159 | (f90-beginning-of-block): Push mark first. | ||
| 160 | |||
| 161 | 2005-03-29 Jay Belanger <belanger@truman.edu> | ||
| 162 | |||
| 163 | * calc/calc.el: Update copyright date. | ||
| 164 | (calc-version): Increase to 2.1. | ||
| 165 | (calc-version-date): Remove. | ||
| 166 | |||
| 167 | * calc/calc-help.el: Update copyright date. | ||
| 168 | (calc-full-help): Remove reference to calc-version-date. | ||
| 169 | Update copyright date. | ||
| 170 | |||
| 171 | 2005-03-29 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 172 | |||
| 173 | * vc.el (vc-do-command): Use a pipe for async processes, so password | ||
| 174 | prompts don't show up at places where the user can't reply. | ||
| 175 | |||
| 176 | 2005-03-29 Olive Lin <olive.lin@versateladsl.be> (tiny change) | ||
| 177 | |||
| 178 | * textmodes/tex-mode.el (tex-send-command): shell-quote-argument | ||
| 179 | on the file name we pass to the inferior shell. | ||
| 180 | |||
| 181 | 2005-03-29 Stephan Stahl <stahl@eos.franken.de> (tiny change) | ||
| 182 | |||
| 183 | * progmodes/which-func.el (which-function): Be robust in the face of an | ||
| 184 | imenu--make-index-alist failure. | ||
| 185 | |||
| 186 | 2005-03-29 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 187 | |||
| 188 | * reveal.el (reveal-mode-map): Don't override C-a and C-e. | ||
| 189 | |||
| 190 | * progmodes/python.el (python-preoutput-filter): Fix last change. | ||
| 191 | |||
| 192 | 2005-03-29 Lute Kamstra <lute@gnu.org> | ||
| 193 | |||
| 194 | * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded | ||
| 195 | functions and compiled macros. | ||
| 196 | (debug-convert-byte-code): Handle macros too. | ||
| 197 | (debug-on-entry-1): Don't signal an error when trying to clear a | ||
| 198 | function that is not set to debug on entry. | ||
| 199 | |||
| 200 | 2005-03-29 Jay Belanger <belanger@truman.edu> | ||
| 201 | |||
| 202 | * calc/calc-lang.el: Add functions to math-function-table | ||
| 203 | properties of tex and math. | ||
| 204 | |||
| 205 | 2005-03-29 Kenichi Handa <handa@m17n.org> | ||
| 206 | |||
| 207 | * ps-mule.el (ps-mule-plot-string): Translate characters by | ||
| 208 | ps-print-translation-table. | ||
| 209 | (ps-mule-begin-job): Call find-charset-region/string with | ||
| 210 | ps-print-translation-table. | ||
| 211 | (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1. | ||
| 212 | |||
| 213 | * ps-print.el (ps-print-translation-table): New variable. | ||
| 214 | (ps-plot-region): Translate characters by ps-print-translation-table. | ||
| 215 | |||
| 216 | 2005-03-29 Juri Linkov <juri@jurta.org> | ||
| 217 | |||
| 218 | * simple.el (next-error-highlight-timer): New variable. | ||
| 219 | |||
| 220 | * progmodes/compile.el (compilation-goto-locus): | ||
| 221 | Use `next-error-highlight-timer' instead of `sit-for'. | ||
| 222 | |||
| 223 | 2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 224 | |||
| 225 | * mail/supercite.el (sc-mail-field): Use assoc-string. | ||
| 226 | (sc-get-address): Simplify regexps. | ||
| 227 | |||
| 228 | * files.el (minibuffer-with-setup-hook): New macro. | ||
| 229 | (find-file-read-args): Use it to avoid let-binding | ||
| 230 | minibuffer-with-setup-hook (which breaks turning on/off | ||
| 231 | file-name-shadow-mode while in the prompt). | ||
| 232 | |||
| 233 | * complete.el (PC-read-include-file-name-internal): Use test-completion. | ||
| 234 | |||
| 235 | 2005-03-28 Luc Teirlinck <teirllm@auburn.edu> | ||
| 236 | |||
| 237 | * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o. | ||
| 238 | |||
| 239 | 2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 240 | |||
| 241 | * window.el (window-buffer-height): Use count-screen-lines. | ||
| 242 | |||
| 243 | * progmodes/python.el (python-preoutput-leftover): New var. | ||
| 244 | (python-preoutput-filter): Use it. | ||
| 245 | (python-send-receive): Loop until all the result has been received. | ||
| 246 | |||
| 247 | 2005-03-28 Juri Linkov <juri@jurta.org> | ||
| 248 | |||
| 249 | * dired.el (dired-mode-map): Add ellipsis to "Compare directories". | ||
| 250 | |||
| 251 | * menu-bar.el (menu-bar-file-menu): Remove ellipsis from | ||
| 252 | "Recover Crashed Session". | ||
| 253 | (menu-bar-search-menu): Add ellipsis to "Search tagged files". | ||
| 254 | (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files". | ||
| 255 | (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name". | ||
| 256 | (menu-bar-goto-menu): Add ellipsis to "Tags Apropos". | ||
| 257 | (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset". | ||
| 258 | (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual". | ||
| 259 | (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual". | ||
| 260 | (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages". | ||
| 261 | |||
| 262 | * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu): | ||
| 263 | Remove ellipsis from "Ediff Manual", "Customize Ediff", "List | ||
| 264 | Ediff Sessions", "Toggle use of separate control buffer frame", | ||
| 265 | "Use separate frame for Ediff control buffer". | ||
| 266 | |||
| 267 | * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to | ||
| 268 | Bookmark", "Set Bookmark", "Insert Contents", "Insert Location", | ||
| 269 | "Rename Bookmark", "Delete Bookmark". | ||
| 270 | |||
| 271 | * info.el (Info-mode-menu): Remove ellipsis from "Index". | ||
| 272 | Add ellipsis to "Lookup a String", "Lookup a string in all indices". | ||
| 273 | Add `:active Info-index-alternatives' to "Next Matching Item". | ||
| 274 | |||
| 275 | * wdired.el (wdired-change-to-wdired-mode): | ||
| 276 | Mention `wdired-abort-changes' key in the initial message. | ||
| 277 | |||
| 278 | * international/mule.el (auto-coding-alist): Associate non-ascii | ||
| 279 | image filename extensions with `no-conversion'. | ||
| 280 | |||
| 281 | 2005-03-27 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 282 | |||
| 283 | * international/iso-acc.el: | ||
| 284 | * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir. | ||
| 285 | |||
| 286 | 2005-03-26 Luc Teirlinck <teirllm@auburn.edu> | ||
| 287 | |||
| 288 | * textmodes/sgml-mode.el (html-mode): Doc update. | ||
| 289 | |||
| 290 | * autorevert.el (auto-revert-check-vc-info): Minor doc fix. | ||
| 291 | |||
| 292 | 2005-03-26 Dan Nicolaescu <dann@ics.uci.edu> | ||
| 293 | |||
| 294 | * term.el (term-move-columns): Fix face after extending a line. | ||
| 295 | (term-insert-spaces): Likewise. | ||
| 296 | (term-reset-terminal): Fix off by one error. | ||
| 297 | |||
| 298 | 2005-03-26 Eli Zaretskii <eliz@gnu.org> | ||
| 299 | |||
| 300 | * international/mule.el (auto-coding-alist): Add .xpi files. | ||
| 301 | |||
| 302 | * files.el (auto-mode-alist): Add .xpi files. | ||
| 303 | |||
| 304 | 2005-03-26 Jure Cuhalev <gandalf@owca.info> (tiny change) | ||
| 305 | |||
| 306 | * textmodes/ispell.el (ispell-dictionary-alist-6): Add slovenian. | ||
| 307 | |||
| 308 | 2005-03-26 Eli Zaretskii <eliz@gnu.org> | ||
| 309 | |||
| 310 | * term/bobcat.el: Don't use keyswap.el, since it is now obsolete. | ||
| 311 | |||
| 312 | 2005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 313 | |||
| 314 | * calendar/cal-menu.el (top level): Delete local C-down-mouse-3 | ||
| 315 | binding. Suggested by Stephan Stahl <stahl@eos.franken.de>. | ||
| 316 | |||
| 317 | * calendar/cal-move.el (calendar-beginning-of-year): Move the | ||
| 318 | cursor to Jan 1 when needed. | ||
| 319 | (calendar-end-of-year): Fix -/+ typo. | ||
| 320 | Reported by Chong Yidong <cyd@stupidchicken.com>. | ||
| 321 | |||
| 322 | 2005-03-26 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 323 | |||
| 324 | * progmodes/flymake.el (flymake-mode): Add autoload cookie. | ||
| 325 | |||
| 326 | * emacs-lisp/debug.el (debugger-record-expression): Add a missing | ||
| 327 | format to `message'. Inspired by Deepak Goel <deego@gnufans.org>. | ||
| 328 | |||
| 329 | 2005-03-25 Richard M. Stallman <rms@gnu.org> | ||
| 330 | |||
| 331 | * filesets.el (filesets-init): Add autoload. | ||
| 332 | |||
| 333 | * mail/mailalias.el (mail-directory): Doc fix. | ||
| 334 | |||
| 335 | 2005-03-25 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE> | ||
| 336 | |||
| 337 | * mail/mailalias.el (mail-directory-process): Do nothing if | ||
| 338 | mail-directory-process is an atom. | ||
| 339 | (mail-get-names): Ignore mail-directory-names if it is an atom. | ||
| 340 | (mail-directory-process defvar): Doc fix. | ||
| 341 | (mail-names): Doc fix. | ||
| 342 | |||
| 343 | 2005-03-25 Johan Bockg,Ae(Brd <bojohan+mail@dd.chalmers.se> (tiny change) | ||
| 344 | |||
| 345 | * textmodes/flyspell.el (mail-mode-flyspell-verify): Fix regexp syntax. | ||
| 346 | |||
| 347 | 2005-03-26 Kenichi Handa <handa@m17n.org> | ||
| 348 | |||
| 349 | * international/mule-util.el (detect-coding-with-priority): | ||
| 350 | Call update-coding-systems-internal before detect-coding-region. | ||
| 351 | |||
| 352 | 2005-03-26 Nick Roberts <nickrob@snap.net.nz> | ||
| 353 | |||
| 354 | * progmodes/gdb-ui.el (gdb-breakpoints-mode-map) | ||
| 355 | (gdb-frames-mode-map): Add follow-link property. | ||
| 356 | |||
| 357 | 2005-03-25 Jay Belanger <belanger@truman.edu> | ||
| 358 | |||
| 359 | * calc/calcalg2.el (calc-solve-for): Use "Variable(s)" to prompt | ||
| 360 | for variables. | ||
| 361 | |||
| 362 | 2005-03-25 Juri Linkov <juri@jurta.org> | ||
| 363 | |||
| 364 | * image-mode.el: Optimize image filename extension regexps in | ||
| 365 | autoload cookies. Associate .x[bp]m with `image-mode-maybe' | ||
| 366 | in `auto-mode-alist'. | ||
| 367 | (image-mode): Add `image-toggle-display-text' to local hook | ||
| 368 | `change-major-mode-hook'. Display the image as an image by | ||
| 369 | default. Set `cursor-type' and `truncate-lines' if the image | ||
| 370 | is already displayed. Take into account the current mode (image | ||
| 371 | or text) in message. | ||
| 372 | (image-minor-mode): New minor mode. | ||
| 373 | (image-mode-maybe, image-toggle-display-text): New functions. | ||
| 374 | (image-toggle-display): Use called-interactively-p. | ||
| 375 | Let-bind `inhibit-read-only' to t. | ||
| 376 | |||
| 377 | * image-mode.el (image-minor-mode): Set `cursor-type' and | ||
| 378 | `truncate-lines' if the image is already displayed. Add turning | ||
| 379 | image-minor-mode off to `change-major-mode-hook'. Add message. | ||
| 380 | Call `image-toggle-display-text' after turning image-minor-mode off. | ||
| 381 | |||
| 382 | 2005-03-25 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 383 | |||
| 384 | * international/mule-cmds.el (set-locale-environment): For Mac OS X's | ||
| 385 | Terminal.app, use utf-8. | ||
| 386 | (set-display-table-and-terminal-coding-system): Add coding-system arg. | ||
| 387 | (set-locale-environment): Use it. | ||
| 388 | |||
| 389 | * term/xterm.el: Undo last change, better done in mule-cmds.el. | ||
| 390 | |||
| 391 | * emacs-lisp/rx.el (rx-constituents): Add symbol-start and symbol-end. | ||
| 392 | |||
| 393 | * progmodes/python.el (python-close-block-statement-p) | ||
| 394 | (python-outdent-p, python-current-defun): Use symbol-end. | ||
| 395 | |||
| 396 | 2005-03-25 Karl Chen <quarl@cs.berkeley.edu> (tiny change) | ||
| 397 | |||
| 398 | * files.el (save-some-buffers): Doc fix. | ||
| 399 | |||
| 400 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 401 | |||
| 402 | * complete.el, thumbs.el: Replace `legal' with `valid'. | ||
| 403 | * calendar/calendar.el: Replace `legal' with `valid'. | ||
| 404 | * emacs-lisp/advice.el: Replace `legal' with `valid'. | ||
| 405 | * mail/supercite.el: Replace `legal' with `valid'. | ||
| 406 | * progmodes/cperl-mode.el, progmodes/idlw-shell.el, | ||
| 407 | progmodes/idlwave.el, progmodes/vhdl-mode.el: Replace `legal' with | ||
| 408 | `valid'. | ||
| 409 | * textmodes/reftex-vars.el, textmodes/reftex.el: Replace `legal' | ||
| 410 | with `valid'. | ||
| 411 | |||
| 412 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 413 | |||
| 414 | * calc/calc-forms.el, calc/calc-sel: Replace `illegal' with `invalid'. | ||
| 415 | * midnight.el, vc-cvs.el: Replace `illegal' with `invalid'. | ||
| 416 | * emacs-lisp/cl-macs.el: Replace `illegal' with `invalid'. | ||
| 417 | * emulation/vip.el: Replace `illegal' with `invalid'. | ||
| 418 | * eshell/esh-io.el, eshell/esh-var.el: Replace `illegal' with `invalid'. | ||
| 419 | * mail/supercite.el: Replace `illegal' with `invalid'. | ||
| 420 | * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el, | ||
| 421 | progmodes/ebnf-ebx.el, progmodes/ebnf-dtd.el, progmodes/ebnf-iso.el, | ||
| 422 | progmodes/ebnf-yac.el, progmodes/ebnf2ps.el, progmodes/idlwave.el, | ||
| 423 | progmodes/sh-script.el, progmodes/xscheme.el: Replace `illegal' with | ||
| 424 | `invalid'. | ||
| 425 | * textmodes/refbib.el, textmodes/refer.el, textmodes/reftex-cite.el, | ||
| 426 | textmodes/reftex-index.el, textmodes/reftex-parse.el, | ||
| 427 | textmodes/reftex-ref.el, textmodes/reftex-vars.el, | ||
| 428 | textmodes/reftex.el, textmodes/org.el: Replace `illegal' with `invalid'. | ||
| 429 | |||
| 430 | 2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 431 | |||
| 432 | * progmodes/flymake.el (flymake-get-file-name-mode-and-masks) | ||
| 433 | (flymake-find-buildfile, flymake-find-possible-master-files) | ||
| 434 | (flymake-check-include, flymake-parse-line): Replace loops over the | ||
| 435 | length of lists, by loops over lists, to remove silly O(n,A2(B) behavior. | ||
| 436 | |||
| 437 | * progmodes/flymake.el (flymake-ensure-ends-with-slash): Remove. | ||
| 438 | Substitute file-name-as-directory in the rest of the file. | ||
| 439 | (flymake-get-common-file-prefix): Rewrite, using compare-strings. | ||
| 440 | (flymake-replace-region): Remove unused arg `buffer'. | ||
| 441 | (flymake-check-patch-master-file-buffer): Update calls to it. | ||
| 442 | (flymake-add-err-info): Remove unused var `count'. | ||
| 443 | (flymake-mode): Use define-minor-mode. | ||
| 444 | |||
| 445 | * progmodes/flymake.el: Use with-current-buffer. | ||
| 446 | (flymake-float-time, flymake-get-temp-dir, flymake-line-end-position) | ||
| 447 | flymake-replace-regexp-in-string, flymake-line-beginning-position) | ||
| 448 | (flymake-popup-menu, flymake-current-row, flymake-selected-frame): | ||
| 449 | Avoid testing for `xemacs'. | ||
| 450 | (flymake-nop): Move. | ||
| 451 | (flymake-region-has-flymake-overlays): Return the computed value. | ||
| 452 | (flymake-reformat-err-line-patterns-from-compile-el): Use dolist. | ||
| 453 | Remove unused var `endline'. | ||
| 454 | (flymake-get-line-count): Remove unused function. | ||
| 455 | (flymake-display-err-menu-for-current-line): Unused var move-mouse-pos. | ||
| 456 | |||
| 457 | * emulation/vi.el: | ||
| 458 | * generic.el: | ||
| 459 | * hilit-chg.el (global-highlight-changes): | ||
| 460 | * hi-lock.el (hi-lock-mode): | ||
| 461 | * follow.el: find-file-hooks -> find-file-hook. | ||
| 462 | |||
| 463 | * comint.el (comint-insert-input): Obey mouse-yank-at-point. | ||
| 464 | |||
| 465 | 2005-03-24 Juri Linkov <juri@jurta.org> | ||
| 466 | |||
| 467 | * dired.el (dired-mode-map): Add menu item "Compare directories" | ||
| 468 | for dired-compare-directories. | ||
| 469 | |||
| 470 | * dired-aux.el (dired-compare-directories): Add autoload cookie. | ||
| 471 | Doc fix. Replace `read-file-name' with `read-directory-name'. | ||
| 472 | |||
| 473 | 2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 474 | |||
| 475 | * term/xterm.el: If running in Terminal.app set coding-system to utf-8. | ||
| 476 | |||
| 477 | 2005-03-24 Jay Belanger <belanger@truman.edu> | ||
| 478 | |||
| 479 | * calc/calc-embed.el (calc-embedded-mode-change): Save all | ||
| 480 | relevant mode settings in calc-embedded-original-modes when modes | ||
| 481 | are permanently changed. | ||
| 482 | |||
| 483 | 2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 484 | |||
| 485 | * autoinsert.el: find-file-hooks -> find-file-hook. | ||
| 486 | |||
| 487 | 2005-03-24 Lute Kamstra <lute@gnu.org> | ||
| 488 | |||
| 489 | * generic.el (generic-font-lock-defaults): Make it obsolete. | ||
| 490 | (generic-font-lock-keywords): New variable to replace | ||
| 491 | generic-font-lock-defaults. | ||
| 492 | (generic-mode-set-font-lock): Delete it. | ||
| 493 | (generic-mode-internal): Don't call generic-mode-set-font-lock. | ||
| 494 | (generic-bracket-support): Add docstring. | ||
| 495 | |||
| 496 | * generic-x.el: Rename generic-font-lock-defaults to | ||
| 497 | generic-font-lock-keywords throughout. | ||
| 498 | (mailagent-rules-setup-function): Delete it. | ||
| 499 | (mailagent-rules-generic-mode): Use anonymous function instead. | ||
| 500 | (show-tabs-generic-mode-font-lock-defaults-1) | ||
| 501 | (show-tabs-generic-mode-font-lock-defaults-2): Make them constants. | ||
| 502 | Quote faces. | ||
| 503 | (show-tabs-tab-face, show-tabs-space-face): Specify background, | ||
| 504 | not foreground. | ||
| 505 | |||
| 506 | * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): | ||
| 507 | Recognize define-generic-mode. | ||
| 508 | |||
| 509 | 2005-03-23 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 510 | |||
| 511 | * icomplete.el (icomplete-simple-completing-p): Don't turn on icomplete | ||
| 512 | if there's no completion table. | ||
| 513 | |||
| 1 | 2005-03-23 Miles Bader <miles@gnu.org> | 514 | 2005-03-23 Miles Bader <miles@gnu.org> |
| 2 | 515 | ||
| 3 | * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled): | 516 | * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled): |
| 4 | Remove tty-specific variants, as they're no longer needed. | 517 | Remove tty-specific variants, as they're no longer needed. |
| 5 | 518 | ||
| 6 | 2005-03-23 Lute Kamstra <lute@gnu.org> | 519 | 2005-03-23 Lute Kamstra <lute@gnu.org> |
| 7 | 520 | ||
| 8 | * generic-x.el: Code cleanup: make arguments constant whenever | 521 | * generic-x.el: Code cleanup: make args constant whenever possible. |
| 9 | possible. | ||
| 10 | (installshield-statement-keyword-list) | 522 | (installshield-statement-keyword-list) |
| 11 | (installshield-system-functions-list) | 523 | (installshield-system-functions-list) |
| 12 | (installshield-system-variables-list, installshield-types-list) | 524 | (installshield-system-variables-list, installshield-types-list) |
| @@ -14,8 +526,8 @@ | |||
| 14 | 526 | ||
| 15 | * generic.el (generic-make-keywords-list): Add autoload cookie. | 527 | * generic.el (generic-make-keywords-list): Add autoload cookie. |
| 16 | 528 | ||
| 17 | * calendar/time-date.el: Add comment on time value formats. Don't | 529 | * calendar/time-date.el: Add comment on time value formats. |
| 18 | require parse-time. | 530 | Don't require parse-time. |
| 19 | (with-decoded-time-value): New macro. | 531 | (with-decoded-time-value): New macro. |
| 20 | (encode-time-value): New function. | 532 | (encode-time-value): New function. |
| 21 | (time-to-seconds, time-less-p, time-subtract, time-add): Use them. | 533 | (time-to-seconds, time-less-p, time-subtract, time-add): Use them. |
| @@ -34,8 +546,8 @@ | |||
| 34 | (recentf-include-p): More robust. | 546 | (recentf-include-p): More robust. |
| 35 | (recentf-keep-p): New function. | 547 | (recentf-keep-p): New function. |
| 36 | (recentf-remove-if-non-kept): Rename from | 548 | (recentf-remove-if-non-kept): Rename from |
| 37 | `recentf-remove-if-non-readable'. Use `recentf-keep-p'. All | 549 | `recentf-remove-if-non-readable'. Use `recentf-keep-p'. |
| 38 | callers updated. | 550 | All callers updated. |
| 39 | (recentf-menu-items-for-commands): Fix help string. | 551 | (recentf-menu-items-for-commands): Fix help string. |
| 40 | (recentf-track-closed-file): Update. Doc fix. | 552 | (recentf-track-closed-file): Update. Doc fix. |
| 41 | (recentf-cleanup): Update. Count removed files. Doc fix. | 553 | (recentf-cleanup): Update. Count removed files. Doc fix. |
| @@ -124,8 +636,7 @@ | |||
| 124 | 636 | ||
| 125 | 2005-03-21 Lute Kamstra <lute@gnu.org> | 637 | 2005-03-21 Lute Kamstra <lute@gnu.org> |
| 126 | 638 | ||
| 127 | * generic.el: Fix commentary section. Don't require cl for | 639 | * generic.el: Fix commentary section. Don't require cl for compilation. |
| 128 | compilation. | ||
| 129 | (generic-mode-list): Add autoload cookie. | 640 | (generic-mode-list): Add autoload cookie. |
| 130 | (generic-use-find-file-hook, generic-lines-to-scan) | 641 | (generic-use-find-file-hook, generic-lines-to-scan) |
| 131 | (generic-find-file-regexp, generic-ignore-files-regexp) | 642 | (generic-find-file-regexp, generic-ignore-files-regexp) |
| @@ -175,20 +686,27 @@ | |||
| 175 | 686 | ||
| 176 | * tramp-smb.el (all): Remove debug construct for | 687 | * tramp-smb.el (all): Remove debug construct for |
| 177 | `with-parsed-tramp-file-name'. | 688 | `with-parsed-tramp-file-name'. |
| 178 | (tramp-smb-prompt): Prompt can contain spaces inside directory | 689 | (tramp-smb-prompt): Prompt can contain spaces inside directory names. |
| 179 | names. | ||
| 180 | (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file): | 690 | (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file): |
| 181 | No error message if DIRECTORY or FILENAME doesn't exist. | 691 | No error message if DIRECTORY or FILENAME doesn't exist. |
| 182 | (tramp-smb-open-connection): Check existence of | 692 | (tramp-smb-open-connection): Check existence of |
| 183 | `tramp-smb-program'. | 693 | `tramp-smb-program'. |
| 184 | 694 | ||
| 695 | 2005-03-20 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 696 | |||
| 697 | * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function): | ||
| 698 | Properly handle the case where the `m' or `s' command's argument is not | ||
| 699 | yet terminated. | ||
| 700 | (perl-indent-new-calculate): New function. | ||
| 701 | (perl-indent-line): Use it. | ||
| 702 | |||
| 185 | 2005-03-20 Miles Bader <miles@gnu.org> | 703 | 2005-03-20 Miles Bader <miles@gnu.org> |
| 186 | 704 | ||
| 187 | * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces | 705 | * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces |
| 188 | in text-mode too. Change to new face names. | 706 | in text-mode too. Change to new face names. |
| 189 | (breakpoint-enabled): Renamed from `breakpoint-enabled-bitmap-face'. | 707 | (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'. |
| 190 | Add `:weight bold' attribute. | 708 | Add `:weight bold' attribute. |
| 191 | (breakpoint-disabled): Renamed from `breakpoint-disabled-bitmap-face'. | 709 | (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'. |
| 192 | 710 | ||
| 193 | 2005-03-19 Juri Linkov <juri@jurta.org> | 711 | 2005-03-19 Juri Linkov <juri@jurta.org> |
| 194 | 712 | ||
| @@ -205,8 +723,7 @@ | |||
| 205 | 723 | ||
| 206 | 2005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes) | 724 | 2005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes) |
| 207 | 725 | ||
| 208 | * finder.el (finder-current-item): Throw an error on an empty | 726 | * finder.el (finder-current-item): Throw an error on an empty line. |
| 209 | line. | ||
| 210 | 727 | ||
| 211 | * man.el (Man-follow-manual-reference): If current-word returns | 728 | * man.el (Man-follow-manual-reference): If current-word returns |
| 212 | nil, use "". | 729 | nil, use "". |
| @@ -245,8 +762,8 @@ | |||
| 245 | 762 | ||
| 246 | 2005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br> | 763 | 2005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 247 | 764 | ||
| 248 | * ps-print.el (ps-generate-string-list, ps-generate-header-line): Use | 765 | * ps-print.el (ps-generate-string-list, ps-generate-header-line): |
| 249 | functionp instead of symbolp and fboundp. Reported by Drkm | 766 | Use functionp instead of symbolp and fboundp. Reported by Drkm |
| 250 | <darkman_spam@yahoo.fr>. | 767 | <darkman_spam@yahoo.fr>. |
| 251 | (ps-print-version): New version 6.6.6. | 768 | (ps-print-version): New version 6.6.6. |
| 252 | 769 | ||
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el index ea3df8efa68..27f5555bb04 100644 --- a/lisp/autoinsert.el +++ b/lisp/autoinsert.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; autoinsert.el --- automatic mode-dependent insertion of text into new files | 1 | ;;; autoinsert.el --- automatic mode-dependent insertion of text into new files |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1985, 86, 87, 94, 95, 98, 2000, 03 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1985, 1986, 1987, 1994, 1995, 1998, 2000, 2003, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: Charlie Martin <crm@cs.duke.edu> | 6 | ;; Author: Charlie Martin <crm@cs.duke.edu> |
| 6 | ;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org> | 7 | ;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org> |
| @@ -33,7 +34,7 @@ | |||
| 33 | ;; auto-mode-alist. | 34 | ;; auto-mode-alist. |
| 34 | ;; | 35 | ;; |
| 35 | ;; To use: | 36 | ;; To use: |
| 36 | ;; (add-hook 'find-file-hooks 'auto-insert) | 37 | ;; (add-hook 'find-file-hook 'auto-insert) |
| 37 | ;; setq auto-insert-directory to an appropriate slash-terminated value | 38 | ;; setq auto-insert-directory to an appropriate slash-terminated value |
| 38 | ;; | 39 | ;; |
| 39 | ;; You can also customize the variable `auto-insert-mode' to load the | 40 | ;; You can also customize the variable `auto-insert-mode' to load the |
| @@ -67,7 +68,7 @@ Insertion is possible when something appropriate is found in | |||
| 67 | `auto-insert-alist'. When the insertion is marked as unmodified, you can | 68 | `auto-insert-alist'. When the insertion is marked as unmodified, you can |
| 68 | save it with \\[write-file] RET. | 69 | save it with \\[write-file] RET. |
| 69 | This variable is used when the function `auto-insert' is called, e.g. | 70 | This variable is used when the function `auto-insert' is called, e.g. |
| 70 | when you do (add-hook 'find-file-hooks 'auto-insert). | 71 | when you do (add-hook 'find-file-hook 'auto-insert). |
| 71 | With \\[auto-insert], this is always treated as if it were t." | 72 | With \\[auto-insert], this is always treated as if it were t." |
| 72 | :type '(choice (const :tag "Insert if possible" t) | 73 | :type '(choice (const :tag "Insert if possible" t) |
| 73 | (const :tag "Do nothing" nil) | 74 | (const :tag "Do nothing" nil) |
| @@ -326,10 +327,10 @@ When Auto-insert mode is enabled, when new files are created you can | |||
| 326 | insert a template for the file depending on the mode of the buffer." | 327 | insert a template for the file depending on the mode of the buffer." |
| 327 | :global t :group 'auto-insert | 328 | :global t :group 'auto-insert |
| 328 | (if auto-insert-mode | 329 | (if auto-insert-mode |
| 329 | (add-hook 'find-file-hooks 'auto-insert) | 330 | (add-hook 'find-file-hook 'auto-insert) |
| 330 | (remove-hook 'find-file-hooks 'auto-insert))) | 331 | (remove-hook 'find-file-hook 'auto-insert))) |
| 331 | 332 | ||
| 332 | (provide 'autoinsert) | 333 | (provide 'autoinsert) |
| 333 | 334 | ||
| 334 | ;;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909 | 335 | ;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909 |
| 335 | ;;; autoinsert.el ends here | 336 | ;;; autoinsert.el ends here |
diff --git a/lisp/autorevert.el b/lisp/autorevert.el index d4a3d10d167..361a11a67ea 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el | |||
| @@ -246,7 +246,7 @@ This currently works by automatically updating the version | |||
| 246 | control info every `auto-revert-interval' seconds. Nevertheless, | 246 | control info every `auto-revert-interval' seconds. Nevertheless, |
| 247 | it should not cause excessive CPU usage on a reasonably fast | 247 | it should not cause excessive CPU usage on a reasonably fast |
| 248 | machine, if it does not apply to too many version controlled | 248 | machine, if it does not apply to too many version controlled |
| 249 | buffers. CPU usage depends on the version control system" | 249 | buffers. CPU usage depends on the version control system." |
| 250 | :group 'auto-revert | 250 | :group 'auto-revert |
| 251 | :type 'boolean | 251 | :type 'boolean |
| 252 | :version "22.1") | 252 | :version "22.1") |
diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 949434baffb..869896b087a 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el | |||
| @@ -2111,12 +2111,12 @@ strings returned are not." | |||
| 2111 | (define-key map [write] '("Save Bookmarks As..." . bookmark-write)) | 2111 | (define-key map [write] '("Save Bookmarks As..." . bookmark-write)) |
| 2112 | (define-key map [save] '("Save Bookmarks" . bookmark-save)) | 2112 | (define-key map [save] '("Save Bookmarks" . bookmark-save)) |
| 2113 | (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list)) | 2113 | (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list)) |
| 2114 | (define-key map [delete] '("Delete Bookmark" . bookmark-delete)) | 2114 | (define-key map [delete] '("Delete Bookmark..." . bookmark-delete)) |
| 2115 | (define-key map [rename] '("Rename Bookmark" . bookmark-rename)) | 2115 | (define-key map [rename] '("Rename Bookmark..." . bookmark-rename)) |
| 2116 | (define-key map [locate] '("Insert Location" . bookmark-locate)) | 2116 | (define-key map [locate] '("Insert Location..." . bookmark-locate)) |
| 2117 | (define-key map [insert] '("Insert Contents" . bookmark-insert)) | 2117 | (define-key map [insert] '("Insert Contents..." . bookmark-insert)) |
| 2118 | (define-key map [set] '("Set Bookmark" . bookmark-set)) | 2118 | (define-key map [set] '("Set Bookmark..." . bookmark-set)) |
| 2119 | (define-key map [jump] '("Jump to Bookmark" . bookmark-jump)) | 2119 | (define-key map [jump] '("Jump to Bookmark..." . bookmark-jump)) |
| 2120 | map)) | 2120 | map)) |
| 2121 | 2121 | ||
| 2122 | ;;;###autoload | 2122 | ;;;###autoload |
diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el index 8a48b78e37e..2d2f66b1ebf 100644 --- a/lisp/calc/calc-embed.el +++ b/lisp/calc/calc-embed.el | |||
| @@ -1257,26 +1257,8 @@ The command \\[yank] can retrieve it from there." | |||
| 1257 | calc-embedded-close-mode)))) | 1257 | calc-embedded-close-mode)))) |
| 1258 | (setq vars (cdr vars) | 1258 | (setq vars (cdr vars) |
| 1259 | values (cdr values)))))) | 1259 | values (cdr values)))))) |
| 1260 | (when (and vars calc-embedded-original-modes (eq calc-mode-save-mode 'save)) | 1260 | (when (and vars (eq calc-mode-save-mode 'save)) |
| 1261 | (cond ((equal vars '(the-language)) | 1261 | (calc-embedded-save-original-modes)))) |
| 1262 | (setcar calc-embedded-original-modes | ||
| 1263 | (cons calc-language calc-language-option))) | ||
| 1264 | ((equal vars '(the-display-just)) | ||
| 1265 | (let* ((modes (cdr calc-embedded-original-modes)) | ||
| 1266 | (just (assq 'calc-display-just modes)) | ||
| 1267 | (origin (assq 'calc-display-origin modes))) | ||
| 1268 | (if just | ||
| 1269 | (setcdr just calc-display-just)) | ||
| 1270 | (if origin | ||
| 1271 | (setcdr origin calc-display-origin)))) | ||
| 1272 | (t | ||
| 1273 | (let ((modes (cdr calc-embedded-original-modes))) | ||
| 1274 | (while vars | ||
| 1275 | (let* ((var (car vars)) | ||
| 1276 | (cell (assq var modes))) | ||
| 1277 | (if cell | ||
| 1278 | (setcdr cell (symbol-value var)))) | ||
| 1279 | (setq vars (cdr vars))))))))) | ||
| 1280 | 1262 | ||
| 1281 | (defun calc-embedded-var-change (var &optional buf) | 1263 | (defun calc-embedded-var-change (var &optional buf) |
| 1282 | (if (symbolp var) | 1264 | (if (symbolp var) |
diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el index d4ddada6a0c..4870891231a 100644 --- a/lisp/calc/calc-forms.el +++ b/lisp/calc/calc-forms.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; calc-forms.el --- data format conversion functions for Calc | 1 | ;;; calc-forms.el --- data format conversion functions for Calc |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: David Gillespie <daveg@synaptics.com> | 6 | ;; Author: David Gillespie <daveg@synaptics.com> |
| 6 | ;; Maintainer: Jay Belanger <belanger@truman.edu> | 7 | ;; Maintainer: Jay Belanger <belanger@truman.edu> |
| @@ -1434,7 +1435,7 @@ and ends on the last Sunday of October at 2 a.m." | |||
| 1434 | (defun calcFunc-badd (a b) | 1435 | (defun calcFunc-badd (a b) |
| 1435 | (if (eq (car-safe b) 'date) | 1436 | (if (eq (car-safe b) 'date) |
| 1436 | (if (eq (car-safe a) 'date) | 1437 | (if (eq (car-safe a) 'date) |
| 1437 | (math-reject-arg nil "*Illegal combination in date arithmetic") | 1438 | (math-reject-arg nil "*Invalid combination in date arithmetic") |
| 1438 | (calcFunc-badd b a)) | 1439 | (calcFunc-badd b a)) |
| 1439 | (if (eq (car-safe a) 'date) | 1440 | (if (eq (car-safe a) 'date) |
| 1440 | (if (Math-realp b) | 1441 | (if (Math-realp b) |
| @@ -1452,7 +1453,7 @@ and ends on the last Sunday of October at 2 a.m." | |||
| 1452 | (if hours | 1453 | (if hours |
| 1453 | (setq b (math-div b (cdr hours)))) | 1454 | (setq b (math-div b (cdr hours)))) |
| 1454 | (calcFunc-badd a b)) | 1455 | (calcFunc-badd a b)) |
| 1455 | (math-reject-arg nil "*Illegal combination in date arithmetic"))) | 1456 | (math-reject-arg nil "*Invalid combination in date arithmetic"))) |
| 1456 | (math-reject-arg a 'datep)))) | 1457 | (math-reject-arg a 'datep)))) |
| 1457 | 1458 | ||
| 1458 | (defun calcFunc-holiday (a) | 1459 | (defun calcFunc-holiday (a) |
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index dc7f0b17c1d..46b8cec2ac6 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; calc-help.el --- help display functions for Calc, | 1 | ;;; calc-help.el --- help display functions for Calc, |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004 | 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: David Gillespie <daveg@synaptics.com> | 6 | ;; Author: David Gillespie <daveg@synaptics.com> |
| @@ -409,10 +409,10 @@ C-w Describe how there is no warranty for Calc." | |||
| 409 | (defun calc-full-help () | 409 | (defun calc-full-help () |
| 410 | (interactive) | 410 | (interactive) |
| 411 | (with-output-to-temp-buffer "*Help*" | 411 | (with-output-to-temp-buffer "*Help*" |
| 412 | (princ (format "GNU Emacs Calculator version %s of %s.\n" | 412 | (princ (format "GNU Emacs Calculator version %s.\n" |
| 413 | calc-version calc-version-date)) | 413 | calc-version)) |
| 414 | (princ " By Dave Gillespie, daveg@synaptics.com.\n") | 414 | (princ " By Dave Gillespie.\n") |
| 415 | (princ " Copyright (C) 1990, 1993 Free Software Foundation, Inc.\n\n") | 415 | (princ " Copyright (C) 2005 Free Software Foundation, Inc.\n\n") |
| 416 | (princ "Type `h s' for a more detailed summary.\n") | 416 | (princ "Type `h s' for a more detailed summary.\n") |
| 417 | (princ "Or type `h i' to read the full Calc manual on-line.\n\n") | 417 | (princ "Or type `h i' to read the full Calc manual on-line.\n\n") |
| 418 | (princ "Basic keys:\n") | 418 | (princ "Basic keys:\n") |
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el index 2e5737349bc..9510507e276 100644 --- a/lisp/calc/calc-lang.el +++ b/lisp/calc/calc-lang.el | |||
| @@ -388,6 +388,9 @@ | |||
| 388 | ( \\arg . calcFunc-arg ) | 388 | ( \\arg . calcFunc-arg ) |
| 389 | ( \\cos . calcFunc-cos ) | 389 | ( \\cos . calcFunc-cos ) |
| 390 | ( \\cosh . calcFunc-cosh ) | 390 | ( \\cosh . calcFunc-cosh ) |
| 391 | ( \\cot . calcFunc-cot ) | ||
| 392 | ( \\coth . calcFunc-coth ) | ||
| 393 | ( \\csc . calcFunc-csc ) | ||
| 391 | ( \\det . calcFunc-det ) | 394 | ( \\det . calcFunc-det ) |
| 392 | ( \\exp . calcFunc-exp ) | 395 | ( \\exp . calcFunc-exp ) |
| 393 | ( \\gcd . calcFunc-gcd ) | 396 | ( \\gcd . calcFunc-gcd ) |
| @@ -395,10 +398,11 @@ | |||
| 395 | ( \\log . calcFunc-log10 ) | 398 | ( \\log . calcFunc-log10 ) |
| 396 | ( \\max . calcFunc-max ) | 399 | ( \\max . calcFunc-max ) |
| 397 | ( \\min . calcFunc-min ) | 400 | ( \\min . calcFunc-min ) |
| 398 | ( \\tan . calcFunc-tan ) | 401 | ( \\sec . calcFunc-sec ) |
| 399 | ( \\sin . calcFunc-sin ) | 402 | ( \\sin . calcFunc-sin ) |
| 400 | ( \\sinh . calcFunc-sinh ) | 403 | ( \\sinh . calcFunc-sinh ) |
| 401 | ( \\sqrt . calcFunc-sqrt ) | 404 | ( \\sqrt . calcFunc-sqrt ) |
| 405 | ( \\tan . calcFunc-tan ) | ||
| 402 | ( \\tanh . calcFunc-tanh ) | 406 | ( \\tanh . calcFunc-tanh ) |
| 403 | ( \\phi . calcFunc-totient ) | 407 | ( \\phi . calcFunc-totient ) |
| 404 | ( \\mu . calcFunc-moebius ))) | 408 | ( \\mu . calcFunc-moebius ))) |
| @@ -686,6 +690,10 @@ | |||
| 686 | ( Conjugate . calcFunc-conj ) | 690 | ( Conjugate . calcFunc-conj ) |
| 687 | ( Cos . calcFunc-cos ) | 691 | ( Cos . calcFunc-cos ) |
| 688 | ( Cosh . calcFunc-cosh ) | 692 | ( Cosh . calcFunc-cosh ) |
| 693 | ( Cot . calcFunc-cot ) | ||
| 694 | ( Coth . calcFunc-coth ) | ||
| 695 | ( Csc . calcFunc-csc ) | ||
| 696 | ( Csch . calcFunc-csch ) | ||
| 689 | ( D . calcFunc-deriv ) | 697 | ( D . calcFunc-deriv ) |
| 690 | ( Dt . calcFunc-tderiv ) | 698 | ( Dt . calcFunc-tderiv ) |
| 691 | ( Det . calcFunc-det ) | 699 | ( Det . calcFunc-det ) |
| @@ -708,6 +716,8 @@ | |||
| 708 | ( Random . calcFunc-random ) | 716 | ( Random . calcFunc-random ) |
| 709 | ( Round . calcFunc-round ) | 717 | ( Round . calcFunc-round ) |
| 710 | ( Re . calcFunc-re ) | 718 | ( Re . calcFunc-re ) |
| 719 | ( Sec . calcFunc-sec ) | ||
| 720 | ( Sech . calcFunc-sech ) | ||
| 711 | ( Sign . calcFunc-sign ) | 721 | ( Sign . calcFunc-sign ) |
| 712 | ( Sin . calcFunc-sin ) | 722 | ( Sin . calcFunc-sin ) |
| 713 | ( Sinh . calcFunc-sinh ) | 723 | ( Sinh . calcFunc-sinh ) |
diff --git a/lisp/calc/calc-sel.el b/lisp/calc/calc-sel.el index 4ae0df5d3ba..04cb2bee2bd 100644 --- a/lisp/calc/calc-sel.el +++ b/lisp/calc/calc-sel.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; calc-sel.el --- data selection functions for Calc | 1 | ;;; calc-sel.el --- data selection functions for Calc |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: David Gillespie <daveg@synaptics.com> | 6 | ;; Author: David Gillespie <daveg@synaptics.com> |
| 6 | ;; Maintainer: Jay Belanger <belanger@truman.edu> | 7 | ;; Maintainer: Jay Belanger <belanger@truman.edu> |
| @@ -490,7 +491,7 @@ | |||
| 490 | (mapcar 'calc-replace-sub-formula-rec (cdr expr)))))) | 491 | (mapcar 'calc-replace-sub-formula-rec (cdr expr)))))) |
| 491 | 492 | ||
| 492 | (defun calc-sel-error () | 493 | (defun calc-sel-error () |
| 493 | (error "Illegal operation on sub-formulas")) | 494 | (error "Invalid operation on sub-formulas")) |
| 494 | 495 | ||
| 495 | (defun calc-replace-selections (n vals m) | 496 | (defun calc-replace-selections (n vals m) |
| 496 | (if (calc-top-selected n m) | 497 | (if (calc-top-selected n m) |
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 24336ad9333..639b6f31a68 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; calc.el --- the GNU Emacs calculator | 1 | ;;; calc.el --- the GNU Emacs calculator |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: David Gillespie <daveg@synaptics.com> | 6 | ;; Author: David Gillespie <daveg@synaptics.com> |
| 6 | ;; Maintainer: Jay Belanger <belanger@truman.edu> | 7 | ;; Maintainer: Jay Belanger <belanger@truman.edu> |
| @@ -656,8 +657,7 @@ If nil, selections displayed but ignored.") | |||
| 656 | (put 'math-underflow 'error-conditions '(error math-underflow calc-error)) | 657 | (put 'math-underflow 'error-conditions '(error math-underflow calc-error)) |
| 657 | (put 'math-underflow 'error-message "Floating-point underflow occurred") | 658 | (put 'math-underflow 'error-message "Floating-point underflow occurred") |
| 658 | 659 | ||
| 659 | (defconst calc-version "2.02g") | 660 | (defconst calc-version "2.1") |
| 660 | (defconst calc-version-date "Mon Nov 19 2001") | ||
| 661 | (defvar calc-trail-pointer nil) ; "Current" entry in trail buffer. | 661 | (defvar calc-trail-pointer nil) ; "Current" entry in trail buffer. |
| 662 | (defvar calc-trail-overlay nil) ; Value of overlay-arrow-string. | 662 | (defvar calc-trail-overlay nil) ; Value of overlay-arrow-string. |
| 663 | (defvar calc-undo-list nil) ; List of previous operations for undo. | 663 | (defvar calc-undo-list nil) ; List of previous operations for undo. |
diff --git a/lisp/calc/calcalg2.el b/lisp/calc/calcalg2.el index a422ed33e45..d2459919fda 100644 --- a/lisp/calc/calcalg2.el +++ b/lisp/calc/calcalg2.el | |||
| @@ -149,7 +149,7 @@ | |||
| 149 | (and step (list step))))))) | 149 | (and step (list step))))))) |
| 150 | 150 | ||
| 151 | (defun calc-solve-for (var) | 151 | (defun calc-solve-for (var) |
| 152 | (interactive "sVariable to solve for: ") | 152 | (interactive "sVariable(s) to solve for: ") |
| 153 | (calc-slow-wrapper | 153 | (calc-slow-wrapper |
| 154 | (let ((func (if (calc-is-inverse) | 154 | (let ((func (if (calc-is-inverse) |
| 155 | (if (calc-is-hyperbolic) 'calcFunc-ffinv 'calcFunc-finv) | 155 | (if (calc-is-hyperbolic) 'calcFunc-ffinv 'calcFunc-finv) |
diff --git a/lisp/calendar/appt.el b/lisp/calendar/appt.el index e11129414d3..8ace0be910b 100644 --- a/lisp/calendar/appt.el +++ b/lisp/calendar/appt.el | |||
| @@ -1,9 +1,9 @@ | |||
| 1 | ;;; appt.el --- appointment notification functions | 1 | ;;; appt.el --- appointment notification functions |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Neil Mager <neilm@juliet.ll.mit.edu> | 5 | ;; Author: Neil Mager <neilm@juliet.ll.mit.edu> |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk> |
| 7 | ;; Keywords: calendar | 7 | ;; Keywords: calendar |
| 8 | 8 | ||
| 9 | ;; This file is part of GNU Emacs. | 9 | ;; This file is part of GNU Emacs. |
| @@ -181,7 +181,7 @@ Only relevant if reminders are being displayed in a window." | |||
| 181 | 181 | ||
| 182 | ;;; Internal variables below this point. | 182 | ;;; Internal variables below this point. |
| 183 | 183 | ||
| 184 | (defvar appt-buffer-name " *appt-buf*" | 184 | (defconst appt-buffer-name " *appt-buf*" |
| 185 | "Name of the appointments buffer.") | 185 | "Name of the appointments buffer.") |
| 186 | 186 | ||
| 187 | (defvar appt-time-msg-list nil | 187 | (defvar appt-time-msg-list nil |
| @@ -486,9 +486,8 @@ Usually just deletes the appointment buffer." | |||
| 486 | 486 | ||
| 487 | ;;;###autoload | 487 | ;;;###autoload |
| 488 | (defun appt-add (new-appt-time new-appt-msg) | 488 | (defun appt-add (new-appt-time new-appt-msg) |
| 489 | "Add an appointment for the day at NEW-APPT-TIME and issue message NEW-APPT-MSG. | 489 | "Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG. |
| 490 | The time should be in either 24 hour format or am/pm format." | 490 | The time should be in either 24 hour format or am/pm format." |
| 491 | |||
| 492 | (interactive "sTime (hh:mm[am/pm]): \nsMessage: ") | 491 | (interactive "sTime (hh:mm[am/pm]): \nsMessage: ") |
| 493 | (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" | 492 | (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" |
| 494 | new-appt-time) | 493 | new-appt-time) |
diff --git a/lisp/calendar/cal-china.el b/lisp/calendar/cal-china.el index 6e506b93f7d..303193e3d73 100644 --- a/lisp/calendar/cal-china.el +++ b/lisp/calendar/cal-china.el | |||
| @@ -38,8 +38,8 @@ | |||
| 38 | ;; The date of Chinese New Year is correct from 1644-2051. | 38 | ;; The date of Chinese New Year is correct from 1644-2051. |
| 39 | 39 | ||
| 40 | ;; Technical details of all the calendrical calculations can be found in | 40 | ;; Technical details of all the calendrical calculations can be found in |
| 41 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 41 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 42 | ;; Cambridge University Press (1997). | 42 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 43 | 43 | ||
| 44 | ;; Comments, corrections, and improvements should be sent to | 44 | ;; Comments, corrections, and improvements should be sent to |
| 45 | ;; Edward M. Reingold Department of Computer Science | 45 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-coptic.el b/lisp/calendar/cal-coptic.el index df1201a23c4..2aa111f2109 100644 --- a/lisp/calendar/cal-coptic.el +++ b/lisp/calendar/cal-coptic.el | |||
| @@ -29,8 +29,8 @@ | |||
| 29 | ;; diary.el that deal with the Coptic and Ethiopic calendars. | 29 | ;; diary.el that deal with the Coptic and Ethiopic calendars. |
| 30 | 30 | ||
| 31 | ;; Technical details of all the calendrical calculations can be found in | 31 | ;; Technical details of all the calendrical calculations can be found in |
| 32 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 32 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 33 | ;; Cambridge University Press (1997). | 33 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 34 | 34 | ||
| 35 | ;; Comments, corrections, and improvements should be sent to | 35 | ;; Comments, corrections, and improvements should be sent to |
| 36 | ;; Edward M. Reingold Department of Computer Science | 36 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-french.el b/lisp/calendar/cal-french.el index d988b008f53..c42e415eb25 100644 --- a/lisp/calendar/cal-french.el +++ b/lisp/calendar/cal-french.el | |||
| @@ -29,8 +29,8 @@ | |||
| 29 | ;; diary.el that deal with the French Revolutionary calendar. | 29 | ;; diary.el that deal with the French Revolutionary calendar. |
| 30 | 30 | ||
| 31 | ;; Technical details of the French Revolutionary calendar can be found in | 31 | ;; Technical details of the French Revolutionary calendar can be found in |
| 32 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 32 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 33 | ;; Cambridge University Press (1997), and in | 33 | ;; and Nachum Dershowitz, Cambridge University Press (2001), and in |
| 34 | ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by | 34 | ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by |
| 35 | ;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and | 35 | ;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and |
| 36 | ;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404. | 36 | ;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404. |
diff --git a/lisp/calendar/cal-hebrew.el b/lisp/calendar/cal-hebrew.el index 776868159be..f66b4966e57 100644 --- a/lisp/calendar/cal-hebrew.el +++ b/lisp/calendar/cal-hebrew.el | |||
| @@ -30,8 +30,8 @@ | |||
| 30 | ;; diary.el that deal with the Hebrew calendar. | 30 | ;; diary.el that deal with the Hebrew calendar. |
| 31 | 31 | ||
| 32 | ;; Technical details of all the calendrical calculations can be found in | 32 | ;; Technical details of all the calendrical calculations can be found in |
| 33 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 33 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 34 | ;; Cambridge University Press (1997). | 34 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 35 | 35 | ||
| 36 | ;; Comments, corrections, and improvements should be sent to | 36 | ;; Comments, corrections, and improvements should be sent to |
| 37 | ;; Edward M. Reingold Department of Computer Science | 37 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-islam.el b/lisp/calendar/cal-islam.el index 8dcf5c29b1f..1ac6f0677b1 100644 --- a/lisp/calendar/cal-islam.el +++ b/lisp/calendar/cal-islam.el | |||
| @@ -29,8 +29,8 @@ | |||
| 29 | ;; diary.el that deal with the Islamic calendar. | 29 | ;; diary.el that deal with the Islamic calendar. |
| 30 | 30 | ||
| 31 | ;; Technical details of all the calendrical calculations can be found in | 31 | ;; Technical details of all the calendrical calculations can be found in |
| 32 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 32 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 33 | ;; Cambridge University Press (1997). | 33 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 34 | 34 | ||
| 35 | ;; Comments, corrections, and improvements should be sent to | 35 | ;; Comments, corrections, and improvements should be sent to |
| 36 | ;; Edward M. Reingold Department of Computer Science | 36 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-iso.el b/lisp/calendar/cal-iso.el index 058bdf071d7..8a40442e4fe 100644 --- a/lisp/calendar/cal-iso.el +++ b/lisp/calendar/cal-iso.el | |||
| @@ -30,8 +30,8 @@ | |||
| 30 | ;; diary.el that deal with the ISO calendar. | 30 | ;; diary.el that deal with the ISO calendar. |
| 31 | 31 | ||
| 32 | ;; Technical details of all the calendrical calculations can be found in | 32 | ;; Technical details of all the calendrical calculations can be found in |
| 33 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 33 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 34 | ;; Cambridge University Press (1997). | 34 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 35 | 35 | ||
| 36 | ;; Comments, corrections, and improvements should be sent to | 36 | ;; Comments, corrections, and improvements should be sent to |
| 37 | ;; Edward M. Reingold Department of Computer Science | 37 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-julian.el b/lisp/calendar/cal-julian.el index 67fb8515b24..2b7278f8ea6 100644 --- a/lisp/calendar/cal-julian.el +++ b/lisp/calendar/cal-julian.el | |||
| @@ -29,8 +29,8 @@ | |||
| 29 | ;; diary.el that deal with the Julian calendar. | 29 | ;; diary.el that deal with the Julian calendar. |
| 30 | 30 | ||
| 31 | ;; Technical details of all the calendrical calculations can be found in | 31 | ;; Technical details of all the calendrical calculations can be found in |
| 32 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 32 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 33 | ;; Cambridge University Press (1997). | 33 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 34 | 34 | ||
| 35 | ;; Comments, corrections, and improvements should be sent to | 35 | ;; Comments, corrections, and improvements should be sent to |
| 36 | ;; Edward M. Reingold Department of Computer Science | 36 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-mayan.el b/lisp/calendar/cal-mayan.el index c2c3e027c4b..92bbb5df23e 100644 --- a/lisp/calendar/cal-mayan.el +++ b/lisp/calendar/cal-mayan.el | |||
| @@ -44,8 +44,8 @@ | |||
| 44 | ;; Comments, improvements, and bug reports should be sent to Reingold. | 44 | ;; Comments, improvements, and bug reports should be sent to Reingold. |
| 45 | 45 | ||
| 46 | ;; Technical details of the Mayan calendrical calculations can be found in | 46 | ;; Technical details of the Mayan calendrical calculations can be found in |
| 47 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 47 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 48 | ;; Cambridge University Press (1997), and in | 48 | ;; and Nachum Dershowitz, Cambridge University Press (2001), and in |
| 49 | ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' | 49 | ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' |
| 50 | ;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, | 50 | ;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, |
| 51 | ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), | 51 | ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), |
diff --git a/lisp/calendar/cal-menu.el b/lisp/calendar/cal-menu.el index ceb4c56f7fd..408de3826d4 100644 --- a/lisp/calendar/cal-menu.el +++ b/lisp/calendar/cal-menu.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; cal-menu.el --- calendar functions for menu bar and popup menu support | 1 | ;;; cal-menu.el --- calendar functions for menu bar and popup menu support |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1994, 1995, 2001, 2003, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1994, 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> | 5 | ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> |
| 6 | ;; Lara Rios <lrios@coewl.cen.uiuc.edu> | 6 | ;; Lara Rios <lrios@coewl.cen.uiuc.edu> |
| @@ -52,7 +52,6 @@ | |||
| 52 | 52 | ||
| 53 | (defvar calendar-mouse-3-map (make-sparse-keymap "Calendar")) | 53 | (defvar calendar-mouse-3-map (make-sparse-keymap "Calendar")) |
| 54 | (define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map) | 54 | (define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map) |
| 55 | (define-key calendar-mode-map [C-down-mouse-3] calendar-mouse-3-map) | ||
| 56 | 55 | ||
| 57 | (define-key calendar-mode-map [menu-bar moon] | 56 | (define-key calendar-mode-map [menu-bar moon] |
| 58 | (cons "Moon" (make-sparse-keymap "Moon"))) | 57 | (cons "Moon" (make-sparse-keymap "Moon"))) |
diff --git a/lisp/calendar/cal-move.el b/lisp/calendar/cal-move.el index 045c11ba1d7..e89ee2a26e2 100644 --- a/lisp/calendar/cal-move.el +++ b/lisp/calendar/cal-move.el | |||
| @@ -1,8 +1,9 @@ | |||
| 1 | ;;; cal-move.el --- calendar functions for movement in the calendar | 1 | ;;; cal-move.el --- calendar functions for movement in the calendar |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1995 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1995, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> | 5 | ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> |
| 6 | ;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 6 | ;; Keywords: calendar | 7 | ;; Keywords: calendar |
| 7 | ;; Human-Keywords: calendar | 8 | ;; Human-Keywords: calendar |
| 8 | 9 | ||
| @@ -269,7 +270,8 @@ Moves forward if ARG is negative." | |||
| 269 | (if (and (= arg 1) | 270 | (if (and (= arg 1) |
| 270 | (calendar-date-is-visible-p jan-first)) | 271 | (calendar-date-is-visible-p jan-first)) |
| 271 | (calendar-cursor-to-visible-date jan-first) | 272 | (calendar-cursor-to-visible-date jan-first) |
| 272 | (calendar-other-month 1 (- year (1- arg)))))) | 273 | (calendar-other-month 1 (- year (1- arg))) |
| 274 | (calendar-cursor-to-visible-date (list 1 1 displayed-year))))) | ||
| 273 | (run-hooks 'calendar-move-hook)) | 275 | (run-hooks 'calendar-move-hook)) |
| 274 | 276 | ||
| 275 | (defun calendar-end-of-year (arg) | 277 | (defun calendar-end-of-year (arg) |
| @@ -287,7 +289,7 @@ Moves forward if ARG is negative." | |||
| 287 | (if (and (= arg 1) | 289 | (if (and (= arg 1) |
| 288 | (calendar-date-is-visible-p dec-31)) | 290 | (calendar-date-is-visible-p dec-31)) |
| 289 | (calendar-cursor-to-visible-date dec-31) | 291 | (calendar-cursor-to-visible-date dec-31) |
| 290 | (calendar-other-month 12 (- year (1- arg))) | 292 | (calendar-other-month 12 (+ year (1- arg))) |
| 291 | (calendar-cursor-to-visible-date (list 12 31 displayed-year))))) | 293 | (calendar-cursor-to-visible-date (list 12 31 displayed-year))))) |
| 292 | (run-hooks 'calendar-move-hook)) | 294 | (run-hooks 'calendar-move-hook)) |
| 293 | 295 | ||
diff --git a/lisp/calendar/cal-persia.el b/lisp/calendar/cal-persia.el index ff09c14b47d..dcbbcbd637e 100644 --- a/lisp/calendar/cal-persia.el +++ b/lisp/calendar/cal-persia.el | |||
| @@ -29,8 +29,8 @@ | |||
| 29 | ;; diary.el that deal with the Persian calendar. | 29 | ;; diary.el that deal with the Persian calendar. |
| 30 | 30 | ||
| 31 | ;; Technical details of all the calendrical calculations can be found in | 31 | ;; Technical details of all the calendrical calculations can be found in |
| 32 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 32 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 33 | ;; Cambridge University Press (1997). | 33 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 34 | 34 | ||
| 35 | ;; Comments, corrections, and improvements should be sent to | 35 | ;; Comments, corrections, and improvements should be sent to |
| 36 | ;; Edward M. Reingold Department of Computer Science | 36 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/cal-x.el b/lisp/calendar/cal-x.el index 97fbb72af61..03b485a438a 100644 --- a/lisp/calendar/cal-x.el +++ b/lisp/calendar/cal-x.el | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | ;;; cal-x.el --- calendar windows in dedicated frames in X | 1 | ;;; cal-x.el --- calendar windows in dedicated frames in X |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1994, 1995, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Michael Kifer <kifer@cs.sunysb.edu> | 5 | ;; Author: Michael Kifer <kifer@cs.sunysb.edu> |
| 6 | ;; Edward M. Reingold <reingold@cs.uiuc.edu> | 6 | ;; Edward M. Reingold <reingold@cs.uiuc.edu> |
| 7 | ;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 7 | ;; Keywords: calendar | 8 | ;; Keywords: calendar |
| 8 | ;; Human-Keywords: calendar, dedicated frames, X Window System | 9 | ;; Human-Keywords: calendar, dedicated frames, X Window System |
| 9 | 10 | ||
| @@ -88,7 +89,7 @@ This function requires a display capable of multiple frames, else | |||
| 88 | (frame-parameters calendar-frame)))) | 89 | (frame-parameters calendar-frame)))) |
| 89 | (iconify-or-deiconify-frame)) | 90 | (iconify-or-deiconify-frame)) |
| 90 | (calendar-basic-setup arg) | 91 | (calendar-basic-setup arg) |
| 91 | (set-window-dedicated-p (selected-window) 'calendar) | 92 | (set-window-dedicated-p (selected-window) t) |
| 92 | (set-window-dedicated-p | 93 | (set-window-dedicated-p |
| 93 | (display-buffer | 94 | (display-buffer |
| 94 | (if (not (memq 'fancy-diary-display diary-display-hook)) | 95 | (if (not (memq 'fancy-diary-display diary-display-hook)) |
| @@ -96,7 +97,7 @@ This function requires a display capable of multiple frames, else | |||
| 96 | (if (not (bufferp (get-buffer fancy-diary-buffer))) | 97 | (if (not (bufferp (get-buffer fancy-diary-buffer))) |
| 97 | (make-fancy-diary-buffer)) | 98 | (make-fancy-diary-buffer)) |
| 98 | fancy-diary-buffer)) | 99 | fancy-diary-buffer)) |
| 99 | 'diary)))))) | 100 | t)))))) |
| 100 | 101 | ||
| 101 | (defun calendar-only-one-frame-setup (&optional arg) | 102 | (defun calendar-only-one-frame-setup (&optional arg) |
| 102 | "Start calendar and display it in a dedicated frame. | 103 | "Start calendar and display it in a dedicated frame. |
| @@ -117,7 +118,7 @@ This function requires a display capable of multiple frames, else | |||
| 117 | (frame-parameters calendar-frame)))) | 118 | (frame-parameters calendar-frame)))) |
| 118 | (iconify-or-deiconify-frame)) | 119 | (iconify-or-deiconify-frame)) |
| 119 | (calendar-basic-setup arg) | 120 | (calendar-basic-setup arg) |
| 120 | (set-window-dedicated-p (selected-window) 'calendar)))))) | 121 | (set-window-dedicated-p (selected-window) t)))))) |
| 121 | 122 | ||
| 122 | (defun calendar-two-frame-setup (&optional arg) | 123 | (defun calendar-two-frame-setup (&optional arg) |
| 123 | "Start calendar and diary in separate, dedicated frames. | 124 | "Start calendar and diary in separate, dedicated frames. |
| @@ -139,7 +140,7 @@ This function requires a display capable of multiple frames, else | |||
| 139 | (frame-parameters calendar-frame)))) | 140 | (frame-parameters calendar-frame)))) |
| 140 | (iconify-or-deiconify-frame)) | 141 | (iconify-or-deiconify-frame)) |
| 141 | (display-buffer calendar-buffer) | 142 | (display-buffer calendar-buffer) |
| 142 | (set-window-dedicated-p (selected-window) 'calendar) | 143 | (set-window-dedicated-p (selected-window) t) |
| 143 | (setq diary-frame (make-frame diary-frame-parameters)) | 144 | (setq diary-frame (make-frame diary-frame-parameters)) |
| 144 | (run-hooks 'calendar-after-frame-setup-hooks) | 145 | (run-hooks 'calendar-after-frame-setup-hooks) |
| 145 | (select-frame diary-frame) | 146 | (select-frame diary-frame) |
| @@ -154,7 +155,7 @@ This function requires a display capable of multiple frames, else | |||
| 154 | (if (not (bufferp (get-buffer fancy-diary-buffer))) | 155 | (if (not (bufferp (get-buffer fancy-diary-buffer))) |
| 155 | (make-fancy-diary-buffer)) | 156 | (make-fancy-diary-buffer)) |
| 156 | fancy-diary-buffer)) | 157 | fancy-diary-buffer)) |
| 157 | 'diary))))) | 158 | t))))) |
| 158 | 159 | ||
| 159 | ;; Formerly (get-file-buffer diary-file) was added to the list here, | 160 | ;; Formerly (get-file-buffer diary-file) was added to the list here, |
| 160 | ;; but that isn't clean, and the value could even be nil. | 161 | ;; but that isn't clean, and the value could even be nil. |
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index baa18d769c2..5fc23a15cc9 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el | |||
| @@ -75,13 +75,13 @@ | |||
| 75 | ;; solar.el Sunrise/sunset, equinoxes/solstices | 75 | ;; solar.el Sunrise/sunset, equinoxes/solstices |
| 76 | 76 | ||
| 77 | ;; Technical details of all the calendrical calculations can be found in | 77 | ;; Technical details of all the calendrical calculations can be found in |
| 78 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 78 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 79 | ;; Cambridge University Press (1997). | 79 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 80 | 80 | ||
| 81 | ;; An earlier version of the technical details appeared in | 81 | ;; An earlier version of the technical details appeared in |
| 82 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 82 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, |
| 83 | ;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990), | 83 | ;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990), |
| 84 | ;; pages 899-928. ``Calendrical Calculations, Part II: Three Historical | 84 | ;; pages 899-928, and in ``Calendrical Calculations, Part II: Three Historical |
| 85 | ;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen, | 85 | ;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen, |
| 86 | ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), | 86 | ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), |
| 87 | ;; pages 383-404. | 87 | ;; pages 383-404. |
| @@ -2763,7 +2763,7 @@ in `calendar-day-name-array'. These abbreviations may be used | |||
| 2763 | instead of the full names in the diary file. Do not include a | 2763 | instead of the full names in the diary file. Do not include a |
| 2764 | trailing `.' in the strings specified in this variable, though | 2764 | trailing `.' in the strings specified in this variable, though |
| 2765 | you may use such in the diary file. If any element of this array | 2765 | you may use such in the diary file. If any element of this array |
| 2766 | is nil, then the abbreviation will be constructed as the first | 2766 | is nil, then the abbreviation will be constructed as the first |
| 2767 | `calendar-abbrev-length' characters of the corresponding full name.") | 2767 | `calendar-abbrev-length' characters of the corresponding full name.") |
| 2768 | 2768 | ||
| 2769 | (defvar calendar-month-name-array | 2769 | (defvar calendar-month-name-array |
| @@ -2884,20 +2884,20 @@ interpreted as BC; -1 being 1 BC, and so on." | |||
| 2884 | (redraw-calendar)) | 2884 | (redraw-calendar)) |
| 2885 | 2885 | ||
| 2886 | (defun calendar-date-is-visible-p (date) | 2886 | (defun calendar-date-is-visible-p (date) |
| 2887 | "Return t if DATE is legal and is visible in the calendar window." | 2887 | "Return t if DATE is valid and is visible in the calendar window." |
| 2888 | (let ((gap (calendar-interval | 2888 | (let ((gap (calendar-interval |
| 2889 | displayed-month displayed-year | 2889 | displayed-month displayed-year |
| 2890 | (extract-calendar-month date) (extract-calendar-year date)))) | 2890 | (extract-calendar-month date) (extract-calendar-year date)))) |
| 2891 | (and (calendar-date-is-legal-p date) (> 2 gap) (< -2 gap)))) | 2891 | (and (calendar-date-is-legal-p date) (> 2 gap) (< -2 gap)))) |
| 2892 | 2892 | ||
| 2893 | (defun calendar-date-is-legal-p (date) | 2893 | (defun calendar-date-is-legal-p (date) |
| 2894 | "Return t if DATE is a legal date." | 2894 | "Return t if DATE is a valid date." |
| 2895 | (let ((month (extract-calendar-month date)) | 2895 | (let ((month (extract-calendar-month date)) |
| 2896 | (day (extract-calendar-day date)) | 2896 | (day (extract-calendar-day date)) |
| 2897 | (year (extract-calendar-year date))) | 2897 | (year (extract-calendar-year date))) |
| 2898 | (and (<= 1 month) (<= month 12) | 2898 | (and (<= 1 month) (<= month 12) |
| 2899 | (<= 1 day) (<= day (calendar-last-day-of-month month year)) | 2899 | (<= 1 day) (<= day (calendar-last-day-of-month month year)) |
| 2900 | ;; BC dates left as non-legal, to suppress errors from | 2900 | ;; BC dates left as non-valid, to suppress errors from |
| 2901 | ;; complex holiday algorithms not suitable for years BC. | 2901 | ;; complex holiday algorithms not suitable for years BC. |
| 2902 | ;; Note there are side effects on calendar navigation. | 2902 | ;; Note there are side effects on calendar navigation. |
| 2903 | (<= 1 year)))) | 2903 | (<= 1 year)))) |
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el index 4493bd02a9c..6596657d454 100644 --- a/lisp/calendar/holidays.el +++ b/lisp/calendar/holidays.el | |||
| @@ -30,8 +30,8 @@ | |||
| 30 | ;; in calendar.el. | 30 | ;; in calendar.el. |
| 31 | 31 | ||
| 32 | ;; Technical details of all the calendrical calculations can be found in | 32 | ;; Technical details of all the calendrical calculations can be found in |
| 33 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 33 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 34 | ;; Cambridge University Press (1997). | 34 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 35 | 35 | ||
| 36 | ;; An earlier version of the technical details appeared in | 36 | ;; An earlier version of the technical details appeared in |
| 37 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 37 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, |
diff --git a/lisp/calendar/lunar.el b/lisp/calendar/lunar.el index 7efed3ff275..057419969fc 100644 --- a/lisp/calendar/lunar.el +++ b/lisp/calendar/lunar.el | |||
| @@ -38,8 +38,8 @@ | |||
| 38 | ;; person rewrite the code for the lunar calculations in this file! | 38 | ;; person rewrite the code for the lunar calculations in this file! |
| 39 | 39 | ||
| 40 | ;; Technical details of all the calendrical calculations can be found in | 40 | ;; Technical details of all the calendrical calculations can be found in |
| 41 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 41 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 42 | ;; Cambridge University Press (1997). | 42 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 43 | 43 | ||
| 44 | ;; Comments, corrections, and improvements should be sent to | 44 | ;; Comments, corrections, and improvements should be sent to |
| 45 | ;; Edward M. Reingold Department of Computer Science | 45 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/calendar/solar.el b/lisp/calendar/solar.el index 8a514fa6415..57a6c6a40a8 100644 --- a/lisp/calendar/solar.el +++ b/lisp/calendar/solar.el | |||
| @@ -48,8 +48,8 @@ | |||
| 48 | ;; 1951--2050. For other years the times will be within +/- 1 minute. | 48 | ;; 1951--2050. For other years the times will be within +/- 1 minute. |
| 49 | 49 | ||
| 50 | ;; Technical details of all the calendrical calculations can be found in | 50 | ;; Technical details of all the calendrical calculations can be found in |
| 51 | ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, | 51 | ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold |
| 52 | ;; Cambridge University Press (1997). | 52 | ;; and Nachum Dershowitz, Cambridge University Press (2001). |
| 53 | 53 | ||
| 54 | ;; Comments, corrections, and improvements should be sent to | 54 | ;; Comments, corrections, and improvements should be sent to |
| 55 | ;; Edward M. Reingold Department of Computer Science | 55 | ;; Edward M. Reingold Department of Computer Science |
diff --git a/lisp/comint.el b/lisp/comint.el index ccd02db39cf..feb0bb83de3 100644 --- a/lisp/comint.el +++ b/lisp/comint.el | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | ;;; comint.el --- general command interpreter in a window stuff | 1 | ;;; comint.el --- general command interpreter in a window stuff |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, | 3 | ;; Copyright (C) 1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
| 4 | ;; 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. | 4 | ;; 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Olin Shivers <shivers@cs.cmu.edu> | 6 | ;; Author: Olin Shivers <shivers@cs.cmu.edu> |
| 7 | ;; Simon Marshall <simon@gnu.org> | 7 | ;; Simon Marshall <simon@gnu.org> |
| @@ -791,14 +791,16 @@ buffer. The hook `comint-exec-hook' is run after each exec." | |||
| 791 | ;; This doesn't use "e" because it is supposed to work | 791 | ;; This doesn't use "e" because it is supposed to work |
| 792 | ;; for events without parameters. | 792 | ;; for events without parameters. |
| 793 | (interactive (list last-input-event)) | 793 | (interactive (list last-input-event)) |
| 794 | (if event (mouse-set-point event)) | ||
| 795 | (let ((pos (point))) | 794 | (let ((pos (point))) |
| 796 | (if (not (eq (get-char-property pos 'field) 'input)) | 795 | (if event (mouse-set-point event)) |
| 796 | (if (not (eq (get-char-property (point) 'field) 'input)) | ||
| 797 | ;; No input at POS, fall back to the global definition. | 797 | ;; No input at POS, fall back to the global definition. |
| 798 | (let* ((keys (this-command-keys)) | 798 | (let* ((keys (this-command-keys)) |
| 799 | (last-key (and (vectorp keys) (aref keys (1- (length keys))))) | 799 | (last-key (and (vectorp keys) (aref keys (1- (length keys))))) |
| 800 | (fun (and last-key (lookup-key global-map (vector last-key))))) | 800 | (fun (and last-key (lookup-key global-map (vector last-key))))) |
| 801 | (goto-char pos) | ||
| 801 | (and fun (call-interactively fun))) | 802 | (and fun (call-interactively fun))) |
| 803 | (setq pos (point)) | ||
| 802 | ;; There's previous input at POS, insert it at the end of the buffer. | 804 | ;; There's previous input at POS, insert it at the end of the buffer. |
| 803 | (goto-char (point-max)) | 805 | (goto-char (point-max)) |
| 804 | ;; First delete any old unsent input at the end | 806 | ;; First delete any old unsent input at the end |
diff --git a/lisp/complete.el b/lisp/complete.el index d3c5de459d5..60bddd01f17 100644 --- a/lisp/complete.el +++ b/lisp/complete.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; complete.el --- partial completion mechanism plus other goodies | 1 | ;;; complete.el --- partial completion mechanism plus other goodies |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2003 | 3 | ;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2003, 2005 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Dave Gillespie <daveg@synaptics.com> | 6 | ;; Author: Dave Gillespie <daveg@synaptics.com> |
| @@ -118,7 +118,7 @@ Some arcane rules: | |||
| 118 | If `]' is in this string, it must come first. | 118 | If `]' is in this string, it must come first. |
| 119 | If `^' is in this string, it must not come first. | 119 | If `^' is in this string, it must not come first. |
| 120 | If `-' is in this string, it must come first or right after `]'. | 120 | If `-' is in this string, it must come first or right after `]'. |
| 121 | In other words, if S is this string, then `[S]' must be a legal Emacs regular | 121 | In other words, if S is this string, then `[S]' must be a valid Emacs regular |
| 122 | expression (not containing character ranges like `a-z')." | 122 | expression (not containing character ranges like `a-z')." |
| 123 | :type 'string | 123 | :type 'string |
| 124 | :group 'partial-completion) | 124 | :group 'partial-completion) |
| @@ -937,12 +937,11 @@ absolute rather than relative to some directory on the SEARCH-PATH." | |||
| 937 | ((not completion-table) nil) | 937 | ((not completion-table) nil) |
| 938 | ((eq action nil) (try-completion str2 completion-table nil)) | 938 | ((eq action nil) (try-completion str2 completion-table nil)) |
| 939 | ((eq action t) (all-completions str2 completion-table nil)) | 939 | ((eq action t) (all-completions str2 completion-table nil)) |
| 940 | ((eq action 'lambda) | 940 | ((eq action 'lambda) (test-completion str2 completion-table nil)))) |
| 941 | (eq (try-completion str2 completion-table nil) t)))) | ||
| 942 | (funcall PC-old-read-file-name-internal string dir action))) | 941 | (funcall PC-old-read-file-name-internal string dir action))) |
| 943 | 942 | ||
| 944 | 943 | ||
| 945 | (provide 'complete) | 944 | (provide 'complete) |
| 946 | 945 | ||
| 947 | ;;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 | 946 | ;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 |
| 948 | ;;; complete.el ends here | 947 | ;;; complete.el ends here |
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 2e210d084ba..9a1449823ca 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el | |||
| @@ -91,13 +91,14 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'." | |||
| 91 | nil)) | 91 | nil)) |
| 92 | (diff-backup (dired-get-filename) switches)) | 92 | (diff-backup (dired-get-filename) switches)) |
| 93 | 93 | ||
| 94 | ;;;###autoload | ||
| 94 | (defun dired-compare-directories (dir2 predicate) | 95 | (defun dired-compare-directories (dir2 predicate) |
| 95 | "Mark files with different file attributes in two dired buffers. | 96 | "Mark files with different file attributes in two dired buffers. |
| 96 | Compare file attributes of files in the current directory | 97 | Compare file attributes of files in the current directory |
| 97 | with file attributes in directory DIR2 using PREDICATE on pairs of files | 98 | with file attributes in directory DIR2 using PREDICATE on pairs of files |
| 98 | with the same name. Mark files for which PREDICATE returns non-nil. | 99 | with the same name. Mark files for which PREDICATE returns non-nil. |
| 99 | Mark files with different names if PREDICATE is nil (or interactively | 100 | Mark files with different names if PREDICATE is nil (or interactively |
| 100 | when the user enters empty input at the predicate prompt). | 101 | with empty input at the predicate prompt). |
| 101 | 102 | ||
| 102 | PREDICATE is a Lisp expression that can refer to the following variables: | 103 | PREDICATE is a Lisp expression that can refer to the following variables: |
| 103 | 104 | ||
| @@ -117,9 +118,10 @@ Examples of PREDICATE: | |||
| 117 | (not (and (= (nth 2 fa1) (nth 2 fa2)) - mark files with different UID | 118 | (not (and (= (nth 2 fa1) (nth 2 fa2)) - mark files with different UID |
| 118 | (= (nth 3 fa1) (nth 3 fa2)))) and GID." | 119 | (= (nth 3 fa1) (nth 3 fa2)))) and GID." |
| 119 | (interactive | 120 | (interactive |
| 120 | (list (read-file-name (format "Compare %s with: " | 121 | (list (read-directory-name (format "Compare %s with: " |
| 121 | (dired-current-directory)) | 122 | (dired-current-directory)) |
| 122 | (dired-dwim-target-directory)) | 123 | (dired-dwim-target-directory) |
| 124 | (dired-dwim-target-directory)) | ||
| 123 | (read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil"))) | 125 | (read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil"))) |
| 124 | (let* ((dir1 (dired-current-directory)) | 126 | (let* ((dir1 (dired-current-directory)) |
| 125 | (file-alist1 (dired-files-attributes dir1)) | 127 | (file-alist1 (dired-files-attributes dir1)) |
diff --git a/lisp/dired.el b/lisp/dired.el index f9eb97f549e..8ee19486a7e 100644 --- a/lisp/dired.el +++ b/lisp/dired.el | |||
| @@ -1251,6 +1251,9 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST." | |||
| 1251 | (define-key map [menu-bar immediate dashes] | 1251 | (define-key map [menu-bar immediate dashes] |
| 1252 | '("--")) | 1252 | '("--")) |
| 1253 | 1253 | ||
| 1254 | (define-key map [menu-bar immediate compare-directories] | ||
| 1255 | '(menu-item "Compare directories..." dired-compare-directories | ||
| 1256 | :help "Mark files with different attributes in two dired buffers")) | ||
| 1254 | (define-key map [menu-bar immediate backup-diff] | 1257 | (define-key map [menu-bar immediate backup-diff] |
| 1255 | '(menu-item "Compare with Backup" dired-backup-diff | 1258 | '(menu-item "Compare with Backup" dired-backup-diff |
| 1256 | :help "Diff file at cursor with its latest backup")) | 1259 | :help "Diff file at cursor with its latest backup")) |
diff --git a/lisp/ediff-hook.el b/lisp/ediff-hook.el index 7ea6f24d7bb..5394923aa36 100644 --- a/lisp/ediff-hook.el +++ b/lisp/ediff-hook.el | |||
| @@ -131,10 +131,10 @@ | |||
| 131 | )) | 131 | )) |
| 132 | (defvar ediff-misc-menu | 132 | (defvar ediff-misc-menu |
| 133 | '("Ediff Miscellanea" | 133 | '("Ediff Miscellanea" |
| 134 | ["Ediff Manual..." ediff-documentation t] | 134 | ["Ediff Manual" ediff-documentation t] |
| 135 | ["Customize Ediff..." ediff-customize t] | 135 | ["Customize Ediff" ediff-customize t] |
| 136 | ["List Ediff Sessions..." ediff-show-registry t] | 136 | ["List Ediff Sessions" ediff-show-registry t] |
| 137 | ["Use separate frame for Ediff control buffer..." | 137 | ["Use separate frame for Ediff control buffer" |
| 138 | ediff-toggle-multiframe | 138 | ediff-toggle-multiframe |
| 139 | :style toggle | 139 | :style toggle |
| 140 | :selected (if (and (featurep 'ediff-util) | 140 | :selected (if (and (featurep 'ediff-util) |
| @@ -242,14 +242,14 @@ | |||
| 242 | 242 | ||
| 243 | ;; define ediff miscellanea | 243 | ;; define ediff miscellanea |
| 244 | (define-key menu-bar-ediff-misc-menu [emultiframe] | 244 | (define-key menu-bar-ediff-misc-menu [emultiframe] |
| 245 | '("Toggle use of separate control buffer frame..." | 245 | '("Toggle use of separate control buffer frame" |
| 246 | . ediff-toggle-multiframe)) | 246 | . ediff-toggle-multiframe)) |
| 247 | (define-key menu-bar-ediff-misc-menu [eregistry] | 247 | (define-key menu-bar-ediff-misc-menu [eregistry] |
| 248 | '("List Ediff Sessions..." . ediff-show-registry)) | 248 | '("List Ediff Sessions" . ediff-show-registry)) |
| 249 | (define-key menu-bar-ediff-misc-menu [ediff-cust] | 249 | (define-key menu-bar-ediff-misc-menu [ediff-cust] |
| 250 | '("Customize Ediff..." . ediff-customize)) | 250 | '("Customize Ediff" . ediff-customize)) |
| 251 | (define-key menu-bar-ediff-misc-menu [ediff-doc] | 251 | (define-key menu-bar-ediff-misc-menu [ediff-doc] |
| 252 | '("Ediff Manual..." . ediff-documentation)) | 252 | '("Ediff Manual" . ediff-documentation)) |
| 253 | ) | 253 | ) |
| 254 | 254 | ||
| 255 | ) ; emacs case | 255 | ) ; emacs case |
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el index cfaac96bbb1..171b68e457c 100644 --- a/lisp/emacs-lisp/advice.el +++ b/lisp/emacs-lisp/advice.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; advice.el --- an overloading mechanism for Emacs Lisp functions | 1 | ;;; advice.el --- an overloading mechanism for Emacs Lisp functions |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1993,1994,2000,01,2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993,1994,2000,01,2004,2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Hans Chalupsky <hans@cs.buffalo.edu> | 5 | ;; Author: Hans Chalupsky <hans@cs.buffalo.edu> |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| @@ -2173,7 +2173,7 @@ Redefining advices affect the construction of an advised definition." | |||
| 2173 | ;; ============================================ | 2173 | ;; ============================================ |
| 2174 | ;; The advice-info of an advised function contains its `origname' which is | 2174 | ;; The advice-info of an advised function contains its `origname' which is |
| 2175 | ;; a symbol that is fbound to the original definition available at the first | 2175 | ;; a symbol that is fbound to the original definition available at the first |
| 2176 | ;; proper activation of the function after a legal re/definition. If the | 2176 | ;; proper activation of the function after a valid re/definition. If the |
| 2177 | ;; original was defined via fcell indirection then `origname' will be defined | 2177 | ;; original was defined via fcell indirection then `origname' will be defined |
| 2178 | ;; just so. Hence, to get hold of the actual original definition of a function | 2178 | ;; just so. Hence, to get hold of the actual original definition of a function |
| 2179 | ;; we need to use `ad-real-orig-definition'. | 2179 | ;; we need to use `ad-real-orig-definition'. |
| @@ -2238,7 +2238,7 @@ which PREDICATE returns non-nil)." | |||
| 2238 | ad-advice-classes)) | 2238 | ad-advice-classes)) |
| 2239 | 2239 | ||
| 2240 | (defun ad-read-advice-class (function &optional prompt default) | 2240 | (defun ad-read-advice-class (function &optional prompt default) |
| 2241 | "Read a legal advice class with completion from the minibuffer. | 2241 | "Read a valid advice class with completion from the minibuffer. |
| 2242 | An optional PROMPT will be used to prompt for the class. DEFAULT will | 2242 | An optional PROMPT will be used to prompt for the class. DEFAULT will |
| 2243 | be returned on empty input (defaults to the first non-empty advice | 2243 | be returned on empty input (defaults to the first non-empty advice |
| 2244 | class of FUNCTION)." | 2244 | class of FUNCTION)." |
| @@ -2312,7 +2312,7 @@ be used to prompt for the function." | |||
| 2312 | (defun ad-find-some-advice (function class name) | 2312 | (defun ad-find-some-advice (function class name) |
| 2313 | "Find the first of FUNCTION's advices in CLASS matching NAME. | 2313 | "Find the first of FUNCTION's advices in CLASS matching NAME. |
| 2314 | NAME can be a symbol or a regular expression matching part of an advice name. | 2314 | NAME can be a symbol or a regular expression matching part of an advice name. |
| 2315 | If CLASS is `any' all legal advice classes will be checked." | 2315 | If CLASS is `any' all valid advice classes will be checked." |
| 2316 | (if (ad-is-advised function) | 2316 | (if (ad-is-advised function) |
| 2317 | (let (found-advice) | 2317 | (let (found-advice) |
| 2318 | (ad-dolist (advice-class ad-advice-classes) | 2318 | (ad-dolist (advice-class ad-advice-classes) |
| @@ -2332,7 +2332,7 @@ If CLASS is `any' all legal advice classes will be checked." | |||
| 2332 | "Set enable FLAG of FUNCTION's advices in CLASS matching NAME. | 2332 | "Set enable FLAG of FUNCTION's advices in CLASS matching NAME. |
| 2333 | If NAME is a string rather than a symbol then it's interpreted as a regular | 2333 | If NAME is a string rather than a symbol then it's interpreted as a regular |
| 2334 | expression and all advices whose name contain a match for it will be | 2334 | expression and all advices whose name contain a match for it will be |
| 2335 | affected. If CLASS is `any' advices in all legal advice classes will be | 2335 | affected. If CLASS is `any' advices in all valid advice classes will be |
| 2336 | considered. The number of changed advices will be returned (or nil if | 2336 | considered. The number of changed advices will be returned (or nil if |
| 2337 | FUNCTION was not advised)." | 2337 | FUNCTION was not advised)." |
| 2338 | (if (ad-is-advised function) | 2338 | (if (ad-is-advised function) |
| @@ -2369,7 +2369,7 @@ FUNCTION was not advised)." | |||
| 2369 | 2369 | ||
| 2370 | (defun ad-enable-regexp-internal (regexp class flag) | 2370 | (defun ad-enable-regexp-internal (regexp class flag) |
| 2371 | "Set enable FLAGs of all CLASS advices whose name contains a REGEXP match. | 2371 | "Set enable FLAGs of all CLASS advices whose name contains a REGEXP match. |
| 2372 | If CLASS is `any' all legal advice classes are considered. The number of | 2372 | If CLASS is `any' all valid advice classes are considered. The number of |
| 2373 | affected advices will be returned." | 2373 | affected advices will be returned." |
| 2374 | (let ((matched-advices 0)) | 2374 | (let ((matched-advices 0)) |
| 2375 | (ad-do-advised-functions (advised-function) | 2375 | (ad-do-advised-functions (advised-function) |
| @@ -3755,7 +3755,7 @@ deactivation, which might run hooks and get into other trouble." | |||
| 3755 | (error nil)))) | 3755 | (error nil)))) |
| 3756 | 3756 | ||
| 3757 | 3757 | ||
| 3758 | ;; Completion alist of legal `defadvice' flags | 3758 | ;; Completion alist of valid `defadvice' flags |
| 3759 | (defvar ad-defadvice-flags | 3759 | (defvar ad-defadvice-flags |
| 3760 | '(("protect") ("disable") ("activate") | 3760 | '(("protect") ("disable") ("activate") |
| 3761 | ("compile") ("preactivate") ("freeze"))) | 3761 | ("compile") ("preactivate") ("freeze"))) |
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index cbab83184e1..305f0dd9587 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; cl-macs.el --- Common Lisp macros -*-byte-compile-dynamic: t;-*- | 1 | ;;; cl-macs.el --- Common Lisp macros -*-byte-compile-dynamic: t;-*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1993, 2003, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Dave Gillespie <daveg@synaptics.com> | 5 | ;; Author: Dave Gillespie <daveg@synaptics.com> |
| 6 | ;; Version: 2.02 | 6 | ;; Version: 2.02 |
| @@ -2219,7 +2219,7 @@ copier, a `NAME-p' predicate, and setf-able `NAME-SLOT' accessors. | |||
| 2219 | (if type | 2219 | (if type |
| 2220 | (progn | 2220 | (progn |
| 2221 | (or (memq type '(vector list)) | 2221 | (or (memq type '(vector list)) |
| 2222 | (error "Illegal :type specifier: %s" type)) | 2222 | (error "Invalid :type specifier: %s" type)) |
| 2223 | (if named (setq tag name))) | 2223 | (if named (setq tag name))) |
| 2224 | (setq type 'vector named 'true))) | 2224 | (setq type 'vector named 'true))) |
| 2225 | (or named (setq descs (delq (assq 'cl-tag-slot descs) descs))) | 2225 | (or named (setq descs (delq (assq 'cl-tag-slot descs) descs))) |
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index e97e9012fc1..2149cba8720 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el | |||
| @@ -584,10 +584,9 @@ Applies to the frame whose line point is on in the backtrace." | |||
| 584 | (terpri)) | 584 | (terpri)) |
| 585 | 585 | ||
| 586 | (with-current-buffer (get-buffer debugger-record-buffer) | 586 | (with-current-buffer (get-buffer debugger-record-buffer) |
| 587 | (save-excursion | 587 | (message "%s" |
| 588 | (forward-line -1) | 588 | (buffer-substring (line-beginning-position 0) |
| 589 | (message | 589 | (line-end-position 0))))) |
| 590 | (buffer-substring (point) (progn (end-of-line) (point))))))) | ||
| 591 | 590 | ||
| 592 | (put 'debugger-mode 'mode-class 'special) | 591 | (put 'debugger-mode 'mode-class 'special) |
| 593 | 592 | ||
| @@ -633,24 +632,31 @@ which must be written in Lisp, not predefined. | |||
| 633 | Use \\[cancel-debug-on-entry] to cancel the effect of this command. | 632 | Use \\[cancel-debug-on-entry] to cancel the effect of this command. |
| 634 | Redefining FUNCTION also cancels it." | 633 | Redefining FUNCTION also cancels it." |
| 635 | (interactive "aDebug on entry (to function): ") | 634 | (interactive "aDebug on entry (to function): ") |
| 636 | ;; Handle a function that has been aliased to some other function. | 635 | (when (and (subrp (symbol-function function)) |
| 637 | (if (and (subrp (symbol-function function)) | 636 | (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) |
| 638 | (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) | 637 | (error "Function %s is a special form" function)) |
| 639 | (error "Function %s is a special form" function)) | 638 | (if (or (symbolp (symbol-function function)) |
| 640 | (if (or (symbolp (symbol-function function)) | ||
| 641 | (subrp (symbol-function function))) | 639 | (subrp (symbol-function function))) |
| 642 | ;; Create a wrapper in which we can then add the necessary debug call. | 640 | ;; The function is built-in or aliased to another function. |
| 641 | ;; Create a wrapper in which we can add the debug call. | ||
| 643 | (fset function `(lambda (&rest debug-on-entry-args) | 642 | (fset function `(lambda (&rest debug-on-entry-args) |
| 644 | ,(interactive-form (symbol-function function)) | 643 | ,(interactive-form (symbol-function function)) |
| 645 | (apply ',(symbol-function function) | 644 | (apply ',(symbol-function function) |
| 646 | debug-on-entry-args)))) | 645 | debug-on-entry-args))) |
| 647 | (or (consp (symbol-function function)) | 646 | (when (eq (car-safe (symbol-function function)) 'autoload) |
| 648 | (debug-convert-byte-code function)) | 647 | ;; The function is autoloaded. Load its real definition. |
| 649 | (or (consp (symbol-function function)) | 648 | (load (cadr (symbol-function function)) nil noninteractive nil t)) |
| 650 | (error "Definition of %s is not a list" function)) | 649 | (when (or (not (consp (symbol-function function))) |
| 650 | (and (eq (car (symbol-function function)) 'macro) | ||
| 651 | (not (consp (cdr (symbol-function function)))))) | ||
| 652 | ;; The function is byte-compiled. Create a wrapper in which | ||
| 653 | ;; we can add the debug call. | ||
| 654 | (debug-convert-byte-code function))) | ||
| 655 | (unless (consp (symbol-function function)) | ||
| 656 | (error "Definition of %s is not a list" function)) | ||
| 651 | (fset function (debug-on-entry-1 function t)) | 657 | (fset function (debug-on-entry-1 function t)) |
| 652 | (or (memq function debug-function-list) | 658 | (unless (memq function debug-function-list) |
| 653 | (push function debug-function-list)) | 659 | (push function debug-function-list)) |
| 654 | function) | 660 | function) |
| 655 | 661 | ||
| 656 | ;;;###autoload | 662 | ;;;###autoload |
| @@ -665,45 +671,52 @@ If argument is nil or an empty string, cancel for all functions." | |||
| 665 | (if name (intern name))))) | 671 | (if name (intern name))))) |
| 666 | (if (and function (not (string= function ""))) | 672 | (if (and function (not (string= function ""))) |
| 667 | (progn | 673 | (progn |
| 668 | (let ((f (debug-on-entry-1 function nil))) | 674 | (let ((defn (debug-on-entry-1 function nil))) |
| 669 | (condition-case nil | 675 | (condition-case nil |
| 670 | (if (and (equal (nth 1 f) '(&rest debug-on-entry-args)) | 676 | (when (and (equal (nth 1 defn) '(&rest debug-on-entry-args)) |
| 671 | (eq (car (nth 3 f)) 'apply)) | 677 | (eq (car (nth 3 defn)) 'apply)) |
| 672 | ;; `f' is a wrapper introduced in debug-on-entry. | 678 | ;; `defn' is a wrapper introduced in debug-on-entry. |
| 673 | ;; Get rid of it since we don't need it any more. | 679 | ;; Get rid of it since we don't need it any more. |
| 674 | (setq f (nth 1 (nth 1 (nth 3 f))))) | 680 | (setq defn (nth 1 (nth 1 (nth 3 defn))))) |
| 675 | (error nil)) | 681 | (error nil)) |
| 676 | (fset function f)) | 682 | (fset function defn)) |
| 677 | (setq debug-function-list (delq function debug-function-list)) | 683 | (setq debug-function-list (delq function debug-function-list)) |
| 678 | function) | 684 | function) |
| 679 | (message "Cancelling debug-on-entry for all functions") | 685 | (message "Cancelling debug-on-entry for all functions") |
| 680 | (mapcar 'cancel-debug-on-entry debug-function-list))) | 686 | (mapcar 'cancel-debug-on-entry debug-function-list))) |
| 681 | 687 | ||
| 682 | (defun debug-convert-byte-code (function) | 688 | (defun debug-convert-byte-code (function) |
| 683 | (let ((defn (symbol-function function))) | 689 | (let* ((defn (symbol-function function)) |
| 684 | (if (not (consp defn)) | 690 | (macro (eq (car-safe defn) 'macro))) |
| 685 | ;; Assume a compiled code object. | 691 | (when macro (setq defn (cdr defn))) |
| 686 | (let* ((contents (append defn nil)) | 692 | (unless (consp defn) |
| 687 | (body | 693 | ;; Assume a compiled code object. |
| 688 | (list (list 'byte-code (nth 1 contents) | 694 | (let* ((contents (append defn nil)) |
| 689 | (nth 2 contents) (nth 3 contents))))) | 695 | (body |
| 690 | (if (nthcdr 5 contents) | 696 | (list (list 'byte-code (nth 1 contents) |
| 691 | (setq body (cons (list 'interactive (nth 5 contents)) body))) | 697 | (nth 2 contents) (nth 3 contents))))) |
| 692 | (if (nth 4 contents) | 698 | (if (nthcdr 5 contents) |
| 693 | ;; Use `documentation' here, to get the actual string, | 699 | (setq body (cons (list 'interactive (nth 5 contents)) body))) |
| 694 | ;; in case the compiled function has a reference | 700 | (if (nth 4 contents) |
| 695 | ;; to the .elc file. | 701 | ;; Use `documentation' here, to get the actual string, |
| 696 | (setq body (cons (documentation function) body))) | 702 | ;; in case the compiled function has a reference |
| 697 | (fset function (cons 'lambda (cons (car contents) body))))))) | 703 | ;; to the .elc file. |
| 704 | (setq body (cons (documentation function) body))) | ||
| 705 | (setq defn (cons 'lambda (cons (car contents) body)))) | ||
| 706 | (when macro (setq defn (cons 'macro defn))) | ||
| 707 | (fset function defn)))) | ||
| 698 | 708 | ||
| 699 | (defun debug-on-entry-1 (function flag) | 709 | (defun debug-on-entry-1 (function flag) |
| 700 | (let* ((defn (symbol-function function)) | 710 | (let* ((defn (symbol-function function)) |
| 701 | (tail defn)) | 711 | (tail defn)) |
| 702 | (if (subrp tail) | 712 | (when (eq (car-safe tail) 'macro) |
| 703 | (error "%s is a built-in function" function) | 713 | (setq tail (cdr tail))) |
| 704 | (if (eq (car tail) 'macro) (setq tail (cdr tail))) | 714 | (if (not (eq (car-safe tail) 'lambda)) |
| 705 | (if (eq (car tail) 'lambda) (setq tail (cdr tail)) | 715 | ;; Only signal an error when we try to set debug-on-entry. |
| 706 | (error "%s not user-defined Lisp function" function)) | 716 | ;; When we try to clear debug-on-entry, we are now done. |
| 717 | (when flag | ||
| 718 | (error "%s is not a user-defined Lisp function" function)) | ||
| 719 | (setq tail (cdr tail)) | ||
| 707 | ;; Skip the docstring. | 720 | ;; Skip the docstring. |
| 708 | (when (and (stringp (cadr tail)) (cddr tail)) | 721 | (when (and (stringp (cadr tail)) (cddr tail)) |
| 709 | (setq tail (cdr tail))) | 722 | (setq tail (cdr tail))) |
| @@ -714,8 +727,8 @@ If argument is nil or an empty string, cancel for all functions." | |||
| 714 | ;; Add/remove debug statement as needed. | 727 | ;; Add/remove debug statement as needed. |
| 715 | (if flag | 728 | (if flag |
| 716 | (setcdr tail (cons '(implement-debug-on-entry) (cdr tail))) | 729 | (setcdr tail (cons '(implement-debug-on-entry) (cdr tail))) |
| 717 | (setcdr tail (cddr tail)))) | 730 | (setcdr tail (cddr tail))))) |
| 718 | defn))) | 731 | defn)) |
| 719 | 732 | ||
| 720 | (defun debugger-list-functions () | 733 | (defun debugger-list-functions () |
| 721 | "Display a list of all the functions now set to debug on entry." | 734 | "Display a list of all the functions now set to debug on entry." |
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 2e829080c9c..8f4245cb9a1 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el | |||
| @@ -91,6 +91,7 @@ | |||
| 91 | '("defun" "defun*" "defsubst" "defmacro" | 91 | '("defun" "defun*" "defsubst" "defmacro" |
| 92 | "defadvice" "define-skeleton" | 92 | "defadvice" "define-skeleton" |
| 93 | "define-minor-mode" "define-derived-mode" | 93 | "define-minor-mode" "define-derived-mode" |
| 94 | "define-generic-mode" | ||
| 94 | "define-compiler-macro" "define-modify-macro" | 95 | "define-compiler-macro" "define-modify-macro" |
| 95 | "defsetf" "define-setf-expander" | 96 | "defsetf" "define-setf-expander" |
| 96 | "define-method-combination" | 97 | "define-method-combination" |
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index d4a10104eea..49196f17ef0 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; rx.el --- sexp notation for regular expressions | 1 | ;;; rx.el --- sexp notation for regular expressions |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2001, 03, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Gerd Moellmann <gerd@gnu.org> | 5 | ;; Author: Gerd Moellmann <gerd@gnu.org> |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| @@ -169,6 +169,8 @@ | |||
| 169 | (eow . word-end) ; SRE | 169 | (eow . word-end) ; SRE |
| 170 | (word-boundary . "\\b") | 170 | (word-boundary . "\\b") |
| 171 | (not-word-boundary . "\\B") ; sregex | 171 | (not-word-boundary . "\\B") ; sregex |
| 172 | (symbol-start . "\\_<") | ||
| 173 | (symbol-end . "\\_>") | ||
| 172 | (syntax . (rx-syntax 1 1)) | 174 | (syntax . (rx-syntax 1 1)) |
| 173 | (not-syntax . (rx-not-syntax 1 1)) ; sregex | 175 | (not-syntax . (rx-not-syntax 1 1)) ; sregex |
| 174 | (category . (rx-category 1 1 rx-check-category)) | 176 | (category . (rx-category 1 1 rx-check-category)) |
| @@ -969,5 +971,5 @@ enclosed in `(and ...)'. | |||
| 969 | 971 | ||
| 970 | (provide 'rx) | 972 | (provide 'rx) |
| 971 | 973 | ||
| 972 | ;;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b | 974 | ;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b |
| 973 | ;;; rx.el ends here | 975 | ;;; rx.el ends here |
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index d72dc91ad2b..7b2ba5c6fb2 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el | |||
| @@ -1016,7 +1016,7 @@ If ARG is the atom `-', scroll upward by nearly full screen." | |||
| 1016 | (scroll-down arg) | 1016 | (scroll-down arg) |
| 1017 | (beginning-of-buffer (goto-char (point-min))))))) | 1017 | (beginning-of-buffer (goto-char (point-min))))))) |
| 1018 | 1018 | ||
| 1019 | (put 'cua-scroll-up 'CUA 'move) | 1019 | (put 'cua-scroll-down 'CUA 'move) |
| 1020 | 1020 | ||
| 1021 | ;;; Cursor indications | 1021 | ;;; Cursor indications |
| 1022 | 1022 | ||
diff --git a/lisp/emulation/vi.el b/lisp/emulation/vi.el index 4e17644e66a..70a52617431 100644 --- a/lisp/emulation/vi.el +++ b/lisp/emulation/vi.el | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | ;;; vi.el --- major mode for emulating "vi" editor under GNU Emacs | 1 | ;;; vi.el --- major mode for emulating "vi" editor under GNU Emacs |
| 2 | 2 | ||
| 3 | ; This file is in the public domain because the authors distributed it | 3 | ;; This file is in the public domain because the authors distributed it |
| 4 | ; without a copyright notice before the US signed the Bern Convention. | 4 | ;; without a copyright notice before the US signed the Bern Convention. |
| 5 | 5 | ||
| 6 | ;; This file is part of GNU Emacs. | 6 | ;; This file is part of GNU Emacs. |
| 7 | 7 | ||
| @@ -11,32 +11,32 @@ | |||
| 11 | 11 | ||
| 12 | ;;; Commentary: | 12 | ;;; Commentary: |
| 13 | 13 | ||
| 14 | ; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring) | 14 | ;; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring) |
| 15 | ; Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu) | 15 | ;; Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu) |
| 16 | ; Last revision: 01/07/87 Wed (for GNU Emacs 18.33) | 16 | ;; Last revision: 01/07/87 Wed (for GNU Emacs 18.33) |
| 17 | 17 | ||
| 18 | ; INSTALLATION PROCEDURE: | 18 | ;; INSTALLATION PROCEDURE: |
| 19 | ; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of | 19 | ;; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of |
| 20 | ; the single ESC used in real "vi", so I can access other ESC prefixed emacs | 20 | ;; the single ESC used in real "vi", so I can access other ESC prefixed emacs |
| 21 | ; commands while I'm in "vi"), say, by putting the following line in your | 21 | ;; commands while I'm in "vi"), say, by putting the following line in your |
| 22 | ; ".emacs" file: | 22 | ;; ".emacs" file: |
| 23 | ; (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode | 23 | ;; (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode |
| 24 | ; 2) If you wish you can define "find-file-hooks" to enter "vi" automatically | 24 | ;; 2) If you wish you can define "find-file-hook" to enter "vi" automatically |
| 25 | ; after a file is loaded into the buffer. For example, I defined it as: | 25 | ;; after a file is loaded into the buffer. For example, I defined it as: |
| 26 | ; (setq find-file-hooks (list | 26 | ;; (setq find-file-hook (list |
| 27 | ; (function (lambda () | 27 | ;; (function (lambda () |
| 28 | ; (if (not (or (eq major-mode 'Info-mode) | 28 | ;; (if (not (or (eq major-mode 'Info-mode) |
| 29 | ; (eq major-mode 'vi-mode))) | 29 | ;; (eq major-mode 'vi-mode))) |
| 30 | ; (vi-mode)))))) | 30 | ;; (vi-mode)))))) |
| 31 | ; 3) In your .emacs file you can define the command "vi-mode" to be "autoload" | 31 | ;; 3) In your .emacs file you can define the command "vi-mode" to be "autoload" |
| 32 | ; or you can execute the "load" command to load "vi" directly. | 32 | ;; or you can execute the "load" command to load "vi" directly. |
| 33 | ; 4) Read the comments for command "vi-mode" before you start using it. | 33 | ;; 4) Read the comments for command "vi-mode" before you start using it. |
| 34 | ; | 34 | |
| 35 | ; COULD DO | 35 | ;; COULD DO |
| 36 | ; 1). A general 'define-operator' function to replace current hack | 36 | ;; 1). A general 'define-operator' function to replace current hack |
| 37 | ; 2). In operator handling, should allow other point moving Emacs commands | 37 | ;; 2). In operator handling, should allow other point moving Emacs commands |
| 38 | ; (such as ESC <, ESC >) to be used as arguments. | 38 | ;; (such as ESC <, ESC >) to be used as arguments. |
| 39 | ; | 39 | |
| 40 | ;;; Code: | 40 | ;;; Code: |
| 41 | 41 | ||
| 42 | (defvar vi-mode-old-major-mode) | 42 | (defvar vi-mode-old-major-mode) |
| @@ -1487,5 +1487,5 @@ With ARG, inserts that many newlines." | |||
| 1487 | 1487 | ||
| 1488 | (provide 'vi) | 1488 | (provide 'vi) |
| 1489 | 1489 | ||
| 1490 | ;;; arch-tag: ac9bdac3-8acb-4ddd-bdae-c6dd873153b3 | 1490 | ;; arch-tag: ac9bdac3-8acb-4ddd-bdae-c6dd873153b3 |
| 1491 | ;;; vi.el ends here | 1491 | ;;; vi.el ends here |
diff --git a/lisp/emulation/vip.el b/lisp/emulation/vip.el index cbb0aa55aa8..af878085ba8 100644 --- a/lisp/emulation/vip.el +++ b/lisp/emulation/vip.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; vip.el --- a VI Package for GNU Emacs | 1 | ;;; vip.el --- a VI Package for GNU Emacs |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1986, 1987, 1988, 1992, 1993, 1998 | 3 | ;; Copyright (C) 1986, 1987, 1988, 1992, 1993, 1998, 2005 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Masahiko Sato <ms@sail.stanford.edu> | 6 | ;; Author: Masahiko Sato <ms@sail.stanford.edu> |
| @@ -2253,7 +2253,7 @@ a token has type \(command, address, end-mark\) and value." | |||
| 2253 | (setq ex-token-type "end-mark") | 2253 | (setq ex-token-type "end-mark") |
| 2254 | (setq ex-token "goto")) | 2254 | (setq ex-token "goto")) |
| 2255 | (t | 2255 | (t |
| 2256 | (error "illegal token"))))) | 2256 | (error "invalid token"))))) |
| 2257 | 2257 | ||
| 2258 | (defun vip-ex (&optional string) | 2258 | (defun vip-ex (&optional string) |
| 2259 | "ex commands within VIP." | 2259 | "ex commands within VIP." |
| @@ -2478,7 +2478,7 @@ a token has type \(command, address, end-mark\) and value." | |||
| 2478 | (setq ex-flag t) | 2478 | (setq ex-flag t) |
| 2479 | (forward-char 1))) | 2479 | (forward-char 1))) |
| 2480 | (if (not (looking-at "[\n|]")) | 2480 | (if (not (looking-at "[\n|]")) |
| 2481 | (error "Illegal extra characters")))) | 2481 | (error "Invalid extra characters")))) |
| 2482 | 2482 | ||
| 2483 | (defun vip-get-ex-count () | 2483 | (defun vip-get-ex-count () |
| 2484 | (setq ex-variant nil | 2484 | (setq ex-variant nil |
| @@ -2503,7 +2503,7 @@ a token has type \(command, address, end-mark\) and value." | |||
| 2503 | (setq ex-flag t) | 2503 | (setq ex-flag t) |
| 2504 | (forward-char 1))) | 2504 | (forward-char 1))) |
| 2505 | (if (not (looking-at "[\n|]")) | 2505 | (if (not (looking-at "[\n|]")) |
| 2506 | (error "Illegal extra characters")))) | 2506 | (error "Invalid extra characters")))) |
| 2507 | 2507 | ||
| 2508 | (defun vip-get-ex-file () | 2508 | (defun vip-get-ex-file () |
| 2509 | "get a file name and set ex-variant, ex-append and ex-offset if found" | 2509 | "get a file name and set ex-variant, ex-append and ex-offset if found" |
diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index d832fa9cd03..6944770dbc9 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; esh-io.el --- I/O management | 1 | ;;; esh-io.el --- I/O management |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000 Free Software Foundation | 3 | ;; Copyright (C) 1999, 2000, 2005 Free Software Foundation |
| 4 | 4 | ||
| 5 | ;; Author: John Wiegley <johnw@gnu.org> | 5 | ;; Author: John Wiegley <johnw@gnu.org> |
| 6 | 6 | ||
| @@ -377,7 +377,7 @@ it defaults to `insert'." | |||
| 377 | target) | 377 | target) |
| 378 | 378 | ||
| 379 | (t | 379 | (t |
| 380 | (error "Illegal redirection target: %s" | 380 | (error "Invalid redirection target: %s" |
| 381 | (eshell-stringify target))))) | 381 | (eshell-stringify target))))) |
| 382 | 382 | ||
| 383 | (eval-when-compile | 383 | (eval-when-compile |
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index fabcf367088..9ff9c1898a2 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; esh-var.el --- handling of variables | 1 | ;;; esh-var.el --- handling of variables |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000 Free Software Foundation | 3 | ;; Copyright (C) 1999, 2000, 2005 Free Software Foundation |
| 4 | 4 | ||
| 5 | ;; Author: John Wiegley <johnw@gnu.org> | 5 | ;; Author: John Wiegley <johnw@gnu.org> |
| 6 | 6 | ||
| @@ -568,7 +568,7 @@ For example, to retrieve the second element of a user's record in | |||
| 568 | (split-string value separator))))) | 568 | (split-string value separator))))) |
| 569 | (cond | 569 | (cond |
| 570 | ((< (length refs) 0) | 570 | ((< (length refs) 0) |
| 571 | (error "Illegal array variable index: %s" | 571 | (error "Invalid array variable index: %s" |
| 572 | (eshell-stringify refs))) | 572 | (eshell-stringify refs))) |
| 573 | ((= (length refs) 1) | 573 | ((= (length refs) 1) |
| 574 | (setq value (eshell-index-value value (car refs)))) | 574 | (setq value (eshell-index-value value (car refs)))) |
diff --git a/lisp/files.el b/lisp/files.el index 1921c959bf9..15d6f794e16 100644 --- a/lisp/files.el +++ b/lisp/files.el | |||
| @@ -928,20 +928,31 @@ documentation for additional customization information." | |||
| 928 | (defvar find-file-default nil | 928 | (defvar find-file-default nil |
| 929 | "Used within `find-file-read-args'.") | 929 | "Used within `find-file-read-args'.") |
| 930 | 930 | ||
| 931 | (defmacro minibuffer-with-setup-hook (fun &rest body) | ||
| 932 | "Add FUN to `minibuffer-setup-hook' while executing BODY. | ||
| 933 | BODY should use the minibuffer at most once. | ||
| 934 | Recursive uses of the minibuffer will not be affected." | ||
| 935 | (declare (indent 1) (debug t)) | ||
| 936 | (let ((hook (make-symbol "setup-hook"))) | ||
| 937 | `(let ((,hook | ||
| 938 | (lambda () | ||
| 939 | ;; Clear out this hook so it does not interfere | ||
| 940 | ;; with any recursive minibuffer usage. | ||
| 941 | (remove-hook 'minibuffer-setup-hook ,hook) | ||
| 942 | (,fun)))) | ||
| 943 | (unwind-protect | ||
| 944 | (progn | ||
| 945 | (add-hook 'minibuffer-setup-hook ,hook) | ||
| 946 | ,@body) | ||
| 947 | (remove-hook 'minibuffer-setup-hook ,hook))))) | ||
| 948 | |||
| 931 | (defun find-file-read-args (prompt mustmatch) | 949 | (defun find-file-read-args (prompt mustmatch) |
| 932 | (list (let ((find-file-default | 950 | (list (let ((find-file-default |
| 933 | (and buffer-file-name | 951 | (and buffer-file-name |
| 934 | (abbreviate-file-name buffer-file-name))) | 952 | (abbreviate-file-name buffer-file-name)))) |
| 935 | (munge-default-fun | 953 | (minibuffer-with-setup-hook |
| 936 | (lambda () | 954 | (lambda () (setq minibuffer-default find-file-default)) |
| 937 | (setq minibuffer-default find-file-default) | 955 | (read-file-name prompt nil default-directory mustmatch))) |
| 938 | ;; Clear out this hook so it does not interfere | ||
| 939 | ;; with any recursive minibuffer usage. | ||
| 940 | (pop minibuffer-setup-hook))) | ||
| 941 | (minibuffer-setup-hook | ||
| 942 | minibuffer-setup-hook)) | ||
| 943 | (add-hook 'minibuffer-setup-hook munge-default-fun) | ||
| 944 | (read-file-name prompt nil default-directory mustmatch)) | ||
| 945 | t)) | 956 | t)) |
| 946 | 957 | ||
| 947 | (defun find-file (filename &optional wildcards) | 958 | (defun find-file (filename &optional wildcards) |
| @@ -1777,8 +1788,8 @@ in that case, this function acts as if `enable-local-variables' were t." | |||
| 1777 | ("\\.tar\\'" . tar-mode) | 1788 | ("\\.tar\\'" . tar-mode) |
| 1778 | ;; The list of archive file extensions should be in sync with | 1789 | ;; The list of archive file extensions should be in sync with |
| 1779 | ;; `auto-coding-alist' with `no-conversion' coding system. | 1790 | ;; `auto-coding-alist' with `no-conversion' coding system. |
| 1780 | ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\)\\'" . archive-mode) | 1791 | ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . archive-mode) |
| 1781 | ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\)\\'" . archive-mode) | 1792 | ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . archive-mode) |
| 1782 | ("\\.sx[dmicw]\\'" . archive-mode) ; OpenOffice.org | 1793 | ("\\.sx[dmicw]\\'" . archive-mode) ; OpenOffice.org |
| 1783 | ;; Mailer puts message to be edited in | 1794 | ;; Mailer puts message to be edited in |
| 1784 | ;; /tmp/Re.... or Message | 1795 | ;; /tmp/Re.... or Message |
| @@ -3422,7 +3433,7 @@ This requires the external program `diff' to be in your `exec-path'." | |||
| 3422 | "Save some modified file-visiting buffers. Asks user about each one. | 3433 | "Save some modified file-visiting buffers. Asks user about each one. |
| 3423 | You can answer `y' to save, `n' not to save, `C-r' to look at the | 3434 | You can answer `y' to save, `n' not to save, `C-r' to look at the |
| 3424 | buffer in question with `view-buffer' before deciding or `d' to | 3435 | buffer in question with `view-buffer' before deciding or `d' to |
| 3425 | view the differences using `diff-buffer-to-file'. | 3436 | view the differences using `diff-buffer-with-file'. |
| 3426 | 3437 | ||
| 3427 | Optional argument (the prefix) non-nil means save all with no questions. | 3438 | Optional argument (the prefix) non-nil means save all with no questions. |
| 3428 | Optional second argument PRED determines which buffers are considered: | 3439 | Optional second argument PRED determines which buffers are considered: |
diff --git a/lisp/filesets.el b/lisp/filesets.el index dee662ee87d..13ddfa5a84d 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; filesets.el --- handle group of files | 1 | ;;; filesets.el --- handle group of files |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2002 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2002, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Thomas Link <t.link@gmx.at> | 5 | ;; Author: Thomas Link <t.link@gmx.at> |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| @@ -304,31 +304,26 @@ key is supported." | |||
| 304 | :type 'sexp | 304 | :type 'sexp |
| 305 | :group 'filesets) | 305 | :group 'filesets) |
| 306 | 306 | ||
| 307 | (if filesets-running-xemacs | 307 | (defcustom filesets-menu-path nil |
| 308 | (progn | 308 | "*The menu under which the filesets menu should be inserted. |
| 309 | (defcustom filesets-menu-path nil | 309 | See `add-submenu' for documentation." |
| 310 | "*The menu under which the filesets menu should be inserted. | 310 | :set (function filesets-set-default) |
| 311 | XEmacs specific; see `add-submenu' for documentation." | 311 | :type 'sexp |
| 312 | :set (function filesets-set-default) | 312 | :group 'filesets) |
| 313 | :type 'sexp | 313 | |
| 314 | :group 'filesets) | 314 | (defcustom filesets-menu-before "File" |
| 315 | 315 | "*The name of a menu before which this menu should be added. | |
| 316 | (defcustom filesets-menu-before "File" | 316 | See `add-submenu' for documentation." |
| 317 | "*The name of a menu before which this menu should be added. | 317 | :set (function filesets-set-default) |
| 318 | XEmacs specific; see `add-submenu' for documentation." | 318 | :type 'sexp |
| 319 | :set (function filesets-set-default) | 319 | :group 'filesets) |
| 320 | :type 'sexp | 320 | |
| 321 | :group 'filesets) | 321 | (defcustom filesets-menu-in-menu nil |
| 322 | 322 | "*Use that instead of `current-menubar' as the menu to change. | |
| 323 | (defcustom filesets-menu-in-menu nil | 323 | See `add-submenu' for documentation." |
| 324 | "*Use that instead of `current-menubar' as the menu to change. | 324 | :set (function filesets-set-default) |
| 325 | XEmacs specific; see `add-submenu' for documentation." | 325 | :type 'sexp |
| 326 | :set (function filesets-set-default) | 326 | :group 'filesets) |
| 327 | :type 'sexp | ||
| 328 | :group 'filesets)) | ||
| 329 | (defvar filesets-menu-path nil) | ||
| 330 | (defvar filesets-menu-before nil) | ||
| 331 | (defvar filesets-menu-in-menu nil)) | ||
| 332 | 327 | ||
| 333 | (defcustom filesets-menu-shortcuts-flag t | 328 | (defcustom filesets-menu-shortcuts-flag t |
| 334 | "*Non-nil means to prepend menus with hopefully unique shortcuts." | 329 | "*Non-nil means to prepend menus with hopefully unique shortcuts." |
| @@ -351,7 +346,7 @@ XEmacs specific; see `add-submenu' for documentation." | |||
| 351 | (defcustom filesets-menu-cache-file | 346 | (defcustom filesets-menu-cache-file |
| 352 | (if filesets-running-xemacs | 347 | (if filesets-running-xemacs |
| 353 | "~/.xemacs/filesets-cache.el" | 348 | "~/.xemacs/filesets-cache.el" |
| 354 | "~/.filesets-cache.el") | 349 | "~/.emacs.d/filesets-cache.el") |
| 355 | "*File to be used for saving the filesets menu between sessions. | 350 | "*File to be used for saving the filesets menu between sessions. |
| 356 | Set this to \"\", to disable caching of menus. | 351 | Set this to \"\", to disable caching of menus. |
| 357 | Don't forget to check out `filesets-menu-ensure-use-cached'." | 352 | Don't forget to check out `filesets-menu-ensure-use-cached'." |
| @@ -1070,9 +1065,7 @@ defined in `filesets-ingroup-patterns'." | |||
| 1070 | ;;; Emacs compatibility | 1065 | ;;; Emacs compatibility |
| 1071 | (eval-and-compile | 1066 | (eval-and-compile |
| 1072 | (if filesets-running-xemacs | 1067 | (if filesets-running-xemacs |
| 1073 | (progn | 1068 | (fset 'filesets-error 'error) |
| 1074 | (fset 'filesets-error 'error) | ||
| 1075 | (fset 'filesets-add-submenu 'add-submenu)) | ||
| 1076 | 1069 | ||
| 1077 | (require 'easymenu) | 1070 | (require 'easymenu) |
| 1078 | 1071 | ||
| @@ -1080,12 +1073,6 @@ defined in `filesets-ingroup-patterns'." | |||
| 1080 | "`error' wrapper." | 1073 | "`error' wrapper." |
| 1081 | (error (mapconcat 'identity args " "))) | 1074 | (error (mapconcat 'identity args " "))) |
| 1082 | 1075 | ||
| 1083 | ;; This should work for 21.1 Emacs | ||
| 1084 | (defun filesets-add-submenu (menu-path submenu &optional | ||
| 1085 | before in-menu) | ||
| 1086 | "`easy-menu-define' wrapper." | ||
| 1087 | (easy-menu-define | ||
| 1088 | filesets-submenu global-map "Filesets menu" submenu)) | ||
| 1089 | )) | 1076 | )) |
| 1090 | 1077 | ||
| 1091 | (defun filesets-filter-dir-names (lst &optional negative) | 1078 | (defun filesets-filter-dir-names (lst &optional negative) |
| @@ -2339,7 +2326,7 @@ bottom up, set `filesets-submenus' to nil, first.)" | |||
| 2339 | (filesets-menu-cache-file-save-maybe))) | 2326 | (filesets-menu-cache-file-save-maybe))) |
| 2340 | (let ((cb (current-buffer))) | 2327 | (let ((cb (current-buffer))) |
| 2341 | (when (not (member cb filesets-updated-buffers)) | 2328 | (when (not (member cb filesets-updated-buffers)) |
| 2342 | (filesets-add-submenu | 2329 | (add-submenu |
| 2343 | filesets-menu-path | 2330 | filesets-menu-path |
| 2344 | `(,filesets-menu-name | 2331 | `(,filesets-menu-name |
| 2345 | ("# Filesets" | 2332 | ("# Filesets" |
| @@ -2496,6 +2483,7 @@ We apologize for the inconvenience.")) | |||
| 2496 | (defun filesets-exit () | 2483 | (defun filesets-exit () |
| 2497 | (filesets-menu-cache-file-save-maybe)) | 2484 | (filesets-menu-cache-file-save-maybe)) |
| 2498 | 2485 | ||
| 2486 | ;;;###autoload | ||
| 2499 | (defun filesets-init () | 2487 | (defun filesets-init () |
| 2500 | "Filesets initialization. | 2488 | "Filesets initialization. |
| 2501 | Set up hooks, load the cache file -- if existing -- and build the menu." | 2489 | Set up hooks, load the cache file -- if existing -- and build the menu." |
diff --git a/lisp/follow.el b/lisp/follow.el index 06857fc49e9..a01b0e77eb2 100644 --- a/lisp/follow.el +++ b/lisp/follow.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; follow.el --- synchronize windows showing the same buffer | 1 | ;;; follow.el --- synchronize windows showing the same buffer |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1995, 1996, 1997, 1999, 2001 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1995, 1996, 1997, 1999, 2001, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: Anders Lindgren <andersl@andersl.com> | 6 | ;; Author: Anders Lindgren <andersl@andersl.com> |
| 6 | ;; Maintainer: Anders Lindgren <andersl@andersl.com> | 7 | ;; Maintainer: Anders Lindgren <andersl@andersl.com> |
| @@ -708,7 +709,7 @@ Keys specific to Follow mode: | |||
| 708 | ;; This will start follow-mode whenever a new file is loaded, if | 709 | ;; This will start follow-mode whenever a new file is loaded, if |
| 709 | ;; the variable `follow-auto' is non-nil. | 710 | ;; the variable `follow-auto' is non-nil. |
| 710 | 711 | ||
| 711 | (add-hook 'find-file-hooks 'follow-find-file-hook t) | 712 | (add-hook 'find-file-hook 'follow-find-file-hook t) |
| 712 | 713 | ||
| 713 | (defun follow-find-file-hook () | 714 | (defun follow-find-file-hook () |
| 714 | "Find-file hook for Follow Mode. See the variable `follow-auto'." | 715 | "Find-file hook for Follow Mode. See the variable `follow-auto'." |
| @@ -2347,5 +2348,5 @@ This prevents `mouse-drag-region' from messing things up." | |||
| 2347 | ;; | save it". -- Douglas Adams, "Last Chance to See" | | 2348 | ;; | save it". -- Douglas Adams, "Last Chance to See" | |
| 2348 | ;; \------------------------------------------------------------------------/ | 2349 | ;; \------------------------------------------------------------------------/ |
| 2349 | 2350 | ||
| 2350 | ;;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0 | 2351 | ;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0 |
| 2351 | ;;; follow.el ends here | 2352 | ;;; follow.el ends here |
diff --git a/lisp/font-lock.el b/lisp/font-lock.el index b688b5d61df..e030acbc6ed 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el | |||
| @@ -1097,7 +1097,7 @@ delimit the region to fontify." | |||
| 1097 | ((error quit) (message "Fontifying block...%s" error-data))))))) | 1097 | ((error quit) (message "Fontifying block...%s" error-data))))))) |
| 1098 | 1098 | ||
| 1099 | (if (boundp 'facemenu-keymap) | 1099 | (if (boundp 'facemenu-keymap) |
| 1100 | (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block)) | 1100 | (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block)) |
| 1101 | 1101 | ||
| 1102 | ;;; End of Fontification functions. | 1102 | ;;; End of Fontification functions. |
| 1103 | 1103 | ||
diff --git a/lisp/generic-x.el b/lisp/generic-x.el index 7b038fd89ab..d39edbb7ef6 100644 --- a/lisp/generic-x.el +++ b/lisp/generic-x.el | |||
| @@ -324,7 +324,7 @@ generic-x to enable the specified modes." | |||
| 324 | (generic-make-keywords-list | 324 | (generic-make-keywords-list |
| 325 | '("for" | 325 | '("for" |
| 326 | "if") | 326 | "if") |
| 327 | 'font-lock-keyword-face "^[@ \t]*") | 327 | font-lock-keyword-face "^[@ \t]*") |
| 328 | ;; These keywords can be anywhere on a line | 328 | ;; These keywords can be anywhere on a line |
| 329 | ;; In `generic-bat-mode-setup-function' we make the keywords | 329 | ;; In `generic-bat-mode-setup-function' we make the keywords |
| 330 | ;; case-insensitive | 330 | ;; case-insensitive |
| @@ -334,7 +334,7 @@ generic-x to enable the specified modes." | |||
| 334 | "errorlevel" | 334 | "errorlevel" |
| 335 | "goto" | 335 | "goto" |
| 336 | "not") | 336 | "not") |
| 337 | 'font-lock-keyword-face) | 337 | font-lock-keyword-face) |
| 338 | ;; These are built-in commands. Only frequently-used ones are listed. | 338 | ;; These are built-in commands. Only frequently-used ones are listed. |
| 339 | (generic-make-keywords-list | 339 | (generic-make-keywords-list |
| 340 | '("CALL" "call" "Call" | 340 | '("CALL" "call" "Call" |
| @@ -352,7 +352,7 @@ generic-x to enable the specified modes." | |||
| 352 | "SET" "set" "Set" | 352 | "SET" "set" "Set" |
| 353 | "START" "start" "Start" | 353 | "START" "start" "Start" |
| 354 | "SHIFT" "shift" "Shift") | 354 | "SHIFT" "shift" "Shift") |
| 355 | 'font-lock-builtin-face "[ \t|\n]") | 355 | font-lock-builtin-face "[ \t|\n]") |
| 356 | '("^[ \t]*\\(:\\sw+\\)" 1 font-lock-function-name-face t) | 356 | '("^[ \t]*\\(:\\sw+\\)" 1 font-lock-function-name-face t) |
| 357 | '("\\(%\\sw+%\\)" 1 font-lock-variable-name-face t) | 357 | '("\\(%\\sw+%\\)" 1 font-lock-variable-name-face t) |
| 358 | '("\\(%[0-9]\\)" 1 font-lock-variable-name-face t) | 358 | '("\\(%[0-9]\\)" 1 font-lock-variable-name-face t) |
| @@ -410,11 +410,11 @@ generic-x to enable the specified modes." | |||
| 410 | ;; Make underscores count as words | 410 | ;; Make underscores count as words |
| 411 | (unless bat-generic-mode-syntax-table | 411 | (unless bat-generic-mode-syntax-table |
| 412 | (setq bat-generic-mode-syntax-table (make-syntax-table)) | 412 | (setq bat-generic-mode-syntax-table (make-syntax-table)) |
| 413 | (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table)) | 413 | (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table)) |
| 414 | 414 | ||
| 415 | ;; bat-generic-mode doesn't use the comment functionality of generic-mode | 415 | ;; bat-generic-mode doesn't use the comment functionality of |
| 416 | ;; because it has a three-letter comment-string, so we do it | 416 | ;; define-generic-mode because it has a three-letter comment-string, |
| 417 | ;; here manually instead | 417 | ;; so we do it here manually instead |
| 418 | (defun generic-bat-mode-setup-function () | 418 | (defun generic-bat-mode-setup-function () |
| 419 | (make-local-variable 'parse-sexp-ignore-comments) | 419 | (make-local-variable 'parse-sexp-ignore-comments) |
| 420 | (make-local-variable 'comment-start) | 420 | (make-local-variable 'comment-start) |
| @@ -427,7 +427,7 @@ generic-x to enable the specified modes." | |||
| 427 | comment-start-skip "[Rr][Ee][Mm] *") | 427 | comment-start-skip "[Rr][Ee][Mm] *") |
| 428 | (set-syntax-table bat-generic-mode-syntax-table) | 428 | (set-syntax-table bat-generic-mode-syntax-table) |
| 429 | ;; Make keywords case-insensitive | 429 | ;; Make keywords case-insensitive |
| 430 | (setq font-lock-defaults '(generic-font-lock-defaults nil t)) | 430 | (setq font-lock-defaults '(generic-font-lock-keywords nil t)) |
| 431 | (use-local-map bat-generic-mode-keymap))) | 431 | (use-local-map bat-generic-mode-keymap))) |
| 432 | 432 | ||
| 433 | ;;; Mailagent | 433 | ;;; Mailagent |
| @@ -441,13 +441,12 @@ generic-x to enable the specified modes." | |||
| 441 | '(("^\\(\\sw+\\)\\s-*=" 1 font-lock-variable-name-face) | 441 | '(("^\\(\\sw+\\)\\s-*=" 1 font-lock-variable-name-face) |
| 442 | ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face)) | 442 | ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face)) |
| 443 | '("\\.rules\\'") | 443 | '("\\.rules\\'") |
| 444 | '(mailagent-rules-setup-function) | 444 | (list |
| 445 | "Mode for Mailagent rules files.") | 445 | (function |
| 446 | 446 | (lambda () | |
| 447 | (defun mailagent-rules-setup-function () | 447 | (setq imenu-generic-expression |
| 448 | (make-local-variable 'imenu-generic-expression) | 448 | '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))))) |
| 449 | (setq imenu-generic-expression | 449 | "Mode for Mailagent rules files.")) |
| 450 | '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))) | ||
| 451 | 450 | ||
| 452 | ;; Solaris/Sys V prototype files | 451 | ;; Solaris/Sys V prototype files |
| 453 | (when (memq 'prototype-generic-mode generic-extras-enable-list) | 452 | (when (memq 'prototype-generic-mode generic-extras-enable-list) |
| @@ -752,13 +751,13 @@ generic-x to enable the specified modes." | |||
| 752 | "FILETYPE" | 751 | "FILETYPE" |
| 753 | "FILEVERSION" | 752 | "FILEVERSION" |
| 754 | "PRODUCTVERSION") | 753 | "PRODUCTVERSION") |
| 755 | 'font-lock-type-face) | 754 | font-lock-type-face) |
| 756 | (generic-make-keywords-list | 755 | (generic-make-keywords-list |
| 757 | '("BEGIN" | 756 | '("BEGIN" |
| 758 | "BLOCK" | 757 | "BLOCK" |
| 759 | "END" | 758 | "END" |
| 760 | "VALUE") | 759 | "VALUE") |
| 761 | 'font-lock-function-name-face) | 760 | font-lock-function-name-face) |
| 762 | '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face) | 761 | '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face) |
| 763 | '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) | 762 | '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) |
| 764 | '("^#[ \t]*\\(elif\\|if\\)\\>" | 763 | '("^#[ \t]*\\(elif\\|if\\)\\>" |
| @@ -1375,19 +1374,19 @@ generic-x to enable the specified modes." | |||
| 1375 | ;; system variables | 1374 | ;; system variables |
| 1376 | (generic-make-keywords-list | 1375 | (generic-make-keywords-list |
| 1377 | installshield-system-variables-list | 1376 | installshield-system-variables-list |
| 1378 | 'font-lock-variable-name-face "[^_]" "[^_]") | 1377 | font-lock-variable-name-face "[^_]" "[^_]") |
| 1379 | ;; system functions | 1378 | ;; system functions |
| 1380 | (generic-make-keywords-list | 1379 | (generic-make-keywords-list |
| 1381 | installshield-system-functions-list | 1380 | installshield-system-functions-list |
| 1382 | 'font-lock-function-name-face "[^_]" "[^_]") | 1381 | font-lock-function-name-face "[^_]" "[^_]") |
| 1383 | ;; type keywords | 1382 | ;; type keywords |
| 1384 | (generic-make-keywords-list | 1383 | (generic-make-keywords-list |
| 1385 | installshield-types-list | 1384 | installshield-types-list |
| 1386 | 'font-lock-type-face "[^_]" "[^_]") | 1385 | font-lock-type-face "[^_]" "[^_]") |
| 1387 | ;; function argument constants | 1386 | ;; function argument constants |
| 1388 | (generic-make-keywords-list | 1387 | (generic-make-keywords-list |
| 1389 | installshield-funarg-constants-list | 1388 | installshield-funarg-constants-list |
| 1390 | 'font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice? | 1389 | font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice? |
| 1391 | '("\\.[rR][uU][lL]$") | 1390 | '("\\.[rR][uU][lL]$") |
| 1392 | '(generic-rul-mode-setup-function) | 1391 | '(generic-rul-mode-setup-function) |
| 1393 | "Generic mode for InstallShield RUL files.") | 1392 | "Generic mode for InstallShield RUL files.") |
| @@ -1429,9 +1428,11 @@ generic-x to enable the specified modes." | |||
| 1429 | "source" | 1428 | "source" |
| 1430 | "unset") | 1429 | "unset") |
| 1431 | '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" | 1430 | '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" |
| 1432 | (2 font-lock-constant-face) (3 font-lock-variable-name-face)) | 1431 | (2 font-lock-constant-face) |
| 1432 | (3 font-lock-variable-name-face)) | ||
| 1433 | ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$" | 1433 | ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$" |
| 1434 | (2 font-lock-constant-face) (3 font-lock-variable-name-face)) | 1434 | (2 font-lock-constant-face) |
| 1435 | (3 font-lock-variable-name-face)) | ||
| 1435 | ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" | 1436 | ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" |
| 1436 | (2 font-lock-variable-name-face))) | 1437 | (2 font-lock-variable-name-face))) |
| 1437 | '("\\.mailrc\\'") | 1438 | '("\\.mailrc\\'") |
| @@ -1569,32 +1570,34 @@ generic-x to enable the specified modes." | |||
| 1569 | '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) | 1570 | '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) |
| 1570 | 1571 | ||
| 1571 | ;; From Jacques Duthen <jacques.duthen@sncf.fr> | 1572 | ;; From Jacques Duthen <jacques.duthen@sncf.fr> |
| 1572 | (defvar show-tabs-generic-mode-font-lock-defaults-1 | 1573 | (eval-when-compile |
| 1574 | |||
| 1575 | (defconst show-tabs-generic-mode-font-lock-defaults-1 | ||
| 1573 | '(;; trailing spaces must come before... | 1576 | '(;; trailing spaces must come before... |
| 1574 | ("[ \t]+$" . show-tabs-space-face) | 1577 | ("[ \t]+$" . 'show-tabs-space-face) |
| 1575 | ;; ...embedded tabs | 1578 | ;; ...embedded tabs |
| 1576 | ("[^\n\t]\\(\t+\\)" (1 show-tabs-tab-face)))) | 1579 | ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face)))) |
| 1577 | 1580 | ||
| 1578 | (defvar show-tabs-generic-mode-font-lock-defaults-2 | 1581 | (defconst show-tabs-generic-mode-font-lock-defaults-2 |
| 1579 | '(;; trailing spaces must come before... | 1582 | '(;; trailing spaces must come before... |
| 1580 | ("[ \t]+$" . show-tabs-space-face) | 1583 | ("[ \t]+$" . 'show-tabs-space-face) |
| 1581 | ;; ...tabs | 1584 | ;; ...tabs |
| 1582 | ("\t+" . show-tabs-tab-face))) | 1585 | ("\t+" . 'show-tabs-tab-face)))) |
| 1583 | 1586 | ||
| 1584 | (defface show-tabs-tab-face | 1587 | (defface show-tabs-tab-face |
| 1585 | '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) | 1588 | '((((class grayscale) (background light)) (:background "DimGray" :weight bold)) |
| 1586 | (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold)) | 1589 | (((class grayscale) (background dark)) (:background "LightGray" :weight bold)) |
| 1587 | (((class color) (background light)) (:foreground "red")) | 1590 | (((class color) (background light)) (:background "red")) |
| 1588 | (((class color) (background dark)) (:foreground "red")) | 1591 | (((class color) (background dark)) (:background "red")) |
| 1589 | (t (:weight bold))) | 1592 | (t (:weight bold))) |
| 1590 | "Font Lock mode face used to highlight TABs." | 1593 | "Font Lock mode face used to highlight TABs." |
| 1591 | :group 'show-tabs) | 1594 | :group 'show-tabs) |
| 1592 | 1595 | ||
| 1593 | (defface show-tabs-space-face | 1596 | (defface show-tabs-space-face |
| 1594 | '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) | 1597 | '((((class grayscale) (background light)) (:background "DimGray" :weight bold)) |
| 1595 | (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold)) | 1598 | (((class grayscale) (background dark)) (:background "LightGray" :weight bold)) |
| 1596 | (((class color) (background light)) (:foreground "yellow")) | 1599 | (((class color) (background light)) (:background "yellow")) |
| 1597 | (((class color) (background dark)) (:foreground "yellow")) | 1600 | (((class color) (background dark)) (:background "yellow")) |
| 1598 | (t (:weight bold))) | 1601 | (t (:weight bold))) |
| 1599 | "Font Lock mode face used to highlight spaces." | 1602 | "Font Lock mode face used to highlight spaces." |
| 1600 | :group 'show-tabs) | 1603 | :group 'show-tabs) |
| @@ -1602,7 +1605,7 @@ generic-x to enable the specified modes." | |||
| 1602 | (define-generic-mode show-tabs-generic-mode | 1605 | (define-generic-mode show-tabs-generic-mode |
| 1603 | nil ;; no comment char | 1606 | nil ;; no comment char |
| 1604 | nil ;; no keywords | 1607 | nil ;; no keywords |
| 1605 | show-tabs-generic-mode-font-lock-defaults-1 | 1608 | (eval-when-compile show-tabs-generic-mode-font-lock-defaults-1) |
| 1606 | nil ;; no auto-mode-alist | 1609 | nil ;; no auto-mode-alist |
| 1607 | ;; '(show-tabs-generic-mode-hook-fun) | 1610 | ;; '(show-tabs-generic-mode-hook-fun) |
| 1608 | nil | 1611 | nil |
| @@ -1701,7 +1704,7 @@ generic-x to enable the specified modes." | |||
| 1701 | ;; Make keywords case-insensitive | 1704 | ;; Make keywords case-insensitive |
| 1702 | (function | 1705 | (function |
| 1703 | (lambda() | 1706 | (lambda() |
| 1704 | (setq font-lock-defaults '(generic-font-lock-defaults nil t))))) | 1707 | (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) |
| 1705 | "Generic mode for SPICE circuit netlist files.") | 1708 | "Generic mode for SPICE circuit netlist files.") |
| 1706 | 1709 | ||
| 1707 | (define-generic-mode ibis-generic-mode | 1710 | (define-generic-mode ibis-generic-mode |
| @@ -1745,7 +1748,7 @@ generic-x to enable the specified modes." | |||
| 1745 | ;; Make keywords case-insensitive | 1748 | ;; Make keywords case-insensitive |
| 1746 | (function | 1749 | (function |
| 1747 | (lambda() | 1750 | (lambda() |
| 1748 | (setq font-lock-defaults '(generic-font-lock-defaults nil t))))) | 1751 | (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) |
| 1749 | "Generic mode for ASTAP circuit netlist files.") | 1752 | "Generic mode for ASTAP circuit netlist files.") |
| 1750 | 1753 | ||
| 1751 | (define-generic-mode etc-modules-conf-generic-mode | 1754 | (define-generic-mode etc-modules-conf-generic-mode |
diff --git a/lisp/generic.el b/lisp/generic.el index 35f4e52bcee..014419edf34 100644 --- a/lisp/generic.el +++ b/lisp/generic.el | |||
| @@ -125,9 +125,11 @@ | |||
| 125 | ;; Internal Variables | 125 | ;; Internal Variables |
| 126 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 126 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 127 | 127 | ||
| 128 | (defvar generic-font-lock-defaults nil | 128 | (defvar generic-font-lock-keywords nil |
| 129 | "Global defaults for font-lock in a generic mode.") | 129 | "Keywords for `font-lock-defaults' in a generic mode.") |
| 130 | (make-variable-buffer-local 'generic-font-lock-defaults) | 130 | (make-variable-buffer-local 'generic-font-lock-keywords) |
| 131 | (defvaralias 'generic-font-lock-defaults 'generic-font-lock-keywords) | ||
| 132 | (make-obsolete-variable 'generic-font-lock-defaults 'generic-font-lock-keywords "22.1") | ||
| 131 | 133 | ||
| 132 | ;;;###autoload | 134 | ;;;###autoload |
| 133 | (defvar generic-mode-list nil | 135 | (defvar generic-mode-list nil |
| @@ -253,13 +255,15 @@ See the file generic-x.el for some examples of `define-generic-mode'." | |||
| 253 | 255 | ||
| 254 | (generic-mode-set-comments comments) | 256 | (generic-mode-set-comments comments) |
| 255 | 257 | ||
| 256 | ;; Font-lock functionality | 258 | ;; Font-lock functionality. |
| 257 | ;; Font-lock-defaults are always set even if there are no keywords | 259 | ;; Font-lock-defaults is always set even if there are no keywords |
| 258 | ;; or font-lock expressions, so comments can be highlighted. | 260 | ;; or font-lock expressions, so comments can be highlighted. |
| 259 | (setq generic-font-lock-defaults nil) | 261 | (setq generic-font-lock-keywords |
| 260 | (generic-mode-set-font-lock keywords font-lock-list) | 262 | (append |
| 261 | (make-local-variable 'font-lock-defaults) | 263 | (when keywords |
| 262 | (setq font-lock-defaults (list 'generic-font-lock-defaults nil)) | 264 | (list (generic-make-keywords-list keywords font-lock-keyword-face))) |
| 265 | font-lock-list)) | ||
| 266 | (setq font-lock-defaults '(generic-font-lock-keywords nil)) | ||
| 263 | 267 | ||
| 264 | ;; Call a list of functions | 268 | ;; Call a list of functions |
| 265 | (mapcar 'funcall funs) | 269 | (mapcar 'funcall funs) |
| @@ -348,16 +352,8 @@ Some generic modes are defined in `generic-x.el'." | |||
| 348 | st)) | 352 | st)) |
| 349 | (set-syntax-table st))) | 353 | (set-syntax-table st))) |
| 350 | 354 | ||
| 351 | (defun generic-mode-set-font-lock (keywords font-lock-expressions) | ||
| 352 | "Set up font-lock functionality for generic mode." | ||
| 353 | (setq generic-font-lock-defaults | ||
| 354 | (append | ||
| 355 | (when keywords | ||
| 356 | (list (generic-make-keywords-list keywords font-lock-keyword-face))) | ||
| 357 | font-lock-expressions))) | ||
| 358 | |||
| 359 | ;; Support for [KEYWORD] constructs found in INF, INI and Samba files | ||
| 360 | (defun generic-bracket-support () | 355 | (defun generic-bracket-support () |
| 356 | "Imenu support for [KEYWORD] constructs found in INF, INI and Samba files." | ||
| 361 | (setq imenu-generic-expression | 357 | (setq imenu-generic-expression |
| 362 | '((nil "^\\[\\(.*\\)\\]" 1)) | 358 | '((nil "^\\[\\(.*\\)\\]" 1)) |
| 363 | imenu-case-fold-search t)) | 359 | imenu-case-fold-search t)) |
| @@ -405,7 +401,7 @@ INI file. This hook is NOT installed by default." | |||
| 405 | (ini-generic-mode))))) | 401 | (ini-generic-mode))))) |
| 406 | 402 | ||
| 407 | (and generic-use-find-file-hook | 403 | (and generic-use-find-file-hook |
| 408 | (add-hook 'find-file-hooks 'generic-mode-find-file-hook)) | 404 | (add-hook 'find-file-hook 'generic-mode-find-file-hook)) |
| 409 | 405 | ||
| 410 | ;;;###autoload | 406 | ;;;###autoload |
| 411 | (defun generic-make-keywords-list (keywords-list face &optional prefix suffix) | 407 | (defun generic-make-keywords-list (keywords-list face &optional prefix suffix) |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index d581274b803..fe2fcab6643 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,98 @@ | |||
| 1 | 2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * message.el (message-resend): Bind rfc2047-encode-encoded-words. | ||
| 4 | |||
| 5 | * mm-util.el (mm-replace-in-string): New function. | ||
| 6 | (mm-xemacs-find-mime-charset-1): Ignore errors while loading | ||
| 7 | latin-unity, which cannot be used with XEmacs 21.1. | ||
| 8 | |||
| 9 | * rfc2047.el (rfc2047-encode-function-alist): Rename from | ||
| 10 | rfc2047-encoding-function-alist in order to avoid conflicting with | ||
| 11 | the old version. | ||
| 12 | (rfc2047-encode-message-header): Remove useless goto-char. | ||
| 13 | (rfc2047-encodable-p): Don't move point. | ||
| 14 | (rfc2047-syntax-table): Treat `(' and `)' as is. | ||
| 15 | (rfc2047-encode-region): Concatenate words containing non-ASCII | ||
| 16 | characters in structured fields; don't encode space-delimited | ||
| 17 | ASCII words even in unstructured fields; don't break words at | ||
| 18 | char-category boundaries; encode encoded words in structured | ||
| 19 | fields; treat text within parentheses as special; show the | ||
| 20 | original text when error has occurred; move point to the end of | ||
| 21 | the region after encoding, suggested by IRIE Tetsuya | ||
| 22 | <irie@t.email.ne.jp>; treat backslash-quoted characters as | ||
| 23 | non-special; check carefully whether to encode special characters; | ||
| 24 | fix some kind of misconfigured headers; signal a real error if | ||
| 25 | debug-on-quit or debug-on-error is non-nil; don't infloop, | ||
| 26 | suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume | ||
| 27 | the close parenthesis may be included in the encoded word; encode | ||
| 28 | bogus delimiters. | ||
| 29 | (rfc2047-encode-string): Use mm-with-multibyte-buffer. | ||
| 30 | (rfc2047-encode-max-chars): New variable. | ||
| 31 | (rfc2047-encode-1): New function. | ||
| 32 | (rfc2047-encode): Use it; encode text so that it occupies the | ||
| 33 | maximum width within 76-column; work correctly on Q encoding for | ||
| 34 | iso-2022-* charsets; fold the line before encoding; don't append a | ||
| 35 | space if the encoded word includes close parenthesis. | ||
| 36 | (rfc2047-fold-region): Use existing whitespace for LWSP; make it | ||
| 37 | sure not to break a line just after the header name. | ||
| 38 | (rfc2047-b-encode-region): Remove. | ||
| 39 | (rfc2047-b-encode-string): New function. | ||
| 40 | (rfc2047-q-encode-region): Remove. | ||
| 41 | (rfc2047-q-encode-string): New function. | ||
| 42 | (rfc2047-encode-parameter): New function. | ||
| 43 | (rfc2047-encoded-word-regexp): Don't use shy group. | ||
| 44 | (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change. | ||
| 45 | (rfc2047-parse-and-decode): Ditto. | ||
| 46 | (rfc2047-decode): Treat the ascii coding-system as raw-text by | ||
| 47 | default. | ||
| 48 | |||
| 49 | 2005-03-25 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 50 | |||
| 51 | * rfc2047.el (rfc2047-encode-encoded-words): New variable. | ||
| 52 | (rfc2047-field-value): Strip props. | ||
| 53 | (rfc2047-encode-message-header): Disabled header folding -- not | ||
| 54 | all headers can be folded, and this should be done by the message | ||
| 55 | composition mode. Probably. I think. | ||
| 56 | (rfc2047-encodable-p): Say that =? needs encoding. | ||
| 57 | (rfc2047-encode-region): Encode =? strings. | ||
| 58 | |||
| 59 | 2005-03-25 Jesper Harder <harder@ifa.au.dk> | ||
| 60 | |||
| 61 | * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231 | ||
| 62 | language tags; remove unnecessary '+'. Reported by Stefan Wiens | ||
| 63 | <s.wi@gmx.net>. | ||
| 64 | (rfc2047-decode-string): Don't cons a string unnecessarily. | ||
| 65 | (rfc2047-parse-and-decode, rfc2047-decode): Use a character for | ||
| 66 | the encoding to avoid consing a string. | ||
| 67 | (rfc2047-decode): Use mm-subst-char-in-string instead of | ||
| 68 | mm-replace-chars-in-string. | ||
| 69 | |||
| 70 | 2005-03-25 TSUCHIYA Masatoshi <tsuchiya@namazu.org> | ||
| 71 | |||
| 72 | * rfc2047.el (rfc2047-encode): Use uppercase letters to specify | ||
| 73 | encodings of MIME-encoded words, in order to improve | ||
| 74 | interoperability with several broken MUAs. | ||
| 75 | |||
| 76 | 2005-03-21 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 77 | |||
| 78 | * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and | ||
| 79 | pass it to `gnus-browse-read-group'. | ||
| 80 | (gnus-browse-read-group): Add NUMBER argument and pass it to | ||
| 81 | `gnus-group-read-ephemeral-group'. | ||
| 82 | |||
| 83 | * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER | ||
| 84 | argument and pass it to `gnus-group-read-group'. | ||
| 85 | |||
| 86 | 2005-03-19 Aidan Kehoe <kehoea@parhasard.net> | ||
| 87 | |||
| 88 | * mm-util.el (mm-xemacs-find-mime-charset): Only call | ||
| 89 | mm-xemacs-find-mime-charset-1 if we have the mule feature | ||
| 90 | available at runtime. | ||
| 91 | |||
| 92 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 93 | |||
| 94 | * nnmaildir.el: Replace `illegal' with `invalid'. | ||
| 95 | |||
| 1 | 2005-03-22 Stefan Monnier <monnier@iro.umontreal.ca> | 96 | 2005-03-22 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 97 | ||
| 3 | * gnus-start.el (gnus-display-time-event-handler): | 98 | * gnus-start.el (gnus-display-time-event-handler): |
| @@ -614,7 +709,7 @@ | |||
| 614 | unless plugged. Disable the agent so that an open failure causes | 709 | unless plugged. Disable the agent so that an open failure causes |
| 615 | an error. | 710 | an error. |
| 616 | 711 | ||
| 617 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> | 712 | 2004-10-18 Reiner Steib <Reiner.Steib@gmx.de> |
| 618 | 713 | ||
| 619 | * gnus-agent.el (gnus-agent-fetched-hook): Add :version. | 714 | * gnus-agent.el (gnus-agent-fetched-hook): Add :version. |
| 620 | (gnus-agent-go-online): Change :version. | 715 | (gnus-agent-go-online): Change :version. |
| @@ -656,21 +751,21 @@ | |||
| 656 | (gnus-convert-mark-converter-prompt) | 751 | (gnus-convert-mark-converter-prompt) |
| 657 | (gnus-convert-converter-needs-prompt): Fix use of property list. | 752 | (gnus-convert-converter-needs-prompt): Fix use of property list. |
| 658 | 753 | ||
| 659 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> | 754 | 2004-10-18 Katsumi Yamaoka <yamaoka@jpl.org> |
| 660 | 755 | ||
| 661 | * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. | 756 | * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. |
| 662 | 757 | ||
| 663 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> | 758 | 2004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 664 | 759 | ||
| 665 | * gnus-start.el (gnus-get-unread-articles-in-group): Don't do | 760 | * gnus-start.el (gnus-get-unread-articles-in-group): Don't do |
| 666 | stuff for non-living groups. | 761 | stuff for non-living groups. |
| 667 | 762 | ||
| 668 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> | 763 | 2004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 669 | 764 | ||
| 670 | * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. | 765 | * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. |
| 671 | (gnus-agent-regenerate-group): Using nil messages aren't valid. | 766 | (gnus-agent-regenerate-group): Using nil messages aren't valid. |
| 672 | 767 | ||
| 673 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> | 768 | 2004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 674 | 769 | ||
| 675 | * gnus-agent.el (gnus-agent-read-agentview): | 770 | * gnus-agent.el (gnus-agent-read-agentview): |
| 676 | Inline gnus-uncompress-range. | 771 | Inline gnus-uncompress-range. |
| @@ -687,7 +782,7 @@ | |||
| 687 | message-send-mail-function. The change makes the agent real-time | 782 | message-send-mail-function. The change makes the agent real-time |
| 688 | responsive to user changes to message-send-mail-function. | 783 | responsive to user changes to message-send-mail-function. |
| 689 | 784 | ||
| 690 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> | 785 | 2004-10-18 Reiner Steib <Reiner.Steib@gmx.de> |
| 691 | 786 | ||
| 692 | * gnus-start.el (gnus-get-unread-articles): Fix last commit. | 787 | * gnus-start.el (gnus-get-unread-articles): Fix last commit. |
| 693 | 788 | ||
| @@ -728,12 +823,12 @@ | |||
| 728 | 823 | ||
| 729 | * gnus-util.el (gnus-rename-file): New function. | 824 | * gnus-util.el (gnus-rename-file): New function. |
| 730 | 825 | ||
| 731 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> | 826 | 2004-10-18 Katsumi Yamaoka <yamaoka@jpl.org> |
| 732 | 827 | ||
| 733 | * gnus-agent.el (gnus-agent-regenerate-group): Activate the group | 828 | * gnus-agent.el (gnus-agent-regenerate-group): Activate the group |
| 734 | when the group's active is not available. | 829 | when the group's active is not available. |
| 735 | 830 | ||
| 736 | 2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> | 831 | 2004-10-18 Katsumi Yamaoka <yamaoka@jpl.org> |
| 737 | 832 | ||
| 738 | * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to | 833 | * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to |
| 739 | error. | 834 | error. |
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 767bdacb78e..6d38626998c 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el | |||
| @@ -1984,7 +1984,8 @@ confirmation is required." | |||
| 1984 | (defun gnus-group-read-ephemeral-group (group method &optional activate | 1984 | (defun gnus-group-read-ephemeral-group (group method &optional activate |
| 1985 | quit-config request-only | 1985 | quit-config request-only |
| 1986 | select-articles | 1986 | select-articles |
| 1987 | parameters) | 1987 | parameters |
| 1988 | number) | ||
| 1988 | "Read GROUP from METHOD as an ephemeral group. | 1989 | "Read GROUP from METHOD as an ephemeral group. |
| 1989 | If ACTIVATE, request the group first. | 1990 | If ACTIVATE, request the group first. |
| 1990 | If QUIT-CONFIG, use that window configuration when exiting from the | 1991 | If QUIT-CONFIG, use that window configuration when exiting from the |
| @@ -1992,6 +1993,7 @@ ephemeral group. | |||
| 1992 | If REQUEST-ONLY, don't actually read the group; just request it. | 1993 | If REQUEST-ONLY, don't actually read the group; just request it. |
| 1993 | If SELECT-ARTICLES, only select those articles. | 1994 | If SELECT-ARTICLES, only select those articles. |
| 1994 | If PARAMETERS, use those as the group parameters. | 1995 | If PARAMETERS, use those as the group parameters. |
| 1996 | If NUMBER, fetch this number of articles. | ||
| 1995 | 1997 | ||
| 1996 | Return the name of the group if selection was successful." | 1998 | Return the name of the group if selection was successful." |
| 1997 | (interactive | 1999 | (interactive |
| @@ -2039,7 +2041,7 @@ Return the name of the group if selection was successful." | |||
| 2039 | (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) | 2041 | (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) |
| 2040 | (gnus-fetch-old-headers | 2042 | (gnus-fetch-old-headers |
| 2041 | gnus-fetch-old-ephemeral-headers)) | 2043 | gnus-fetch-old-ephemeral-headers)) |
| 2042 | (gnus-group-read-group t t group select-articles)) | 2044 | (gnus-group-read-group (or number t) t group select-articles)) |
| 2043 | group) | 2045 | group) |
| 2044 | ;;(error nil) | 2046 | ;;(error nil) |
| 2045 | (quit | 2047 | (quit |
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el index e8c7d354145..7b3c033fddb 100644 --- a/lisp/gnus/gnus-srvr.el +++ b/lisp/gnus/gnus-srvr.el | |||
| @@ -851,23 +851,26 @@ buffer. | |||
| 851 | (setq buffer-read-only t) | 851 | (setq buffer-read-only t) |
| 852 | (gnus-run-hooks 'gnus-browse-mode-hook)) | 852 | (gnus-run-hooks 'gnus-browse-mode-hook)) |
| 853 | 853 | ||
| 854 | (defun gnus-browse-read-group (&optional no-article) | 854 | (defun gnus-browse-read-group (&optional no-article number) |
| 855 | "Enter the group at the current line." | 855 | "Enter the group at the current line. |
| 856 | (interactive) | 856 | If NUMBER, fetch this number of articles." |
| 857 | (interactive "P") | ||
| 857 | (let ((group (gnus-browse-group-name))) | 858 | (let ((group (gnus-browse-group-name))) |
| 858 | (if (or (not (gnus-get-info group)) | 859 | (if (or (not (gnus-get-info group)) |
| 859 | (gnus-ephemeral-group-p group)) | 860 | (gnus-ephemeral-group-p group)) |
| 860 | (unless (gnus-group-read-ephemeral-group | 861 | (unless (gnus-group-read-ephemeral-group |
| 861 | group gnus-browse-current-method nil | 862 | group gnus-browse-current-method nil |
| 862 | (cons (current-buffer) 'browse)) | 863 | (cons (current-buffer) 'browse) |
| 864 | nil nil nil number) | ||
| 863 | (error "Couldn't enter %s" group)) | 865 | (error "Couldn't enter %s" group)) |
| 864 | (unless (gnus-group-read-group nil no-article group) | 866 | (unless (gnus-group-read-group nil no-article group) |
| 865 | (error "Couldn't enter %s" group))))) | 867 | (error "Couldn't enter %s" group))))) |
| 866 | 868 | ||
| 867 | (defun gnus-browse-select-group () | 869 | (defun gnus-browse-select-group (&optional number) |
| 868 | "Select the current group." | 870 | "Select the current group. |
| 869 | (interactive) | 871 | If NUMBER, fetch this number of articles." |
| 870 | (gnus-browse-read-group 'no)) | 872 | (interactive "P") |
| 873 | (gnus-browse-read-group 'no number)) | ||
| 871 | 874 | ||
| 872 | (defun gnus-browse-next-group (n) | 875 | (defun gnus-browse-next-group (n) |
| 873 | "Go to the next group." | 876 | "Go to the next group." |
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 9171385fec0..072097b505b 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el | |||
| @@ -6364,7 +6364,8 @@ Optional DIGEST will use digest to forward." | |||
| 6364 | (replace-match "X-From-Line: ")) | 6364 | (replace-match "X-From-Line: ")) |
| 6365 | ;; Send it. | 6365 | ;; Send it. |
| 6366 | (let ((message-inhibit-body-encoding t) | 6366 | (let ((message-inhibit-body-encoding t) |
| 6367 | message-required-mail-headers) | 6367 | message-required-mail-headers |
| 6368 | rfc2047-encode-encoded-words) | ||
| 6368 | (message-send-mail)) | 6369 | (message-send-mail)) |
| 6369 | (kill-buffer (current-buffer))) | 6370 | (kill-buffer (current-buffer))) |
| 6370 | (message "Resending message to %s...done" address))) | 6371 | (message "Resending message to %s...done" address))) |
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el index e874f23e6e6..2a689221f7e 100644 --- a/lisp/gnus/mm-util.el +++ b/lisp/gnus/mm-util.el | |||
| @@ -86,6 +86,32 @@ | |||
| 86 | (multibyte-char-to-unibyte . identity)))) | 86 | (multibyte-char-to-unibyte . identity)))) |
| 87 | 87 | ||
| 88 | (eval-and-compile | 88 | (eval-and-compile |
| 89 | (cond | ||
| 90 | ((fboundp 'replace-in-string) | ||
| 91 | (defalias 'mm-replace-in-string 'replace-in-string)) | ||
| 92 | ((fboundp 'replace-regexp-in-string) | ||
| 93 | (defun mm-replace-in-string (string regexp newtext &optional literal) | ||
| 94 | "Replace all matches for REGEXP with NEWTEXT in STRING. | ||
| 95 | If LITERAL is non-nil, insert NEWTEXT literally. Return a new | ||
| 96 | string containing the replacements. | ||
| 97 | |||
| 98 | This is a compatibility function for different Emacsen." | ||
| 99 | (replace-regexp-in-string regexp newtext string nil literal))) | ||
| 100 | (t | ||
| 101 | (defun mm-replace-in-string (string regexp newtext &optional literal) | ||
| 102 | "Replace all matches for REGEXP with NEWTEXT in STRING. | ||
| 103 | If LITERAL is non-nil, insert NEWTEXT literally. Return a new | ||
| 104 | string containing the replacements. | ||
| 105 | |||
| 106 | This is a compatibility function for different Emacsen." | ||
| 107 | (let ((start 0) tail) | ||
| 108 | (while (string-match regexp string start) | ||
| 109 | (setq tail (- (length string) (match-end 0))) | ||
| 110 | (setq string (replace-match newtext nil literal string)) | ||
| 111 | (setq start (- (length string) tail)))) | ||
| 112 | string)))) | ||
| 113 | |||
| 114 | (eval-and-compile | ||
| 89 | (defalias 'mm-char-or-char-int-p | 115 | (defalias 'mm-char-or-char-int-p |
| 90 | (cond | 116 | (cond |
| 91 | ((fboundp 'char-or-char-int-p) 'char-or-char-int-p) | 117 | ((fboundp 'char-or-char-int-p) 'char-or-char-int-p) |
| @@ -555,7 +581,7 @@ But this is very much a corner case, so don't worry about it." | |||
| 555 | 581 | ||
| 556 | ;; Load the Latin Unity library, if available. | 582 | ;; Load the Latin Unity library, if available. |
| 557 | (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) | 583 | (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) |
| 558 | (require 'latin-unity)) | 584 | (ignore-errors (require 'latin-unity))) |
| 559 | 585 | ||
| 560 | ;; Now, can we use it? | 586 | ;; Now, can we use it? |
| 561 | (if (featurep 'latin-unity) | 587 | (if (featurep 'latin-unity) |
| @@ -600,7 +626,7 @@ But this is very much a corner case, so don't worry about it." | |||
| 600 | 626 | ||
| 601 | (defmacro mm-xemacs-find-mime-charset (begin end) | 627 | (defmacro mm-xemacs-find-mime-charset (begin end) |
| 602 | (when (featurep 'xemacs) | 628 | (when (featurep 'xemacs) |
| 603 | `(mm-xemacs-find-mime-charset-1 ,begin ,end))) | 629 | `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end)))) |
| 604 | 630 | ||
| 605 | (defun mm-find-mime-charset-region (b e &optional hack-charsets) | 631 | (defun mm-find-mime-charset-region (b e &optional hack-charsets) |
| 606 | "Return the MIME charsets needed to encode the region between B and E. | 632 | "Return the MIME charsets needed to encode the region between B and E. |
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el index 618418907e8..be94a57b5c7 100644 --- a/lisp/gnus/nnmaildir.el +++ b/lisp/gnus/nnmaildir.el | |||
| @@ -978,7 +978,7 @@ by nnmaildir-request-article.") | |||
| 978 | (throw 'return nil)) | 978 | (throw 'return nil)) |
| 979 | (when (save-match-data (string-match "[\0/\t]" gname)) | 979 | (when (save-match-data (string-match "[\0/\t]" gname)) |
| 980 | (setf (nnmaildir--srv-error nnmaildir--cur-server) | 980 | (setf (nnmaildir--srv-error nnmaildir--cur-server) |
| 981 | (concat "Illegal characters (null, tab, or /) in group name: " | 981 | (concat "Invalid characters (null, tab, or /) in group name: " |
| 982 | gname)) | 982 | gname)) |
| 983 | (throw 'return nil)) | 983 | (throw 'return nil)) |
| 984 | (setq groups (nnmaildir--srv-groups nnmaildir--cur-server)) | 984 | (setq groups (nnmaildir--srv-groups nnmaildir--cur-server)) |
| @@ -1023,7 +1023,7 @@ by nnmaildir-request-article.") | |||
| 1023 | (throw 'return nil)) | 1023 | (throw 'return nil)) |
| 1024 | (when (save-match-data (string-match "[\0/\t]" new-name)) | 1024 | (when (save-match-data (string-match "[\0/\t]" new-name)) |
| 1025 | (setf (nnmaildir--srv-error nnmaildir--cur-server) | 1025 | (setf (nnmaildir--srv-error nnmaildir--cur-server) |
| 1026 | (concat "Illegal characters (null, tab, or /) in group name: " | 1026 | (concat "Invalid characters (null, tab, or /) in group name: " |
| 1027 | new-name)) | 1027 | new-name)) |
| 1028 | (throw 'return nil)) | 1028 | (throw 'return nil)) |
| 1029 | (if (string-equal gname new-name) (throw 'return t)) | 1029 | (if (string-equal gname new-name) (throw 'return t)) |
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el index ab00edb9128..0099e6d1bb7 100644 --- a/lisp/gnus/rfc2047.el +++ b/lisp/gnus/rfc2047.el | |||
| @@ -119,12 +119,15 @@ The values can be: | |||
| 119 | Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, | 119 | Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, |
| 120 | quoted-printable and base64 respectively.") | 120 | quoted-printable and base64 respectively.") |
| 121 | 121 | ||
| 122 | (defvar rfc2047-encoding-function-alist | 122 | (defvar rfc2047-encode-function-alist |
| 123 | '((Q . rfc2047-q-encode-region) | 123 | '((Q . rfc2047-q-encode-string) |
| 124 | (B . rfc2047-b-encode-region) | 124 | (B . rfc2047-b-encode-string) |
| 125 | (nil . ignore)) | 125 | (nil . identity)) |
| 126 | "Alist of RFC2047 encodings to encoding functions.") | 126 | "Alist of RFC2047 encodings to encoding functions.") |
| 127 | 127 | ||
| 128 | (defvar rfc2047-encode-encoded-words t | ||
| 129 | "Whether encoded words should be encoded again.") | ||
| 130 | |||
| 128 | ;;; | 131 | ;;; |
| 129 | ;;; Functions for encoding RFC2047 messages | 132 | ;;; Functions for encoding RFC2047 messages |
| 130 | ;;; | 133 | ;;; |
| @@ -166,7 +169,7 @@ This is either `base64' or `quoted-printable'." | |||
| 166 | (save-restriction | 169 | (save-restriction |
| 167 | (rfc2047-narrow-to-field) | 170 | (rfc2047-narrow-to-field) |
| 168 | (re-search-forward ":[ \t\n]*" nil t) | 171 | (re-search-forward ":[ \t\n]*" nil t) |
| 169 | (buffer-substring (point) (point-max))))) | 172 | (buffer-substring-no-properties (point) (point-max))))) |
| 170 | 173 | ||
| 171 | (defvar rfc2047-encoding-type 'address-mime | 174 | (defvar rfc2047-encoding-type 'address-mime |
| 172 | "The type of encoding done by `rfc2047-encode-region'. | 175 | "The type of encoding done by `rfc2047-encode-region'. |
| @@ -186,24 +189,25 @@ Should be called narrowed to the head of the message." | |||
| 186 | (rfc2047-narrow-to-field) | 189 | (rfc2047-narrow-to-field) |
| 187 | (if (not (rfc2047-encodable-p)) | 190 | (if (not (rfc2047-encodable-p)) |
| 188 | (prog1 | 191 | (prog1 |
| 189 | (if (and (eq (mm-body-7-or-8) '8bit) | 192 | (if (and (eq (mm-body-7-or-8) '8bit) |
| 190 | (mm-multibyte-p) | 193 | (mm-multibyte-p) |
| 191 | (mm-coding-system-p | 194 | (mm-coding-system-p |
| 192 | (car message-posting-charset))) | 195 | (car message-posting-charset))) |
| 193 | ;; 8 bit must be decoded. | 196 | ;; 8 bit must be decoded. |
| 194 | (mm-encode-coding-region | 197 | (mm-encode-coding-region |
| 195 | (point-min) (point-max) | 198 | (point-min) (point-max) |
| 196 | (mm-charset-to-coding-system | 199 | (mm-charset-to-coding-system |
| 197 | (car message-posting-charset)))) | 200 | (car message-posting-charset)))) |
| 198 | ;; No encoding necessary, but folding is nice | 201 | ;; No encoding necessary, but folding is nice |
| 199 | (rfc2047-fold-region | 202 | (when nil |
| 200 | (save-excursion | 203 | (rfc2047-fold-region |
| 201 | (goto-char (point-min)) | 204 | (save-excursion |
| 202 | (skip-chars-forward "^:") | 205 | (goto-char (point-min)) |
| 203 | (when (looking-at ": ") | 206 | (skip-chars-forward "^:") |
| 204 | (forward-char 2)) | 207 | (when (looking-at ": ") |
| 205 | (point)) | 208 | (forward-char 2)) |
| 206 | (point-max))) | 209 | (point)) |
| 210 | (point-max)))) | ||
| 207 | ;; We found something that may perhaps be encoded. | 211 | ;; We found something that may perhaps be encoded. |
| 208 | (setq method nil | 212 | (setq method nil |
| 209 | alist rfc2047-header-encoding-alist) | 213 | alist rfc2047-header-encoding-alist) |
| @@ -213,7 +217,6 @@ Should be called narrowed to the head of the message." | |||
| 213 | (eq (car elem) t)) | 217 | (eq (car elem) t)) |
| 214 | (setq alist nil | 218 | (setq alist nil |
| 215 | method (cdr elem)))) | 219 | method (cdr elem)))) |
| 216 | (goto-char (point-min)) | ||
| 217 | (re-search-forward "^[^:]+: *" nil t) | 220 | (re-search-forward "^[^:]+: *" nil t) |
| 218 | (cond | 221 | (cond |
| 219 | ((eq method 'address-mime) | 222 | ((eq method 'address-mime) |
| @@ -267,8 +270,13 @@ The buffer may be narrowed." | |||
| 267 | (require 'message) ; for message-posting-charset | 270 | (require 'message) ; for message-posting-charset |
| 268 | (let ((charsets | 271 | (let ((charsets |
| 269 | (mm-find-mime-charset-region (point-min) (point-max)))) | 272 | (mm-find-mime-charset-region (point-min) (point-max)))) |
| 270 | (and charsets | 273 | (goto-char (point-min)) |
| 271 | (not (equal charsets (list (car message-posting-charset))))))) | 274 | (or (and rfc2047-encode-encoded-words |
| 275 | (prog1 | ||
| 276 | (search-forward "=?" nil t) | ||
| 277 | (goto-char (point-min)))) | ||
| 278 | (and charsets | ||
| 279 | (not (equal charsets (list (car message-posting-charset)))))))) | ||
| 272 | 280 | ||
| 273 | ;; Use this syntax table when parsing into regions that may need | 281 | ;; Use this syntax table when parsing into regions that may need |
| 274 | ;; encoding. Double quotes are string delimiters, backslash is | 282 | ;; encoding. Double quotes are string delimiters, backslash is |
| @@ -292,8 +300,8 @@ The buffer may be narrowed." | |||
| 292 | table)))) | 300 | table)))) |
| 293 | (modify-syntax-entry ?\\ "\\" table) | 301 | (modify-syntax-entry ?\\ "\\" table) |
| 294 | (modify-syntax-entry ?\" "\"" table) | 302 | (modify-syntax-entry ?\" "\"" table) |
| 295 | (modify-syntax-entry ?\( "." table) | 303 | (modify-syntax-entry ?\( "(" table) |
| 296 | (modify-syntax-entry ?\) "." table) | 304 | (modify-syntax-entry ?\) ")" table) |
| 297 | (modify-syntax-entry ?\< "." table) | 305 | (modify-syntax-entry ?\< "." table) |
| 298 | (modify-syntax-entry ?\> "." table) | 306 | (modify-syntax-entry ?\> "." table) |
| 299 | (modify-syntax-entry ?\[ "." table) | 307 | (modify-syntax-entry ?\[ "." table) |
| @@ -310,183 +318,341 @@ By default, the region is treated as containing RFC2822 addresses. | |||
| 310 | Dynamically bind `rfc2047-encoding-type' to change that." | 318 | Dynamically bind `rfc2047-encoding-type' to change that." |
| 311 | (save-restriction | 319 | (save-restriction |
| 312 | (narrow-to-region b e) | 320 | (narrow-to-region b e) |
| 313 | (if (eq 'mime rfc2047-encoding-type) | 321 | (let ((encodable-regexp (if rfc2047-encode-encoded-words |
| 314 | ;; Simple case. Treat as single word after any initial ASCII | 322 | "[^\000-\177]+\\|=\\?" |
| 315 | ;; part and before any tailing ASCII part. The leading ASCII | 323 | "[^\000-\177]+")) |
| 316 | ;; is relevant for instance in Subject headers with `Re:' for | 324 | start ; start of current token |
| 317 | ;; interoperability with non-MIME clients, and we might as | 325 | end begin csyntax |
| 318 | ;; well avoid the tail too. | 326 | ;; Whether there's an encoded word before the current token, |
| 319 | (progn | 327 | ;; either immediately or separated by space. |
| 320 | (goto-char (point-min)) | 328 | last-encoded |
| 321 | ;; Does it need encoding? | 329 | (orig-text (buffer-substring-no-properties b e))) |
| 322 | (skip-chars-forward "\000-\177") | 330 | (if (eq 'mime rfc2047-encoding-type) |
| 323 | (unless (eobp) | 331 | ;; Simple case. Continuous words in which all those contain |
| 324 | (skip-chars-backward "^ \n") ; beginning of space-delimited word | 332 | ;; non-ASCII characters are encoded collectively. Encoding |
| 325 | (rfc2047-encode (point) (progn | 333 | ;; ASCII words, including `Re:' used in Subject headers, is |
| 326 | (goto-char e) | 334 | ;; avoided for interoperability with non-MIME clients and |
| 327 | (skip-chars-backward "\000-\177") | 335 | ;; for making it easy to find keywords. |
| 328 | (skip-chars-forward "^ \n") | 336 | (progn |
| 329 | ;; end of space-delimited word | 337 | (goto-char (point-min)) |
| 330 | (point))))) | 338 | (while (progn (skip-chars-forward " \t\n") |
| 331 | ;; `address-mime' case -- take care of quoted words, comments. | 339 | (not (eobp))) |
| 332 | (with-syntax-table rfc2047-syntax-table | 340 | (setq start (point)) |
| 333 | (let ((start) ; start of current token | 341 | (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)") |
| 334 | end ; end of current token | 342 | (progn |
| 335 | ;; Whether there's an encoded word before the current | 343 | (setq end (match-end 0)) |
| 336 | ;; token, either immediately or separated by space. | 344 | (re-search-forward encodable-regexp end t))) |
| 337 | last-encoded) | 345 | (goto-char end)) |
| 346 | (if (> (point) start) | ||
| 347 | (rfc2047-encode start (point)) | ||
| 348 | (goto-char end)))) | ||
| 349 | ;; `address-mime' case -- take care of quoted words, comments. | ||
| 350 | (with-syntax-table rfc2047-syntax-table | ||
| 338 | (goto-char (point-min)) | 351 | (goto-char (point-min)) |
| 339 | (condition-case nil ; in case of unbalanced quotes | 352 | (condition-case err ; in case of unbalanced quotes |
| 340 | ;; Look for rfc2822-style: sequences of atoms, quoted | 353 | ;; Look for rfc2822-style: sequences of atoms, quoted |
| 341 | ;; strings, specials, whitespace. (Specials mustn't be | 354 | ;; strings, specials, whitespace. (Specials mustn't be |
| 342 | ;; encoded.) | 355 | ;; encoded.) |
| 343 | (while (not (eobp)) | 356 | (while (not (eobp)) |
| 344 | (setq start (point)) | ||
| 345 | ;; Skip whitespace. | 357 | ;; Skip whitespace. |
| 346 | (unless (= 0 (skip-chars-forward " \t\n")) | 358 | (skip-chars-forward " \t\n") |
| 347 | (setq start (point))) | 359 | (setq start (point)) |
| 348 | (cond | 360 | (cond |
| 349 | ((not (char-after))) ; eob | 361 | ((not (char-after))) ; eob |
| 350 | ;; else token start | 362 | ;; else token start |
| 351 | ((eq ?\" (char-syntax (char-after))) | 363 | ((eq ?\" (setq csyntax (char-syntax (char-after)))) |
| 352 | ;; Quoted word. | 364 | ;; Quoted word. |
| 353 | (forward-sexp) | 365 | (forward-sexp) |
| 354 | (setq end (point)) | 366 | (setq end (point)) |
| 355 | ;; Does it need encoding? | 367 | ;; Does it need encoding? |
| 356 | (goto-char start) | 368 | (goto-char start) |
| 357 | (skip-chars-forward "\000-\177" end) | 369 | (if (re-search-forward encodable-regexp end 'move) |
| 358 | (if (= end (point)) | 370 | ;; It needs encoding. Strip the quotes first, |
| 359 | (setq last-encoded nil) | 371 | ;; since encoded words can't occur in quotes. |
| 360 | ;; It needs encoding. Strip the quotes first, | 372 | (progn |
| 361 | ;; since encoded words can't occur in quotes. | 373 | (goto-char end) |
| 362 | (goto-char end) | 374 | (delete-backward-char 1) |
| 363 | (delete-backward-char 1) | 375 | (goto-char start) |
| 364 | (goto-char start) | 376 | (delete-char 1) |
| 365 | (delete-char 1) | 377 | (when last-encoded |
| 366 | (when last-encoded | 378 | ;; There was a preceding quoted word. We need |
| 367 | ;; There was a preceding quoted word. We need | 379 | ;; to include any separating whitespace in this |
| 368 | ;; to include any separating whitespace in this | 380 | ;; word to avoid it getting lost. |
| 369 | ;; word to avoid it getting lost. | 381 | (skip-chars-backward " \t") |
| 370 | (skip-chars-backward " \t") | 382 | ;; A space is needed between the encoded words. |
| 371 | ;; A space is needed between the encoded words. | 383 | (insert ? ) |
| 372 | (insert ? ) | 384 | (setq start (point) |
| 373 | (setq start (point) | 385 | end (1+ end))) |
| 374 | end (1+ end))) | 386 | ;; Adjust the end position for the deleted quotes. |
| 375 | ;; Adjust the end position for the deleted quotes. | 387 | (rfc2047-encode start (- end 2)) |
| 376 | (rfc2047-encode start (- end 2)) | 388 | (setq last-encoded t)) ; record that it was encoded |
| 377 | (setq last-encoded t))) ; record that it was encoded | 389 | (setq last-encoded nil))) |
| 378 | ((eq ?. (char-syntax (char-after))) | 390 | ((eq ?. csyntax) |
| 379 | ;; Skip other delimiters, but record that they've | 391 | ;; Skip other delimiters, but record that they've |
| 380 | ;; potentially separated quoted words. | 392 | ;; potentially separated quoted words. |
| 381 | (forward-char) | 393 | (forward-char) |
| 382 | (setq last-encoded nil)) | 394 | (setq last-encoded nil)) |
| 395 | ((eq ?\) csyntax) | ||
| 396 | (error "Unbalanced parentheses")) | ||
| 397 | ((eq ?\( csyntax) | ||
| 398 | ;; Look for the end of parentheses. | ||
| 399 | (forward-list) | ||
| 400 | ;; Encode text as an unstructured field. | ||
| 401 | (let ((rfc2047-encoding-type 'mime)) | ||
| 402 | (rfc2047-encode-region (1+ start) (1- (point)))) | ||
| 403 | (skip-chars-forward ")")) | ||
| 383 | (t ; normal token/whitespace sequence | 404 | (t ; normal token/whitespace sequence |
| 384 | ;; Find the end. | 405 | ;; Find the end. |
| 385 | (forward-word 1) | 406 | ;; Skip one ASCII word, or encode continuous words |
| 386 | (skip-chars-backward " \t") | 407 | ;; in which all those contain non-ASCII characters. |
| 408 | (setq end nil) | ||
| 409 | (while (not (or end (eobp))) | ||
| 410 | (when (looking-at "[\000-\177]+") | ||
| 411 | (setq begin (point) | ||
| 412 | end (match-end 0)) | ||
| 413 | (when (progn | ||
| 414 | (while (and (or (re-search-forward | ||
| 415 | "[ \t\n]\\|\\Sw" end 'move) | ||
| 416 | (setq end nil)) | ||
| 417 | (eq ?\\ (char-syntax (char-before)))) | ||
| 418 | ;; Skip backslash-quoted characters. | ||
| 419 | (forward-char)) | ||
| 420 | end) | ||
| 421 | (setq end (match-beginning 0)) | ||
| 422 | (if rfc2047-encode-encoded-words | ||
| 423 | (progn | ||
| 424 | (goto-char begin) | ||
| 425 | (when (search-forward "=?" end 'move) | ||
| 426 | (goto-char (match-beginning 0)) | ||
| 427 | (setq end nil))) | ||
| 428 | (goto-char end)))) | ||
| 429 | ;; Where the value nil of `end' means there may be | ||
| 430 | ;; text to have to be encoded following the point. | ||
| 431 | ;; Otherwise, the point reached to the end of ASCII | ||
| 432 | ;; words separated by whitespace or a special char. | ||
| 433 | (unless end | ||
| 434 | (when (looking-at encodable-regexp) | ||
| 435 | (goto-char (setq begin (match-end 0))) | ||
| 436 | (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)") | ||
| 437 | (setq end (match-end 0)) | ||
| 438 | (progn | ||
| 439 | (while (re-search-forward | ||
| 440 | encodable-regexp end t)) | ||
| 441 | (< begin (point))) | ||
| 442 | (goto-char begin) | ||
| 443 | (or (not (re-search-forward "\\Sw" end t)) | ||
| 444 | (progn | ||
| 445 | (goto-char (match-beginning 0)) | ||
| 446 | nil))) | ||
| 447 | (goto-char end)) | ||
| 448 | (when (looking-at "[^ \t\n]+") | ||
| 449 | (setq end (match-end 0)) | ||
| 450 | (if (re-search-forward "\\Sw+" end t) | ||
| 451 | ;; There are special characters better | ||
| 452 | ;; to be encoded so that MTAs may parse | ||
| 453 | ;; them safely. | ||
| 454 | (cond ((= end (point))) | ||
| 455 | ((looking-at (concat "\\sw*\\(" | ||
| 456 | encodable-regexp | ||
| 457 | "\\)")) | ||
| 458 | (setq end nil)) | ||
| 459 | (t | ||
| 460 | (goto-char (1- (match-end 0))) | ||
| 461 | (unless (= (point) (match-beginning 0)) | ||
| 462 | ;; Separate encodable text and | ||
| 463 | ;; delimiter. | ||
| 464 | (insert " ")))) | ||
| 465 | (goto-char end) | ||
| 466 | (skip-chars-forward " \t\n") | ||
| 467 | (if (and (looking-at "[^ \t\n]+") | ||
| 468 | (string-match encodable-regexp | ||
| 469 | (match-string 0))) | ||
| 470 | (setq end nil) | ||
| 471 | (goto-char end))))))) | ||
| 472 | (skip-chars-backward " \t\n") | ||
| 387 | (setq end (point)) | 473 | (setq end (point)) |
| 388 | ;; Deal with encoding and leading space as for | ||
| 389 | ;; quoted words. | ||
| 390 | (goto-char start) | 474 | (goto-char start) |
| 391 | (skip-chars-forward "\000-\177" end) | 475 | (if (re-search-forward encodable-regexp end 'move) |
| 392 | (if (= end (point)) | 476 | (progn |
| 393 | (setq last-encoded nil) | 477 | (unless (memq (char-before start) '(nil ?\t ? )) |
| 394 | (when last-encoded | 478 | (if (progn |
| 395 | (goto-char start) | 479 | (goto-char start) |
| 396 | (skip-chars-backward " \t") | 480 | (skip-chars-backward "^ \t\n") |
| 397 | (insert ? ) | 481 | (and (looking-at "\\Sw+") |
| 398 | (setq start (point) | 482 | (= (match-end 0) start))) |
| 399 | end (1+ end))) | 483 | ;; Also encode bogus delimiters. |
| 400 | (rfc2047-encode start end) | 484 | (setq start (point)) |
| 401 | (setq last-encoded t))))) | 485 | ;; Separate encodable text and delimiter. |
| 486 | (goto-char start) | ||
| 487 | (insert " ") | ||
| 488 | (setq start (1+ start) | ||
| 489 | end (1+ end)))) | ||
| 490 | (rfc2047-encode start end) | ||
| 491 | (setq last-encoded t)) | ||
| 492 | (setq last-encoded nil))))) | ||
| 402 | (error | 493 | (error |
| 403 | (error "Invalid data for rfc2047 encoding: %s" | 494 | (if (or debug-on-quit debug-on-error) |
| 404 | (buffer-substring b e))))))) | 495 | (signal (car err) (cdr err)) |
| 405 | (rfc2047-fold-region b (point)))) | 496 | (error "Invalid data for rfc2047 encoding: %s" |
| 497 | (mm-replace-in-string orig-text "[ \t\n]+" " ")))))))) | ||
| 498 | (rfc2047-fold-region b (point)) | ||
| 499 | (goto-char (point-max)))) | ||
| 406 | 500 | ||
| 407 | (defun rfc2047-encode-string (string) | 501 | (defun rfc2047-encode-string (string) |
| 408 | "Encode words in STRING. | 502 | "Encode words in STRING. |
| 409 | By default, the string is treated as containing addresses (see | 503 | By default, the string is treated as containing addresses (see |
| 410 | `rfc2047-encoding-type')." | 504 | `rfc2047-encoding-type')." |
| 411 | (with-temp-buffer | 505 | (mm-with-multibyte-buffer |
| 412 | (insert string) | 506 | (insert string) |
| 413 | (rfc2047-encode-region (point-min) (point-max)) | 507 | (rfc2047-encode-region (point-min) (point-max)) |
| 414 | (buffer-string))) | 508 | (buffer-string))) |
| 415 | 509 | ||
| 510 | (defvar rfc2047-encode-max-chars 76 | ||
| 511 | "Maximum characters of each header line that contain encoded-words. | ||
| 512 | If it is nil, encoded-words will not be folded. Too small value may | ||
| 513 | cause an error. Don't change this for no particular reason.") | ||
| 514 | |||
| 515 | (defun rfc2047-encode-1 (column string cs encoder start crest tail | ||
| 516 | &optional eword) | ||
| 517 | "Subroutine used by `rfc2047-encode'." | ||
| 518 | (cond ((string-equal string "") | ||
| 519 | (or eword "")) | ||
| 520 | ((not rfc2047-encode-max-chars) | ||
| 521 | (concat start | ||
| 522 | (funcall encoder (if cs | ||
| 523 | (mm-encode-coding-string string cs) | ||
| 524 | string)) | ||
| 525 | "?=")) | ||
| 526 | ((>= column rfc2047-encode-max-chars) | ||
| 527 | (when eword | ||
| 528 | (cond ((string-match "\n[ \t]+\\'" eword) | ||
| 529 | ;; Reomove a superfluous empty line. | ||
| 530 | (setq eword (substring eword 0 (match-beginning 0)))) | ||
| 531 | ((string-match "(+\\'" eword) | ||
| 532 | ;; Break the line before the open parenthesis. | ||
| 533 | (setq crest (concat crest (match-string 0 eword)) | ||
| 534 | eword (substring eword 0 (match-beginning 0)))))) | ||
| 535 | (rfc2047-encode-1 (length crest) string cs encoder start " " tail | ||
| 536 | (concat eword "\n" crest))) | ||
| 537 | (t | ||
| 538 | (let ((index 0) | ||
| 539 | (limit (1- (length string))) | ||
| 540 | (prev "") | ||
| 541 | next len) | ||
| 542 | (while (and prev | ||
| 543 | (<= index limit)) | ||
| 544 | (setq next (concat start | ||
| 545 | (funcall encoder | ||
| 546 | (if cs | ||
| 547 | (mm-encode-coding-string | ||
| 548 | (substring string 0 (1+ index)) | ||
| 549 | cs) | ||
| 550 | (substring string 0 (1+ index)))) | ||
| 551 | "?=") | ||
| 552 | len (+ column (length next))) | ||
| 553 | (if (> len rfc2047-encode-max-chars) | ||
| 554 | (setq next prev | ||
| 555 | prev nil) | ||
| 556 | (if (or (< index limit) | ||
| 557 | (<= (+ len (or (string-match "\n" tail) | ||
| 558 | (length tail))) | ||
| 559 | rfc2047-encode-max-chars)) | ||
| 560 | (setq prev next | ||
| 561 | index (1+ index)) | ||
| 562 | (if (string-match "\\`)+" tail) | ||
| 563 | ;; Break the line after the close parenthesis. | ||
| 564 | (setq tail (concat (substring tail 0 (match-end 0)) | ||
| 565 | "\n " | ||
| 566 | (substring tail (match-end 0))) | ||
| 567 | prev next | ||
| 568 | index (1+ index)) | ||
| 569 | (setq next prev | ||
| 570 | prev nil))))) | ||
| 571 | (if (> index limit) | ||
| 572 | (concat eword next tail) | ||
| 573 | (if (= 0 index) | ||
| 574 | (if (and eword | ||
| 575 | (string-match "(+\\'" eword)) | ||
| 576 | (setq crest (concat crest (match-string 0 eword)) | ||
| 577 | eword (substring eword 0 (match-beginning 0))) | ||
| 578 | (setq eword (concat eword next))) | ||
| 579 | (setq crest " " | ||
| 580 | eword (concat eword next))) | ||
| 581 | (when (string-match "\n[ \t]+\\'" eword) | ||
| 582 | ;; Reomove a superfluous empty line. | ||
| 583 | (setq eword (substring eword 0 (match-beginning 0)))) | ||
| 584 | (rfc2047-encode-1 (length crest) (substring string index) | ||
| 585 | cs encoder start " " tail | ||
| 586 | (concat eword "\n" crest))))))) | ||
| 587 | |||
| 416 | (defun rfc2047-encode (b e) | 588 | (defun rfc2047-encode (b e) |
| 417 | "Encode the word(s) in the region B to E. | 589 | "Encode the word(s) in the region B to E. |
| 418 | By default, the region is treated as containing addresses (see | 590 | Point moves to the end of the region." |
| 419 | `rfc2047-encoding-type')." | 591 | (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii))) |
| 420 | (let* ((mime-charset (mm-find-mime-charset-region b e)) | 592 | cs encoding tail crest eword) |
| 421 | (cs (if (> (length mime-charset) 1) | 593 | (cond ((> (length mime-charset) 1) |
| 422 | ;; Fixme: Instead of this, try to break region into | 594 | (error "Can't rfc2047-encode `%s'" |
| 423 | ;; parts that can be encoded separately. | 595 | (buffer-substring-no-properties b e))) |
| 424 | (error "Can't rfc2047-encode `%s'" | 596 | ((= (length mime-charset) 1) |
| 425 | (buffer-substring b e)) | 597 | (setq mime-charset (car mime-charset) |
| 426 | (setq mime-charset (car mime-charset)) | 598 | cs (mm-charset-to-coding-system mime-charset)) |
| 427 | (mm-charset-to-coding-system mime-charset))) | 599 | (unless (and (mm-multibyte-p) |
| 428 | ;; Fixme: Better, calculate the number of non-ASCII | 600 | (mm-coding-system-p cs)) |
| 429 | ;; characters, at least for 8-bit charsets. | 601 | (setq cs nil)) |
| 430 | (encoding (or (cdr (assq mime-charset | 602 | (save-restriction |
| 603 | (narrow-to-region b e) | ||
| 604 | (setq encoding | ||
| 605 | (or (cdr (assq mime-charset | ||
| 431 | rfc2047-charset-encoding-alist)) | 606 | rfc2047-charset-encoding-alist)) |
| 432 | ;; For the charsets that don't have a preferred | 607 | ;; For the charsets that don't have a preferred |
| 433 | ;; encoding, choose the one that's shorter. | 608 | ;; encoding, choose the one that's shorter. |
| 434 | (save-restriction | 609 | (if (eq (rfc2047-qp-or-base64) 'base64) |
| 435 | (narrow-to-region b e) | 610 | 'B |
| 436 | (if (eq (rfc2047-qp-or-base64) 'base64) | 611 | 'Q))) |
| 437 | 'B | 612 | (widen) |
| 438 | 'Q)))) | 613 | (goto-char e) |
| 439 | (start (concat | 614 | (skip-chars-forward "^ \t\n") |
| 440 | "=?" (downcase (symbol-name mime-charset)) "?" | 615 | ;; `tail' may contain a close parenthesis. |
| 441 | (downcase (symbol-name encoding)) "?")) | 616 | (setq tail (buffer-substring-no-properties e (point))) |
| 442 | (factor (case mime-charset | 617 | (goto-char b) |
| 443 | ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1) | 618 | (setq b (point-marker) |
| 444 | ((big5 gb2312 euc-kr) 2) | 619 | e (set-marker (make-marker) e)) |
| 445 | (utf-8 4) | 620 | (rfc2047-fold-region (rfc2047-point-at-bol) b) |
| 446 | (t 8))) | 621 | (goto-char b) |
| 447 | (pre (- b (save-restriction | 622 | (skip-chars-backward "^ \t\n") |
| 448 | (widen) | 623 | (unless (= 0 (skip-chars-backward " \t")) |
| 449 | (rfc2047-point-at-bol)))) | 624 | ;; `crest' may contain whitespace and an open parenthesis. |
| 450 | ;; encoded-words must not be longer than 75 characters, | 625 | (setq crest (buffer-substring-no-properties (point) b))) |
| 451 | ;; including charset, encoding etc. This leaves us with | 626 | (setq eword (rfc2047-encode-1 |
| 452 | ;; 75 - (length start) - 2 - 2 characters. The last 2 is for | 627 | (- b (rfc2047-point-at-bol)) |
| 453 | ;; possible base64 padding. In the worst case (iso-2022-*) | 628 | (mm-replace-in-string |
| 454 | ;; each character expands to 8 bytes which is expanded by a | 629 | (buffer-substring-no-properties b e) |
| 455 | ;; factor of 4/3 by base64 encoding. | 630 | "\n\\([ \t]?\\)" "\\1") |
| 456 | (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0)))) | 631 | cs |
| 457 | ;; Limit line length to 76 characters. | 632 | (or (cdr (assq encoding |
| 458 | (length1 (max 1 (floor (- 76 (length start) 4 pre) | 633 | rfc2047-encode-function-alist)) |
| 459 | (* factor (/ 4.0 3.0))))) | 634 | 'identity) |
| 460 | (first t)) | 635 | (concat "=?" (downcase (symbol-name mime-charset)) |
| 461 | (if mime-charset | 636 | "?" (upcase (symbol-name encoding)) "?") |
| 462 | (save-restriction | 637 | (or crest " ") |
| 463 | (narrow-to-region b e) | 638 | tail)) |
| 464 | (when (eq encoding 'B) | 639 | (delete-region (if (eq (aref eword 0) ?\n) |
| 465 | ;; break into lines before encoding | 640 | (if (bolp) |
| 466 | (goto-char (point-min)) | 641 | ;; The line was folded before encoding. |
| 467 | (while (not (eobp)) | 642 | (1- (point)) |
| 468 | (if first | 643 | (point)) |
| 469 | (progn | 644 | (goto-char b)) |
| 470 | (goto-char (min (point-max) (+ length1 (point)))) | 645 | (+ e (length tail))) |
| 471 | (setq first nil)) | 646 | ;; `eword' contains `crest' and `tail'. |
| 472 | (goto-char (min (point-max) (+ length (point))))) | 647 | (insert eword) |
| 473 | (unless (eobp) | 648 | (set-marker b nil) |
| 474 | (insert ?\n))) | 649 | (set-marker e nil) |
| 475 | (setq first t)) | 650 | (unless (or (/= 0 (length tail)) |
| 476 | (if (and (mm-multibyte-p) | 651 | (eobp) |
| 477 | (mm-coding-system-p cs)) | 652 | (looking-at "[ \t\n)]")) |
| 478 | (mm-encode-coding-region (point-min) (point-max) cs)) | 653 | (insert " ")))) |
| 479 | (funcall (cdr (assq encoding rfc2047-encoding-function-alist)) | 654 | (t |
| 480 | (point-min) (point-max)) | 655 | (goto-char e))))) |
| 481 | (goto-char (point-min)) | ||
| 482 | (while (not (eobp)) | ||
| 483 | (unless first | ||
| 484 | (insert ? )) | ||
| 485 | (setq first nil) | ||
| 486 | (insert start) | ||
| 487 | (end-of-line) | ||
| 488 | (insert "?=") | ||
| 489 | (forward-line 1)))))) | ||
| 490 | 656 | ||
| 491 | (defun rfc2047-fold-field () | 657 | (defun rfc2047-fold-field () |
| 492 | "Fold the current header field." | 658 | "Fold the current header field." |
| @@ -512,6 +678,7 @@ By default, the region is treated as containing addresses (see | |||
| 512 | (goto-char (or break qword-break)) | 678 | (goto-char (or break qword-break)) |
| 513 | (setq break nil | 679 | (setq break nil |
| 514 | qword-break nil) | 680 | qword-break nil) |
| 681 | (skip-chars-backward " \t") | ||
| 515 | (if (looking-at "[ \t]") | 682 | (if (looking-at "[ \t]") |
| 516 | (insert ?\n) | 683 | (insert ?\n) |
| 517 | (insert "\n ")) | 684 | (insert "\n ")) |
| @@ -533,10 +700,8 @@ By default, the region is treated as containing addresses (see | |||
| 533 | (forward-char 1)) | 700 | (forward-char 1)) |
| 534 | ((memq (char-after) '(? ?\t)) | 701 | ((memq (char-after) '(? ?\t)) |
| 535 | (skip-chars-forward " \t") | 702 | (skip-chars-forward " \t") |
| 536 | (if first | 703 | (unless first ;; Don't break just after the header name. |
| 537 | ;; Don't break just after the header name. | 704 | (setq break (point)))) |
| 538 | (setq first nil) | ||
| 539 | (setq break (1- (point))))) | ||
| 540 | ((not break) | 705 | ((not break) |
| 541 | (if (not (looking-at "=\\?[^=]")) | 706 | (if (not (looking-at "=\\?[^=]")) |
| 542 | (if (eq (char-after) ?=) | 707 | (if (eq (char-after) ?=) |
| @@ -547,15 +712,17 @@ By default, the region is treated as containing addresses (see | |||
| 547 | (setq qword-break (point))) | 712 | (setq qword-break (point))) |
| 548 | (skip-chars-forward "^ \t\n\r"))) | 713 | (skip-chars-forward "^ \t\n\r"))) |
| 549 | (t | 714 | (t |
| 550 | (skip-chars-forward "^ \t\n\r")))) | 715 | (skip-chars-forward "^ \t\n\r"))) |
| 716 | (setq first nil)) | ||
| 551 | (when (and (or break qword-break) | 717 | (when (and (or break qword-break) |
| 552 | (> (- (point) bol) 76)) | 718 | (> (- (point) bol) 76)) |
| 553 | (goto-char (or break qword-break)) | 719 | (goto-char (or break qword-break)) |
| 554 | (setq break nil | 720 | (setq break nil |
| 555 | qword-break nil) | 721 | qword-break nil) |
| 556 | (if (looking-at "[ \t]") | 722 | (if (or (> 0 (skip-chars-backward " \t")) |
| 557 | (insert ?\n) | 723 | (looking-at "[ \t]")) |
| 558 | (insert "\n ")) | 724 | (insert ?\n) |
| 725 | (insert "\n ")) | ||
| 559 | (setq bol (1- (point))) | 726 | (setq bol (1- (point))) |
| 560 | ;; Don't break before the first non-LWSP characters. | 727 | ;; Don't break before the first non-LWSP characters. |
| 561 | (skip-chars-forward " \t") | 728 | (skip-chars-forward " \t") |
| @@ -590,48 +757,48 @@ By default, the region is treated as containing addresses (see | |||
| 590 | (setq eol (rfc2047-point-at-eol)) | 757 | (setq eol (rfc2047-point-at-eol)) |
| 591 | (forward-line 1))))) | 758 | (forward-line 1))))) |
| 592 | 759 | ||
| 593 | (defun rfc2047-b-encode-region (b e) | 760 | (defun rfc2047-b-encode-string (string) |
| 594 | "Base64-encode the header contained in region B to E." | 761 | "Base64-encode the header contained in STRING." |
| 595 | (save-restriction | 762 | (base64-encode-string string t)) |
| 596 | (narrow-to-region (goto-char b) e) | 763 | |
| 597 | (while (not (eobp)) | 764 | (defun rfc2047-q-encode-string (string) |
| 598 | (base64-encode-region (point) (progn (end-of-line) (point)) t) | 765 | "Quoted-printable-encode the header in STRING." |
| 599 | (if (and (bolp) (eolp)) | 766 | (mm-with-unibyte-buffer |
| 600 | (delete-backward-char 1)) | 767 | (insert string) |
| 601 | (forward-line)))) | 768 | (quoted-printable-encode-region |
| 602 | 769 | (point-min) (point-max) nil | |
| 603 | (defun rfc2047-q-encode-region (b e) | 770 | ;; = (\075), _ (\137), ? (\077) are used in the encoded word. |
| 604 | "Quoted-printable-encode the header in region B to E." | 771 | ;; Avoid using 8bit characters. |
| 605 | (save-excursion | 772 | ;; This list excludes `especials' (see the RFC2047 syntax), |
| 606 | (save-restriction | 773 | ;; meaning that some characters in non-structured fields will |
| 607 | (narrow-to-region (goto-char b) e) | 774 | ;; get encoded when they con't need to be. The following is |
| 608 | (let ((bol (save-restriction | 775 | ;; what it used to be. |
| 609 | (widen) | 776 | ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" |
| 610 | (rfc2047-point-at-bol)))) | 777 | ;;; "\010\012\014\040-\074\076\100-\136\140-\177") |
| 611 | (quoted-printable-encode-region | 778 | "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") |
| 612 | b e nil | 779 | (subst-char-in-region (point-min) (point-max) ? ?_) |
| 613 | ;; = (\075), _ (\137), ? (\077) are used in the encoded word. | 780 | (buffer-string))) |
| 614 | ;; Avoid using 8bit characters. | 781 | |
| 615 | ;; This list excludes `especials' (see the RFC2047 syntax), | 782 | (defun rfc2047-encode-parameter (param value) |
| 616 | ;; meaning that some characters in non-structured fields will | 783 | "Return and PARAM=VALUE string encoded in the RFC2047-like style. |
| 617 | ;; get encoded when they con't need to be. The following is | 784 | This is a replacement for the `rfc2231-encode-string' function. |
| 618 | ;; what it used to be. | 785 | |
| 619 | ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" | 786 | When attaching files as MIME parts, we should use the RFC2231 encoding |
| 620 | ;;; "\010\012\014\040-\074\076\100-\136\140-\177") | 787 | to specify the file names containing non-ASCII characters. However, |
| 621 | "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") | 788 | many mail softwares don't support it in practice and recipients won't |
| 622 | (subst-char-in-region (point-min) (point-max) ? ?_) | 789 | be able to extract files with correct names. Instead, the RFC2047-like |
| 623 | ;; The size of QP encapsulation is about 20, so set limit to | 790 | encoding is acceptable generally. This function provides the very |
| 624 | ;; 56=76-20. | 791 | RFC2047-like encoding, resigning to such a regrettable trend. To use |
| 625 | (unless (< (- (point-max) (point-min)) 56) | 792 | it, put the following line in your ~/.gnus.el file: |
| 626 | ;; Don't break if it could fit in one line. | 793 | |
| 627 | ;; Let rfc2047-encode-region break it later. | 794 | \(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) |
| 628 | (goto-char (1+ (point-min))) | 795 | " |
| 629 | (while (and (not (bobp)) (not (eobp))) | 796 | (let* ((rfc2047-encoding-type 'mime) |
| 630 | (goto-char (min (point-max) (+ 56 bol))) | 797 | (rfc2047-encode-max-chars nil) |
| 631 | (search-backward "=" (- (point) 2) t) | 798 | (string (rfc2047-encode-string value))) |
| 632 | (unless (or (bobp) (eobp)) | 799 | (if (string-match (concat "[" ietf-drums-tspecials "]") string) |
| 633 | (insert ?\n) | 800 | (format "%s=%S" param string) |
| 634 | (setq bol (point))))))))) | 801 | (concat param "=" string)))) |
| 635 | 802 | ||
| 636 | ;;; | 803 | ;;; |
| 637 | ;;; Functions for decoding RFC2047 messages | 804 | ;;; Functions for decoding RFC2047 messages |
| @@ -639,8 +806,8 @@ By default, the region is treated as containing addresses (see | |||
| 639 | 806 | ||
| 640 | (eval-and-compile | 807 | (eval-and-compile |
| 641 | (defconst rfc2047-encoded-word-regexp | 808 | (defconst rfc2047-encoded-word-regexp |
| 642 | "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\ | 809 | "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\ |
| 643 | \\?\\([!->@-~ +]*\\)\\?=")) | 810 | \\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?=")) |
| 644 | 811 | ||
| 645 | (defvar rfc2047-quote-decoded-words-containing-tspecials nil | 812 | (defvar rfc2047-quote-decoded-words-containing-tspecials nil |
| 646 | "If non-nil, quote decoded words containing special characters.") | 813 | "If non-nil, quote decoded words containing special characters.") |
| @@ -671,7 +838,7 @@ By default, the region is treated as containing addresses (see | |||
| 671 | "\\(\n?[ \t]\\)+" | 838 | "\\(\n?[ \t]\\)+" |
| 672 | "\\(" rfc2047-encoded-word-regexp "\\)")) | 839 | "\\(" rfc2047-encoded-word-regexp "\\)")) |
| 673 | nil t) | 840 | nil t) |
| 674 | (delete-region (goto-char (match-end 1)) (match-beginning 6))) | 841 | (delete-region (goto-char (match-end 1)) (match-beginning 7))) |
| 675 | ;; Decode the encoded words. | 842 | ;; Decode the encoded words. |
| 676 | (setq b (goto-char (point-min))) | 843 | (setq b (goto-char (point-min))) |
| 677 | (while (re-search-forward rfc2047-encoded-word-regexp nil t) | 844 | (while (re-search-forward rfc2047-encoded-word-regexp nil t) |
| @@ -774,7 +941,20 @@ By default, the region is treated as containing addresses (see | |||
| 774 | mail-parse-charset | 941 | mail-parse-charset |
| 775 | (not (eq mail-parse-charset 'us-ascii)) | 942 | (not (eq mail-parse-charset 'us-ascii)) |
| 776 | (not (eq mail-parse-charset 'gnus-decoded))) | 943 | (not (eq mail-parse-charset 'gnus-decoded))) |
| 777 | (mm-decode-coding-string string mail-parse-charset) | 944 | ;; `decode-coding-string' in Emacs offers a third optional |
| 945 | ;; arg NOCOPY to avoid consing a new string if the decoding | ||
| 946 | ;; is "trivial". Unfortunately it currently doesn't | ||
| 947 | ;; consider anything else than a `nil' coding system | ||
| 948 | ;; trivial. | ||
| 949 | ;; `rfc2047-decode-string' is called multiple times for each | ||
| 950 | ;; article during summary buffer generation, and we really | ||
| 951 | ;; want to avoid unnecessary consing. So we bypass | ||
| 952 | ;; `decode-coding-string' if the string is purely ASCII. | ||
| 953 | (if (and (fboundp 'detect-coding-string) | ||
| 954 | ;; string is purely ASCII | ||
| 955 | (eq (detect-coding-string string t) 'undecided)) | ||
| 956 | string | ||
| 957 | (mm-decode-coding-string string mail-parse-charset)) | ||
| 778 | (mm-string-as-multibyte string))))) | 958 | (mm-string-as-multibyte string))))) |
| 779 | 959 | ||
| 780 | (defun rfc2047-parse-and-decode (word) | 960 | (defun rfc2047-parse-and-decode (word) |
| @@ -787,8 +967,8 @@ decodable." | |||
| 787 | (condition-case nil | 967 | (condition-case nil |
| 788 | (rfc2047-decode | 968 | (rfc2047-decode |
| 789 | (match-string 1 word) | 969 | (match-string 1 word) |
| 790 | (upcase (match-string 2 word)) | 970 | (string-to-char (match-string 3 word)) |
| 791 | (match-string 3 word)) | 971 | (match-string 4 word)) |
| 792 | (error word)) | 972 | (error word)) |
| 793 | word))) ; un-decodable | 973 | word))) ; un-decodable |
| 794 | 974 | ||
| @@ -809,7 +989,7 @@ decodable." | |||
| 809 | 989 | ||
| 810 | (defun rfc2047-decode (charset encoding string) | 990 | (defun rfc2047-decode (charset encoding string) |
| 811 | "Decode STRING from the given MIME CHARSET in the given ENCODING. | 991 | "Decode STRING from the given MIME CHARSET in the given ENCODING. |
| 812 | Valid ENCODINGs are \"B\" and \"Q\". | 992 | Valid ENCODINGs are the characters \"B\" and \"Q\". |
| 813 | If your Emacs implementation can't decode CHARSET, return nil." | 993 | If your Emacs implementation can't decode CHARSET, return nil." |
| 814 | (if (stringp charset) | 994 | (if (stringp charset) |
| 815 | (setq charset (intern (downcase charset)))) | 995 | (setq charset (intern (downcase charset)))) |
| @@ -824,18 +1004,17 @@ If your Emacs implementation can't decode CHARSET, return nil." | |||
| 824 | (memq 'gnus-unknown mail-parse-ignored-charsets)) | 1004 | (memq 'gnus-unknown mail-parse-ignored-charsets)) |
| 825 | (setq cs (mm-charset-to-coding-system mail-parse-charset))) | 1005 | (setq cs (mm-charset-to-coding-system mail-parse-charset))) |
| 826 | (when cs | 1006 | (when cs |
| 827 | (when (and (eq cs 'ascii) | 1007 | (when (eq cs 'ascii) |
| 828 | mail-parse-charset) | 1008 | (setq cs (or mail-parse-charset 'raw-text))) |
| 829 | (setq cs mail-parse-charset)) | ||
| 830 | (mm-decode-coding-string | 1009 | (mm-decode-coding-string |
| 831 | (cond | 1010 | (cond |
| 832 | ((equal "B" encoding) | 1011 | ((char-equal ?B encoding) |
| 833 | (base64-decode-string | 1012 | (base64-decode-string |
| 834 | (rfc2047-pad-base64 string))) | 1013 | (rfc2047-pad-base64 string))) |
| 835 | ((equal "Q" encoding) | 1014 | ((char-equal ?Q encoding) |
| 836 | (quoted-printable-decode-string | 1015 | (quoted-printable-decode-string |
| 837 | (mm-replace-chars-in-string string ?_ ? ))) | 1016 | (mm-subst-char-in-string ?_ ? string t))) |
| 838 | (t (error "Invalid encoding: %s" encoding))) | 1017 | (t (error "Invalid encoding: %c" encoding))) |
| 839 | cs)))) | 1018 | cs)))) |
| 840 | 1019 | ||
| 841 | (provide 'rfc2047) | 1020 | (provide 'rfc2047) |
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el index 81c7296760f..431087087f1 100644 --- a/lisp/hi-lock.el +++ b/lisp/hi-lock.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; hi-lock.el --- minor mode for interactive automatic highlighting | 1 | ;;; hi-lock.el --- minor mode for interactive automatic highlighting |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: David M. Koppelman, koppel@ee.lsu.edu | 5 | ;; Author: David M. Koppelman, koppel@ee.lsu.edu |
| 6 | ;; Keywords: faces, minor-mode, matching, display | 6 | ;; Keywords: faces, minor-mode, matching, display |
| @@ -292,7 +292,7 @@ is found. A mode is excluded if it's in the list `hi-lock-exclude-modes'." | |||
| 292 | (> (prefix-numeric-value arg) 0))) | 292 | (> (prefix-numeric-value arg) 0))) |
| 293 | ;; Turned on. | 293 | ;; Turned on. |
| 294 | (when (and (not hi-lock-mode-prev) hi-lock-mode) | 294 | (when (and (not hi-lock-mode-prev) hi-lock-mode) |
| 295 | (add-hook 'find-file-hooks 'hi-lock-find-file-hook) | 295 | (add-hook 'find-file-hook 'hi-lock-find-file-hook) |
| 296 | (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook) | 296 | (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook) |
| 297 | (when (eq nil font-lock-defaults) | 297 | (when (eq nil font-lock-defaults) |
| 298 | (setq font-lock-defaults '(nil))) | 298 | (setq font-lock-defaults '(nil))) |
| @@ -313,7 +313,7 @@ is found. A mode is excluded if it's in the list `hi-lock-exclude-modes'." | |||
| 313 | hi-lock-file-patterns nil) | 313 | hi-lock-file-patterns nil) |
| 314 | (when font-lock-mode (hi-lock-refontify))))) | 314 | (when font-lock-mode (hi-lock-refontify))))) |
| 315 | (define-key-after menu-bar-edit-menu [hi-lock] nil) | 315 | (define-key-after menu-bar-edit-menu [hi-lock] nil) |
| 316 | (remove-hook 'find-file-hooks 'hi-lock-find-file-hook) | 316 | (remove-hook 'find-file-hook 'hi-lock-find-file-hook) |
| 317 | (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)))) | 317 | (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)))) |
| 318 | 318 | ||
| 319 | 319 | ||
| @@ -568,5 +568,5 @@ Optional argument END is maximum excursion." | |||
| 568 | 568 | ||
| 569 | (provide 'hi-lock) | 569 | (provide 'hi-lock) |
| 570 | 570 | ||
| 571 | ;;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066 | 571 | ;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066 |
| 572 | ;;; hi-lock.el ends here | 572 | ;;; hi-lock.el ends here |
diff --git a/lisp/hilit-chg.el b/lisp/hilit-chg.el index f670079e7d7..8e84bbf68e2 100644 --- a/lisp/hilit-chg.el +++ b/lisp/hilit-chg.el | |||
| @@ -993,12 +993,12 @@ changes are made, so \\[highlight-changes-next-change] and | |||
| 993 | 993 | ||
| 994 | ;; Global Highlight Changes mode is modeled after Global Font-lock mode. | 994 | ;; Global Highlight Changes mode is modeled after Global Font-lock mode. |
| 995 | ;; Three hooks are used to gain control. When Global Changes Mode is | 995 | ;; Three hooks are used to gain control. When Global Changes Mode is |
| 996 | ;; enabled, `find-file-hooks' and `change-major-mode-hook' are set. | 996 | ;; enabled, `find-file-hook' and `change-major-mode-hook' are set. |
| 997 | ;; `find-file-hooks' is called when visiting a file, the new mode is | 997 | ;; `find-file-hook' is called when visiting a file, the new mode is |
| 998 | ;; known at this time. | 998 | ;; known at this time. |
| 999 | ;; `change-major-mode-hook' is called when a buffer is changing mode. | 999 | ;; `change-major-mode-hook' is called when a buffer is changing mode. |
| 1000 | ;; This could be because of finding a file in which case | 1000 | ;; This could be because of finding a file in which case |
| 1001 | ;; `find-file-hooks' has already been called and has done its work. | 1001 | ;; `find-file-hook' has already been called and has done its work. |
| 1002 | ;; However, it also catches the case where a new mode is being set by | 1002 | ;; However, it also catches the case where a new mode is being set by |
| 1003 | ;; the user. However, it is called from `kill-all-variables' and at | 1003 | ;; the user. However, it is called from `kill-all-variables' and at |
| 1004 | ;; this time the mode is the old mode, which is not what we want. | 1004 | ;; this time the mode is the old mode, which is not what we want. |
| @@ -1080,18 +1080,18 @@ variable `highlight-changes-global-changes-existing-buffers' is non-nil). | |||
| 1080 | (setq global-highlight-changes t) | 1080 | (setq global-highlight-changes t) |
| 1081 | (message "Turning ON Global Highlight Changes mode in %s state" | 1081 | (message "Turning ON Global Highlight Changes mode in %s state" |
| 1082 | highlight-changes-global-initial-state) | 1082 | highlight-changes-global-initial-state) |
| 1083 | (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook) | 1083 | ;; FIXME: Not sure what this was intended to do. --Stef |
| 1084 | (add-hook 'find-file-hooks 'hilit-chg-check-global) | 1084 | ;; (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook) |
| 1085 | (add-hook 'find-file-hook 'hilit-chg-check-global) | ||
| 1085 | (if highlight-changes-global-changes-existing-buffers | 1086 | (if highlight-changes-global-changes-existing-buffers |
| 1086 | (hilit-chg-update-all-buffers | 1087 | (hilit-chg-update-all-buffers |
| 1087 | highlight-changes-global-initial-state))) | 1088 | highlight-changes-global-initial-state))) |
| 1088 | 1089 | ||
| 1089 | (message "Turning OFF global Highlight Changes mode") | 1090 | (message "Turning OFF global Highlight Changes mode") |
| 1090 | (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook) | 1091 | ;; FIXME: Not sure what this was intended to do. --Stef |
| 1091 | (remove-hook 'find-file-hooks 'hilit-chg-check-global) | 1092 | ;; (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook) |
| 1092 | (remove-hook 'post-command-hook | 1093 | (remove-hook 'post-command-hook 'hilit-chg-post-command-hook) |
| 1093 | 'hilit-chg-post-command-hook) | 1094 | (remove-hook 'find-file-hook 'hilit-chg-check-global) |
| 1094 | (remove-hook 'find-file-hooks 'hilit-chg-check-global) | ||
| 1095 | (if highlight-changes-global-changes-existing-buffers | 1095 | (if highlight-changes-global-changes-existing-buffers |
| 1096 | (hilit-chg-update-all-buffers nil)))) | 1096 | (hilit-chg-update-all-buffers nil)))) |
| 1097 | 1097 | ||
diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 0d2b221ee8b..b29027fcf42 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el | |||
| @@ -36,18 +36,12 @@ | |||
| 36 | 36 | ||
| 37 | (require 'image) | 37 | (require 'image) |
| 38 | 38 | ||
| 39 | ;;;###autoload (push '("\\.jpg\\'" . image-mode) auto-mode-alist) | 39 | ;;;###autoload (push '("\\.jpe?g\\'" . image-mode) auto-mode-alist) |
| 40 | ;;;###autoload (push '("\\.jpeg\\'" . image-mode) auto-mode-alist) | 40 | ;;;###autoload (push '("\\.png\\'" . image-mode) auto-mode-alist) |
| 41 | ;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist) | 41 | ;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist) |
| 42 | ;;;###autoload (push '("\\.png\\'" . image-mode) auto-mode-alist) | 42 | ;;;###autoload (push '("\\.tiff?\\'" . image-mode) auto-mode-alist) |
| 43 | ;;;###autoload (push '("\\.tiff\\'" . image-mode) auto-mode-alist) | 43 | ;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist) |
| 44 | ;;;###autoload (push '("\\.tif\\'" . image-mode) auto-mode-alist) | 44 | ;;;###autoload (push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist) |
| 45 | ;;;###autoload (push '("\\.xbm\\'" . image-mode) auto-mode-alist) | ||
| 46 | ;;;###autoload (push '("\\.xpm\\'" . image-mode) auto-mode-alist) | ||
| 47 | ;;;###autoload (push '("\\.pbm\\'" . image-mode) auto-mode-alist) | ||
| 48 | ;;;###autoload (push '("\\.pgm\\'" . image-mode) auto-mode-alist) | ||
| 49 | ;;;###autoload (push '("\\.ppm\\'" . image-mode) auto-mode-alist) | ||
| 50 | ;;;###autoload (push '("\\.pnm\\'" . image-mode) auto-mode-alist) | ||
| 51 | 45 | ||
| 52 | (defvar image-mode-map | 46 | (defvar image-mode-map |
| 53 | (let ((map (make-sparse-keymap))) | 47 | (let ((map (make-sparse-keymap))) |
| @@ -65,9 +59,64 @@ to toggle between display as an image and display as text." | |||
| 65 | (setq mode-name "Image") | 59 | (setq mode-name "Image") |
| 66 | (setq major-mode 'image-mode) | 60 | (setq major-mode 'image-mode) |
| 67 | (use-local-map image-mode-map) | 61 | (use-local-map image-mode-map) |
| 62 | (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t) | ||
| 63 | (if (not (get-text-property (point-min) 'display)) | ||
| 64 | (image-toggle-display) | ||
| 65 | ;; Set next vars when image is already displayed but local | ||
| 66 | ;; variables were cleared by kill-all-local-variables | ||
| 67 | (setq cursor-type nil truncate-lines t)) | ||
| 68 | (run-mode-hooks 'image-mode-hook) | 68 | (run-mode-hooks 'image-mode-hook) |
| 69 | (message (substitute-command-keys | 69 | (message (concat (substitute-command-keys |
| 70 | "Type \\[image-toggle-display] to view the image as an image."))) | 70 | "Type \\[image-toggle-display] to view the image as ") |
| 71 | (if (get-text-property (point-min) 'display) | ||
| 72 | "text" "an image") "."))) | ||
| 73 | |||
| 74 | ;;;###autoload | ||
| 75 | (define-minor-mode image-minor-mode | ||
| 76 | "Toggle Image minor mode. | ||
| 77 | With arg, turn Image minor mode on if arg is positive, off otherwise. | ||
| 78 | See the command `image-mode' for more information on this mode." | ||
| 79 | nil " Image" image-mode-map | ||
| 80 | :group 'image | ||
| 81 | :version "22.1" | ||
| 82 | (if (not image-minor-mode) | ||
| 83 | (image-toggle-display-text) | ||
| 84 | (if (get-text-property (point-min) 'display) | ||
| 85 | (setq cursor-type nil truncate-lines t)) | ||
| 86 | (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t) | ||
| 87 | (message (concat (substitute-command-keys | ||
| 88 | "Type \\[image-toggle-display] to view the image as ") | ||
| 89 | (if (get-text-property (point-min) 'display) | ||
| 90 | "text" "an image") ".")))) | ||
| 91 | |||
| 92 | ;;;###autoload | ||
| 93 | (defun image-mode-maybe () | ||
| 94 | "Set major or minor mode for image files. | ||
| 95 | Set Image major mode only when there are no other major modes | ||
| 96 | associated with a filename in `auto-mode-alist'. When an image | ||
| 97 | filename matches another major mode in `auto-mode-alist' then | ||
| 98 | set that major mode and Image minor mode. | ||
| 99 | |||
| 100 | See commands `image-mode' and `image-minor-mode' for more | ||
| 101 | information on these modes." | ||
| 102 | (interactive) | ||
| 103 | (let* ((mode-alist | ||
| 104 | (delq nil (mapcar | ||
| 105 | (lambda (elt) | ||
| 106 | (unless (memq (or (car-safe (cdr elt)) (cdr elt)) | ||
| 107 | '(image-mode image-mode-maybe)) | ||
| 108 | elt)) | ||
| 109 | auto-mode-alist)))) | ||
| 110 | (if (assoc-default buffer-file-name mode-alist 'string-match) | ||
| 111 | (let ((auto-mode-alist mode-alist)) | ||
| 112 | (set-auto-mode) | ||
| 113 | (image-minor-mode t)) | ||
| 114 | (image-mode)))) | ||
| 115 | |||
| 116 | (defun image-toggle-display-text () | ||
| 117 | "Showing the text of the image file." | ||
| 118 | (if (get-text-property (point-min) 'display) | ||
| 119 | (image-toggle-display))) | ||
| 71 | 120 | ||
| 72 | (defun image-toggle-display () | 121 | (defun image-toggle-display () |
| 73 | "Start or stop displaying an image file as the actual image. | 122 | "Start or stop displaying an image file as the actual image. |
| @@ -84,7 +133,8 @@ and showing the image as an image." | |||
| 84 | (set-buffer-modified-p modified) | 133 | (set-buffer-modified-p modified) |
| 85 | (kill-local-variable 'cursor-type) | 134 | (kill-local-variable 'cursor-type) |
| 86 | (kill-local-variable 'truncate-lines) | 135 | (kill-local-variable 'truncate-lines) |
| 87 | (message "Repeat this command to go back to displaying the image")) | 136 | (if (called-interactively-p) |
| 137 | (message "Repeat this command to go back to displaying the image"))) | ||
| 88 | ;; Turn the image data into a real image, but only if the whole file | 138 | ;; Turn the image data into a real image, but only if the whole file |
| 89 | ;; was inserted | 139 | ;; was inserted |
| 90 | (let* ((data | 140 | (let* ((data |
| @@ -100,6 +150,7 @@ and showing the image as an image." | |||
| 100 | ;; read-only when we're visiting the file (as | 150 | ;; read-only when we're visiting the file (as |
| 101 | ;; opposed to just inserting it). | 151 | ;; opposed to just inserting it). |
| 102 | read-only t front-sticky (read-only))) | 152 | read-only t front-sticky (read-only))) |
| 153 | (inhibit-read-only t) | ||
| 103 | (buffer-undo-list t) | 154 | (buffer-undo-list t) |
| 104 | (modified (buffer-modified-p))) | 155 | (modified (buffer-modified-p))) |
| 105 | (add-text-properties (point-min) (point-max) props) | 156 | (add-text-properties (point-min) (point-max) props) |
| @@ -110,7 +161,8 @@ and showing the image as an image." | |||
| 110 | ;; This just makes the arrow displayed in the right fringe | 161 | ;; This just makes the arrow displayed in the right fringe |
| 111 | ;; area look correct when the image is wider than the window. | 162 | ;; area look correct when the image is wider than the window. |
| 112 | (setq truncate-lines t) | 163 | (setq truncate-lines t) |
| 113 | (message "Repeat this command to go back to displaying the file as text")))) | 164 | (if (called-interactively-p) |
| 165 | (message "Repeat this command to go back to displaying the file as text"))))) | ||
| 114 | 166 | ||
| 115 | (provide 'image-mode) | 167 | (provide 'image-mode) |
| 116 | 168 | ||
diff --git a/lisp/info.el b/lisp/info.el index 870e1ad89f6..cefe603a400 100644 --- a/lisp/info.el +++ b/lisp/info.el | |||
| @@ -3026,12 +3026,12 @@ if point is in a menu item description, follow that menu item." | |||
| 3026 | :help "Go to menu of visited nodes"] | 3026 | :help "Go to menu of visited nodes"] |
| 3027 | ["Table of Contents" Info-toc | 3027 | ["Table of Contents" Info-toc |
| 3028 | :help "Go to table of contents"] | 3028 | :help "Go to table of contents"] |
| 3029 | ("Index..." | 3029 | ("Index" |
| 3030 | ["Lookup a String" Info-index | 3030 | ["Lookup a String..." Info-index |
| 3031 | :help "Look for a string in the index items"] | 3031 | :help "Look for a string in the index items"] |
| 3032 | ["Next Matching Item" Info-index-next | 3032 | ["Next Matching Item" Info-index-next :active Info-index-alternatives |
| 3033 | :help "Look for another occurrence of previous item"] | 3033 | :help "Look for another occurrence of previous item"] |
| 3034 | ["Lookup a string in all indices" info-apropos | 3034 | ["Lookup a string in all indices..." info-apropos |
| 3035 | :help "Look for a string in the indices of all manuals"]) | 3035 | :help "Look for a string in the indices of all manuals"]) |
| 3036 | ["Edit" Info-edit :help "Edit contents of this node" | 3036 | ["Edit" Info-edit :help "Edit contents of this node" |
| 3037 | :active Info-enable-edit] | 3037 | :active Info-enable-edit] |
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index f08305de180..8fc75054660 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el | |||
| @@ -1681,7 +1681,7 @@ The default status is as follows: | |||
| 1681 | 1681 | ||
| 1682 | (reset-language-environment) | 1682 | (reset-language-environment) |
| 1683 | 1683 | ||
| 1684 | (defun set-display-table-and-terminal-coding-system (language-name) | 1684 | (defun set-display-table-and-terminal-coding-system (language-name &optional coding-system) |
| 1685 | "Set up the display table and terminal coding system for LANGUAGE-NAME." | 1685 | "Set up the display table and terminal coding system for LANGUAGE-NAME." |
| 1686 | (let ((coding (get-language-info language-name 'unibyte-display))) | 1686 | (let ((coding (get-language-info language-name 'unibyte-display))) |
| 1687 | (if coding | 1687 | (if coding |
| @@ -1695,7 +1695,7 @@ The default status is as follows: | |||
| 1695 | (dotimes (i 128) | 1695 | (dotimes (i 128) |
| 1696 | (aset standard-display-table (+ i 128) nil)))) | 1696 | (aset standard-display-table (+ i 128) nil)))) |
| 1697 | (or (eq window-system 'pc) | 1697 | (or (eq window-system 'pc) |
| 1698 | (set-terminal-coding-system coding)))) | 1698 | (set-terminal-coding-system (or coding-system coding))))) |
| 1699 | 1699 | ||
| 1700 | (defun set-language-environment (language-name) | 1700 | (defun set-language-environment (language-name) |
| 1701 | "Set up multi-lingual environment for using LANGUAGE-NAME. | 1701 | "Set up multi-lingual environment for using LANGUAGE-NAME. |
| @@ -2415,7 +2415,8 @@ See also `locale-charset-language-names', `locale-language-names', | |||
| 2415 | ;; we are using single-byte characters, | 2415 | ;; we are using single-byte characters, |
| 2416 | ;; so the display table and terminal coding system are irrelevant. | 2416 | ;; so the display table and terminal coding system are irrelevant. |
| 2417 | (when default-enable-multibyte-characters | 2417 | (when default-enable-multibyte-characters |
| 2418 | (set-display-table-and-terminal-coding-system language-name)) | 2418 | (set-display-table-and-terminal-coding-system |
| 2419 | language-name coding-system)) | ||
| 2419 | 2420 | ||
| 2420 | ;; Set the `keyboard-coding-system' if appropriate (tty | 2421 | ;; Set the `keyboard-coding-system' if appropriate (tty |
| 2421 | ;; only). At least X and MS Windows can generate | 2422 | ;; only). At least X and MS Windows can generate |
| @@ -2458,9 +2459,16 @@ system codeset `%s' for this locale." coding-system codeset)))))))) | |||
| 2458 | (set-keyboard-coding-system code-page-coding) | 2459 | (set-keyboard-coding-system code-page-coding) |
| 2459 | (set-terminal-coding-system code-page-coding)))) | 2460 | (set-terminal-coding-system code-page-coding)))) |
| 2460 | 2461 | ||
| 2461 | ;; On Darwin, file names are always encoded in utf-8, no matter the locale. | ||
| 2462 | (when (eq system-type 'darwin) | 2462 | (when (eq system-type 'darwin) |
| 2463 | (setq default-file-name-coding-system 'utf-8)) | 2463 | ;; On Darwin, file names are always encoded in utf-8, no matter |
| 2464 | ;; the locale. | ||
| 2465 | (setq default-file-name-coding-system 'utf-8) | ||
| 2466 | ;; Mac OS X's Terminal.app by default uses utf-8 regardless of | ||
| 2467 | ;; the locale. | ||
| 2468 | (when (and (null window-system) | ||
| 2469 | (equal (getenv "TERM_PROGRAM") "Apple_Terminal")) | ||
| 2470 | (set-terminal-coding-system 'utf-8) | ||
| 2471 | (set-keyboard-coding-system 'utf-8))) | ||
| 2464 | 2472 | ||
| 2465 | ;; Default to A4 paper if we're not in a C, POSIX or US locale. | 2473 | ;; Default to A4 paper if we're not in a C, POSIX or US locale. |
| 2466 | ;; (See comments in Flocale_info.) | 2474 | ;; (See comments in Flocale_info.) |
diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 08be907357a..8d5ca33881a 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el | |||
| @@ -1508,10 +1508,11 @@ text, and convert it in the temporary buffer. Otherwise, convert in-place." | |||
| 1508 | ;;; FILE I/O | 1508 | ;;; FILE I/O |
| 1509 | 1509 | ||
| 1510 | (defcustom auto-coding-alist | 1510 | (defcustom auto-coding-alist |
| 1511 | '(("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\)\\'" . no-conversion) | 1511 | '(("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . no-conversion) |
| 1512 | ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\)\\'" . no-conversion) | 1512 | ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion) |
| 1513 | ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion) | 1513 | ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion) |
| 1514 | ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion) | 1514 | ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion) |
| 1515 | ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion) | ||
| 1515 | ("/#[^/]+#\\'" . emacs-mule)) | 1516 | ("/#[^/]+#\\'" . emacs-mule)) |
| 1516 | "Alist of filename patterns vs corresponding coding systems. | 1517 | "Alist of filename patterns vs corresponding coding systems. |
| 1517 | Each element looks like (REGEXP . CODING-SYSTEM). | 1518 | Each element looks like (REGEXP . CODING-SYSTEM). |
diff --git a/lisp/kmacro.el b/lisp/kmacro.el index c6a97bb3d34..20816fc7fea 100644 --- a/lisp/kmacro.el +++ b/lisp/kmacro.el | |||
| @@ -614,10 +614,13 @@ With numeric arg, repeat macro now that many times, | |||
| 614 | counting the definition just completed as the first repetition. | 614 | counting the definition just completed as the first repetition. |
| 615 | An argument of zero means repeat until error." | 615 | An argument of zero means repeat until error." |
| 616 | (interactive "P") | 616 | (interactive "P") |
| 617 | (end-kbd-macro arg #'kmacro-loop-setup-function) | 617 | ;; Isearch may push the kmacro-end-macro key sequence onto the macro. |
| 618 | (when (and last-kbd-macro (= (length last-kbd-macro) 0)) | 618 | ;; Just ignore it when executing the macro. |
| 619 | (message "Ignore empty macro") | 619 | (unless executing-kbd-macro |
| 620 | (kmacro-pop-ring))) | 620 | (end-kbd-macro arg #'kmacro-loop-setup-function) |
| 621 | (when (and last-kbd-macro (= (length last-kbd-macro) 0)) | ||
| 622 | (message "Ignore empty macro") | ||
| 623 | (kmacro-pop-ring)))) | ||
| 621 | 624 | ||
| 622 | 625 | ||
| 623 | ;;;###autoload | 626 | ;;;###autoload |
diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el index 0957748799d..cbfc82c9dc8 100644 --- a/lisp/language/thai-util.el +++ b/lisp/language/thai-util.el | |||
| @@ -1,10 +1,9 @@ | |||
| 1 | ;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*- | 1 | ;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. | 3 | ;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2005 |
| 4 | ;; Licensed to the Free Software Foundation. | ||
| 5 | ;; Copyright (C) 2003 | ||
| 6 | ;; National Institute of Advanced Industrial Science and Technology (AIST) | 4 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
| 7 | ;; Registration Number H13PRO009 | 5 | ;; Registration Number H13PRO009 |
| 6 | ;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. | ||
| 8 | 7 | ||
| 9 | ;; Keywords: mule, multilingual, Thai, i18n | 8 | ;; Keywords: mule, multilingual, Thai, i18n |
| 10 | 9 | ||
| @@ -253,6 +252,42 @@ positions (integers or markers) specifying the region." | |||
| 253 | (prog1 (match-end 0) | 252 | (prog1 (match-end 0) |
| 254 | (thai-compose-syllable pos (match-end 0))))))))) | 253 | (thai-compose-syllable pos (match-end 0))))))))) |
| 255 | 254 | ||
| 255 | ;; Thai-word-mode requires functions in the feature `thai-word'. | ||
| 256 | (require 'thai-word) | ||
| 257 | |||
| 258 | (defvar thai-word-mode-map | ||
| 259 | (let ((map (make-sparse-keymap))) | ||
| 260 | (define-key map [remap forward-word] 'thai-forward-word) | ||
| 261 | (define-key map [remap backward-word] 'thai-backward-word) | ||
| 262 | (define-key map [remap kill-word] 'thai-kill-word) | ||
| 263 | (define-key map [remap backward-kill-word] 'thai-backward-kill-word) | ||
| 264 | (define-key map [remap transpose-words] 'thai-transpose-words) | ||
| 265 | map) | ||
| 266 | "Keymap for `thai-word-mode'.") | ||
| 267 | |||
| 268 | (define-minor-mode thai-word-mode | ||
| 269 | "Minor mode to make word-oriented commands aware of Thai words. | ||
| 270 | The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]." | ||
| 271 | :global t | ||
| 272 | (cond (thai-word-mode | ||
| 273 | ;; This enables linebreak between Thai characters. | ||
| 274 | (modify-category-entry (make-char 'thai-tis620) ?|) | ||
| 275 | ;; This enables linebreak at a Thai word boundary. | ||
| 276 | (put-charset-property 'thai-tis620 'fill-find-break-point-function | ||
| 277 | 'thai-fill-find-break-point)) | ||
| 278 | (t | ||
| 279 | (modify-category-entry (make-char 'thai-tis620) ?| nil t) | ||
| 280 | (put-charset-property 'thai-tis620 'fill-find-break-point-function | ||
| 281 | nil)))) | ||
| 282 | |||
| 283 | ;; Function to call on entering the Thai language environment. | ||
| 284 | (defun setup-thai-language-environment-internal () | ||
| 285 | (thai-word-mode 1)) | ||
| 286 | |||
| 287 | ;; Function to call on exiting the Thai language environment. | ||
| 288 | (defun exit-thai-language-environment-internal () | ||
| 289 | (thai-word-mode -1)) | ||
| 290 | |||
| 256 | ;; | 291 | ;; |
| 257 | (provide 'thai-util) | 292 | (provide 'thai-util) |
| 258 | 293 | ||
diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el index 82f6fcdea6a..9c3ba81859e 100644 --- a/lisp/language/thai-word.el +++ b/lisp/language/thai-word.el | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | ;;; thai-word.el -- find Thai word boundaries | 1 | ;;; thai-word.el -- find Thai word boundaries |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2000, 2001, 2002, 2003, 2004 | 3 | ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 |
| 4 | ;; Electrotechnical Laboratory, JAPAN. | 4 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
| 5 | ;; Registration Number H14PRO021 | ||
| 5 | 6 | ||
| 6 | ;; Author: Kenichi HANDA <handa@etl.go.jp> | 7 | ;; Author: Kenichi HANDA <handa@etl.go.jp> |
| 7 | 8 | ||
| @@ -72,13 +73,10 @@ | |||
| 72 | ;; which means that you can easily index the list character by | 73 | ;; which means that you can easily index the list character by |
| 73 | ;; character. | 74 | ;; character. |
| 74 | 75 | ||
| 75 | (defconst thai-word-table nil) | 76 | (defvar thai-word-table |
| 76 | 77 | (let ((table (list 'thai-words))) | |
| 77 | 78 | (dolist (elt | |
| 78 | ;; Set up `thai-word-table'. | 79 | ;;; The following is indented as this to minimize this file size. |
| 79 | |||
| 80 | (let | ||
| 81 | ((l | ||
| 82 | '("¡¡" | 80 | '("¡¡" |
| 83 | "¡¡Å" | 81 | "¡¡Å" |
| 84 | "¡¡Ø¸Àѳ±ì" | 82 | "¡¡Ø¸Àѳ±ì" |
| @@ -10732,11 +10730,10 @@ | |||
| 10732 | "äÎâ¡ÃÁÔàµÍÃì" | 10730 | "äÎâ¡ÃÁÔàµÍÃì" |
| 10733 | "äÎâ´Ã¤ÒÃìºÍ¹" | 10731 | "äÎâ´Ã¤ÒÃìºÍ¹" |
| 10734 | "äÎâÅ" | 10732 | "äÎâÅ" |
| 10735 | ))) | 10733 | )) |
| 10736 | (setq thai-word-table (list 'thai-words)) | 10734 | (set-nested-alist elt 1 table)) |
| 10737 | (while l | 10735 | table) |
| 10738 | (set-nested-alist (car l) 1 thai-word-table) | 10736 | "Nested alist of Thai words.") |
| 10739 | (setq l (cdr l)))) | ||
| 10740 | 10737 | ||
| 10741 | 10738 | ||
| 10742 | (defun thai-update-word-table (file &optional append) | 10739 | (defun thai-update-word-table (file &optional append) |
| @@ -11042,6 +11039,33 @@ If COUNT is negative, move point forward (- COUNT) words." | |||
| 11042 | (thai-forward-word (- count))) | 11039 | (thai-forward-word (- count))) |
| 11043 | 11040 | ||
| 11044 | 11041 | ||
| 11042 | (defun thai-kill-word (arg) | ||
| 11043 | "Like kill-word but pay attention to Thai word boundaries. | ||
| 11044 | With argument, do this that many times." | ||
| 11045 | (interactive "p") | ||
| 11046 | (kill-region (point) (progn (thai-forward-word arg) (point)))) | ||
| 11047 | |||
| 11048 | |||
| 11049 | (defun thai-backward-kill-word (arg) | ||
| 11050 | "Like backward-kill-word but pay attention to Thai word boundaries." | ||
| 11051 | (interactive "p") | ||
| 11052 | (thai-kill-word (- arg))) | ||
| 11053 | |||
| 11054 | |||
| 11055 | (defun thai-transpose-words (arg) | ||
| 11056 | "Like transpose-words but pay attention to Thai word boundaries." | ||
| 11057 | (interactive "*p") | ||
| 11058 | (transpose-subr 'thai-forward-word arg)) | ||
| 11059 | |||
| 11060 | (defun thai-fill-find-break-point (linebeg) | ||
| 11061 | "Go to a line breaking position near point considering Thai word boundaries." | ||
| 11062 | (let ((pos (point))) | ||
| 11063 | (thai-forward-word -1) | ||
| 11064 | (when (<= (point) linebeg) | ||
| 11065 | (goto-char pos) | ||
| 11066 | (thai-forward-word 1)) | ||
| 11067 | (kinsoku linebeg))) | ||
| 11068 | |||
| 11045 | (provide 'thai-word) | 11069 | (provide 'thai-word) |
| 11046 | 11070 | ||
| 11047 | 11071 | ||
diff --git a/lisp/language/thai.el b/lisp/language/thai.el index 604eaf6384e..f9cd655635a 100644 --- a/lisp/language/thai.el +++ b/lisp/language/thai.el | |||
| @@ -1,14 +1,12 @@ | |||
| 1 | ;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*- | 1 | ;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. | 3 | ;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2005 |
| 4 | ;; Licensed to the Free Software Foundation. | ||
| 5 | ;; Copyright (C) 2002 Free Software Foundation, Inc. | ||
| 6 | ;; Copyright (C) 2003 | ||
| 7 | ;; National Institute of Advanced Industrial Science and Technology (AIST) | 4 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
| 8 | ;; Registration Number H13PRO009 | 5 | ;; Registration Number H13PRO009 |
| 9 | ;; Copyright (C) 2005 | 6 | ;; Copyright (C) 2005 |
| 10 | ;; National Institute of Advanced Industrial Science and Technology (AIST) | 7 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
| 11 | ;; Registration Number H14PRO021 | 8 | ;; Registration Number H14PRO021 |
| 9 | ;; Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. | ||
| 12 | 10 | ||
| 13 | ;; Keywords: multilingual, Thai, i18n | 11 | ;; Keywords: multilingual, Thai, i18n |
| 14 | 12 | ||
| @@ -54,6 +52,8 @@ | |||
| 54 | (input-method . "thai-kesmanee") | 52 | (input-method . "thai-kesmanee") |
| 55 | (unibyte-display . thai-tis620) | 53 | (unibyte-display . thai-tis620) |
| 56 | (features thai-util) | 54 | (features thai-util) |
| 55 | (setup-function . setup-thai-language-environment-internal) | ||
| 56 | (exit-function . exit-thai-language-environment-internal) | ||
| 57 | (sample-text | 57 | (sample-text |
| 58 | . (thai-compose-string | 58 | . (thai-compose-string |
| 59 | (copy-sequence "Thai (,T@RIRd7B(B) ,TJGQJ4U$CQ:(B, ,TJGQJ4U$hP(B"))) | 59 | (copy-sequence "Thai (,T@RIRd7B(B) ,TJGQJ4U$CQ:(B, ,TJGQJ4U$hP(B"))) |
diff --git a/lisp/longlines.el b/lisp/longlines.el new file mode 100644 index 00000000000..8491a0b7960 --- /dev/null +++ b/lisp/longlines.el | |||
| @@ -0,0 +1,393 @@ | |||
| 1 | ;;; longlines.el --- automatically wrap long lines | ||
| 2 | |||
| 3 | ;; Copyright (C) 2000, 2001, 2004, 2005 by Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Authors: Kai Grossjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> | ||
| 6 | ;; Alex Schroeder <alex@gnu.org> | ||
| 7 | ;; Chong Yidong <cyd@stupidchicken.com> | ||
| 8 | ;; Maintainer: Chong Yidong <cyd@stupidchicken.com> | ||
| 9 | ;; Keywords: convenience | ||
| 10 | |||
| 11 | ;; This file is part of GNU Emacs. | ||
| 12 | |||
| 13 | ;; GNU Emacs is free software; you can redistribute it and/or modify | ||
| 14 | ;; it under the terms of the GNU General Public License as published by | ||
| 15 | ;; the Free Software Foundation; either version 2, or (at your option) | ||
| 16 | ;; any later version. | ||
| 17 | |||
| 18 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 19 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 20 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 21 | ;; GNU General Public License for more details. | ||
| 22 | |||
| 23 | ;; You should have received a copy of the GNU General Public License | ||
| 24 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | ||
| 25 | ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
| 26 | ;; Boston, MA 02111-1307, USA. | ||
| 27 | |||
| 28 | ;;; Commentary: | ||
| 29 | |||
| 30 | ;; Some text editors save text files with long lines, and they | ||
| 31 | ;; automatically break these lines at whitespace, without actually | ||
| 32 | ;; inserting any newline characters. When doing `M-q' in Emacs, you | ||
| 33 | ;; are inserting newline characters. Longlines mode provides a file | ||
| 34 | ;; format which wraps the long lines when reading a file and unwraps | ||
| 35 | ;; the lines when saving the file. It can also wrap and unwrap | ||
| 36 | ;; automatically as editing takes place. | ||
| 37 | |||
| 38 | ;; Special thanks to Rod Smith for many useful bug reports. | ||
| 39 | |||
| 40 | ;;; Code: | ||
| 41 | |||
| 42 | (require 'easy-mmode) | ||
| 43 | |||
| 44 | (defgroup longlines nil | ||
| 45 | "Automatic wrapping of long lines when loading files." | ||
| 46 | :group 'fill) | ||
| 47 | |||
| 48 | (defcustom longlines-auto-wrap t | ||
| 49 | "*Non-nil means long lines are automatically wrapped after each command. | ||
| 50 | Otherwise, you can perform filling using `fill-paragraph' or | ||
| 51 | `auto-fill-mode'. In any case, the soft newlines will be removed | ||
| 52 | when the file is saved to disk." | ||
| 53 | :group 'longlines | ||
| 54 | :type 'boolean) | ||
| 55 | |||
| 56 | (defcustom longlines-wrap-follows-window-size nil | ||
| 57 | "*Non-nil means wrapping and filling happen at the edge of the window. | ||
| 58 | Otherwise, `fill-column' is used, regardless of the window size. This | ||
| 59 | does not work well when the buffer is displayed in multiple windows | ||
| 60 | with differing widths." | ||
| 61 | :group 'longlines | ||
| 62 | :type 'boolean) | ||
| 63 | |||
| 64 | (defcustom longlines-show-hard-newlines nil | ||
| 65 | "*Non-nil means each hard newline is marked with a symbol. | ||
| 66 | You can also enable the display temporarily, using the command | ||
| 67 | `longlines-show-hard-newlines'" | ||
| 68 | :group 'longlines | ||
| 69 | :type 'boolean) | ||
| 70 | |||
| 71 | (defcustom longlines-show-effect (propertize "|\n" 'face 'escape-glyph) | ||
| 72 | "*A string to display when showing hard newlines. | ||
| 73 | This is used when `longlines-show-hard-newlines' is on." | ||
| 74 | :group 'longlines | ||
| 75 | :type 'string) | ||
| 76 | |||
| 77 | ;; Internal variables | ||
| 78 | |||
| 79 | (defvar longlines-wrap-beg nil) | ||
| 80 | (defvar longlines-wrap-end nil) | ||
| 81 | (defvar longlines-wrap-point nil) | ||
| 82 | (defvar longlines-showing nil) | ||
| 83 | |||
| 84 | (make-variable-buffer-local 'longlines-wrap-beg) | ||
| 85 | (make-variable-buffer-local 'longlines-wrap-end) | ||
| 86 | (make-variable-buffer-local 'longlines-wrap-point) | ||
| 87 | (make-variable-buffer-local 'longlines-showing) | ||
| 88 | |||
| 89 | ;; Mode | ||
| 90 | |||
| 91 | ;;;###autoload | ||
| 92 | (define-minor-mode longlines-mode | ||
| 93 | "Toggle Long Lines mode. | ||
| 94 | In Long Lines mode, long lines are wrapped if they extend beyond | ||
| 95 | `fill-column'. The soft newlines used for line wrapping will not | ||
| 96 | show up when the text is yanked or saved to disk. | ||
| 97 | |||
| 98 | If `longlines-auto-wrap' is non-nil, lines are automatically | ||
| 99 | wrapped whenever the buffer is changed. You can always call | ||
| 100 | `fill-paragraph' to fill individual paragraphs. | ||
| 101 | |||
| 102 | If `longlines-show-hard-newlines' is non-nil, hard newlines will | ||
| 103 | be marked by a symbol." | ||
| 104 | nil " ll" nil | ||
| 105 | (if longlines-mode | ||
| 106 | ;; Turn on longlines mode | ||
| 107 | (progn | ||
| 108 | (use-hard-newlines 1 'never) | ||
| 109 | (set (make-local-variable 'require-final-newline) nil) | ||
| 110 | (add-to-list 'buffer-file-format 'longlines) | ||
| 111 | (add-hook 'change-major-mode-hook 'longlines-mode-off nil t) | ||
| 112 | (make-local-variable 'buffer-substring-filters) | ||
| 113 | (add-to-list 'buffer-substring-filters 'longlines-encode-string) | ||
| 114 | (when longlines-wrap-follows-window-size | ||
| 115 | (set (make-local-variable 'fill-column) | ||
| 116 | (- (window-width) window-min-width)) | ||
| 117 | (add-hook 'window-configuration-change-hook | ||
| 118 | 'longlines-window-change-function nil t)) | ||
| 119 | (let ((buffer-undo-list t) | ||
| 120 | (mod (buffer-modified-p))) | ||
| 121 | ;; Turning off undo is OK since (spaces + newlines) is | ||
| 122 | ;; conserved, except for a corner case in | ||
| 123 | ;; longlines-wrap-lines that we'll never encounter from here | ||
| 124 | (longlines-decode-region (point-min) (point-max)) | ||
| 125 | (longlines-wrap-region (point-min) (point-max)) | ||
| 126 | (set-buffer-modified-p mod)) | ||
| 127 | (when (and longlines-show-hard-newlines | ||
| 128 | (not longlines-showing)) | ||
| 129 | (longlines-show-hard-newlines)) | ||
| 130 | (when longlines-auto-wrap | ||
| 131 | (auto-fill-mode 0) | ||
| 132 | (add-hook 'after-change-functions | ||
| 133 | 'longlines-after-change-function nil t) | ||
| 134 | (add-hook 'post-command-hook | ||
| 135 | 'longlines-post-command-function nil t))) | ||
| 136 | ;; Turn off longlines mode | ||
| 137 | (setq buffer-file-format (delete 'longlines buffer-file-format)) | ||
| 138 | (if longlines-showing | ||
| 139 | (longlines-unshow-hard-newlines)) | ||
| 140 | (let ((buffer-undo-list t)) | ||
| 141 | (longlines-encode-region (point-min) (point-max))) | ||
| 142 | (remove-hook 'change-major-mode-hook 'longlines-mode-off t) | ||
| 143 | (remove-hook 'before-kill-functions 'longlines-encode-region t) | ||
| 144 | (remove-hook 'after-change-functions 'longlines-after-change-function t) | ||
| 145 | (remove-hook 'post-command-hook 'longlines-post-command-function t) | ||
| 146 | (remove-hook 'window-configuration-change-hook | ||
| 147 | 'longlines-window-change-function t) | ||
| 148 | (kill-local-variable 'fill-column))) | ||
| 149 | |||
| 150 | (defun longlines-mode-off () | ||
| 151 | "Turn off longlines mode. | ||
| 152 | This function exists to be called by `change-major-mode-hook' when the | ||
| 153 | major mode changes." | ||
| 154 | (longlines-mode 0)) | ||
| 155 | |||
| 156 | ;; Showing the effect of hard newlines in the buffer | ||
| 157 | |||
| 158 | (defface longlines-visible-face | ||
| 159 | '((t (:background "red"))) | ||
| 160 | "Face used to make hard newlines visible in `longlines-mode'.") | ||
| 161 | |||
| 162 | (defun longlines-show-hard-newlines (&optional arg) | ||
| 163 | "Make hard newlines visible by adding a face. | ||
| 164 | With optional argument ARG, make the hard newlines invisible again." | ||
| 165 | (interactive "P") | ||
| 166 | (let ((buffer-undo-list t) | ||
| 167 | (mod (buffer-modified-p))) | ||
| 168 | (if arg | ||
| 169 | (longlines-unshow-hard-newlines) | ||
| 170 | (setq longlines-showing t) | ||
| 171 | (longlines-show-region (point-min) (point-max))) | ||
| 172 | (set-buffer-modified-p mod))) | ||
| 173 | |||
| 174 | (defun longlines-show-region (beg end) | ||
| 175 | "Make hard newlines between BEG and END visible." | ||
| 176 | (let* ((pmin (min beg end)) | ||
| 177 | (pmax (max beg end)) | ||
| 178 | (pos (text-property-any pmin pmax 'hard t))) | ||
| 179 | (while pos | ||
| 180 | (put-text-property pos (1+ pos) 'display | ||
| 181 | (copy-sequence longlines-show-effect)) | ||
| 182 | (setq pos (text-property-any (1+ pos) pmax 'hard t))))) | ||
| 183 | |||
| 184 | (defun longlines-unshow-hard-newlines () | ||
| 185 | "Make hard newlines invisible again." | ||
| 186 | (interactive) | ||
| 187 | (setq longlines-showing nil) | ||
| 188 | (let ((pos (text-property-any (point-min) (point-max) 'hard t))) | ||
| 189 | (while pos | ||
| 190 | (remove-text-properties pos (1+ pos) '(display)) | ||
| 191 | (setq pos (text-property-any (1+ pos) (point-max) 'hard t))))) | ||
| 192 | |||
| 193 | ;; Wrapping the paragraphs. | ||
| 194 | |||
| 195 | (defun longlines-wrap-region (beg end) | ||
| 196 | "Wrap each successive line, starting with the line before BEG. | ||
| 197 | Stop when we reach lines after END that don't need wrapping, or the | ||
| 198 | end of the buffer." | ||
| 199 | (setq longlines-wrap-point (point)) | ||
| 200 | (goto-char beg) | ||
| 201 | (forward-line -1) | ||
| 202 | ;; Two successful longlines-wrap-line's in a row mean successive | ||
| 203 | ;; lines don't need wrapping. | ||
| 204 | (while (null (and (longlines-wrap-line) | ||
| 205 | (or (eobp) | ||
| 206 | (and (>= (point) end) | ||
| 207 | (longlines-wrap-line)))))) | ||
| 208 | (goto-char longlines-wrap-point)) | ||
| 209 | |||
| 210 | (defun longlines-wrap-line () | ||
| 211 | "If the current line needs to be wrapped, wrap it and return nil. | ||
| 212 | If wrapping is performed, point remains on the line. If the line does | ||
| 213 | not need to be wrapped, move point to the next line and return t." | ||
| 214 | (if (longlines-set-breakpoint) | ||
| 215 | (progn (backward-char 1) | ||
| 216 | (delete-char 1) | ||
| 217 | (insert-char ?\n 1) | ||
| 218 | nil) | ||
| 219 | (if (longlines-merge-lines-p) | ||
| 220 | (progn (end-of-line) | ||
| 221 | (delete-char 1) | ||
| 222 | ;; After certain commands (e.g. kill-line), there may be two | ||
| 223 | ;; successive soft newlines in the buffer. In this case, we | ||
| 224 | ;; replace these two newlines by a single space. Unfortunately, | ||
| 225 | ;; this breaks the conservation of (spaces + newlines), so we | ||
| 226 | ;; have to fiddle with longlines-wrap-point. | ||
| 227 | (if (or (bolp) (eolp)) | ||
| 228 | (if (> longlines-wrap-point (point)) | ||
| 229 | (setq longlines-wrap-point | ||
| 230 | (1- longlines-wrap-point))) | ||
| 231 | (insert-char ? 1)) | ||
| 232 | nil) | ||
| 233 | (forward-line 1) | ||
| 234 | t))) | ||
| 235 | |||
| 236 | (defun longlines-set-breakpoint () | ||
| 237 | "Place point where we should break the current line, and return t. | ||
| 238 | If the line should not be broken, return nil; point remains on the | ||
| 239 | line." | ||
| 240 | (move-to-column fill-column) | ||
| 241 | (if (and (re-search-forward "[^ ]" (line-end-position) 1) | ||
| 242 | (> (current-column) fill-column)) | ||
| 243 | ;; This line is too long. Can we break it? | ||
| 244 | (or (longlines-find-break-backward) | ||
| 245 | (progn (move-to-column fill-column) | ||
| 246 | (longlines-find-break-forward))))) | ||
| 247 | |||
| 248 | (defun longlines-find-break-backward () | ||
| 249 | "Move point backward to the first available breakpoint and return t. | ||
| 250 | If no breakpoint is found, return nil." | ||
| 251 | (and (search-backward " " (line-beginning-position) 1) | ||
| 252 | (save-excursion | ||
| 253 | (skip-chars-backward " " (line-beginning-position)) | ||
| 254 | (null (bolp))) | ||
| 255 | (progn (forward-char 1) | ||
| 256 | (if (and fill-nobreak-predicate | ||
| 257 | (run-hook-with-args-until-success | ||
| 258 | 'fill-nobreak-predicate)) | ||
| 259 | (progn (skip-chars-backward " " (line-beginning-position)) | ||
| 260 | (longlines-find-break-backward)) | ||
| 261 | t)))) | ||
| 262 | |||
| 263 | (defun longlines-find-break-forward () | ||
| 264 | "Move point forward to the first available breakpoint and return t. | ||
| 265 | If no break point is found, return nil." | ||
| 266 | (and (search-forward " " (line-end-position) 1) | ||
| 267 | (progn (skip-chars-forward " " (line-end-position)) | ||
| 268 | (null (eolp))) | ||
| 269 | (if (and fill-nobreak-predicate | ||
| 270 | (run-hook-with-args-until-success | ||
| 271 | 'fill-nobreak-predicate)) | ||
| 272 | (longlines-find-break-forward) | ||
| 273 | t))) | ||
| 274 | |||
| 275 | (defun longlines-merge-lines-p () | ||
| 276 | "Return t if part of the next line can fit onto the current line. | ||
| 277 | Otherwise, return nil. Text cannot be moved across hard newlines." | ||
| 278 | (save-excursion | ||
| 279 | (end-of-line) | ||
| 280 | (and (null (eobp)) | ||
| 281 | (null (get-text-property (point) 'hard)) | ||
| 282 | (let ((space (- fill-column (current-column)))) | ||
| 283 | (forward-line 1) | ||
| 284 | (if (eq (char-after) ? ) | ||
| 285 | t ; We can always merge some spaces | ||
| 286 | (<= (if (search-forward " " (line-end-position) 1) | ||
| 287 | (current-column) | ||
| 288 | (1+ (current-column))) | ||
| 289 | space)))))) | ||
| 290 | |||
| 291 | (defun longlines-decode-region (beg end) | ||
| 292 | "Turn all newlines between BEG and END into hard newlines." | ||
| 293 | (save-excursion | ||
| 294 | (goto-char (min beg end)) | ||
| 295 | (while (search-forward "\n" (max beg end) t) | ||
| 296 | (set-hard-newline-properties | ||
| 297 | (match-beginning 0) (match-end 0))))) | ||
| 298 | |||
| 299 | (defun longlines-encode-region (beg end &optional buffer) | ||
| 300 | "Replace each soft newline between BEG and END with exactly one space. | ||
| 301 | Hard newlines are left intact. The optional argument BUFFER exists for | ||
| 302 | compatibility with `format-alist', and is ignored." | ||
| 303 | (save-excursion | ||
| 304 | (let ((mod (buffer-modified-p))) | ||
| 305 | (goto-char (min beg end)) | ||
| 306 | (while (search-forward "\n" (max (max beg end)) t) | ||
| 307 | (unless (get-text-property (match-beginning 0) 'hard) | ||
| 308 | (replace-match " "))) | ||
| 309 | (set-buffer-modified-p mod) | ||
| 310 | end))) | ||
| 311 | |||
| 312 | (defun longlines-encode-string (string) | ||
| 313 | "Return a copy of STRING with each soft newline replaced by a space. | ||
| 314 | Hard newlines are left intact." | ||
| 315 | (let* ((str (copy-sequence string)) | ||
| 316 | (pos (string-match "\n" str))) | ||
| 317 | (while pos | ||
| 318 | (if (null (get-text-property pos 'hard str)) | ||
| 319 | (aset str pos ? )) | ||
| 320 | (setq pos (string-match "\n" str (1+ pos)))) | ||
| 321 | str)) | ||
| 322 | |||
| 323 | ;; Auto wrap | ||
| 324 | |||
| 325 | (defun longlines-auto-wrap (&optional arg) | ||
| 326 | "Turn on automatic line wrapping, and wrap the entire buffer. | ||
| 327 | With optional argument ARG, turn off line wrapping." | ||
| 328 | (interactive "P") | ||
| 329 | (remove-hook 'after-change-functions 'longlines-after-change-function t) | ||
| 330 | (remove-hook 'post-command-hook 'longlines-post-command-function t) | ||
| 331 | (if arg | ||
| 332 | (progn (setq longlines-auto-wrap nil) | ||
| 333 | (message "Auto wrap disabled.")) | ||
| 334 | (setq longlines-auto-wrap t) | ||
| 335 | (add-hook 'after-change-functions | ||
| 336 | 'longlines-after-change-function nil t) | ||
| 337 | (add-hook 'post-command-hook | ||
| 338 | 'longlines-post-command-function nil t) | ||
| 339 | (let ((mod (buffer-modified-p))) | ||
| 340 | (longlines-wrap-region (point-min) (point-max)) | ||
| 341 | (set-buffer-modified-p mod)) | ||
| 342 | (message "Auto wrap enabled."))) | ||
| 343 | |||
| 344 | (defun longlines-after-change-function (beg end len) | ||
| 345 | "Update `longlines-wrap-beg' and `longlines-wrap-end'. | ||
| 346 | This is called by `after-change-functions' to keep track of the region | ||
| 347 | that has changed." | ||
| 348 | (unless undo-in-progress | ||
| 349 | (setq longlines-wrap-beg | ||
| 350 | (if longlines-wrap-beg (min longlines-wrap-beg beg) beg)) | ||
| 351 | (setq longlines-wrap-end | ||
| 352 | (if longlines-wrap-end (max longlines-wrap-end end) end)))) | ||
| 353 | |||
| 354 | (defun longlines-post-command-function () | ||
| 355 | "Perform line wrapping on the parts of the buffer that have changed. | ||
| 356 | This is called by `post-command-hook' after each command." | ||
| 357 | (when longlines-wrap-beg | ||
| 358 | (cond ((or (eq this-command 'yank) | ||
| 359 | (eq this-command 'yank-pop)) | ||
| 360 | (longlines-decode-region (point) (mark t)) | ||
| 361 | (if longlines-showing | ||
| 362 | (longlines-show-region (point) (mark t)))) | ||
| 363 | ((and (eq this-command 'newline) longlines-showing) | ||
| 364 | (save-excursion | ||
| 365 | (if (search-backward "\n" nil t) | ||
| 366 | (longlines-show-region | ||
| 367 | (match-beginning 0) (match-end 0)))))) | ||
| 368 | (unless (or (eq this-command 'fill-paragraph) | ||
| 369 | (eq this-command 'fill-region)) | ||
| 370 | (longlines-wrap-region longlines-wrap-beg longlines-wrap-end)) | ||
| 371 | (setq longlines-wrap-beg nil) | ||
| 372 | (setq longlines-wrap-end nil))) | ||
| 373 | |||
| 374 | (defun longlines-window-change-function () | ||
| 375 | "Re-wrap the buffer if the window width has changed. | ||
| 376 | This is called by `window-size-change-functions'." | ||
| 377 | (when (/= fill-column (- (window-width) window-min-width)) | ||
| 378 | (setq fill-column (- (window-width) window-min-width)) | ||
| 379 | (let ((mod (buffer-modified-p))) | ||
| 380 | (longlines-wrap-region (point-min) (point-max)) | ||
| 381 | (set-buffer-modified-p mod)))) | ||
| 382 | |||
| 383 | ;; Loading and saving | ||
| 384 | |||
| 385 | (add-to-list | ||
| 386 | 'format-alist | ||
| 387 | (list 'longlines "Automatically wrap long lines." nil | ||
| 388 | 'longlines-decode-region 'longlines-encode-region t nil)) | ||
| 389 | |||
| 390 | (provide 'longlines) | ||
| 391 | |||
| 392 | ;; arch-tag: 3489d225-5506-47b9-8659-d8807b77c624 | ||
| 393 | ;;; longlines.el ends here | ||
diff --git a/lisp/mail/mailalias.el b/lisp/mail/mailalias.el index 18f52e6434f..b520841db3d 100644 --- a/lisp/mail/mailalias.el +++ b/lisp/mail/mailalias.el | |||
| @@ -111,9 +111,10 @@ entered so far." | |||
| 111 | This value is used when the value of `mail-directory-function' | 111 | This value is used when the value of `mail-directory-function' |
| 112 | is `mail-directory-process'. The value should be a list | 112 | is `mail-directory-process'. The value should be a list |
| 113 | of the form (COMMAND ARG ...), where each of the list elements | 113 | of the form (COMMAND ARG ...), where each of the list elements |
| 114 | is evaluated. When `mail-directory-requery' is non-nil, during | 114 | is evaluated. COMMAND should evaluate to a string. When |
| 115 | evaluation of these elements, the variable `pattern' contains | 115 | `mail-directory-requery' is non-nil, during evaluation of these |
| 116 | the partial input being completed. | 116 | elements, the variable `pattern' contains the partial input being |
| 117 | completed. `pattern' is nil when `mail-directory-requery' is nil. | ||
| 117 | 118 | ||
| 118 | The value might look like this: | 119 | The value might look like this: |
| 119 | 120 | ||
| @@ -149,7 +150,7 @@ Three types of values are possible: | |||
| 149 | "Alist of local users, aliases and directory entries as available. | 150 | "Alist of local users, aliases and directory entries as available. |
| 150 | Elements have the form (MAILNAME) or (MAILNAME . FULLNAME). | 151 | Elements have the form (MAILNAME) or (MAILNAME . FULLNAME). |
| 151 | If the value means t, it means the real value should be calculated | 152 | If the value means t, it means the real value should be calculated |
| 152 | for the next use. this is used in `mail-complete'.") | 153 | for the next use. This is used in `mail-complete'.") |
| 153 | 154 | ||
| 154 | (defvar mail-local-names t | 155 | (defvar mail-local-names t |
| 155 | "Alist of local users. | 156 | "Alist of local users. |
| @@ -469,7 +470,9 @@ PATTERN is the string we want to complete." | |||
| 469 | mail-aliases)) | 470 | mail-aliases)) |
| 470 | (if (consp mail-local-names) | 471 | (if (consp mail-local-names) |
| 471 | mail-local-names) | 472 | mail-local-names) |
| 472 | (or directory mail-directory-names)) | 473 | (or directory |
| 474 | (when (consp mail-directory-names) | ||
| 475 | mail-directory-names))) | ||
| 473 | (lambda (a b) | 476 | (lambda (a b) |
| 474 | ;; should cache downcased strings | 477 | ;; should cache downcased strings |
| 475 | (string< (downcase (car a)) | 478 | (string< (downcase (car a)) |
| @@ -478,8 +481,10 @@ PATTERN is the string we want to complete." | |||
| 478 | 481 | ||
| 479 | 482 | ||
| 480 | (defun mail-directory (pattern) | 483 | (defun mail-directory (pattern) |
| 481 | "Call directory to get names matching PATTERN or all if nil. | 484 | "Use mail-directory facility to get user names matching PATTERN. |
| 482 | Calls `mail-directory-function' and applies `mail-directory-parser' to output." | 485 | If PATTERN is nil, get all the defined user names. |
| 486 | This function calls `mail-directory-function' to query the directory, | ||
| 487 | then uses `mail-directory-parser' to parse the output it returns." | ||
| 483 | (save-excursion | 488 | (save-excursion |
| 484 | (message "Querying directory...") | 489 | (message "Querying directory...") |
| 485 | (set-buffer (generate-new-buffer " *mail-directory*")) | 490 | (set-buffer (generate-new-buffer " *mail-directory*")) |
| @@ -509,8 +514,9 @@ Calls `mail-directory-function' and applies `mail-directory-parser' to output." | |||
| 509 | (defun mail-directory-process (pattern) | 514 | (defun mail-directory-process (pattern) |
| 510 | "Run a shell command to output names in directory. | 515 | "Run a shell command to output names in directory. |
| 511 | See `mail-directory-process'." | 516 | See `mail-directory-process'." |
| 512 | (apply 'call-process (eval (car mail-directory-process)) nil t nil | 517 | (when (consp mail-directory-process) |
| 513 | (mapcar 'eval (cdr mail-directory-process)))) | 518 | (apply 'call-process (eval (car mail-directory-process)) nil t nil |
| 519 | (mapcar 'eval (cdr mail-directory-process))))) | ||
| 514 | 520 | ||
| 515 | ;; This should handle a dialog. Currently expects port to spit out names. | 521 | ;; This should handle a dialog. Currently expects port to spit out names. |
| 516 | (defun mail-directory-stream (pattern) | 522 | (defun mail-directory-stream (pattern) |
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index 06282c430f0..371bb90b9cf 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; supercite.el --- minor mode for citing mail and news replies | 1 | ;;; supercite.el --- minor mode for citing mail and news replies |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1993, 1997, 2003, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993, 1997, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org> | 5 | ;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org> |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| @@ -243,7 +243,7 @@ See the variable `sc-cite-frame-alist' for details." | |||
| 243 | 243 | ||
| 244 | (defcustom sc-cite-region-limit t | 244 | (defcustom sc-cite-region-limit t |
| 245 | "*This variable controls automatic citation of yanked text. | 245 | "*This variable controls automatic citation of yanked text. |
| 246 | Legal values are: | 246 | Valid values are: |
| 247 | 247 | ||
| 248 | non-nil -- cite the entire region, regardless of its size | 248 | non-nil -- cite the entire region, regardless of its size |
| 249 | nil -- do not cite the region at all | 249 | nil -- do not cite the region at all |
| @@ -347,7 +347,7 @@ Non-nil uses nested citations, nil uses non-nested citations." | |||
| 347 | 347 | ||
| 348 | (defcustom sc-nuke-mail-headers 'all | 348 | (defcustom sc-nuke-mail-headers 'all |
| 349 | "*Controls mail header nuking. | 349 | "*Controls mail header nuking. |
| 350 | Used in conjunction with `sc-nuke-mail-header-list'. Legal values are: | 350 | Used in conjunction with `sc-nuke-mail-header-list'. Valid values are: |
| 351 | 351 | ||
| 352 | `all' -- nuke all mail headers | 352 | `all' -- nuke all mail headers |
| 353 | `none' -- don't nuke any mail headers | 353 | `none' -- don't nuke any mail headers |
| @@ -796,7 +796,7 @@ The number of lines left is specified by `sc-blank-lines-after-headers'." | |||
| 796 | nonentry-func '(sc-mail-nuke-header-line))) | 796 | nonentry-func '(sc-mail-nuke-header-line))) |
| 797 | ;; we never get far enough to interpret a frame if s-n-m-h == 'none | 797 | ;; we never get far enough to interpret a frame if s-n-m-h == 'none |
| 798 | ((eq sc-nuke-mail-headers 'none)) | 798 | ((eq sc-nuke-mail-headers 'none)) |
| 799 | (t (error "Illegal value for sc-nuke-mail-headers: %s" | 799 | (t (error "Invalid value for sc-nuke-mail-headers: %s" |
| 800 | sc-nuke-mail-headers)) | 800 | sc-nuke-mail-headers)) |
| 801 | ) ; end-cond | 801 | ) ; end-cond |
| 802 | (append | 802 | (append |
| @@ -838,7 +838,7 @@ error occurs." | |||
| 838 | "Return the mail header field value associated with FIELD. | 838 | "Return the mail header field value associated with FIELD. |
| 839 | If there was no mail header with FIELD as its key, return the value of | 839 | If there was no mail header with FIELD as its key, return the value of |
| 840 | `sc-mumble'. FIELD is case insensitive." | 840 | `sc-mumble'. FIELD is case insensitive." |
| 841 | (or (cdr (assoc (downcase field) sc-mail-info)) sc-mumble)) | 841 | (or (cdr (assoc-string field sc-mail-info 'case-fold)) sc-mumble)) |
| 842 | 842 | ||
| 843 | (defun sc-mail-field-query (arg) | 843 | (defun sc-mail-field-query (arg) |
| 844 | "View the value of a mail field. | 844 | "View the value of a mail field. |
| @@ -916,8 +916,8 @@ Match addresses of the style ``<name[stuff]>.''" | |||
| 916 | "Get the full email address path from FROM. | 916 | "Get the full email address path from FROM. |
| 917 | AUTHOR is the author's name (which is removed from the address)." | 917 | AUTHOR is the author's name (which is removed from the address)." |
| 918 | (let ((eos (length from))) | 918 | (let ((eos (length from))) |
| 919 | (if (string-match (concat "\\(^\\|^\"\\)" author | 919 | (if (string-match (concat "\\`\"?" (regexp-quote author) |
| 920 | "\\(\\s +\\|\"\\s +\\)") from 0) | 920 | "\"?\\s +") from 0) |
| 921 | (let ((address (substring from (match-end 0) eos))) | 921 | (let ((address (substring from (match-end 0) eos))) |
| 922 | (if (and (= (aref address 0) ?<) | 922 | (if (and (= (aref address 0) ?<) |
| 923 | (= (aref address (1- (length address))) ?>)) | 923 | (= (aref address (1- (length address))) ?>)) |
| @@ -2054,5 +2054,5 @@ more information. Info node `(SC)Top'." | |||
| 2054 | (provide 'supercite) | 2054 | (provide 'supercite) |
| 2055 | (run-hooks 'sc-load-hook) | 2055 | (run-hooks 'sc-load-hook) |
| 2056 | 2056 | ||
| 2057 | ;;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 | 2057 | ;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 |
| 2058 | ;;; supercite.el ends here | 2058 | ;;; supercite.el ends here |
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index d988cae1260..273d4739b4d 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el | |||
| @@ -136,7 +136,7 @@ A large number or nil slows down menu responsiveness." | |||
| 136 | '(menu-item "--")) | 136 | '(menu-item "--")) |
| 137 | 137 | ||
| 138 | (define-key menu-bar-file-menu [recover-session] | 138 | (define-key menu-bar-file-menu [recover-session] |
| 139 | '(menu-item "Recover Crashed Session..." recover-session | 139 | '(menu-item "Recover Crashed Session" recover-session |
| 140 | :enable (and auto-save-list-file-prefix | 140 | :enable (and auto-save-list-file-prefix |
| 141 | (file-directory-p | 141 | (file-directory-p |
| 142 | (file-name-directory auto-save-list-file-prefix)) | 142 | (file-name-directory auto-save-list-file-prefix)) |
| @@ -298,7 +298,7 @@ A large number or nil slows down menu responsiveness." | |||
| 298 | '(menu-item "Continue Tags Search" tags-loop-continue | 298 | '(menu-item "Continue Tags Search" tags-loop-continue |
| 299 | :help "Continue last tags search operation")) | 299 | :help "Continue last tags search operation")) |
| 300 | (define-key menu-bar-search-menu [tags-srch] | 300 | (define-key menu-bar-search-menu [tags-srch] |
| 301 | '(menu-item "Search tagged files" tags-search | 301 | '(menu-item "Search tagged files..." tags-search |
| 302 | :help "Search for a regexp in all tagged files")) | 302 | :help "Search for a regexp in all tagged files")) |
| 303 | (define-key menu-bar-search-menu [separator-tag-search] | 303 | (define-key menu-bar-search-menu [separator-tag-search] |
| 304 | '(menu-item "--")) | 304 | '(menu-item "--")) |
| @@ -342,7 +342,7 @@ A large number or nil slows down menu responsiveness." | |||
| 342 | '(menu-item "Continue Replace" tags-loop-continue | 342 | '(menu-item "Continue Replace" tags-loop-continue |
| 343 | :help "Continue last tags replace operation")) | 343 | :help "Continue last tags replace operation")) |
| 344 | (define-key menu-bar-replace-menu [tags-repl] | 344 | (define-key menu-bar-replace-menu [tags-repl] |
| 345 | '(menu-item "Replace in tagged files" tags-query-replace | 345 | '(menu-item "Replace in tagged files..." tags-query-replace |
| 346 | :help "Interactively replace a regexp in all tagged files")) | 346 | :help "Interactively replace a regexp in all tagged files")) |
| 347 | (define-key menu-bar-replace-menu [separator-replace-tags] | 347 | (define-key menu-bar-replace-menu [separator-replace-tags] |
| 348 | '(menu-item "--")) | 348 | '(menu-item "--")) |
| @@ -377,14 +377,14 @@ A large number or nil slows down menu responsiveness." | |||
| 377 | (defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) | 377 | (defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) |
| 378 | 378 | ||
| 379 | (define-key menu-bar-goto-menu [set-tags-name] | 379 | (define-key menu-bar-goto-menu [set-tags-name] |
| 380 | '(menu-item "Set Tags File Name" visit-tags-table | 380 | '(menu-item "Set Tags File Name..." visit-tags-table |
| 381 | :help "Tell Tags commands which tag table file to use")) | 381 | :help "Tell Tags commands which tag table file to use")) |
| 382 | 382 | ||
| 383 | (define-key menu-bar-goto-menu [separator-tag-file] | 383 | (define-key menu-bar-goto-menu [separator-tag-file] |
| 384 | '(menu-item "--")) | 384 | '(menu-item "--")) |
| 385 | 385 | ||
| 386 | (define-key menu-bar-goto-menu [apropos-tags] | 386 | (define-key menu-bar-goto-menu [apropos-tags] |
| 387 | '(menu-item "Tags Apropos" tags-apropos | 387 | '(menu-item "Tags Apropos..." tags-apropos |
| 388 | :help "Find function/variables whose names match regexp")) | 388 | :help "Find function/variables whose names match regexp")) |
| 389 | (define-key menu-bar-goto-menu [next-tag-otherw] | 389 | (define-key menu-bar-goto-menu [next-tag-otherw] |
| 390 | '(menu-item "Next Tag in Other Window" | 390 | '(menu-item "Next Tag in Other Window" |
| @@ -673,7 +673,7 @@ by \"Save Options\" in Custom buffers.") | |||
| 673 | '("--")) | 673 | '("--")) |
| 674 | 674 | ||
| 675 | (define-key menu-bar-options-menu [mouse-set-font] | 675 | (define-key menu-bar-options-menu [mouse-set-font] |
| 676 | '(menu-item "Set Font/Fontset" mouse-set-font | 676 | '(menu-item "Set Font/Fontset..." mouse-set-font |
| 677 | :visible (display-multi-font-p) | 677 | :visible (display-multi-font-p) |
| 678 | :help "Select a font from list of known fonts/fontsets")) | 678 | :help "Select a font from list of known fonts/fontsets")) |
| 679 | 679 | ||
| @@ -1332,10 +1332,10 @@ key (or menu-item)")) | |||
| 1332 | (define-key menu-bar-manuals-menu [sep3] | 1332 | (define-key menu-bar-manuals-menu [sep3] |
| 1333 | '("--")) | 1333 | '("--")) |
| 1334 | (define-key menu-bar-manuals-menu [command] | 1334 | (define-key menu-bar-manuals-menu [command] |
| 1335 | '(menu-item "Find Command in Manual" Info-goto-emacs-command-node | 1335 | '(menu-item "Find Command in Manual..." Info-goto-emacs-command-node |
| 1336 | :help "Display manual section that describes a command")) | 1336 | :help "Display manual section that describes a command")) |
| 1337 | (define-key menu-bar-manuals-menu [key] | 1337 | (define-key menu-bar-manuals-menu [key] |
| 1338 | '(menu-item "Find Key in Manual" Info-goto-emacs-key-command-node | 1338 | '(menu-item "Find Key in Manual..." Info-goto-emacs-key-command-node |
| 1339 | :help "Display manual section that describes a key")) | 1339 | :help "Display manual section that describes a key")) |
| 1340 | 1340 | ||
| 1341 | (define-key menu-bar-help-menu [eliza] | 1341 | (define-key menu-bar-help-menu [eliza] |
| @@ -1369,7 +1369,7 @@ key (or menu-item)")) | |||
| 1369 | (define-key menu-bar-help-menu [sep2] | 1369 | (define-key menu-bar-help-menu [sep2] |
| 1370 | '("--")) | 1370 | '("--")) |
| 1371 | (define-key menu-bar-help-menu [finder-by-keyword] | 1371 | (define-key menu-bar-help-menu [finder-by-keyword] |
| 1372 | '(menu-item "Find Emacs Packages..." finder-by-keyword | 1372 | '(menu-item "Find Emacs Packages" finder-by-keyword |
| 1373 | :help "Find packages and features by keyword")) | 1373 | :help "Find packages and features by keyword")) |
| 1374 | (define-key menu-bar-help-menu [manuals] | 1374 | (define-key menu-bar-help-menu [manuals] |
| 1375 | (list 'menu-item "More Manuals" menu-bar-manuals-menu | 1375 | (list 'menu-item "More Manuals" menu-bar-manuals-menu |
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog index e48186d8b3b..b6bcb3938b0 100644 --- a/lisp/mh-e/ChangeLog +++ b/lisp/mh-e/ChangeLog | |||
| @@ -1,3 +1,11 @@ | |||
| 1 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 2 | |||
| 3 | * mh-e.el, mh-identity.el, mh-mime.el: Replace `legal' with `valid'. | ||
| 4 | |||
| 5 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 6 | |||
| 7 | * mh-e.el: Replace `illegal' with `invalid'. | ||
| 8 | |||
| 1 | 2004-09-07 Stefan <monnier@iro.umontreal.ca> | 9 | 2004-09-07 Stefan <monnier@iro.umontreal.ca> |
| 2 | 10 | ||
| 3 | * mh-inc.el (mh-inc-spool-list): Correctly declare the external var. | 11 | * mh-inc.el (mh-inc-spool-list): Correctly declare the external var. |
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el index 2081d49b6cd..c2322624507 100644 --- a/lisp/mh-e/mh-e.el +++ b/lisp/mh-e/mh-e.el | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | ;;; mh-e.el --- GNU Emacs interface to the MH mail system | 1 | ;;; mh-e.el --- GNU Emacs interface to the MH mail system |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93, 94, 95, 97, 1999, | 3 | ;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93, 94, 95, 97, 1999, |
| 4 | ;; 2000, 01, 02, 03, 2004 Free Software Foundation, Inc. | 4 | ;; 2000, 01, 02, 03, 2004, 2005 Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Bill Wohler <wohler@newt.com> | 6 | ;; Author: Bill Wohler <wohler@newt.com> |
| 7 | ;; Maintainer: Bill Wohler <wohler@newt.com> | 7 | ;; Maintainer: Bill Wohler <wohler@newt.com> |
| @@ -1526,7 +1526,7 @@ Many commands that operate on individual messages, such as `mh-forward' or | |||
| 1526 | ways. | 1526 | ways. |
| 1527 | 1527 | ||
| 1528 | If you provide the prefix argument (\\[universal-argument]) to these commands, | 1528 | If you provide the prefix argument (\\[universal-argument]) to these commands, |
| 1529 | then you will be prompted for the message range. This can be any legal MH | 1529 | then you will be prompted for the message range. This can be any valid MH |
| 1530 | range which can include messages, sequences, and the abbreviations (described | 1530 | range which can include messages, sequences, and the abbreviations (described |
| 1531 | in the mh(1) man page): | 1531 | in the mh(1) man page): |
| 1532 | 1532 | ||
| @@ -2146,7 +2146,7 @@ to avoid exceeding system command line argument limits." | |||
| 2146 | (defun mh-greaterp (msg1 msg2) | 2146 | (defun mh-greaterp (msg1 msg2) |
| 2147 | "Return the greater of two message indicators MSG1 and MSG2. | 2147 | "Return the greater of two message indicators MSG1 and MSG2. |
| 2148 | Strings are \"smaller\" than numbers. | 2148 | Strings are \"smaller\" than numbers. |
| 2149 | Legal values are things like \"cur\", \"last\", 1, and 1820." | 2149 | Valid values are things like \"cur\", \"last\", 1, and 1820." |
| 2150 | (if (numberp msg1) | 2150 | (if (numberp msg1) |
| 2151 | (if (numberp msg2) | 2151 | (if (numberp msg2) |
| 2152 | (> msg1 msg2) | 2152 | (> msg1 msg2) |
| @@ -2158,7 +2158,7 @@ Legal values are things like \"cur\", \"last\", 1, and 1820." | |||
| 2158 | (defun mh-lessp (msg1 msg2) | 2158 | (defun mh-lessp (msg1 msg2) |
| 2159 | "Return the lesser of two message indicators MSG1 and MSG2. | 2159 | "Return the lesser of two message indicators MSG1 and MSG2. |
| 2160 | Strings are \"smaller\" than numbers. | 2160 | Strings are \"smaller\" than numbers. |
| 2161 | Legal values are things like \"cur\", \"last\", 1, and 1820." | 2161 | Valid values are things like \"cur\", \"last\", 1, and 1820." |
| 2162 | (not (mh-greaterp msg1 msg2))) | 2162 | (not (mh-greaterp msg1 msg2))) |
| 2163 | 2163 | ||
| 2164 | 2164 | ||
| @@ -2306,7 +2306,7 @@ If INTERNAL-FLAG is non-nil, then do not inform MH of the change." | |||
| 2306 | (defun mh-define-sequence (seq msgs) | 2306 | (defun mh-define-sequence (seq msgs) |
| 2307 | "Define the SEQ to contain the list of MSGS. | 2307 | "Define the SEQ to contain the list of MSGS. |
| 2308 | Do not mark pseudo-sequences or empty sequences. | 2308 | Do not mark pseudo-sequences or empty sequences. |
| 2309 | Signals an error if SEQ is an illegal name." | 2309 | Signals an error if SEQ is an invalid name." |
| 2310 | (if (and msgs | 2310 | (if (and msgs |
| 2311 | (mh-valid-seq-p seq) | 2311 | (mh-valid-seq-p seq) |
| 2312 | (not (mh-folder-name-p seq))) | 2312 | (not (mh-folder-name-p seq))) |
diff --git a/lisp/mh-e/mh-identity.el b/lisp/mh-e/mh-identity.el index be385ad09e6..4bb5f90cf18 100644 --- a/lisp/mh-e/mh-identity.el +++ b/lisp/mh-e/mh-identity.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; mh-identity.el --- Multiple identify support for MH-E. | 1 | ;;; mh-identity.el --- Multiple identify support for MH-E. |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Peter S. Galbraith <psg@debian.org> | 5 | ;; Author: Peter S. Galbraith <psg@debian.org> |
| 6 | ;; Maintainer: Bill Wohler <wohler@newt.com> | 6 | ;; Maintainer: Bill Wohler <wohler@newt.com> |
| @@ -122,7 +122,7 @@ Return t if anything is deleted." | |||
| 122 | "Return the handler for a FIELD or nil if none set. | 122 | "Return the handler for a FIELD or nil if none set. |
| 123 | The field name is downcased. If the FIELD begins with the character | 123 | The field name is downcased. If the FIELD begins with the character |
| 124 | `:', then it must have a special handler defined in | 124 | `:', then it must have a special handler defined in |
| 125 | `mh-identity-handlers', else return an error since it is not a legal | 125 | `mh-identity-handlers', else return an error since it is not a valid |
| 126 | message header." | 126 | message header." |
| 127 | (or (cdr (assoc (downcase field) mh-identity-handlers)) | 127 | (or (cdr (assoc (downcase field) mh-identity-handlers)) |
| 128 | (and (eq (aref field 0) ?:) | 128 | (and (eq (aref field 0) ?:) |
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el index 72cb654dedd..bc870134779 100644 --- a/lisp/mh-e/mh-mime.el +++ b/lisp/mh-e/mh-mime.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; mh-mime.el --- MH-E support for composing MIME messages | 1 | ;;; mh-mime.el --- MH-E support for composing MIME messages |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1993, 1995, 2001, 02, 03, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993, 1995, 2001, 02, 03, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: Bill Wohler <wohler@newt.com> | 6 | ;; Author: Bill Wohler <wohler@newt.com> |
| 6 | ;; Maintainer: Bill Wohler <wohler@newt.com> | 7 | ;; Maintainer: Bill Wohler <wohler@newt.com> |
| @@ -197,7 +198,7 @@ Returns nil if file command not on system." | |||
| 197 | ("text/richtext") ("text/x-vcard") ("text/xml") | 198 | ("text/richtext") ("text/x-vcard") ("text/xml") |
| 198 | 199 | ||
| 199 | ("video/mpeg") ("video/quicktime")) | 200 | ("video/mpeg") ("video/quicktime")) |
| 200 | "Legal MIME content types. | 201 | "Valid MIME content types. |
| 201 | See documentation for \\[mh-edit-mhn].") | 202 | See documentation for \\[mh-edit-mhn].") |
| 202 | 203 | ||
| 203 | ;; RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: | 204 | ;; RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: |
| @@ -224,7 +225,7 @@ See documentation for \\[mh-edit-mhn].") | |||
| 224 | ("tftp") ; RFC2046 Trivial File Transfer Protocol | 225 | ("tftp") ; RFC2046 Trivial File Transfer Protocol |
| 225 | ("url") ; RFC2017 URL scheme MIME access-type Protocol | 226 | ("url") ; RFC2017 URL scheme MIME access-type Protocol |
| 226 | ("wais")) ; RFC1738 Wide Area Information Servers | 227 | ("wais")) ; RFC1738 Wide Area Information Servers |
| 227 | "Legal MIME access-type values.") | 228 | "Valid MIME access-type values.") |
| 228 | 229 | ||
| 229 | ;;;###mh-autoload | 230 | ;;;###mh-autoload |
| 230 | (defun mh-mhn-compose-insertion (filename type description attributes) | 231 | (defun mh-mhn-compose-insertion (filename type description attributes) |
diff --git a/lisp/midnight.el b/lisp/midnight.el index 37bdf065f51..a81ce37856a 100644 --- a/lisp/midnight.el +++ b/lisp/midnight.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; midnight.el --- run something every midnight, e.g., kill old buffers | 1 | ;;; midnight.el --- run something every midnight, e.g., kill old buffers |
| 2 | 2 | ||
| 3 | ;;; Copyright (C) 1998, 2004 Free Software Foundation, Inc. | 3 | ;;; Copyright (C) 1998, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Sam Steingold <sds@usa.net> | 5 | ;; Author: Sam Steingold <sds@usa.net> |
| 6 | ;; Maintainer: Sam Steingold <sds@usa.net> | 6 | ;; Maintainer: Sam Steingold <sds@usa.net> |
| @@ -215,7 +215,7 @@ the time when it is run.") | |||
| 215 | Sets the first argument SYMB (which must be symbol `midnight-delay') | 215 | Sets the first argument SYMB (which must be symbol `midnight-delay') |
| 216 | to its second argument TM." | 216 | to its second argument TM." |
| 217 | (assert (eq symb 'midnight-delay) t | 217 | (assert (eq symb 'midnight-delay) t |
| 218 | "Illegal argument to `midnight-delay-set': `%s'") | 218 | "Invalid argument to `midnight-delay-set': `%s'") |
| 219 | (set symb tm) | 219 | (set symb tm) |
| 220 | (when (timerp midnight-timer) (cancel-timer midnight-timer)) | 220 | (when (timerp midnight-timer) (cancel-timer midnight-timer)) |
| 221 | (setq midnight-timer | 221 | (setq midnight-timer |
diff --git a/lisp/international/iso-acc.el b/lisp/obsolete/iso-acc.el index 6c94f4aa562..740fa942c13 100644 --- a/lisp/international/iso-acc.el +++ b/lisp/obsolete/iso-acc.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; iso-acc.el --- minor mode providing electric accent keys | 1 | ;;; iso-acc.el --- minor mode providing electric accent keys |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1993, 1994, 1996, 2001 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993, 1994, 1996, 2001, 2002, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: Johan Vromans | 6 | ;; Author: Johan Vromans |
| 6 | ;; Maintainer: FSF | 7 | ;; Maintainer: FSF |
| @@ -487,5 +488,5 @@ Noninteractively, this operates on text from START to END." | |||
| 487 | 488 | ||
| 488 | (add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup) | 489 | (add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup) |
| 489 | 490 | ||
| 490 | ;;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 | 491 | ;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 |
| 491 | ;;; iso-acc.el ends here | 492 | ;;; iso-acc.el ends here |
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 457177d7c4c..bafc901d3d1 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el | |||
| @@ -1613,6 +1613,8 @@ and overlay is highlighted between MK and END-MK." | |||
| 1613 | (compilation-set-window-height w) | 1613 | (compilation-set-window-height w) |
| 1614 | 1614 | ||
| 1615 | (when highlight-regexp | 1615 | (when highlight-regexp |
| 1616 | (if (timerp next-error-highlight-timer) | ||
| 1617 | (cancel-timer next-error-highlight-timer)) | ||
| 1616 | (unless compilation-highlight-overlay | 1618 | (unless compilation-highlight-overlay |
| 1617 | (setq compilation-highlight-overlay | 1619 | (setq compilation-highlight-overlay |
| 1618 | (make-overlay (point-min) (point-min))) | 1620 | (make-overlay (point-min) (point-min))) |
| @@ -1632,8 +1634,11 @@ and overlay is highlighted between MK and END-MK." | |||
| 1632 | (move-overlay compilation-highlight-overlay | 1634 | (move-overlay compilation-highlight-overlay |
| 1633 | (point) end (current-buffer))) | 1635 | (point) end (current-buffer))) |
| 1634 | (if (numberp next-error-highlight) | 1636 | (if (numberp next-error-highlight) |
| 1635 | (sit-for next-error-highlight)) | 1637 | (setq next-error-highlight-timer |
| 1636 | (if (not (eq next-error-highlight t)) | 1638 | (run-at-time next-error-highlight nil 'delete-overlay |
| 1639 | compilation-highlight-overlay))) | ||
| 1640 | (if (not (or (eq next-error-highlight t) | ||
| 1641 | (numberp next-error-highlight))) | ||
| 1637 | (delete-overlay compilation-highlight-overlay)))))) | 1642 | (delete-overlay compilation-highlight-overlay)))))) |
| 1638 | (when (and (eq next-error-highlight 'fringe-arrow)) | 1643 | (when (and (eq next-error-highlight 'fringe-arrow)) |
| 1639 | (set (make-local-variable 'overlay-arrow-position) | 1644 | (set (make-local-variable 'overlay-arrow-position) |
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 64f039f54f9..700fa1c9efe 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; cperl-mode.el --- Perl code editing commands for Emacs | 1 | ;;; cperl-mode.el --- Perl code editing commands for Emacs |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1985,86,87,91,92,93,94,95,96,97,98,99,2000,03,2004 | 3 | ;; Copyright (C) 1985,86,87,91,92,93,94,95,96,97,98,99,2000,03,2004,2005 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Ilya Zakharevich and Bob Olson | 6 | ;; Author: Ilya Zakharevich and Bob Olson |
| @@ -713,7 +713,7 @@ should work if the balance of delimiters is not broken by POD). | |||
| 713 | 713 | ||
| 714 | The main trick (to make $ a \"backslash\") makes constructions like | 714 | The main trick (to make $ a \"backslash\") makes constructions like |
| 715 | ${aaa} look like unbalanced braces. The only trick I can think of is | 715 | ${aaa} look like unbalanced braces. The only trick I can think of is |
| 716 | to insert it as $ {aaa} (legal in perl5, not in perl4). | 716 | to insert it as $ {aaa} (valid in perl5, not in perl4). |
| 717 | 717 | ||
| 718 | Similar problems arise in regexps, when /(\\s|$)/ should be rewritten | 718 | Similar problems arise in regexps, when /(\\s|$)/ should be rewritten |
| 719 | as /($|\\s)/. Note that such a transposition is not always possible. | 719 | as /($|\\s)/. Note that such a transposition is not always possible. |
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el index 35771a10f32..5bb0dd03913 100644 --- a/lisp/progmodes/ebnf-abn.el +++ b/lisp/progmodes/ebnf-abn.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf-abn.el --- parser for ABNF (Augmented BNF) | 1 | ;;; ebnf-abn.el --- parser for ABNF (Augmented BNF) |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2004 Free Sofware Foundation, Inc. | 3 | ;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -518,7 +518,7 @@ See documentation for variable `ebnf-abn-lex'." | |||
| 518 | 'end-of-input) | 518 | 'end-of-input) |
| 519 | ;; error | 519 | ;; error |
| 520 | ((eq token 'error) | 520 | ((eq token 'error) |
| 521 | (error "Illegal character")) | 521 | (error "Invalid character")) |
| 522 | ;; end of rule | 522 | ;; end of rule |
| 523 | ((eq token 'end-of-rule) | 523 | ((eq token 'end-of-rule) |
| 524 | 'end-of-rule) | 524 | 'end-of-rule) |
| @@ -600,7 +600,7 @@ See documentation for variable `ebnf-abn-lex'." | |||
| 600 | ((= (following-char) ?\n) | 600 | ((= (following-char) ?\n) |
| 601 | t) | 601 | t) |
| 602 | (t | 602 | (t |
| 603 | (error "Illegal character")) | 603 | (error "Invalid character")) |
| 604 | )) | 604 | )) |
| 605 | 605 | ||
| 606 | 606 | ||
diff --git a/lisp/progmodes/ebnf-bnf.el b/lisp/progmodes/ebnf-bnf.el index d32ad5a77c9..09db8f8865d 100644 --- a/lisp/progmodes/ebnf-bnf.el +++ b/lisp/progmodes/ebnf-bnf.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf-bnf.el --- parser for EBNF | 1 | ;;; ebnf-bnf.el --- parser for EBNF |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 | 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 |
| 4 | ;; Free Sofware Foundation, Inc. | 4 | ;; Free Sofware Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -461,7 +461,7 @@ See documentation for variable `ebnf-bnf-lex'." | |||
| 461 | 'end-of-input) | 461 | 'end-of-input) |
| 462 | ;; error | 462 | ;; error |
| 463 | ((eq token 'error) | 463 | ((eq token 'error) |
| 464 | (error "Illegal character")) | 464 | (error "Invalid character")) |
| 465 | ;; default | 465 | ;; default |
| 466 | ((eq token 'default) | 466 | ((eq token 'default) |
| 467 | (forward-char) | 467 | (forward-char) |
| @@ -470,7 +470,7 @@ See documentation for variable `ebnf-bnf-lex'." | |||
| 470 | (prog1 | 470 | (prog1 |
| 471 | (ebnf-bnf-lex) | 471 | (ebnf-bnf-lex) |
| 472 | (setq ebnf-default-p t)) | 472 | (setq ebnf-default-p t)) |
| 473 | (error "Illegal `default' element"))) | 473 | (error "Invalid `default' element"))) |
| 474 | ;; integer | 474 | ;; integer |
| 475 | ((eq token 'integer) | 475 | ((eq token 'integer) |
| 476 | (setq ebnf-bnf-lex (ebnf-buffer-substring "0-9")) | 476 | (setq ebnf-bnf-lex (ebnf-buffer-substring "0-9")) |
| @@ -550,7 +550,7 @@ See documentation for variable `ebnf-bnf-lex'." | |||
| 550 | (forward-char) | 550 | (forward-char) |
| 551 | t) | 551 | t) |
| 552 | (t | 552 | (t |
| 553 | (error "Illegal character")) | 553 | (error "Invalid character")) |
| 554 | )) | 554 | )) |
| 555 | 555 | ||
| 556 | 556 | ||
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el index 9a99f222cc8..621cf424463 100644 --- a/lisp/progmodes/ebnf-dtd.el +++ b/lisp/progmodes/ebnf-dtd.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML) | 1 | ;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML) |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2004 Free Sofware Foundation, Inc. | 3 | ;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -1181,7 +1181,7 @@ See documentation for variable `ebnf-dtd-lex'." | |||
| 1181 | 'end-of-input) | 1181 | 'end-of-input) |
| 1182 | ;; error | 1182 | ;; error |
| 1183 | ((eq token 'error) | 1183 | ((eq token 'error) |
| 1184 | (error "Illegal character")) | 1184 | (error "Invalid character")) |
| 1185 | ;; beginning of declaration: | 1185 | ;; beginning of declaration: |
| 1186 | ;; <?name, <!ATTLIST, <!DOCTYPE, <!ELEMENT, <!ENTITY, <!NOTATION | 1186 | ;; <?name, <!ATTLIST, <!DOCTYPE, <!ELEMENT, <!ENTITY, <!NOTATION |
| 1187 | ((eq token 'less-than) | 1187 | ((eq token 'less-than) |
| @@ -1322,7 +1322,7 @@ See documentation for variable `ebnf-dtd-lex'." | |||
| 1322 | (forward-char 3) | 1322 | (forward-char 3) |
| 1323 | t) | 1323 | t) |
| 1324 | (t | 1324 | (t |
| 1325 | (error "Illegal character")) | 1325 | (error "Invalid character")) |
| 1326 | )) | 1326 | )) |
| 1327 | 1327 | ||
| 1328 | 1328 | ||
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el index d7dfa7af89f..45ccb956af8 100644 --- a/lisp/progmodes/ebnf-ebx.el +++ b/lisp/progmodes/ebnf-ebx.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX) | 1 | ;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX) |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2004 Free Sofware Foundation, Inc. | 3 | ;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -453,7 +453,7 @@ See documentation for variable `ebnf-ebx-lex'." | |||
| 453 | 'end-of-input) | 453 | 'end-of-input) |
| 454 | ;; error | 454 | ;; error |
| 455 | ((eq token 'error) | 455 | ((eq token 'error) |
| 456 | (error "Illegal character")) | 456 | (error "Invalid character")) |
| 457 | ;; end of rule | 457 | ;; end of rule |
| 458 | ((eq token 'end-of-rule) | 458 | ((eq token 'end-of-rule) |
| 459 | 'end-of-rule) | 459 | 'end-of-rule) |
diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el index f36065bd558..ba28dfb5af9 100644 --- a/lisp/progmodes/ebnf-iso.el +++ b/lisp/progmodes/ebnf-iso.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf-iso.el --- parser for ISO EBNF | 1 | ;;; ebnf-iso.el --- parser for ISO EBNF |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 | 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -112,7 +112,7 @@ | |||
| 112 | ;; | 112 | ;; |
| 113 | ;; ISO EBNF accepts the characters given by <character> production above, | 113 | ;; ISO EBNF accepts the characters given by <character> production above, |
| 114 | ;; HORIZONTAL TAB (^I), VERTICAL TAB (^K), NEWLINE (^J or ^M) and FORM FEED | 114 | ;; HORIZONTAL TAB (^I), VERTICAL TAB (^K), NEWLINE (^J or ^M) and FORM FEED |
| 115 | ;; (^L), any other characters are illegal. But ebnf2ps accepts also the | 115 | ;; (^L), any other characters are invalid. But ebnf2ps accepts also the |
| 116 | ;; european 8-bit accentuated characters (from \240 to \377) and underscore | 116 | ;; european 8-bit accentuated characters (from \240 to \377) and underscore |
| 117 | ;; (_). | 117 | ;; (_). |
| 118 | ;; | 118 | ;; |
| @@ -427,7 +427,7 @@ See documentation for variable `ebnf-iso-lex'." | |||
| 427 | 'end-of-input) | 427 | 'end-of-input) |
| 428 | ;; error | 428 | ;; error |
| 429 | ((eq token 'error) | 429 | ((eq token 'error) |
| 430 | (error "Illegal character")) | 430 | (error "Invalid character")) |
| 431 | ;; integer | 431 | ;; integer |
| 432 | ((eq token 'integer) | 432 | ((eq token 'integer) |
| 433 | (setq ebnf-iso-lex (ebnf-buffer-substring "0-9")) | 433 | (setq ebnf-iso-lex (ebnf-buffer-substring "0-9")) |
| @@ -527,7 +527,7 @@ See documentation for variable `ebnf-iso-lex'." | |||
| 527 | (forward-char) | 527 | (forward-char) |
| 528 | (setq pair (1+ pair)))) | 528 | (setq pair (1+ pair)))) |
| 529 | (t | 529 | (t |
| 530 | (error "Illegal character")) | 530 | (error "Invalid character")) |
| 531 | )))) | 531 | )))) |
| 532 | 532 | ||
| 533 | 533 | ||
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el index c7bf0e31541..58f422b1714 100644 --- a/lisp/progmodes/ebnf-yac.el +++ b/lisp/progmodes/ebnf-yac.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf-yac.el --- parser for Yacc/Bison | 1 | ;;; ebnf-yac.el --- parser for Yacc/Bison |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 | 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 |
| 4 | ;; Free Sofware Foundation, Inc. | 4 | ;; Free Sofware Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -346,7 +346,7 @@ See documentation for variable `ebnf-yac-lex'." | |||
| 346 | 'end-of-input) | 346 | 'end-of-input) |
| 347 | ;; error | 347 | ;; error |
| 348 | ((eq token 'error) | 348 | ((eq token 'error) |
| 349 | (error "Illegal character")) | 349 | (error "Invalid character")) |
| 350 | ;; "string" | 350 | ;; "string" |
| 351 | ((eq token 'string) | 351 | ((eq token 'string) |
| 352 | (setq ebnf-yac-lex (ebnf-get-string)) | 352 | (setq ebnf-yac-lex (ebnf-get-string)) |
| @@ -425,7 +425,7 @@ See documentation for variable `ebnf-yac-lex'." | |||
| 425 | ((= (following-char) ?\') | 425 | ((= (following-char) ?\') |
| 426 | (ebnf-string " -&(-~" ?\' "character")) | 426 | (ebnf-string " -&(-~" ?\' "character")) |
| 427 | (t | 427 | (t |
| 428 | (error "Illegal character")) | 428 | (error "Invalid character")) |
| 429 | ))) | 429 | ))) |
| 430 | (ebnf-yac-skip-spaces)) | 430 | (ebnf-yac-skip-spaces)) |
| 431 | 431 | ||
| @@ -476,7 +476,7 @@ See documentation for variable `ebnf-yac-lex'." | |||
| 476 | (forward-char) | 476 | (forward-char) |
| 477 | (setq not-end nil))) | 477 | (setq not-end nil))) |
| 478 | (t | 478 | (t |
| 479 | (error "Illegal character")) | 479 | (error "Invalid character")) |
| 480 | )))) | 480 | )))) |
| 481 | 481 | ||
| 482 | 482 | ||
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el index 1d2f8d630e1..1a680ffa077 100644 --- a/lisp/progmodes/ebnf2ps.el +++ b/lisp/progmodes/ebnf2ps.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript | 1 | ;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 | 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| @@ -5499,7 +5499,7 @@ killed after process termination." | |||
| 5499 | ;;(skip-chars-forward (concat chars "\240-\377") ebnf-limit) | 5499 | ;;(skip-chars-forward (concat chars "\240-\377") ebnf-limit) |
| 5500 | (skip-chars-forward (concat chars ebnf-8-bit-chars) ebnf-limit) | 5500 | (skip-chars-forward (concat chars ebnf-8-bit-chars) ebnf-limit) |
| 5501 | (if (or (eobp) (/= (following-char) eos-char)) | 5501 | (if (or (eobp) (/= (following-char) eos-char)) |
| 5502 | (error "Illegal %s: missing `%c'" kind eos-char) | 5502 | (error "Invalid %s: missing `%c'" kind eos-char) |
| 5503 | (forward-char) | 5503 | (forward-char) |
| 5504 | (1- (point)))))) | 5504 | (1- (point)))))) |
| 5505 | 5505 | ||
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index fdb7fffac6c..4c8b847b7cd 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el | |||
| @@ -597,41 +597,32 @@ characters long.") | |||
| 597 | 597 | ||
| 598 | ;; Hideshow support. | 598 | ;; Hideshow support. |
| 599 | (defconst f90-end-block-re | 599 | (defconst f90-end-block-re |
| 600 | (concat "^[ \t0-9]*\\<end\\>[ \t]*" | 600 | (concat "^[ \t0-9]*\\<end[ \t]*" |
| 601 | (regexp-opt '("do" "if" "forall" "function" "interface" | 601 | (regexp-opt '("do" "if" "forall" "function" "interface" |
| 602 | "module" "program" "select" "subroutine" | 602 | "module" "program" "select" "subroutine" |
| 603 | "type" "where" ) t) | 603 | "type" "where" ) t) |
| 604 | "[ \t]*\\sw*") | 604 | "[ \t]*\\sw*") |
| 605 | "Regexp matching the end of a \"block\" of F90 code. | 605 | "Regexp matching the end of an F90 \"block\", from the line start. |
| 606 | Used in the F90 entry in `hs-special-modes-alist'.") | 606 | Used in the F90 entry in `hs-special-modes-alist'.") |
| 607 | 607 | ||
| 608 | ;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a | 608 | ;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a |
| 609 | ;; following "(". DO, CASE, IF can have labels; IF must be | 609 | ;; following "(". DO, CASE, IF can have labels. |
| 610 | ;; accompanied by THEN. | ||
| 611 | ;; A big problem is that many of these statements can be broken over | ||
| 612 | ;; lines, even with embedded comments. We only try to handle this for | ||
| 613 | ;; IF ... THEN statements, assuming and hoping it will be less common | ||
| 614 | ;; for other constructs. We match up to one new-line, provided ") | ||
| 615 | ;; THEN" appears on one line. Matching on just ") THEN" is no good, | ||
| 616 | ;; since that includes ELSE branches. | ||
| 617 | ;; For a fully accurate solution, hideshow would probably have to be | ||
| 618 | ;; modified to allow functions as well as regexps to be used to | ||
| 619 | ;; specify block start and end positions. | ||
| 620 | (defconst f90-start-block-re | 610 | (defconst f90-start-block-re |
| 621 | (concat | 611 | (concat |
| 622 | "^[ \t0-9]*" ; statement number | 612 | "^[ \t0-9]*" ; statement number |
| 623 | "\\(\\(" | 613 | "\\(\\(" |
| 624 | "\\(\\sw+[ \t]*:[ \t]*\\)?" ; structure label | 614 | "\\(\\sw+[ \t]*:[ \t]*\\)?" ; structure label |
| 625 | "\\(do\\|select[ \t]*case\\|if[ \t]*(.*\n?.*)[ \t]*then\\|" | 615 | "\\(do\\|select[ \t]*case\\|" |
| 616 | ;; See comments in fortran-start-block-re for the problems of IF. | ||
| 617 | "if[ \t]*(\\(.*\\|" | ||
| 618 | ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|" | ||
| 626 | ;; Distinguish WHERE block from isolated WHERE. | 619 | ;; Distinguish WHERE block from isolated WHERE. |
| 627 | "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)" | 620 | "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)" |
| 628 | "\\|" | 621 | "\\|" |
| 629 | "program\\|interface\\|module\\|type\\|function\\|subroutine" | 622 | "program\\|interface\\|module\\|type\\|function\\|subroutine" |
| 630 | ;; ") THEN" at line end. Problem - also does ELSE. | ||
| 631 | ;;; "\\|.*)[ \t]*then[ \t]*\\($\\|!\\)" | ||
| 632 | "\\)" | 623 | "\\)" |
| 633 | "[ \t]*") | 624 | "[ \t]*") |
| 634 | "Regexp matching the start of a \"block\" of F90 code. | 625 | "Regexp matching the start of an F90 \"block\", from the line start. |
| 635 | A simple regexp cannot do this in fully correct fashion, so this | 626 | A simple regexp cannot do this in fully correct fashion, so this |
| 636 | tries to strike a compromise between complexity and flexibility. | 627 | tries to strike a compromise between complexity and flexibility. |
| 637 | Used in the F90 entry in `hs-special-modes-alist'.") | 628 | Used in the F90 entry in `hs-special-modes-alist'.") |
| @@ -1305,12 +1296,12 @@ Checks for consistency of block types and labels (if present). | |||
| 1305 | Does not check the outermost block, because it may be incomplete. | 1296 | Does not check the outermost block, because it may be incomplete. |
| 1306 | Interactively, pushes mark before moving point." | 1297 | Interactively, pushes mark before moving point." |
| 1307 | (interactive "p") | 1298 | (interactive "p") |
| 1299 | (if (interactive-p) (push-mark (point) t)) | ||
| 1308 | (and num (< num 0) (f90-end-of-block (- num))) | 1300 | (and num (< num 0) (f90-end-of-block (- num))) |
| 1309 | (let ((case-fold-search t) | 1301 | (let ((case-fold-search t) |
| 1310 | (count (or num 1)) | 1302 | (count (or num 1)) |
| 1311 | end-list end-this end-type end-label | 1303 | end-list end-this end-type end-label |
| 1312 | start-this start-type start-label) | 1304 | start-this start-type start-label) |
| 1313 | (if (interactive-p) (push-mark (point) t)) | ||
| 1314 | (beginning-of-line) ; probably want this | 1305 | (beginning-of-line) ; probably want this |
| 1315 | (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move)) | 1306 | (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move)) |
| 1316 | (beginning-of-line) | 1307 | (beginning-of-line) |
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 3effb6e7d38..70150111a86 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; flymake.el -- a universal on-the-fly syntax checker | 1 | ;;; flymake.el -- a universal on-the-fly syntax checker |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2003 Free Software Foundation | 3 | ;; Copyright (C) 2003, 2005 Free Software Foundation |
| 4 | 4 | ||
| 5 | ;; Author: Pavel Kobiakov <pk_at_work@yahoo.com> | 5 | ;; Author: Pavel Kobiakov <pk_at_work@yahoo.com> |
| 6 | ;; Maintainer: Pavel Kobiakov <pk_at_work@yahoo.com> | 6 | ;; Maintainer: Pavel Kobiakov <pk_at_work@yahoo.com> |
| @@ -49,17 +49,17 @@ | |||
| 49 | (if test (make-hash-table :test test) (make-hash-table)) | 49 | (if test (make-hash-table :test test) (make-hash-table)) |
| 50 | (makehash test))) | 50 | (makehash test))) |
| 51 | 51 | ||
| 52 | (defun flymake-float-time () | 52 | (defalias 'flymake-float-time |
| 53 | (if (featurep 'xemacs) | 53 | (if (fboundp 'float-time) |
| 54 | (let ((tm (current-time))) | 54 | 'float-time |
| 55 | (multiple-value-bind (s0 s1 s2) (current-time) | 55 | (lambda () |
| 56 | (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2)))) | 56 | (multiple-value-bind (s0 s1 s2) (current-time) |
| 57 | (float-time))) | 57 | (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2)))))) |
| 58 | 58 | ||
| 59 | (defsubst flymake-replace-regexp-in-string (regexp rep str) | 59 | (defsubst flymake-replace-regexp-in-string (regexp rep str) |
| 60 | (if (featurep 'xemacs) | 60 | (if (fboundp 'replace-regexp-in-string) |
| 61 | (replace-in-string str regexp rep) | 61 | (replace-regexp-in-string regexp rep str) |
| 62 | (replace-regexp-in-string regexp rep str))) | 62 | (replace-in-string str regexp rep))) |
| 63 | 63 | ||
| 64 | (defun flymake-split-string (str pattern) | 64 | (defun flymake-split-string (str pattern) |
| 65 | "Split, then remove first and/or last in case it's empty." | 65 | "Split, then remove first and/or last in case it's empty." |
| @@ -71,22 +71,22 @@ | |||
| 71 | splitted)) | 71 | splitted)) |
| 72 | 72 | ||
| 73 | (defsubst flymake-get-temp-dir () | 73 | (defsubst flymake-get-temp-dir () |
| 74 | (if (featurep 'xemacs) | 74 | (if (fboundp 'temp-directory) |
| 75 | (temp-directory) | 75 | (temp-directory) |
| 76 | temporary-file-directory)) | 76 | temporary-file-directory)) |
| 77 | 77 | ||
| 78 | (defun flymake-line-beginning-position () | 78 | (defalias 'flymake-line-beginning-position |
| 79 | (save-excursion | 79 | (if (fboundp 'line-beginning-position) |
| 80 | (beginning-of-line) | 80 | 'line-beginning-position |
| 81 | (point))) | 81 | (lambda (&optional arg) (save-excursion (beginning-of-line arg) (point))))) |
| 82 | 82 | ||
| 83 | (defun flymake-line-end-position () | 83 | (defalias 'flymake-line-end-position |
| 84 | (save-excursion | 84 | (if (fboundp 'line-end-position) |
| 85 | (end-of-line) | 85 | 'line-end-position |
| 86 | (point))) | 86 | (lambda (&optional arg) (save-excursion (end-of-line arg) (point))))) |
| 87 | 87 | ||
| 88 | (defun flymake-popup-menu (pos menu-data) | 88 | (defun flymake-popup-menu (pos menu-data) |
| 89 | (if (featurep 'xemacs) | 89 | (if (and (fboundp 'popup-menu) (fboundp 'make-event)) |
| 90 | (let* ((x-pos (nth 0 (nth 0 pos))) | 90 | (let* ((x-pos (nth 0 (nth 0 pos))) |
| 91 | (y-pos (nth 1 (nth 0 pos))) | 91 | (y-pos (nth 1 (nth 0 pos))) |
| 92 | (fake-event-props '(button 1 x 1 y 1))) | 92 | (fake-event-props '(button 1 x 1 y 1))) |
| @@ -104,10 +104,10 @@ | |||
| 104 | menu-items)) | 104 | menu-items)) |
| 105 | (list menu-title (cons "" menu-commands)))) | 105 | (list menu-title (cons "" menu-commands)))) |
| 106 | 106 | ||
| 107 | (defun flymake-nop ()) | ||
| 108 | |||
| 109 | (if (featurep 'xemacs) (progn | 107 | (if (featurep 'xemacs) (progn |
| 110 | 108 | ||
| 109 | (defun flymake-nop ()) | ||
| 110 | |||
| 111 | (defun flymake-make-xemacs-menu (menu-data) | 111 | (defun flymake-make-xemacs-menu (menu-data) |
| 112 | (let* ((menu-title (nth 0 menu-data)) | 112 | (let* ((menu-title (nth 0 menu-data)) |
| 113 | (menu-items (nth 1 menu-data)) | 113 | (menu-items (nth 1 menu-data)) |
| @@ -134,19 +134,19 @@ | |||
| 134 | 134 | ||
| 135 | (defun flymake-current-row () | 135 | (defun flymake-current-row () |
| 136 | "Return current row number in current frame." | 136 | "Return current row number in current frame." |
| 137 | (if (featurep 'xemacs) | 137 | (if (fboundp 'window-edges) |
| 138 | (count-lines (window-start) (point)) | 138 | (+ (car (cdr (window-edges))) (count-lines (window-start) (point))) |
| 139 | (+ (car (cdr (window-edges))) (count-lines (window-start) (point))))) | 139 | (count-lines (window-start) (point)))) |
| 140 | 140 | ||
| 141 | (defun flymake-selected-frame () | 141 | (defun flymake-selected-frame () |
| 142 | (if (featurep 'xemacs) | 142 | (if (fboundp 'window-edges) |
| 143 | (selected-window) | 143 | (selected-frame) |
| 144 | (selected-frame))) | 144 | (selected-window))) |
| 145 | 145 | ||
| 146 | ;;;; ]] | 146 | ;;;; ]] |
| 147 | 147 | ||
| 148 | (defcustom flymake-log-level -1 | 148 | (defcustom flymake-log-level -1 |
| 149 | "Logging level, only messages with level > flymake-log-level will not be logged | 149 | "Logging level, only messages with level lower or equal will be logged. |
| 150 | -1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" | 150 | -1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" |
| 151 | :group 'flymake | 151 | :group 'flymake |
| 152 | :type 'integer) | 152 | :type 'integer) |
| @@ -170,7 +170,7 @@ | |||
| 170 | tmp)) | 170 | tmp)) |
| 171 | 171 | ||
| 172 | (defun flymake-set-at (list pos val) | 172 | (defun flymake-set-at (list pos val) |
| 173 | "Set VAL at position POS in LIST" | 173 | "Set VAL at position POS in LIST." |
| 174 | (let ((tmp (copy-sequence list))) ; (???) | 174 | (let ((tmp (copy-sequence list))) ; (???) |
| 175 | (setcar (nthcdr pos tmp) val) | 175 | (setcar (nthcdr pos tmp) val) |
| 176 | tmp)) | 176 | tmp)) |
| @@ -199,8 +199,7 @@ | |||
| 199 | 199 | ||
| 200 | (if (eq buffer (current-buffer)) | 200 | (if (eq buffer (current-buffer)) |
| 201 | (symbol-value var-name) | 201 | (symbol-value var-name) |
| 202 | (save-excursion | 202 | (with-current-buffer buffer |
| 203 | (set-buffer buffer) | ||
| 204 | (symbol-value var-name)))) | 203 | (symbol-value var-name)))) |
| 205 | 204 | ||
| 206 | (defun flymake-set-buffer-var (buffer var-name var-value) | 205 | (defun flymake-set-buffer-var (buffer var-name var-value) |
| @@ -210,8 +209,7 @@ | |||
| 210 | 209 | ||
| 211 | (if (eq buffer (current-buffer)) | 210 | (if (eq buffer (current-buffer)) |
| 212 | (set var-name var-value) | 211 | (set var-name var-value) |
| 213 | (save-excursion | 212 | (with-current-buffer buffer |
| 214 | (set-buffer buffer) | ||
| 215 | (set var-name var-value)))) | 213 | (set var-name var-value)))) |
| 216 | 214 | ||
| 217 | (defvar flymake-buffer-data (flymake-makehash) | 215 | (defvar flymake-buffer-data (flymake-makehash) |
| @@ -231,7 +229,7 @@ | |||
| 231 | (defun flymake-set-buffer-value (buffer name value) | 229 | (defun flymake-set-buffer-value (buffer name value) |
| 232 | (puthash name value (flymake-get-buffer-data buffer))) | 230 | (puthash name value (flymake-get-buffer-data buffer))) |
| 233 | 231 | ||
| 234 | (defvar flymake-output-residual nil "") | 232 | (defvar flymake-output-residual nil) |
| 235 | 233 | ||
| 236 | (make-variable-buffer-local 'flymake-output-residual) | 234 | (make-variable-buffer-local 'flymake-output-residual) |
| 237 | 235 | ||
| @@ -253,31 +251,30 @@ | |||
| 253 | (".+[0-9]+\\.tex$" flymake-master-tex-init flymake-master-cleanup flymake-get-real-file-name) | 251 | (".+[0-9]+\\.tex$" flymake-master-tex-init flymake-master-cleanup flymake-get-real-file-name) |
| 254 | (".+\\.tex$" flymake-simple-tex-init flymake-simple-cleanup flymake-get-real-file-name) | 252 | (".+\\.tex$" flymake-simple-tex-init flymake-simple-cleanup flymake-get-real-file-name) |
| 255 | (".+\\.idl$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) | 253 | (".+\\.idl$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) |
| 256 | ; (".+\\.cpp$" 1) | 254 | ;; (".+\\.cpp$" 1) |
| 257 | ; (".+\\.java$" 3) | 255 | ;; (".+\\.java$" 3) |
| 258 | ; (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$") | 256 | ;; (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$") |
| 259 | ; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2)) | 257 | ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2)) |
| 260 | ; (".+\\.idl$" 1) | 258 | ;; (".+\\.idl$" 1) |
| 261 | ; (".+\\.odl$" 1) | 259 | ;; (".+\\.odl$" 1) |
| 262 | ; (".+[0-9]+\\.tex$" 2 (".+\\.tex$") | 260 | ;; (".+[0-9]+\\.tex$" 2 (".+\\.tex$") |
| 263 | ; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 )) | 261 | ;; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 )) |
| 264 | ; (".+\\.tex$" 1) | 262 | ;; (".+\\.tex$" 1) |
| 265 | ) | 263 | ) |
| 266 | "*Files syntax checking is allowed for." | 264 | "*Files syntax checking is allowed for." |
| 267 | :group 'flymake | 265 | :group 'flymake |
| 268 | :type '(repeat (string symbol symbol symbol))) | 266 | :type '(repeat (string symbol symbol symbol))) |
| 269 | 267 | ||
| 270 | (defun flymake-get-file-name-mode-and-masks (file-name) | 268 | (defun flymake-get-file-name-mode-and-masks (file-name) |
| 271 | "Return the corresponding entry from 'flymake-allowed-file-name-masks'." | 269 | "Return the corresponding entry from `flymake-allowed-file-name-masks'." |
| 272 | (unless (stringp file-name) | 270 | (unless (stringp file-name) |
| 273 | (error "Invalid file-name")) | 271 | (error "Invalid file-name")) |
| 274 | (let ((count (length flymake-allowed-file-name-masks)) | 272 | (let ((fnm flymake-allowed-file-name-masks) |
| 275 | (idx 0) | ||
| 276 | (mode-and-masks nil)) | 273 | (mode-and-masks nil)) |
| 277 | (while (and (not mode-and-masks) (< idx count)) | 274 | (while (and (not mode-and-masks) fnm) |
| 278 | (if (string-match (nth 0 (nth idx flymake-allowed-file-name-masks)) file-name) | 275 | (if (string-match (car (car fnm)) file-name) |
| 279 | (setq mode-and-masks (cdr (nth idx flymake-allowed-file-name-masks)))) | 276 | (setq mode-and-masks (cdr (car fnm)))) |
| 280 | (setq idx (1+ idx))) | 277 | (setq fnm (cdr fnm))) |
| 281 | (flymake-log 3 "file %s, init=%s" file-name (car mode-and-masks)) | 278 | (flymake-log 3 "file %s, init=%s" file-name (car mode-and-masks)) |
| 282 | mode-and-masks)) | 279 | mode-and-masks)) |
| 283 | 280 | ||
| @@ -289,8 +286,8 @@ Return nil if we cannot, non-nil if we can." | |||
| 289 | (defun flymake-get-init-function (file-name) | 286 | (defun flymake-get-init-function (file-name) |
| 290 | "Return init function to be used for the file." | 287 | "Return init function to be used for the file." |
| 291 | (let* ((init-f (nth 0 (flymake-get-file-name-mode-and-masks file-name)))) | 288 | (let* ((init-f (nth 0 (flymake-get-file-name-mode-and-masks file-name)))) |
| 292 | ;(flymake-log 0 "calling %s" init-f) | 289 | ;;(flymake-log 0 "calling %s" init-f) |
| 293 | ;(funcall init-f (current-buffer)) | 290 | ;;(funcall init-f (current-buffer)) |
| 294 | init-f)) | 291 | init-f)) |
| 295 | 292 | ||
| 296 | (defun flymake-get-cleanup-function (file-name) | 293 | (defun flymake-get-cleanup-function (file-name) |
| @@ -325,15 +322,13 @@ Return its file name if found, or nil if not found." | |||
| 325 | (flymake-get-buildfile-from-cache source-dir-name)) | 322 | (flymake-get-buildfile-from-cache source-dir-name)) |
| 326 | (let* ((buildfile-dir nil) | 323 | (let* ((buildfile-dir nil) |
| 327 | (buildfile nil) | 324 | (buildfile nil) |
| 328 | (dir-count (length dirs)) | ||
| 329 | (dir-idx 0) | ||
| 330 | (found nil)) | 325 | (found nil)) |
| 331 | (while (and (not found) (< dir-idx dir-count)) | 326 | (while (and (not found) dirs) |
| 332 | (setq buildfile-dir (concat source-dir-name (nth dir-idx dirs))) | 327 | (setq buildfile-dir (concat source-dir-name (car dirs))) |
| 333 | (setq buildfile (concat buildfile-dir "/" buildfile-name)) | 328 | (setq buildfile (concat buildfile-dir "/" buildfile-name)) |
| 334 | (when (file-exists-p buildfile) | 329 | (when (file-exists-p buildfile) |
| 335 | (setq found t)) | 330 | (setq found t)) |
| 336 | (setq dir-idx (1+ dir-idx))) | 331 | (setq dirs (cdr dirs))) |
| 337 | (if found | 332 | (if found |
| 338 | (progn | 333 | (progn |
| 339 | (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name) | 334 | (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name) |
| @@ -359,39 +354,23 @@ Return t if so, nil if not." | |||
| 359 | (equal (flymake-fix-file-name file-name-one) | 354 | (equal (flymake-fix-file-name file-name-one) |
| 360 | (flymake-fix-file-name file-name-two))) | 355 | (flymake-fix-file-name file-name-two))) |
| 361 | 356 | ||
| 362 | (defun flymake-ensure-ends-with-slash (filename) | ||
| 363 | ;; Should this really be file-name-as-directory? | ||
| 364 | (if (not (= (elt filename (1- (length filename))) (string-to-char "/"))) | ||
| 365 | (concat filename "/") | ||
| 366 | filename)) | ||
| 367 | |||
| 368 | (defun flymake-get-common-file-prefix (string-one string-two) | 357 | (defun flymake-get-common-file-prefix (string-one string-two) |
| 369 | "Return common prefix for two file names STRING-ONE and STRING-TWO." | 358 | "Return common prefix for two file names STRING-ONE and STRING-TWO." |
| 370 | (when (and string-one string-two) | 359 | (setq string-one (file-name-as-directory string-one)) |
| 371 | (let* ((slash-pos-one -1) | 360 | (setq string-two (file-name-as-directory string-two)) |
| 372 | (slash-pos-two -1) | 361 | (let ((n (compare-strings string-one nil nil string-two nil nil))) |
| 373 | (done nil) | 362 | (if (eq n t) string-one |
| 374 | (prefix nil)) | 363 | (setq n (abs (1+ n))) |
| 375 | (setq string-one (flymake-ensure-ends-with-slash string-one)) | 364 | (file-name-directory (substring string-one 0 n))))) |
| 376 | (setq string-two (flymake-ensure-ends-with-slash string-two)) | ||
| 377 | (while (not done) | ||
| 378 | (setq slash-pos-one (string-match "/" string-one (1+ slash-pos-one))) | ||
| 379 | (setq slash-pos-two (string-match "/" string-two (1+ slash-pos-two))) | ||
| 380 | (if (and slash-pos-one slash-pos-two | ||
| 381 | (= slash-pos-one slash-pos-two) | ||
| 382 | (string= (substring string-one 0 slash-pos-one) (substring string-two 0 slash-pos-two))) | ||
| 383 | (progn | ||
| 384 | (setq prefix (substring string-one 0 (1+ slash-pos-one)))) | ||
| 385 | (setq done t))) | ||
| 386 | prefix))) | ||
| 387 | 365 | ||
| 388 | (defun flymake-build-relative-filename (from-dir to-dir) | 366 | (defun flymake-build-relative-filename (from-dir to-dir) |
| 389 | "Return rel: FROM-DIR/rel == TO-DIR." | 367 | "Return rel: FROM-DIR/rel == TO-DIR." |
| 368 | ;; FIXME: Why not use `file-relative-name'? | ||
| 390 | (if (not (equal (elt from-dir 0) (elt to-dir 0))) | 369 | (if (not (equal (elt from-dir 0) (elt to-dir 0))) |
| 391 | (error "First chars in file names %s, %s must be equal (same drive)" | 370 | (error "First chars in file names %s, %s must be equal (same drive)" |
| 392 | from-dir to-dir) | 371 | from-dir to-dir) |
| 393 | (let* ((from (flymake-ensure-ends-with-slash (flymake-fix-file-name from-dir))) | 372 | (let* ((from (file-name-as-directory (flymake-fix-file-name from-dir))) |
| 394 | (to (flymake-ensure-ends-with-slash (flymake-fix-file-name to-dir))) | 373 | (to (file-name-as-directory (flymake-fix-file-name to-dir))) |
| 395 | (prefix (flymake-get-common-file-prefix from to)) | 374 | (prefix (flymake-get-common-file-prefix from to)) |
| 396 | (from-suffix (substring from (length prefix))) | 375 | (from-suffix (substring from (length prefix))) |
| 397 | (up-count (length (flymake-split-string from-suffix "[/]"))) | 376 | (up-count (length (flymake-split-string from-suffix "[/]"))) |
| @@ -413,7 +392,7 @@ Return t if so, nil if not." | |||
| 413 | (or rel "./")))) | 392 | (or rel "./")))) |
| 414 | 393 | ||
| 415 | (defcustom flymake-master-file-dirs '("." "./src" "./UnitTest") | 394 | (defcustom flymake-master-file-dirs '("." "./src" "./UnitTest") |
| 416 | "Dirs where to llok for master files." | 395 | "Dirs where to look for master files." |
| 417 | :group 'flymake | 396 | :group 'flymake |
| 418 | :type '(repeat (string))) | 397 | :type '(repeat (string))) |
| 419 | 398 | ||
| @@ -426,35 +405,33 @@ Return t if so, nil if not." | |||
| 426 | (defvar flymake-included-file-name) | 405 | (defvar flymake-included-file-name) |
| 427 | 406 | ||
| 428 | (defun flymake-find-possible-master-files (file-name master-file-dirs masks) | 407 | (defun flymake-find-possible-master-files (file-name master-file-dirs masks) |
| 429 | "Find (by name and location) all posible master files. | 408 | "Find (by name and location) all possible master files. |
| 430 | Mater files are .cpp and .c for and .h. Files are searched for | 409 | Master files are .cpp and .c for and .h. Files are searched for |
| 431 | starting from the .h directory and max max-level parent dirs. | 410 | starting from the .h directory and max max-level parent dirs. |
| 432 | File contents are not checked." | 411 | File contents are not checked." |
| 433 | (let* ((dir-idx 0) | 412 | (let* ((dirs master-file-dirs) |
| 434 | (dir-count (length master-file-dirs)) | ||
| 435 | (files nil) | 413 | (files nil) |
| 436 | (done nil) | 414 | (done nil)) |
| 437 | (masks-count (length masks))) | 415 | |
| 438 | 416 | (while (and (not done) dirs) | |
| 439 | (while (and (not done) (< dir-idx dir-count)) | 417 | (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name)) |
| 440 | (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name)) "/" (nth dir-idx master-file-dirs))) | 418 | "/" (car dirs))) |
| 441 | (masks-idx 0)) | 419 | (masks masks)) |
| 442 | (while (and (file-exists-p dir) (not done) (< masks-idx masks-count)) | 420 | (while (and (file-exists-p dir) (not done) masks) |
| 443 | (let* ((mask (nth masks-idx masks)) | 421 | (let* ((mask (car masks)) |
| 444 | (dir-files (directory-files dir t mask)) | 422 | (dir-files (directory-files dir t mask))) |
| 445 | (file-count (length dir-files)) | 423 | |
| 446 | (file-idx 0)) | 424 | (flymake-log 3 "dir %s, %d file(s) for mask %s" |
| 447 | 425 | dir (length dir-files) mask) | |
| 448 | (flymake-log 3 "dir %s, %d file(s) for mask %s" dir file-count mask) | 426 | (while (and (not done) dir-files) |
| 449 | (while (and (not done) (< file-idx file-count)) | 427 | (when (not (file-directory-p (car dir-files))) |
| 450 | (when (not (file-directory-p (nth file-idx dir-files))) | 428 | (setq files (cons (car dir-files) files)) |
| 451 | (setq files (cons (nth file-idx dir-files) files)) | ||
| 452 | (when (>= (length files) flymake-master-file-count-limit) | 429 | (when (>= (length files) flymake-master-file-count-limit) |
| 453 | (flymake-log 3 "master file count limit (%d) reached" flymake-master-file-count-limit) | 430 | (flymake-log 3 "master file count limit (%d) reached" flymake-master-file-count-limit) |
| 454 | (setq done t))) | 431 | (setq done t))) |
| 455 | (setq file-idx (1+ file-idx)))) | 432 | (setq dir-files (cdr dir-files)))) |
| 456 | (setq masks-idx (1+ masks-idx)))) | 433 | (setq masks (cdr masks)))) |
| 457 | (setq dir-idx (1+ dir-idx))) | 434 | (setq dirs (cdr dirs))) |
| 458 | (when files | 435 | (when files |
| 459 | (let ((flymake-included-file-name (file-name-nondirectory file-name))) | 436 | (let ((flymake-included-file-name (file-name-nondirectory file-name))) |
| 460 | (setq files (sort files 'flymake-master-file-compare)))) | 437 | (setq files (sort files 'flymake-master-file-compare)))) |
| @@ -512,32 +489,32 @@ instead of reading master file from disk." | |||
| 512 | (when (flymake-check-include source-file-name inc-path inc-name include-dirs) | 489 | (when (flymake-check-include source-file-name inc-path inc-name include-dirs) |
| 513 | (setq found t) | 490 | (setq found t) |
| 514 | ;; replace-match is not used here as it fails in | 491 | ;; replace-match is not used here as it fails in |
| 515 | ;; xemacs with 'last match not a buffer' error as | 492 | ;; XEmacs with 'last match not a buffer' error as |
| 516 | ;; check-includes calls replace-in-string | 493 | ;; check-includes calls replace-in-string |
| 517 | (flymake-replace-region (current-buffer) match-beg match-end | 494 | (flymake-replace-region match-beg match-end |
| 518 | (file-name-nondirectory patched-source-file-name)))) | 495 | (file-name-nondirectory patched-source-file-name)))) |
| 519 | (forward-line 1))) | 496 | (forward-line 1))) |
| 520 | (when found | 497 | (when found |
| 521 | (flymake-save-buffer-in-file (current-buffer) patched-master-file-name))) | 498 | (flymake-save-buffer-in-file (current-buffer) patched-master-file-name))) |
| 522 | ;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer)) | 499 | ;;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer)) |
| 523 | (kill-buffer master-file-temp-buffer))) | 500 | (kill-buffer master-file-temp-buffer))) |
| 524 | ;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found) | 501 | ;;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found) |
| 525 | (when found | 502 | (when found |
| 526 | (flymake-log 2 "found master file %s" master-file-name)) | 503 | (flymake-log 2 "found master file %s" master-file-name)) |
| 527 | found)) | 504 | found)) |
| 528 | 505 | ||
| 529 | (defun flymake-replace-region (buffer beg end rep) | 506 | (defun flymake-replace-region (beg end rep) |
| 530 | "Replace text in BUFFER in region (BEG END) with REP." | 507 | "Replace text in BUFFER in region (BEG END) with REP." |
| 531 | (save-excursion | 508 | (save-excursion |
| 532 | (delete-region beg end) | 509 | (goto-char end) |
| 533 | (goto-char beg) | 510 | ;; Insert before deleting, so as to better preserve markers's positions. |
| 534 | (insert rep))) | 511 | (insert rep) |
| 512 | (delete-region beg end))) | ||
| 535 | 513 | ||
| 536 | (defun flymake-read-file-to-temp-buffer (file-name) | 514 | (defun flymake-read-file-to-temp-buffer (file-name) |
| 537 | "Insert contents of FILE-NAME into newly created temp buffer." | 515 | "Insert contents of FILE-NAME into newly created temp buffer." |
| 538 | (let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name)))))) | 516 | (let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name)))))) |
| 539 | (save-excursion | 517 | (with-current-buffer temp-buffer |
| 540 | (set-buffer temp-buffer) | ||
| 541 | (insert-file-contents file-name)) | 518 | (insert-file-contents file-name)) |
| 542 | temp-buffer)) | 519 | temp-buffer)) |
| 543 | 520 | ||
| @@ -545,8 +522,7 @@ instead of reading master file from disk." | |||
| 545 | "Copy contents of BUFFER into newly created temp buffer." | 522 | "Copy contents of BUFFER into newly created temp buffer." |
| 546 | (let ((contents nil) | 523 | (let ((contents nil) |
| 547 | (temp-buffer nil)) | 524 | (temp-buffer nil)) |
| 548 | (save-excursion | 525 | (with-current-buffer buffer |
| 549 | (set-buffer buffer) | ||
| 550 | (setq contents (buffer-string)) | 526 | (setq contents (buffer-string)) |
| 551 | 527 | ||
| 552 | (setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer))))) | 528 | (setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer))))) |
| @@ -559,18 +535,17 @@ instead of reading master file from disk." | |||
| 559 | Return t if it can be found via include path using INC-PATH and INC-NAME." | 535 | Return t if it can be found via include path using INC-PATH and INC-NAME." |
| 560 | (if (file-name-absolute-p inc-path) | 536 | (if (file-name-absolute-p inc-path) |
| 561 | (flymake-same-files source-file-name (concat inc-path "/" inc-name)) | 537 | (flymake-same-files source-file-name (concat inc-path "/" inc-name)) |
| 562 | (let* ((count (length include-dirs)) | 538 | (let* ((file-name nil) |
| 563 | (idx 0) | ||
| 564 | (file-name nil) | ||
| 565 | (found nil)) | 539 | (found nil)) |
| 566 | (while (and (not found) (< idx count)) | 540 | (while (and (not found) include-dirs) |
| 567 | (setq file-name (concat (file-name-directory source-file-name) "/" (nth idx include-dirs))) | 541 | (setq file-name (concat (file-name-directory source-file-name) |
| 542 | "/" (car include-dirs))) | ||
| 568 | (if (> (length inc-path) 0) | 543 | (if (> (length inc-path) 0) |
| 569 | (setq file-name (concat file-name "/" inc-path))) | 544 | (setq file-name (concat file-name "/" inc-path))) |
| 570 | (setq file-name (concat file-name "/" inc-name)) | 545 | (setq file-name (concat file-name "/" inc-name)) |
| 571 | (when (flymake-same-files source-file-name file-name) | 546 | (when (flymake-same-files source-file-name file-name) |
| 572 | (setq found t)) | 547 | (setq found t)) |
| 573 | (setq idx (1+ idx))) | 548 | (setq include-dirs (cdr include-dirs))) |
| 574 | found))) | 549 | found))) |
| 575 | 550 | ||
| 576 | (defun flymake-find-buffer-for-file (file-name) | 551 | (defun flymake-find-buffer-for-file (file-name) |
| @@ -617,9 +592,8 @@ Find master file, patch and save it." | |||
| 617 | (defun flymake-save-buffer-in-file (buffer file-name) | 592 | (defun flymake-save-buffer-in-file (buffer file-name) |
| 618 | (or buffer | 593 | (or buffer |
| 619 | (error "Invalid buffer")) | 594 | (error "Invalid buffer")) |
| 620 | (save-excursion | 595 | (with-current-buffer buffer |
| 621 | (save-restriction | 596 | (save-restriction |
| 622 | (set-buffer buffer) | ||
| 623 | (widen) | 597 | (widen) |
| 624 | (make-directory (file-name-directory file-name) 1) | 598 | (make-directory (file-name-directory file-name) 1) |
| 625 | (write-region (point-min) (point-max) file-name nil 566))) | 599 | (write-region (point-min) (point-max) file-name nil 566))) |
| @@ -664,8 +638,7 @@ It's flymake process filter." | |||
| 664 | (delete-process process) | 638 | (delete-process process) |
| 665 | 639 | ||
| 666 | (when source-buffer | 640 | (when source-buffer |
| 667 | (save-excursion | 641 | (with-current-buffer source-buffer |
| 668 | (set-buffer source-buffer) | ||
| 669 | 642 | ||
| 670 | (flymake-parse-residual source-buffer) | 643 | (flymake-parse-residual source-buffer) |
| 671 | (flymake-post-syntax-check source-buffer exit-status command) | 644 | (flymake-post-syntax-check source-buffer exit-status command) |
| @@ -705,8 +678,7 @@ It's flymake process filter." | |||
| 705 | 678 | ||
| 706 | (defun flymake-parse-output-and-residual (source-buffer output) | 679 | (defun flymake-parse-output-and-residual (source-buffer output) |
| 707 | "Split OUTPUT into lines, merge in residual if necessary." | 680 | "Split OUTPUT into lines, merge in residual if necessary." |
| 708 | (save-excursion | 681 | (with-current-buffer source-buffer |
| 709 | (set-buffer source-buffer) | ||
| 710 | (let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer)) | 682 | (let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer)) |
| 711 | (total-output (if buffer-residual (concat buffer-residual output) output)) | 683 | (total-output (if buffer-residual (concat buffer-residual output) output)) |
| 712 | (lines-and-residual (flymake-split-output total-output)) | 684 | (lines-and-residual (flymake-split-output total-output)) |
| @@ -720,8 +692,7 @@ It's flymake process filter." | |||
| 720 | 692 | ||
| 721 | (defun flymake-parse-residual (source-buffer) | 693 | (defun flymake-parse-residual (source-buffer) |
| 722 | "Parse residual if it's non empty." | 694 | "Parse residual if it's non empty." |
| 723 | (save-excursion | 695 | (with-current-buffer source-buffer |
| 724 | (set-buffer source-buffer) | ||
| 725 | (when (flymake-get-buffer-output-residual source-buffer) | 696 | (when (flymake-get-buffer-output-residual source-buffer) |
| 726 | (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines | 697 | (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines |
| 727 | (flymake-get-buffer-new-err-info source-buffer) | 698 | (flymake-get-buffer-new-err-info source-buffer) |
| @@ -845,8 +816,7 @@ line number outside the file being compiled." | |||
| 845 | 816 | ||
| 846 | (defun flymake-highlight-err-lines (buffer err-info-list) | 817 | (defun flymake-highlight-err-lines (buffer err-info-list) |
| 847 | "Highlight error lines in BUFFER using info from ERR-INFO-LIST." | 818 | "Highlight error lines in BUFFER using info from ERR-INFO-LIST." |
| 848 | (save-excursion | 819 | (with-current-buffer buffer |
| 849 | (set-buffer buffer) | ||
| 850 | (let* ((idx 0) | 820 | (let* ((idx 0) |
| 851 | (count (length err-info-list))) | 821 | (count (length err-info-list))) |
| 852 | (while (< idx count) | 822 | (while (< idx count) |
| @@ -866,19 +836,18 @@ line number outside the file being compiled." | |||
| 866 | (overlay-put ov 'help-echo tooltip-text) | 836 | (overlay-put ov 'help-echo tooltip-text) |
| 867 | (overlay-put ov 'flymake-overlay t) | 837 | (overlay-put ov 'flymake-overlay t) |
| 868 | (overlay-put ov 'priority 100) | 838 | (overlay-put ov 'priority 100) |
| 869 | ;+(flymake-log 3 "created overlay %s" ov) | 839 | ;;+(flymake-log 3 "created overlay %s" ov) |
| 870 | ov) | 840 | ov) |
| 871 | (flymake-log 3 "created an overlay at (%d-%d)" beg end))) | 841 | (flymake-log 3 "created an overlay at (%d-%d)" beg end))) |
| 872 | 842 | ||
| 873 | (defun flymake-delete-own-overlays (buffer) | 843 | (defun flymake-delete-own-overlays (buffer) |
| 874 | "Delete all flymake overlays in BUFFER." | 844 | "Delete all flymake overlays in BUFFER." |
| 875 | (save-excursion | 845 | (with-current-buffer buffer |
| 876 | (set-buffer buffer) | ||
| 877 | (let ((ov (overlays-in (point-min) (point-max)))) | 846 | (let ((ov (overlays-in (point-min) (point-max)))) |
| 878 | (while (consp ov) | 847 | (while (consp ov) |
| 879 | (when (flymake-overlay-p (car ov)) | 848 | (when (flymake-overlay-p (car ov)) |
| 880 | (delete-overlay (car ov)) | 849 | (delete-overlay (car ov)) |
| 881 | ;+(flymake-log 3 "deleted overlay %s" ov) | 850 | ;;+(flymake-log 3 "deleted overlay %s" ov) |
| 882 | ) | 851 | ) |
| 883 | (setq ov (cdr ov)))))) | 852 | (setq ov (cdr ov)))))) |
| 884 | 853 | ||
| @@ -890,11 +859,12 @@ Return t if it has at least one flymake overlay, nil if no overlay." | |||
| 890 | (while (consp ov) | 859 | (while (consp ov) |
| 891 | (when (flymake-overlay-p (car ov)) | 860 | (when (flymake-overlay-p (car ov)) |
| 892 | (setq has-flymake-overlays t)) | 861 | (setq has-flymake-overlays t)) |
| 893 | (setq ov (cdr ov))))) | 862 | (setq ov (cdr ov))) |
| 863 | has-flymake-overlays)) | ||
| 894 | 864 | ||
| 895 | (defface flymake-errline-face | 865 | (defface flymake-errline-face |
| 896 | ;+ '((((class color)) (:foreground "OrangeRed" :bold t :underline t)) | 866 | ;;+ '((((class color)) (:foreground "OrangeRed" :bold t :underline t)) |
| 897 | ;+ '((((class color)) (:underline "OrangeRed")) | 867 | ;;+ '((((class color)) (:underline "OrangeRed")) |
| 898 | '((((class color)) (:background "LightPink")) | 868 | '((((class color)) (:background "LightPink")) |
| 899 | (t (:bold t))) | 869 | (t (:bold t))) |
| 900 | "Face used for marking error lines." | 870 | "Face used for marking error lines." |
| @@ -970,7 +940,8 @@ Perhaps use text from LINE-ERR-INFO-ILST to enhance highlighting." | |||
| 970 | 940 | ||
| 971 | (defun flymake-split-output (output) | 941 | (defun flymake-split-output (output) |
| 972 | "Split OUTPUT into lines. | 942 | "Split OUTPUT into lines. |
| 973 | Return last one as residual if it does not end with newline char. Returns ((lines) residual)." | 943 | Return last one as residual if it does not end with newline char. |
| 944 | Returns ((LINES) RESIDUAL)." | ||
| 974 | (when (and output (> (length output) 0)) | 945 | (when (and output (> (length output) 0)) |
| 975 | (let* ((lines (flymake-split-string output "[\n\r]+")) | 946 | (let* ((lines (flymake-split-string output "[\n\r]+")) |
| 976 | (complete (equal "\n" (char-to-string (aref output (1- (length output)))))) | 947 | (complete (equal "\n" (char-to-string (aref output (1- (length output)))))) |
| @@ -984,21 +955,18 @@ Return last one as residual if it does not end with newline char. Returns ((line | |||
| 984 | "Grab error line patterns from ORIGINAL-LIST in compile.el format. | 955 | "Grab error line patterns from ORIGINAL-LIST in compile.el format. |
| 985 | Convert it to flymake internal format." | 956 | Convert it to flymake internal format." |
| 986 | (let* ((converted-list '())) | 957 | (let* ((converted-list '())) |
| 987 | (mapcar | 958 | (dolist (item original-list) |
| 988 | (lambda (item) | 959 | (setq item (cdr item)) |
| 989 | (setq item (cdr item)) | 960 | (let ((regexp (nth 0 item)) |
| 990 | (let ((regexp (nth 0 item)) | 961 | (file (nth 1 item)) |
| 991 | (file (nth 1 item)) | 962 | (line (nth 2 item)) |
| 992 | (line (nth 2 item)) | 963 | (col (nth 3 item))) |
| 993 | (col (nth 3 item)) | 964 | (if (consp file) (setq file (car file))) |
| 994 | end-line) | 965 | (if (consp line) (setq line (car line))) |
| 995 | (if (consp file) (setq file (car file))) | 966 | (if (consp col) (setq col (car col))) |
| 996 | (if (consp line) (setq end-line (cdr line) line (car line))) | 967 | |
| 997 | (if (consp col) (setq col (car col))) | 968 | (when (not (functionp line)) |
| 998 | 969 | (setq converted-list (cons (list regexp file line col) converted-list))))) | |
| 999 | (when (not (functionp line)) | ||
| 1000 | (setq converted-list (cons (list regexp file line col) converted-list))))) | ||
| 1001 | original-list) | ||
| 1002 | converted-list)) | 970 | converted-list)) |
| 1003 | 971 | ||
| 1004 | (eval-when-compile | 972 | (eval-when-compile |
| @@ -1007,40 +975,43 @@ Convert it to flymake internal format." | |||
| 1007 | (defvar flymake-err-line-patterns ; regexp file-idx line-idx col-idx (optional) text-idx(optional), match-end to end of string is error text | 975 | (defvar flymake-err-line-patterns ; regexp file-idx line-idx col-idx (optional) text-idx(optional), match-end to end of string is error text |
| 1008 | (append | 976 | (append |
| 1009 | '( | 977 | '( |
| 1010 | ; MS Visual C++ 6.0 | 978 | ;; MS Visual C++ 6.0 |
| 1011 | ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)" | 979 | ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)" |
| 1012 | 1 3 nil 4) | 980 | 1 3 nil 4) |
| 1013 | ; jikes | 981 | ;; jikes |
| 1014 | ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)" | 982 | ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)" |
| 1015 | 1 3 nil 4) | 983 | 1 3 nil 4) |
| 1016 | ; MS midl | 984 | ;; MS midl |
| 1017 | ("midl[ ]*:[ ]*\\(command line error .*\\)" | 985 | ("midl[ ]*:[ ]*\\(command line error .*\\)" |
| 1018 | nil nil nil 1) | 986 | nil nil nil 1) |
| 1019 | ; MS C# | 987 | ;; MS C# |
| 1020 | ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+)\: \\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)" | 988 | ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+)\: \\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)" |
| 1021 | 1 3 nil 4) | 989 | 1 3 nil 4) |
| 1022 | ; perl | 990 | ;; perl |
| 1023 | ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1) | 991 | ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1) |
| 1024 | ; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1) | 992 | ;; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1) |
| 1025 | ; ant/javac | 993 | ;; ant/javac |
| 1026 | (" *\\(\\[javac\\]\\)? *\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[ \t\n]*\\(.+\\)" | 994 | (" *\\(\\[javac\\]\\)? *\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[ \t\n]*\\(.+\\)" |
| 1027 | 2 4 nil 5)) | 995 | 2 4 nil 5)) |
| 1028 | ;; compilation-error-regexp-alist) | 996 | ;; compilation-error-regexp-alist) |
| 1029 | (flymake-reformat-err-line-patterns-from-compile-el compilation-error-regexp-alist-alist)) | 997 | (flymake-reformat-err-line-patterns-from-compile-el compilation-error-regexp-alist-alist)) |
| 1030 | "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx). Use flymake-reformat-err-line-patterns-from-compile-el to add patterns from compile.el") | 998 | "Patterns for matching error/warning lines. |
| 1031 | 999 | \(REGEXP FILE-IDX LINE-IDX ERR-TEXT-IDX). | |
| 1032 | ;(defcustom flymake-err-line-patterns | 1000 | Use `flymake-reformat-err-line-patterns-from-compile-el' to add patterns |
| 1033 | ; '( | 1001 | from compile.el") |
| 1034 | ; ; MS Visual C++ 6.0 | 1002 | |
| 1035 | ; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)" | 1003 | ;;(defcustom flymake-err-line-patterns |
| 1036 | ; 1 3 4) | 1004 | ;; '( |
| 1037 | ; ; jikes | 1005 | ;; ; MS Visual C++ 6.0 |
| 1038 | ; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\):[ \t\n]*\\(.+\\)\\)" | 1006 | ;; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)" |
| 1039 | ; 1 3 4)) | 1007 | ;; 1 3 4) |
| 1040 | ; "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx)" | 1008 | ;; ; jikes |
| 1041 | ; :group 'flymake | 1009 | ;; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\):[ \t\n]*\\(.+\\)\\)" |
| 1042 | ; :type '(repeat (string number number number)) | 1010 | ;; 1 3 4)) |
| 1043 | ;) | 1011 | ;; "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx)" |
| 1012 | ;; :group 'flymake | ||
| 1013 | ;; :type '(repeat (string number number number)) | ||
| 1014 | ;;) | ||
| 1044 | 1015 | ||
| 1045 | (defun flymake-parse-line (line) | 1016 | (defun flymake-parse-line (line) |
| 1046 | "Parse LINE to see if it is an error of warning. | 1017 | "Parse LINE to see if it is an error of warning. |
| @@ -1049,18 +1020,17 @@ Return its components if so, nil if no." | |||
| 1049 | (line-no 0) | 1020 | (line-no 0) |
| 1050 | (err-type "e") | 1021 | (err-type "e") |
| 1051 | (err-text nil) | 1022 | (err-text nil) |
| 1052 | (count (length flymake-err-line-patterns)) | 1023 | (patterns flymake-err-line-patterns) |
| 1053 | (idx 0) | ||
| 1054 | (matched nil)) | 1024 | (matched nil)) |
| 1055 | (while (and (< idx count) (not matched)) | 1025 | (while (and patterns (not matched)) |
| 1056 | (when (string-match (car (nth idx flymake-err-line-patterns)) line) | 1026 | (when (string-match (car (car patterns)) line) |
| 1057 | (let* ((file-idx (nth 1 (nth idx flymake-err-line-patterns))) | 1027 | (let* ((file-idx (nth 1 (car patterns))) |
| 1058 | (line-idx (nth 2 (nth idx flymake-err-line-patterns)))) | 1028 | (line-idx (nth 2 (car patterns)))) |
| 1059 | 1029 | ||
| 1060 | (setq raw-file-name (if file-idx (match-string file-idx line) nil)) | 1030 | (setq raw-file-name (if file-idx (match-string file-idx line) nil)) |
| 1061 | (setq line-no (if line-idx (string-to-int (match-string line-idx line)) 0)) | 1031 | (setq line-no (if line-idx (string-to-int (match-string line-idx line)) 0)) |
| 1062 | (setq err-text (if (> (length (nth idx flymake-err-line-patterns)) 4) | 1032 | (setq err-text (if (> (length (car patterns)) 4) |
| 1063 | (match-string (nth 4 (nth idx flymake-err-line-patterns)) line) | 1033 | (match-string (nth 4 (car patterns)) line) |
| 1064 | (flymake-patch-err-text (substring line (match-end 0))))) | 1034 | (flymake-patch-err-text (substring line (match-end 0))))) |
| 1065 | (or err-text (setq err-text "<no error text>")) | 1035 | (or err-text (setq err-text "<no error text>")) |
| 1066 | (if (and err-text (string-match "^[wW]arning" err-text)) | 1036 | (if (and err-text (string-match "^[wW]arning" err-text)) |
| @@ -1069,7 +1039,7 @@ Return its components if so, nil if no." | |||
| 1069 | (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx | 1039 | (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx |
| 1070 | raw-file-name line-no err-text) | 1040 | raw-file-name line-no err-text) |
| 1071 | (setq matched t))) | 1041 | (setq matched t))) |
| 1072 | (setq idx (1+ idx))) | 1042 | (setq patterns (cdr patterns))) |
| 1073 | (if matched | 1043 | (if matched |
| 1074 | (flymake-ler-make-ler raw-file-name line-no err-type err-text) | 1044 | (flymake-ler-make-ler raw-file-name line-no err-type err-text) |
| 1075 | ()))) | 1045 | ()))) |
| @@ -1110,8 +1080,7 @@ Return its components if so, nil if no." | |||
| 1110 | 1080 | ||
| 1111 | (defun flymake-add-err-info (err-info-list line-err-info) | 1081 | (defun flymake-add-err-info (err-info-list line-err-info) |
| 1112 | "Add error info (file line type text) to err info list preserving sort order." | 1082 | "Add error info (file line type text) to err info list preserving sort order." |
| 1113 | (let* ((count (length err-info-list)) | 1083 | (let* ((line-no (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info))) |
| 1114 | (line-no (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info))) | ||
| 1115 | (info-and-pos (flymake-find-err-info err-info-list line-no)) | 1084 | (info-and-pos (flymake-find-err-info err-info-list line-no)) |
| 1116 | (exists (car info-and-pos)) | 1085 | (exists (car info-and-pos)) |
| 1117 | (pos (nth 1 info-and-pos)) | 1086 | (pos (nth 1 info-and-pos)) |
| @@ -1133,7 +1102,7 @@ Return its components if so, nil if no." | |||
| 1133 | (if (flymake-get-project-include-dirs-from-cache basedir) | 1102 | (if (flymake-get-project-include-dirs-from-cache basedir) |
| 1134 | (progn | 1103 | (progn |
| 1135 | (flymake-get-project-include-dirs-from-cache basedir)) | 1104 | (flymake-get-project-include-dirs-from-cache basedir)) |
| 1136 | ;else | 1105 | ;;else |
| 1137 | (let* ((command-line (concat "make -C\"" basedir "\" DUMPVARS=INCLUDE_DIRS dumpvars")) | 1106 | (let* ((command-line (concat "make -C\"" basedir "\" DUMPVARS=INCLUDE_DIRS dumpvars")) |
| 1138 | (output (shell-command-to-string command-line)) | 1107 | (output (shell-command-to-string command-line)) |
| 1139 | (lines (flymake-split-string output "\n")) | 1108 | (lines (flymake-split-string output "\n")) |
| @@ -1206,9 +1175,8 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1206 | (defun flymake-get-program-dir (buffer) | 1175 | (defun flymake-get-program-dir (buffer) |
| 1207 | "Get dir to start program in." | 1176 | "Get dir to start program in." |
| 1208 | (unless (bufferp buffer) | 1177 | (unless (bufferp buffer) |
| 1209 | (error "Invlid buffer")) | 1178 | (error "Invalid buffer")) |
| 1210 | (save-excursion | 1179 | (with-current-buffer buffer |
| 1211 | (set-buffer buffer) | ||
| 1212 | default-directory)) | 1180 | default-directory)) |
| 1213 | 1181 | ||
| 1214 | (defun flymake-safe-delete-file (file-name) | 1182 | (defun flymake-safe-delete-file (file-name) |
| @@ -1233,8 +1201,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1233 | "Start syntax checking for buffer BUFFER." | 1201 | "Start syntax checking for buffer BUFFER." |
| 1234 | (unless (bufferp buffer) | 1202 | (unless (bufferp buffer) |
| 1235 | (error "Expected a buffer")) | 1203 | (error "Expected a buffer")) |
| 1236 | (save-excursion | 1204 | (with-current-buffer buffer |
| 1237 | (set-buffer buffer) | ||
| 1238 | (flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer)) | 1205 | (flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer)) |
| 1239 | (when (and (not (flymake-get-buffer-is-running buffer)) | 1206 | (when (and (not (flymake-get-buffer-is-running buffer)) |
| 1240 | (flymake-can-syntax-check-file (buffer-file-name buffer))) | 1207 | (flymake-can-syntax-check-file (buffer-file-name buffer))) |
| @@ -1317,7 +1284,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1317 | (call-interactively 'compile)) | 1284 | (call-interactively 'compile)) |
| 1318 | 1285 | ||
| 1319 | (defvar flymake-is-running nil | 1286 | (defvar flymake-is-running nil |
| 1320 | "If t, flymake syntax check process is running for the current buffer") | 1287 | "If t, flymake syntax check process is running for the current buffer.") |
| 1321 | 1288 | ||
| 1322 | (make-variable-buffer-local 'flymake-is-running) | 1289 | (make-variable-buffer-local 'flymake-is-running) |
| 1323 | 1290 | ||
| @@ -1361,7 +1328,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1361 | (flymake-set-buffer-var buffer 'flymake-check-start-time check-start-time)) | 1328 | (flymake-set-buffer-var buffer 'flymake-check-start-time check-start-time)) |
| 1362 | 1329 | ||
| 1363 | (defvar flymake-check-was-interrupted nil | 1330 | (defvar flymake-check-was-interrupted nil |
| 1364 | "t if syntax check was killed by flymake-compile") | 1331 | "Non-nil if syntax check was killed by `flymake-compile'.") |
| 1365 | 1332 | ||
| 1366 | (make-variable-buffer-local 'flymake-check-was-interrupted) | 1333 | (make-variable-buffer-local 'flymake-check-was-interrupted) |
| 1367 | 1334 | ||
| @@ -1378,10 +1345,9 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1378 | 1345 | ||
| 1379 | (defun flymake-on-timer-event (buffer) | 1346 | (defun flymake-on-timer-event (buffer) |
| 1380 | "Start a syntax check for buffer BUFFER if necessary." | 1347 | "Start a syntax check for buffer BUFFER if necessary." |
| 1381 | ;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time)) | 1348 | ;;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time)) |
| 1382 | (when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer))) | 1349 | (when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer))) |
| 1383 | (save-excursion | 1350 | (with-current-buffer buffer |
| 1384 | (set-buffer buffer) | ||
| 1385 | (when (and (flymake-get-buffer-last-change-time buffer) | 1351 | (when (and (flymake-get-buffer-last-change-time buffer) |
| 1386 | (> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer)))) | 1352 | (> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer)))) |
| 1387 | (flymake-set-buffer-last-change-time buffer nil) | 1353 | (flymake-set-buffer-last-change-time buffer nil) |
| @@ -1400,18 +1366,9 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1400 | (end (if (= (point) (point-max)) (point) (1+ (point))))) | 1366 | (end (if (= (point) (point-max)) (point) (1+ (point))))) |
| 1401 | (count-lines beg end))) | 1367 | (count-lines beg end))) |
| 1402 | 1368 | ||
| 1403 | (defun flymake-get-line-count (buffer) | ||
| 1404 | "Return number of lines in buffer BUFFER." | ||
| 1405 | (unless (bufferp buffer) | ||
| 1406 | (error "Invalid buffer")) | ||
| 1407 | (save-excursion | ||
| 1408 | (set-buffer buffer) | ||
| 1409 | (count-lines (point-min) (point-max)))) | ||
| 1410 | |||
| 1411 | (defun flymake-count-lines (buffer) | 1369 | (defun flymake-count-lines (buffer) |
| 1412 | "Return number of lines in buffer BUFFER." | 1370 | "Return number of lines in buffer BUFFER." |
| 1413 | (save-excursion | 1371 | (with-current-buffer buffer |
| 1414 | (set-buffer buffer) | ||
| 1415 | (count-lines (point-min) (point-max)))) | 1372 | (count-lines (point-min) (point-max)))) |
| 1416 | 1373 | ||
| 1417 | (defun flymake-get-point-pixel-pos () | 1374 | (defun flymake-get-point-pixel-pos () |
| @@ -1438,7 +1395,6 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1438 | (menu-data (flymake-make-err-menu-data line-no line-err-info-list)) | 1395 | (menu-data (flymake-make-err-menu-data line-no line-err-info-list)) |
| 1439 | (choice nil) | 1396 | (choice nil) |
| 1440 | (mouse-pos (flymake-get-point-pixel-pos)) | 1397 | (mouse-pos (flymake-get-point-pixel-pos)) |
| 1441 | (moved-mouse-pos (list (car mouse-pos) (+ 10 (car (cdr mouse-pos))))) | ||
| 1442 | (menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) | 1398 | (menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) |
| 1443 | (if menu-data | 1399 | (if menu-data |
| 1444 | (progn | 1400 | (progn |
| @@ -1474,7 +1430,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1474 | nil))) | 1430 | nil))) |
| 1475 | 1431 | ||
| 1476 | (defun flymake-goto-file-and-line (file line) | 1432 | (defun flymake-goto-file-and-line (file line) |
| 1477 | "Try to get buffer for file and goto line line in it" | 1433 | "Try to get buffer for FILE and goto line LINE in it." |
| 1478 | (if (not (file-exists-p file)) | 1434 | (if (not (file-exists-p file)) |
| 1479 | (flymake-log 1 "file %s does not exists" file) | 1435 | (flymake-log 1 "file %s does not exists" file) |
| 1480 | (progn | 1436 | (progn |
| @@ -1482,12 +1438,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1482 | (goto-line line)))) | 1438 | (goto-line line)))) |
| 1483 | 1439 | ||
| 1484 | ;; flymake minor mode declarations | 1440 | ;; flymake minor mode declarations |
| 1485 | (defvar flymake-mode nil) | 1441 | (defvar flymake-mode-line nil) |
| 1486 | |||
| 1487 | (make-variable-buffer-local 'flymake-mode) | ||
| 1488 | |||
| 1489 | (defvar flymake-mode-line nil | ||
| 1490 | "") | ||
| 1491 | 1442 | ||
| 1492 | (make-variable-buffer-local 'flymake-mode-line) | 1443 | (make-variable-buffer-local 'flymake-mode-line) |
| 1493 | 1444 | ||
| @@ -1520,8 +1471,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1520 | (defun flymake-report-status (buffer e-w &optional status) | 1471 | (defun flymake-report-status (buffer e-w &optional status) |
| 1521 | "Show status in mode line." | 1472 | "Show status in mode line." |
| 1522 | (when (bufferp buffer) | 1473 | (when (bufferp buffer) |
| 1523 | (save-excursion | 1474 | (with-current-buffer buffer |
| 1524 | (set-buffer buffer) | ||
| 1525 | (when e-w | 1475 | (when e-w |
| 1526 | (flymake-set-buffer-mode-line-e-w buffer e-w) | 1476 | (flymake-set-buffer-mode-line-e-w buffer e-w) |
| 1527 | ) | 1477 | ) |
| @@ -1548,30 +1498,22 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1548 | (when flymake-gui-warnings-enabled | 1498 | (when flymake-gui-warnings-enabled |
| 1549 | (flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning)) | 1499 | (flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning)) |
| 1550 | ) | 1500 | ) |
| 1551 | (save-excursion | 1501 | (with-current-buffer buffer |
| 1552 | (set-buffer buffer) | ||
| 1553 | (flymake-mode 0) | 1502 | (flymake-mode 0) |
| 1554 | (flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s" | 1503 | (flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s" |
| 1555 | (buffer-name buffer) status warning))) | 1504 | (buffer-name buffer) status warning))) |
| 1556 | 1505 | ||
| 1557 | (defun flymake-mode (&optional arg) | 1506 | ;;;###autoload |
| 1558 | "Toggle flymake mode on/off." | 1507 | (define-minor-mode flymake-mode |
| 1559 | (interactive) | 1508 | "Minor mode to do on-the-fly syntax checking. |
| 1560 | (let ((old-flymake-mode flymake-mode) | 1509 | When called interactively, toggles the minor mode. |
| 1561 | (turn-on nil)) | 1510 | With arg, turn Flymake mode on if and only if arg is positive." |
| 1562 | 1511 | :lighter flymake-mode-line | |
| 1563 | (setq turn-on | 1512 | (if flymake-mode |
| 1564 | (if (null arg) | 1513 | (if (flymake-can-syntax-check-file (buffer-file-name)) |
| 1565 | (not flymake-mode) | 1514 | (flymake-mode-on) |
| 1566 | ;else | 1515 | (flymake-log 2 "flymake cannot check syntax in buffer %s" (buffer-name))) |
| 1567 | (> (prefix-numeric-value arg) 0))) | 1516 | (flymake-mode-off))) |
| 1568 | |||
| 1569 | (if turn-on | ||
| 1570 | (if (flymake-can-syntax-check-file (buffer-file-name)) | ||
| 1571 | (flymake-mode-on) | ||
| 1572 | (flymake-log 2 "flymake cannot check syntax in buffer %s" (buffer-name))) | ||
| 1573 | (flymake-mode-off)) | ||
| 1574 | (force-mode-line-update))) | ||
| 1575 | 1517 | ||
| 1576 | (defcustom flymake-start-syntax-check-on-find-file t | 1518 | (defcustom flymake-start-syntax-check-on-find-file t |
| 1577 | "Start syntax check on find file." | 1519 | "Start syntax check on find file." |
| @@ -1579,10 +1521,6 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1579 | :type 'boolean) | 1521 | :type 'boolean) |
| 1580 | 1522 | ||
| 1581 | ;;;###autoload | 1523 | ;;;###autoload |
| 1582 | (unless (assq 'flymake-mode minor-mode-alist) | ||
| 1583 | (setq minor-mode-alist (cons '(flymake-mode flymake-mode-line) minor-mode-alist))) | ||
| 1584 | |||
| 1585 | ;;;###autoload | ||
| 1586 | (defun flymake-mode-on () | 1524 | (defun flymake-mode-on () |
| 1587 | "Turn flymake mode on." | 1525 | "Turn flymake mode on." |
| 1588 | (when (not flymake-mode) | 1526 | (when (not flymake-mode) |
| @@ -1590,7 +1528,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1590 | (setq after-change-functions (cons 'flymake-after-change-function after-change-functions)) | 1528 | (setq after-change-functions (cons 'flymake-after-change-function after-change-functions)) |
| 1591 | (add-hook 'after-save-hook 'flymake-after-save-hook) | 1529 | (add-hook 'after-save-hook 'flymake-after-save-hook) |
| 1592 | (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook) | 1530 | (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook) |
| 1593 | ;+(add-hook 'find-file-hooks 'flymake-find-file-hook) | 1531 | ;;+(add-hook 'find-file-hook 'flymake-find-file-hook) |
| 1594 | 1532 | ||
| 1595 | (flymake-report-status (current-buffer) "" "") | 1533 | (flymake-report-status (current-buffer) "" "") |
| 1596 | 1534 | ||
| @@ -1608,7 +1546,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1608 | (setq after-change-functions (delq 'flymake-after-change-function after-change-functions)) | 1546 | (setq after-change-functions (delq 'flymake-after-change-function after-change-functions)) |
| 1609 | (remove-hook 'after-save-hook (function flymake-after-save-hook) t) | 1547 | (remove-hook 'after-save-hook (function flymake-after-save-hook) t) |
| 1610 | (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t) | 1548 | (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t) |
| 1611 | ;+(remove-hook 'find-file-hooks (function flymake-find-file-hook) t) | 1549 | ;;+(remove-hook 'find-file-hook (function flymake-find-file-hook) t) |
| 1612 | 1550 | ||
| 1613 | (flymake-delete-own-overlays (current-buffer)) | 1551 | (flymake-delete-own-overlays (current-buffer)) |
| 1614 | 1552 | ||
| @@ -1627,8 +1565,8 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1627 | :type 'boolean) | 1565 | :type 'boolean) |
| 1628 | 1566 | ||
| 1629 | (defun flymake-after-change-function (start stop len) | 1567 | (defun flymake-after-change-function (start stop len) |
| 1630 | "Start syntax check for current buffer if it isn't already running" | 1568 | "Start syntax check for current buffer if it isn't already running." |
| 1631 | ;+(flymake-log 0 "setting change time to %s" (flymake-float-time)) | 1569 | ;;+(flymake-log 0 "setting change time to %s" (flymake-float-time)) |
| 1632 | (let((new-text (buffer-substring start stop))) | 1570 | (let((new-text (buffer-substring start stop))) |
| 1633 | (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) | 1571 | (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) |
| 1634 | (flymake-log 3 "starting syntax check as new-line has been seen") | 1572 | (flymake-log 3 "starting syntax check as new-line has been seen") |
| @@ -1647,10 +1585,10 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1647 | (flymake-set-buffer-timer (current-buffer) nil))) | 1585 | (flymake-set-buffer-timer (current-buffer) nil))) |
| 1648 | 1586 | ||
| 1649 | (defun flymake-find-file-hook () | 1587 | (defun flymake-find-file-hook () |
| 1650 | ;+(when flymake-start-syntax-check-on-find-file | 1588 | ;;+(when flymake-start-syntax-check-on-find-file |
| 1651 | ;+ (flymake-log 3 "starting syntax check on file open") | 1589 | ;;+ (flymake-log 3 "starting syntax check on file open") |
| 1652 | ;+ (flymake-start-syntax-check-for-current-buffer) | 1590 | ;;+ (flymake-start-syntax-check-for-current-buffer) |
| 1653 | ;+) | 1591 | ;;+) |
| 1654 | (when (and (not (local-variable-p 'flymake-mode (current-buffer))) | 1592 | (when (and (not (local-variable-p 'flymake-mode (current-buffer))) |
| 1655 | (flymake-can-syntax-check-file (buffer-file-name (current-buffer)))) | 1593 | (flymake-can-syntax-check-file (buffer-file-name (current-buffer)))) |
| 1656 | (flymake-mode) | 1594 | (flymake-mode) |
| @@ -1691,12 +1629,12 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1691 | (forward-char))) | 1629 | (forward-char))) |
| 1692 | 1630 | ||
| 1693 | (defun flymake-goto-line (line-no) | 1631 | (defun flymake-goto-line (line-no) |
| 1694 | "goto-line, then skip whitespace" | 1632 | "Go to line LINE-NO, then skip whitespace." |
| 1695 | (goto-line line-no) | 1633 | (goto-line line-no) |
| 1696 | (flymake-skip-whitespace)) | 1634 | (flymake-skip-whitespace)) |
| 1697 | 1635 | ||
| 1698 | (defun flymake-goto-next-error () | 1636 | (defun flymake-goto-next-error () |
| 1699 | "go to next error in err ring" | 1637 | "Go to next error in err ring." |
| 1700 | (interactive) | 1638 | (interactive) |
| 1701 | (let ((line-no (flymake-get-next-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) | 1639 | (let ((line-no (flymake-get-next-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) |
| 1702 | (when (not line-no) | 1640 | (when (not line-no) |
| @@ -1707,7 +1645,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1707 | (flymake-log 1 "no errors in current buffer")))) | 1645 | (flymake-log 1 "no errors in current buffer")))) |
| 1708 | 1646 | ||
| 1709 | (defun flymake-goto-prev-error () | 1647 | (defun flymake-goto-prev-error () |
| 1710 | "go to prev error in err ring" | 1648 | "Go to prev error in err ring." |
| 1711 | (interactive) | 1649 | (interactive) |
| 1712 | (let ((line-no (flymake-get-prev-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) | 1650 | (let ((line-no (flymake-get-prev-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) |
| 1713 | (when (not line-no) | 1651 | (when (not line-no) |
| @@ -1741,9 +1679,9 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1741 | 1679 | ||
| 1742 | (let* ((dir (file-name-directory file-name)) | 1680 | (let* ((dir (file-name-directory file-name)) |
| 1743 | (slash-pos (string-match "/" dir)) | 1681 | (slash-pos (string-match "/" dir)) |
| 1744 | (temp-dir (concat (flymake-ensure-ends-with-slash (flymake-get-temp-dir)) (substring dir (1+ slash-pos))))) | 1682 | (temp-dir (concat (file-name-as-directory (flymake-get-temp-dir)) (substring dir (1+ slash-pos))))) |
| 1745 | 1683 | ||
| 1746 | (file-truename (concat (flymake-ensure-ends-with-slash temp-dir) | 1684 | (file-truename (concat (file-name-as-directory temp-dir) |
| 1747 | (file-name-nondirectory file-name))))) | 1685 | (file-name-nondirectory file-name))))) |
| 1748 | 1686 | ||
| 1749 | (defun flymake-strrchr (str ch) | 1687 | (defun flymake-strrchr (str ch) |
| @@ -1756,14 +1694,14 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1756 | pos)) | 1694 | pos)) |
| 1757 | 1695 | ||
| 1758 | (defun flymake-delete-temp-directory (dir-name) | 1696 | (defun flymake-delete-temp-directory (dir-name) |
| 1759 | "attempt to delete temp dir created by flymake-create-temp-with-folder-structure, do not fail on error." | 1697 | "Attempt to delete temp dir created by `flymake-create-temp-with-folder-structure', do not fail on error." |
| 1760 | (let* ((temp-dir (flymake-get-temp-dir)) | 1698 | (let* ((temp-dir (flymake-get-temp-dir)) |
| 1761 | (suffix (substring dir-name (1+ (length temp-dir)))) | 1699 | (suffix (substring dir-name (1+ (length temp-dir)))) |
| 1762 | (slash-pos nil)) | 1700 | (slash-pos nil)) |
| 1763 | 1701 | ||
| 1764 | (while (> (length suffix) 0) | 1702 | (while (> (length suffix) 0) |
| 1765 | ;+(flymake-log 0 "suffix=%s" suffix) | 1703 | ;;+(flymake-log 0 "suffix=%s" suffix) |
| 1766 | (flymake-safe-delete-directory (file-truename (concat (flymake-ensure-ends-with-slash temp-dir) suffix))) | 1704 | (flymake-safe-delete-directory (file-truename (concat (file-name-as-directory temp-dir) suffix))) |
| 1767 | (setq slash-pos (flymake-strrchr suffix (string-to-char "/"))) | 1705 | (setq slash-pos (flymake-strrchr suffix (string-to-char "/"))) |
| 1768 | (if slash-pos | 1706 | (if slash-pos |
| 1769 | (setq suffix (substring suffix 0 slash-pos)) | 1707 | (setq suffix (substring suffix 0 slash-pos)) |
| @@ -1786,8 +1724,8 @@ Delete temp file." | |||
| 1786 | (flymake-set-buffer-last-change-time buffer nil))) | 1724 | (flymake-set-buffer-last-change-time buffer nil))) |
| 1787 | 1725 | ||
| 1788 | (defun flymake-get-real-file-name (buffer file-name-from-err-msg) | 1726 | (defun flymake-get-real-file-name (buffer file-name-from-err-msg) |
| 1789 | "Translate file name from error message to `real' file name. | 1727 | "Translate file name from error message to \"real\" file name. |
| 1790 | Return full-name. Names are real, not patched." | 1728 | Return full-name. Names are real, not patched." |
| 1791 | (let* ((real-name nil) | 1729 | (let* ((real-name nil) |
| 1792 | (source-file-name (buffer-file-name buffer)) | 1730 | (source-file-name (buffer-file-name buffer)) |
| 1793 | (master-file-name (flymake-get-buffer-value buffer "master-file-name")) | 1731 | (master-file-name (flymake-get-buffer-value buffer "master-file-name")) |
| @@ -1805,7 +1743,7 @@ Return full-name. Names are real, not patched." | |||
| 1805 | (setq file-name-from-err-msg source-file-name)) | 1743 | (setq file-name-from-err-msg source-file-name)) |
| 1806 | 1744 | ||
| 1807 | (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files)) | 1745 | (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files)) |
| 1808 | ; if real-name is nil, than file name from err msg is none of the files we've patched | 1746 | ;; if real-name is nil, than file name from err msg is none of the files we've patched |
| 1809 | (if (not real-name) | 1747 | (if (not real-name) |
| 1810 | (setq real-name (flymake-get-full-nonpatched-file-name file-name-from-err-msg base-dirs))) | 1748 | (setq real-name (flymake-get-full-nonpatched-file-name file-name-from-err-msg base-dirs))) |
| 1811 | (if (not real-name) | 1749 | (if (not real-name) |
| @@ -1825,7 +1763,7 @@ Return full-name. Names are real, not patched." | |||
| 1825 | (let* ((this-dir (nth (1- base-dirs-count) base-dirs)) | 1763 | (let* ((this-dir (nth (1- base-dirs-count) base-dirs)) |
| 1826 | (this-file (nth 0 (nth (1- file-count) files))) | 1764 | (this-file (nth 0 (nth (1- file-count) files))) |
| 1827 | (this-real-name (nth 1 (nth (1- file-count) files)))) | 1765 | (this-real-name (nth 1 (nth (1- file-count) files)))) |
| 1828 | ;+(flymake-log 0 "this-dir=%s this-file=%s this-real=%s msg-file=%s" this-dir this-file this-real-name file-name-from-err-msg) | 1766 | ;;+(flymake-log 0 "this-dir=%s this-file=%s this-real=%s msg-file=%s" this-dir this-file this-real-name file-name-from-err-msg) |
| 1829 | (when (and this-dir this-file (flymake-same-files | 1767 | (when (and this-dir this-file (flymake-same-files |
| 1830 | (flymake-get-absolute-file-name-basedir file-name-from-err-msg this-dir) | 1768 | (flymake-get-absolute-file-name-basedir file-name-from-err-msg this-dir) |
| 1831 | this-file)) | 1769 | this-file)) |
| @@ -1941,7 +1879,7 @@ Use CREATE-TEMP-F for creating temp copy." | |||
| 1941 | (flymake-simple-make-init-impl buffer 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline)) | 1879 | (flymake-simple-make-init-impl buffer 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline)) |
| 1942 | 1880 | ||
| 1943 | (defun flymake-master-make-init (buffer get-incl-dirs-f master-file-masks include-regexp-list) | 1881 | (defun flymake-master-make-init (buffer get-incl-dirs-f master-file-masks include-regexp-list) |
| 1944 | "create make command line for a source file checked via master file compilation" | 1882 | "Create make command line for a source file checked via master file compilation." |
| 1945 | (let* ((make-args nil) | 1883 | (let* ((make-args nil) |
| 1946 | (temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy | 1884 | (temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy |
| 1947 | buffer get-incl-dirs-f 'flymake-create-temp-inplace | 1885 | buffer get-incl-dirs-f 'flymake-create-temp-inplace |
| @@ -1971,7 +1909,7 @@ Use CREATE-TEMP-F for creating temp copy." | |||
| 1971 | (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline)) | 1909 | (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline)) |
| 1972 | 1910 | ||
| 1973 | (defun flymake-simple-java-cleanup (buffer) | 1911 | (defun flymake-simple-java-cleanup (buffer) |
| 1974 | "cleanup after flymake-simple-make-java-init -- delete temp file and dirs" | 1912 | "Cleanup after `flymake-simple-make-java-init' -- delete temp file and dirs." |
| 1975 | (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name"))) | 1913 | (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name"))) |
| 1976 | (flymake-safe-delete-file temp-source-file-name) | 1914 | (flymake-safe-delete-file temp-source-file-name) |
| 1977 | (when temp-source-file-name | 1915 | (when temp-source-file-name |
| @@ -1979,15 +1917,17 @@ Use CREATE-TEMP-F for creating temp copy." | |||
| 1979 | 1917 | ||
| 1980 | ;;;; perl-specific init-cleanup routines | 1918 | ;;;; perl-specific init-cleanup routines |
| 1981 | (defun flymake-perl-init (buffer) | 1919 | (defun flymake-perl-init (buffer) |
| 1982 | (let* ((temp-file (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace)) | 1920 | (let* ((temp-file (flymake-init-create-temp-buffer-copy |
| 1983 | (local-file (concat (flymake-build-relative-filename (file-name-directory (buffer-file-name (current-buffer))) | 1921 | buffer 'flymake-create-temp-inplace)) |
| 1984 | (file-name-directory temp-file)) | 1922 | (local-file (concat (flymake-build-relative-filename |
| 1923 | (file-name-directory buffer-file-name) | ||
| 1924 | (file-name-directory temp-file)) | ||
| 1985 | (file-name-nondirectory temp-file)))) | 1925 | (file-name-nondirectory temp-file)))) |
| 1986 | (list "perl" (list "-wc " local-file)))) | 1926 | (list "perl" (list "-wc " local-file)))) |
| 1987 | 1927 | ||
| 1988 | ;;;; tex-specific init-cleanup routines | 1928 | ;;;; tex-specific init-cleanup routines |
| 1989 | (defun flymake-get-tex-args (file-name) | 1929 | (defun flymake-get-tex-args (file-name) |
| 1990 | ;(list "latex" (list "-c-style-errors" file-name)) | 1930 | ;;(list "latex" (list "-c-style-errors" file-name)) |
| 1991 | (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name))) | 1931 | (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name))) |
| 1992 | 1932 | ||
| 1993 | (defun flymake-simple-tex-init (buffer) | 1933 | (defun flymake-simple-tex-init (buffer) |
| @@ -2005,10 +1945,10 @@ Use CREATE-TEMP-F for creating temp copy." | |||
| 2005 | '(".")) | 1945 | '(".")) |
| 2006 | 1946 | ||
| 2007 | ;;;; xml-specific init-cleanup routines | 1947 | ;;;; xml-specific init-cleanup routines |
| 2008 | (defun flymake-xml-init(buffer) | 1948 | (defun flymake-xml-init (buffer) |
| 2009 | (list "xml" (list "val" (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace)))) | 1949 | (list "xml" (list "val" (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace)))) |
| 2010 | 1950 | ||
| 2011 | (provide 'flymake) | 1951 | (provide 'flymake) |
| 2012 | 1952 | ||
| 2013 | ;;; arch-tag: 8f0d6090-061d-4cac-8862-7c151c4a02dd | 1953 | ;; arch-tag: 8f0d6090-061d-4cac-8862-7c151c4a02dd |
| 2014 | ;;; flymake.el ends here | 1954 | ;;; flymake.el ends here |
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el index 768012c736c..30e1977d28d 100644 --- a/lisp/progmodes/fortran.el +++ b/lisp/progmodes/fortran.el | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | ;;; fortran.el --- Fortran mode for GNU Emacs | 1 | ;;; fortran.el --- Fortran mode for GNU Emacs |
| 2 | 2 | ||
| 3 | ;; Copyright (c) 1986, 93, 94, 95, 97, 98, 99, 2000, 01, 03, 04 | 3 | ;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; 2003, 2004, 2005 Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Michael D. Prange <prange@erl.mit.edu> | 6 | ;; Author: Michael D. Prange <prange@erl.mit.edu> |
| 7 | ;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk> | 7 | ;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk> |
| @@ -95,7 +95,7 @@ with a character in column 6." | |||
| 95 | :group 'fortran-indent) | 95 | :group 'fortran-indent) |
| 96 | 96 | ||
| 97 | (defcustom fortran-if-indent 3 | 97 | (defcustom fortran-if-indent 3 |
| 98 | "*Extra indentation applied to IF blocks." | 98 | "*Extra indentation applied to IF, SELECT CASE and WHERE blocks." |
| 99 | :type 'integer | 99 | :type 'integer |
| 100 | :group 'fortran-indent) | 100 | :group 'fortran-indent) |
| 101 | 101 | ||
| @@ -321,7 +321,8 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?" | |||
| 321 | "while" "inquire" "stop" "return" | 321 | "while" "inquire" "stop" "return" |
| 322 | "include" "open" "close" "read" | 322 | "include" "open" "close" "read" |
| 323 | "write" "format" "print" "select" "case" | 323 | "write" "format" "print" "select" "case" |
| 324 | "cycle" "exit" "rewind" "backspace") | 324 | "cycle" "exit" "rewind" "backspace" |
| 325 | "where" "elsewhere") | ||
| 325 | 'paren) "\\>") | 326 | 'paren) "\\>") |
| 326 | ;; Builtin operators. | 327 | ;; Builtin operators. |
| 327 | (concat "\\." (regexp-opt | 328 | (concat "\\." (regexp-opt |
| @@ -370,6 +371,29 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?" | |||
| 370 | fortran-font-lock-keywords-2))) | 371 | fortran-font-lock-keywords-2))) |
| 371 | "Gaudy level highlighting for Fortran mode.") | 372 | "Gaudy level highlighting for Fortran mode.") |
| 372 | 373 | ||
| 374 | (defvar fortran-font-lock-keywords-4 | ||
| 375 | (append fortran-font-lock-keywords-3 | ||
| 376 | (list (list | ||
| 377 | (concat "\\<" | ||
| 378 | (regexp-opt | ||
| 379 | '("int" "ifix" "idint" "real" "float" "sngl" | ||
| 380 | "dble" "cmplx" "ichar" "char" "aint" "dint" | ||
| 381 | "anint" "dnint" "nint" "idnint" "iabs" "abs" | ||
| 382 | "dabs" "cabs" "mod" "amod" "dmod" "isign" | ||
| 383 | "sign" "dsign" "idim" "dim" "ddim" "dprod" | ||
| 384 | "max" "max0" "amax1" "dmax1" "amax0" "max1" | ||
| 385 | "min0" "amin1" "dmin1" "amin0" "min1" "len" | ||
| 386 | "index" "lge" "lgt" "lle" "llt" "aimag" | ||
| 387 | "conjg" "sqrt" "dsqrt" "csqrt" "exp" "dexp" | ||
| 388 | "cexp" "log" "alog" "dlog" "clog" "log10" | ||
| 389 | "alog10" "dlog10" "sin" "dsin" "csin" "cos" | ||
| 390 | "dcos" "ccos" "tan" "dtan" "asin" "dasin" | ||
| 391 | "acos" "dacos" "atan" "datan" "atan2" "datan2" | ||
| 392 | "sinh" "dsinh" "cosh" "dcosh" "tanh" "dtanh") | ||
| 393 | 'paren) "[ \t]*(") '(1 font-lock-builtin-face)))) | ||
| 394 | "Maximum highlighting for Fortran mode. | ||
| 395 | Consists of level 3 plus all other intrinsics not already highlighted.") | ||
| 396 | |||
| 373 | ;; Comments are real pain in Fortran because there is no way to | 397 | ;; Comments are real pain in Fortran because there is no way to |
| 374 | ;; represent the standard comment syntax in an Emacs syntax table. | 398 | ;; represent the standard comment syntax in an Emacs syntax table. |
| 375 | ;; (We can do so for F90-style). Therefore an unmatched quote in a | 399 | ;; (We can do so for F90-style). Therefore an unmatched quote in a |
| @@ -409,6 +433,64 @@ These get fixed-format comments fontified.") | |||
| 409 | "Value for `imenu-generic-expression' in Fortran mode.") | 433 | "Value for `imenu-generic-expression' in Fortran mode.") |
| 410 | 434 | ||
| 411 | 435 | ||
| 436 | ;; Hideshow support. | ||
| 437 | (defconst fortran-blocks-re | ||
| 438 | (concat "block[ \t]*data\\|select[ \t]*case\\|" | ||
| 439 | (regexp-opt '("do" "if" "interface" "function" "map" "program" | ||
| 440 | "structure" "subroutine" "union" "where"))) | ||
| 441 | "Regexp potentially indicating the start or end of a Fortran \"block\". | ||
| 442 | Omits naked END statements, and DO-loops closed by anything other | ||
| 443 | than ENDDO.") | ||
| 444 | |||
| 445 | (defconst fortran-end-block-re | ||
| 446 | ;; Do-loops terminated by things other than ENDDO cannot be handled | ||
| 447 | ;; with a regexp. This omission does not seem to matter to hideshow... | ||
| 448 | (concat "^[ \t0-9]*\\<end[ \t]*\\(" | ||
| 449 | fortran-blocks-re | ||
| 450 | ;; Naked END statement. | ||
| 451 | "\\|!\\|$\\)") | ||
| 452 | "Regexp matching the end of a Fortran \"block\", from the line start. | ||
| 453 | Note that only ENDDO is handled for the end of a DO-loop. Used | ||
| 454 | in the Fortran entry in `hs-special-modes-alist'.") | ||
| 455 | |||
| 456 | (defconst fortran-start-block-re | ||
| 457 | (concat | ||
| 458 | "^[ \t0-9]*\\(" ; statement number | ||
| 459 | ;; Structure label for DO, IF, SELECT, WHERE. | ||
| 460 | "\\(\\(\\sw+[ \t]*:[ \t]*\\)?" | ||
| 461 | ;; IF blocks are a nuisance: | ||
| 462 | ;; IF ( ... ) foo is not a block, but a single statement. | ||
| 463 | ;; IF ( ... ) THEN can be split over multiple lines. | ||
| 464 | ;; [So can, eg, a DO WHILE (... ), but that is less common, I hope.] | ||
| 465 | ;; The regexp below allows for it to be split over at most 2 lines. | ||
| 466 | ;; That leads to the problem of not matching two consecutive IF | ||
| 467 | ;; statements as one, eg: | ||
| 468 | ;; IF ( ... ) foo | ||
| 469 | ;; IF ( ... ) THEN | ||
| 470 | ;; It simply is not possible to do this in a 100% correct fashion | ||
| 471 | ;; using a regexp - see the functions fortran-end-if, | ||
| 472 | ;; fortran-beginning-if for the hoops we have to go through. | ||
| 473 | ;; An alternative is to match on THEN at a line end, eg: | ||
| 474 | ;; ".*)[ \t]*then[ \t]*\\($\\|!\\)" | ||
| 475 | ;; This would also match ELSE branches, though. This does not seem | ||
| 476 | ;; right to me, because then one has neighbouring blocks that are | ||
| 477 | ;; not nested in each other. | ||
| 478 | "\\(if[ \t]*(\\(.*\\|" | ||
| 479 | ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|" | ||
| 480 | "do\\|select[ \t]*case\\|where\\)\\)\\|" | ||
| 481 | (regexp-opt '("interface" "function" "map" "program" | ||
| 482 | "structure" "subroutine" "union")) | ||
| 483 | "\\|block[ \t]*data\\)[ \t]*") | ||
| 484 | "Regexp matching the start of a Fortran \"block\", from the line start. | ||
| 485 | A simple regexp cannot do this in fully correct fashion, so this | ||
| 486 | tries to strike a compromise between complexity and flexibility. | ||
| 487 | Used in the Fortran entry in `hs-special-modes-alist'.") | ||
| 488 | |||
| 489 | (add-to-list 'hs-special-modes-alist | ||
| 490 | `(fortran-mode ,fortran-start-block-re ,fortran-end-block-re | ||
| 491 | "^[cC*!]" fortran-end-of-block nil)) | ||
| 492 | |||
| 493 | |||
| 412 | (defvar fortran-mode-syntax-table | 494 | (defvar fortran-mode-syntax-table |
| 413 | (let ((table (make-syntax-table))) | 495 | (let ((table (make-syntax-table))) |
| 414 | ;; We might like `;' to be punctuation (g77 multi-statement | 496 | ;; We might like `;' to be punctuation (g77 multi-statement |
| @@ -422,7 +504,8 @@ These get fixed-format comments fontified.") | |||
| 422 | (modify-syntax-entry ?/ "." table) | 504 | (modify-syntax-entry ?/ "." table) |
| 423 | (modify-syntax-entry ?\' "\"" table) | 505 | (modify-syntax-entry ?\' "\"" table) |
| 424 | (modify-syntax-entry ?\" "\"" table) | 506 | (modify-syntax-entry ?\" "\"" table) |
| 425 | ;; Consistent with GNU Fortran -- see the manual. | 507 | ;; Consistent with GNU Fortran's default -- see the manual. |
| 508 | ;; The F77 standard imposes no rule on this issue. | ||
| 426 | (modify-syntax-entry ?\\ "\\" table) | 509 | (modify-syntax-entry ?\\ "\\" table) |
| 427 | ;; This might be better as punctuation, as for C, but this way you | 510 | ;; This might be better as punctuation, as for C, but this way you |
| 428 | ;; can treat floating-point numbers as symbols. | 511 | ;; can treat floating-point numbers as symbols. |
| @@ -446,6 +529,8 @@ These get fixed-format comments fontified.") | |||
| 446 | (define-key map "\C-c;" 'fortran-comment-region) | 529 | (define-key map "\C-c;" 'fortran-comment-region) |
| 447 | (define-key map "\M-;" 'fortran-indent-comment) | 530 | (define-key map "\M-;" 'fortran-indent-comment) |
| 448 | (define-key map "\M-\n" 'fortran-split-line) | 531 | (define-key map "\M-\n" 'fortran-split-line) |
| 532 | (define-key map "\M-\C-n" 'fortran-end-of-block) | ||
| 533 | (define-key map "\M-\C-p" 'fortran-beginning-of-block) | ||
| 449 | (define-key map "\M-\C-q" 'fortran-indent-subprogram) | 534 | (define-key map "\M-\C-q" 'fortran-indent-subprogram) |
| 450 | (define-key map "\C-c\C-w" 'fortran-window-create-momentarily) | 535 | (define-key map "\C-c\C-w" 'fortran-window-create-momentarily) |
| 451 | (define-key map "\C-c\C-r" 'fortran-column-ruler) | 536 | (define-key map "\C-c\C-r" 'fortran-column-ruler) |
| @@ -606,7 +691,7 @@ Key definitions: | |||
| 606 | 691 | ||
| 607 | Variables controlling indentation style and extra features: | 692 | Variables controlling indentation style and extra features: |
| 608 | 693 | ||
| 609 | `comment-start' | 694 | `fortran-comment-line-start' |
| 610 | To use comments starting with `!', set this to the string \"!\". | 695 | To use comments starting with `!', set this to the string \"!\". |
| 611 | `fortran-do-indent' | 696 | `fortran-do-indent' |
| 612 | Extra indentation within DO blocks (default 3). | 697 | Extra indentation within DO blocks (default 3). |
| @@ -696,7 +781,8 @@ with no args, if that value is non-nil." | |||
| 696 | '((fortran-font-lock-keywords | 781 | '((fortran-font-lock-keywords |
| 697 | fortran-font-lock-keywords-1 | 782 | fortran-font-lock-keywords-1 |
| 698 | fortran-font-lock-keywords-2 | 783 | fortran-font-lock-keywords-2 |
| 699 | fortran-font-lock-keywords-3) | 784 | fortran-font-lock-keywords-3 |
| 785 | fortran-font-lock-keywords-4) | ||
| 700 | nil t ((?/ . "$/") ("_$" . "w")) | 786 | nil t ((?/ . "$/") ("_$" . "w")) |
| 701 | fortran-beginning-of-subprogram)) | 787 | fortran-beginning-of-subprogram)) |
| 702 | (set (make-local-variable 'font-lock-syntactic-keywords) | 788 | (set (make-local-variable 'font-lock-syntactic-keywords) |
| @@ -1059,6 +1145,84 @@ Directive lines are treated as comments." | |||
| 1059 | (if (not not-last-statement) | 1145 | (if (not not-last-statement) |
| 1060 | 'last-statement))) | 1146 | 'last-statement))) |
| 1061 | 1147 | ||
| 1148 | (defun fortran-looking-at-if-then () | ||
| 1149 | "Return non-nil if at the start of a line with an IF ... THEN statement." | ||
| 1150 | ;; cf f90-looking-at-if-then. | ||
| 1151 | (let ((p (point)) | ||
| 1152 | (i (fortran-beginning-if))) | ||
| 1153 | (if i | ||
| 1154 | (save-excursion | ||
| 1155 | (goto-char i) | ||
| 1156 | (beginning-of-line) | ||
| 1157 | (= (point) p))))) | ||
| 1158 | |||
| 1159 | ;; Used in hs-special-modes-alist. | ||
| 1160 | (defun fortran-end-of-block (&optional num) | ||
| 1161 | "Move point forward to the end of the current code block. | ||
| 1162 | With optional argument NUM, go forward that many balanced blocks. | ||
| 1163 | If NUM is negative, go backward to the start of a block. Does | ||
| 1164 | not check for consistency of block types. Interactively, pushes | ||
| 1165 | mark before moving point." | ||
| 1166 | (interactive "p") | ||
| 1167 | (if (interactive-p) (push-mark (point) t)) | ||
| 1168 | (and num (< num 0) (fortran-beginning-of-block (- num))) | ||
| 1169 | (let ((case-fold-search t) | ||
| 1170 | (count (or num 1))) | ||
| 1171 | (end-of-line) | ||
| 1172 | (while (and (> count 0) | ||
| 1173 | (re-search-forward | ||
| 1174 | (concat "\\(" fortran-blocks-re | ||
| 1175 | (if fortran-check-all-num-for-matching-do | ||
| 1176 | "\\|^[ \t]*[0-9]+" "") | ||
| 1177 | "\\|continue\\|end\\)\\>") | ||
| 1178 | nil 'move)) | ||
| 1179 | (beginning-of-line) | ||
| 1180 | (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re)) | ||
| 1181 | (fortran-looking-at-if-then) | ||
| 1182 | (looking-at fortran-start-block-re)) | ||
| 1183 | (setq count (1+ count)) | ||
| 1184 | (if (or (looking-at fortran-end-block-re) | ||
| 1185 | (and (or (looking-at "^[0-9 \t]*continue") | ||
| 1186 | (and fortran-check-all-num-for-matching-do | ||
| 1187 | (looking-at "[ \t]*[0-9]+"))) | ||
| 1188 | (fortran-check-for-matching-do))) | ||
| 1189 | (setq count (1- count)))) | ||
| 1190 | (end-of-line)) | ||
| 1191 | (if (> count 0) (error "Missing block end")))) | ||
| 1192 | |||
| 1193 | (defun fortran-beginning-of-block (&optional num) | ||
| 1194 | "Move point backwards to the start of the current code block. | ||
| 1195 | With optional argument NUM, go backward that many balanced | ||
| 1196 | blocks. If NUM is negative, go forward to the end of a block. | ||
| 1197 | Does not check for consistency of block types. Interactively, | ||
| 1198 | pushes mark before moving point." | ||
| 1199 | (interactive "p") | ||
| 1200 | (if (interactive-p) (push-mark (point) t)) | ||
| 1201 | (and num (< num 0) (fortran-end-of-block (- num))) | ||
| 1202 | (let ((case-fold-search t) | ||
| 1203 | (count (or num 1))) | ||
| 1204 | (beginning-of-line) | ||
| 1205 | (while (and (> count 0) | ||
| 1206 | (re-search-backward | ||
| 1207 | (concat "\\(" fortran-blocks-re | ||
| 1208 | (if fortran-check-all-num-for-matching-do | ||
| 1209 | "\\|^[ \t]*[0-9]+" "") | ||
| 1210 | "\\|continue\\|end\\)\\>") | ||
| 1211 | nil 'move)) | ||
| 1212 | (beginning-of-line) | ||
| 1213 | (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re)) | ||
| 1214 | (fortran-looking-at-if-then) | ||
| 1215 | (looking-at fortran-start-block-re)) | ||
| 1216 | (setq count (1- count)) | ||
| 1217 | (if (or (looking-at fortran-end-block-re) | ||
| 1218 | (and (or (looking-at "^[0-9 \t]*continue") | ||
| 1219 | (and fortran-check-all-num-for-matching-do | ||
| 1220 | (looking-at "[ \t]*[0-9]+"))) | ||
| 1221 | (fortran-check-for-matching-do))) | ||
| 1222 | (setq count (1+ count))))) | ||
| 1223 | ;; Includes an un-named main program block. | ||
| 1224 | (if (> count 0) (error "Missing block start")))) | ||
| 1225 | |||
| 1062 | 1226 | ||
| 1063 | (defun fortran-blink-match (regex keyword find-begin) | 1227 | (defun fortran-blink-match (regex keyword find-begin) |
| 1064 | "From a line matching REGEX, blink matching KEYWORD statement line. | 1228 | "From a line matching REGEX, blink matching KEYWORD statement line. |
| @@ -1679,8 +1843,9 @@ If ALL is nil, only match comments that start in column > 0." | |||
| 1679 | (1+ (point))))) | 1843 | (1+ (point))))) |
| 1680 | (if (re-search-forward "\\S\"\\s\"\\S\"" eol t) | 1844 | (if (re-search-forward "\\S\"\\s\"\\S\"" eol t) |
| 1681 | (backward-char 2)) | 1845 | (backward-char 2)) |
| 1682 | ;; If the current string is longer than 72 - 6 chars, | 1846 | ;; If the current string is longer than (fill-column |
| 1683 | ;; break it at the fill column (else infinite loop). | 1847 | ;; - 6) chars, break it at the fill column (else |
| 1848 | ;; infinite loop). | ||
| 1684 | (if (> (- (point) start) | 1849 | (if (> (- (point) start) |
| 1685 | (- fill-column 6 fortran-continuation-indent)) | 1850 | (- fill-column 6 fortran-continuation-indent)) |
| 1686 | fcpoint | 1851 | fcpoint |
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index cb58a53a0d3..3e4796436f1 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el | |||
| @@ -1299,10 +1299,10 @@ static char *magick[] = { | |||
| 1299 | (defvar gdb-breakpoints-mode-map | 1299 | (defvar gdb-breakpoints-mode-map |
| 1300 | (let ((map (make-sparse-keymap)) | 1300 | (let ((map (make-sparse-keymap)) |
| 1301 | (menu (make-sparse-keymap "Breakpoints"))) | 1301 | (menu (make-sparse-keymap "Breakpoints"))) |
| 1302 | (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint)) | 1302 | (define-key menu [quit] '("Quit" . kill-this-buffer)) |
| 1303 | (define-key menu [delete] '("Delete" . gdb-delete-breakpoint)) | ||
| 1304 | (define-key menu [goto] '("Goto" . gdb-goto-breakpoint)) | 1303 | (define-key menu [goto] '("Goto" . gdb-goto-breakpoint)) |
| 1305 | 1304 | (define-key menu [delete] '("Delete" . gdb-delete-breakpoint)) | |
| 1305 | (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint)) | ||
| 1306 | (suppress-keymap map) | 1306 | (suppress-keymap map) |
| 1307 | (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) | 1307 | (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) |
| 1308 | (define-key map " " 'gdb-toggle-breakpoint) | 1308 | (define-key map " " 'gdb-toggle-breakpoint) |
| @@ -1310,6 +1310,7 @@ static char *magick[] = { | |||
| 1310 | (define-key map "q" 'kill-this-buffer) | 1310 | (define-key map "q" 'kill-this-buffer) |
| 1311 | (define-key map "\r" 'gdb-goto-breakpoint) | 1311 | (define-key map "\r" 'gdb-goto-breakpoint) |
| 1312 | (define-key map [mouse-2] 'gdb-goto-breakpoint) | 1312 | (define-key map [mouse-2] 'gdb-goto-breakpoint) |
| 1313 | (define-key map [follow-link] 'mouse-face) | ||
| 1313 | map)) | 1314 | map)) |
| 1314 | 1315 | ||
| 1315 | (defun gdb-breakpoints-mode () | 1316 | (defun gdb-breakpoints-mode () |
| @@ -1435,6 +1436,7 @@ static char *magick[] = { | |||
| 1435 | (define-key map "q" 'kill-this-buffer) | 1436 | (define-key map "q" 'kill-this-buffer) |
| 1436 | (define-key map "\r" 'gdb-frames-select) | 1437 | (define-key map "\r" 'gdb-frames-select) |
| 1437 | (define-key map [mouse-2] 'gdb-frames-select) | 1438 | (define-key map [mouse-2] 'gdb-frames-select) |
| 1439 | (define-key map [follow-link] 'mouse-face) | ||
| 1438 | map)) | 1440 | map)) |
| 1439 | 1441 | ||
| 1440 | (defun gdb-frames-mode () | 1442 | (defun gdb-frames-mode () |
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 0988599ed54..1f9284db9cb 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el | |||
| @@ -531,6 +531,9 @@ off the specialized speedbar mode." | |||
| 531 | 531 | ||
| 532 | (defvar gdb-first-prompt t) | 532 | (defvar gdb-first-prompt t) |
| 533 | 533 | ||
| 534 | (defvar gud-filter-pending-text nil | ||
| 535 | "Non-nil means this is text that has been saved for later in `gud-filter'.") | ||
| 536 | |||
| 534 | ;;;###autoload | 537 | ;;;###autoload |
| 535 | (defun gdb (command-line) | 538 | (defun gdb (command-line) |
| 536 | "Run gdb on program FILE in buffer *gud-FILE*. | 539 | "Run gdb on program FILE in buffer *gud-FILE*. |
| @@ -562,6 +565,7 @@ and source-file directory for your debugger." | |||
| 562 | (setq comint-prompt-regexp "^(.*gdb[+]?) *") | 565 | (setq comint-prompt-regexp "^(.*gdb[+]?) *") |
| 563 | (setq paragraph-start comint-prompt-regexp) | 566 | (setq paragraph-start comint-prompt-regexp) |
| 564 | (setq gdb-first-prompt t) | 567 | (setq gdb-first-prompt t) |
| 568 | (setq gud-filter-pending-text nil) | ||
| 565 | (run-hooks 'gdb-mode-hook)) | 569 | (run-hooks 'gdb-mode-hook)) |
| 566 | 570 | ||
| 567 | ;; One of the nice features of GDB is its impressive support for | 571 | ;; One of the nice features of GDB is its impressive support for |
| @@ -2445,9 +2449,6 @@ comint mode, which see." | |||
| 2445 | "Non-nil means don't process anything from the debugger right now. | 2449 | "Non-nil means don't process anything from the debugger right now. |
| 2446 | It is saved for when this flag is not set.") | 2450 | It is saved for when this flag is not set.") |
| 2447 | 2451 | ||
| 2448 | (defvar gud-filter-pending-text nil | ||
| 2449 | "Non-nil means this is text that has been saved for later in `gud-filter'.") | ||
| 2450 | |||
| 2451 | ;; These functions are responsible for inserting output from your debugger | 2452 | ;; These functions are responsible for inserting output from your debugger |
| 2452 | ;; into the buffer. The hard work is done by the method that is | 2453 | ;; into the buffer. The hard work is done by the method that is |
| 2453 | ;; the value of gud-marker-filter. | 2454 | ;; the value of gud-marker-filter. |
| @@ -2516,19 +2517,22 @@ It is saved for when this flag is not set.") | |||
| 2516 | (gud-filter proc "")))))) | 2517 | (gud-filter proc "")))))) |
| 2517 | 2518 | ||
| 2518 | (defvar gud-minor-mode-type nil) | 2519 | (defvar gud-minor-mode-type nil) |
| 2520 | (defvar gud-overlay-arrow-position nil) | ||
| 2521 | (put 'gud-overlay-arrow-position 'overlay-arrow-string "=>") | ||
| 2522 | (add-to-list 'overlay-arrow-variable-list 'gud-overlay-arrow-position) | ||
| 2519 | 2523 | ||
| 2520 | (defun gud-sentinel (proc msg) | 2524 | (defun gud-sentinel (proc msg) |
| 2521 | (cond ((null (buffer-name (process-buffer proc))) | 2525 | (cond ((null (buffer-name (process-buffer proc))) |
| 2522 | ;; buffer killed | 2526 | ;; buffer killed |
| 2523 | ;; Stop displaying an arrow in a source file. | 2527 | ;; Stop displaying an arrow in a source file. |
| 2524 | (setq overlay-arrow-position nil) | 2528 | (setq gud-overlay-arrow-position nil) |
| 2525 | (set-process-buffer proc nil) | 2529 | (set-process-buffer proc nil) |
| 2526 | (if (memq gud-minor-mode-type '(gdbmi gdba)) | 2530 | (if (memq gud-minor-mode-type '(gdbmi gdba)) |
| 2527 | (gdb-reset) | 2531 | (gdb-reset) |
| 2528 | (gud-reset))) | 2532 | (gud-reset))) |
| 2529 | ((memq (process-status proc) '(signal exit)) | 2533 | ((memq (process-status proc) '(signal exit)) |
| 2530 | ;; Stop displaying an arrow in a source file. | 2534 | ;; Stop displaying an arrow in a source file. |
| 2531 | (setq overlay-arrow-position nil) | 2535 | (setq gud-overlay-arrow-position nil) |
| 2532 | (with-current-buffer gud-comint-buffer | 2536 | (with-current-buffer gud-comint-buffer |
| 2533 | (if (memq gud-minor-mode-type '(gdbmi gdba)) | 2537 | (if (memq gud-minor-mode-type '(gdbmi gdba)) |
| 2534 | (gdb-reset) | 2538 | (gdb-reset) |
| @@ -2611,13 +2615,13 @@ Obeying it means displaying in another window the specified file and line." | |||
| 2611 | (goto-line line) | 2615 | (goto-line line) |
| 2612 | (setq pos (point)) | 2616 | (setq pos (point)) |
| 2613 | (setq overlay-arrow-string "=>") | 2617 | (setq overlay-arrow-string "=>") |
| 2614 | (or overlay-arrow-position | 2618 | (or gud-overlay-arrow-position |
| 2615 | (setq overlay-arrow-position (make-marker))) | 2619 | (setq gud-overlay-arrow-position (make-marker))) |
| 2616 | (set-marker overlay-arrow-position (point) (current-buffer))) | 2620 | (set-marker gud-overlay-arrow-position (point) (current-buffer))) |
| 2617 | (cond ((or (< pos (point-min)) (> pos (point-max))) | 2621 | (cond ((or (< pos (point-min)) (> pos (point-max))) |
| 2618 | (widen) | 2622 | (widen) |
| 2619 | (goto-char pos)))) | 2623 | (goto-char pos)))) |
| 2620 | (if window (set-window-point window overlay-arrow-position)))))) | 2624 | (if window (set-window-point window gud-overlay-arrow-position)))))) |
| 2621 | 2625 | ||
| 2622 | ;; The gud-call function must do the right thing whether its invoking | 2626 | ;; The gud-call function must do the right thing whether its invoking |
| 2623 | ;; keystroke is from the GUD buffer itself (via major-mode binding) | 2627 | ;; keystroke is from the GUD buffer itself (via major-mode binding) |
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index 44675470b67..221a6f4aebb 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | ;; idlw-shell.el --- run IDL as an inferior process of Emacs. | 1 | ;; idlw-shell.el --- run IDL as an inferior process of Emacs. |
| 2 | ;; Copyright (c) 1999,2000,2001,2002,2003,2004 Free Software Foundation | 2 | ;; Copyright (c) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation |
| 3 | 3 | ||
| 4 | ;; Authors: J.D. Smith <jdsmith@as.arizona.edu> | 4 | ;; Authors: J.D. Smith <jdsmith@as.arizona.edu> |
| 5 | ;; Carsten Dominik <dominik@astro.uva.nl> | 5 | ;; Carsten Dominik <dominik@astro.uva.nl> |
| @@ -437,7 +437,7 @@ end" | |||
| 437 | 437 | ||
| 438 | (defcustom idlwave-shell-mark-stop-line t | 438 | (defcustom idlwave-shell-mark-stop-line t |
| 439 | "*Non-nil means, mark the source code line where IDL is currently stopped. | 439 | "*Non-nil means, mark the source code line where IDL is currently stopped. |
| 440 | Value decides about the method which is used to mark the line. Legal values | 440 | Value decides about the method which is used to mark the line. Valid values |
| 441 | are: | 441 | are: |
| 442 | 442 | ||
| 443 | nil Do not mark the line | 443 | nil Do not mark the line |
| @@ -494,7 +494,7 @@ where IDL is stopped, when in Electric Debug Mode." | |||
| 494 | 494 | ||
| 495 | (defcustom idlwave-shell-mark-breakpoints t | 495 | (defcustom idlwave-shell-mark-breakpoints t |
| 496 | "*Non-nil means, mark breakpoints in the source files. | 496 | "*Non-nil means, mark breakpoints in the source files. |
| 497 | Legal values are: | 497 | Valid values are: |
| 498 | nil Do not mark breakpoints. | 498 | nil Do not mark breakpoints. |
| 499 | 'face Highlight line with `idlwave-shell-breakpoint-face'. | 499 | 'face Highlight line with `idlwave-shell-breakpoint-face'. |
| 500 | 'glyph Red dot at the beginning of line. If the display does not | 500 | 'glyph Red dot at the beginning of line. If the display does not |
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el index 8eba3847308..35e4b68c9b8 100644 --- a/lisp/progmodes/idlwave.el +++ b/lisp/progmodes/idlwave.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;; idlwave.el --- IDL editing mode for GNU Emacs | 1 | ;; idlwave.el --- IDL editing mode for GNU Emacs |
| 2 | ;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation | 2 | ;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation | ||
| 3 | 4 | ||
| 4 | ;; Authors: J.D. Smith <jdsmith@as.arizona.edu> | 5 | ;; Authors: J.D. Smith <jdsmith@as.arizona.edu> |
| 5 | ;; Carsten Dominik <dominik@science.uva.nl> | 6 | ;; Carsten Dominik <dominik@science.uva.nl> |
| @@ -584,7 +585,7 @@ for which to assume this can be set here." | |||
| 584 | (defcustom idlwave-completion-show-classes 1 | 585 | (defcustom idlwave-completion-show-classes 1 |
| 585 | "*Number of classes to show when completing object methods and keywords. | 586 | "*Number of classes to show when completing object methods and keywords. |
| 586 | When completing methods or keywords for an object with unknown class, | 587 | When completing methods or keywords for an object with unknown class, |
| 587 | the *Completions* buffer will show the legal classes for each completion | 588 | the *Completions* buffer will show the valid classes for each completion |
| 588 | like this: | 589 | like this: |
| 589 | 590 | ||
| 590 | MyMethod <Class1,Class2,Class3> | 591 | MyMethod <Class1,Class2,Class3> |
| @@ -5337,7 +5338,7 @@ end | |||
| 5337 | 5338 | ||
| 5338 | (defun idlwave-complete (&optional arg module class) | 5339 | (defun idlwave-complete (&optional arg module class) |
| 5339 | "Complete a function, procedure or keyword name at point. | 5340 | "Complete a function, procedure or keyword name at point. |
| 5340 | This function is smart and figures out what can be legally completed | 5341 | This function is smart and figures out what can be completed |
| 5341 | at this point. | 5342 | at this point. |
| 5342 | - At the beginning of a statement it completes procedure names. | 5343 | - At the beginning of a statement it completes procedure names. |
| 5343 | - In the middle of a statement it completes function names. | 5344 | - In the middle of a statement it completes function names. |
| @@ -5587,7 +5588,7 @@ other completions will be tried.") | |||
| 5587 | (symbolp what) | 5588 | (symbolp what) |
| 5588 | (assoc (symbol-name what) what-list)) | 5589 | (assoc (symbol-name what) what-list)) |
| 5589 | what) | 5590 | what) |
| 5590 | (t (error "Illegal WHAT")))) | 5591 | (t (error "Invalid WHAT")))) |
| 5591 | (nil-list '(nil nil nil nil)) | 5592 | (nil-list '(nil nil nil nil)) |
| 5592 | (class-list (list nil nil (or class t) nil))) | 5593 | (class-list (list nil nil (or class t) nil))) |
| 5593 | 5594 | ||
| @@ -5656,7 +5657,7 @@ other completions will be tried.") | |||
| 5656 | ((eq what 'class) | 5657 | ((eq what 'class) |
| 5657 | (list nil-list nil-list 'class nil-list nil)) | 5658 | (list nil-list nil-list 'class nil-list nil)) |
| 5658 | 5659 | ||
| 5659 | (t (error "Illegal value for WHAT"))))) | 5660 | (t (error "Invalid value for WHAT"))))) |
| 5660 | 5661 | ||
| 5661 | (defun idlwave-completing-read (&rest args) | 5662 | (defun idlwave-completing-read (&rest args) |
| 5662 | ;; Completing read, case insensitive | 5663 | ;; Completing read, case insensitive |
| @@ -7728,7 +7729,7 @@ from all classes if class equals t." | |||
| 7728 | keywords)) | 7729 | keywords)) |
| 7729 | 7730 | ||
| 7730 | (defun idlwave-expand-keyword (keyword module) | 7731 | (defun idlwave-expand-keyword (keyword module) |
| 7731 | "Expand KEYWORD to one of the legal keyword parameters of MODULE. | 7732 | "Expand KEYWORD to one of the valid keyword parameters of MODULE. |
| 7732 | KEYWORD may be an exact match or an abbreviation of a keyword. | 7733 | KEYWORD may be an exact match or an abbreviation of a keyword. |
| 7733 | If the match is exact, KEYWORD itself is returned, even if there may be other | 7734 | If the match is exact, KEYWORD itself is returned, even if there may be other |
| 7734 | keywords of which KEYWORD is an abbreviation. This is necessary because some | 7735 | keywords of which KEYWORD is an abbreviation. This is necessary because some |
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 745bc57a9b0..5073f2bc23a 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; python.el --- silly walks for Python | 1 | ;;; python.el --- silly walks for Python |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2003, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Dave Love <fx@gnu.org> | 5 | ;; Author: Dave Love <fx@gnu.org> |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| @@ -336,14 +336,14 @@ keyword `raise', `break', `continue' or `pass'." | |||
| 336 | (unless bos (python-beginning-of-statement)) | 336 | (unless bos (python-beginning-of-statement)) |
| 337 | (back-to-indentation) | 337 | (back-to-indentation) |
| 338 | (looking-at (rx (and (or "return" "raise" "break" "continue" "pass") | 338 | (looking-at (rx (and (or "return" "raise" "break" "continue" "pass") |
| 339 | word-end))))) | 339 | symbol-end))))) |
| 340 | 340 | ||
| 341 | (defun python-outdent-p () | 341 | (defun python-outdent-p () |
| 342 | "Return non-nil if current line should outdent a level." | 342 | "Return non-nil if current line should outdent a level." |
| 343 | (save-excursion | 343 | (save-excursion |
| 344 | (back-to-indentation) | 344 | (back-to-indentation) |
| 345 | (and (looking-at (rx (and (or (and (or "else" "finally") word-end) | 345 | (and (looking-at (rx (and (or (and (or "else" "finally") symbol-end) |
| 346 | (and (or "except" "elif") word-end | 346 | (and (or "except" "elif") symbol-end |
| 347 | (1+ (not (any ?:))))) | 347 | (1+ (not (any ?:))))) |
| 348 | (optional space) ":" (optional space) | 348 | (optional space) ":" (optional space) |
| 349 | (or (syntax comment-start) line-end)))) | 349 | (or (syntax comment-start) line-end)))) |
| @@ -355,8 +355,8 @@ keyword `raise', `break', `continue' or `pass'." | |||
| 355 | ;; Fixme: check this | 355 | ;; Fixme: check this |
| 356 | (not (looking-at (rx (and (or (and (or "if" "elif" "except" | 356 | (not (looking-at (rx (and (or (and (or "if" "elif" "except" |
| 357 | "for" "while") | 357 | "for" "while") |
| 358 | word-end (1+ (not (any ?:)))) | 358 | symbol-end (1+ (not (any ?:)))) |
| 359 | (and "try" word-end)) | 359 | (and "try" symbol-end)) |
| 360 | (optional space) ":" (optional space) | 360 | (optional space) ":" (optional space) |
| 361 | (or (syntax comment-start) line-end))))) | 361 | (or (syntax comment-start) line-end))))) |
| 362 | (progn (end-of-line) | 362 | (progn (end-of-line) |
| @@ -1098,28 +1098,40 @@ Don't save anything for STR matching `inferior-python-filter-regexp'." | |||
| 1098 | (defvar python-preoutput-continuation nil | 1098 | (defvar python-preoutput-continuation nil |
| 1099 | "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.") | 1099 | "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.") |
| 1100 | 1100 | ||
| 1101 | (defvar python-preoutput-leftover nil) | ||
| 1102 | |||
| 1101 | ;; Using this stops us getting lines in the buffer like | 1103 | ;; Using this stops us getting lines in the buffer like |
| 1102 | ;; >>> ... ... >>> | 1104 | ;; >>> ... ... >>> |
| 1103 | ;; Also look for (and delete) an `_emacs_ok' string and call | 1105 | ;; Also look for (and delete) an `_emacs_ok' string and call |
| 1104 | ;; `python-preoutput-continuation' if we get it. | 1106 | ;; `python-preoutput-continuation' if we get it. |
| 1105 | (defun python-preoutput-filter (s) | 1107 | (defun python-preoutput-filter (s) |
| 1106 | "`comint-preoutput-filter-functions' function: ignore prompts not at bol." | 1108 | "`comint-preoutput-filter-functions' function: ignore prompts not at bol." |
| 1109 | (when python-preoutput-leftover | ||
| 1110 | (setq s (concat python-preoutput-leftover s)) | ||
| 1111 | (setq python-preoutput-leftover nil)) | ||
| 1107 | (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>")) | 1112 | (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>")) |
| 1108 | " " string-end)) | 1113 | " " string-end)) |
| 1109 | s) | 1114 | s) |
| 1110 | (/= (let ((inhibit-field-text-motion t)) | 1115 | (/= (let ((inhibit-field-text-motion t)) |
| 1111 | (line-beginning-position)) | 1116 | (line-beginning-position)) |
| 1112 | (point))) | 1117 | (point))) |
| 1113 | "") | 1118 | "") |
| 1114 | ((string= s "_emacs_ok\n") | 1119 | ((string= s "_emacs_ok\n") |
| 1115 | (when python-preoutput-continuation | 1120 | (when python-preoutput-continuation |
| 1116 | (funcall python-preoutput-continuation) | 1121 | (funcall python-preoutput-continuation) |
| 1117 | (setq python-preoutput-continuation nil)) | 1122 | (setq python-preoutput-continuation nil)) |
| 1118 | "") | 1123 | "") |
| 1119 | ((string-match "_emacs_out \\(.*\\)\n" s) | 1124 | ((string-match "_emacs_out \\(.*\\)\n" s) |
| 1120 | (setq python-preoutput-result (match-string 1 s)) | 1125 | (setq python-preoutput-result (match-string 1 s)) |
| 1126 | "") | ||
| 1127 | ((string-match ".*\n" s) | ||
| 1128 | s) | ||
| 1129 | ((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s))) | ||
| 1130 | (let ((end (min (length "_emacs_out ") (length s)))) | ||
| 1131 | (eq t (compare-strings s nil end "_emacs_out " nil end)))) | ||
| 1132 | (setq python-preoutput-leftover s) | ||
| 1121 | "") | 1133 | "") |
| 1122 | (t s))) | 1134 | (t s))) |
| 1123 | 1135 | ||
| 1124 | ;;;###autoload | 1136 | ;;;###autoload |
| 1125 | (defun run-python (&optional cmd noshow) | 1137 | (defun run-python (&optional cmd noshow) |
| @@ -1359,7 +1371,9 @@ The result is what follows `_emacs_out' in the output (or nil)." | |||
| 1359 | (let ((proc (python-proc))) | 1371 | (let ((proc (python-proc))) |
| 1360 | (python-send-string string) | 1372 | (python-send-string string) |
| 1361 | (setq python-preoutput-result nil) | 1373 | (setq python-preoutput-result nil) |
| 1362 | (accept-process-output proc 5) | 1374 | (while (progn |
| 1375 | (accept-process-output proc 5) | ||
| 1376 | python-preoutput-leftover)) | ||
| 1363 | python-preoutput-result)) | 1377 | python-preoutput-result)) |
| 1364 | 1378 | ||
| 1365 | ;; Fixme: try to make it work with point in the arglist. Also, is | 1379 | ;; Fixme: try to make it work with point in the arglist. Also, is |
| @@ -1562,7 +1576,8 @@ of current line." | |||
| 1562 | (beginning-of-defun) | 1576 | (beginning-of-defun) |
| 1563 | (if (looking-at (rx (and (0+ space) (or "def" "class") (1+ space) | 1577 | (if (looking-at (rx (and (0+ space) (or "def" "class") (1+ space) |
| 1564 | (group (1+ (or word (syntax symbol)))) | 1578 | (group (1+ (or word (syntax symbol)))) |
| 1565 | word-end))) | 1579 | ;; Greediness makes this unnecessary? --Stef |
| 1580 | symbol-end))) | ||
| 1566 | (push (match-string 1) accum))) | 1581 | (push (match-string 1) accum))) |
| 1567 | (if accum (mapconcat 'identity accum "."))))) | 1582 | (if accum (mapconcat 'identity accum "."))))) |
| 1568 | 1583 | ||
| @@ -1702,9 +1717,9 @@ lines count as headers. | |||
| 1702 | '(python-font-lock-keywords nil nil ((?_ . "w")) nil | 1717 | '(python-font-lock-keywords nil nil ((?_ . "w")) nil |
| 1703 | (font-lock-syntactic-keywords | 1718 | (font-lock-syntactic-keywords |
| 1704 | . python-font-lock-syntactic-keywords) | 1719 | . python-font-lock-syntactic-keywords) |
| 1705 | ;;; This probably isn't worth it. | 1720 | ;; This probably isn't worth it. |
| 1706 | ;;; (font-lock-syntactic-face-function | 1721 | ;; (font-lock-syntactic-face-function |
| 1707 | ;;; . python-font-lock-syntactic-face-function) | 1722 | ;; . python-font-lock-syntactic-face-function) |
| 1708 | )) | 1723 | )) |
| 1709 | (set (make-local-variable 'parse-sexp-lookup-properties) t) | 1724 | (set (make-local-variable 'parse-sexp-lookup-properties) t) |
| 1710 | (set (make-local-variable 'comment-start) "# ") | 1725 | (set (make-local-variable 'comment-start) "# ") |
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index d08af6e8531..6e8062deb34 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el | |||
| @@ -2388,7 +2388,7 @@ Optional parameter DEPTH (usually 1) says how many to look for." | |||
| 2388 | (defun sh-var-value (var &optional ignore-error) | 2388 | (defun sh-var-value (var &optional ignore-error) |
| 2389 | "Return the value of variable VAR, interpreting symbols. | 2389 | "Return the value of variable VAR, interpreting symbols. |
| 2390 | It can also return t or nil. | 2390 | It can also return t or nil. |
| 2391 | If an illegal value is found, throw an error unless Optional argument | 2391 | If an invalid value is found, throw an error unless Optional argument |
| 2392 | IGNORE-ERROR is non-nil." | 2392 | IGNORE-ERROR is non-nil." |
| 2393 | (let ((val (symbol-value var))) | 2393 | (let ((val (symbol-value var))) |
| 2394 | (cond | 2394 | (cond |
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el index ab7fa42e252..7e30a816e15 100644 --- a/lisp/progmodes/vhdl-mode.el +++ b/lisp/progmodes/vhdl-mode.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; vhdl-mode.el --- major mode for editing VHDL code | 1 | ;;; vhdl-mode.el --- major mode for editing VHDL code |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1992-2003 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1992-2003, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Authors: Reto Zimmermann <reto@gnu.org> | 5 | ;; Authors: Reto Zimmermann <reto@gnu.org> |
| 6 | ;; Rodney J. Whitby <software.vhdl-mode@rwhitby.net> | 6 | ;; Rodney J. Whitby <software.vhdl-mode@rwhitby.net> |
| @@ -5065,7 +5065,7 @@ Try to increase performance by using this macro." | |||
| 5065 | 5065 | ||
| 5066 | (defun vhdl-read-offset (langelem) | 5066 | (defun vhdl-read-offset (langelem) |
| 5067 | "Read new offset value for LANGELEM from minibuffer. | 5067 | "Read new offset value for LANGELEM from minibuffer. |
| 5068 | Return a legal value only." | 5068 | Return a valid value only." |
| 5069 | (let ((oldoff (format "%s" (cdr-safe (assq langelem vhdl-offsets-alist)))) | 5069 | (let ((oldoff (format "%s" (cdr-safe (assq langelem vhdl-offsets-alist)))) |
| 5070 | (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ") | 5070 | (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ") |
| 5071 | (prompt "Offset: ") | 5071 | (prompt "Offset: ") |
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el index dae5722d430..d329e234025 100644 --- a/lisp/progmodes/which-func.el +++ b/lisp/progmodes/which-func.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; which-func.el --- print current function in mode line | 1 | ;;; which-func.el --- print current function in mode line |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1994, 1997, 1998, 2001, 2003 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1994, 1997, 1998, 2001, 2003, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: Alex Rezinsky <alexr@msil.sps.mot.com> | 6 | ;; Author: Alex Rezinsky <alexr@msil.sps.mot.com> |
| 6 | ;; (doesn't seem to be responsive any more) | 7 | ;; (doesn't seem to be responsive any more) |
| @@ -251,7 +252,7 @@ If no function name is found, return nil." | |||
| 251 | (when (and (null name) | 252 | (when (and (null name) |
| 252 | (boundp 'imenu--index-alist) (null imenu--index-alist) | 253 | (boundp 'imenu--index-alist) (null imenu--index-alist) |
| 253 | (null which-function-imenu-failed)) | 254 | (null which-function-imenu-failed)) |
| 254 | (imenu--make-index-alist) | 255 | (imenu--make-index-alist t) |
| 255 | (unless imenu--index-alist | 256 | (unless imenu--index-alist |
| 256 | (make-local-variable 'which-function-imenu-failed) | 257 | (make-local-variable 'which-function-imenu-failed) |
| 257 | (setq which-function-imenu-failed t))) | 258 | (setq which-function-imenu-failed t))) |
| @@ -291,5 +292,5 @@ If no function name is found, return nil." | |||
| 291 | 292 | ||
| 292 | (provide 'which-func) | 293 | (provide 'which-func) |
| 293 | 294 | ||
| 294 | ;;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 | 295 | ;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 |
| 295 | ;;; which-func.el ends here | 296 | ;;; which-func.el ends here |
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el index 609c7db1e2a..bf1279da8a0 100644 --- a/lisp/progmodes/xscheme.el +++ b/lisp/progmodes/xscheme.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; xscheme.el --- run MIT Scheme under Emacs | 1 | ;;; xscheme.el --- run MIT Scheme under Emacs |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1986, 1987, 1989, 1990, 2001, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1986, 1987, 1989, 1990, 2001, 2004, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| 6 | ;; Keywords: languages, lisp | 7 | ;; Keywords: languages, lisp |
| @@ -408,7 +409,7 @@ characters perform useful functions. | |||
| 408 | 409 | ||
| 409 | Commands: | 410 | Commands: |
| 410 | \\{scheme-debugger-mode-map}" | 411 | \\{scheme-debugger-mode-map}" |
| 411 | (error "Illegal entry to scheme-debugger-mode")) | 412 | (error "Invalid entry to scheme-debugger-mode")) |
| 412 | 413 | ||
| 413 | (defun scheme-debugger-mode-initialize () | 414 | (defun scheme-debugger-mode-initialize () |
| 414 | (use-local-map scheme-debugger-mode-map) | 415 | (use-local-map scheme-debugger-mode-map) |
diff --git a/lisp/ps-print.el b/lisp/ps-print.el index 95af5910989..0b2a33f27c0 100644 --- a/lisp/ps-print.el +++ b/lisp/ps-print.el | |||
| @@ -6114,6 +6114,19 @@ XSTART YSTART are the relative position for the first page in a sheet.") | |||
| 6114 | 6114 | ||
| 6115 | (defvar ps-current-effect 0) | 6115 | (defvar ps-current-effect 0) |
| 6116 | 6116 | ||
| 6117 | (defvar ps-print-translation-table | ||
| 6118 | (let ((tbl (make-char-table 'translation-table nil))) | ||
| 6119 | (if (and (boundp 'ucs-mule-8859-to-mule-unicode) | ||
| 6120 | (char-table-p ucs-mule-8859-to-mule-unicode)) | ||
| 6121 | (map-char-table | ||
| 6122 | #'(lambda (k v) | ||
| 6123 | (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v)) | ||
| 6124 | (aset tbl k v))) | ||
| 6125 | ucs-mule-8859-to-mule-unicode)) | ||
| 6126 | tbl) | ||
| 6127 | "Translation table for PostScript printing. | ||
| 6128 | The default value is a table that translates non-Latin-1 Latin characters | ||
| 6129 | to the equivalent Latin-1 characters.") | ||
| 6117 | 6130 | ||
| 6118 | (defun ps-plot-region (from to font &optional fg-color bg-color effects) | 6131 | (defun ps-plot-region (from to font &optional fg-color bg-color effects) |
| 6119 | (or (equal font ps-current-font) | 6132 | (or (equal font ps-current-font) |
diff --git a/lisp/register.el b/lisp/register.el index 253207c3140..eaa53446c56 100644 --- a/lisp/register.el +++ b/lisp/register.el | |||
| @@ -277,7 +277,7 @@ Interactively, second arg is non-nil if prefix arg is supplied." | |||
| 277 | Called from program, takes four args: REGISTER, START, END and DELETE-FLAG. | 277 | Called from program, takes four args: REGISTER, START, END and DELETE-FLAG. |
| 278 | START and END are buffer positions indicating what to copy." | 278 | START and END are buffer positions indicating what to copy." |
| 279 | (interactive "cCopy to register: \nr\nP") | 279 | (interactive "cCopy to register: \nr\nP") |
| 280 | (set-register register (buffer-substring start end)) | 280 | (set-register register (filter-buffer-substring start end)) |
| 281 | (if delete-flag (delete-region start end))) | 281 | (if delete-flag (delete-region start end))) |
| 282 | 282 | ||
| 283 | (defun append-to-register (register start end &optional delete-flag) | 283 | (defun append-to-register (register start end &optional delete-flag) |
| @@ -289,7 +289,7 @@ START and END are buffer positions indicating what to append." | |||
| 289 | (or (stringp (get-register register)) | 289 | (or (stringp (get-register register)) |
| 290 | (error "Register does not contain text")) | 290 | (error "Register does not contain text")) |
| 291 | (set-register register (concat (get-register register) | 291 | (set-register register (concat (get-register register) |
| 292 | (buffer-substring start end))) | 292 | (filter-buffer-substring start end))) |
| 293 | (if delete-flag (delete-region start end))) | 293 | (if delete-flag (delete-region start end))) |
| 294 | 294 | ||
| 295 | (defun prepend-to-register (register start end &optional delete-flag) | 295 | (defun prepend-to-register (register start end &optional delete-flag) |
| @@ -300,7 +300,7 @@ START and END are buffer positions indicating what to prepend." | |||
| 300 | (interactive "cPrepend to register: \nr\nP") | 300 | (interactive "cPrepend to register: \nr\nP") |
| 301 | (or (stringp (get-register register)) | 301 | (or (stringp (get-register register)) |
| 302 | (error "Register does not contain text")) | 302 | (error "Register does not contain text")) |
| 303 | (set-register register (concat (buffer-substring start end) | 303 | (set-register register (concat (filter-buffer-substring start end) |
| 304 | (get-register register))) | 304 | (get-register register))) |
| 305 | (if delete-flag (delete-region start end))) | 305 | (if delete-flag (delete-region start end))) |
| 306 | 306 | ||
diff --git a/lisp/reveal.el b/lisp/reveal.el index eb6b4519f38..787c4d20791 100644 --- a/lisp/reveal.el +++ b/lisp/reveal.el | |||
| @@ -163,8 +163,8 @@ | |||
| 163 | (let ((map (make-sparse-keymap))) | 163 | (let ((map (make-sparse-keymap))) |
| 164 | ;; Override the default move-beginning-of-line and move-end-of-line | 164 | ;; Override the default move-beginning-of-line and move-end-of-line |
| 165 | ;; which skips valuable invisible text. | 165 | ;; which skips valuable invisible text. |
| 166 | (define-key map [?\C-a] 'beginning-of-line) | 166 | (define-key map [remap move-beginning-of-line] 'beginning-of-line) |
| 167 | (define-key map [?\C-e] 'end-of-line) | 167 | (define-key map [remap move-end-of-line] 'end-of-line) |
| 168 | map)) | 168 | map)) |
| 169 | 169 | ||
| 170 | ;;;###autoload | 170 | ;;;###autoload |
diff --git a/lisp/simple.el b/lisp/simple.el index 76cd990ba03..a6aa4daf04e 100644 --- a/lisp/simple.el +++ b/lisp/simple.el | |||
| @@ -35,6 +35,13 @@ | |||
| 35 | (autoload 'widget-convert "wid-edit") | 35 | (autoload 'widget-convert "wid-edit") |
| 36 | (autoload 'shell-mode "shell")) | 36 | (autoload 'shell-mode "shell")) |
| 37 | 37 | ||
| 38 | (defcustom idle-update-delay 0.5 | ||
| 39 | "*Idle time delay before updating various things on the screen. | ||
| 40 | Various Emacs features that update auxiliary information when point moves | ||
| 41 | wait this many seconds after Emacs becomes idle before doing an update." | ||
| 42 | :type 'number | ||
| 43 | :group 'display | ||
| 44 | :version "22.1") | ||
| 38 | 45 | ||
| 39 | (defgroup killing nil | 46 | (defgroup killing nil |
| 40 | "Killing and yanking commands." | 47 | "Killing and yanking commands." |
| @@ -105,6 +112,8 @@ If `fringe-arrow', indicate the locus by the fringe arrow." | |||
| 105 | :group 'next-error | 112 | :group 'next-error |
| 106 | :version "22.1") | 113 | :version "22.1") |
| 107 | 114 | ||
| 115 | (defvar next-error-highlight-timer nil) | ||
| 116 | |||
| 108 | (defvar next-error-last-buffer nil | 117 | (defvar next-error-last-buffer nil |
| 109 | "The most recent next-error buffer. | 118 | "The most recent next-error buffer. |
| 110 | A buffer becomes most recent when its compilation, grep, or | 119 | A buffer becomes most recent when its compilation, grep, or |
| @@ -2216,6 +2225,42 @@ These commands include \\[set-mark-command] and \\[start-kbd-macro]." | |||
| 2216 | (reset-this-command-lengths) | 2225 | (reset-this-command-lengths) |
| 2217 | (restore-overriding-map)) | 2226 | (restore-overriding-map)) |
| 2218 | 2227 | ||
| 2228 | (defvar buffer-substring-filters nil | ||
| 2229 | "List of filter functions for `filter-buffer-substring'. | ||
| 2230 | Each function must accept a single argument, a string, and return | ||
| 2231 | a string. The buffer substring is passed to the first function | ||
| 2232 | in the list, and the return value of each function is passed to | ||
| 2233 | the next. The return value of the last function is used as the | ||
| 2234 | return value of `filter-buffer-substring'. | ||
| 2235 | |||
| 2236 | If this variable is nil, no filtering is performed.") | ||
| 2237 | |||
| 2238 | (defun filter-buffer-substring (beg end &optional delete) | ||
| 2239 | "Return the buffer substring between BEG and END, after filtering. | ||
| 2240 | The buffer substring is passed through each of the filter | ||
| 2241 | functions in `buffer-substring-filters', and the value from the | ||
| 2242 | last filter function is returned. If `buffer-substring-filters' | ||
| 2243 | is nil, the buffer substring is returned unaltered. | ||
| 2244 | |||
| 2245 | If DELETE is non-nil, the text between BEG and END is deleted | ||
| 2246 | from the buffer. | ||
| 2247 | |||
| 2248 | Point is temporarily set to BEG before caling | ||
| 2249 | `buffer-substring-filters', in case the functions need to know | ||
| 2250 | where the text came from. | ||
| 2251 | |||
| 2252 | This function should be used instead of `buffer-substring' or | ||
| 2253 | `delete-and-extract-region' when you want to allow filtering to | ||
| 2254 | take place. For example, major or minor modes can use | ||
| 2255 | `buffer-substring-filters' to extract characters that are special | ||
| 2256 | to a buffer, and should not be copied into other buffers." | ||
| 2257 | (save-excursion | ||
| 2258 | (goto-char beg) | ||
| 2259 | (let ((string (if delete (delete-and-extract-region beg end) | ||
| 2260 | (buffer-substring beg end)))) | ||
| 2261 | (dolist (filter buffer-substring-filters string) | ||
| 2262 | (setq string (funcall filter string)))))) | ||
| 2263 | |||
| 2219 | ;;;; Window system cut and paste hooks. | 2264 | ;;;; Window system cut and paste hooks. |
| 2220 | 2265 | ||
| 2221 | (defvar interprogram-cut-function nil | 2266 | (defvar interprogram-cut-function nil |
| @@ -2392,7 +2437,7 @@ specifies the yank-handler text property to be set on the killed | |||
| 2392 | text. See `insert-for-yank'." | 2437 | text. See `insert-for-yank'." |
| 2393 | (interactive "r") | 2438 | (interactive "r") |
| 2394 | (condition-case nil | 2439 | (condition-case nil |
| 2395 | (let ((string (delete-and-extract-region beg end))) | 2440 | (let ((string (filter-buffer-substring beg end t))) |
| 2396 | (when string ;STRING is nil if BEG = END | 2441 | (when string ;STRING is nil if BEG = END |
| 2397 | ;; Add that string to the kill ring, one way or another. | 2442 | ;; Add that string to the kill ring, one way or another. |
| 2398 | (if (eq last-command 'kill-region) | 2443 | (if (eq last-command 'kill-region) |
| @@ -2428,8 +2473,8 @@ If `interprogram-cut-function' is non-nil, also save the text for a window | |||
| 2428 | system cut and paste." | 2473 | system cut and paste." |
| 2429 | (interactive "r") | 2474 | (interactive "r") |
| 2430 | (if (eq last-command 'kill-region) | 2475 | (if (eq last-command 'kill-region) |
| 2431 | (kill-append (buffer-substring beg end) (< end beg)) | 2476 | (kill-append (filter-buffer-substring beg end) (< end beg)) |
| 2432 | (kill-new (buffer-substring beg end))) | 2477 | (kill-new (filter-buffer-substring beg end))) |
| 2433 | (if transient-mark-mode | 2478 | (if transient-mark-mode |
| 2434 | (setq deactivate-mark t)) | 2479 | (setq deactivate-mark t)) |
| 2435 | nil) | 2480 | nil) |
| @@ -2954,7 +2999,7 @@ the user to see that the mark has moved, and you want the previous | |||
| 2954 | mark position to be lost. | 2999 | mark position to be lost. |
| 2955 | 3000 | ||
| 2956 | Normally, when a new mark is set, the old one should go on the stack. | 3001 | Normally, when a new mark is set, the old one should go on the stack. |
| 2957 | This is why most applications should use push-mark, not set-mark. | 3002 | This is why most applications should use `push-mark', not `set-mark'. |
| 2958 | 3003 | ||
| 2959 | Novice Emacs Lisp programmers often try to use the mark for the wrong | 3004 | Novice Emacs Lisp programmers often try to use the mark for the wrong |
| 2960 | purposes. The mark saves a location for the user's convenience. | 3005 | purposes. The mark saves a location for the user's convenience. |
| @@ -5182,14 +5227,6 @@ See also `normal-erase-is-backspace'." | |||
| 5182 | (message "Delete key deletes %s" | 5227 | (message "Delete key deletes %s" |
| 5183 | (if normal-erase-is-backspace "forward" "backward")))) | 5228 | (if normal-erase-is-backspace "forward" "backward")))) |
| 5184 | 5229 | ||
| 5185 | (defcustom idle-update-delay 0.5 | ||
| 5186 | "*Idle time delay before updating various things on the screen. | ||
| 5187 | Various Emacs features that update auxiliary information when point moves | ||
| 5188 | wait this many seconds after Emacs becomes idle before doing an update." | ||
| 5189 | :type 'number | ||
| 5190 | :group 'display | ||
| 5191 | :version "22.1") | ||
| 5192 | |||
| 5193 | (defvar vis-mode-saved-buffer-invisibility-spec nil | 5230 | (defvar vis-mode-saved-buffer-invisibility-spec nil |
| 5194 | "Saved value of `buffer-invisibility-spec' when Visible mode is on.") | 5231 | "Saved value of `buffer-invisibility-spec' when Visible mode is on.") |
| 5195 | 5232 | ||
diff --git a/lisp/term.el b/lisp/term.el index 32e249024d9..eb3ae342359 100644 --- a/lisp/term.el +++ b/lisp/term.el | |||
| @@ -2571,7 +2571,16 @@ See `term-prompt-regexp'." | |||
| 2571 | 2571 | ||
| 2572 | (defun term-move-columns (delta) | 2572 | (defun term-move-columns (delta) |
| 2573 | (setq term-current-column (max 0 (+ (term-current-column) delta))) | 2573 | (setq term-current-column (max 0 (+ (term-current-column) delta))) |
| 2574 | (move-to-column term-current-column t)) | 2574 | (let (point-at-eol) |
| 2575 | (save-excursion | ||
| 2576 | (end-of-line) | ||
| 2577 | (setq point-at-eol (point))) | ||
| 2578 | (move-to-column term-current-column t) | ||
| 2579 | ;; If move-to-column extends the current line it will use the face | ||
| 2580 | ;; from the last character on the line, set the face for the chars | ||
| 2581 | ;; to default. | ||
| 2582 | (when (> (point) point-at-eol) | ||
| 2583 | (put-text-property point-at-eol (point) 'face 'default)))) | ||
| 2575 | 2584 | ||
| 2576 | ;; Insert COUNT copies of CHAR in the default face. | 2585 | ;; Insert COUNT copies of CHAR in the default face. |
| 2577 | (defun term-insert-char (char count) | 2586 | (defun term-insert-char (char count) |
| @@ -3026,7 +3035,7 @@ See `term-prompt-regexp'." | |||
| 3026 | ;;; default one. | 3035 | ;;; default one. |
| 3027 | (defun term-reset-terminal () | 3036 | (defun term-reset-terminal () |
| 3028 | (erase-buffer) | 3037 | (erase-buffer) |
| 3029 | (setq term-current-row 1) | 3038 | (setq term-current-row 0) |
| 3030 | (setq term-current-column 1) | 3039 | (setq term-current-column 1) |
| 3031 | (setq term-insert-mode nil) | 3040 | (setq term-insert-mode nil) |
| 3032 | (setq term-current-face nil) | 3041 | (setq term-current-face nil) |
| @@ -3035,7 +3044,7 @@ See `term-prompt-regexp'." | |||
| 3035 | (setq term-ansi-current-reverse 0) | 3044 | (setq term-ansi-current-reverse 0) |
| 3036 | (setq term-ansi-current-color 0) | 3045 | (setq term-ansi-current-color 0) |
| 3037 | (setq term-ansi-current-invisible 0) | 3046 | (setq term-ansi-current-invisible 0) |
| 3038 | (setq term-ansi-face-already-done 1) | 3047 | (setq term-ansi-face-already-done 0) |
| 3039 | (setq term-ansi-current-bg-color 0)) | 3048 | (setq term-ansi-current-bg-color 0)) |
| 3040 | 3049 | ||
| 3041 | ;;; New function to deal with ansi colorized output, as you can see you can | 3050 | ;;; New function to deal with ansi colorized output, as you can see you can |
| @@ -3683,12 +3692,20 @@ Should only be called when point is at the start of a screen line." | |||
| 3683 | ;;; at teh end of this screen line to make room. | 3692 | ;;; at teh end of this screen line to make room. |
| 3684 | 3693 | ||
| 3685 | (defun term-insert-spaces (count) | 3694 | (defun term-insert-spaces (count) |
| 3686 | (let ((save-point (point)) (save-eol)) | 3695 | (let ((save-point (point)) (save-eol) (point-at-eol)) |
| 3687 | (term-vertical-motion 1) | 3696 | (term-vertical-motion 1) |
| 3688 | (if (bolp) | 3697 | (if (bolp) |
| 3689 | (backward-char)) | 3698 | (backward-char)) |
| 3690 | (setq save-eol (point)) | 3699 | (setq save-eol (point)) |
| 3700 | (save-excursion | ||
| 3701 | (end-of-line) | ||
| 3702 | (setq point-at-eol (point))) | ||
| 3691 | (move-to-column (+ (term-start-line-column) (- term-width count)) t) | 3703 | (move-to-column (+ (term-start-line-column) (- term-width count)) t) |
| 3704 | ;; If move-to-column extends the current line it will use the face | ||
| 3705 | ;; from the last character on the line, set the face for the chars | ||
| 3706 | ;; to default. | ||
| 3707 | (when (> (point) (point-at-eol)) | ||
| 3708 | (put-text-property point-at-eol (point) 'face 'default)) | ||
| 3692 | (if (> save-eol (point)) | 3709 | (if (> save-eol (point)) |
| 3693 | (delete-region (point) save-eol)) | 3710 | (delete-region (point) save-eol)) |
| 3694 | (goto-char save-point) | 3711 | (goto-char save-point) |
diff --git a/lisp/term/bobcat.el b/lisp/term/bobcat.el index 85f816570ee..b11a4ff8309 100644 --- a/lisp/term/bobcat.el +++ b/lisp/term/bobcat.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;; -*- no-byte-compile: t -*- | 1 | ;; -*- no-byte-compile: t -*- |
| 2 | ;;; HP terminals usually encourage using ^H as the rubout character | 2 | ;;; HP terminals usually encourage using ^H as the rubout character |
| 3 | (load "term/keyswap" nil t) | 3 | (keyboard-translate ?\177 ?\^h) |
| 4 | (keyboard-translate ?\^h ?\177) | ||
| 4 | 5 | ||
| 5 | ;;; arch-tag: 754e4520-0a3e-4e6e-8ca5-9481b1f85cf7 | 6 | ;;; arch-tag: 754e4520-0a3e-4e6e-8ca5-9481b1f85cf7 |
| 6 | ;;; bobcat.el ends here | 7 | ;;; bobcat.el ends here |
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el index 234280a3c3f..5c210974f72 100644 --- a/lisp/term/xterm.el +++ b/lisp/term/xterm.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; xterm.el --- define function key sequences and standard colors for xterm | 1 | ;;; xterm.el --- define function key sequences and standard colors for xterm |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1995, 2002, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1995, 2002, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: FSF | 5 | ;; Author: FSF |
| 6 | ;; Keywords: terminals | 6 | ;; Keywords: terminals |
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index ccd7f21f502..c41145befc8 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el | |||
| @@ -539,6 +539,17 @@ The break position will be always after LINEBEG and generally before point." | |||
| 539 | ;; Make sure we take SOMETHING after the fill prefix if any. | 539 | ;; Make sure we take SOMETHING after the fill prefix if any. |
| 540 | (fill-find-break-point linebeg))))) | 540 | (fill-find-break-point linebeg))))) |
| 541 | 541 | ||
| 542 | ;; Like text-properties-at but don't include `composition' property. | ||
| 543 | (defun fill-text-properties-at (pos) | ||
| 544 | (let ((l (text-properties-at pos)) | ||
| 545 | prop-list) | ||
| 546 | (while l | ||
| 547 | (unless (eq (car l) 'composition) | ||
| 548 | (setq prop-list | ||
| 549 | (cons (car l) (cons (cadr l) prop-list)))) | ||
| 550 | (setq l (cddr l))) | ||
| 551 | prop-list)) | ||
| 552 | |||
| 542 | (defun fill-newline () | 553 | (defun fill-newline () |
| 543 | ;; Replace whitespace here with one newline, then | 554 | ;; Replace whitespace here with one newline, then |
| 544 | ;; indent to left margin. | 555 | ;; indent to left margin. |
| @@ -546,7 +557,7 @@ The break position will be always after LINEBEG and generally before point." | |||
| 546 | (insert ?\n) | 557 | (insert ?\n) |
| 547 | ;; Give newline the properties of the space(s) it replaces | 558 | ;; Give newline the properties of the space(s) it replaces |
| 548 | (set-text-properties (1- (point)) (point) | 559 | (set-text-properties (1- (point)) (point) |
| 549 | (text-properties-at (point))) | 560 | (fill-text-properties-at (point))) |
| 550 | (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?") | 561 | (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?") |
| 551 | (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|) | 562 | (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|) |
| 552 | (match-end 2)) | 563 | (match-end 2)) |
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index 3717db6d4c5..4c8b0dafb29 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el | |||
| @@ -645,6 +645,10 @@ re-start emacs." | |||
| 645 | "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" | 645 | "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" |
| 646 | "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" | 646 | "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" |
| 647 | "" nil ("-B") nil iso-8859-2) | 647 | "" nil ("-B") nil iso-8859-2) |
| 648 | ("slovenian" ; Slovenian | ||
| 649 | "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" | ||
| 650 | "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" | ||
| 651 | "" nil ("-B" "-d" "slovenian") nil iso-8859-2) | ||
| 648 | ("svenska" ; Swedish mode | 652 | ("svenska" ; Swedish mode |
| 649 | "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" | 653 | "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" |
| 650 | "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" | 654 | "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" |
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el index 1ff21ea1ce0..86406d37475 100644 --- a/lisp/textmodes/org.el +++ b/lisp/textmodes/org.el | |||
| @@ -1,14 +1,14 @@ | |||
| 1 | ;; org.el --- Outline-based notes management and organizer | 1 | ;; org.el --- Outline-based notes management and organizer |
| 2 | ;; Carstens outline-mode for keeping track of everything. | 2 | ;; Carstens outline-mode for keeping track of everything. |
| 3 | ;; Copyright (c) 2003, 2004 Free Software Foundation | 3 | ;; Copyright (c) 2004, 2005 Free Software Foundation |
| 4 | 4 | ;; | |
| 5 | ;; Author: Carsten Dominik <dominik at science dot uva dot nl> | 5 | ;; Author: Carsten Dominik <dominik at science dot uva dot nl> |
| 6 | ;; Keywords: outlines, hypermedia, calendar | 6 | ;; Keywords: outlines, hypermedia, calendar |
| 7 | ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ | 7 | ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ |
| 8 | ;; Version: 3.04 | 8 | ;; Version: 3.05 |
| 9 | 9 | ;; | |
| 10 | ;; This file is part of GNU Emacs. | 10 | ;; This file is part of GNU Emacs. |
| 11 | 11 | ;; | |
| 12 | ;; GNU Emacs is free software; you can redistribute it and/or modify | 12 | ;; GNU Emacs is free software; you can redistribute it and/or modify |
| 13 | ;; it under the terms of the GNU General Public License as published by | 13 | ;; it under the terms of the GNU General Public License as published by |
| 14 | ;; the Free Software Foundation; either version 2, or (at your option) | 14 | ;; the Free Software Foundation; either version 2, or (at your option) |
| @@ -75,10 +75,18 @@ | |||
| 75 | ;; ------------- | 75 | ;; ------------- |
| 76 | ;; The documentation of Org-mode can be found in the TeXInfo file. | 76 | ;; The documentation of Org-mode can be found in the TeXInfo file. |
| 77 | ;; This distribution also contains a PDF version of it. At the homepage | 77 | ;; This distribution also contains a PDF version of it. At the homepage |
| 78 | ;; of Org-mode, you can find and read online the same text as HTML. | 78 | ;; of Org-mode, you can read online the same text online as HTML. |
| 79 | ;; | 79 | ;; |
| 80 | ;; Changes: | 80 | ;; Changes: |
| 81 | ;; ------- | 81 | ;; ------- |
| 82 | ;; Version 3.05 | ||
| 83 | ;; - Agenda entries from the diary are linked to the diary file, so | ||
| 84 | ;; adding and editing diary entries can be done directly from the agenda. | ||
| 85 | ;; - Many calendar/diary commands available directly from agenda. | ||
| 86 | ;; - Field copying in tables with S-RET does increment. | ||
| 87 | ;; - C-c C-x C-v extracts the visible part of the buffer for printing. | ||
| 88 | ;; - Moving subtrees up and down preserves the whitespace at the tree end. | ||
| 89 | ;; | ||
| 82 | ;; Version 3.04 | 90 | ;; Version 3.04 |
| 83 | ;; - Table editor optimized to need fewer realignments, and to keep | 91 | ;; - Table editor optimized to need fewer realignments, and to keep |
| 84 | ;; table shape when typing in fields. | 92 | ;; table shape when typing in fields. |
| @@ -213,7 +221,7 @@ | |||
| 213 | 221 | ||
| 214 | ;;; Customization variables | 222 | ;;; Customization variables |
| 215 | 223 | ||
| 216 | (defvar org-version "3.04" | 224 | (defvar org-version "3.05" |
| 217 | "The version number of the file org.el.") | 225 | "The version number of the file org.el.") |
| 218 | (defun org-version () | 226 | (defun org-version () |
| 219 | (interactive) | 227 | (interactive) |
| @@ -241,7 +249,13 @@ | |||
| 241 | :group 'org) | 249 | :group 'org) |
| 242 | 250 | ||
| 243 | (defcustom org-startup-folded t | 251 | (defcustom org-startup-folded t |
| 244 | "Non-nil means, entering Org-mode will switch to OVERVIEW." | 252 | "Non-nil means, entering Org-mode will switch to OVERVIEW. |
| 253 | This can also be configured on a per-file basis by adding one of | ||
| 254 | the following lines anywhere in the buffer: | ||
| 255 | |||
| 256 | #+STARTUP: fold | ||
| 257 | #+STARTUP: nofold | ||
| 258 | " | ||
| 245 | :group 'org-startup | 259 | :group 'org-startup |
| 246 | :type 'boolean) | 260 | :type 'boolean) |
| 247 | 261 | ||
| @@ -255,7 +269,13 @@ uninteresting. Also tables look terrible when wrapped." | |||
| 255 | (defcustom org-startup-with-deadline-check nil | 269 | (defcustom org-startup-with-deadline-check nil |
| 256 | "Non-nil means, entering Org-mode will run the deadline check. | 270 | "Non-nil means, entering Org-mode will run the deadline check. |
| 257 | This means, if you start editing an org file, you will get an | 271 | This means, if you start editing an org file, you will get an |
| 258 | immediate reminder of any due deadlines." | 272 | immediate reminder of any due deadlines. |
| 273 | This can also be configured on a per-file basis by adding one of | ||
| 274 | the following lines anywhere in the buffer: | ||
| 275 | |||
| 276 | #+STARTUP: dlcheck | ||
| 277 | #+STARTUP: nodlcheck | ||
| 278 | " | ||
| 259 | :group 'org-startup | 279 | :group 'org-startup |
| 260 | :type 'boolean) | 280 | :type 'boolean) |
| 261 | 281 | ||
| @@ -534,6 +554,11 @@ When nil, cursor will remain in the current window." | |||
| 534 | :group 'org-agenda | 554 | :group 'org-agenda |
| 535 | :type 'boolean) | 555 | :type 'boolean) |
| 536 | 556 | ||
| 557 | (defcustom org-fit-agenda-window t | ||
| 558 | "Non-nil means, change windo size of agenda to fit content." | ||
| 559 | :group 'org-agenda | ||
| 560 | :type 'boolean) | ||
| 561 | |||
| 537 | (defcustom org-agenda-show-all-dates t | 562 | (defcustom org-agenda-show-all-dates t |
| 538 | "Non-nil means, `org-agenda' shows every day in the selected range. | 563 | "Non-nil means, `org-agenda' shows every day in the selected range. |
| 539 | When nil, only the days which actually have entries are shown." | 564 | When nil, only the days which actually have entries are shown." |
| @@ -892,7 +917,7 @@ slight (in fact: unnoticable) speed impact for normal typing. Org-mode is | |||
| 892 | very good at guessing when a re-align will be necessary, but you can always | 917 | very good at guessing when a re-align will be necessary, but you can always |
| 893 | force one with `C-c C-c'. | 918 | force one with `C-c C-c'. |
| 894 | 919 | ||
| 895 | I you would like to use the optimized version in Org-mode, but the un-optimized | 920 | If you would like to use the optimized version in Org-mode, but the un-optimized |
| 896 | version in OrgTbl-mode, see the variable `orgtbl-optimized'. | 921 | version in OrgTbl-mode, see the variable `orgtbl-optimized'. |
| 897 | 922 | ||
| 898 | This variable can be used to turn on and off the table editor during a session, | 923 | This variable can be used to turn on and off the table editor during a session, |
| @@ -971,6 +996,11 @@ line will be formatted with <th> tags." | |||
| 971 | :group 'org-table | 996 | :group 'org-table |
| 972 | :type 'boolean) | 997 | :type 'boolean) |
| 973 | 998 | ||
| 999 | (defcustom org-table-copy-increment t | ||
| 1000 | "Non-nil means, increment when copying current field with \\[org-table-copy-down]." | ||
| 1001 | :group 'org-table | ||
| 1002 | :type 'boolean) | ||
| 1003 | |||
| 974 | (defcustom org-table-tab-recognizes-table.el t | 1004 | (defcustom org-table-tab-recognizes-table.el t |
| 975 | "Non-nil means, TAB will automatically notice a table.el table. | 1005 | "Non-nil means, TAB will automatically notice a table.el table. |
| 976 | When it sees such a table, it moves point into it and - if necessary - | 1006 | When it sees such a table, it moves point into it and - if necessary - |
| @@ -1260,7 +1290,7 @@ Otherwise, the buffer will just be saved to a file and stay hidden." | |||
| 1260 | "Face used for level 7 headlines." | 1290 | "Face used for level 7 headlines." |
| 1261 | :group 'org-faces) | 1291 | :group 'org-faces) |
| 1262 | 1292 | ||
| 1263 | (defface org-level-8-face ;;font-lock-string-face | 1293 | (defface org-level-8-face ;; font-lock-string-face |
| 1264 | '((((type tty) (class color)) (:foreground "green")) | 1294 | '((((type tty) (class color)) (:foreground "green")) |
| 1265 | (((class color) (background light)) (:foreground "RosyBrown")) | 1295 | (((class color) (background light)) (:foreground "RosyBrown")) |
| 1266 | (((class color) (background dark)) (:foreground "LightSalmon")) | 1296 | (((class color) (background dark)) (:foreground "LightSalmon")) |
| @@ -1276,8 +1306,24 @@ Otherwise, the buffer will just be saved to a file and stay hidden." | |||
| 1276 | "Face for deadlines and TODO keyords." | 1306 | "Face for deadlines and TODO keyords." |
| 1277 | :group 'org-faces) | 1307 | :group 'org-faces) |
| 1278 | 1308 | ||
| 1279 | ;; Inheritance does not work for xemacs, unfortunately. | 1309 | (defcustom org-fontify-done-headline nil |
| 1280 | ;; We just copy the definitions and waste some space.... | 1310 | "Non-nil means, change the face of a headline if it is marked DONE. |
| 1311 | Normally, only the TODO/DONE keyword indicates the state of a headline. | ||
| 1312 | When this is non-nil, the headline after the keyword is set to the | ||
| 1313 | `org-headline-done-face' as an additional indication." | ||
| 1314 | :group 'org-faces | ||
| 1315 | :type 'boolean) | ||
| 1316 | |||
| 1317 | (defface org-headline-done-face ;; font-lock-string-face | ||
| 1318 | '((((type tty) (class color)) (:foreground "green")) | ||
| 1319 | (((class color) (background light)) (:foreground "RosyBrown")) | ||
| 1320 | (((class color) (background dark)) (:foreground "LightSalmon")) | ||
| 1321 | (t (:italic t))) | ||
| 1322 | "Face used to indicate that a headline is DONE. See also the variable | ||
| 1323 | `org-fontify-done-headline'." | ||
| 1324 | :group 'org-faces) | ||
| 1325 | |||
| 1326 | ;; Inheritance does not yet work for xemacs. So we just copy... | ||
| 1281 | 1327 | ||
| 1282 | (defface org-deadline-announce-face | 1328 | (defface org-deadline-announce-face |
| 1283 | '((((type tty) (class color)) (:foreground "blue" :weight bold)) | 1329 | '((((type tty) (class color)) (:foreground "blue" :weight bold)) |
| @@ -1341,11 +1387,11 @@ Otherwise, the buffer will just be saved to a file and stay hidden." | |||
| 1341 | )) | 1387 | )) |
| 1342 | (defvar org-n-levels (length org-level-faces)) | 1388 | (defvar org-n-levels (length org-level-faces)) |
| 1343 | 1389 | ||
| 1344 | |||
| 1345 | ;; Tell the compiler about dynamically scoped variables, | 1390 | ;; Tell the compiler about dynamically scoped variables, |
| 1346 | ;; and variables from other packages | 1391 | ;; and variables from other packages |
| 1347 | (eval-when-compile | 1392 | (eval-when-compile |
| 1348 | (defvar zmacs-regions) | 1393 | (defvar zmacs-regions) |
| 1394 | (defvar original-date) | ||
| 1349 | (defvar org-transient-mark-mode) | 1395 | (defvar org-transient-mark-mode) |
| 1350 | (defvar org-old-auto-fill-inhibit-regexp) | 1396 | (defvar org-old-auto-fill-inhibit-regexp) |
| 1351 | (defvar orgtbl-mode-menu) | 1397 | (defvar orgtbl-mode-menu) |
| @@ -1521,8 +1567,11 @@ The following commands are available: | |||
| 1521 | (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>") | 1567 | (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>") |
| 1522 | '(1 'org-warning-face t)) | 1568 | '(1 'org-warning-face t)) |
| 1523 | '("^#.*" (0 'font-lock-comment-face t)) | 1569 | '("^#.*" (0 'font-lock-comment-face t)) |
| 1524 | (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") | 1570 | (if org-fontify-done-headline |
| 1525 | '(1 'org-done-face t)) | 1571 | (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\(.*\\)\\>") |
| 1572 | '(1 'org-done-face t) '(2 'org-headline-done-face t)) | ||
| 1573 | (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") | ||
| 1574 | '(1 'org-done-face t))) | ||
| 1526 | '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)" | 1575 | '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)" |
| 1527 | (1 'org-table-face t)) | 1576 | (1 'org-table-face t)) |
| 1528 | '("^[ \t]*\\(:.*\\)" (1 'org-table-face t))))) | 1577 | '("^[ \t]*\\(:.*\\)" (1 'org-table-face t))))) |
| @@ -1563,7 +1612,7 @@ The following commands are available: | |||
| 1563 | (defvar org-cycle-global-status nil) | 1612 | (defvar org-cycle-global-status nil) |
| 1564 | (defvar org-cycle-subtree-status nil) | 1613 | (defvar org-cycle-subtree-status nil) |
| 1565 | (defun org-cycle (&optional arg) | 1614 | (defun org-cycle (&optional arg) |
| 1566 | "Visibility cycling for org-mode. | 1615 | "Visibility cycling for Org-mode. |
| 1567 | 1616 | ||
| 1568 | - When this function is called with a prefix argument, rotate the entire | 1617 | - When this function is called with a prefix argument, rotate the entire |
| 1569 | buffer through 3 states (global cycling) | 1618 | buffer through 3 states (global cycling) |
| @@ -1579,6 +1628,9 @@ The following commands are available: | |||
| 1579 | zoom in further. | 1628 | zoom in further. |
| 1580 | 3. SUBTREE: Show the entire subtree, including body text. | 1629 | 3. SUBTREE: Show the entire subtree, including body text. |
| 1581 | 1630 | ||
| 1631 | - When there is a numeric prefix, go ARG levels up and do a `show-subtree', | ||
| 1632 | keeping cursor position. | ||
| 1633 | |||
| 1582 | - When point is not at the beginning of a headline, execute | 1634 | - When point is not at the beginning of a headline, execute |
| 1583 | `indent-relative', like TAB normally does. See the option | 1635 | `indent-relative', like TAB normally does. See the option |
| 1584 | `org-cycle-emulate-tab' for details. | 1636 | `org-cycle-emulate-tab' for details. |
| @@ -1587,8 +1639,9 @@ The following commands are available: | |||
| 1587 | no headline in line 1, this function will act as if called with prefix arg." | 1639 | no headline in line 1, this function will act as if called with prefix arg." |
| 1588 | (interactive "P") | 1640 | (interactive "P") |
| 1589 | 1641 | ||
| 1590 | (if (and (bobp) (not (looking-at outline-regexp))) | 1642 | (if (or (and (bobp) (not (looking-at outline-regexp))) |
| 1591 | ; special case: use global cycling | 1643 | (equal arg '(4))) |
| 1644 | ;; special case: use global cycling | ||
| 1592 | (setq arg t)) | 1645 | (setq arg t)) |
| 1593 | 1646 | ||
| 1594 | (cond | 1647 | (cond |
| @@ -1600,7 +1653,7 @@ The following commands are available: | |||
| 1600 | (org-table-justify-field-maybe) | 1653 | (org-table-justify-field-maybe) |
| 1601 | (org-table-next-field)))) | 1654 | (org-table-next-field)))) |
| 1602 | 1655 | ||
| 1603 | (arg ;; Global cycling | 1656 | ((eq arg t) ;; Global cycling |
| 1604 | 1657 | ||
| 1605 | (cond | 1658 | (cond |
| 1606 | ((and (eq last-command this-command) | 1659 | ((and (eq last-command this-command) |
| @@ -1621,18 +1674,27 @@ The following commands are available: | |||
| 1621 | (if (bobp) (throw 'exit nil)))) | 1674 | (if (bobp) (throw 'exit nil)))) |
| 1622 | (message "CONTENTS...done")) | 1675 | (message "CONTENTS...done")) |
| 1623 | (setq org-cycle-global-status 'contents)) | 1676 | (setq org-cycle-global-status 'contents)) |
| 1677 | |||
| 1624 | ((and (eq last-command this-command) | 1678 | ((and (eq last-command this-command) |
| 1625 | (eq org-cycle-global-status 'contents)) | 1679 | (eq org-cycle-global-status 'contents)) |
| 1626 | ;; We just showed the table of contents - now show everything | 1680 | ;; We just showed the table of contents - now show everything |
| 1627 | (show-all) | 1681 | (show-all) |
| 1628 | (message "SHOW ALL") | 1682 | (message "SHOW ALL") |
| 1629 | (setq org-cycle-global-status 'all)) | 1683 | (setq org-cycle-global-status 'all)) |
| 1684 | |||
| 1630 | (t | 1685 | (t |
| 1631 | ;; Default action: go to overview | 1686 | ;; Default action: go to overview |
| 1632 | (hide-sublevels 1) | 1687 | (hide-sublevels 1) |
| 1633 | (message "OVERVIEW") | 1688 | (message "OVERVIEW") |
| 1634 | (setq org-cycle-global-status 'overview)))) | 1689 | (setq org-cycle-global-status 'overview)))) |
| 1635 | 1690 | ||
| 1691 | ((integerp arg) | ||
| 1692 | ;; Show-subtree, ARG levels up from here. | ||
| 1693 | (save-excursion | ||
| 1694 | (org-back-to-heading) | ||
| 1695 | (outline-up-heading arg) | ||
| 1696 | (show-subtree))) | ||
| 1697 | |||
| 1636 | ((save-excursion (beginning-of-line 1) (looking-at outline-regexp)) | 1698 | ((save-excursion (beginning-of-line 1) (looking-at outline-regexp)) |
| 1637 | ;; At a heading: rotate between three different views | 1699 | ;; At a heading: rotate between three different views |
| 1638 | (org-back-to-heading) | 1700 | (org-back-to-heading) |
| @@ -1970,7 +2032,7 @@ is changed at all." | |||
| 1970 | (save-excursion (outline-end-of-heading) | 2032 | (save-excursion (outline-end-of-heading) |
| 1971 | (setq folded (org-invisible-p))) | 2033 | (setq folded (org-invisible-p))) |
| 1972 | (outline-end-of-subtree)) | 2034 | (outline-end-of-subtree)) |
| 1973 | (if (equal (char-after) ?\n) (forward-char 1)) | 2035 | (outline-next-heading) |
| 1974 | (setq end (point)) | 2036 | (setq end (point)) |
| 1975 | ;; Find insertion point, with error handling | 2037 | ;; Find insertion point, with error handling |
| 1976 | (goto-char beg) | 2038 | (goto-char beg) |
| @@ -1982,7 +2044,10 @@ is changed at all." | |||
| 1982 | (if (> arg 0) | 2044 | (if (> arg 0) |
| 1983 | ;; Moving forward - still need to move over subtree | 2045 | ;; Moving forward - still need to move over subtree |
| 1984 | (progn (outline-end-of-subtree) | 2046 | (progn (outline-end-of-subtree) |
| 1985 | (if (equal (char-after) ?\n) (forward-char 1)))) | 2047 | (outline-next-heading) |
| 2048 | (if (not (or (looking-at (concat "^" outline-regexp)) | ||
| 2049 | (bolp))) | ||
| 2050 | (newline)))) | ||
| 1986 | (move-marker ins-point (point)) | 2051 | (move-marker ins-point (point)) |
| 1987 | (setq txt (buffer-substring beg end)) | 2052 | (setq txt (buffer-substring beg end)) |
| 1988 | (delete-region beg end) | 2053 | (delete-region beg end) |
| @@ -1993,7 +2058,7 @@ is changed at all." | |||
| 1993 | 2058 | ||
| 1994 | (defvar org-subtree-clip "" | 2059 | (defvar org-subtree-clip "" |
| 1995 | "Clipboard for cut and paste of subtrees. | 2060 | "Clipboard for cut and paste of subtrees. |
| 1996 | This is actually only a cpoy of the kill, because we use the normal kill | 2061 | This is actually only a copy of the kill, because we use the normal kill |
| 1997 | ring. We need it to check if the kill was created by `org-copy-subtree'.") | 2062 | ring. We need it to check if the kill was created by `org-copy-subtree'.") |
| 1998 | 2063 | ||
| 1999 | (defvar org-subtree-clip-folded nil | 2064 | (defvar org-subtree-clip-folded nil |
| @@ -2380,7 +2445,7 @@ ACTION can be set, up, or down." | |||
| 2380 | (setq new (1- current))) | 2445 | (setq new (1- current))) |
| 2381 | ((eq action 'down) | 2446 | ((eq action 'down) |
| 2382 | (setq new (1+ current))) | 2447 | (setq new (1+ current))) |
| 2383 | (t (error "Illegal ection"))) | 2448 | (t (error "Invalid action"))) |
| 2384 | (setq new (min (max ?A (upcase new)) org-lowest-priority)) | 2449 | (setq new (min (max ?A (upcase new)) org-lowest-priority)) |
| 2385 | (setq news (format "%c" new)) | 2450 | (setq news (format "%c" new)) |
| 2386 | (if have | 2451 | (if have |
| @@ -2906,6 +2971,14 @@ The following commands are available: | |||
| 2906 | (define-key org-agenda-mode-map "p" 'org-agenda-priority) | 2971 | (define-key org-agenda-mode-map "p" 'org-agenda-priority) |
| 2907 | (define-key org-agenda-mode-map "," 'org-agenda-priority) | 2972 | (define-key org-agenda-mode-map "," 'org-agenda-priority) |
| 2908 | (define-key org-agenda-mode-map "i" 'org-agenda-diary-entry) | 2973 | (define-key org-agenda-mode-map "i" 'org-agenda-diary-entry) |
| 2974 | (define-key org-agenda-mode-map "c" 'org-agenda-goto-calendar) | ||
| 2975 | (define-key org-agenda-mode-map "C" 'org-agenda-convert-date) | ||
| 2976 | (define-key org-agenda-mode-map "m" 'org-agenda-phases-of-moon) | ||
| 2977 | (define-key org-agenda-mode-map "M" 'org-agenda-phases-of-moon) | ||
| 2978 | (define-key org-agenda-mode-map "s" 'org-agenda-sunrise-sunset) | ||
| 2979 | (define-key org-agenda-mode-map "S" 'org-agenda-sunrise-sunset) | ||
| 2980 | (define-key org-agenda-mode-map "h" 'org-agenda-holidays) | ||
| 2981 | (define-key org-agenda-mode-map "H" 'org-agenda-holidays) | ||
| 2909 | (define-key org-agenda-mode-map "+" 'org-agenda-priority-up) | 2982 | (define-key org-agenda-mode-map "+" 'org-agenda-priority-up) |
| 2910 | (define-key org-agenda-mode-map "-" 'org-agenda-priority-down) | 2983 | (define-key org-agenda-mode-map "-" 'org-agenda-priority-down) |
| 2911 | (define-key org-agenda-mode-map [(right)] 'org-agenda-later) | 2984 | (define-key org-agenda-mode-map [(right)] 'org-agenda-later) |
| @@ -2951,6 +3024,12 @@ The following commands are available: | |||
| 2951 | :style toggle :selected org-agenda-include-diary :active t] | 3024 | :style toggle :selected org-agenda-include-diary :active t] |
| 2952 | "--" | 3025 | "--" |
| 2953 | ["New Diary Entry" org-agenda-diary-entry t] | 3026 | ["New Diary Entry" org-agenda-diary-entry t] |
| 3027 | ("Calendar commands" | ||
| 3028 | ["Goto calendar" org-agenda-goto-calendar t] | ||
| 3029 | ["Phases of the Moon" org-agenda-phases-of-moon t] | ||
| 3030 | ["Sunrise/Sunset" org-agenda-sunrise-sunset t] | ||
| 3031 | ["Holidays" org-agenda-holidays t] | ||
| 3032 | ["Convert" org-agenda-convert-date t]) | ||
| 2954 | "--" | 3033 | "--" |
| 2955 | ["Quit" org-agenda-quit t] | 3034 | ["Quit" org-agenda-quit t] |
| 2956 | ["Exit and Release Buffers" org-agenda-exit t] | 3035 | ["Exit and Release Buffers" org-agenda-exit t] |
| @@ -3110,7 +3189,7 @@ NDAYS defaults to `org-agenda-ndays'." | |||
| 3110 | (d (- nt n1))) | 3189 | (d (- nt n1))) |
| 3111 | (- sd (+ (if (< d 0) 7 0) d))))) | 3190 | (- sd (+ (if (< d 0) 7 0) d))))) |
| 3112 | (day-numbers (list start)) | 3191 | (day-numbers (list start)) |
| 3113 | s e rtn rtnall file date d start-pos) | 3192 | s e rtn rtnall file date d start-pos end-pos) |
| 3114 | (setq org-agenda-redo-command | 3193 | (setq org-agenda-redo-command |
| 3115 | (list 'org-agenda include-all start-day ndays)) | 3194 | (list 'org-agenda include-all start-day ndays)) |
| 3116 | ;; Make the list of days | 3195 | ;; Make the list of days |
| @@ -3146,7 +3225,9 @@ NDAYS defaults to `org-agenda-ndays'." | |||
| 3146 | s (point)) | 3225 | s (point)) |
| 3147 | (if (or (= d today) | 3226 | (if (or (= d today) |
| 3148 | (and (not start-pos) (= d sd))) | 3227 | (and (not start-pos) (= d sd))) |
| 3149 | (setq start-pos (point))) | 3228 | (setq start-pos (point)) |
| 3229 | (if (and start-pos (not end-pos)) | ||
| 3230 | (setq end-pos (point)))) | ||
| 3150 | (setq files org-agenda-files | 3231 | (setq files org-agenda-files |
| 3151 | rtnall nil) | 3232 | rtnall nil) |
| 3152 | (while (setq file (pop files)) | 3233 | (while (setq file (pop files)) |
| @@ -3173,6 +3254,17 @@ NDAYS defaults to `org-agenda-ndays'." | |||
| 3173 | (put-text-property s (1- (point)) 'day d)))) | 3254 | (put-text-property s (1- (point)) 'day d)))) |
| 3174 | (goto-char (point-min)) | 3255 | (goto-char (point-min)) |
| 3175 | (setq buffer-read-only t) | 3256 | (setq buffer-read-only t) |
| 3257 | (if org-fit-agenda-window | ||
| 3258 | (fit-window-to-buffer nil (/ (* (frame-height) 3) 4) | ||
| 3259 | (/ (frame-height) 2))) | ||
| 3260 | (unless (and (pos-visible-in-window-p (point-min)) | ||
| 3261 | (pos-visible-in-window-p (point-max))) | ||
| 3262 | (goto-char (1- (point-max))) | ||
| 3263 | (recenter -1) | ||
| 3264 | (if (not (pos-visible-in-window-p (or start-pos 1))) | ||
| 3265 | (progn | ||
| 3266 | (goto-char (or start-pos 1)) | ||
| 3267 | (recenter 1)))) | ||
| 3176 | (goto-char (or start-pos 1)) | 3268 | (goto-char (or start-pos 1)) |
| 3177 | (if (not org-select-agenda-window) (select-window win)) | 3269 | (if (not org-select-agenda-window) (select-window win)) |
| 3178 | (message ""))) | 3270 | (message ""))) |
| @@ -3285,10 +3377,10 @@ With prefix ARG, go back that many times `org-agenda-ndays'." | |||
| 3285 | "Set the mode name to indicate all the small mode seetings." | 3377 | "Set the mode name to indicate all the small mode seetings." |
| 3286 | (setq mode-name | 3378 | (setq mode-name |
| 3287 | (concat "Org-Agenda" | 3379 | (concat "Org-Agenda" |
| 3288 | (if (equal org-agenda-ndays 1) " Day" "") | 3380 | (if (equal org-agenda-ndays 1) " Day" "") |
| 3289 | (if (equal org-agenda-ndays 7) " Week" "") | 3381 | (if (equal org-agenda-ndays 7) " Week" "") |
| 3290 | (if org-agenda-follow-mode " Follow" "") | 3382 | (if org-agenda-follow-mode " Follow" "") |
| 3291 | (if org-agenda-include-diary " Diary" ""))) | 3383 | (if org-agenda-include-diary " Diary" ""))) |
| 3292 | (force-mode-line-update)) | 3384 | (force-mode-line-update)) |
| 3293 | 3385 | ||
| 3294 | (defun org-agenda-post-command-hook () | 3386 | (defun org-agenda-post-command-hook () |
| @@ -3299,26 +3391,33 @@ With prefix ARG, go back that many times `org-agenda-ndays'." | |||
| 3299 | (defun org-get-entries-from-diary (date) | 3391 | (defun org-get-entries-from-diary (date) |
| 3300 | "Get the (emacs calendar) diary entries for DATE." | 3392 | "Get the (emacs calendar) diary entries for DATE." |
| 3301 | (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*") | 3393 | (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*") |
| 3302 | (diary-display-hook '(sort-diary-entries fancy-diary-display)) | 3394 | (diary-display-hook '(fancy-diary-display)) |
| 3395 | (list-diary-entries-hook | ||
| 3396 | (cons 'org-diary-default-entry list-diary-entries-hook)) | ||
| 3303 | entries | 3397 | entries |
| 3304 | (disable-org-agenda t)) | 3398 | (disable-org-diary t)) |
| 3305 | (save-excursion | 3399 | (save-excursion |
| 3306 | (save-window-excursion | 3400 | (save-window-excursion |
| 3307 | (list-diary-entries date 1))) | 3401 | (list-diary-entries date 1))) |
| 3308 | (if (not (get-buffer fancy-diary-buffer)) | 3402 | (if (not (get-buffer fancy-diary-buffer)) |
| 3309 | (setq entries nil) | 3403 | (setq entries nil) |
| 3310 | (save-excursion | 3404 | (save-excursion |
| 3311 | (set-buffer fancy-diary-buffer) | 3405 | (switch-to-buffer fancy-diary-buffer) |
| 3312 | (setq buffer-read-only nil) | 3406 | (setq buffer-read-only nil) |
| 3313 | (if (= (point-max) 1) | 3407 | (if (= (point-max) 1) |
| 3314 | ;; No entries | 3408 | ;; No entries |
| 3315 | (setq entries nil) | 3409 | (setq entries nil) |
| 3316 | ;; Omit the date | 3410 | ;; Omit the date and other unnecessary stuff |
| 3317 | (beginning-of-line 3) | 3411 | (org-agenda-cleanup-fancy-diary) |
| 3318 | (delete-region (point-min) (point)) | 3412 | ;; Add prefix to each line and extend the text properties |
| 3413 | (goto-char (point-min)) | ||
| 3319 | (while (and (re-search-forward "^" nil t) (not (eobp))) | 3414 | (while (and (re-search-forward "^" nil t) (not (eobp))) |
| 3320 | (replace-match " Diary: ")) | 3415 | (replace-match " Diary: ") |
| 3321 | (setq entries (buffer-substring (point-min) (- (point-max) 1)))) | 3416 | (add-text-properties (point-at-bol) (point) |
| 3417 | (text-properties-at (point)))) | ||
| 3418 | (if (= (point-max) 1) | ||
| 3419 | (setq entries nil) | ||
| 3420 | (setq entries (buffer-substring (point-min) (- (point-max) 1))))) | ||
| 3322 | (set-buffer-modified-p nil) | 3421 | (set-buffer-modified-p nil) |
| 3323 | (kill-buffer fancy-diary-buffer))) | 3422 | (kill-buffer fancy-diary-buffer))) |
| 3324 | (when entries | 3423 | (when entries |
| @@ -3337,6 +3436,49 @@ With prefix ARG, go back that many times `org-agenda-ndays'." | |||
| 3337 | x) | 3436 | x) |
| 3338 | entries))))) | 3437 | entries))))) |
| 3339 | 3438 | ||
| 3439 | (defun org-agenda-cleanup-fancy-diary () | ||
| 3440 | "Remove unwanted stuff in buffer created by fancy-diary-display. | ||
| 3441 | This gets rid of the date, the underline under the date, and | ||
| 3442 | the dummy entry installed by org-mode to ensure non-empty diary for each | ||
| 3443 | date." | ||
| 3444 | (goto-char (point-min)) | ||
| 3445 | (if (looking-at ".*?:[ \t]*") | ||
| 3446 | (progn | ||
| 3447 | (replace-match "") | ||
| 3448 | (re-search-forward "\n=+$" nil t) | ||
| 3449 | (replace-match "") | ||
| 3450 | (while (re-search-backward "^ +" nil t) (replace-match ""))) | ||
| 3451 | (re-search-forward "\n=+$" nil t) | ||
| 3452 | (delete-region (point-min) (min (point-max) (1+ (match-end 0))))) | ||
| 3453 | (if (re-search-forward "^Org-mode dummy\n?" nil t) | ||
| 3454 | (replace-match ""))) | ||
| 3455 | |||
| 3456 | ;; Advise the add-to-diary-list function to allow org to jump to | ||
| 3457 | ;; diary entires. Wrapped into eval-after-load to avoid loading | ||
| 3458 | ;; advice unnecessarily | ||
| 3459 | (eval-after-load "diary-lib" | ||
| 3460 | '(defadvice add-to-diary-list (before org-mark-diary-entry activate) | ||
| 3461 | "Make the position visible." | ||
| 3462 | (if (and (boundp 'disable-org-diary) ;; called from org-agenda | ||
| 3463 | (stringp string) | ||
| 3464 | (buffer-file-name)) | ||
| 3465 | (add-text-properties | ||
| 3466 | 0 (length string) | ||
| 3467 | (list 'mouse-face 'highlight | ||
| 3468 | 'keymap org-agenda-keymap | ||
| 3469 | 'help-echo | ||
| 3470 | (format | ||
| 3471 | "mouse-2 or RET jump to diary file %s" | ||
| 3472 | (abbreviate-file-name (buffer-file-name))) | ||
| 3473 | 'org-agenda-diary-link t | ||
| 3474 | 'org-marker (org-agenda-new-marker (point-at-bol))) | ||
| 3475 | string)))) | ||
| 3476 | |||
| 3477 | (defun org-diary-default-entry () | ||
| 3478 | "Add a dummy entry to the diary. | ||
| 3479 | Needed to avoid empty dates which mess up holiday display." | ||
| 3480 | (add-to-diary-list original-date "Org-mode dummy" "")) | ||
| 3481 | |||
| 3340 | (defun org-add-file (&optional file) | 3482 | (defun org-add-file (&optional file) |
| 3341 | "Add current file to the list of files in variable `org-agenda-files'. | 3483 | "Add current file to the list of files in variable `org-agenda-files'. |
| 3342 | These are the files which are being checked for agenda entries. | 3484 | These are the files which are being checked for agenda entries. |
| @@ -3468,7 +3610,7 @@ function from a program - use `org-agenda-get-day-entries' instead." | |||
| 3468 | file rtn results) | 3610 | file rtn results) |
| 3469 | ;; If this is called during org-agenda, don't return any entries to | 3611 | ;; If this is called during org-agenda, don't return any entries to |
| 3470 | ;; the calendar. Org Agenda will list these entries itself. | 3612 | ;; the calendar. Org Agenda will list these entries itself. |
| 3471 | (if (boundp 'disable-org-agenda) (setq files nil)) | 3613 | (if (boundp 'disable-org-diary) (setq files nil)) |
| 3472 | (while (setq file (pop files)) | 3614 | (while (setq file (pop files)) |
| 3473 | (setq rtn (apply 'org-agenda-get-day-entries file date args)) | 3615 | (setq rtn (apply 'org-agenda-get-day-entries file date args)) |
| 3474 | (setq results (append results rtn))) | 3616 | (setq results (append results rtn))) |
| @@ -3864,7 +4006,6 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 3864 | (let* ((pri (get-text-property (point-at-bol) 'priority))) | 4006 | (let* ((pri (get-text-property (point-at-bol) 'priority))) |
| 3865 | (message "Priority is %d" (if pri pri -1000)))) | 4007 | (message "Priority is %d" (if pri pri -1000)))) |
| 3866 | 4008 | ||
| 3867 | |||
| 3868 | (defun org-agenda-goto () | 4009 | (defun org-agenda-goto () |
| 3869 | "Go to the Org-mode file which contains the item at point." | 4010 | "Go to the Org-mode file which contains the item at point." |
| 3870 | (interactive) | 4011 | (interactive) |
| @@ -3875,10 +4016,11 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 3875 | (switch-to-buffer-other-window buffer) | 4016 | (switch-to-buffer-other-window buffer) |
| 3876 | (widen) | 4017 | (widen) |
| 3877 | (goto-char pos) | 4018 | (goto-char pos) |
| 3878 | (org-show-hidden-entry) | 4019 | (when (eq major-mode 'org-mode) |
| 3879 | (save-excursion | 4020 | (org-show-hidden-entry) |
| 3880 | (and (outline-next-heading) | 4021 | (save-excursion |
| 3881 | (org-flag-heading nil))))) ; show the next heading | 4022 | (and (outline-next-heading) |
| 4023 | (org-flag-heading nil)))))) ; show the next heading | ||
| 3882 | 4024 | ||
| 3883 | (defun org-agenda-switch-to () | 4025 | (defun org-agenda-switch-to () |
| 3884 | "Go to the Org-mode file which contains the item at point." | 4026 | "Go to the Org-mode file which contains the item at point." |
| @@ -3891,10 +4033,11 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 3891 | (delete-other-windows) | 4033 | (delete-other-windows) |
| 3892 | (widen) | 4034 | (widen) |
| 3893 | (goto-char pos) | 4035 | (goto-char pos) |
| 3894 | (org-show-hidden-entry) | 4036 | (when (eq major-mode 'org-mode) |
| 3895 | (save-excursion | 4037 | (org-show-hidden-entry) |
| 3896 | (and (outline-next-heading) | 4038 | (save-excursion |
| 3897 | (org-flag-heading nil))))) ; show the next heading | 4039 | (and (outline-next-heading) |
| 4040 | (org-flag-heading nil)))))) ; show the next heading | ||
| 3898 | 4041 | ||
| 3899 | (defun org-agenda-goto-mouse (ev) | 4042 | (defun org-agenda-goto-mouse (ev) |
| 3900 | "Go to the Org-mode file which contains the deadline at the mouse click." | 4043 | "Go to the Org-mode file which contains the deadline at the mouse click." |
| @@ -3923,12 +4066,18 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 3923 | (mouse-set-point ev) | 4066 | (mouse-set-point ev) |
| 3924 | (org-agenda-show)) | 4067 | (org-agenda-show)) |
| 3925 | 4068 | ||
| 4069 | (defun org-agenda-check-no-diary () | ||
| 4070 | "Check if the entry is a diary link and abort if yes." | ||
| 4071 | (if (get-text-property (point) 'org-agenda-diary-link) | ||
| 4072 | (org-agenda-error))) | ||
| 4073 | |||
| 3926 | (defun org-agenda-error () | 4074 | (defun org-agenda-error () |
| 3927 | (error "Command not allowed in this line.")) | 4075 | (error "Command not allowed in this line.")) |
| 3928 | 4076 | ||
| 3929 | (defun org-agenda-todo () | 4077 | (defun org-agenda-todo () |
| 3930 | "Cycle TODO state of line at point, also in Org-mode file." | 4078 | "Cycle TODO state of line at point, also in Org-mode file." |
| 3931 | (interactive) | 4079 | (interactive) |
| 4080 | (org-agenda-check-no-diary) | ||
| 3932 | (let* ((props (text-properties-at (point))) | 4081 | (let* ((props (text-properties-at (point))) |
| 3933 | (col (current-column)) | 4082 | (col (current-column)) |
| 3934 | (marker (or (get-text-property (point) 'org-marker) | 4083 | (marker (or (get-text-property (point) 'org-marker) |
| @@ -3971,6 +4120,7 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 3971 | (defun org-agenda-priority (&optional force-direction) | 4120 | (defun org-agenda-priority (&optional force-direction) |
| 3972 | "Set the priority of line at point, also in Org-mode file." | 4121 | "Set the priority of line at point, also in Org-mode file." |
| 3973 | (interactive) | 4122 | (interactive) |
| 4123 | (org-agenda-check-no-diary) | ||
| 3974 | (let* ((props (text-properties-at (point))) | 4124 | (let* ((props (text-properties-at (point))) |
| 3975 | (col (current-column)) | 4125 | (col (current-column)) |
| 3976 | (marker (or (get-text-property (point) 'org-marker) | 4126 | (marker (or (get-text-property (point) 'org-marker) |
| @@ -4003,6 +4153,7 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 4003 | (defun org-agenda-date-later (arg &optional what) | 4153 | (defun org-agenda-date-later (arg &optional what) |
| 4004 | "Change the date of this item to one day later." | 4154 | "Change the date of this item to one day later." |
| 4005 | (interactive "p") | 4155 | (interactive "p") |
| 4156 | (org-agenda-check-no-diary) | ||
| 4006 | (let* ((marker (or (get-text-property (point) 'org-marker) | 4157 | (let* ((marker (or (get-text-property (point) 'org-marker) |
| 4007 | (org-agenda-error))) | 4158 | (org-agenda-error))) |
| 4008 | (buffer (marker-buffer marker)) | 4159 | (buffer (marker-buffer marker)) |
| @@ -4022,8 +4173,9 @@ and by additional input from the age of a schedules or deadline entry." | |||
| 4022 | (org-agenda-date-later (- arg) what)) | 4173 | (org-agenda-date-later (- arg) what)) |
| 4023 | 4174 | ||
| 4024 | (defun org-agenda-date-today (arg) | 4175 | (defun org-agenda-date-today (arg) |
| 4025 | "Change the date of this item to one day later." | 4176 | "Change the date of this item to today." |
| 4026 | (interactive "p") | 4177 | (interactive "p") |
| 4178 | (org-agenda-check-no-diary) | ||
| 4027 | (let* ((marker (or (get-text-property (point) 'org-marker) | 4179 | (let* ((marker (or (get-text-property (point) 'org-marker) |
| 4028 | (org-agenda-error))) | 4180 | (org-agenda-error))) |
| 4029 | (buffer (marker-buffer marker)) | 4181 | (buffer (marker-buffer marker)) |
| @@ -4084,7 +4236,91 @@ All the standard commands work: block, weekly etc" | |||
| 4084 | (get-text-property point 'day)))) | 4236 | (get-text-property point 'day)))) |
| 4085 | (call-interactively cmd)) | 4237 | (call-interactively cmd)) |
| 4086 | (fset 'calendar-cursor-to-date oldf))))) | 4238 | (fset 'calendar-cursor-to-date oldf))))) |
| 4087 | 4239 | ||
| 4240 | |||
| 4241 | (defun org-agenda-execute-calendar-command (cmd) | ||
| 4242 | "Execute a calendar command from the agenda, with the date associated to | ||
| 4243 | the cursor position." | ||
| 4244 | (require 'diary-lib) | ||
| 4245 | (unless (get-text-property (point) 'day) | ||
| 4246 | (error "Don't know which date to use for calendar command")) | ||
| 4247 | (let* ((oldf (symbol-function 'calendar-cursor-to-date)) | ||
| 4248 | (point (point)) | ||
| 4249 | (mark (or (mark t) (point))) | ||
| 4250 | (date (calendar-gregorian-from-absolute | ||
| 4251 | (get-text-property point 'day))) | ||
| 4252 | (displayed-day (extract-calendar-day date)) | ||
| 4253 | (displayed-month (extract-calendar-month date)) | ||
| 4254 | (displayed-year (extract-calendar-year date))) | ||
| 4255 | (unwind-protect | ||
| 4256 | (progn | ||
| 4257 | (fset 'calendar-cursor-to-date | ||
| 4258 | (lambda (&optional error) | ||
| 4259 | (calendar-gregorian-from-absolute | ||
| 4260 | (get-text-property point 'day)))) | ||
| 4261 | (call-interactively cmd)) | ||
| 4262 | (fset 'calendar-cursor-to-date oldf)))) | ||
| 4263 | |||
| 4264 | (defun org-agenda-phases-of-moon () | ||
| 4265 | "Display the phases of the moon for 3 month around cursor date." | ||
| 4266 | (interactive) | ||
| 4267 | (org-agenda-execute-calendar-command 'calendar-phases-of-moon)) | ||
| 4268 | |||
| 4269 | (defun org-agenda-holidays () | ||
| 4270 | "Display the holidays for 3 month around cursor date." | ||
| 4271 | (interactive) | ||
| 4272 | (org-agenda-execute-calendar-command 'list-calendar-holidays)) | ||
| 4273 | |||
| 4274 | (defun org-agenda-sunrise-sunset (arg) | ||
| 4275 | "Display sunrise and sunset for the cursor date. | ||
| 4276 | Latitude and longitude can be specified with the variables | ||
| 4277 | `calendar-latitude' and `calendar-longitude'. When called with prefix | ||
| 4278 | argument, location will be prompted for." | ||
| 4279 | (interactive "P") | ||
| 4280 | (let ((calendar-longitude (if arg nil calendar-longitude)) | ||
| 4281 | (calendar-latitude (if arg nil calendar-latitude)) | ||
| 4282 | (calendar-location-name nil)) | ||
| 4283 | (org-agenda-execute-calendar-command 'calendar-sunrise-sunset))) | ||
| 4284 | |||
| 4285 | (defun org-agenda-goto-calendar () | ||
| 4286 | "Open the Emacs calendar with the date at the cursor." | ||
| 4287 | (interactive) | ||
| 4288 | (let* ((day (or (get-text-property (point) 'day) | ||
| 4289 | (error "Don't know which date to open in calendar"))) | ||
| 4290 | (date (calendar-gregorian-from-absolute day))) | ||
| 4291 | (calendar) | ||
| 4292 | (calendar-goto-date date))) | ||
| 4293 | |||
| 4294 | (defun org-agenda-convert-date () | ||
| 4295 | (interactive) | ||
| 4296 | (let ((day (get-text-property (point) 'day)) | ||
| 4297 | date s) | ||
| 4298 | (unless day | ||
| 4299 | (error "Don't know which date to convert")) | ||
| 4300 | (setq date (calendar-gregorian-from-absolute day)) | ||
| 4301 | (require 'cal-julian) | ||
| 4302 | (require 'cal-hebrew) | ||
| 4303 | (require 'cal-islam) | ||
| 4304 | (require 'cal-french) | ||
| 4305 | (require 'cal-mayan) | ||
| 4306 | (require 'cal-coptic) | ||
| 4307 | (require 'cal-persia) | ||
| 4308 | (require 'cal-china) | ||
| 4309 | (setq s (concat | ||
| 4310 | "Gregorian: " (calendar-date-string date) "\n" | ||
| 4311 | "Julian: " (calendar-julian-date-string date) "\n" | ||
| 4312 | "Astronomic: " (calendar-astro-date-string date) " (at noon UTC)\n" | ||
| 4313 | "Hebrew: " (calendar-hebrew-date-string date) "\n" | ||
| 4314 | "Islamic: " (calendar-islamic-date-string date) "\n" | ||
| 4315 | "French: " (calendar-french-date-string date) "\n" | ||
| 4316 | "Maya: " (calendar-mayan-date-string date) "\n" | ||
| 4317 | "Coptic: " (calendar-coptic-date-string date) "\n" | ||
| 4318 | "Persian: " (calendar-persian-date-string date) "\n" | ||
| 4319 | "Chineese: " (calendar-chinese-date-string date) "\n")) | ||
| 4320 | (with-output-to-temp-buffer "*Dates*" | ||
| 4321 | (princ s)) | ||
| 4322 | (fit-window-to-buffer (get-buffer-window "*Dates*")))) | ||
| 4323 | |||
| 4088 | ;;; Link Stuff | 4324 | ;;; Link Stuff |
| 4089 | 4325 | ||
| 4090 | (defun org-find-file-at-mouse (ev) | 4326 | (defun org-find-file-at-mouse (ev) |
| @@ -5087,14 +5323,23 @@ Before doing so, re-align the table if necessary." | |||
| 5087 | (skip-chars-backward "^|\n\r") | 5323 | (skip-chars-backward "^|\n\r") |
| 5088 | (if (looking-at " ") (forward-char 1))))) | 5324 | (if (looking-at " ") (forward-char 1))))) |
| 5089 | 5325 | ||
| 5090 | (defun org-table-copy-from-above (n) | 5326 | (defun org-table-copy-down (n) |
| 5091 | "Copy into the current column the nearest non-empty field from above. | 5327 | "Copy a field down in the current column. |
| 5092 | With prefix argument N, take the Nth non-empty field." | 5328 | If the field at the cursor is empty, copy into it the content of the nearest |
| 5329 | non-empty field above. With argument N, use the Nth non-empty field. | ||
| 5330 | If the current fields is not empty, it is copied down to the next row, and | ||
| 5331 | the cursor is moved with it. Therefore, repeating this command causes the | ||
| 5332 | column to be filled row-by-row. | ||
| 5333 | If the variable `org-table-copy-increment' is non-nil and the field is an | ||
| 5334 | integer, it will be incremented while copying." | ||
| 5093 | (interactive "p") | 5335 | (interactive "p") |
| 5094 | (let ((colpos (org-table-current-column)) | 5336 | (let* ((colpos (org-table-current-column)) |
| 5095 | (beg (org-table-begin)) | 5337 | (field (org-table-get-field)) |
| 5096 | txt) | 5338 | (non-empty (string-match "[^ \t]" field)) |
| 5339 | (beg (org-table-begin)) | ||
| 5340 | txt) | ||
| 5097 | (org-table-check-inside-data-field) | 5341 | (org-table-check-inside-data-field) |
| 5342 | (if non-empty (progn (org-table-next-row) (org-table-blank-field))) | ||
| 5098 | (if (save-excursion | 5343 | (if (save-excursion |
| 5099 | (setq txt | 5344 | (setq txt |
| 5100 | (catch 'exit | 5345 | (catch 'exit |
| @@ -5103,10 +5348,13 @@ With prefix argument N, take the Nth non-empty field." | |||
| 5103 | beg t)) | 5348 | beg t)) |
| 5104 | (org-table-goto-column colpos t) | 5349 | (org-table-goto-column colpos t) |
| 5105 | (if (and (looking-at | 5350 | (if (and (looking-at |
| 5106 | "|[ \t]*\\([^| \t][^|]*[^| \t]\\)[ \t]*|") | 5351 | "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|") |
| 5107 | (= (setq n (1- n)) 0)) | 5352 | (= (setq n (1- n)) 0)) |
| 5108 | (throw 'exit (match-string 1))))))) | 5353 | (throw 'exit (match-string 1))))))) |
| 5109 | (progn | 5354 | (progn |
| 5355 | (if (and org-table-copy-increment | ||
| 5356 | (string-match "^[0-9]+$" txt)) | ||
| 5357 | (setq txt (format "%d" (+ (string-to-int txt) 1)))) | ||
| 5110 | (insert txt) | 5358 | (insert txt) |
| 5111 | (org-table-align)) | 5359 | (org-table-align)) |
| 5112 | (error "No non-empty field found")))) | 5360 | (error "No non-empty field found")))) |
| @@ -5902,13 +6150,13 @@ separator line)." | |||
| 5902 | (string-to-int (match-string 1 form)) | 6150 | (string-to-int (match-string 1 form)) |
| 5903 | n0) | 6151 | n0) |
| 5904 | x (nth n fields)) | 6152 | x (nth n fields)) |
| 5905 | (unless x (error "Illegal field specifier \"%s\"" | 6153 | (unless x (error "Invalid field specifier \"%s\"" |
| 5906 | (match-string 0 form))) | 6154 | (match-string 0 form))) |
| 5907 | (if (equal (string-to-number x) 0) (setq x "0")) | 6155 | (if (equal (string-to-number x) 0) (setq x "0")) |
| 5908 | (setq form (replace-match x t t form))) | 6156 | (setq form (replace-match x t t form))) |
| 5909 | (setq ev (calc-eval (list form) 'num)) | 6157 | (setq ev (calc-eval (list form) 'num)) |
| 5910 | (if (listp ev) | 6158 | (if (listp ev) |
| 5911 | (error "Illegal expression: %s (%s at %d)" form (nth 1 ev) (car ev))) | 6159 | (error "Invalid expression: %s (%s at %d)" form (nth 1 ev) (car ev))) |
| 5912 | (org-table-blank-field) | 6160 | (org-table-blank-field) |
| 5913 | (if fmt | 6161 | (if fmt |
| 5914 | (insert (format fmt (string-to-number ev))) | 6162 | (insert (format fmt (string-to-number ev))) |
| @@ -6039,7 +6287,7 @@ table editor iin arbitrary modes.") | |||
| 6039 | ([(shift tab)] org-table-previous-field) | 6287 | ([(shift tab)] org-table-previous-field) |
| 6040 | ("\C-c\C-c" org-table-align) | 6288 | ("\C-c\C-c" org-table-align) |
| 6041 | ([(return)] org-table-next-row) | 6289 | ([(return)] org-table-next-row) |
| 6042 | ([(shift return)] org-table-copy-from-above) | 6290 | ([(shift return)] org-table-copy-down) |
| 6043 | ([(meta return)] org-table-wrap-region) | 6291 | ([(meta return)] org-table-wrap-region) |
| 6044 | ("\C-c\C-q" org-table-wrap-region) | 6292 | ("\C-c\C-q" org-table-wrap-region) |
| 6045 | ("\C-c?" org-table-current-column) | 6293 | ("\C-c?" org-table-current-column) |
| @@ -6157,7 +6405,7 @@ a reduced column width." | |||
| 6157 | "--" | 6405 | "--" |
| 6158 | ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] | 6406 | ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] |
| 6159 | ["Copy field from above" | 6407 | ["Copy field from above" |
| 6160 | org-table-copy-from-above :active (org-at-table-p) :keys "S-RET"] | 6408 | org-table-copy-down :active (org-at-table-p) :keys "S-RET"] |
| 6161 | "--" | 6409 | "--" |
| 6162 | ("Column" | 6410 | ("Column" |
| 6163 | ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-<left>"] | 6411 | ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-<left>"] |
| @@ -6678,7 +6926,57 @@ underlined headlines. The default is 3." | |||
| 6678 | (setq char (nth (- umax level) (reverse org-ascii-underline))) | 6926 | (setq char (nth (- umax level) (reverse org-ascii-underline))) |
| 6679 | (if org-export-with-section-numbers | 6927 | (if org-export-with-section-numbers |
| 6680 | (setq title (concat (org-section-number level) " " title))) | 6928 | (setq title (concat (org-section-number level) " " title))) |
| 6681 | (insert title "\n" (make-string (length title) char) "\n")))) | 6929 | (insert title "\n" (make-string (string-width title) char) "\n")))) |
| 6930 | |||
| 6931 | (defun org-export-copy-visible (&optional arg) | ||
| 6932 | "Copy the visible part of the buffer to another buffer, for printing. | ||
| 6933 | Also removes the first line of the buffer it is specifies a mode, | ||
| 6934 | and all options lines." | ||
| 6935 | (interactive "P") | ||
| 6936 | (let* ((filename (concat (file-name-sans-extension (buffer-file-name)) | ||
| 6937 | ".txt")) | ||
| 6938 | (buffer (find-file-noselect filename)) | ||
| 6939 | (ore (concat | ||
| 6940 | (org-make-options-regexp | ||
| 6941 | '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO" "STARTUP" | ||
| 6942 | "TITLE" "AUTHOR" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE")) | ||
| 6943 | (if org-noutline-p "\\(\n\\|$\\)" ""))) | ||
| 6944 | s e) | ||
| 6945 | (save-excursion | ||
| 6946 | (set-buffer buffer) | ||
| 6947 | (erase-buffer) | ||
| 6948 | (text-mode)) | ||
| 6949 | (save-excursion | ||
| 6950 | (setq s (goto-char (point-min))) | ||
| 6951 | (while (not (= (point) (point-max))) | ||
| 6952 | (goto-char (org-find-invisible)) | ||
| 6953 | (append-to-buffer buffer s (point)) | ||
| 6954 | (setq s (goto-char (org-find-visible))))) | ||
| 6955 | (switch-to-buffer-other-window buffer) | ||
| 6956 | (newline) | ||
| 6957 | (goto-char (point-min)) | ||
| 6958 | (if (looking-at ".*-\\*- mode:.*\n") | ||
| 6959 | (replace-match "")) | ||
| 6960 | (while (re-search-forward ore nil t) | ||
| 6961 | (replace-match "")) | ||
| 6962 | (goto-char (point-min)))) | ||
| 6963 | |||
| 6964 | (defun org-find-visible () | ||
| 6965 | (if (featurep 'noutline) | ||
| 6966 | (let ((s (point))) | ||
| 6967 | (while (and (not (= (point-max) (setq s (next-overlay-change s)))) | ||
| 6968 | (get-char-property s 'invisible))) | ||
| 6969 | s) | ||
| 6970 | (skip-chars-forward "^\n") | ||
| 6971 | (point))) | ||
| 6972 | (defun org-find-invisible () | ||
| 6973 | (if (featurep 'noutline) | ||
| 6974 | (let ((s (point))) | ||
| 6975 | (while (and (not (= (point-max) (setq s (next-overlay-change s)))) | ||
| 6976 | (not (get-char-property s 'invisible)))) | ||
| 6977 | s) | ||
| 6978 | (skip-chars-forward "^\r") | ||
| 6979 | (point))) | ||
| 6682 | 6980 | ||
| 6683 | ;; HTML | 6981 | ;; HTML |
| 6684 | 6982 | ||
| @@ -7423,7 +7721,7 @@ When LEVEL is non-nil, increase section numbers on that level." | |||
| 7423 | (define-key org-mode-map [(shift tab)] 'org-shifttab) | 7721 | (define-key org-mode-map [(shift tab)] 'org-shifttab) |
| 7424 | (define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) | 7722 | (define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) |
| 7425 | (define-key org-mode-map [(return)] 'org-return) | 7723 | (define-key org-mode-map [(return)] 'org-return) |
| 7426 | (define-key org-mode-map [(shift return)] 'org-table-copy-from-above) | 7724 | (define-key org-mode-map [(shift return)] 'org-table-copy-down) |
| 7427 | (define-key org-mode-map [(meta return)] 'org-meta-return) | 7725 | (define-key org-mode-map [(meta return)] 'org-meta-return) |
| 7428 | (define-key org-mode-map [(control up)] 'org-move-line-up) | 7726 | (define-key org-mode-map [(control up)] 'org-move-line-up) |
| 7429 | (define-key org-mode-map [(control down)] 'org-move-line-down) | 7727 | (define-key org-mode-map [(control down)] 'org-move-line-down) |
| @@ -7436,6 +7734,10 @@ When LEVEL is non-nil, increase section numbers on that level." | |||
| 7436 | (define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region) | 7734 | (define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region) |
| 7437 | (define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii) | 7735 | (define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii) |
| 7438 | (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) | 7736 | (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) |
| 7737 | (define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible) | ||
| 7738 | (define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible) | ||
| 7739 | (define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml) | ||
| 7740 | (define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml) | ||
| 7439 | (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) | 7741 | (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) |
| 7440 | (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) | 7742 | (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) |
| 7441 | (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) | 7743 | (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) |
| @@ -7444,7 +7746,7 @@ When LEVEL is non-nil, increase section numbers on that level." | |||
| 7444 | 7746 | ||
| 7445 | ;; FIXME: Do we really need to save match data in these commands? | 7747 | ;; FIXME: Do we really need to save match data in these commands? |
| 7446 | ;; I would like to remove it in order to minimize impact. | 7748 | ;; I would like to remove it in order to minimize impact. |
| 7447 | ;; Self-insert already does not preserve it. How much resources does this take??? | 7749 | ;; Self-insert already does not preserve it. How much resources used by this??? |
| 7448 | 7750 | ||
| 7449 | (defsubst org-table-p () | 7751 | (defsubst org-table-p () |
| 7450 | (if (and (eq major-mode 'org-mode) font-lock-mode) | 7752 | (if (and (eq major-mode 'org-mode) font-lock-mode) |
| @@ -7469,28 +7771,7 @@ overwritten, and the table is not marked as requiring realignment." | |||
| 7469 | 7771 | ||
| 7470 | ;; FIXME: | 7772 | ;; FIXME: |
| 7471 | ;; The following two functions might still be optimized to trigger | 7773 | ;; The following two functions might still be optimized to trigger |
| 7472 | ;; re-alignment less frequently. Right now they raise the flag each time | 7774 | ;; re-alignment less frequently. |
| 7473 | ;; (through before-change-functions). Here is how this could be minimized: | ||
| 7474 | ;; Basically, check if the non-white field width before deletion is | ||
| 7475 | ;; equal to the column width. If yes, the delete should trigger a | ||
| 7476 | ;; re-align. I have not implemented this so far because it is not so | ||
| 7477 | ;; easy, requires grabbing the field etc. So it may finally have some | ||
| 7478 | ;; impact on typing performance which we don't want. | ||
| 7479 | |||
| 7480 | ;; The defsubst is only a draft, untested... | ||
| 7481 | |||
| 7482 | ;; Maybe it is not so important to get rid of realigns - maybe the most | ||
| 7483 | ;; important aspect is to keep the table look noce as long as possible, | ||
| 7484 | ;; which is already achieved... | ||
| 7485 | |||
| 7486 | ;(defsubst org-check-delete-triggers-realign () | ||
| 7487 | ; (let ((pos (point))) | ||
| 7488 | ; (skip-chars-backward "^|\n") | ||
| 7489 | ; (and (looking-at " *\\(.*?\\) *|") | ||
| 7490 | ; (= (nth (1- (org-table-current-column)) | ||
| 7491 | ; org-table-last-column-widths) | ||
| 7492 | ; (- (match-end 1) (match-beginning 1))) | ||
| 7493 | ; (setq org-table-may-need-update t)))) | ||
| 7494 | 7775 | ||
| 7495 | (defun org-delete-backward-char (N) | 7776 | (defun org-delete-backward-char (N) |
| 7496 | "Like `delete-backward-char', insert whitespace at field end in tables. | 7777 | "Like `delete-backward-char', insert whitespace at field end in tables. |
| @@ -7769,7 +8050,7 @@ the automatic table editor has been turned off." | |||
| 7769 | ["Next row" org-return (org-at-table-p)] | 8050 | ["Next row" org-return (org-at-table-p)] |
| 7770 | "--" | 8051 | "--" |
| 7771 | ["Blank field" org-table-blank-field (org-at-table-p)] | 8052 | ["Blank field" org-table-blank-field (org-at-table-p)] |
| 7772 | ["Copy field from above" org-table-copy-from-above (org-at-table-p)] | 8053 | ["Copy field from above" org-table-copy-down (org-at-table-p)] |
| 7773 | "--" | 8054 | "--" |
| 7774 | ("Column" | 8055 | ("Column" |
| 7775 | ["Move column left" org-metaleft (org-at-table-p)] | 8056 | ["Move column left" org-metaleft (org-at-table-p)] |
| @@ -7807,8 +8088,10 @@ the automatic table editor has been turned off." | |||
| 7807 | "--" | 8088 | "--" |
| 7808 | ("Export" | 8089 | ("Export" |
| 7809 | ["ASCII" org-export-as-ascii t] | 8090 | ["ASCII" org-export-as-ascii t] |
| 8091 | ["Extract visible text" org-export-copy-visible t] | ||
| 7810 | ["HTML" org-export-as-html t] | 8092 | ["HTML" org-export-as-html t] |
| 7811 | ["HTML, and open" org-export-as-html-and-open t] | 8093 | ["HTML, and open" org-export-as-html-and-open t] |
| 8094 | ["OPML" org-export-as-opml nil] | ||
| 7812 | "--" | 8095 | "--" |
| 7813 | ["Option template" org-insert-export-options-template t] | 8096 | ["Option template" org-insert-export-options-template t] |
| 7814 | ["Toggle fixed width" org-toggle-fixed-width-section t]) | 8097 | ["Toggle fixed width" org-toggle-fixed-width-section t]) |
| @@ -8098,3 +8381,5 @@ When ENTRY is non-nil, show the entire entry." | |||
| 8098 | 8381 | ||
| 8099 | ;;; org.el ends here | 8382 | ;;; org.el ends here |
| 8100 | 8383 | ||
| 8384 | |||
| 8385 | |||
diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el index 5c9e6c1c6dc..dedad3b1aa9 100644 --- a/lisp/textmodes/refbib.el +++ b/lisp/textmodes/refbib.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; refbib.el --- convert refer-style references to ones usable by Latex bib | 1 | ;;; refbib.el --- convert refer-style references to ones usable by Latex bib |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1989 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1989, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Henry Kautz <kautz@research.att.com> | 5 | ;; Author: Henry Kautz <kautz@research.att.com> |
| 6 | ;; Keywords: bib, tex | 6 | ;; Keywords: bib, tex |
| @@ -35,7 +35,7 @@ | |||
| 35 | ;; 9/88, created H.Kautz | 35 | ;; 9/88, created H.Kautz |
| 36 | ;; modified 1/19/89, allow books with editor but no author; | 36 | ;; modified 1/19/89, allow books with editor but no author; |
| 37 | ;; added %O ordering field; | 37 | ;; added %O ordering field; |
| 38 | ;; appended illegal multiple fields, instead of | 38 | ;; appended invalid multiple fields, instead of |
| 39 | ;; discarding; | 39 | ;; discarding; |
| 40 | ;; added rule, a tech report whose %R number | 40 | ;; added rule, a tech report whose %R number |
| 41 | ;; contains "ISBN" is really a book | 41 | ;; contains "ISBN" is really a book |
| @@ -292,7 +292,7 @@ title if CAPITALIZE is true. Returns value of VAR." | |||
| 292 | (setq val item) | 292 | (setq val item) |
| 293 | (if unique | 293 | (if unique |
| 294 | (progn | 294 | (progn |
| 295 | (r2b-warning "*Illegal multiple field %s %s" field item) | 295 | (r2b-warning "*Invalid multiple field %s %s" field item) |
| 296 | (setq val (concat val "\n" item)) | 296 | (setq val (concat val "\n" item)) |
| 297 | ) | 297 | ) |
| 298 | (setq val (concat val "\n\t\tand " item)) | 298 | (setq val (concat val "\n\t\tand " item)) |
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el index 1c77a8f4b36..2e26e2d3da6 100644 --- a/lisp/textmodes/refer.el +++ b/lisp/textmodes/refer.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; refer.el --- look up references in bibliography files | 1 | ;;; refer.el --- look up references in bibliography files |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1992, 1996, 2001, 2004 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1992, 1996, 2001, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Ashwin Ram <ashwin@cc.gatech.edu> | 5 | ;; Author: Ashwin Ram <ashwin@cc.gatech.edu> |
| 6 | ;; Maintainer: Gernot Heiser <gernot@acm.org> | 6 | ;; Maintainer: Gernot Heiser <gernot@acm.org> |
| @@ -388,7 +388,7 @@ found on the last refer-find-entry or refer-find-next-entry." | |||
| 388 | (eq refer-bib-directory 'bibinputs))) | 388 | (eq refer-bib-directory 'bibinputs))) |
| 389 | (refer-expand-files refer-bib-files dir-list)) | 389 | (refer-expand-files refer-bib-files dir-list)) |
| 390 | ((listp refer-bib-files) refer-bib-files) | 390 | ((listp refer-bib-files) refer-bib-files) |
| 391 | (t (error "Illegal value for refer-bib-files: %s" | 391 | (t (error "Invalid value for refer-bib-files: %s" |
| 392 | refer-bib-files))))) | 392 | refer-bib-files))))) |
| 393 | (if (or (eq refer-bib-directory 'texinputs) | 393 | (if (or (eq refer-bib-directory 'texinputs) |
| 394 | (eq refer-bib-directory 'bibinputs)) | 394 | (eq refer-bib-directory 'bibinputs)) |
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el index bfe2cd8282b..f12d01716fe 100644 --- a/lisp/textmodes/reftex-cite.el +++ b/lisp/textmodes/reftex-cite.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;;; reftex-cite.el --- creating citations with RefTeX | 1 | ;;; reftex-cite.el --- creating citations with RefTeX |
| 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. | 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation, Inc. | ||
| 3 | 4 | ||
| 4 | ;; Author: Carsten Dominik <dominik@science.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@science.uva.nl> |
| 5 | ;; Version: 4.26 | 6 | ;; Version: 4.26 |
| @@ -982,7 +983,7 @@ While entering the regexp, completion on knows citation keys is possible. | |||
| 982 | 983 | ||
| 983 | (if (and reftex-comment-citations | 984 | (if (and reftex-comment-citations |
| 984 | (string-match "%l" reftex-cite-comment-format)) | 985 | (string-match "%l" reftex-cite-comment-format)) |
| 985 | (error "reftex-cite-comment-format contains illegal %%l")) | 986 | (error "reftex-cite-comment-format contains invalid %%l")) |
| 986 | 987 | ||
| 987 | (while (string-match | 988 | (while (string-match |
| 988 | "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)" | 989 | "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)" |
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el index cb02f2e056f..8fada9c4930 100644 --- a/lisp/textmodes/reftex-index.el +++ b/lisp/textmodes/reftex-index.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;;; reftex-index.el --- index support with RefTeX | 1 | ;;; reftex-index.el --- index support with RefTeX |
| 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. | 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation, Inc. | ||
| 3 | 4 | ||
| 4 | ;; Author: Carsten Dominik <dominik@science.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@science.uva.nl> |
| 5 | ;; Version: 4.26 | 6 | ;; Version: 4.26 |
| @@ -928,7 +929,7 @@ When index is restricted, select the previous section as restriction criterion." | |||
| 928 | (error "Not changed")) | 929 | (error "Not changed")) |
| 929 | ((string= npart "") | 930 | ((string= npart "") |
| 930 | (if dont-allow-empty | 931 | (if dont-allow-empty |
| 931 | (error "Illegal value") | 932 | (error "Invalid value") |
| 932 | (setf (nth n analyze) npart))) | 933 | (setf (nth n analyze) npart))) |
| 933 | (t (setf (nth n analyze) (concat initial npart)))) | 934 | (t (setf (nth n analyze) (concat initial npart)))) |
| 934 | (setq new (apply 'concat analyze)) | 935 | (setq new (apply 'concat analyze)) |
| @@ -1385,7 +1386,7 @@ match, the user will be asked to confirm the replacement." | |||
| 1385 | (file-regular-p reftex-index-phrases-restrict-file)) | 1386 | (file-regular-p reftex-index-phrases-restrict-file)) |
| 1386 | (list reftex-index-phrases-restrict-file)) | 1387 | (list reftex-index-phrases-restrict-file)) |
| 1387 | ((stringp reftex-index-phrases-restrict-file) | 1388 | ((stringp reftex-index-phrases-restrict-file) |
| 1388 | (error "Illegal restriction file %s" | 1389 | (error "Invalid restriction file %s" |
| 1389 | reftex-index-phrases-restrict-file)) | 1390 | reftex-index-phrases-restrict-file)) |
| 1390 | (t reftex-index-phrases-files))) | 1391 | (t reftex-index-phrases-files))) |
| 1391 | (as-words reftex-index-phrases-search-whole-words)) | 1392 | (as-words reftex-index-phrases-search-whole-words)) |
diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el index 630c7101725..ce1e3d77d72 100644 --- a/lisp/textmodes/reftex-parse.el +++ b/lisp/textmodes/reftex-parse.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;;; reftex-parse.el --- parser functions for RefTeX | 1 | ;;; reftex-parse.el --- parser functions for RefTeX |
| 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. | 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation, Inc. | ||
| 3 | 4 | ||
| 4 | ;; Author: Carsten Dominik <dominik@science.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@science.uva.nl> |
| 5 | ;; Version: 4.26 | 6 | ;; Version: 4.26 |
| @@ -544,7 +545,7 @@ of master file." | |||
| 544 | (funcall parse env) | 545 | (funcall parse env) |
| 545 | (error (format "HOOK ERROR: %s" (cdr error-var)))))) | 546 | (error (format "HOOK ERROR: %s" (cdr error-var)))))) |
| 546 | (t | 547 | (t |
| 547 | "ILLEGAL VALUE OF PARSE")))) | 548 | "INVALID VALUE OF PARSE")))) |
| 548 | 549 | ||
| 549 | (defun reftex-where-am-I () | 550 | (defun reftex-where-am-I () |
| 550 | ;; Return the docstruct entry above point. Actually returns a cons | 551 | ;; Return the docstruct entry above point. Actually returns a cons |
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el index 43095e2d684..6afbb77767c 100644 --- a/lisp/textmodes/reftex-ref.el +++ b/lisp/textmodes/reftex-ref.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;;; reftex-ref.el --- code to create labels and references with RefTeX | 1 | ;;; reftex-ref.el --- code to create labels and references with RefTeX |
| 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. | 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation, Inc. | ||
| 3 | 4 | ||
| 4 | ;; Author: Carsten Dominik <dominik@science.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@science.uva.nl> |
| 5 | ;; Version: 4.26 | 6 | ;; Version: 4.26 |
| @@ -172,7 +173,7 @@ This function is controlled by the settings of reftex-insert-label-flags." | |||
| 172 | (nth 2 (reftex-label-info " " nil nil t)))) | 173 | (nth 2 (reftex-label-info " " nil nil t)))) |
| 173 | ;; Catch the cases where the is actually no context available. | 174 | ;; Catch the cases where the is actually no context available. |
| 174 | (if (or (string-match "NO MATCH FOR CONTEXT REGEXP" default) | 175 | (if (or (string-match "NO MATCH FOR CONTEXT REGEXP" default) |
| 175 | (string-match "ILLEGAL VALUE OF PARSE" default) | 176 | (string-match "INVALID VALUE OF PARSE" default) |
| 176 | (string-match "SECTION HEADING NOT FOUND" default) | 177 | (string-match "SECTION HEADING NOT FOUND" default) |
| 177 | (string-match "HOOK ERROR" default) | 178 | (string-match "HOOK ERROR" default) |
| 178 | (string-match "^[ \t]*$" default)) | 179 | (string-match "^[ \t]*$" default)) |
| @@ -217,7 +218,7 @@ This function is controlled by the settings of reftex-insert-label-flags." | |||
| 217 | 218 | ||
| 218 | ;; Test if label contains strange characters | 219 | ;; Test if label contains strange characters |
| 219 | ((string-match reftex-label-illegal-re label) | 220 | ((string-match reftex-label-illegal-re label) |
| 220 | (message "Label \"%s\" contains illegal characters" label) | 221 | (message "Label \"%s\" contains invalid characters" label) |
| 221 | (ding) | 222 | (ding) |
| 222 | (sit-for 2)) | 223 | (sit-for 2)) |
| 223 | 224 | ||
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el index a7c0cb1c1ad..b2ca7bed250 100644 --- a/lisp/textmodes/reftex-vars.el +++ b/lisp/textmodes/reftex-vars.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;;; reftex-vars.el --- configuration variables for RefTeX | 1 | ;;; reftex-vars.el --- configuration variables for RefTeX |
| 2 | ;; Copyright (c) 1997, 1998, 1999, 2003, 2004 Free Software Foundation, Inc. | 2 | ;; Copyright (c) 1997, 1998, 1999, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation, Inc. | ||
| 3 | 4 | ||
| 4 | ;; Author: Carsten Dominik <dominik@science.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@science.uva.nl> |
| 5 | ;; Version: 4.26 | 6 | ;; Version: 4.26 |
| @@ -747,7 +748,7 @@ And here is the setup for RefTeX: | |||
| 747 | 748 | ||
| 748 | If DERIVE is t, RefTeX will try to derive a sensible label from context. | 749 | If DERIVE is t, RefTeX will try to derive a sensible label from context. |
| 749 | A section label for example will be derived from the section heading. | 750 | A section label for example will be derived from the section heading. |
| 750 | The conversion of the context to a legal label is governed by the | 751 | The conversion of the context to a valid label is governed by the |
| 751 | specifications given in `reftex-derive-label-parameters'. | 752 | specifications given in `reftex-derive-label-parameters'. |
| 752 | If RefTeX fails to derive a label, it will prompt the user. | 753 | If RefTeX fails to derive a label, it will prompt the user. |
| 753 | If DERIVE is nil, the label generated will consist of the prefix and a | 754 | If DERIVE is nil, the label generated will consist of the prefix and a |
| @@ -790,7 +791,7 @@ e (equation), n (footnote), N (endnote), plus any definitions in | |||
| 790 | (string :tag "selected label types" "")))) | 791 | (string :tag "selected label types" "")))) |
| 791 | 792 | ||
| 792 | (defcustom reftex-string-to-label-function 'reftex-string-to-label | 793 | (defcustom reftex-string-to-label-function 'reftex-string-to-label |
| 793 | "Function to turn an arbitrary string into a legal label. | 794 | "Function to turn an arbitrary string into a valid label. |
| 794 | RefTeX's default function uses the variable `reftex-derive-label-parameters'." | 795 | RefTeX's default function uses the variable `reftex-derive-label-parameters'." |
| 795 | :group 'reftex-making-and-inserting-labels | 796 | :group 'reftex-making-and-inserting-labels |
| 796 | :type 'symbol) | 797 | :type 'symbol) |
| @@ -798,7 +799,7 @@ RefTeX's default function uses the variable `reftex-derive-label-parameters'." | |||
| 798 | (defcustom reftex-translate-to-ascii-function 'reftex-latin1-to-ascii | 799 | (defcustom reftex-translate-to-ascii-function 'reftex-latin1-to-ascii |
| 799 | "Filter function which will process a context string before it is used | 800 | "Filter function which will process a context string before it is used |
| 800 | to derive a label from it. The intended application is to convert ISO or | 801 | to derive a label from it. The intended application is to convert ISO or |
| 801 | Mule characters into something legal in labels. The default function | 802 | Mule characters into something valid in labels. The default function |
| 802 | removes the accents from Latin-1 characters. X-Symbol (>=2.6) sets this | 803 | removes the accents from Latin-1 characters. X-Symbol (>=2.6) sets this |
| 803 | variable to the much more general `x-symbol-translate-to-ascii'." | 804 | variable to the much more general `x-symbol-translate-to-ascii'." |
| 804 | :group 'reftex-making-and-inserting-labels | 805 | :group 'reftex-making-and-inserting-labels |
| @@ -811,8 +812,8 @@ This variable is a list of the following items. | |||
| 811 | 812 | ||
| 812 | NWORDS Number of words to use. | 813 | NWORDS Number of words to use. |
| 813 | MAXCHAR Maximum number of characters in a label string. | 814 | MAXCHAR Maximum number of characters in a label string. |
| 814 | ILLEGAL nil: Throw away any words containing characters illegal in labels. | 815 | INVALID nil: Throw away any words containing characters invalid in labels. |
| 815 | t: Throw away only the illegal characters, not the whole word. | 816 | t: Throw away only the invalid characters, not the whole word. |
| 816 | ABBREV nil: Never abbreviate words. | 817 | ABBREV nil: Never abbreviate words. |
| 817 | t: Always abbreviate words (see `reftex-abbrev-parameters'). | 818 | t: Always abbreviate words (see `reftex-abbrev-parameters'). |
| 818 | not t and not nil: Abbreviate words if necessary to shorten | 819 | not t and not nil: Abbreviate words if necessary to shorten |
| @@ -823,7 +824,7 @@ DOWNCASE t: Downcase words before using them." | |||
| 823 | :group 'reftex-making-and-inserting-labels | 824 | :group 'reftex-making-and-inserting-labels |
| 824 | :type '(list (integer :tag "Number of words " 3) | 825 | :type '(list (integer :tag "Number of words " 3) |
| 825 | (integer :tag "Maximum label length " 20) | 826 | (integer :tag "Maximum label length " 20) |
| 826 | (choice :tag "Illegal characters in words" | 827 | (choice :tag "Invalid characters in words" |
| 827 | (const :tag "throw away entire word" nil) | 828 | (const :tag "throw away entire word" nil) |
| 828 | (const :tag "throw away single chars" t)) | 829 | (const :tag "throw away single chars" t)) |
| 829 | (choice :tag "Abbreviate words " | 830 | (choice :tag "Abbreviate words " |
| @@ -837,7 +838,7 @@ DOWNCASE t: Downcase words before using them." | |||
| 837 | (option (boolean :tag "Downcase words ")))) | 838 | (option (boolean :tag "Downcase words ")))) |
| 838 | 839 | ||
| 839 | (defcustom reftex-label-illegal-re "[^-a-zA-Z0-9_+=:;,.]" | 840 | (defcustom reftex-label-illegal-re "[^-a-zA-Z0-9_+=:;,.]" |
| 840 | "Regexp matching characters not legal in labels." | 841 | "Regexp matching characters not valid in labels." |
| 841 | :group 'reftex-making-and-inserting-labels | 842 | :group 'reftex-making-and-inserting-labels |
| 842 | :type '(regexp :tag "Regular Expression")) | 843 | :type '(regexp :tag "Regular Expression")) |
| 843 | 844 | ||
| @@ -1226,7 +1227,7 @@ phrase buffer. | |||
| 1226 | 1227 | ||
| 1227 | The final entry may also be a symbol if this entry has a association | 1228 | The final entry may also be a symbol if this entry has a association |
| 1228 | in the variable `reftex-index-macros-builtin' to specify the main | 1229 | in the variable `reftex-index-macros-builtin' to specify the main |
| 1229 | indexing package you are using. Legal values are currently | 1230 | indexing package you are using. Valid values are currently |
| 1230 | default The LaTeX default - unnecessary to specify this one | 1231 | default The LaTeX default - unnecessary to specify this one |
| 1231 | multind The multind.sty package | 1232 | multind The multind.sty package |
| 1232 | index The index.sty package | 1233 | index The index.sty package |
| @@ -1281,7 +1282,7 @@ DEFAULT-TAG: This is the tag to be used if the macro requires a TAG argument. | |||
| 1281 | When working with multiple indexes, RefTeX queries for an index tag when | 1282 | When working with multiple indexes, RefTeX queries for an index tag when |
| 1282 | creating index entries or displaying a specific index. This variable controls | 1283 | creating index entries or displaying a specific index. This variable controls |
| 1283 | the default offered for these queries. The default can be selected with RET | 1284 | the default offered for these queries. The default can be selected with RET |
| 1284 | during selection or completion. Legal values of this variable are: | 1285 | during selection or completion. Valid values of this variable are: |
| 1285 | 1286 | ||
| 1286 | nil Do not provide a default index | 1287 | nil Do not provide a default index |
| 1287 | \"tag\" The default index tag given as a string, e.g. \"idx\". | 1288 | \"tag\" The default index tag given as a string, e.g. \"idx\". |
| @@ -1526,9 +1527,9 @@ This is a list of items, each item is like: (TYPE . (DEF-EXT OTHER-EXT ...)) | |||
| 1526 | 1527 | ||
| 1527 | TYPE: File type like \"bib\" or \"tex\". | 1528 | TYPE: File type like \"bib\" or \"tex\". |
| 1528 | DEF-EXT: The default extension for that file type, like \".tex\" or \".bib\". | 1529 | DEF-EXT: The default extension for that file type, like \".tex\" or \".bib\". |
| 1529 | OTHER-EXT: Any number of other legal extensions for this file type. | 1530 | OTHER-EXT: Any number of other valid extensions for this file type. |
| 1530 | 1531 | ||
| 1531 | When a files is searched and it does not have any of the legal extensions, | 1532 | When a files is searched and it does not have any of the valid extensions, |
| 1532 | we try the default extension first, and then the naked file name. | 1533 | we try the default extension first, and then the naked file name. |
| 1533 | 1534 | ||
| 1534 | If you are using AUCTeX, you also need to add new extensions to | 1535 | If you are using AUCTeX, you also need to add new extensions to |
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index 49485c24725..865217dab08 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX | 1 | ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX |
| 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. | 2 | ;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 |
| 3 | ;; Free Software Foundation, Inc. | ||
| 3 | 4 | ||
| 4 | ;; Author: Carsten Dominik <dominik@science.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@science.uva.nl> |
| 5 | ;; Version: 4.26 | 6 | ;; Version: 4.26 |
| @@ -1416,7 +1417,7 @@ Valid actions are: readable, restore, read, kill, write." | |||
| 1416 | ((= key ?\C-i) | 1417 | ((= key ?\C-i) |
| 1417 | (setq prefix (completing-read "Prefix: " xr-alist nil t)) | 1418 | (setq prefix (completing-read "Prefix: " xr-alist nil t)) |
| 1418 | (- len (length (memq (assoc prefix xr-alist) xr-alist)))) | 1419 | (- len (length (memq (assoc prefix xr-alist) xr-alist)))) |
| 1419 | (t (error "Illegal document selection [%c]" key))))))))) | 1420 | (t (error "Invalid document selection [%c]" key))))))))) |
| 1420 | 1421 | ||
| 1421 | ;;; ========================================================================= | 1422 | ;;; ========================================================================= |
| 1422 | ;;; | 1423 | ;;; |
| @@ -1424,7 +1425,7 @@ Valid actions are: readable, restore, read, kill, write." | |||
| 1424 | 1425 | ||
| 1425 | (defun reftex-locate-file (file type master-dir &optional die) | 1426 | (defun reftex-locate-file (file type master-dir &optional die) |
| 1426 | "Find FILE of type TYPE in MASTER-DIR or on the path associcted with TYPE. | 1427 | "Find FILE of type TYPE in MASTER-DIR or on the path associcted with TYPE. |
| 1427 | If the file does not have any of the legal extensions for TYPE, | 1428 | If the file does not have any of the valid extensions for TYPE, |
| 1428 | try first the default extension and only then the naked file name. | 1429 | try first the default extension and only then the naked file name. |
| 1429 | When DIE is non-nil, throw an error if file not found." | 1430 | When DIE is non-nil, throw an error if file not found." |
| 1430 | (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t))) | 1431 | (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t))) |
| @@ -2167,17 +2168,17 @@ Works on both Emacs and XEmacs." | |||
| 2167 | (reftex-convert-string string "[-~ \t\n\r,;]" nil t t | 2168 | (reftex-convert-string string "[-~ \t\n\r,;]" nil t t |
| 2168 | 5 40 nil 1 " " (nth 5 reftex-derive-label-parameters))) | 2169 | 5 40 nil 1 " " (nth 5 reftex-derive-label-parameters))) |
| 2169 | 2170 | ||
| 2170 | (defun reftex-convert-string (string split-re illegal-re dot keep-fp | 2171 | (defun reftex-convert-string (string split-re invalid-re dot keep-fp |
| 2171 | nwords maxchar illegal abbrev sep | 2172 | nwords maxchar invalid abbrev sep |
| 2172 | ignore-words &optional downcase) | 2173 | ignore-words &optional downcase) |
| 2173 | "Convert a string (a sentence) to something shorter. | 2174 | "Convert a string (a sentence) to something shorter. |
| 2174 | SPLIT-RE is the regular expression used to split the string into words. | 2175 | SPLIT-RE is the regular expression used to split the string into words. |
| 2175 | ILLEGAL-RE matches characters which are illegal in the final string. | 2176 | INVALID-RE matches characters which are invalid in the final string. |
| 2176 | DOT t means add dots to abbreviated words. | 2177 | DOT t means add dots to abbreviated words. |
| 2177 | KEEP-FP t means to keep a final punctuation when applicable. | 2178 | KEEP-FP t means to keep a final punctuation when applicable. |
| 2178 | NWORDS Number of words to use. | 2179 | NWORDS Number of words to use. |
| 2179 | MAXCHAR Maximum number of characters in the final string. | 2180 | MAXCHAR Maximum number of characters in the final string. |
| 2180 | ILLEGAL nil: Throw away any words containing stuff matched with ILLEGAL-RE. | 2181 | INVALID nil: Throw away any words containing stuff matched with INVALID-RE. |
| 2181 | t: Throw away only the matched part, not the whole word. | 2182 | t: Throw away only the matched part, not the whole word. |
| 2182 | ABBREV nil: Never abbreviate words. | 2183 | ABBREV nil: Never abbreviate words. |
| 2183 | t: Always abbreviate words (see `reftex-abbrev-parameters'). | 2184 | t: Always abbreviate words (see `reftex-abbrev-parameters'). |
| @@ -2187,7 +2188,7 @@ SEP String separating different words in the output string. | |||
| 2187 | IGNORE-WORDS List of words which should be removed from the string." | 2188 | IGNORE-WORDS List of words which should be removed from the string." |
| 2188 | 2189 | ||
| 2189 | (let* ((words0 (split-string string (or split-re "[ \t\n\r]"))) | 2190 | (let* ((words0 (split-string string (or split-re "[ \t\n\r]"))) |
| 2190 | (reftex-label-illegal-re (or illegal-re "\000")) | 2191 | (reftex-label-illegal-re (or invalid-re "\000")) |
| 2191 | (abbrev-re (concat | 2192 | (abbrev-re (concat |
| 2192 | "\\`\\(" | 2193 | "\\`\\(" |
| 2193 | (make-string (nth 0 reftex-abbrev-parameters) ?.) | 2194 | (make-string (nth 0 reftex-abbrev-parameters) ?.) |
| @@ -2203,7 +2204,7 @@ IGNORE-WORDS List of words which should be removed from the string." | |||
| 2203 | (cond | 2204 | (cond |
| 2204 | ((member (downcase word) ignore-words)) | 2205 | ((member (downcase word) ignore-words)) |
| 2205 | ((string-match reftex-label-illegal-re word) | 2206 | ((string-match reftex-label-illegal-re word) |
| 2206 | (when illegal | 2207 | (when invalid |
| 2207 | (while (string-match reftex-label-illegal-re word) | 2208 | (while (string-match reftex-label-illegal-re word) |
| 2208 | (setq word (replace-match "" nil nil word))) | 2209 | (setq word (replace-match "" nil nil word))) |
| 2209 | (push word words))) | 2210 | (push word words))) |
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index b97b400895d..34d39807d2d 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el | |||
| @@ -1802,7 +1802,7 @@ have <h1>Very Major Headlines</h1> through <h6>Very Minor Headlines</h6> | |||
| 1802 | 1802 | ||
| 1803 | <p>Paragraphs only need an opening tag. Line breaks and multiple spaces are | 1803 | <p>Paragraphs only need an opening tag. Line breaks and multiple spaces are |
| 1804 | ignored unless the text is <pre>preformatted.</pre> Text can be marked as | 1804 | ignored unless the text is <pre>preformatted.</pre> Text can be marked as |
| 1805 | <b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-g or | 1805 | <b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-o or |
| 1806 | Edit/Text Properties/Face commands. | 1806 | Edit/Text Properties/Face commands. |
| 1807 | 1807 | ||
| 1808 | Pages can have <a name=\"SOMENAME\">named points</a> and can link other points | 1808 | Pages can have <a name=\"SOMENAME\">named points</a> and can link other points |
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index cf8d642a43e..0c83406318a 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el | |||
| @@ -1562,8 +1562,9 @@ Return the process in which TeX is running." | |||
| 1562 | (concat | 1562 | (concat |
| 1563 | (if file | 1563 | (if file |
| 1564 | (if star (concat (substring cmd 0 star) | 1564 | (if star (concat (substring cmd 0 star) |
| 1565 | file (substring cmd (1+ star))) | 1565 | (shell-quote-argument file) |
| 1566 | (concat cmd " " file)) | 1566 | (substring cmd (1+ star))) |
| 1567 | (concat cmd " " (shell-quote-argument file))) | ||
| 1567 | cmd) | 1568 | cmd) |
| 1568 | (if background "&" "")))) | 1569 | (if background "&" "")))) |
| 1569 | ;; Switch to buffer before checking for subproc output in it. | 1570 | ;; Switch to buffer before checking for subproc output in it. |
| @@ -1886,8 +1887,8 @@ FILE is typically the output DVI or PDF file." | |||
| 1886 | (prog1 (file-name-directory (expand-file-name file)) | 1887 | (prog1 (file-name-directory (expand-file-name file)) |
| 1887 | (setq file (file-name-nondirectory file)))) | 1888 | (setq file (file-name-nondirectory file)))) |
| 1888 | (root (file-name-sans-extension file)) | 1889 | (root (file-name-sans-extension file)) |
| 1889 | (fspec (list (cons ?r (comint-quote-filename root)) | 1890 | (fspec (list (cons ?r (shell-quote-argument root)) |
| 1890 | (cons ?f (comint-quote-filename file)))) | 1891 | (cons ?f (shell-quote-argument file)))) |
| 1891 | (default (tex-compile-default fspec))) | 1892 | (default (tex-compile-default fspec))) |
| 1892 | (list default-directory | 1893 | (list default-directory |
| 1893 | (completing-read | 1894 | (completing-read |
| @@ -1908,14 +1909,14 @@ FILE is typically the output DVI or PDF file." | |||
| 1908 | (compile-command | 1909 | (compile-command |
| 1909 | (if star | 1910 | (if star |
| 1910 | (concat (substring command 0 star) | 1911 | (concat (substring command 0 star) |
| 1911 | (comint-quote-filename file) | 1912 | (shell-quote-argument file) |
| 1912 | (substring command (1+ star))) | 1913 | (substring command (1+ star))) |
| 1913 | (concat command " " | 1914 | (concat command " " |
| 1914 | tex-start-options | 1915 | tex-start-options |
| 1915 | (if (< 0 (length tex-start-commands)) | 1916 | (if (< 0 (length tex-start-commands)) |
| 1916 | (concat | 1917 | (concat |
| 1917 | (shell-quote-argument tex-start-commands) " ")) | 1918 | (shell-quote-argument tex-start-commands) " ")) |
| 1918 | (comint-quote-filename file))))) | 1919 | (shell-quote-argument file))))) |
| 1919 | (tex-send-tex-command compile-command dir))) | 1920 | (tex-send-tex-command compile-command dir))) |
| 1920 | 1921 | ||
| 1921 | (defun tex-send-tex-command (cmd &optional dir) | 1922 | (defun tex-send-tex-command (cmd &optional dir) |
diff --git a/lisp/thumbs.el b/lisp/thumbs.el index 5ceb4f2c148..fd3cb13de98 100644 --- a/lisp/thumbs.el +++ b/lisp/thumbs.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; thumbs.el --- Thumbnails previewer for images files | 1 | ;;; thumbs.el --- Thumbnails previewer for images files |
| 2 | 2 | ||
| 3 | ;; Copyright 2004 Free Software Foundation, Inc | 3 | ;; Copyright 2004, 2005 Free Software Foundation, Inc |
| 4 | 4 | ||
| 5 | ;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca> | 5 | ;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca> |
| 6 | ;; Keywords: Multimedia | 6 | ;; Keywords: Multimedia |
| @@ -630,7 +630,7 @@ Open another window." | |||
| 630 | 630 | ||
| 631 | (defun thumbs-modify-image (action &optional arg) | 631 | (defun thumbs-modify-image (action &optional arg) |
| 632 | "Call convert to do ACTION on image with argument ARG. | 632 | "Call convert to do ACTION on image with argument ARG. |
| 633 | ACTION and ARG should be legal convert command." | 633 | ACTION and ARG should be a valid convert command." |
| 634 | (interactive "sAction: \nsValue: ") | 634 | (interactive "sAction: \nsValue: ") |
| 635 | ;; cleaning of old temp file | 635 | ;; cleaning of old temp file |
| 636 | (mapc 'delete-file | 636 | (mapc 'delete-file |
diff --git a/lisp/tooltip.el b/lisp/tooltip.el index 6ed93a0e99e..e6a85439166 100644 --- a/lisp/tooltip.el +++ b/lisp/tooltip.el | |||
| @@ -130,7 +130,7 @@ position to pop up the tooltip." | |||
| 130 | 130 | ||
| 131 | (defcustom tooltip-gud-display | 131 | (defcustom tooltip-gud-display |
| 132 | '((eq (tooltip-event-buffer tooltip-gud-event) | 132 | '((eq (tooltip-event-buffer tooltip-gud-event) |
| 133 | (marker-buffer overlay-arrow-position))) | 133 | (marker-buffer gud-overlay-arrow-position))) |
| 134 | "List of forms determining where GUD tooltips are displayed. | 134 | "List of forms determining where GUD tooltips are displayed. |
| 135 | 135 | ||
| 136 | Forms in the list are combined with AND. The default is to display | 136 | Forms in the list are combined with AND. The default is to display |
diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el index ec24282702b..1136ce565a8 100644 --- a/lisp/vc-cvs.el +++ b/lisp/vc-cvs.el | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | ;;; vc-cvs.el --- non-resident support for CVS version-control | 1 | ;;; vc-cvs.el --- non-resident support for CVS version-control |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1995,98,99,2000,2001,02,2003 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1995,98,99,2000,2001,02,2003, 2005 |
| 4 | ;; Free Software Foundation, Inc. | ||
| 4 | 5 | ||
| 5 | ;; Author: FSF (see vc.el for full credits) | 6 | ;; Author: FSF (see vc.el for full credits) |
| 6 | ;; Maintainer: Andre Spiegel <spiegel@gnu.org> | 7 | ;; Maintainer: Andre Spiegel <spiegel@gnu.org> |
| @@ -745,7 +746,7 @@ is `local'. | |||
| 745 | The default METHOD for a CVS root of the form | 746 | The default METHOD for a CVS root of the form |
| 746 | [USER@]HOSTNAME:/path/to/repository | 747 | [USER@]HOSTNAME:/path/to/repository |
| 747 | is `ext'. | 748 | is `ext'. |
| 748 | For an empty string, nil is returned (illegal CVS root)." | 749 | For an empty string, nil is returned (invalid CVS root)." |
| 749 | ;; Split CVS root into colon separated fields (0-4). | 750 | ;; Split CVS root into colon separated fields (0-4). |
| 750 | ;; The `x:' makes sure, that leading colons are not lost; | 751 | ;; The `x:' makes sure, that leading colons are not lost; |
| 751 | ;; `HOST:/PATH' is then different from `:METHOD:/PATH'. | 752 | ;; `HOST:/PATH' is then different from `:METHOD:/PATH'. |
diff --git a/lisp/vc.el b/lisp/vc.el index 2e241e67f48..ce4cb2d36c8 100644 --- a/lisp/vc.el +++ b/lisp/vc.el | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | ;;; vc.el --- drive a version-control system from within Emacs | 1 | ;;; vc.el --- drive a version-control system from within Emacs |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, | 3 | ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, |
| 4 | ;; 2000, 2001, 2003, 2004 Free Software Foundation, Inc. | 4 | ;; 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: FSF (see below for full credits) | 6 | ;; Author: FSF (see below for full credits) |
| 7 | ;; Maintainer: Andre Spiegel <spiegel@gnu.org> | 7 | ;; Maintainer: Andre Spiegel <spiegel@gnu.org> |
| @@ -962,8 +962,10 @@ that is inserted into the command line before the filename." | |||
| 962 | ;; start-process does not support remote execution | 962 | ;; start-process does not support remote execution |
| 963 | (setq okstatus nil)) | 963 | (setq okstatus nil)) |
| 964 | (if (eq okstatus 'async) | 964 | (if (eq okstatus 'async) |
| 965 | (let ((proc (apply 'start-process command (current-buffer) command | 965 | (let ((proc |
| 966 | squeezed))) | 966 | (let ((process-connection-type nil)) |
| 967 | (apply 'start-process command (current-buffer) command | ||
| 968 | squeezed)))) | ||
| 967 | (unless (active-minibuffer-window) | 969 | (unless (active-minibuffer-window) |
| 968 | (message "Running %s in the background..." command)) | 970 | (message "Running %s in the background..." command)) |
| 969 | ;;(set-process-sentinel proc (lambda (p msg) (delete-process p))) | 971 | ;;(set-process-sentinel proc (lambda (p msg) (delete-process p))) |
diff --git a/lisp/wdired.el b/lisp/wdired.el index 92d7a81627a..a4119343600 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el | |||
| @@ -330,7 +330,8 @@ See `wdired-mode'." | |||
| 330 | (set-buffer-modified-p nil) | 330 | (set-buffer-modified-p nil) |
| 331 | (setq buffer-undo-list nil) | 331 | (setq buffer-undo-list nil) |
| 332 | (run-hooks 'wdired-mode-hook) | 332 | (run-hooks 'wdired-mode-hook) |
| 333 | (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished"))) | 333 | (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished \ |
| 334 | or \\[wdired-abort-changes] to abort changes"))) | ||
| 334 | 335 | ||
| 335 | 336 | ||
| 336 | ;; Protect the buffer so only the filenames can be changed, and put | 337 | ;; Protect the buffer so only the filenames can be changed, and put |
diff --git a/lisp/window.el b/lisp/window.el index 5768436eaae..b4fd664a43c 100644 --- a/lisp/window.el +++ b/lisp/window.el | |||
| @@ -397,20 +397,13 @@ lines than are actually needed in the case where some error may be present." | |||
| 397 | 397 | ||
| 398 | (defun window-buffer-height (window) | 398 | (defun window-buffer-height (window) |
| 399 | "Return the height (in screen lines) of the buffer that WINDOW is displaying." | 399 | "Return the height (in screen lines) of the buffer that WINDOW is displaying." |
| 400 | (save-excursion | 400 | (with-current-buffer (window-buffer window) |
| 401 | (set-buffer (window-buffer window)) | 401 | (max 1 |
| 402 | (goto-char (point-min)) | 402 | (count-screen-lines (point-min) (point-max) |
| 403 | (let ((ignore-final-newline | 403 | ;; If buffer ends with a newline, ignore it when |
| 404 | ;; If buffer ends with a newline, ignore it when counting height | 404 | ;; counting height unless point is after it. |
| 405 | ;; unless point is after it. | 405 | (eobp) |
| 406 | (and (not (eobp)) (eq ?\n (char-after (1- (point-max))))))) | 406 | window)))) |
| 407 | (+ 1 (nth 2 (compute-motion (point-min) | ||
| 408 | '(0 . 0) | ||
| 409 | (- (point-max) (if ignore-final-newline 1 0)) | ||
| 410 | (cons 0 100000000) | ||
| 411 | nil | ||
| 412 | nil | ||
| 413 | window)))))) | ||
| 414 | 407 | ||
| 415 | (defun count-screen-lines (&optional beg end count-final-newline window) | 408 | (defun count-screen-lines (&optional beg end count-final-newline window) |
| 416 | "Return the number of screen lines in the region. | 409 | "Return the number of screen lines in the region. |
diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 268304e5d4c..7f22ad2e485 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog | |||
| @@ -1,3 +1,53 @@ | |||
| 1 | 2005-03-29 Chong Yidong <cyd@stupidchicken.com> | ||
| 2 | |||
| 3 | * text.texi (Buffer Contents): Add filter-buffer-substring and | ||
| 4 | buffer-substring-filters. | ||
| 5 | |||
| 6 | 2005-03-26 Chong Yidong <cyd@stupidchicken.com> | ||
| 7 | |||
| 8 | * anti.texi (Antinews): Mention `G' interactive code. | ||
| 9 | |||
| 10 | * tips.texi (Compilation Tips): Mention benchmark.el. | ||
| 11 | |||
| 12 | 2005-03-27 Luc Teirlinck <teirllm@auburn.edu> | ||
| 13 | |||
| 14 | * modes.texi (Other Font Lock Variables): `font-lock-fontify-block' | ||
| 15 | is now bound to M-o M-o. | ||
| 16 | |||
| 17 | * keymaps.texi (Prefix Keys): `facemenu-keymap' is now on M-o. | ||
| 18 | |||
| 19 | 2005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 20 | |||
| 21 | * calendar.texi: Delete file (and move contents to emacs-xtra.texi | ||
| 22 | in the Emacs Manual). | ||
| 23 | * Makefile.in (srcs): Remove calendar.texi. | ||
| 24 | * makefile.w32-in (srcs): Remove calendar.texi. | ||
| 25 | * display.texi (Display): Change name of next node. | ||
| 26 | * os.texi (System In): Change name of previous node. | ||
| 27 | * elisp.texi (Top): Remove Calendar references. | ||
| 28 | * vol1.texi (Top): Remove Calendar references. | ||
| 29 | * vol2.texi (Top): Remove Calendar references. | ||
| 30 | |||
| 31 | 2005-03-25 Richard M. Stallman <rms@gnu.org> | ||
| 32 | |||
| 33 | * display.texi (Standard Faces, Fringe Bitmaps, Customizing Bitmaps): | ||
| 34 | Cleanup previous change. | ||
| 35 | |||
| 36 | 2005-03-25 Chong Yidong <cyd@stupidchicken.com> | ||
| 37 | |||
| 38 | * display.texi (Face Attributes): Faces earlier in an :inherit | ||
| 39 | list take precedence. | ||
| 40 | (Scroll Bars): Fix description of vertical-scroll-bars. | ||
| 41 | Document frame-current-scroll-bars and window-current-scroll-bars. | ||
| 42 | |||
| 43 | * markers.texi (The Mark): Document temporary Transient Mark mode. | ||
| 44 | |||
| 45 | * minibuf.texi (Reading File Names): Document | ||
| 46 | read-file-name-completion-ignore-case. | ||
| 47 | |||
| 48 | * positions.texi (Screen Lines): Document nil for width argument | ||
| 49 | to compute-motion. | ||
| 50 | |||
| 1 | 2005-03-23 Kim F. Storm <storm@cua.dk> | 51 | 2005-03-23 Kim F. Storm <storm@cua.dk> |
| 2 | 52 | ||
| 3 | * display.texi (Standard Faces): Other faces used in the fringe | 53 | * display.texi (Standard Faces): Other faces used in the fringe |
diff --git a/lispref/Makefile.in b/lispref/Makefile.in index 770ffd5769a..2fab86ab876 100644 --- a/lispref/Makefile.in +++ b/lispref/Makefile.in | |||
| @@ -46,7 +46,6 @@ srcs = \ | |||
| 46 | $(srcdir)/back.texi \ | 46 | $(srcdir)/back.texi \ |
| 47 | $(srcdir)/backups.texi \ | 47 | $(srcdir)/backups.texi \ |
| 48 | $(srcdir)/buffers.texi \ | 48 | $(srcdir)/buffers.texi \ |
| 49 | $(srcdir)/calendar.texi \ | ||
| 50 | $(srcdir)/commands.texi \ | 49 | $(srcdir)/commands.texi \ |
| 51 | $(srcdir)/compile.texi \ | 50 | $(srcdir)/compile.texi \ |
| 52 | $(srcdir)/control.texi \ | 51 | $(srcdir)/control.texi \ |
diff --git a/lispref/anti.texi b/lispref/anti.texi index a744ddf421b..458409f2603 100644 --- a/lispref/anti.texi +++ b/lispref/anti.texi | |||
| @@ -238,6 +238,10 @@ alists, obarrays, and functions.) In addition, the function | |||
| 238 | @code{test-completion} is no longer available. | 238 | @code{test-completion} is no longer available. |
| 239 | 239 | ||
| 240 | @item | 240 | @item |
| 241 | The @samp{G} interactive code character is no longer supported. | ||
| 242 | Use @samp{F} instead. | ||
| 243 | |||
| 244 | @item | ||
| 241 | Arbitrary Lisp functions can no longer be recorded into | 245 | Arbitrary Lisp functions can no longer be recorded into |
| 242 | @code{buffer-undo-list}. As a consequence, @code{yank-undo-function} | 246 | @code{buffer-undo-list}. As a consequence, @code{yank-undo-function} |
| 243 | is obsolete, and has been removed. | 247 | is obsolete, and has been removed. |
diff --git a/lispref/calendar.texi b/lispref/calendar.texi deleted file mode 100644 index 5c63d6f9591..00000000000 --- a/lispref/calendar.texi +++ /dev/null | |||
| @@ -1,996 +0,0 @@ | |||
| 1 | @c -*-texinfo-*- | ||
| 2 | @c This is part of the GNU Emacs Lisp Reference Manual. | ||
| 3 | @c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998 Free Software Foundation, Inc. | ||
| 4 | @c See the file elisp.texi for copying conditions. | ||
| 5 | @node Calendar, System Interface, Display, Top | ||
| 6 | @chapter Customizing the Calendar and Diary | ||
| 7 | |||
| 8 | There are many customizations that you can use to make the calendar and | ||
| 9 | diary suit your personal tastes. | ||
| 10 | |||
| 11 | @menu | ||
| 12 | * Calendar Customizing:: Defaults you can set. | ||
| 13 | * Holiday Customizing:: Defining your own holidays. | ||
| 14 | * Date Display Format:: Changing the format. | ||
| 15 | * Time Display Format:: Changing the format. | ||
| 16 | * Daylight Savings:: Changing the default. | ||
| 17 | * Diary Customizing:: Defaults you can set. | ||
| 18 | * Hebrew/Islamic Entries:: How to obtain them. | ||
| 19 | * Fancy Diary Display:: Enhancing the diary display, sorting entries, | ||
| 20 | using included diary files. | ||
| 21 | * Sexp Diary Entries:: Fancy things you can do. | ||
| 22 | * Appt Customizing:: Customizing appointment reminders. | ||
| 23 | @end menu | ||
| 24 | |||
| 25 | @node Calendar Customizing | ||
| 26 | @section Customizing the Calendar | ||
| 27 | @vindex view-diary-entries-initially | ||
| 28 | |||
| 29 | If you set the variable @code{view-diary-entries-initially} to | ||
| 30 | @code{t}, calling up the calendar automatically displays the diary | ||
| 31 | entries for the current date as well. The diary dates appear only if | ||
| 32 | the current date is visible. If you add both of the following lines to | ||
| 33 | your init file:@refill | ||
| 34 | |||
| 35 | @example | ||
| 36 | (setq view-diary-entries-initially t) | ||
| 37 | (calendar) | ||
| 38 | @end example | ||
| 39 | |||
| 40 | @noindent | ||
| 41 | this displays both the calendar and diary windows whenever you start Emacs. | ||
| 42 | |||
| 43 | @vindex view-calendar-holidays-initially | ||
| 44 | Similarly, if you set the variable | ||
| 45 | @code{view-calendar-holidays-initially} to @code{t}, entering the | ||
| 46 | calendar automatically displays a list of holidays for the current | ||
| 47 | three-month period. The holiday list appears in a separate | ||
| 48 | window. | ||
| 49 | |||
| 50 | @vindex mark-diary-entries-in-calendar | ||
| 51 | You can set the variable @code{mark-diary-entries-in-calendar} to | ||
| 52 | @code{t} in order to mark any dates with diary entries. This takes | ||
| 53 | effect whenever the calendar window contents are recomputed. There are | ||
| 54 | two ways of marking these dates: by changing the face (@pxref{Faces}), | ||
| 55 | or by placing a plus sign (@samp{+}) beside the date. | ||
| 56 | |||
| 57 | @vindex mark-holidays-in-calendar | ||
| 58 | Similarly, setting the variable @code{mark-holidays-in-calendar} to | ||
| 59 | @code{t} marks holiday dates, either with a change of face or with an | ||
| 60 | asterisk (@samp{*}). | ||
| 61 | |||
| 62 | @vindex calendar-holiday-marker | ||
| 63 | @vindex diary-entry-marker | ||
| 64 | The variable @code{calendar-holiday-marker} specifies how to mark a | ||
| 65 | date as being a holiday. Its value may be a single-character string | ||
| 66 | to insert next to the date, or a face name to use for displaying the | ||
| 67 | date. Likewise, the variable @code{diary-entry-marker} specifies how | ||
| 68 | to mark a date that has diary entries. The calendar creates faces | ||
| 69 | named @code{holiday-face} and @code{diary-face} for these purposes; | ||
| 70 | those symbols are the default values of these variables. | ||
| 71 | |||
| 72 | @vindex calendar-load-hook | ||
| 73 | The variable @code{calendar-load-hook} is a normal hook run when the | ||
| 74 | calendar package is first loaded (before actually starting to display | ||
| 75 | the calendar). | ||
| 76 | |||
| 77 | @vindex initial-calendar-window-hook | ||
| 78 | Starting the calendar runs the normal hook | ||
| 79 | @code{initial-calendar-window-hook}. Recomputation of the calendar | ||
| 80 | display does not run this hook. But if you leave the calendar with the | ||
| 81 | @kbd{q} command and reenter it, the hook runs again.@refill | ||
| 82 | |||
| 83 | @vindex today-visible-calendar-hook | ||
| 84 | The variable @code{today-visible-calendar-hook} is a normal hook run | ||
| 85 | after the calendar buffer has been prepared with the calendar when the | ||
| 86 | current date is visible in the window. One use of this hook is to | ||
| 87 | replace today's date with asterisks; to do that, use the hook function | ||
| 88 | @code{calendar-star-date}. | ||
| 89 | |||
| 90 | @findex calendar-star-date | ||
| 91 | @example | ||
| 92 | (add-hook 'today-visible-calendar-hook 'calendar-star-date) | ||
| 93 | @end example | ||
| 94 | |||
| 95 | @noindent | ||
| 96 | Another standard hook function marks the current date, either by | ||
| 97 | changing its face or by adding an asterisk. Here's how to use it: | ||
| 98 | |||
| 99 | @findex calendar-mark-today | ||
| 100 | @example | ||
| 101 | (add-hook 'today-visible-calendar-hook 'calendar-mark-today) | ||
| 102 | @end example | ||
| 103 | |||
| 104 | @noindent | ||
| 105 | @vindex calendar-today-marker | ||
| 106 | The variable @code{calendar-today-marker} specifies how to mark | ||
| 107 | today's date. Its value should be a single-character string to insert | ||
| 108 | next to the date or a face name to use for displaying the date. A | ||
| 109 | face named @code{calendar-today-face} is provided for this purpose; | ||
| 110 | that symbol is the default for this variable. | ||
| 111 | |||
| 112 | @vindex today-invisible-calendar-hook | ||
| 113 | @noindent | ||
| 114 | A similar normal hook, @code{today-invisible-calendar-hook} is run if | ||
| 115 | the current date is @emph{not} visible in the window. | ||
| 116 | |||
| 117 | @vindex calendar-move-hook | ||
| 118 | Each of the calendar cursor motion commands runs the hook | ||
| 119 | @code{calendar-move-hook} after it moves the cursor. | ||
| 120 | |||
| 121 | @node Holiday Customizing | ||
| 122 | @section Customizing the Holidays | ||
| 123 | |||
| 124 | @vindex calendar-holidays | ||
| 125 | @vindex christian-holidays | ||
| 126 | @vindex hebrew-holidays | ||
| 127 | @vindex islamic-holidays | ||
| 128 | Emacs knows about holidays defined by entries on one of several lists. | ||
| 129 | You can customize these lists of holidays to your own needs, adding or | ||
| 130 | deleting holidays. The lists of holidays that Emacs uses are for | ||
| 131 | general holidays (@code{general-holidays}), local holidays | ||
| 132 | (@code{local-holidays}), Christian holidays (@code{christian-holidays}), | ||
| 133 | Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim) | ||
| 134 | holidays (@code{islamic-holidays}), and other holidays | ||
| 135 | (@code{other-holidays}). | ||
| 136 | |||
| 137 | @vindex general-holidays | ||
| 138 | The general holidays are, by default, holidays common throughout the | ||
| 139 | United States. To eliminate these holidays, set @code{general-holidays} | ||
| 140 | to @code{nil}. | ||
| 141 | |||
| 142 | @vindex local-holidays | ||
| 143 | There are no default local holidays (but sites may supply some). You | ||
| 144 | can set the variable @code{local-holidays} to any list of holidays, as | ||
| 145 | described below. | ||
| 146 | |||
| 147 | @vindex all-christian-calendar-holidays | ||
| 148 | @vindex all-hebrew-calendar-holidays | ||
| 149 | @vindex all-islamic-calendar-holidays | ||
| 150 | By default, Emacs does not include all the holidays of the religions | ||
| 151 | that it knows, only those commonly found in secular calendars. For a | ||
| 152 | more extensive collection of religious holidays, you can set any (or | ||
| 153 | all) of the variables @code{all-christian-calendar-holidays}, | ||
| 154 | @code{all-hebrew-calendar-holidays}, or | ||
| 155 | @code{all-islamic-calendar-holidays} to @code{t}. If you want to | ||
| 156 | eliminate the religious holidays, set any or all of the corresponding | ||
| 157 | variables @code{christian-holidays}, @code{hebrew-holidays}, and | ||
| 158 | @code{islamic-holidays} to @code{nil}.@refill | ||
| 159 | |||
| 160 | @vindex other-holidays | ||
| 161 | You can set the variable @code{other-holidays} to any list of | ||
| 162 | holidays. This list, normally empty, is intended for individual use. | ||
| 163 | |||
| 164 | @cindex holiday forms | ||
| 165 | Each of the lists (@code{general-holidays}, @code{local-holidays}, | ||
| 166 | @code{christian-holidays}, @code{hebrew-holidays}, | ||
| 167 | @code{islamic-holidays}, and @code{other-holidays}) is a list of | ||
| 168 | @dfn{holiday forms}, each holiday form describing a holiday (or | ||
| 169 | sometimes a list of holidays). | ||
| 170 | |||
| 171 | Here is a table of the possible kinds of holiday form. Day numbers | ||
| 172 | and month numbers count starting from 1, but ``dayname'' numbers | ||
| 173 | count Sunday as 0. The element @var{string} is always the | ||
| 174 | name of the holiday, as a string. | ||
| 175 | |||
| 176 | @table @code | ||
| 177 | @item (holiday-fixed @var{month} @var{day} @var{string}) | ||
| 178 | A fixed date on the Gregorian calendar. | ||
| 179 | |||
| 180 | @item (holiday-float @var{month} @var{dayname} @var{k} @var{string}) | ||
| 181 | The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar | ||
| 182 | (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back | ||
| 183 | from the end of the month. | ||
| 184 | |||
| 185 | @item (holiday-hebrew @var{month} @var{day} @var{string}) | ||
| 186 | A fixed date on the Hebrew calendar. | ||
| 187 | |||
| 188 | @item (holiday-islamic @var{month} @var{day} @var{string}) | ||
| 189 | A fixed date on the Islamic calendar. | ||
| 190 | |||
| 191 | @item (holiday-julian @var{month} @var{day} @var{string}) | ||
| 192 | A fixed date on the Julian calendar. | ||
| 193 | |||
| 194 | @item (holiday-sexp @var{sexp} @var{string}) | ||
| 195 | A date calculated by the Lisp expression @var{sexp}. The expression | ||
| 196 | should use the variable @code{year} to compute and return the date of a | ||
| 197 | holiday, or @code{nil} if the holiday doesn't happen this year. The | ||
| 198 | value of @var{sexp} must represent the date as a list of the form | ||
| 199 | @code{(@var{month} @var{day} @var{year})}. | ||
| 200 | |||
| 201 | @item (if @var{condition} @var{holiday-form}) | ||
| 202 | A holiday that happens only if @var{condition} is true. | ||
| 203 | |||
| 204 | @item (@var{function} @r{[}@var{args}@r{]}) | ||
| 205 | A list of dates calculated by the function @var{function}, called with | ||
| 206 | arguments @var{args}. | ||
| 207 | @end table | ||
| 208 | |||
| 209 | For example, suppose you want to add Bastille Day, celebrated in | ||
| 210 | France on July 14. You can do this as follows: | ||
| 211 | |||
| 212 | @smallexample | ||
| 213 | (setq other-holidays '((holiday-fixed 7 14 "Bastille Day"))) | ||
| 214 | @end smallexample | ||
| 215 | |||
| 216 | @noindent | ||
| 217 | The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the | ||
| 218 | fourteenth day of the seventh month (July). | ||
| 219 | |||
| 220 | Many holidays occur on a specific day of the week, at a specific time | ||
| 221 | of month. Here is a holiday form describing Hurricane Supplication Day, | ||
| 222 | celebrated in the Virgin Islands on the fourth Monday in August: | ||
| 223 | |||
| 224 | @smallexample | ||
| 225 | (holiday-float 8 1 4 "Hurricane Supplication Day") | ||
| 226 | @end smallexample | ||
| 227 | |||
| 228 | @noindent | ||
| 229 | Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, | ||
| 230 | Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in | ||
| 231 | the month (1 specifies the first occurrence, 2 the second occurrence, | ||
| 232 | @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and | ||
| 233 | so on). | ||
| 234 | |||
| 235 | You can specify holidays that occur on fixed days of the Hebrew, | ||
| 236 | Islamic, and Julian calendars too. For example, | ||
| 237 | |||
| 238 | @smallexample | ||
| 239 | (setq other-holidays | ||
| 240 | '((holiday-hebrew 10 2 "Last day of Hanukkah") | ||
| 241 | (holiday-islamic 3 12 "Mohammed's Birthday") | ||
| 242 | (holiday-julian 4 2 "Jefferson's Birthday"))) | ||
| 243 | @end smallexample | ||
| 244 | |||
| 245 | @noindent | ||
| 246 | adds the last day of Hanukkah (since the Hebrew months are numbered with | ||
| 247 | 1 starting from Nisan), the Islamic feast celebrating Mohammed's | ||
| 248 | birthday (since the Islamic months are numbered from 1 starting with | ||
| 249 | Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the | ||
| 250 | Julian calendar. | ||
| 251 | |||
| 252 | To include a holiday conditionally, use either Emacs Lisp's @code{if} or the | ||
| 253 | @code{holiday-sexp} form. For example, American presidential elections | ||
| 254 | occur on the first Tuesday after the first Monday in November of years | ||
| 255 | divisible by 4: | ||
| 256 | |||
| 257 | @smallexample | ||
| 258 | (holiday-sexp '(if (= 0 (% year 4)) | ||
| 259 | (calendar-gregorian-from-absolute | ||
| 260 | (1+ (calendar-dayname-on-or-before | ||
| 261 | 1 (+ 6 (calendar-absolute-from-gregorian | ||
| 262 | (list 11 1 year))))))) | ||
| 263 | "US Presidential Election") | ||
| 264 | @end smallexample | ||
| 265 | |||
| 266 | @noindent | ||
| 267 | or | ||
| 268 | |||
| 269 | @smallexample | ||
| 270 | (if (= 0 (% displayed-year 4)) | ||
| 271 | (fixed 11 | ||
| 272 | (extract-calendar-day | ||
| 273 | (calendar-gregorian-from-absolute | ||
| 274 | (1+ (calendar-dayname-on-or-before | ||
| 275 | 1 (+ 6 (calendar-absolute-from-gregorian | ||
| 276 | (list 11 1 displayed-year))))))) | ||
| 277 | "US Presidential Election")) | ||
| 278 | @end smallexample | ||
| 279 | |||
| 280 | Some holidays just don't fit into any of these forms because special | ||
| 281 | calculations are involved in their determination. In such cases you | ||
| 282 | must write a Lisp function to do the calculation. To include eclipses, | ||
| 283 | for example, add @code{(eclipses)} to @code{other-holidays} | ||
| 284 | and write an Emacs Lisp function @code{eclipses} that returns a | ||
| 285 | (possibly empty) list of the relevant Gregorian dates among the range | ||
| 286 | visible in the calendar window, with descriptive strings, like this: | ||
| 287 | |||
| 288 | @smallexample | ||
| 289 | (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) | ||
| 290 | @end smallexample | ||
| 291 | |||
| 292 | @node Date Display Format | ||
| 293 | @section Date Display Format | ||
| 294 | @vindex calendar-date-display-form | ||
| 295 | |||
| 296 | You can customize the manner of displaying dates in the diary, in mode | ||
| 297 | lines, and in messages by setting @code{calendar-date-display-form}. | ||
| 298 | This variable holds a list of expressions that can involve the variables | ||
| 299 | @code{month}, @code{day}, and @code{year}, which are all numbers in | ||
| 300 | string form, and @code{monthname} and @code{dayname}, which are both | ||
| 301 | alphabetic strings. In the American style, the default value of this | ||
| 302 | list is as follows: | ||
| 303 | |||
| 304 | @smallexample | ||
| 305 | ((if dayname (concat dayname ", ")) monthname " " day ", " year) | ||
| 306 | @end smallexample | ||
| 307 | |||
| 308 | @noindent | ||
| 309 | while in the European style this value is the default: | ||
| 310 | |||
| 311 | @smallexample | ||
| 312 | ((if dayname (concat dayname ", ")) day " " monthname " " year) | ||
| 313 | @end smallexample | ||
| 314 | |||
| 315 | @noindent | ||
| 316 | The ISO standard date representation is this: | ||
| 317 | |||
| 318 | @smallexample | ||
| 319 | (year "-" month "-" day) | ||
| 320 | @end smallexample | ||
| 321 | |||
| 322 | @noindent | ||
| 323 | This specifies a typical American format: | ||
| 324 | |||
| 325 | @smallexample | ||
| 326 | (month "/" day "/" (substring year -2)) | ||
| 327 | @end smallexample | ||
| 328 | |||
| 329 | @node Time Display Format | ||
| 330 | @section Time Display Format | ||
| 331 | @vindex calendar-time-display-form | ||
| 332 | |||
| 333 | The calendar and diary by default display times of day in the | ||
| 334 | conventional American style with the hours from 1 through 12, minutes, | ||
| 335 | and either @samp{am} or @samp{pm}. If you prefer the European style, | ||
| 336 | also known in the US as military, in which the hours go from 00 to 23, | ||
| 337 | you can alter the variable @code{calendar-time-display-form}. This | ||
| 338 | variable is a list of expressions that can involve the variables | ||
| 339 | @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all | ||
| 340 | numbers in string form, and @code{am-pm} and @code{time-zone}, which are | ||
| 341 | both alphabetic strings. The default value of | ||
| 342 | @code{calendar-time-display-form} is as follows: | ||
| 343 | |||
| 344 | @smallexample | ||
| 345 | (12-hours ":" minutes am-pm | ||
| 346 | (if time-zone " (") time-zone (if time-zone ")")) | ||
| 347 | @end smallexample | ||
| 348 | |||
| 349 | @noindent | ||
| 350 | Here is a value that provides European style times: | ||
| 351 | |||
| 352 | @smallexample | ||
| 353 | (24-hours ":" minutes | ||
| 354 | (if time-zone " (") time-zone (if time-zone ")")) | ||
| 355 | @end smallexample | ||
| 356 | |||
| 357 | @node Daylight Savings | ||
| 358 | @section Daylight Savings Time | ||
| 359 | @cindex daylight savings time | ||
| 360 | |||
| 361 | Emacs understands the difference between standard time and daylight | ||
| 362 | savings time---the times given for sunrise, sunset, solstices, | ||
| 363 | equinoxes, and the phases of the moon take that into account. The rules | ||
| 364 | for daylight savings time vary from place to place and have also varied | ||
| 365 | historically from year to year. To do the job properly, Emacs needs to | ||
| 366 | know which rules to use. | ||
| 367 | |||
| 368 | Some operating systems keep track of the rules that apply to the place | ||
| 369 | where you are; on these systems, Emacs gets the information it needs | ||
| 370 | from the system automatically. If some or all of this information is | ||
| 371 | missing, Emacs fills in the gaps with the rules currently used in | ||
| 372 | Cambridge, Massachusetts, which is the center of GNU's world. | ||
| 373 | |||
| 374 | |||
| 375 | @vindex calendar-daylight-savings-starts | ||
| 376 | @vindex calendar-daylight-savings-ends | ||
| 377 | If the default choice of rules is not appropriate for your location, | ||
| 378 | you can tell Emacs the rules to use by setting the variables | ||
| 379 | @code{calendar-daylight-savings-starts} and | ||
| 380 | @code{calendar-daylight-savings-ends}. Their values should be Lisp | ||
| 381 | expressions that refer to the variable @code{year}, and evaluate to the | ||
| 382 | Gregorian date on which daylight savings time starts or (respectively) | ||
| 383 | ends, in the form of a list @code{(@var{month} @var{day} @var{year})}. | ||
| 384 | The values should be @code{nil} if your area does not use daylight | ||
| 385 | savings time. | ||
| 386 | |||
| 387 | Emacs uses these expressions to determine the start and end dates of | ||
| 388 | daylight savings time as holidays and for correcting times of day in the | ||
| 389 | solar and lunar calculations. | ||
| 390 | |||
| 391 | The values for Cambridge, Massachusetts are as follows: | ||
| 392 | |||
| 393 | @example | ||
| 394 | @group | ||
| 395 | (calendar-nth-named-day 1 0 4 year) | ||
| 396 | (calendar-nth-named-day -1 0 10 year) | ||
| 397 | @end group | ||
| 398 | @end example | ||
| 399 | |||
| 400 | @noindent | ||
| 401 | i.e., the first 0th day (Sunday) of the fourth month (April) in | ||
| 402 | the year specified by @code{year}, and the last Sunday of the tenth month | ||
| 403 | (October) of that year. If daylight savings time were | ||
| 404 | changed to start on October 1, you would set | ||
| 405 | @code{calendar-daylight-savings-starts} to this: | ||
| 406 | |||
| 407 | @example | ||
| 408 | (list 10 1 year) | ||
| 409 | @end example | ||
| 410 | |||
| 411 | For a more complex example, suppose daylight savings time begins on | ||
| 412 | the first of Nisan on the Hebrew calendar. You should set | ||
| 413 | @code{calendar-daylight-savings-starts} to this value: | ||
| 414 | |||
| 415 | @example | ||
| 416 | (calendar-gregorian-from-absolute | ||
| 417 | (calendar-absolute-from-hebrew | ||
| 418 | (list 1 1 (+ year 3760)))) | ||
| 419 | @end example | ||
| 420 | |||
| 421 | @noindent | ||
| 422 | because Nisan is the first month in the Hebrew calendar and the Hebrew | ||
| 423 | year differs from the Gregorian year by 3760 at Nisan. | ||
| 424 | |||
| 425 | If there is no daylight savings time at your location, or if you want | ||
| 426 | all times in standard time, set @code{calendar-daylight-savings-starts} | ||
| 427 | and @code{calendar-daylight-savings-ends} to @code{nil}. | ||
| 428 | |||
| 429 | @vindex calendar-daylight-time-offset | ||
| 430 | The variable @code{calendar-daylight-time-offset} specifies the | ||
| 431 | difference between daylight savings time and standard time, measured in | ||
| 432 | minutes. The value for Cambridge is 60. | ||
| 433 | |||
| 434 | @vindex calendar-daylight-savings-starts-time | ||
| 435 | @vindex calendar-daylight-savings-ends-time | ||
| 436 | The variable @code{calendar-daylight-savings-starts-time} and the | ||
| 437 | variable @code{calendar-daylight-savings-ends-time} specify the number | ||
| 438 | of minutes after midnight local time when the transition to and from | ||
| 439 | daylight savings time should occur. For Cambridge, both variables' | ||
| 440 | values are 120. | ||
| 441 | |||
| 442 | @node Diary Customizing | ||
| 443 | @section Customizing the Diary | ||
| 444 | |||
| 445 | @vindex holidays-in-diary-buffer | ||
| 446 | Ordinarily, the mode line of the diary buffer window indicates any | ||
| 447 | holidays that fall on the date of the diary entries. The process of | ||
| 448 | checking for holidays can take several seconds, so including holiday | ||
| 449 | information delays the display of the diary buffer noticeably. If you'd | ||
| 450 | prefer to have a faster display of the diary buffer but without the | ||
| 451 | holiday information, set the variable @code{holidays-in-diary-buffer} to | ||
| 452 | @code{nil}.@refill | ||
| 453 | |||
| 454 | @vindex number-of-diary-entries | ||
| 455 | The variable @code{number-of-diary-entries} controls the number of | ||
| 456 | days of diary entries to be displayed at one time. It affects the | ||
| 457 | initial display when @code{view-diary-entries-initially} is @code{t}, as | ||
| 458 | well as the command @kbd{M-x diary}. For example, the default value is | ||
| 459 | 1, which says to display only the current day's diary entries. If the | ||
| 460 | value is 2, both the current day's and the next day's entries are | ||
| 461 | displayed. The value can also be a vector of seven elements: for | ||
| 462 | example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries | ||
| 463 | appear on Sunday, the current date's and the next day's diary entries | ||
| 464 | appear Monday through Thursday, Friday through Monday's entries appear | ||
| 465 | on Friday, while on Saturday only that day's entries appear. | ||
| 466 | |||
| 467 | @vindex print-diary-entries-hook | ||
| 468 | @findex print-diary-entries | ||
| 469 | The variable @code{print-diary-entries-hook} is a normal hook run | ||
| 470 | after preparation of a temporary buffer containing just the diary | ||
| 471 | entries currently visible in the diary buffer. (The other, irrelevant | ||
| 472 | diary entries are really absent from the temporary buffer; in the diary | ||
| 473 | buffer, they are merely hidden.) The default value of this hook does | ||
| 474 | the printing with the command @code{lpr-buffer}. If you want to use a | ||
| 475 | different command to do the printing, just change the value of this | ||
| 476 | hook. Other uses might include, for example, rearranging the lines into | ||
| 477 | order by day and time. | ||
| 478 | |||
| 479 | @vindex diary-date-forms | ||
| 480 | You can customize the form of dates in your diary file, if neither the | ||
| 481 | standard American nor European styles suits your needs, by setting the | ||
| 482 | variable @code{diary-date-forms}. This variable is a list of patterns | ||
| 483 | for recognizing a date. Each date pattern is a list whose elements may | ||
| 484 | be regular expressions (@pxref{Regular Expressions}) or the symbols | ||
| 485 | @code{month}, @code{day}, @code{year}, @code{monthname}, and | ||
| 486 | @code{dayname}. All these elements serve as patterns that match certain | ||
| 487 | kinds of text in the diary file. In order for the date pattern, as a | ||
| 488 | whole, to match, all of its elements must match consecutively. | ||
| 489 | |||
| 490 | A regular expression in a date pattern matches in its usual fashion, | ||
| 491 | using the standard syntax table altered so that @samp{*} is a word | ||
| 492 | constituent. | ||
| 493 | |||
| 494 | The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, | ||
| 495 | and @code{dayname} match the month number, day number, year number, | ||
| 496 | month name, and day name of the date being considered. The symbols that | ||
| 497 | match numbers allow leading zeros; those that match names allow | ||
| 498 | three-letter abbreviations and capitalization. All the symbols can | ||
| 499 | match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any | ||
| 500 | month'', and so on, it should match regardless of the date being | ||
| 501 | considered. | ||
| 502 | |||
| 503 | The default value of @code{diary-date-forms} in the American style is | ||
| 504 | this: | ||
| 505 | |||
| 506 | @example | ||
| 507 | ((month "/" day "[^/0-9]") | ||
| 508 | (month "/" day "/" year "[^0-9]") | ||
| 509 | (monthname " *" day "[^,0-9]") | ||
| 510 | (monthname " *" day ", *" year "[^0-9]") | ||
| 511 | (dayname "\\W")) | ||
| 512 | @end example | ||
| 513 | |||
| 514 | The date patterns in the list must be @emph{mutually exclusive} and | ||
| 515 | must not match any portion of the diary entry itself, just the date and | ||
| 516 | one character of whitespace. If, to be mutually exclusive, the pattern | ||
| 517 | must match a portion of the diary entry text---beyond the whitespace | ||
| 518 | that ends the date---then the first element of the date pattern | ||
| 519 | @emph{must} be @code{backup}. This causes the date recognizer to back | ||
| 520 | up to the beginning of the current word of the diary entry, after | ||
| 521 | finishing the match. Even if you use @code{backup}, the date pattern | ||
| 522 | must absolutely not match more than a portion of the first word of the | ||
| 523 | diary entry. The default value of @code{diary-date-forms} in the | ||
| 524 | European style is this list: | ||
| 525 | |||
| 526 | @example | ||
| 527 | ((day "/" month "[^/0-9]") | ||
| 528 | (day "/" month "/" year "[^0-9]") | ||
| 529 | (backup day " *" monthname "\\W+\\<[^*0-9]") | ||
| 530 | (day " *" monthname " *" year "[^0-9]") | ||
| 531 | (dayname "\\W")) | ||
| 532 | @end example | ||
| 533 | |||
| 534 | @noindent | ||
| 535 | Notice the use of @code{backup} in the third pattern, because it needs | ||
| 536 | to match part of a word beyond the date itself to distinguish it from | ||
| 537 | the fourth pattern. | ||
| 538 | |||
| 539 | @node Hebrew/Islamic Entries | ||
| 540 | @section Hebrew- and Islamic-Date Diary Entries | ||
| 541 | |||
| 542 | Your diary file can have entries based on Hebrew or Islamic dates, as | ||
| 543 | well as entries based on the world-standard Gregorian calendar. | ||
| 544 | However, because recognition of such entries is time-consuming and most | ||
| 545 | people don't use them, you must explicitly enable their use. If you | ||
| 546 | want the diary to recognize Hebrew-date diary entries, for example, | ||
| 547 | you must do this: | ||
| 548 | |||
| 549 | @vindex nongregorian-diary-listing-hook | ||
| 550 | @vindex nongregorian-diary-marking-hook | ||
| 551 | @findex list-hebrew-diary-entries | ||
| 552 | @findex mark-hebrew-diary-entries | ||
| 553 | @smallexample | ||
| 554 | (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) | ||
| 555 | (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) | ||
| 556 | @end smallexample | ||
| 557 | |||
| 558 | @noindent | ||
| 559 | If you want Islamic-date entries, do this: | ||
| 560 | |||
| 561 | @findex list-islamic-diary-entries | ||
| 562 | @findex mark-islamic-diary-entries | ||
| 563 | @smallexample | ||
| 564 | (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) | ||
| 565 | (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) | ||
| 566 | @end smallexample | ||
| 567 | |||
| 568 | Hebrew- and Islamic-date diary entries have the same formats as | ||
| 569 | Gregorian-date diary entries, except that @samp{H} precedes a Hebrew | ||
| 570 | date and @samp{I} precedes an Islamic date. Moreover, because the | ||
| 571 | Hebrew and Islamic month names are not uniquely specified by the first | ||
| 572 | three letters, you may not abbreviate them. For example, a diary entry | ||
| 573 | for the Hebrew date Heshvan 25 could look like this: | ||
| 574 | |||
| 575 | @smallexample | ||
| 576 | HHeshvan 25 Happy Hebrew birthday! | ||
| 577 | @end smallexample | ||
| 578 | |||
| 579 | @noindent | ||
| 580 | and would appear in the diary for any date that corresponds to Heshvan 25 | ||
| 581 | on the Hebrew calendar. And here is an Islamic-date diary entry that matches | ||
| 582 | Dhu al-Qada 25: | ||
| 583 | |||
| 584 | @smallexample | ||
| 585 | IDhu al-Qada 25 Happy Islamic birthday! | ||
| 586 | @end smallexample | ||
| 587 | |||
| 588 | As with Gregorian-date diary entries, Hebrew- and Islamic-date entries | ||
| 589 | are nonmarking if they are preceded with an ampersand (@samp{&}). | ||
| 590 | |||
| 591 | Here is a table of commands used in the calendar to create diary entries | ||
| 592 | that match the selected date and other dates that are similar in the Hebrew | ||
| 593 | or Islamic calendar: | ||
| 594 | |||
| 595 | @table @kbd | ||
| 596 | @item i h d | ||
| 597 | Add a diary entry for the Hebrew date corresponding to the selected date | ||
| 598 | (@code{insert-hebrew-diary-entry}). | ||
| 599 | @item i h m | ||
| 600 | Add a diary entry for the day of the Hebrew month corresponding to the | ||
| 601 | selected date (@code{insert-monthly-hebrew-diary-entry}). This diary | ||
| 602 | entry matches any date that has the same Hebrew day-within-month as the | ||
| 603 | selected date. | ||
| 604 | @item i h y | ||
| 605 | Add a diary entry for the day of the Hebrew year corresponding to the | ||
| 606 | selected date (@code{insert-yearly-hebrew-diary-entry}). This diary | ||
| 607 | entry matches any date which has the same Hebrew month and day-within-month | ||
| 608 | as the selected date. | ||
| 609 | @item i i d | ||
| 610 | Add a diary entry for the Islamic date corresponding to the selected date | ||
| 611 | (@code{insert-islamic-diary-entry}). | ||
| 612 | @item i i m | ||
| 613 | Add a diary entry for the day of the Islamic month corresponding to the | ||
| 614 | selected date (@code{insert-monthly-islamic-diary-entry}). | ||
| 615 | @item i i y | ||
| 616 | Add a diary entry for the day of the Islamic year corresponding to the | ||
| 617 | selected date (@code{insert-yearly-islamic-diary-entry}). | ||
| 618 | @end table | ||
| 619 | |||
| 620 | @findex insert-hebrew-diary-entry | ||
| 621 | @findex insert-monthly-hebrew-diary-entry | ||
| 622 | @findex insert-yearly-hebrew-diary-entry | ||
| 623 | @findex insert-islamic-diary-entry | ||
| 624 | @findex insert-monthly-islamic-diary-entry | ||
| 625 | @findex insert-yearly-islamic-diary-entry | ||
| 626 | These commands work much like the corresponding commands for ordinary | ||
| 627 | diary entries: they apply to the date that point is on in the calendar | ||
| 628 | window, and what they do is insert just the date portion of a diary entry | ||
| 629 | at the end of your diary file. You must then insert the rest of the | ||
| 630 | diary entry. | ||
| 631 | |||
| 632 | @node Fancy Diary Display | ||
| 633 | @section Fancy Diary Display | ||
| 634 | @vindex diary-display-hook | ||
| 635 | @findex simple-diary-display | ||
| 636 | |||
| 637 | Diary display works by preparing the diary buffer and then running the | ||
| 638 | hook @code{diary-display-hook}. The default value of this hook | ||
| 639 | (@code{simple-diary-display}) hides the irrelevant diary entries and | ||
| 640 | then displays the buffer. However, if you specify the hook as follows, | ||
| 641 | |||
| 642 | @cindex diary buffer | ||
| 643 | @findex fancy-diary-display | ||
| 644 | @example | ||
| 645 | (add-hook 'diary-display-hook 'fancy-diary-display) | ||
| 646 | @end example | ||
| 647 | |||
| 648 | @noindent | ||
| 649 | this enables fancy diary display. It displays diary entries and | ||
| 650 | holidays by copying them into a special buffer that exists only for the | ||
| 651 | sake of display. Copying to a separate buffer provides an opportunity | ||
| 652 | to change the displayed text to make it prettier---for example, to sort | ||
| 653 | the entries by the dates they apply to. | ||
| 654 | |||
| 655 | As with simple diary display, you can print a hard copy of the buffer | ||
| 656 | with @code{print-diary-entries}. To print a hard copy of a day-by-day | ||
| 657 | diary for a week, position point on Sunday of that week, type | ||
| 658 | @kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the | ||
| 659 | inclusion of the holidays slows down the display slightly; you can speed | ||
| 660 | things up by setting the variable @code{holidays-in-diary-buffer} to | ||
| 661 | @code{nil}. | ||
| 662 | |||
| 663 | @vindex diary-list-include-blanks | ||
| 664 | Ordinarily, the fancy diary buffer does not show days for which there are | ||
| 665 | no diary entries, even if that day is a holiday. If you want such days to be | ||
| 666 | shown in the fancy diary buffer, set the variable | ||
| 667 | @code{diary-list-include-blanks} to @code{t}.@refill | ||
| 668 | |||
| 669 | @cindex sorting diary entries | ||
| 670 | If you use the fancy diary display, you can use the normal hook | ||
| 671 | @code{list-diary-entries-hook} to sort each day's diary entries by their | ||
| 672 | time of day. Here's how: | ||
| 673 | |||
| 674 | @findex sort-diary-entries | ||
| 675 | @example | ||
| 676 | (add-hook 'list-diary-entries-hook 'sort-diary-entries t) | ||
| 677 | @end example | ||
| 678 | |||
| 679 | @noindent | ||
| 680 | For each day, this sorts diary entries that begin with a recognizable | ||
| 681 | time of day according to their times. Diary entries without times come | ||
| 682 | first within each day. | ||
| 683 | |||
| 684 | Fancy diary display also has the ability to process included diary | ||
| 685 | files. This permits a group of people to share a diary file for events | ||
| 686 | that apply to all of them. Lines in the diary file of this form: | ||
| 687 | |||
| 688 | @smallexample | ||
| 689 | #include "@var{filename}" | ||
| 690 | @end smallexample | ||
| 691 | |||
| 692 | @noindent | ||
| 693 | includes the diary entries from the file @var{filename} in the fancy | ||
| 694 | diary buffer. The include mechanism is recursive, so that included files | ||
| 695 | can include other files, and so on; you must be careful not to have a | ||
| 696 | cycle of inclusions, of course. Here is how to enable the include | ||
| 697 | facility: | ||
| 698 | |||
| 699 | @vindex list-diary-entries-hook | ||
| 700 | @vindex mark-diary-entries-hook | ||
| 701 | @findex include-other-diary-files | ||
| 702 | @findex mark-included-diary-files | ||
| 703 | @smallexample | ||
| 704 | (add-hook 'list-diary-entries-hook 'include-other-diary-files) | ||
| 705 | (add-hook 'mark-diary-entries-hook 'mark-included-diary-files) | ||
| 706 | @end smallexample | ||
| 707 | |||
| 708 | The include mechanism works only with the fancy diary display, because | ||
| 709 | ordinary diary display shows the entries directly from your diary file. | ||
| 710 | |||
| 711 | @node Sexp Diary Entries | ||
| 712 | @section Sexp Entries and the Fancy Diary Display | ||
| 713 | @cindex sexp diary entries | ||
| 714 | |||
| 715 | Sexp diary entries allow you to do more than just have complicated | ||
| 716 | conditions under which a diary entry applies. If you use the fancy | ||
| 717 | diary display, sexp entries can generate the text of the entry depending | ||
| 718 | on the date itself. For example, an anniversary diary entry can insert | ||
| 719 | the number of years since the anniversary date into the text of the | ||
| 720 | diary entry. Thus the @samp{%d} in this dairy entry: | ||
| 721 | |||
| 722 | @findex diary-anniversary | ||
| 723 | @smallexample | ||
| 724 | %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old) | ||
| 725 | @end smallexample | ||
| 726 | |||
| 727 | @noindent | ||
| 728 | gets replaced by the age, so on October 31, 1990 the entry appears in | ||
| 729 | the fancy diary buffer like this: | ||
| 730 | |||
| 731 | @smallexample | ||
| 732 | Arthur's birthday (42 years old) | ||
| 733 | @end smallexample | ||
| 734 | |||
| 735 | @noindent | ||
| 736 | If the diary file instead contains this entry: | ||
| 737 | |||
| 738 | @smallexample | ||
| 739 | %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday | ||
| 740 | @end smallexample | ||
| 741 | |||
| 742 | @noindent | ||
| 743 | the entry in the fancy diary buffer for October 31, 1990 appears like this: | ||
| 744 | |||
| 745 | @smallexample | ||
| 746 | Arthur's 42nd birthday | ||
| 747 | @end smallexample | ||
| 748 | |||
| 749 | Similarly, cyclic diary entries can interpolate the number of repetitions | ||
| 750 | that have occurred: | ||
| 751 | |||
| 752 | @findex diary-cyclic | ||
| 753 | @smallexample | ||
| 754 | %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time) | ||
| 755 | @end smallexample | ||
| 756 | |||
| 757 | @noindent | ||
| 758 | looks like this: | ||
| 759 | |||
| 760 | @smallexample | ||
| 761 | Renew medication (5th time) | ||
| 762 | @end smallexample | ||
| 763 | |||
| 764 | @noindent | ||
| 765 | in the fancy diary display on September 8, 1990. | ||
| 766 | |||
| 767 | There is an early reminder diary sexp that includes its entry in the | ||
| 768 | diary not only on the date of occurrence, but also on earlier dates. | ||
| 769 | For example, if you want a reminder a week before your anniversary, you | ||
| 770 | can use | ||
| 771 | |||
| 772 | @findex diary-remind | ||
| 773 | @smallexample | ||
| 774 | %%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary | ||
| 775 | @end smallexample | ||
| 776 | |||
| 777 | @noindent | ||
| 778 | and the fancy diary will show | ||
| 779 | @smallexample | ||
| 780 | Ed's anniversary | ||
| 781 | @end smallexample | ||
| 782 | @noindent | ||
| 783 | both on December 15 and on December 22. | ||
| 784 | |||
| 785 | @findex diary-date | ||
| 786 | The function @code{diary-date} applies to dates described by a month, | ||
| 787 | day, year combination, each of which can be an integer, a list of | ||
| 788 | integers, or @code{t}. The value @code{t} means all values. For | ||
| 789 | example, | ||
| 790 | |||
| 791 | @smallexample | ||
| 792 | %%(diary-date '(10 11 12) 22 t) Rake leaves | ||
| 793 | @end smallexample | ||
| 794 | |||
| 795 | @noindent | ||
| 796 | causes the fancy diary to show | ||
| 797 | |||
| 798 | @smallexample | ||
| 799 | Rake leaves | ||
| 800 | @end smallexample | ||
| 801 | |||
| 802 | @noindent | ||
| 803 | on October 22, November 22, and December 22 of every year. | ||
| 804 | |||
| 805 | @findex diary-float | ||
| 806 | The function @code{diary-float} allows you to describe diary entries | ||
| 807 | that apply to dates like the third Friday of November, or the last | ||
| 808 | Tuesday in April. The parameters are the @var{month}, @var{dayname}, | ||
| 809 | and an index @var{n}. The entry appears on the @var{n}th @var{dayname} | ||
| 810 | of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and | ||
| 811 | so on. If @var{n} is negative it counts backward from the end of | ||
| 812 | @var{month}. The value of @var{month} can be a list of months, a single | ||
| 813 | month, or @code{t} to specify all months. You can also use an optional | ||
| 814 | parameter @var{day} to specify the @var{n}th @var{dayname} of | ||
| 815 | @var{month} on or after/before @var{day}; the value of @var{day} defaults | ||
| 816 | to 1 if @var{n} is positive and to the last day of @var{month} if | ||
| 817 | @var{n} is negative. For example, | ||
| 818 | |||
| 819 | @smallexample | ||
| 820 | %%(diary-float t 1 -1) Pay rent | ||
| 821 | @end smallexample | ||
| 822 | |||
| 823 | @noindent | ||
| 824 | causes the fancy diary to show | ||
| 825 | |||
| 826 | @smallexample | ||
| 827 | Pay rent | ||
| 828 | @end smallexample | ||
| 829 | |||
| 830 | @noindent | ||
| 831 | on the last Monday of every month. | ||
| 832 | |||
| 833 | The generality of sexp diary entries lets you specify any diary | ||
| 834 | entry that you can describe algorithmically. A sexp diary entry | ||
| 835 | contains an expression that computes whether the entry applies to any | ||
| 836 | given date. If its value is non-@code{nil}, the entry applies to that | ||
| 837 | date; otherwise, it does not. The expression can use the variable | ||
| 838 | @code{date} to find the date being considered; its value is a list | ||
| 839 | (@var{month} @var{day} @var{year}) that refers to the Gregorian | ||
| 840 | calendar. | ||
| 841 | |||
| 842 | The sexp diary entry applies to a date when the expression's value | ||
| 843 | is non-@code{nil}, but some values have more specific meanings. If | ||
| 844 | the value is a string, that string is a description of the event which | ||
| 845 | occurs on that date. The value can also have the form | ||
| 846 | @code{(@var{mark} . @var{string})}; then @var{mark} specifies how to | ||
| 847 | mark the date in the calendar, and @var{string} is the description of | ||
| 848 | the event. If @var{mark} is a single-character string, that character | ||
| 849 | appears next to the date in the calendar. If @var{mark} is a face | ||
| 850 | name, the date is displayed in that face. If @var{mark} is | ||
| 851 | @code{nil}, that specifies no particular highlighting for the date. | ||
| 852 | |||
| 853 | Suppose you get paid on the 21st of the month if it is a weekday, and | ||
| 854 | on the Friday before if the 21st is on a weekend. Here is how to write | ||
| 855 | a sexp diary entry that matches those dates: | ||
| 856 | |||
| 857 | @smallexample | ||
| 858 | &%%(let ((dayname (calendar-day-of-week date)) | ||
| 859 | (day (car (cdr date)))) | ||
| 860 | (or (and (= day 21) (memq dayname '(1 2 3 4 5))) | ||
| 861 | (and (memq day '(19 20)) (= dayname 5))) | ||
| 862 | ) Pay check deposited | ||
| 863 | @end smallexample | ||
| 864 | |||
| 865 | The following sexp diary entries take advantage of the ability (in the fancy | ||
| 866 | diary display) to concoct diary entries whose text varies based on the date: | ||
| 867 | |||
| 868 | @findex diary-sunrise-sunset | ||
| 869 | @findex diary-phases-of-moon | ||
| 870 | @findex diary-day-of-year | ||
| 871 | @findex diary-iso-date | ||
| 872 | @findex diary-julian-date | ||
| 873 | @findex diary-astro-day-number | ||
| 874 | @findex diary-hebrew-date | ||
| 875 | @findex diary-islamic-date | ||
| 876 | @findex diary-french-date | ||
| 877 | @findex diary-mayan-date | ||
| 878 | @table @code | ||
| 879 | @item %%(diary-sunrise-sunset) | ||
| 880 | Make a diary entry for the local times of today's sunrise and sunset. | ||
| 881 | @item %%(diary-phases-of-moon) | ||
| 882 | Make a diary entry for the phases (quarters) of the moon. | ||
| 883 | @item %%(diary-day-of-year) | ||
| 884 | Make a diary entry with today's day number in the current year and the number | ||
| 885 | of days remaining in the current year. | ||
| 886 | @item %%(diary-iso-date) | ||
| 887 | Make a diary entry with today's equivalent ISO commercial date. | ||
| 888 | @item %%(diary-julian-date) | ||
| 889 | Make a diary entry with today's equivalent date on the Julian calendar. | ||
| 890 | @item %%(diary-astro-day-number) | ||
| 891 | Make a diary entry with today's equivalent astronomical (Julian) day number. | ||
| 892 | @item %%(diary-hebrew-date) | ||
| 893 | Make a diary entry with today's equivalent date on the Hebrew calendar. | ||
| 894 | @item %%(diary-islamic-date) | ||
| 895 | Make a diary entry with today's equivalent date on the Islamic calendar. | ||
| 896 | @item %%(diary-french-date) | ||
| 897 | Make a diary entry with today's equivalent date on the French Revolutionary | ||
| 898 | calendar. | ||
| 899 | @item %%(diary-mayan-date) | ||
| 900 | Make a diary entry with today's equivalent date on the Mayan calendar. | ||
| 901 | @end table | ||
| 902 | |||
| 903 | @noindent | ||
| 904 | Thus including the diary entry | ||
| 905 | |||
| 906 | @example | ||
| 907 | &%%(diary-hebrew-date) | ||
| 908 | @end example | ||
| 909 | |||
| 910 | @noindent | ||
| 911 | causes every day's diary display to contain the equivalent date on the | ||
| 912 | Hebrew calendar, if you are using the fancy diary display. (With simple | ||
| 913 | diary display, the line @samp{&%%(diary-hebrew-date)} appears in the | ||
| 914 | diary for any date, but does nothing particularly useful.) | ||
| 915 | |||
| 916 | These functions can be used to construct sexp diary entries based on | ||
| 917 | the Hebrew calendar in certain standard ways: | ||
| 918 | |||
| 919 | @cindex rosh hodesh | ||
| 920 | @findex diary-rosh-hodesh | ||
| 921 | @cindex parasha, weekly | ||
| 922 | @findex diary-parasha | ||
| 923 | @cindex candle lighting times | ||
| 924 | @findex diary-sabbath-candles | ||
| 925 | @cindex omer count | ||
| 926 | @findex diary-omer | ||
| 927 | @cindex yahrzeits | ||
| 928 | @findex diary-yahrzeit | ||
| 929 | @table @code | ||
| 930 | @item %%(diary-rosh-hodesh) | ||
| 931 | Make a diary entry that tells the occurrence and ritual announcement of each | ||
| 932 | new Hebrew month. | ||
| 933 | @item %%(diary-parasha) | ||
| 934 | Make a Saturday diary entry that tells the weekly synagogue scripture reading. | ||
| 935 | @item %%(diary-sabbath-candles) | ||
| 936 | Make a Friday diary entry that tells the @emph{local time} of Sabbath | ||
| 937 | candle lighting. | ||
| 938 | @item %%(diary-omer) | ||
| 939 | Make a diary entry that gives the omer count, when appropriate. | ||
| 940 | @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name} | ||
| 941 | Make a diary entry marking the anniversary of a date of death. The date | ||
| 942 | is the @emph{Gregorian} (civil) date of death. The diary entry appears | ||
| 943 | on the proper Hebrew calendar anniversary and on the day before. (In | ||
| 944 | the European style, the order of the parameters is changed to @var{day}, | ||
| 945 | @var{month}, @var{year}.) | ||
| 946 | @end table | ||
| 947 | |||
| 948 | All the functions documented above take an optional argument | ||
| 949 | @var{mark} which specifies how to mark the date in the calendar display. | ||
| 950 | If one of these functions decides that it applies to a certain date, | ||
| 951 | it returns a value that contains @var{mark}. | ||
| 952 | |||
| 953 | @node Appt Customizing | ||
| 954 | @section Customizing Appointment Reminders | ||
| 955 | |||
| 956 | You can specify exactly how Emacs reminds you of an appointment, and | ||
| 957 | how far in advance it begins doing so, by setting these variables: | ||
| 958 | |||
| 959 | @vindex appt-message-warning-time | ||
| 960 | @vindex appt-audible | ||
| 961 | @vindex appt-visible | ||
| 962 | @vindex appt-display-mode-line | ||
| 963 | @vindex appt-msg-window | ||
| 964 | @vindex appt-display-duration | ||
| 965 | @vindex appt-disp-window-function | ||
| 966 | @vindex appt-delete-window-function | ||
| 967 | @table @code | ||
| 968 | @item appt-message-warning-time | ||
| 969 | The time in minutes before an appointment that the reminder begins. The | ||
| 970 | default is 12 minutes. | ||
| 971 | @item appt-audible | ||
| 972 | If this is non-@code{nil}, Emacs rings the | ||
| 973 | terminal bell for appointment reminders. The default is @code{t}. | ||
| 974 | @item appt-visible | ||
| 975 | If this is non-@code{nil}, Emacs displays the appointment | ||
| 976 | message in the echo area. The default is @code{t}. | ||
| 977 | @item appt-display-mode-line | ||
| 978 | If this is non-@code{nil}, Emacs displays the number of minutes | ||
| 979 | to the appointment on the mode line. The default is @code{t}. | ||
| 980 | @item appt-msg-window | ||
| 981 | If this is non-@code{nil}, Emacs displays the appointment | ||
| 982 | message in another window. The default is @code{t}. | ||
| 983 | @item appt-disp-window-function | ||
| 984 | This variable holds a function to use to create the other window | ||
| 985 | for the appointment message. | ||
| 986 | @item appt-delete-window-function | ||
| 987 | This variable holds a function to use to get rid of the appointment | ||
| 988 | message window, when its time is up. | ||
| 989 | @item appt-display-duration | ||
| 990 | The number of seconds to display an appointment message. The default | ||
| 991 | is 10 seconds. | ||
| 992 | @end table | ||
| 993 | |||
| 994 | @ignore | ||
| 995 | arch-tag: 8e50c766-4703-4888-a421-af15244cca7e | ||
| 996 | @end ignore | ||
diff --git a/lispref/display.texi b/lispref/display.texi index 74c6b3feb51..d5a28b0a0cc 100644 --- a/lispref/display.texi +++ b/lispref/display.texi | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | @c 2002, 2005 Free Software Foundation, Inc. | 4 | @c 2002, 2005 Free Software Foundation, Inc. |
| 5 | @c See the file elisp.texi for copying conditions. | 5 | @c See the file elisp.texi for copying conditions. |
| 6 | @setfilename ../info/display | 6 | @setfilename ../info/display |
| 7 | @node Display, Calendar, Processes, Top | 7 | @node Display, System Interface, Processes, Top |
| 8 | @chapter Emacs Display | 8 | @chapter Emacs Display |
| 9 | 9 | ||
| 10 | This chapter describes a number of features related to the display | 10 | This chapter describes a number of features related to the display |
| @@ -1695,10 +1695,10 @@ font. (This works only on certain systems.) | |||
| 1695 | 1695 | ||
| 1696 | @item fringe | 1696 | @item fringe |
| 1697 | @kindex fringe @r{(face name)} | 1697 | @kindex fringe @r{(face name)} |
| 1698 | This face controls the default colors of window fringes, the thin areas on | 1698 | This face controls the default colors of window fringes, the thin |
| 1699 | either side that are used to display continuation and truncation glyphs. | 1699 | areas on either side that are used to display continuation and |
| 1700 | Other faces used to display bitmaps in the fringe implicitly inherits from | 1700 | truncation glyphs. Other faces used to display bitmaps in the fringe |
| 1701 | this face. | 1701 | are implicitly merged with this face. |
| 1702 | 1702 | ||
| 1703 | @item minibuffer-prompt | 1703 | @item minibuffer-prompt |
| 1704 | @kindex minibuffer-prompt @r{(face name)} | 1704 | @kindex minibuffer-prompt @r{(face name)} |
| @@ -2008,6 +2008,8 @@ color. The value is used like that of @code{:underline}. | |||
| 2008 | The name of a face from which to inherit attributes, or a list of face | 2008 | The name of a face from which to inherit attributes, or a list of face |
| 2009 | names. Attributes from inherited faces are merged into the face like an | 2009 | names. Attributes from inherited faces are merged into the face like an |
| 2010 | underlying face would be, with higher priority than underlying faces. | 2010 | underlying face would be, with higher priority than underlying faces. |
| 2011 | If a list of faces is used, attributes from faces earlier in the list | ||
| 2012 | override those from later faces. | ||
| 2011 | 2013 | ||
| 2012 | @item :box | 2014 | @item :box |
| 2013 | Whether or not a box should be drawn around characters, its color, the | 2015 | Whether or not a box should be drawn around characters, its color, the |
| @@ -2833,12 +2835,12 @@ line in a window is by specifying the @code{display} property for one | |||
| 2833 | of the characters that appears in it. Use a display specification of | 2835 | of the characters that appears in it. Use a display specification of |
| 2834 | the form @code{(left-fringe @var{bitmap} [@var{face}])} or | 2836 | the form @code{(left-fringe @var{bitmap} [@var{face}])} or |
| 2835 | @code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display | 2837 | @code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display |
| 2836 | Property}). Here, @var{bitmap} is a symbol identifying the bitmap | 2838 | Property}). Here, @var{bitmap} is a symbol identifying the bitmap you |
| 2837 | you want, and @var{face} (which is optional) is the name of the face | 2839 | want, and @var{face} (which is optional) is the name of the face whose |
| 2838 | whose colors should be used for displaying the bitmap, instead of the | 2840 | colors should be used for displaying the bitmap, instead of the |
| 2839 | default @code{fringe} face. When specified, @var{face} implicitly | 2841 | default @code{fringe} face. @var{face} is automatically merged with |
| 2840 | inherits from the @code{fringe} face, so normally @var{face} only | 2842 | the @code{fringe} face, so normally @var{face} need only specify the |
| 2841 | specifies the foreground color for the bitmap. | 2843 | foreground color for the bitmap. |
| 2842 | 2844 | ||
| 2843 | These are the symbols identify the standard fringe bitmaps. | 2845 | These are the symbols identify the standard fringe bitmaps. |
| 2844 | Evaluate @code{(require 'fringe)} to define them. Fringe bitmap | 2846 | Evaluate @code{(require 'fringe)} to define them. Fringe bitmap |
| @@ -2928,8 +2930,8 @@ This sets the face for the fringe bitmap @var{bitmap} to @var{face}. | |||
| 2928 | If @var{face} is @code{nil}, it selects the @code{fringe} face. The | 2930 | If @var{face} is @code{nil}, it selects the @code{fringe} face. The |
| 2929 | bitmap's face controls the color to draw it in. | 2931 | bitmap's face controls the color to draw it in. |
| 2930 | 2932 | ||
| 2931 | The @var{face} implicitly inherits from the @code{fringe} face, | 2933 | @var{face} is merged with the @code{fringe} face, so normally |
| 2932 | so normally @var{face} should specifu only the foreground color. | 2934 | @var{face} should specify only the foreground color. |
| 2933 | @end defun | 2935 | @end defun |
| 2934 | 2936 | ||
| 2935 | @node Overlay Arrow | 2937 | @node Overlay Arrow |
| @@ -2991,11 +2993,21 @@ used. | |||
| 2991 | @section Scroll Bars | 2993 | @section Scroll Bars |
| 2992 | 2994 | ||
| 2993 | Normally the frame parameter @code{vertical-scroll-bars} controls | 2995 | Normally the frame parameter @code{vertical-scroll-bars} controls |
| 2994 | whether the windows in the frame have vertical scroll bars. A | 2996 | whether the windows in the frame have vertical scroll bars, and |
| 2995 | non-@code{nil} parameter value means they do. The frame parameter | 2997 | whether they are on the left or right. The frame parameter |
| 2996 | @code{scroll-bar-width} specifies how wide they are (@code{nil} | 2998 | @code{scroll-bar-width} specifies how wide they are (@code{nil} |
| 2997 | meaning the default). @xref{Window Frame Parameters}. | 2999 | meaning the default). @xref{Window Frame Parameters}. |
| 2998 | 3000 | ||
| 3001 | @defun frame-current-scroll-bars &optional frame | ||
| 3002 | This function reports the scroll bar type settings for frame | ||
| 3003 | @var{frame}. The value is a cons cell | ||
| 3004 | @code{(@var{vertical-type} .@: @var{horizontal-type})}, where | ||
| 3005 | @var{vertical-type} is either @code{left}, @code{right}, or @code{nil} | ||
| 3006 | (which means no scroll bar.) @var{horizontal-type} is meant to | ||
| 3007 | specify the horizontal scroll bar type, but since they are not | ||
| 3008 | implemented, it is always @code{nil}. | ||
| 3009 | @end defun | ||
| 3010 | |||
| 2999 | @vindex vertical-scroll-bar | 3011 | @vindex vertical-scroll-bar |
| 3000 | You can enable or disable scroll bars for a particular buffer, | 3012 | You can enable or disable scroll bars for a particular buffer, |
| 3001 | by setting the variable @code{vertical-scroll-bar}. This variable | 3013 | by setting the variable @code{vertical-scroll-bar}. This variable |
| @@ -3050,6 +3062,16 @@ are @code{nil} for no scroll bar, @code{left} to put a scroll bar on | |||
| 3050 | the left, and @code{right} to put a scroll bar on the right. | 3062 | the left, and @code{right} to put a scroll bar on the right. |
| 3051 | @end defvar | 3063 | @end defvar |
| 3052 | 3064 | ||
| 3065 | @defun window-current-scroll-bars &optional window | ||
| 3066 | This function reports the scroll bar type for window @var{window}. | ||
| 3067 | If @var{window} is omitted or @code{nil}, the selected window is used. | ||
| 3068 | The value is a cons cell | ||
| 3069 | @code{(@var{vertical-type} .@: @var{horizontal-type})}. Unlike | ||
| 3070 | @code{window-scroll-bars}, this reports the scroll bar type actually | ||
| 3071 | used, once frame defaults and @code{scroll-bar-mode} are taken into | ||
| 3072 | account. | ||
| 3073 | @end defun | ||
| 3074 | |||
| 3053 | @defvar scroll-bar-width | 3075 | @defvar scroll-bar-width |
| 3054 | This variable, always local in all buffers, specifies the width of the | 3076 | This variable, always local in all buffers, specifies the width of the |
| 3055 | buffer's scroll bars, measured in pixels. A value of @code{nil} means | 3077 | buffer's scroll bars, measured in pixels. A value of @code{nil} means |
diff --git a/lispref/elisp.texi b/lispref/elisp.texi index b2cec876d79..894ebb20df3 100644 --- a/lispref/elisp.texi +++ b/lispref/elisp.texi | |||
| @@ -152,7 +152,6 @@ Reference Manual, corresponding to GNU Emacs version 22.1. | |||
| 152 | 152 | ||
| 153 | * Processes:: Running and communicating with subprocesses. | 153 | * Processes:: Running and communicating with subprocesses. |
| 154 | * Display:: Features for controlling the screen display. | 154 | * Display:: Features for controlling the screen display. |
| 155 | * Calendar:: Customizing the calendar and diary. | ||
| 156 | * System Interface:: Getting the user id, system type, environment | 155 | * System Interface:: Getting the user id, system type, environment |
| 157 | variables, and other such things. | 156 | variables, and other such things. |
| 158 | 157 | ||
| @@ -973,7 +972,6 @@ Object Internals | |||
| 973 | @include processes.texi | 972 | @include processes.texi |
| 974 | 973 | ||
| 975 | @include display.texi | 974 | @include display.texi |
| 976 | @include calendar.texi | ||
| 977 | @include os.texi | 975 | @include os.texi |
| 978 | 976 | ||
| 979 | @c MOVE to Emacs Manual: include misc-modes.texi | 977 | @c MOVE to Emacs Manual: include misc-modes.texi |
diff --git a/lispref/keymaps.texi b/lispref/keymaps.texi index f374472e101..59e2e19966d 100644 --- a/lispref/keymaps.texi +++ b/lispref/keymaps.texi | |||
| @@ -456,16 +456,16 @@ key. | |||
| 456 | key. | 456 | key. |
| 457 | 457 | ||
| 458 | @item | 458 | @item |
| 459 | @cindex @kbd{M-g} | 459 | @cindex @kbd{M-o} |
| 460 | @vindex facemenu-keymap | 460 | @vindex facemenu-keymap |
| 461 | @code{facemenu-keymap} is the global keymap used for the @kbd{M-g} | 461 | @code{facemenu-keymap} is the global keymap used for the @kbd{M-o} |
| 462 | prefix key. | 462 | prefix key. |
| 463 | 463 | ||
| 464 | @c Emacs 19 feature | 464 | @c Emacs 19 feature |
| 465 | @item | 465 | @item |
| 466 | The other Emacs prefix keys are @kbd{C-x @@}, @kbd{C-x a i}, @kbd{C-x | 466 | The other Emacs prefix keys are @kbd{M-g}, @kbd{C-x @@}, @kbd{C-x a i}, |
| 467 | @key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps that have no | 467 | @kbd{C-x @key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps |
| 468 | special names. | 468 | that have no special names. |
| 469 | @end itemize | 469 | @end itemize |
| 470 | 470 | ||
| 471 | The keymap binding of a prefix key is used for looking up the event | 471 | The keymap binding of a prefix key is used for looking up the event |
diff --git a/lispref/makefile.w32-in b/lispref/makefile.w32-in index 8d4a95911ce..248330167b2 100644 --- a/lispref/makefile.w32-in +++ b/lispref/makefile.w32-in | |||
| @@ -48,7 +48,6 @@ srcs = \ | |||
| 48 | $(srcdir)/back.texi \ | 48 | $(srcdir)/back.texi \ |
| 49 | $(srcdir)/backups.texi \ | 49 | $(srcdir)/backups.texi \ |
| 50 | $(srcdir)/buffers.texi \ | 50 | $(srcdir)/buffers.texi \ |
| 51 | $(srcdir)/calendar.texi \ | ||
| 52 | $(srcdir)/commands.texi \ | 51 | $(srcdir)/commands.texi \ |
| 53 | $(srcdir)/compile.texi \ | 52 | $(srcdir)/compile.texi \ |
| 54 | $(srcdir)/control.texi \ | 53 | $(srcdir)/control.texi \ |
diff --git a/lispref/markers.texi b/lispref/markers.texi index 31d6796af58..3353d7805ae 100644 --- a/lispref/markers.texi +++ b/lispref/markers.texi | |||
| @@ -554,6 +554,12 @@ This variable if non-@code{nil} enables Transient Mark mode, in which | |||
| 554 | every buffer-modifying primitive sets @code{deactivate-mark}. The | 554 | every buffer-modifying primitive sets @code{deactivate-mark}. The |
| 555 | consequence of this is that commands that modify the buffer normally | 555 | consequence of this is that commands that modify the buffer normally |
| 556 | make the mark inactive. | 556 | make the mark inactive. |
| 557 | |||
| 558 | Lisp programs can set @code{transient-mark-mode} to @code{only} to | ||
| 559 | enable Transient Mark mode for the following command only. During | ||
| 560 | that following command, the value of transient-mark-mode is | ||
| 561 | @code{identity}. If it is still @code{identity} at the end of the | ||
| 562 | command, it changes to nil. | ||
| 557 | @end defopt | 563 | @end defopt |
| 558 | 564 | ||
| 559 | @defopt mark-even-if-inactive | 565 | @defopt mark-even-if-inactive |
diff --git a/lispref/minibuf.texi b/lispref/minibuf.texi index bfe5214174b..a479aae8234 100644 --- a/lispref/minibuf.texi +++ b/lispref/minibuf.texi | |||
| @@ -1296,6 +1296,11 @@ called, it calls this function with the supplied arguments instead of | |||
| 1296 | doing its usual work. | 1296 | doing its usual work. |
| 1297 | @end defvar | 1297 | @end defvar |
| 1298 | 1298 | ||
| 1299 | @defvar read-file-name-completion-ignore-case | ||
| 1300 | If this variable is non-@code{nil}, @code{read-file-name} ignores case | ||
| 1301 | when performing completion. | ||
| 1302 | @end defvar | ||
| 1303 | |||
| 1299 | @defun read-directory-name prompt &optional directory default existing initial | 1304 | @defun read-directory-name prompt &optional directory default existing initial |
| 1300 | This function is like @code{read-file-name} but allows only directory | 1305 | This function is like @code{read-file-name} but allows only directory |
| 1301 | names as completion possibilities. | 1306 | names as completion possibilities. |
diff --git a/lispref/modes.texi b/lispref/modes.texi index 9464f900d4f..f2cfcd2eb8c 100644 --- a/lispref/modes.texi +++ b/lispref/modes.texi | |||
| @@ -2349,7 +2349,7 @@ be slow. | |||
| 2349 | @defvar font-lock-mark-block-function | 2349 | @defvar font-lock-mark-block-function |
| 2350 | If this variable is non-@code{nil}, it should be a function that is | 2350 | If this variable is non-@code{nil}, it should be a function that is |
| 2351 | called with no arguments, to choose an enclosing range of text for | 2351 | called with no arguments, to choose an enclosing range of text for |
| 2352 | refontification for the command @kbd{M-g M-g} | 2352 | refontification for the command @kbd{M-o M-o} |
| 2353 | (@code{font-lock-fontify-block}). | 2353 | (@code{font-lock-fontify-block}). |
| 2354 | 2354 | ||
| 2355 | The function should report its choice by placing the region around it. | 2355 | The function should report its choice by placing the region around it. |
diff --git a/lispref/os.texi b/lispref/os.texi index 1358e3421db..a1de8f09c36 100644 --- a/lispref/os.texi +++ b/lispref/os.texi | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | @c Free Software Foundation, Inc. | 4 | @c Free Software Foundation, Inc. |
| 5 | @c See the file elisp.texi for copying conditions. | 5 | @c See the file elisp.texi for copying conditions. |
| 6 | @setfilename ../info/os | 6 | @setfilename ../info/os |
| 7 | @node System Interface, Antinews, Calendar, Top | 7 | @node System Interface, Antinews, Display, Top |
| 8 | @chapter Operating System Interface | 8 | @chapter Operating System Interface |
| 9 | 9 | ||
| 10 | This chapter is about starting and getting out of Emacs, access to | 10 | This chapter is about starting and getting out of Emacs, access to |
diff --git a/lispref/positions.texi b/lispref/positions.texi index 19a26754140..822238a6342 100644 --- a/lispref/positions.texi +++ b/lispref/positions.texi | |||
| @@ -581,9 +581,9 @@ The coordinate arguments @var{frompos} and @var{topos} are cons cells of | |||
| 581 | the form @code{(@var{hpos} . @var{vpos})}. | 581 | the form @code{(@var{hpos} . @var{vpos})}. |
| 582 | 582 | ||
| 583 | The argument @var{width} is the number of columns available to display | 583 | The argument @var{width} is the number of columns available to display |
| 584 | text; this affects handling of continuation lines. Use the value | 584 | text; this affects handling of continuation lines. @code{nil} means |
| 585 | returned by @code{window-width} for the window of your choice; | 585 | the actual number of usable text columns in the window, which is |
| 586 | normally, use @code{(window-width @var{window})}. | 586 | equivalent to the value returned by @code{(window-width window)}. |
| 587 | 587 | ||
| 588 | The argument @var{offsets} is either @code{nil} or a cons cell of the | 588 | The argument @var{offsets} is either @code{nil} or a cons cell of the |
| 589 | form @code{(@var{hscroll} . @var{tab-offset})}. Here @var{hscroll} is | 589 | form @code{(@var{hscroll} . @var{tab-offset})}. Here @var{hscroll} is |
diff --git a/lispref/text.texi b/lispref/text.texi index e300b345454..1d4dc0fce8a 100644 --- a/lispref/text.texi +++ b/lispref/text.texi | |||
| @@ -207,6 +207,41 @@ This is like @code{buffer-substring}, except that it does not copy text | |||
| 207 | properties, just the characters themselves. @xref{Text Properties}. | 207 | properties, just the characters themselves. @xref{Text Properties}. |
| 208 | @end defun | 208 | @end defun |
| 209 | 209 | ||
| 210 | @defun filter-buffer-substring start end &optional delete | ||
| 211 | This function passes the buffer text between @var{start} and @var{end} | ||
| 212 | through the filter functions specified by the variable | ||
| 213 | @code{buffer-substring-filters}, and returns the value from the last | ||
| 214 | filter function. If @code{buffer-substring-filters} is @code{nil}, | ||
| 215 | the value is the unaltered text from the buffer, what | ||
| 216 | @code{buffer-substring} would return. | ||
| 217 | |||
| 218 | If @var{delete} is non-@code{nil}, this function deletes the text | ||
| 219 | between @var{start} and @var{end} after copying it, like | ||
| 220 | @code{delete-and-extract-region}. | ||
| 221 | |||
| 222 | Lisp code should use this function instead of @code{buffer-substring} | ||
| 223 | or @code{delete-and-extract-region} when copying into user-accessible | ||
| 224 | data structures such as the kill-ring, X clipboard, and registers. | ||
| 225 | Major and minor modes can add functions to | ||
| 226 | @code{buffer-substring-filters} to alter such text as it is copied out | ||
| 227 | of the buffer. | ||
| 228 | @end defun | ||
| 229 | |||
| 230 | @defvar buffer-substring-filters | ||
| 231 | This variable should be a list of functions that accept a single | ||
| 232 | argument, a string, and return a string. | ||
| 233 | @code{filter-buffer-substring} passes the buffer substring to the | ||
| 234 | first function in this list, and the return value of each function is | ||
| 235 | passed to the next function. The return value of the last function is | ||
| 236 | used as the return value of @code{filter-buffer-substring}. | ||
| 237 | |||
| 238 | As a special convention, point is set to the start of the buffer text | ||
| 239 | being operated on (i.e., the @var{start} argument for | ||
| 240 | @code{filter-buffer-substring}) before these functions are called. | ||
| 241 | |||
| 242 | If this variable is @code{nil}, no filtering is performed. | ||
| 243 | @end defvar | ||
| 244 | |||
| 210 | @defun buffer-string | 245 | @defun buffer-string |
| 211 | This function returns the contents of the entire accessible portion of | 246 | This function returns the contents of the entire accessible portion of |
| 212 | the current buffer as a string. It is equivalent to | 247 | the current buffer as a string. It is equivalent to |
diff --git a/lispref/tips.texi b/lispref/tips.texi index c029ee1d451..538affd7450 100644 --- a/lispref/tips.texi +++ b/lispref/tips.texi | |||
| @@ -452,6 +452,13 @@ Profile your program with the @file{elp} library. See the file | |||
| 452 | @file{elp.el} for instructions. | 452 | @file{elp.el} for instructions. |
| 453 | 453 | ||
| 454 | @item | 454 | @item |
| 455 | @cindex @file{benchmark.el} | ||
| 456 | @cindex benchmarking | ||
| 457 | Check the speed of individual Emacs Lisp forms using the | ||
| 458 | @file{benchmark} library. See the functions @code{benchmark-run} and | ||
| 459 | @code{benchmark-run-compiled} in @file{benchmark.el}. | ||
| 460 | |||
| 461 | @item | ||
| 455 | Use iteration rather than recursion whenever possible. | 462 | Use iteration rather than recursion whenever possible. |
| 456 | Function calls are slow in Emacs Lisp even when a compiled function | 463 | Function calls are slow in Emacs Lisp even when a compiled function |
| 457 | is calling another compiled function. | 464 | is calling another compiled function. |
diff --git a/lispref/vol1.texi b/lispref/vol1.texi index cc771bf0359..58ab99c91ba 100644 --- a/lispref/vol1.texi +++ b/lispref/vol1.texi | |||
| @@ -258,7 +258,6 @@ Manual, corresponding to GNU Emacs version 19.29. | |||
| 258 | variables, and other such things. | 258 | variables, and other such things. |
| 259 | * Display:: Parameters controlling screen usage. | 259 | * Display:: Parameters controlling screen usage. |
| 260 | The bell. Waiting for input. | 260 | The bell. Waiting for input. |
| 261 | * Calendar:: Customizing the calendar and diary. | ||
| 262 | 261 | ||
| 263 | Appendices | 262 | Appendices |
| 264 | 263 | ||
| @@ -989,7 +988,6 @@ Object Internals | |||
| 989 | @c include processes.texi | 988 | @c include processes.texi |
| 990 | @c include os.texi | 989 | @c include os.texi |
| 991 | @c include display.texi | 990 | @c include display.texi |
| 992 | @c include calendar.texi | ||
| 993 | 991 | ||
| 994 | @c MOVE to Emacs Manual: include misc-modes.texi | 992 | @c MOVE to Emacs Manual: include misc-modes.texi |
| 995 | 993 | ||
diff --git a/lispref/vol2.texi b/lispref/vol2.texi index f3cdb6db116..d7a67315c52 100644 --- a/lispref/vol2.texi +++ b/lispref/vol2.texi | |||
| @@ -259,7 +259,6 @@ Manual, corresponding to GNU Emacs version 19.29. | |||
| 259 | variables, and other such things. | 259 | variables, and other such things. |
| 260 | * Display:: Parameters controlling screen usage. | 260 | * Display:: Parameters controlling screen usage. |
| 261 | The bell. Waiting for input. | 261 | The bell. Waiting for input. |
| 262 | * Calendar:: Customizing the calendar and diary. | ||
| 263 | 262 | ||
| 264 | Appendices | 263 | Appendices |
| 265 | 264 | ||
| @@ -990,7 +989,6 @@ Object Internals | |||
| 990 | @include processes.texi | 989 | @include processes.texi |
| 991 | @include os.texi | 990 | @include os.texi |
| 992 | @include display.texi | 991 | @include display.texi |
| 993 | @include calendar.texi | ||
| 994 | 992 | ||
| 995 | @c MOVE to Emacs Manual: include misc-modes.texi | 993 | @c MOVE to Emacs Manual: include misc-modes.texi |
| 996 | 994 | ||
diff --git a/man/ChangeLog b/man/ChangeLog index bfe4eab2fa5..d808b9fe6d7 100644 --- a/man/ChangeLog +++ b/man/ChangeLog | |||
| @@ -1,3 +1,227 @@ | |||
| 1 | 2005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 2 | |||
| 3 | * programs.texi (Fortran Motion): Fix previous change. | ||
| 4 | |||
| 5 | 2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 6 | |||
| 7 | * emacs-mime.texi (Display Customization): Markup fixes. | ||
| 8 | (rfc2047): Update. | ||
| 9 | |||
| 10 | 2005-03-23 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 11 | |||
| 12 | * gnus-faq.texi: Replaced with auto-generated version. | ||
| 13 | |||
| 14 | 2005-03-29 Richard M. Stallman <rms@gnu.org> | ||
| 15 | |||
| 16 | * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info. | ||
| 17 | |||
| 18 | 2005-03-29 Chong Yidong <cyd@stupidchicken.com> | ||
| 19 | |||
| 20 | * text.texi (Refill): Refer to Long Lines Mode. | ||
| 21 | (Longlines): New node. | ||
| 22 | (Auto Fill): Don't index "word wrap" here. | ||
| 23 | (Filling): Add Longlines to menu. | ||
| 24 | |||
| 25 | 2005-03-29 Richard M. Stallman <rms@gnu.org> | ||
| 26 | |||
| 27 | * xresources.texi: Minor fixes. | ||
| 28 | |||
| 29 | * misc.texi (Emacs Server): Fix Texinfo usage. | ||
| 30 | |||
| 31 | * emacs.texi (Top): Don't use a real section heading for | ||
| 32 | "Detailed Node Listing". Fake it instead. | ||
| 33 | |||
| 34 | * basic.texi (Position Info): Minor cleanup. | ||
| 35 | |||
| 36 | * mule.texi (Input Methods): Minor cleanup. | ||
| 37 | |||
| 38 | 2005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 39 | |||
| 40 | * programs.texi (ForIndent Vars): `fortran-if-indent' does other | ||
| 41 | constructs as well. | ||
| 42 | (Fortran Motion): Add fortran-end-of-block, | ||
| 43 | fortran-beginning-of-block. | ||
| 44 | |||
| 45 | 2005-03-29 Kenichi Handa <handa@m17n.org> | ||
| 46 | |||
| 47 | * mule.texi (Input Methods): Refer to the command C-u C-x =. | ||
| 48 | |||
| 49 | * basic.texi (Position Info): Update the description about the | ||
| 50 | command C-u C-x =. | ||
| 51 | |||
| 52 | 2005-03-28 Richard M. Stallman <rms@gnu.org> | ||
| 53 | |||
| 54 | * emacs.texi (Top): Use @section for the detailed node listing. | ||
| 55 | |||
| 56 | * calendar.texi: Minor fixes to previous change. | ||
| 57 | |||
| 58 | * programs.texi (Fortran): Small fixes to previous changes. | ||
| 59 | |||
| 60 | * emacs.texi (Top): Update list of subnodes of Dired. | ||
| 61 | Likewise for building.texi. | ||
| 62 | |||
| 63 | * files.texi (File Conveniences): Delete Auto Image File mode. | ||
| 64 | |||
| 65 | 2005-03-28 Chong Yidong <cyd@stupidchicken.com> | ||
| 66 | |||
| 67 | * building.texi (Flymake): New node. | ||
| 68 | |||
| 69 | * custom.texi (Function Keys): Document kp- event types and | ||
| 70 | keypad-setup package. | ||
| 71 | |||
| 72 | * dired.texi (Wdired): New node. | ||
| 73 | |||
| 74 | * files.texi (File Conveniences): Reorder entries. | ||
| 75 | Explain how to turn on Auto-image-file mode. | ||
| 76 | Document Thumbs mode. | ||
| 77 | |||
| 78 | * mule.texi (Specify Coding): Document recode-region and | ||
| 79 | recode-file-name. | ||
| 80 | |||
| 81 | * programs.texi (Program Modes): Add Conf mode and DNS mode. | ||
| 82 | |||
| 83 | 2005-03-27 Luc Teirlinck <teirllm@auburn.edu> | ||
| 84 | |||
| 85 | * commands.texi (Keys): M-o is now a prefix key. | ||
| 86 | |||
| 87 | 2005-03-27 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 88 | |||
| 89 | * programs.texi: Reformat and update copyright years. | ||
| 90 | (Fortran): Update section. | ||
| 91 | |||
| 92 | 2005-03-26 Luc Teirlinck <teirllm@auburn.edu> | ||
| 93 | |||
| 94 | * files.texi: Several small changes in addition to: | ||
| 95 | (Visiting): Change xref for Dialog Boxes to ref. | ||
| 96 | (Version Headers): Replace references to obsolete var | ||
| 97 | `vc-header-alist' with `vc-BACKEND-header'. | ||
| 98 | (Customizing VC): Update value of `vc-handled-backends'. | ||
| 99 | |||
| 100 | 2005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk> | ||
| 101 | |||
| 102 | * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section; | ||
| 103 | move here from Emacs Lisp Reference Manual. | ||
| 104 | * calendar.texi (Calendar/Diary, Diary Commands) | ||
| 105 | (Special Diary Entries, Importing Diary): Change some xrefs to | ||
| 106 | point to emacs-xtra rather than elisp. | ||
| 107 | |||
| 108 | * emacs-xtra.texi (Calendar Customizing): Move | ||
| 109 | view-diary-entries-initially, view-calendar-holidays-initially, | ||
| 110 | mark-diary-entries-in-calendar, mark-holidays-in-calendar to main | ||
| 111 | Emacs Manual. | ||
| 112 | (Appt Customizing): Merge entire section into main Emacs Manual. | ||
| 113 | * calendar.texi (Holidays): Move view-calendar-holidays-initially, | ||
| 114 | mark-holidays-in-calendar here from emacs-xtra. | ||
| 115 | (Displaying the Diary): Move view-diary-entries-initially, | ||
| 116 | mark-diary-entries-in-calendar here from emacs-xtra. | ||
| 117 | (Appointments): Move appt-display-mode-line, | ||
| 118 | appt-display-duration, appt-disp-window-function, | ||
| 119 | appt-delete-window-function here from emacs-xtra. | ||
| 120 | |||
| 121 | * calendar.texi: Update and reformat copyright. | ||
| 122 | Change all @xrefs to the non-printing emacs-xtra to @inforefs. | ||
| 123 | (Calendar/Diary): Menu now only on Mouse-3, not C-Mouse-3. | ||
| 124 | (Diary): Refer to `diary-file' rather than ~/diary. | ||
| 125 | (Diary Commands): Rename node to "Displaying the Diary". | ||
| 126 | * emacs.texi (Top): Rename "Diary Commands" section. | ||
| 127 | * misc.texi (Hardcopy): Rename "Diary Commands" xref. | ||
| 128 | |||
| 129 | 2005-03-26 Eli Zaretskii <eliz@gnu.org> | ||
| 130 | |||
| 131 | * misc.texi (Emacs Server): Fix the command for setting | ||
| 132 | server-name. Add an xref to Invoking emacsclient. | ||
| 133 | |||
| 134 | * help.texi (Help Summary): Clarify when "C-h ." will do something | ||
| 135 | nontrivial. | ||
| 136 | (Apropos): Add cindex entry for apropos-sort-by-scores. | ||
| 137 | |||
| 138 | * display.texi (Text Display): Add index entries for how no-break | ||
| 139 | characters are displayed. | ||
| 140 | |||
| 141 | 2005-03-26 Stephan Stahl <stahl@eos.franken.de> (tiny change) | ||
| 142 | |||
| 143 | * dired-x.texi (Multiple Dired Directories): default-directory was | ||
| 144 | renamed to dired-default-directory. | ||
| 145 | |||
| 146 | 2005-03-26 Eli Zaretskii <eliz@gnu.org> | ||
| 147 | |||
| 148 | * files.texi (Visiting): Fix cross-references introduced with the | ||
| 149 | last change. | ||
| 150 | |||
| 151 | * xresources.texi (GTK resources): Fix last change. | ||
| 152 | |||
| 153 | 2005-03-26 Jay Belanger <belanger@truman.edu> | ||
| 154 | |||
| 155 | * calc.texi (Simplifying Formulas, Rewrite Rules): Change | ||
| 156 | description of top and bottom of fraction. | ||
| 157 | (Modulo Forms): Move description of how to create modulo forms to | ||
| 158 | earlier in the section. | ||
| 159 | (Fraction Mode): Suggest using : to get a fraction by dividing. | ||
| 160 | (Basic Arithmetic): Adjust placement of command name. | ||
| 161 | (Truncating the Stack): Emphasize that "hidden" entries are still | ||
| 162 | visible. | ||
| 163 | (Installation): Move discussion of printing manual to "About This | ||
| 164 | Manual". | ||
| 165 | (About This Manual): Mention how to print the manual. | ||
| 166 | (Reporting Bugs): Remove first person. | ||
| 167 | (Building Vectors): Add algebraic version of append. | ||
| 168 | (Manipulating Vectors): Fix algebraic version of calc-reverse-vector. | ||
| 169 | (Grouping Digits): Fix typo. | ||
| 170 | |||
| 171 | 2005-03-25 Chong Yidong <cyd@stupidchicken.com> | ||
| 172 | |||
| 173 | * xresources.texi (X Resources): GTK options documented too. | ||
| 174 | (Resources): Clarify meaning of program name. | ||
| 175 | (Table of Resources): Add visualClass. | ||
| 176 | (GTK resources): Rewrite. | ||
| 177 | (GTK widget names, GTK Names in Emacs, GTK styles): Cleanups. | ||
| 178 | |||
| 179 | * display.texi (Text Display): Mention non-breaking spaces. | ||
| 180 | |||
| 181 | * files.texi (Reverting): Document auto-revert-check-vc-info. | ||
| 182 | |||
| 183 | * frames.texi (Mouse Commands): Document | ||
| 184 | x-mouse-click-focus-ignore-position and mouse-drag-copy-region. | ||
| 185 | |||
| 186 | * help.texi (Help Summary): Add `C-h .'. | ||
| 187 | (Apropos): Apropos accepts a list of search terms. | ||
| 188 | Document apropos-sort-by-scores. | ||
| 189 | (Help Echo): Document display-local-help. | ||
| 190 | |||
| 191 | * misc.texi (Emacs Server): Document server-name. | ||
| 192 | (Invoking emacsclient): Document -s option for server names. | ||
| 193 | |||
| 194 | * text.texi (Outline Visibility): Introduce "current heading | ||
| 195 | line" (commands can be called with point on a body line). | ||
| 196 | Re-order table to follow the sequence of discussion. | ||
| 197 | hide-body won't hide lines before first header line. | ||
| 198 | (TeX Mode): Add DocTeX mode. | ||
| 199 | |||
| 200 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 201 | |||
| 202 | * calc.texi, cl.texi, gnus.texi, idlwave.texi, reftex.texi: Replace | ||
| 203 | `legal' with `valid'. | ||
| 204 | |||
| 205 | 2005-03-25 Werner Lemberg <wl@gnu.org> | ||
| 206 | |||
| 207 | * calc.texi, reftex.texi: Replace `illegal' with `invalid'. | ||
| 208 | |||
| 209 | 2005-03-24 Jay Belanger <belanger@truman.edu> | ||
| 210 | |||
| 211 | * calc.texi (General Mode Commands) | ||
| 212 | (Mode Settings in Embedded Mode): Added some explanation of | ||
| 213 | recording mode settings. | ||
| 214 | |||
| 215 | 2005-03-24 Richard M. Stallman <rms@gnu.org> | ||
| 216 | |||
| 217 | * mule.texi (Single-Byte Character Support): Delete mention | ||
| 218 | of iso-acc.el and iso-transl.el. | ||
| 219 | |||
| 220 | * calc.texi: Remove praise of non-free software. | ||
| 221 | |||
| 222 | * idlwave.texi: Don't say where to get IDL or its non-free manual. | ||
| 223 | (Installation): Node deleted. | ||
| 224 | |||
| 1 | 2005-03-23 Lute Kamstra <lute@gnu.org> | 225 | 2005-03-23 Lute Kamstra <lute@gnu.org> |
| 2 | 226 | ||
| 3 | * search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch. | 227 | * search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch. |
diff --git a/man/basic.texi b/man/basic.texi index 2f8c2bc1764..ad3cfbca88a 100644 --- a/man/basic.texi +++ b/man/basic.texi | |||
| @@ -677,36 +677,57 @@ point=26957 of 26956(100%) column 0 | |||
| 677 | @cindex character set of character at point | 677 | @cindex character set of character at point |
| 678 | @cindex font of character at point | 678 | @cindex font of character at point |
| 679 | @cindex text properties at point | 679 | @cindex text properties at point |
| 680 | @w{@kbd{C-u C-x =}} displays additional information about a | 680 | @w{@kbd{C-u C-x =}} displays these additional information about a |
| 681 | character, including the character set name and the codes that | 681 | character. |
| 682 | identify the character within that character set; @acronym{ASCII} characters are | 682 | |
| 683 | identified as belonging to the @code{ascii} character set. It also | 683 | @itemize @bullet |
| 684 | shows the character's syntax, categories, and encodings both | 684 | @item |
| 685 | internally in the buffer and externally if you save the file. It also | 685 | The character set name, and the codes that identify the character |
| 686 | shows the character's text properties (@pxref{Text Properties,,, | 686 | within that character set; @acronym{ASCII} characters are identified |
| 687 | as belonging to the @code{ascii} character set. | ||
| 688 | |||
| 689 | @item | ||
| 690 | The character's syntax and categories. | ||
| 691 | |||
| 692 | @item | ||
| 693 | The character's encodings, both internally in the buffer, and externally | ||
| 694 | if you were to save the file. | ||
| 695 | |||
| 696 | @item | ||
| 697 | What to type to input the character in the current input method | ||
| 698 | (if it supports the character). | ||
| 699 | |||
| 700 | @item | ||
| 701 | If you are running Emacs on a window system, the font name and glyph | ||
| 702 | code for the character. If you are running Emacs on a terminal, the | ||
| 703 | code(s) sent to the terminal. | ||
| 704 | |||
| 705 | @item | ||
| 706 | The character's text properties (@pxref{Text Properties,,, | ||
| 687 | elisp, the Emacs Lisp Reference Manual}), and any overlays containing it | 707 | elisp, the Emacs Lisp Reference Manual}), and any overlays containing it |
| 688 | (@pxref{Overlays,,, elisp, the same manual}). | 708 | (@pxref{Overlays,,, elisp, the same manual}). |
| 709 | @end itemize | ||
| 689 | 710 | ||
| 690 | Here's an example showing the Latin-1 character A with grave accent, | 711 | Here's an example showing the Latin-1 character A with grave accent, |
| 691 | in a buffer whose coding system is @code{iso-2022-7bit}, whose | 712 | in a buffer whose coding system is @code{iso-latin-1}, whose |
| 692 | terminal coding system is @code{iso-latin-1} (so the terminal actually | 713 | terminal coding system is @code{iso-latin-1} (so the terminal actually |
| 693 | displays the character as @samp{@`A}), and which has font-lock-mode | 714 | displays the character as @samp{@`A}), and which has font-lock-mode |
| 694 | (@pxref{Font Lock}) enabled: | 715 | (@pxref{Font Lock}) enabled: |
| 695 | 716 | ||
| 696 | @smallexample | 717 | @smallexample |
| 697 | character: @`A (04300, 2240, 0x8c0) | 718 | character: @`A (04300, 2240, 0x8c0, U+00C0) |
| 698 | charset: latin-iso8859-1 | 719 | charset: latin-iso8859-1 |
| 699 | (Right-Hand Part of Latin Alphabet 1@dots{} | 720 | (Right-Hand Part of Latin Alphabet 1@dots{} |
| 700 | code point: 64 | 721 | code point: 64 |
| 701 | syntax: w which means: word | 722 | syntax: w which means: word |
| 702 | category: l:Latin | 723 | category: l:Latin |
| 703 | buffer code: 0x81 0xC0 | 724 | to input: type "`A" |
| 704 | file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) | 725 | buffer code: 0x81 0xC0 |
| 705 | terminal code: C0 | 726 | file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) |
| 706 | 727 | display: terminal code 0xC0 | |
| 707 | Text properties | 728 | |
| 708 | font-lock-face: font-lock-variable-name-face | 729 | There are text properties here: |
| 709 | fontified: t | 730 | fontified t |
| 710 | @end smallexample | 731 | @end smallexample |
| 711 | 732 | ||
| 712 | @node Arguments | 733 | @node Arguments |
diff --git a/man/building.texi b/man/building.texi index 50490e34dd5..10b7b8053d2 100644 --- a/man/building.texi +++ b/man/building.texi | |||
| @@ -18,6 +18,7 @@ in the larger process of developing and maintaining programs. | |||
| 18 | * Compilation Shell:: Customizing your shell properly | 18 | * Compilation Shell:: Customizing your shell properly |
| 19 | for use in the compilation buffer. | 19 | for use in the compilation buffer. |
| 20 | * Grep Searching:: Searching with grep. | 20 | * Grep Searching:: Searching with grep. |
| 21 | * Flymake:: Finding syntax errors on the fly. | ||
| 21 | * Debuggers:: Running symbolic debuggers for non-Lisp programs. | 22 | * Debuggers:: Running symbolic debuggers for non-Lisp programs. |
| 22 | * Executing Lisp:: Various modes for editing Lisp programs, | 23 | * Executing Lisp:: Various modes for editing Lisp programs, |
| 23 | with different facilities for running | 24 | with different facilities for running |
| @@ -337,6 +338,31 @@ initial default for the command---one that runs both @code{find} and | |||
| 337 | @code{grep}, so as to search every file in a directory tree. See also | 338 | @code{grep}, so as to search every file in a directory tree. See also |
| 338 | the @code{find-grep-dired} command, in @ref{Dired and Find}. | 339 | the @code{find-grep-dired} command, in @ref{Dired and Find}. |
| 339 | 340 | ||
| 341 | @node Flymake | ||
| 342 | @section Finding Syntax Errors On The Fly | ||
| 343 | @cindex checking syntax | ||
| 344 | |||
| 345 | Flymake mode is a minor mode that performs on-the-fly syntax | ||
| 346 | checking for many programming and markup languages, including C, C++, | ||
| 347 | Perl, HTML, and @TeX{}/La@TeX{}. It is somewhat analogous to Flyspell | ||
| 348 | mode, which performs spell checking for ordinary human languages in a | ||
| 349 | similar fashion (@pxref{Spelling}). As you edit a file, Flymake mode | ||
| 350 | runs an appropriate syntax checking tool in the background, using a | ||
| 351 | temporary copy of the buffer. It then parses the error and warning | ||
| 352 | messages, and highlights the erroneous lines in the buffer. The | ||
| 353 | syntax checking tool used depends on the language; for example, for | ||
| 354 | C/C++ files this is usually the C compiler. Flymake can also use | ||
| 355 | build tools such as @code{make} for checking complicated projects. | ||
| 356 | |||
| 357 | To activate Flymake mode, type @kbd{M-x flymake-mode}. You can move | ||
| 358 | to the errors spotted by Flymake mode with @kbd{M-x | ||
| 359 | flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To | ||
| 360 | display any error messages associated with the current line, use | ||
| 361 | @kbd{M-x flymake-display-err-menu-for-current-line}. | ||
| 362 | |||
| 363 | For more details about using Flymake, see @ref{Top, Flymake, | ||
| 364 | Flymake, flymake, The Flymake Manual}. | ||
| 365 | |||
| 340 | @node Debuggers | 366 | @node Debuggers |
| 341 | @section Running Debuggers Under Emacs | 367 | @section Running Debuggers Under Emacs |
| 342 | @cindex debuggers | 368 | @cindex debuggers |
diff --git a/man/calc.texi b/man/calc.texi index c45fd8cd227..07c33206f28 100644 --- a/man/calc.texi +++ b/man/calc.texi | |||
| @@ -83,7 +83,7 @@ | |||
| 83 | @copying | 83 | @copying |
| 84 | This file documents Calc, the GNU Emacs calculator. | 84 | This file documents Calc, the GNU Emacs calculator. |
| 85 | 85 | ||
| 86 | Copyright (C) 1990, 1991, 2001, 2002 Free Software Foundation, Inc. | 86 | Copyright (C) 1990, 1991, 2001, 2002, 2005 Free Software Foundation, Inc. |
| 87 | 87 | ||
| 88 | @quotation | 88 | @quotation |
| 89 | Permission is granted to copy, distribute and/or modify this document | 89 | Permission is granted to copy, distribute and/or modify this document |
| @@ -111,14 +111,15 @@ Software Foundation raise funds for GNU development.'' | |||
| 111 | @center GNU Emacs Calc Version 2.02g | 111 | @center GNU Emacs Calc Version 2.02g |
| 112 | @c [volume] | 112 | @c [volume] |
| 113 | @sp 1 | 113 | @sp 1 |
| 114 | @center January 2002 | 114 | @center March 2005 |
| 115 | @sp 5 | 115 | @sp 5 |
| 116 | @center Dave Gillespie | 116 | @center Dave Gillespie |
| 117 | @center daveg@@synaptics.com | 117 | @center daveg@@synaptics.com |
| 118 | @page | 118 | @page |
| 119 | 119 | ||
| 120 | @vskip 0pt plus 1filll | 120 | @vskip 0pt plus 1filll |
| 121 | Copyright @copyright{} 1990, 1991, 2001, 2002 Free Software Foundation, Inc. | 121 | Copyright @copyright{} 1990, 1991, 2001, 2002, 2005 |
| 122 | Free Software Foundation, Inc. | ||
| 122 | @insertcopying | 123 | @insertcopying |
| 123 | @end titlepage | 124 | @end titlepage |
| 124 | 125 | ||
| @@ -476,10 +477,9 @@ large and might be intimidating to the first-time user. If you plan to | |||
| 476 | use Calc only as a traditional desk calculator, all you really need to | 477 | use Calc only as a traditional desk calculator, all you really need to |
| 477 | read is the ``Getting Started'' chapter of this manual and possibly the | 478 | read is the ``Getting Started'' chapter of this manual and possibly the |
| 478 | first few sections of the tutorial. As you become more comfortable with | 479 | first few sections of the tutorial. As you become more comfortable with |
| 479 | the program you can learn its additional features. In terms of efficiency, | 480 | the program you can learn its additional features. Calc does not |
| 480 | scope and depth, Calc cannot replace a powerful tool like Mathematica. | 481 | have the scope and depth of a fully-functional symbolic math package, |
| 481 | But Calc has the advantages of convenience, portability, and availability | 482 | but Calc has the advantages of convenience, portability, and freedom. |
| 482 | of the source code. And, of course, it's free! | ||
| 483 | 483 | ||
| 484 | @node About This Manual, Notations Used in This Manual, What is Calc, Getting Started | 484 | @node About This Manual, Notations Used in This Manual, What is Calc, Getting Started |
| 485 | @section About This Manual | 485 | @section About This Manual |
| @@ -546,8 +546,35 @@ you can also go to the part of the manual describing any Calc key, | |||
| 546 | function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v}, | 546 | function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v}, |
| 547 | respectively. @xref{Help Commands}. | 547 | respectively. @xref{Help Commands}. |
| 548 | 548 | ||
| 549 | Printed copies of this manual are also available from the Free Software | 549 | The Calc manual can be printed, but because the manual is so large, you |
| 550 | Foundation. | 550 | should only make a printed copy if you really need it. To print the |
| 551 | manual, you will need the @TeX{} typesetting program (this is a free | ||
| 552 | program by Donald Knuth at Stanford University) as well as the | ||
| 553 | @file{texindex} program and @file{texinfo.tex} file, both of which can | ||
| 554 | be obtained from the FSF as part of the @code{texinfo} package. | ||
| 555 | To print the Calc manual in one huge tome, you will need the | ||
| 556 | source code to this manual, @file{calc.texi}, available as part of the | ||
| 557 | Emacs source. Once you have this file, type @kbd{texi2dvi calc.texi}. | ||
| 558 | Alternatively, change to the @file{man} subdirectory of the Emacs | ||
| 559 | source distribution, and type @kbd{make calc.dvi}. (Don't worry if you | ||
| 560 | get some ``overfull box'' warnings while @TeX{} runs.) | ||
| 561 | The result will be a device-independent output file called | ||
| 562 | @file{calc.dvi}, which you must print in whatever way is right | ||
| 563 | for your system. On many systems, the command is | ||
| 564 | |||
| 565 | @example | ||
| 566 | lpr -d calc.dvi | ||
| 567 | @end example | ||
| 568 | |||
| 569 | @noindent | ||
| 570 | or | ||
| 571 | |||
| 572 | @example | ||
| 573 | dvips calc.dvi | ||
| 574 | @end example | ||
| 575 | |||
| 576 | @c Printed copies of this manual are also available from the Free Software | ||
| 577 | @c Foundation. | ||
| 551 | 578 | ||
| 552 | @node Notations Used in This Manual, Demonstration of Calc, About This Manual, Getting Started | 579 | @node Notations Used in This Manual, Demonstration of Calc, About This Manual, Getting Started |
| 553 | @section Notations Used in This Manual | 580 | @section Notations Used in This Manual |
| @@ -1365,13 +1392,13 @@ to look around for other data types that might be worth having. | |||
| 1365 | 1392 | ||
| 1366 | Around this time, my friend Rick Koshi showed me his nifty new HP-28 | 1393 | Around this time, my friend Rick Koshi showed me his nifty new HP-28 |
| 1367 | calculator. It allowed the user to manipulate formulas as well as | 1394 | calculator. It allowed the user to manipulate formulas as well as |
| 1368 | numerical quantities, and it could also operate on matrices. I decided | 1395 | numerical quantities, and it could also operate on matrices. I |
| 1369 | that these would be good for Calc to have, too. And once things had | 1396 | decided that these would be good for Calc to have, too. And once |
| 1370 | gone this far, I figured I might as well take a look at serious algebra | 1397 | things had gone this far, I figured I might as well take a look at |
| 1371 | systems like Mathematica, Macsyma, and Maple for further ideas. Since | 1398 | serious algebra systems for further ideas. Since these systems did |
| 1372 | these systems did far more than I could ever hope to implement, I decided | 1399 | far more than I could ever hope to implement, I decided to focus on |
| 1373 | to focus on rewrite rules and other programming features so that users | 1400 | rewrite rules and other programming features so that users could |
| 1374 | could implement what they needed for themselves. | 1401 | implement what they needed for themselves. |
| 1375 | 1402 | ||
| 1376 | Rick complained that matrices were hard to read, so I put in code to | 1403 | Rick complained that matrices were hard to read, so I put in code to |
| 1377 | format them in a 2D style. Once these routines were in place, Big mode | 1404 | format them in a 2D style. Once these routines were in place, Big mode |
| @@ -1412,16 +1439,14 @@ parts. Bob Weiner helped immensely with the Lucid Emacs port. | |||
| 1412 | Among the books used in the development of Calc were Knuth's @emph{Art | 1439 | Among the books used in the development of Calc were Knuth's @emph{Art |
| 1413 | of Computer Programming} (especially volume II, @emph{Seminumerical | 1440 | of Computer Programming} (especially volume II, @emph{Seminumerical |
| 1414 | Algorithms}); @emph{Numerical Recipes} by Press, Flannery, Teukolsky, | 1441 | Algorithms}); @emph{Numerical Recipes} by Press, Flannery, Teukolsky, |
| 1415 | and Vetterling; Bevington's @emph{Data Reduction and Error Analysis for | 1442 | and Vetterling; Bevington's @emph{Data Reduction and Error Analysis |
| 1416 | the Physical Sciences}; @emph{Concrete Mathematics} by Graham, Knuth, | 1443 | for the Physical Sciences}; @emph{Concrete Mathematics} by Graham, |
| 1417 | and Patashnik; Steele's @emph{Common Lisp, the Language}; the @emph{CRC | 1444 | Knuth, and Patashnik; Steele's @emph{Common Lisp, the Language}; the |
| 1418 | Standard Math Tables} (William H. Beyer, ed.); and Abramowitz and | 1445 | @emph{CRC Standard Math Tables} (William H. Beyer, ed.); and |
| 1419 | Stegun's venerable @emph{Handbook of Mathematical Functions}. I | 1446 | Abramowitz and Stegun's venerable @emph{Handbook of Mathematical |
| 1420 | consulted the user's manuals for the HP-28 and HP-48 calculators, as | 1447 | Functions}. Also, of course, Calc could not have been written without |
| 1421 | well as for the programs Mathematica, SMP, Macsyma, Maple, MathCAD, | 1448 | the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil Lewis and |
| 1422 | Gnuplot, and others. Also, of course, Calc could not have been written | 1449 | Dan LaLiberte. |
| 1423 | without the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil | ||
| 1424 | Lewis and Dan LaLiberte. | ||
| 1425 | 1450 | ||
| 1426 | Final thanks go to Richard Stallman, without whose fine implementations | 1451 | Final thanks go to Richard Stallman, without whose fine implementations |
| 1427 | of the Emacs editor, language, and environment, Calc would have been | 1452 | of the Emacs editor, language, and environment, Calc would have been |
| @@ -1503,8 +1528,8 @@ general areas. | |||
| 1503 | 1528 | ||
| 1504 | @ifinfo | 1529 | @ifinfo |
| 1505 | You may wish to print out a copy of the Calc Summary and keep notes on | 1530 | You may wish to print out a copy of the Calc Summary and keep notes on |
| 1506 | it as you learn Calc. @xref{Installation}, to see how to make a printed | 1531 | it as you learn Calc. @xref{About This Manual}, to see how to make a |
| 1507 | summary. @xref{Summary}. | 1532 | printed summary. @xref{Summary}. |
| 1508 | @end ifinfo | 1533 | @end ifinfo |
| 1509 | @iftex | 1534 | @iftex |
| 1510 | The Calc Summary at the end of the reference manual includes some blank | 1535 | The Calc Summary at the end of the reference manual includes some blank |
| @@ -5601,8 +5626,8 @@ entering them on the fly. | |||
| 5601 | 5626 | ||
| 5602 | (@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get Symbolic | 5627 | (@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get Symbolic |
| 5603 | mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}. | 5628 | mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}. |
| 5604 | Using a rewrite rule, simplify this formula by multiplying both | 5629 | Using a rewrite rule, simplify this formula by multiplying the top and |
| 5605 | sides by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have | 5630 | bottom by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have |
| 5606 | to be expanded by the distributive law; do this with another | 5631 | to be expanded by the distributive law; do this with another |
| 5607 | rewrite. @xref{Rewrites Answer 1, 1}. (@bullet{}) | 5632 | rewrite. @xref{Rewrites Answer 1, 1}. (@bullet{}) |
| 5608 | 5633 | ||
| @@ -11294,6 +11319,21 @@ where @var{a} and @var{M} are real numbers or HMS forms, and | |||
| 11294 | In many applications @expr{a} and @expr{M} will be | 11319 | In many applications @expr{a} and @expr{M} will be |
| 11295 | integers but this is not required. | 11320 | integers but this is not required. |
| 11296 | 11321 | ||
| 11322 | @ignore | ||
| 11323 | @mindex M | ||
| 11324 | @end ignore | ||
| 11325 | @kindex M (modulo forms) | ||
| 11326 | @ignore | ||
| 11327 | @mindex mod | ||
| 11328 | @end ignore | ||
| 11329 | @tindex mod (operator) | ||
| 11330 | To create a modulo form during numeric entry, press the shift-@kbd{M} | ||
| 11331 | key to enter the word @samp{mod}. As a special convenience, pressing | ||
| 11332 | shift-@kbd{M} a second time automatically enters the value of @expr{M} | ||
| 11333 | that was most recently used before. During algebraic entry, either | ||
| 11334 | type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}). | ||
| 11335 | Once again, pressing this a second time enters the current modulo. | ||
| 11336 | |||
| 11297 | Modulo forms are not to be confused with the modulo operator @samp{%}. | 11337 | Modulo forms are not to be confused with the modulo operator @samp{%}. |
| 11298 | The expression @samp{27 % 10} means to compute 27 modulo 10 to produce | 11338 | The expression @samp{27 % 10} means to compute 27 modulo 10 to produce |
| 11299 | the result 7. Further computations treat this 7 as just a regular integer. | 11339 | the result 7. Further computations treat this 7 as just a regular integer. |
| @@ -11326,24 +11366,6 @@ in the sense of reducing | |||
| 11326 | modulo @expr{M}, this is not a useful definition from the | 11366 | modulo @expr{M}, this is not a useful definition from the |
| 11327 | number-theoretical point of view.) | 11367 | number-theoretical point of view.) |
| 11328 | 11368 | ||
| 11329 | @ignore | ||
| 11330 | @mindex M | ||
| 11331 | @end ignore | ||
| 11332 | @kindex M (modulo forms) | ||
| 11333 | @ignore | ||
| 11334 | @mindex mod | ||
| 11335 | @end ignore | ||
| 11336 | @tindex mod (operator) | ||
| 11337 | To create a modulo form during numeric entry, press the shift-@kbd{M} | ||
| 11338 | key to enter the word @samp{mod}. As a special convenience, pressing | ||
| 11339 | shift-@kbd{M} a second time automatically enters the value of @expr{M} | ||
| 11340 | that was most recently used before. During algebraic entry, either | ||
| 11341 | type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}). | ||
| 11342 | Once again, pressing this a second time enters the current modulo. | ||
| 11343 | |||
| 11344 | You can also use @kbd{v p} and @kbd{%} to modify modulo forms. | ||
| 11345 | @xref{Building Vectors}. @xref{Basic Arithmetic}. | ||
| 11346 | |||
| 11347 | It is possible to mix HMS forms and modulo forms. For example, an | 11369 | It is possible to mix HMS forms and modulo forms. For example, an |
| 11348 | HMS form modulo 24 could be used to manipulate clock times; an HMS | 11370 | HMS form modulo 24 could be used to manipulate clock times; an HMS |
| 11349 | form modulo 360 would be suitable for angles. Making the modulo @expr{M} | 11371 | form modulo 360 would be suitable for angles. Making the modulo @expr{M} |
| @@ -11356,6 +11378,9 @@ Modulo forms cannot have variables or formulas for components. If you | |||
| 11356 | enter the formula @samp{(x + 2) mod 5}, Calc propagates the modulus | 11378 | enter the formula @samp{(x + 2) mod 5}, Calc propagates the modulus |
| 11357 | to each of the coefficients: @samp{(1 mod 5) x + (2 mod 5)}. | 11379 | to each of the coefficients: @samp{(1 mod 5) x + (2 mod 5)}. |
| 11358 | 11380 | ||
| 11381 | You can use @kbd{v p} and @kbd{%} to modify modulo forms. | ||
| 11382 | @xref{Packing and Unpacking}. @xref{Basic Arithmetic}. | ||
| 11383 | |||
| 11359 | @ignore | 11384 | @ignore |
| 11360 | @starindex | 11385 | @starindex |
| 11361 | @end ignore | 11386 | @end ignore |
| @@ -12262,9 +12287,13 @@ appended to the end of the file. | |||
| 12262 | @kindex m R | 12287 | @kindex m R |
| 12263 | @pindex calc-mode-record-mode | 12288 | @pindex calc-mode-record-mode |
| 12264 | The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to | 12289 | The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to |
| 12265 | record the new mode settings (as if by pressing @kbd{m m}) every | 12290 | record all the mode settings (as if by pressing @kbd{m m}) every |
| 12266 | time a mode setting changes. If Embedded mode is enabled, other | 12291 | time a mode setting changes. If the modes are saved this way, then this |
| 12267 | options are available; @pxref{Mode Settings in Embedded Mode}. | 12292 | ``automatic mode recording'' mode is also saved. |
| 12293 | Type @kbd{m R} again to disable this method of recording the mode | ||
| 12294 | settings. To turn it off permanently, the @kbd{m m} command will also be | ||
| 12295 | necessary. (If Embedded mode is enabled, other options for recording | ||
| 12296 | the modes are available; @pxref{Mode Settings in Embedded Mode}.) | ||
| 12268 | 12297 | ||
| 12269 | @kindex m F | 12298 | @kindex m F |
| 12270 | @pindex calc-settings-file-name | 12299 | @pindex calc-settings-file-name |
| @@ -12485,8 +12514,10 @@ of the above example situations would produce polar complex numbers. | |||
| 12485 | Division of two integers normally yields a floating-point number if the | 12514 | Division of two integers normally yields a floating-point number if the |
| 12486 | result cannot be expressed as an integer. In some cases you would | 12515 | result cannot be expressed as an integer. In some cases you would |
| 12487 | rather get an exact fractional answer. One way to accomplish this is | 12516 | rather get an exact fractional answer. One way to accomplish this is |
| 12488 | to multiply fractions instead: @kbd{6 @key{RET} 1:4 *} produces @expr{3:2} | 12517 | to use the @kbd{:} (@code{calc-fdiv}) [@code{fdiv}] command, which |
| 12489 | even though @kbd{6 @key{RET} 4 /} produces @expr{1.5}. | 12518 | divides the two integers on the top of the stack to produce a fraction: |
| 12519 | @kbd{6 @key{RET} 4 :} produces @expr{3:2} even though | ||
| 12520 | @kbd{6 @key{RET} 4 /} produces @expr{1.5}. | ||
| 12490 | 12521 | ||
| 12491 | @kindex m f | 12522 | @kindex m f |
| 12492 | @pindex calc-frac-mode | 12523 | @pindex calc-frac-mode |
| @@ -13291,7 +13322,7 @@ are displayed in clumps of 3 or 4 (depending on the current radix) | |||
| 13291 | separated by commas. | 13322 | separated by commas. |
| 13292 | 13323 | ||
| 13293 | The @kbd{d g} command toggles grouping on and off. | 13324 | The @kbd{d g} command toggles grouping on and off. |
| 13294 | With a numerix prefix of 0, this command displays the current state of | 13325 | With a numeric prefix of 0, this command displays the current state of |
| 13295 | the grouping flag; with an argument of minus one it disables grouping; | 13326 | the grouping flag; with an argument of minus one it disables grouping; |
| 13296 | with a positive argument @expr{N} it enables grouping on every @expr{N} | 13327 | with a positive argument @expr{N} it enables grouping on every @expr{N} |
| 13297 | digits. For floating-point numbers, grouping normally occurs only | 13328 | digits. For floating-point numbers, grouping normally occurs only |
| @@ -13797,11 +13828,12 @@ The @kbd{d t} (@code{calc-truncate-stack}) command moves the @samp{.}@: | |||
| 13797 | line that marks the top-of-stack up or down in the Calculator buffer. | 13828 | line that marks the top-of-stack up or down in the Calculator buffer. |
| 13798 | The number right above that line is considered to the be at the top of | 13829 | The number right above that line is considered to the be at the top of |
| 13799 | the stack. Any numbers below that line are ``hidden'' from all stack | 13830 | the stack. Any numbers below that line are ``hidden'' from all stack |
| 13800 | operations. This is similar to the Emacs ``narrowing'' feature, except | 13831 | operations (although still visible to the user). This is similar to the |
| 13801 | that the values below the @samp{.} are @emph{visible}, just temporarily | 13832 | Emacs ``narrowing'' feature, except that the values below the @samp{.} |
| 13802 | frozen. This feature allows you to keep several independent calculations | 13833 | are @emph{visible}, just temporarily frozen. This feature allows you to |
| 13803 | running at once in different parts of the stack, or to apply a certain | 13834 | keep several independent calculations running at once in different parts |
| 13804 | command to an element buried deep in the stack. | 13835 | of the stack, or to apply a certain command to an element buried deep in |
| 13836 | the stack. | ||
| 13805 | 13837 | ||
| 13806 | Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor | 13838 | Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor |
| 13807 | is on. Thus, this line and all those below it become hidden. To un-hide | 13839 | is on. Thus, this line and all those below it become hidden. To un-hide |
| @@ -13940,7 +13972,7 @@ Without being switched into C mode first, Calc would have misinterpreted | |||
| 13940 | the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that | 13972 | the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that |
| 13941 | @code{atan} was equivalent to Calc's built-in @code{arctan} function, | 13973 | @code{atan} was equivalent to Calc's built-in @code{arctan} function, |
| 13942 | and would have written the formula back with notations (like implicit | 13974 | and would have written the formula back with notations (like implicit |
| 13943 | multiplication) which would not have been legal for a C program. | 13975 | multiplication) which would not have been valid for a C program. |
| 13944 | 13976 | ||
| 13945 | As another example, suppose you are maintaining a C program and a La@TeX{} | 13977 | As another example, suppose you are maintaining a C program and a La@TeX{} |
| 13946 | document, each of which needs a copy of the same formula. You can grab the | 13978 | document, each of which needs a copy of the same formula. You can grab the |
| @@ -14641,8 +14673,7 @@ if the matrix justification mode so specifies. | |||
| 14641 | @pindex calc-mathematica-language | 14673 | @pindex calc-mathematica-language |
| 14642 | @cindex Mathematica language | 14674 | @cindex Mathematica language |
| 14643 | The @kbd{d M} (@code{calc-mathematica-language}) command selects the | 14675 | The @kbd{d M} (@code{calc-mathematica-language}) command selects the |
| 14644 | conventions of Mathematica, a powerful and popular mathematical tool | 14676 | conventions of Mathematica. Notable differences in Mathematica mode |
| 14645 | from Wolfram Research, Inc. Notable differences in Mathematica mode | ||
| 14646 | are that the names of built-in functions are capitalized, and function | 14677 | are that the names of built-in functions are capitalized, and function |
| 14647 | calls use square brackets instead of parentheses. Thus the Calc | 14678 | calls use square brackets instead of parentheses. Thus the Calc |
| 14648 | formula @samp{sin(2 x)} is entered and displayed @w{@samp{Sin[2 x]}} in | 14679 | formula @samp{sin(2 x)} is entered and displayed @w{@samp{Sin[2 x]}} in |
| @@ -14665,8 +14696,7 @@ Subscripts use double square brackets: @samp{a[[i]]}. | |||
| 14665 | @pindex calc-maple-language | 14696 | @pindex calc-maple-language |
| 14666 | @cindex Maple language | 14697 | @cindex Maple language |
| 14667 | The @kbd{d W} (@code{calc-maple-language}) command selects the | 14698 | The @kbd{d W} (@code{calc-maple-language}) command selects the |
| 14668 | conventions of Maple, another mathematical tool from the University | 14699 | conventions of Maple. |
| 14669 | of Waterloo. | ||
| 14670 | 14700 | ||
| 14671 | Maple's language is much like C. Underscores are allowed in symbol | 14701 | Maple's language is much like C. Underscores are allowed in symbol |
| 14672 | names; square brackets are used for subscripts; explicit @samp{*}s for | 14702 | names; square brackets are used for subscripts; explicit @samp{*}s for |
| @@ -15472,7 +15502,7 @@ backslashes in tokens.) | |||
| 15472 | This will parse @samp{3 bad token 4 /"\ 5} to @samp{silly(3,4,5)}. | 15502 | This will parse @samp{3 bad token 4 /"\ 5} to @samp{silly(3,4,5)}. |
| 15473 | 15503 | ||
| 15474 | The token @kbd{#} has a predefined meaning in Calc's formula parser; | 15504 | The token @kbd{#} has a predefined meaning in Calc's formula parser; |
| 15475 | it is not legal to use @samp{"#"} in a syntax rule. However, longer | 15505 | it is not valid to use @samp{"#"} in a syntax rule. However, longer |
| 15476 | tokens that include the @samp{#} character are allowed. Also, while | 15506 | tokens that include the @samp{#} character are allowed. Also, while |
| 15477 | @samp{"$"} and @samp{"\""} are allowed as tokens, their presence in | 15507 | @samp{"$"} and @samp{"\""} are allowed as tokens, their presence in |
| 15478 | the syntax table will prevent those characters from working in their | 15508 | the syntax table will prevent those characters from working in their |
| @@ -16038,7 +16068,7 @@ commands work by removing the top one or two values from the stack, | |||
| 16038 | performing the desired operation, and pushing the result back onto the | 16068 | performing the desired operation, and pushing the result back onto the |
| 16039 | stack. If the operation cannot be performed, the result pushed is a | 16069 | stack. If the operation cannot be performed, the result pushed is a |
| 16040 | formula instead of a number, such as @samp{2/0} (because division by zero | 16070 | formula instead of a number, such as @samp{2/0} (because division by zero |
| 16041 | is illegal) or @samp{sqrt(x)} (because the argument @samp{x} is a formula). | 16071 | is invalid) or @samp{sqrt(x)} (because the argument @samp{x} is a formula). |
| 16042 | 16072 | ||
| 16043 | Most of the commands described here can be invoked by a single keystroke. | 16073 | Most of the commands described here can be invoked by a single keystroke. |
| 16044 | Some of the more obscure ones are two-letter sequences beginning with | 16074 | Some of the more obscure ones are two-letter sequences beginning with |
| @@ -16242,7 +16272,7 @@ must be positive real number. | |||
| 16242 | @kindex : | 16272 | @kindex : |
| 16243 | @pindex calc-fdiv | 16273 | @pindex calc-fdiv |
| 16244 | @tindex fdiv | 16274 | @tindex fdiv |
| 16245 | The @kbd{:} (@code{calc-fdiv}) command [@code{fdiv} function in a formula] | 16275 | The @kbd{:} (@code{calc-fdiv}) [@code{fdiv}] command |
| 16246 | divides the two integers on the top of the stack to produce a fractional | 16276 | divides the two integers on the top of the stack to produce a fractional |
| 16247 | result. This is a convenient shorthand for enabling Fraction mode (with | 16277 | result. This is a convenient shorthand for enabling Fraction mode (with |
| 16248 | @kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry | 16278 | @kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry |
| @@ -17965,14 +17995,6 @@ and the depreciation is zero for all subsequent periods. The @code{ddb} | |||
| 17965 | function returns the amount the book value decreased in the specified | 17995 | function returns the amount the book value decreased in the specified |
| 17966 | period. | 17996 | period. |
| 17967 | 17997 | ||
| 17968 | The Calc financial function names were borrowed mostly from Microsoft | ||
| 17969 | Excel and Borland's Quattro. The @code{ratel} function corresponds to | ||
| 17970 | @samp{@@CGR} in Borland's Reflex. The @code{nper} and @code{nperl} | ||
| 17971 | functions correspond to @samp{@@TERM} and @samp{@@CTERM} in Quattro, | ||
| 17972 | respectively. Beware that the Calc functions may take their arguments | ||
| 17973 | in a different order than the corresponding functions in your favorite | ||
| 17974 | spreadsheet. | ||
| 17975 | |||
| 17976 | @node Binary Functions, , Financial Functions, Arithmetic | 17998 | @node Binary Functions, , Financial Functions, Arithmetic |
| 17977 | @section Binary Number Functions | 17999 | @section Binary Number Functions |
| 17978 | 18000 | ||
| @@ -19536,7 +19558,7 @@ packing mode (an integer or a vector of integers) and @var{items} | |||
| 19536 | is a vector of objects to be packed (re-packed, really) according | 19558 | is a vector of objects to be packed (re-packed, really) according |
| 19537 | to that mode. For example, @samp{pack([3, -4], [a,b,c,d,e,f])} | 19559 | to that mode. For example, @samp{pack([3, -4], [a,b,c,d,e,f])} |
| 19538 | yields @samp{[a +/- b, @w{c +/- d}, e +/- f]}. The function is | 19560 | yields @samp{[a +/- b, @w{c +/- d}, e +/- f]}. The function is |
| 19539 | left in symbolic form if the packing mode is illegal, or if the | 19561 | left in symbolic form if the packing mode is invalid, or if the |
| 19540 | number of data items does not match the number of items required | 19562 | number of data items does not match the number of items required |
| 19541 | by the mode. | 19563 | by the mode. |
| 19542 | 19564 | ||
| @@ -19630,7 +19652,7 @@ subtracted, multiplied, and divided; @pxref{Basic Arithmetic}. | |||
| 19630 | @mindex @null | 19652 | @mindex @null |
| 19631 | @end ignore | 19653 | @end ignore |
| 19632 | @tindex | | 19654 | @tindex | |
| 19633 | The @kbd{|} (@code{calc-concat}) command ``concatenates'' two vectors | 19655 | The @kbd{|} (@code{calc-concat}) [@code{vconcat}] command ``concatenates'' two vectors |
| 19634 | into one. For example, after @kbd{@w{[ 1 , 2 ]} [ 3 , 4 ] |}, the stack | 19656 | into one. For example, after @kbd{@w{[ 1 , 2 ]} [ 3 , 4 ] |}, the stack |
| 19635 | will contain the single vector @samp{[1, 2, 3, 4]}. If the arguments | 19657 | will contain the single vector @samp{[1, 2, 3, 4]}. If the arguments |
| 19636 | are matrices, the rows of the first matrix are concatenated with the | 19658 | are matrices, the rows of the first matrix are concatenated with the |
| @@ -20031,7 +20053,7 @@ a one-column matrix. | |||
| 20031 | @kindex v v | 20053 | @kindex v v |
| 20032 | @pindex calc-reverse-vector | 20054 | @pindex calc-reverse-vector |
| 20033 | @tindex rev | 20055 | @tindex rev |
| 20034 | The @kbd{v v} (@code{calc-reverse-vector}) [@code{vec}] command reverses | 20056 | The @kbd{v v} (@code{calc-reverse-vector}) [@code{rev}] command reverses |
| 20035 | a vector end-for-end. Given a matrix, it reverses the order of the rows. | 20057 | a vector end-for-end. Given a matrix, it reverses the order of the rows. |
| 20036 | (To reverse the columns instead, just use @kbd{v t v v v t}. The same | 20058 | (To reverse the columns instead, just use @kbd{v t v v v t}. The same |
| 20037 | principle can be used to apply other vector commands to the columns of | 20059 | principle can be used to apply other vector commands to the columns of |
| @@ -22680,7 +22702,7 @@ on while doing algebra; @pxref{Fraction Mode}. | |||
| 22680 | Quotients are simplified by comparing all terms in the numerator | 22702 | Quotients are simplified by comparing all terms in the numerator |
| 22681 | with all terms in the denominator for possible cancellation using | 22703 | with all terms in the denominator for possible cancellation using |
| 22682 | the distributive law. For example, @expr{a x^2 b / c x^3 d} will | 22704 | the distributive law. For example, @expr{a x^2 b / c x^3 d} will |
| 22683 | cancel @expr{x^2} from both sides to get @expr{a b / c x d}. | 22705 | cancel @expr{x^2} from the top and bottom to get @expr{a b / c x d}. |
| 22684 | (The terms in the denominator will then be rearranged to @expr{c d x} | 22706 | (The terms in the denominator will then be rearranged to @expr{c d x} |
| 22685 | as described above.) If there is any common integer or fractional | 22707 | as described above.) If there is any common integer or fractional |
| 22686 | factor in the numerator and denominator, it is cancelled out; | 22708 | factor in the numerator and denominator, it is cancelled out; |
| @@ -23434,7 +23456,7 @@ is allowed only within @code{IntegRules}; it means ``integrate this | |||
| 23434 | with respect to the same integration variable.'' If Calc is unable | 23456 | with respect to the same integration variable.'' If Calc is unable |
| 23435 | to integrate @code{u}, the integration that invoked @code{IntegRules} | 23457 | to integrate @code{u}, the integration that invoked @code{IntegRules} |
| 23436 | also fails. Thus integrating @samp{twice(f(x))} fails, returning the | 23458 | also fails. Thus integrating @samp{twice(f(x))} fails, returning the |
| 23437 | unevaluated integral @samp{integ(twice(f(x)), x)}. It is still legal | 23459 | unevaluated integral @samp{integ(twice(f(x)), x)}. It is still valid |
| 23438 | to call @code{integ} with two or more arguments, however; in this case, | 23460 | to call @code{integ} with two or more arguments, however; in this case, |
| 23439 | if @code{u} is not integrable, @code{twice} itself will still be | 23461 | if @code{u} is not integrable, @code{twice} itself will still be |
| 23440 | integrated: If the above rule is changed to @samp{... := twice(integ(u,x))}, | 23462 | integrated: If the above rule is changed to @samp{... := twice(integ(u,x))}, |
| @@ -25281,7 +25303,7 @@ As a special feature, if the limits are infinite (or omitted, as | |||
| 25281 | described above) but the formula includes vectors subscripted by | 25303 | described above) but the formula includes vectors subscripted by |
| 25282 | expressions that involve the iteration variable, Calc narrows | 25304 | expressions that involve the iteration variable, Calc narrows |
| 25283 | the limits to include only the range of integers which result in | 25305 | the limits to include only the range of integers which result in |
| 25284 | legal subscripts for the vector. For example, the sum | 25306 | valid subscripts for the vector. For example, the sum |
| 25285 | @samp{sum(k [a,b,c,d,e,f,g]_(2k),k)} evaluates to @samp{b + 2 d + 3 f}. | 25307 | @samp{sum(k [a,b,c,d,e,f,g]_(2k),k)} evaluates to @samp{b + 2 d + 3 f}. |
| 25286 | 25308 | ||
| 25287 | The limits of a sum do not need to be integers. For example, | 25309 | The limits of a sum do not need to be integers. For example, |
| @@ -25291,7 +25313,7 @@ Calc computes the number of iterations using the formula | |||
| 25291 | after simplification as if by @kbd{a s}, evaluate to an integer. | 25313 | after simplification as if by @kbd{a s}, evaluate to an integer. |
| 25292 | 25314 | ||
| 25293 | If the number of iterations according to the above formula does | 25315 | If the number of iterations according to the above formula does |
| 25294 | not come out to an integer, the sum is illegal and will be left | 25316 | not come out to an integer, the sum is invalid and will be left |
| 25295 | in symbolic form. However, closed forms are still supplied, and | 25317 | in symbolic form. However, closed forms are still supplied, and |
| 25296 | you are on your honor not to misuse the resulting formulas by | 25318 | you are on your honor not to misuse the resulting formulas by |
| 25297 | substituting mismatched bounds into them. For example, | 25319 | substituting mismatched bounds into them. For example, |
| @@ -28746,7 +28768,7 @@ command. | |||
| 28746 | @kindex g A | 28768 | @kindex g A |
| 28747 | @pindex calc-graph-add-3d | 28769 | @pindex calc-graph-add-3d |
| 28748 | The @kbd{g A} (@code{calc-graph-add-3d}) command adds a 3D curve | 28770 | The @kbd{g A} (@code{calc-graph-add-3d}) command adds a 3D curve |
| 28749 | to the graph. It is not legal to intermix 2D and 3D curves in a | 28771 | to the graph. It is not valid to intermix 2D and 3D curves in a |
| 28750 | single graph. This command takes three arguments, ``x'', ``y'', | 28772 | single graph. This command takes three arguments, ``x'', ``y'', |
| 28751 | and ``z'', from the stack. With a positive prefix @expr{n}, it | 28773 | and ``z'', from the stack. With a positive prefix @expr{n}, it |
| 28752 | takes @expr{n+2} arguments (common ``x'' and ``y'', plus @expr{n} | 28774 | takes @expr{n+2} arguments (common ``x'' and ``y'', plus @expr{n} |
| @@ -30451,8 +30473,8 @@ use @kbd{M-# u} to update the buffer by hand. | |||
| 30451 | @noindent | 30473 | @noindent |
| 30452 | The mode settings can be changed while Calc is in embedded mode, but | 30474 | The mode settings can be changed while Calc is in embedded mode, but |
| 30453 | will revert to their original values when embedded mode is ended | 30475 | will revert to their original values when embedded mode is ended |
| 30454 | (except for the modes changed while the mode-setting mode was | 30476 | (except for the modes saved when the mode-recording mode is |
| 30455 | @code{Save}). | 30477 | @code{Save}; see below). |
| 30456 | 30478 | ||
| 30457 | Embedded mode has a rather complicated mechanism for handling mode | 30479 | Embedded mode has a rather complicated mechanism for handling mode |
| 30458 | settings in Embedded formulas. It is possible to put annotations | 30480 | settings in Embedded formulas. It is possible to put annotations |
| @@ -30511,7 +30533,7 @@ of mode setting, the second is a name for the mode itself, and | |||
| 30511 | the third is the value in the form of a Lisp symbol, number, | 30533 | the third is the value in the form of a Lisp symbol, number, |
| 30512 | or list. Annotations with unrecognizable text in the first or | 30534 | or list. Annotations with unrecognizable text in the first or |
| 30513 | second parts are ignored. The third part is not checked to make | 30535 | second parts are ignored. The third part is not checked to make |
| 30514 | sure the value is of a legal type or range; if you write an | 30536 | sure the value is of a valid type or range; if you write an |
| 30515 | annotation by hand, be sure to give a proper value or results | 30537 | annotation by hand, be sure to give a proper value or results |
| 30516 | will be unpredictable. Mode-setting annotations are case-sensitive. | 30538 | will be unpredictable. Mode-setting annotations are case-sensitive. |
| 30517 | 30539 | ||
| @@ -30572,10 +30594,11 @@ rules of reading annotations the @samp{(sci 0)} applies to it, too. | |||
| 30572 | We would have to go down to the other formula and press @kbd{M-# u} | 30594 | We would have to go down to the other formula and press @kbd{M-# u} |
| 30573 | on it in order to get it to notice the new annotation. | 30595 | on it in order to get it to notice the new annotation. |
| 30574 | 30596 | ||
| 30575 | Two more mode-recording modes selectable by @kbd{m R} are @code{Save} | 30597 | Two more mode-recording modes selectable by @kbd{m R} are available |
| 30576 | (which works even outside of Embedded mode), in which mode settings | 30598 | which are also available outside of Embedded mode. |
| 30577 | are recorded permanently in your Calc init file (the file given by the | 30599 | (@pxref{General Mode Commands}.) They are @code{Save}, in which mode |
| 30578 | variable @code{calc-settings-file}, typically @file{~/.calc.el}) | 30600 | settings are recorded permanently in your Calc init file (the file given |
| 30601 | by the variable @code{calc-settings-file}, typically @file{~/.calc.el}) | ||
| 30579 | rather than by annotating the current document, and no-recording | 30602 | rather than by annotating the current document, and no-recording |
| 30580 | mode (where there is no symbol like @code{Save} or @code{Local} in | 30603 | mode (where there is no symbol like @code{Save} or @code{Local} in |
| 30581 | the mode line), in which mode-changing commands do not leave any | 30604 | the mode line), in which mode-changing commands do not leave any |
| @@ -31799,7 +31822,7 @@ to pop @var{num} values off the stack, resimplify them by calling | |||
| 31799 | @code{calc-normalize}, and hand them to your function according to the | 31822 | @code{calc-normalize}, and hand them to your function according to the |
| 31800 | function's argument list. Your function may include @code{&optional} and | 31823 | function's argument list. Your function may include @code{&optional} and |
| 31801 | @code{&rest} parameters, so long as calling the function with @var{num} | 31824 | @code{&rest} parameters, so long as calling the function with @var{num} |
| 31802 | parameters is legal. | 31825 | parameters is valid. |
| 31803 | 31826 | ||
| 31804 | Your function must return either a number or a formula in a form | 31827 | Your function must return either a number or a formula in a form |
| 31805 | acceptable to Calc, or a list of such numbers or formulas. These value(s) | 31828 | acceptable to Calc, or a list of such numbers or formulas. These value(s) |
| @@ -32829,7 +32852,7 @@ this function returns the selected portions rather than the entire | |||
| 32829 | stack elements. It can be given a third ``selection-mode'' argument | 32852 | stack elements. It can be given a third ``selection-mode'' argument |
| 32830 | which selects other behaviors. If it is the symbol @code{t}, then | 32853 | which selects other behaviors. If it is the symbol @code{t}, then |
| 32831 | a selection in any of the requested stack elements produces an | 32854 | a selection in any of the requested stack elements produces an |
| 32832 | ``illegal operation on selections'' error. If it is the symbol @code{full}, | 32855 | ``invalid operation on selections'' error. If it is the symbol @code{full}, |
| 32833 | the whole stack entry is always returned regardless of selections. | 32856 | the whole stack entry is always returned regardless of selections. |
| 32834 | If it is the symbol @code{sel}, the selected portion is always returned, | 32857 | If it is the symbol @code{sel}, the selected portion is always returned, |
| 32835 | or @code{nil} if there is no selection. (This mode ignores the @kbd{j e} | 32858 | or @code{nil} if there is no selection. (This mode ignores the @kbd{j e} |
| @@ -34610,48 +34633,6 @@ plots. | |||
| 34610 | 34633 | ||
| 34611 | @end example | 34634 | @end example |
| 34612 | @end ifinfo | 34635 | @end ifinfo |
| 34613 | @appendixsec Printed Documentation | ||
| 34614 | |||
| 34615 | @noindent | ||
| 34616 | Because the Calc manual is so large, you should only make a printed | ||
| 34617 | copy if you really need it. To print the manual, you will need the | ||
| 34618 | @TeX{} typesetting program (this is a free program by Donald Knuth | ||
| 34619 | at Stanford University) as well as the @file{texindex} program and | ||
| 34620 | @file{texinfo.tex} file, both of which can be obtained from the FSF | ||
| 34621 | as part of the @code{texinfo} package. | ||
| 34622 | |||
| 34623 | To print the Calc manual in one huge 470 page tome, you will need the | ||
| 34624 | source code to this manual, @file{calc.texi}, available as part of the | ||
| 34625 | Emacs source. Once you have this file, type @kbd{texi2dvi calc.texi}. | ||
| 34626 | Alternatively, change to the @file{man} subdirectory of the Emacs | ||
| 34627 | source distribution, and type @kbd{make calc.dvi}. (Don't worry if you | ||
| 34628 | get some ``overfull box'' warnings while @TeX{} runs.) | ||
| 34629 | |||
| 34630 | The result will be a device-independent output file called | ||
| 34631 | @file{calc.dvi}, which you must print in whatever way is right | ||
| 34632 | for your system. On many systems, the command is | ||
| 34633 | |||
| 34634 | @example | ||
| 34635 | lpr -d calc.dvi | ||
| 34636 | @end example | ||
| 34637 | |||
| 34638 | @noindent | ||
| 34639 | or | ||
| 34640 | |||
| 34641 | @example | ||
| 34642 | dvips calc.dvi | ||
| 34643 | @end example | ||
| 34644 | |||
| 34645 | @c the bumpoddpages macro was deleted | ||
| 34646 | @ignore | ||
| 34647 | @cindex Marginal notes, adjusting | ||
| 34648 | Marginal notes for each function and key sequence normally alternate | ||
| 34649 | between the left and right sides of the page, which is correct if the | ||
| 34650 | manual is going to be bound as double-sided pages. Near the top of | ||
| 34651 | the file @file{calc.texi} you will find alternate definitions of | ||
| 34652 | the @code{\bumpoddpages} macro that put the marginal notes always on | ||
| 34653 | the same side, best if you plan to be binding single-sided pages. | ||
| 34654 | @end ignore | ||
| 34655 | 34636 | ||
| 34656 | @appendixsec Settings File | 34637 | @appendixsec Settings File |
| 34657 | 34638 | ||
| @@ -34703,15 +34684,6 @@ belanger@@truman.edu | |||
| 34703 | @end example | 34684 | @end example |
| 34704 | 34685 | ||
| 34705 | @noindent | 34686 | @noindent |
| 34706 | (In the following text, ``I'' refers to the original Calc author, Dave | ||
| 34707 | Gillespie). | ||
| 34708 | |||
| 34709 | While I cannot guarantee that I will have time to work on your bug, | ||
| 34710 | I do try to fix bugs quickly whenever I can. | ||
| 34711 | |||
| 34712 | The latest version of Calc is available from Savannah, in the Emacs | ||
| 34713 | CVS tree. See @uref{http://savannah.gnu.org/projects/emacs}. | ||
| 34714 | |||
| 34715 | There is an automatic command @kbd{M-x report-calc-bug} which helps | 34687 | There is an automatic command @kbd{M-x report-calc-bug} which helps |
| 34716 | you to report bugs. This command prompts you for a brief subject | 34688 | you to report bugs. This command prompts you for a brief subject |
| 34717 | line, then leaves you in a mail editing buffer. Type @kbd{C-c C-c} to | 34689 | line, then leaves you in a mail editing buffer. Type @kbd{C-c C-c} to |
| @@ -34719,18 +34691,18 @@ send your mail. Make sure your subject line indicates that you are | |||
| 34719 | reporting a Calc bug; this command sends mail to the maintainer's | 34691 | reporting a Calc bug; this command sends mail to the maintainer's |
| 34720 | regular mailbox. | 34692 | regular mailbox. |
| 34721 | 34693 | ||
| 34722 | If you have suggestions for additional features for Calc, I would | 34694 | If you have suggestions for additional features for Calc, please send |
| 34723 | love to hear them. Some have dared to suggest that Calc is already | 34695 | them. Some have dared to suggest that Calc is already top-heavy with |
| 34724 | top-heavy with features; I really don't see what they're talking | 34696 | features; this obviously cannot be the case, so if you have ideas, send |
| 34725 | about, so, if you have ideas, send them right in. (I may even have | 34697 | them right in. |
| 34726 | time to implement them!) | ||
| 34727 | 34698 | ||
| 34728 | At the front of the source file, @file{calc.el}, is a list of ideas for | 34699 | At the front of the source file, @file{calc.el}, is a list of ideas for |
| 34729 | future work which I have not had time to do. If any enthusiastic souls | 34700 | future work. If any enthusiastic souls wish to take it upon themselves |
| 34730 | wish to take it upon themselves to work on these, I would be delighted. | 34701 | to work on these, please send a message (using @kbd{M-x report-calc-bug}) |
| 34731 | Please let me know if you plan to contribute to Calc so I can coordinate | 34702 | so any efforts can be coordinated. |
| 34732 | your efforts with mine and those of others. I will do my best to help | 34703 | |
| 34733 | you in whatever way I can. | 34704 | The latest version of Calc is available from Savannah, in the Emacs |
| 34705 | CVS tree. See @uref{http://savannah.gnu.org/projects/emacs}. | ||
| 34734 | 34706 | ||
| 34735 | @c [summary] | 34707 | @c [summary] |
| 34736 | @node Summary, Key Index, Reporting Bugs, Top | 34708 | @node Summary, Key Index, Reporting Bugs, Top |
diff --git a/man/calendar.texi b/man/calendar.texi index fa37ab88d2c..999c29dae06 100644 --- a/man/calendar.texi +++ b/man/calendar.texi | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | @c This is part of the Emacs manual. | 1 | @c This is part of the Emacs manual. |
| 2 | @c Copyright (C) 1985,86,87,93,94,95,1997,2000,2001 Free Software Foundation, Inc. | 2 | @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, |
| 3 | @c 2005 Free Software Foundation, Inc. | ||
| 3 | @c See file emacs.texi for copying conditions. | 4 | @c See file emacs.texi for copying conditions. |
| 4 | @node Calendar/Diary, Gnus, Dired, Top | 5 | @node Calendar/Diary, Gnus, Dired, Top |
| 5 | @chapter The Calendar and the Diary | 6 | @chapter The Calendar and the Diary |
| @@ -19,11 +20,13 @@ calendar. The calendar uses its own buffer, whose major mode is | |||
| 19 | Calendar mode. | 20 | Calendar mode. |
| 20 | 21 | ||
| 21 | @kbd{Mouse-2} in the calendar brings up a menu of operations on a | 22 | @kbd{Mouse-2} in the calendar brings up a menu of operations on a |
| 22 | particular date; @kbd{C-Mouse-3} brings up a menu of commonly used | 23 | particular date; @kbd{Mouse-3} brings up a menu of commonly used |
| 23 | calendar features that are independent of any particular date. To exit | 24 | calendar features that are independent of any particular date. To exit |
| 24 | the calendar, type @kbd{q}. @xref{Calendar, Customizing the Calendar | 25 | the calendar, type @kbd{q}. |
| 25 | and Diary,, elisp, The Emacs Lisp Reference Manual}, for customization | 26 | |
| 26 | information about the calendar and diary. | 27 | The basic features of the Calendar/Diary are described here. |
| 28 | @inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information | ||
| 29 | about more specialized features. | ||
| 27 | 30 | ||
| 28 | @menu | 31 | @menu |
| 29 | * Calendar Motion:: Moving through the calendar; selecting a date. | 32 | * Calendar Motion:: Moving through the calendar; selecting a date. |
| @@ -423,24 +426,31 @@ List holidays in another window for a specified range of years. | |||
| 423 | 426 | ||
| 424 | @kindex h @r{(Calendar mode)} | 427 | @kindex h @r{(Calendar mode)} |
| 425 | @findex calendar-cursor-holidays | 428 | @findex calendar-cursor-holidays |
| 429 | @vindex view-calendar-holidays-initially | ||
| 426 | To see if any holidays fall on a given date, position point on that | 430 | To see if any holidays fall on a given date, position point on that |
| 427 | date in the calendar window and use the @kbd{h} command. Alternatively, | 431 | date in the calendar window and use the @kbd{h} command. Alternatively, |
| 428 | click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays} | 432 | click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays} |
| 429 | from the menu that appears. Either way, this displays the holidays for | 433 | from the menu that appears. Either way, this displays the holidays for |
| 430 | that date, in the echo area if they fit there, otherwise in a separate | 434 | that date, in the echo area if they fit there, otherwise in a separate |
| 431 | window. | 435 | window. If the variable @code{view-calendar-holidays-initially} is |
| 436 | non-@code{nil}, creating the calendar displays holidays in this way. | ||
| 432 | 437 | ||
| 433 | @kindex x @r{(Calendar mode)} | 438 | @kindex x @r{(Calendar mode)} |
| 434 | @findex mark-calendar-holidays | 439 | @findex mark-calendar-holidays |
| 435 | @kindex u @r{(Calendar mode)} | 440 | @kindex u @r{(Calendar mode)} |
| 436 | @findex calendar-unmark | 441 | @findex calendar-unmark |
| 442 | @vindex mark-holidays-in-calendar | ||
| 437 | To view the distribution of holidays for all the dates shown in the | 443 | To view the distribution of holidays for all the dates shown in the |
| 438 | calendar, use the @kbd{x} command. This displays the dates that are | 444 | calendar, use the @kbd{x} command. This displays the dates that are |
| 439 | holidays in a different face (or places a @samp{*} after these dates, if | 445 | holidays in a different face (or places a @samp{*} after these dates, if |
| 440 | display with multiple faces is not available). The command applies both | 446 | display with multiple faces is not available). @inforef{Calendar |
| 441 | to the currently visible months and to other months that subsequently | 447 | Customizing, calendar-holiday-marker, emacs-xtra}. The command applies |
| 442 | become visible by scrolling. To turn marking off and erase the current | 448 | both to the currently visible months and to other months that |
| 443 | marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). | 449 | subsequently become visible by scrolling. To turn marking off and erase |
| 450 | the current marks, type @kbd{u}, which also erases any diary marks | ||
| 451 | (@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is | ||
| 452 | non-@code{nil}, creating or updating the calendar marks holidays | ||
| 453 | automatically. | ||
| 444 | 454 | ||
| 445 | @kindex a @r{(Calendar mode)} | 455 | @kindex a @r{(Calendar mode)} |
| 446 | @findex list-calendar-holidays | 456 | @findex list-calendar-holidays |
| @@ -924,9 +934,9 @@ their dates. Then Emacs can automatically pick out and display the | |||
| 924 | events for today, for the immediate future, or for any specified | 934 | events for today, for the immediate future, or for any specified |
| 925 | date. | 935 | date. |
| 926 | 936 | ||
| 927 | By default, Emacs uses @file{~/diary} as the diary file. This is the | 937 | The name of the diary file is specified by the variable |
| 928 | same file that the @code{calendar} utility uses. A sample | 938 | @code{diary-file}; @file{~/diary} is the default. A sample diary file |
| 929 | @file{~/diary} file is: | 939 | is: |
| 930 | 940 | ||
| 931 | @example | 941 | @example |
| 932 | 12/22/1988 Twentieth wedding anniversary!! | 942 | 12/22/1988 Twentieth wedding anniversary!! |
| @@ -951,18 +961,18 @@ provides a number of commands to let you view, add, and change diary | |||
| 951 | entries. | 961 | entries. |
| 952 | 962 | ||
| 953 | @menu | 963 | @menu |
| 954 | * Diary Commands:: Viewing diary entries and associated calendar dates. | 964 | * Displaying the Diary:: Viewing diary entries and associated calendar dates. |
| 955 | * Format of Diary File:: Entering events in your diary. | 965 | * Format of Diary File:: Entering events in your diary. |
| 956 | * Date Formats:: Various ways you can specify dates. | 966 | * Date Formats:: Various ways you can specify dates. |
| 957 | * Adding to Diary:: Commands to create diary entries. | 967 | * Adding to Diary:: Commands to create diary entries. |
| 958 | * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. | 968 | * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. |
| 959 | @end menu | 969 | @end menu |
| 960 | 970 | ||
| 961 | @node Diary Commands | 971 | @node Displaying the Diary |
| 962 | @subsection Commands Displaying Diary Entries | 972 | @subsection Displaying the Diary |
| 963 | 973 | ||
| 964 | Once you have created a @file{~/diary} file, you can use the calendar | 974 | Once you have created a diary file, you can use the calendar to view |
| 965 | to view it. You can also view today's events outside of Calendar mode. | 975 | it. You can also view today's events outside of Calendar mode. |
| 966 | 976 | ||
| 967 | @table @kbd | 977 | @table @kbd |
| 968 | @item d | 978 | @item d |
| @@ -987,6 +997,7 @@ Mail yourself email reminders about upcoming diary entries. | |||
| 987 | 997 | ||
| 988 | @kindex d @r{(Calendar mode)} | 998 | @kindex d @r{(Calendar mode)} |
| 989 | @findex view-diary-entries | 999 | @findex view-diary-entries |
| 1000 | @vindex view-diary-entries-initially | ||
| 990 | Displaying the diary entries with @kbd{d} shows in a separate window | 1001 | Displaying the diary entries with @kbd{d} shows in a separate window |
| 991 | the diary entries for the selected date in the calendar. The mode line | 1002 | the diary entries for the selected date in the calendar. The mode line |
| 992 | of the new window shows the date of the diary entries and any holidays | 1003 | of the new window shows the date of the diary entries and any holidays |
| @@ -997,18 +1008,25 @@ following day. | |||
| 997 | 1008 | ||
| 998 | Another way to display the diary entries for a date is to click | 1009 | Another way to display the diary entries for a date is to click |
| 999 | @kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from | 1010 | @kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from |
| 1000 | the menu that appears. | 1011 | the menu that appears. If the variable |
| 1012 | @code{view-diary-entries-initially} is non-@code{nil}, creating the | ||
| 1013 | calendar also lists diary entries for the current date (provided the | ||
| 1014 | current date is visible). | ||
| 1001 | 1015 | ||
| 1002 | @kindex m @r{(Calendar mode)} | 1016 | @kindex m @r{(Calendar mode)} |
| 1003 | @findex mark-diary-entries | 1017 | @findex mark-diary-entries |
| 1018 | @vindex mark-diary-entries-in-calendar | ||
| 1004 | To get a broader view of which days are mentioned in the diary, use | 1019 | To get a broader view of which days are mentioned in the diary, use |
| 1005 | the @kbd{m} command. This displays the dates that have diary entries | 1020 | the @kbd{m} command. This displays the dates that have diary entries in |
| 1006 | in a different face (or places a @samp{+} after these dates, if | 1021 | a different face (or places a @samp{+} after these dates, if display |
| 1007 | display with multiple faces is not available). The command applies both | 1022 | with multiple faces is not available). @inforef{Calendar Customizing, |
| 1008 | to the currently visible months and to other months that subsequently | 1023 | diary-entry-marker, emacs-xtra}. The command applies both to the |
| 1009 | become visible by scrolling. To turn marking off and erase the current | 1024 | currently visible months and to other months that subsequently become |
| 1010 | marks, type @kbd{u}, which also turns off holiday marks | 1025 | visible by scrolling. To turn marking off and erase the current marks, |
| 1011 | (@pxref{Holidays}). | 1026 | type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). |
| 1027 | If the variable @code{mark-diary-entries-in-calendar} is | ||
| 1028 | non-@code{nil}, creating or updating the calendar marks diary dates | ||
| 1029 | automatically. | ||
| 1012 | 1030 | ||
| 1013 | @kindex s @r{(Calendar mode)} | 1031 | @kindex s @r{(Calendar mode)} |
| 1014 | @findex show-all-diary-entries | 1032 | @findex show-all-diary-entries |
| @@ -1016,21 +1034,18 @@ marks, type @kbd{u}, which also turns off holiday marks | |||
| 1016 | the @kbd{s} command. | 1034 | the @kbd{s} command. |
| 1017 | 1035 | ||
| 1018 | Display of selected diary entries uses the selective display feature | 1036 | Display of selected diary entries uses the selective display feature |
| 1019 | to hide entries that don't apply. | 1037 | to hide entries that don't apply. The diary buffer as you see it is |
| 1020 | 1038 | an illusion, so simply printing the buffer does not print what you see | |
| 1021 | The diary buffer as you see it is an illusion, so simply printing the | 1039 | on your screen. There is a special command to print hard copy of the |
| 1022 | buffer does not print what you see on your screen. There is a special | 1040 | diary buffer @emph{as it appears}; this command is @kbd{M-x |
| 1023 | command to print hard copy of the diary buffer @emph{as it appears}; | 1041 | print-diary-entries}. It sends the data directly to the printer. You |
| 1024 | this command is @kbd{M-x print-diary-entries}. It sends the data | 1042 | can customize it like @code{lpr-region} (@pxref{Hardcopy}). |
| 1025 | directly to the printer. You can customize it like @code{lpr-region} | ||
| 1026 | (@pxref{Hardcopy}). | ||
| 1027 | 1043 | ||
| 1028 | @findex diary | 1044 | @findex diary |
| 1029 | The command @kbd{M-x diary} displays the diary entries for the current | 1045 | The command @kbd{M-x diary} displays the diary entries for the current |
| 1030 | date, independently of the calendar display, and optionally for the next | 1046 | date, independently of the calendar display, and optionally for the next |
| 1031 | few days as well; the variable @code{number-of-diary-entries} specifies | 1047 | few days as well; the variable @code{number-of-diary-entries} specifies |
| 1032 | how many days to include. @xref{Calendar, Customizing the Calendar | 1048 | how many days to include. @inforef{Diary Customizing,, emacs-xtra}. |
| 1033 | and Diary,, elisp, The Emacs Lisp Reference Manual}. | ||
| 1034 | 1049 | ||
| 1035 | If you put @code{(diary)} in your @file{.emacs} file, this | 1050 | If you put @code{(diary)} in your @file{.emacs} file, this |
| 1036 | automatically displays a window with the day's diary entries, when you | 1051 | automatically displays a window with the day's diary entries, when you |
| @@ -1335,8 +1350,7 @@ entry applies to all months of the year.@refill | |||
| 1335 | specifying the name of a face or a single-character string to use when | 1350 | specifying the name of a face or a single-character string to use when |
| 1336 | marking the entry in the calendar. Most generally, sexp diary entries | 1351 | marking the entry in the calendar. Most generally, sexp diary entries |
| 1337 | can perform arbitrary computations to determine when they apply. | 1352 | can perform arbitrary computations to determine when they apply. |
| 1338 | @xref{Sexp Diary Entries,, Sexp Diary Entries, elisp, The Emacs Lisp | 1353 | @inforef{Sexp Diary Entries,, emacs-xtra}. |
| 1339 | Reference Manual}. | ||
| 1340 | 1354 | ||
| 1341 | @node Appointments | 1355 | @node Appointments |
| 1342 | @section Appointments | 1356 | @section Appointments |
| @@ -1344,16 +1358,30 @@ Reference Manual}. | |||
| 1344 | 1358 | ||
| 1345 | @vindex appt-display-format | 1359 | @vindex appt-display-format |
| 1346 | @vindex appt-audible | 1360 | @vindex appt-audible |
| 1361 | @vindex appt-display-mode-line | ||
| 1347 | If you have a diary entry for an appointment, and that diary entry | 1362 | If you have a diary entry for an appointment, and that diary entry |
| 1348 | begins with a recognizable time of day, Emacs can warn you several | 1363 | begins with a recognizable time of day, Emacs can warn you several |
| 1349 | minutes beforehand that that appointment is pending. Emacs alerts you | 1364 | minutes beforehand that that appointment is pending. Emacs alerts you |
| 1350 | to the appointment by displaying a message in your chosen format, as | 1365 | to the appointment by displaying a message in your chosen format, as |
| 1351 | specified by the variable @code{appt-display-format}. If the value | 1366 | specified by the variable @code{appt-display-format}. If the value of |
| 1352 | of @code{appt-audible} is non-@code{nil}, an audible reminder is also given. | 1367 | @code{appt-audible} is non-@code{nil}, an audible reminder is also |
| 1368 | given. In addition, if @code{appt-display-mode-line} is non-@code{nil}, | ||
| 1369 | Emacs displays the number of minutes to the appointment on the mode | ||
| 1370 | line. | ||
| 1371 | |||
| 1372 | @vindex appt-display-duration | ||
| 1373 | @vindex appt-disp-window-function | ||
| 1374 | @vindex appt-delete-window-function | ||
| 1375 | If @code{appt-display-format} has the value @code{window}, then the | ||
| 1376 | variable @code{appt-display-duration} controls how long the reminder | ||
| 1377 | window is visible for; and the variables | ||
| 1378 | @code{appt-disp-window-function} and @code{appt-delete-window-function} | ||
| 1379 | give the names of functions used to create and destroy the window, | ||
| 1380 | respectively. | ||
| 1353 | 1381 | ||
| 1354 | @findex appt-activate | 1382 | @findex appt-activate |
| 1355 | To enable appointment notification, call the function | 1383 | To enable appointment notification, call the function |
| 1356 | @code{appt-activate} with a positive argument. This sets up an | 1384 | @code{appt-activate} with a positive argument. This sets up an |
| 1357 | appointment list for today from the diary file, giving all diary entries | 1385 | appointment list for today from the diary file, giving all diary entries |
| 1358 | found with recognizable times of day, and reminds you just before each | 1386 | found with recognizable times of day, and reminds you just before each |
| 1359 | of them. Calling @code{appt-activate} with a negative argument disables | 1387 | of them. Calling @code{appt-activate} with a negative argument disables |
| @@ -1370,7 +1398,7 @@ Monday | |||
| 1370 | @vindex appt-message-warning-time | 1398 | @vindex appt-message-warning-time |
| 1371 | @noindent | 1399 | @noindent |
| 1372 | Then on Mondays, you will be reminded at around 9:20am about your coffee | 1400 | Then on Mondays, you will be reminded at around 9:20am about your coffee |
| 1373 | break and at around 11:50am about lunch. How many minutes in advance you | 1401 | break and at around 11:50am about lunch. How many minutes in advance you |
| 1374 | are first warned is determined by the value of | 1402 | are first warned is determined by the value of |
| 1375 | @code{appt-message-warning-time}. | 1403 | @code{appt-message-warning-time}. |
| 1376 | 1404 | ||
| @@ -1441,8 +1469,8 @@ and adds the results to an Emacs diary file. For example: | |||
| 1441 | 1469 | ||
| 1442 | @noindent | 1470 | @noindent |
| 1443 | You can use an @code{#include} directive to add the import file contents | 1471 | You can use an @code{#include} directive to add the import file contents |
| 1444 | to the main diary file, if these are distinct. @xref{Fancy Diary | 1472 | to the main diary file, if these are distinct. @inforef{Fancy Diary |
| 1445 | Display,,, elisp, The Emacs Lisp Reference Manual}. | 1473 | Display,, emacs-xtra}. |
| 1446 | 1474 | ||
| 1447 | @findex icalendar-export-file, icalendar-export-region | 1475 | @findex icalendar-export-file, icalendar-export-region |
| 1448 | Use @code{icalendar-export-file} to interactively export an entire | 1476 | Use @code{icalendar-export-file} to interactively export an entire |
diff --git a/man/cl.texi b/man/cl.texi index 455465a27a3..6c52a16b733 100644 --- a/man/cl.texi +++ b/man/cl.texi | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | @copying | 5 | @copying |
| 6 | This file documents the GNU Emacs Common Lisp emulation package. | 6 | This file documents the GNU Emacs Common Lisp emulation package. |
| 7 | 7 | ||
| 8 | Copyright (C) 1993, 2002 Free Software Foundation, Inc. | 8 | Copyright (C) 1993, 2002, 2005 Free Software Foundation, Inc. |
| 9 | 9 | ||
| 10 | @quotation | 10 | @quotation |
| 11 | Permission is granted to copy, distribute and/or modify this document | 11 | Permission is granted to copy, distribute and/or modify this document |
| @@ -991,7 +991,7 @@ just as with @code{setq}. @code{setf} returns the value of the last | |||
| 991 | @var{form}. | 991 | @var{form}. |
| 992 | 992 | ||
| 993 | The following Lisp forms will work as generalized variables, and | 993 | The following Lisp forms will work as generalized variables, and |
| 994 | so may legally appear in the @var{place} argument of @code{setf}: | 994 | so may appear in the @var{place} argument of @code{setf}: |
| 995 | 995 | ||
| 996 | @itemize @bullet | 996 | @itemize @bullet |
| 997 | @item | 997 | @item |
| @@ -1073,7 +1073,7 @@ x (point-max))} in this case). | |||
| 1073 | 1073 | ||
| 1074 | @item | 1074 | @item |
| 1075 | A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])}, | 1075 | A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])}, |
| 1076 | where @var{subplace} is itself a legal generalized variable whose | 1076 | where @var{subplace} is itself a valid generalized variable whose |
| 1077 | current value is a string, and where the value stored is also a | 1077 | current value is a string, and where the value stored is also a |
| 1078 | string. The new string is spliced into the specified part of the | 1078 | string. The new string is spliced into the specified part of the |
| 1079 | destination string. For example: | 1079 | destination string. For example: |
| @@ -2379,7 +2379,7 @@ that they are exclusive rather than inclusive limits: | |||
| 2379 | 2379 | ||
| 2380 | The @code{by} value is always positive, even for downward-counting | 2380 | The @code{by} value is always positive, even for downward-counting |
| 2381 | loops. Some sort of @code{from} value is required for downward | 2381 | loops. Some sort of @code{from} value is required for downward |
| 2382 | loops; @samp{for x downto 5} is not a legal loop clause all by | 2382 | loops; @samp{for x downto 5} is not a valid loop clause all by |
| 2383 | itself. | 2383 | itself. |
| 2384 | 2384 | ||
| 2385 | @item for @var{var} in @var{list} by @var{function} | 2385 | @item for @var{var} in @var{list} by @var{function} |
| @@ -2481,7 +2481,7 @@ are also recognized but are equivalent to @code{symbols} in Emacs Lisp. | |||
| 2481 | Due to a minor implementation restriction, it will not work to have | 2481 | Due to a minor implementation restriction, it will not work to have |
| 2482 | more than one @code{for} clause iterating over symbols, hash tables, | 2482 | more than one @code{for} clause iterating over symbols, hash tables, |
| 2483 | keymaps, overlays, or intervals in a given @code{loop}. Fortunately, | 2483 | keymaps, overlays, or intervals in a given @code{loop}. Fortunately, |
| 2484 | it would rarely if ever be useful to do so. It @emph{is} legal to mix | 2484 | it would rarely if ever be useful to do so. It @emph{is} valid to mix |
| 2485 | one of these types of clauses with other clauses like @code{for ... to} | 2485 | one of these types of clauses with other clauses like @code{for ... to} |
| 2486 | or @code{while}. | 2486 | or @code{while}. |
| 2487 | 2487 | ||
| @@ -2727,7 +2727,7 @@ not automatically imply a return value. The loop must use some | |||
| 2727 | explicit mechanism, such as @code{finally return}, to return | 2727 | explicit mechanism, such as @code{finally return}, to return |
| 2728 | the accumulated result. | 2728 | the accumulated result. |
| 2729 | 2729 | ||
| 2730 | It is legal for several accumulation clauses of the same type to | 2730 | It is valid for several accumulation clauses of the same type to |
| 2731 | accumulate into the same place. From Steele: | 2731 | accumulate into the same place. From Steele: |
| 2732 | 2732 | ||
| 2733 | @example | 2733 | @example |
| @@ -3248,8 +3248,8 @@ In particular, | |||
| 3248 | (get sym prop) @equiv{} (getf (symbol-plist sym) prop) | 3248 | (get sym prop) @equiv{} (getf (symbol-plist sym) prop) |
| 3249 | @end example | 3249 | @end example |
| 3250 | 3250 | ||
| 3251 | It is legal to use @code{getf} as a @code{setf} place, in which case | 3251 | It is valid to use @code{getf} as a @code{setf} place, in which case |
| 3252 | its @var{place} argument must itself be a legal @code{setf} place. | 3252 | its @var{place} argument must itself be a valid @code{setf} place. |
| 3253 | The @var{default} argument, if any, is ignored in this context. | 3253 | The @var{default} argument, if any, is ignored in this context. |
| 3254 | The effect is to change (via @code{setcar}) the value cell in the | 3254 | The effect is to change (via @code{setcar}) the value cell in the |
| 3255 | list that corresponds to @var{property}, or to cons a new property-value | 3255 | list that corresponds to @var{property}, or to cons a new property-value |
| @@ -3535,7 +3535,7 @@ be an integer in which case the new object is seeded from that | |||
| 3535 | integer; each different integer seed will result in a completely | 3535 | integer; each different integer seed will result in a completely |
| 3536 | different sequence of random numbers. | 3536 | different sequence of random numbers. |
| 3537 | 3537 | ||
| 3538 | It is legal to print a @code{random-state} object to a buffer or | 3538 | It is valid to print a @code{random-state} object to a buffer or |
| 3539 | file and later read it back with @code{read}. If a program wishes | 3539 | file and later read it back with @code{read}. If a program wishes |
| 3540 | to use a sequence of pseudo-random numbers which can be reproduced | 3540 | to use a sequence of pseudo-random numbers which can be reproduced |
| 3541 | later for debugging, it can call @code{(make-random-state t)} to | 3541 | later for debugging, it can call @code{(make-random-state t)} to |
| @@ -4575,7 +4575,7 @@ initialized from the corresponding argument. Slots whose names | |||
| 4575 | do not appear in the argument list are initialized based on the | 4575 | do not appear in the argument list are initialized based on the |
| 4576 | @var{default-value} in their slot descriptor. Also, @code{&optional} | 4576 | @var{default-value} in their slot descriptor. Also, @code{&optional} |
| 4577 | and @code{&key} arguments which don't specify defaults take their | 4577 | and @code{&key} arguments which don't specify defaults take their |
| 4578 | defaults from the slot descriptor. It is legal to include arguments | 4578 | defaults from the slot descriptor. It is valid to include arguments |
| 4579 | which don't correspond to slot names; these are useful if they are | 4579 | which don't correspond to slot names; these are useful if they are |
| 4580 | referred to in the defaults for optional, keyword, or @code{&aux} | 4580 | referred to in the defaults for optional, keyword, or @code{&aux} |
| 4581 | arguments which @emph{do} correspond to slots. | 4581 | arguments which @emph{do} correspond to slots. |
diff --git a/man/commands.texi b/man/commands.texi index fe70983286f..e0208473419 100644 --- a/man/commands.texi +++ b/man/commands.texi | |||
| @@ -169,8 +169,8 @@ key sequences, not one.@refill | |||
| 169 | 169 | ||
| 170 | All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h}, | 170 | All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h}, |
| 171 | @kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x | 171 | @kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x |
| 172 | n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x | 172 | n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x 6}, |
| 173 | 6}, @key{ESC}, and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for | 173 | @key{ESC}, @kbd{M-o} and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for |
| 174 | @kbd{C-h} and @kbd{C-x 6}.) But this list is not cast in concrete; it | 174 | @kbd{C-h} and @kbd{C-x 6}.) But this list is not cast in concrete; it |
| 175 | is just a matter of Emacs's standard key bindings. If you customize | 175 | is just a matter of Emacs's standard key bindings. If you customize |
| 176 | Emacs, you can make new prefix keys, or eliminate these. @xref{Key | 176 | Emacs, you can make new prefix keys, or eliminate these. @xref{Key |
diff --git a/man/custom.texi b/man/custom.texi index 6c5c26b3451..30bac3bccf2 100644 --- a/man/custom.texi +++ b/man/custom.texi | |||
| @@ -1636,6 +1636,27 @@ word: | |||
| 1636 | (global-set-key [H-M-right] 'forward-word) | 1636 | (global-set-key [H-M-right] 'forward-word) |
| 1637 | @end example | 1637 | @end example |
| 1638 | 1638 | ||
| 1639 | @cindex keypad | ||
| 1640 | Many keyboards have a ``numeric keypad'' on the right hand side. | ||
| 1641 | The numeric keys in the keypad double up as cursor motion keys, | ||
| 1642 | toggled by a key labelled @samp{Num Lock}. By default, Emacs | ||
| 1643 | translates these keys to the corresponding keys in the main keyboard | ||
| 1644 | (@pxref{Keyboard Translations}). For example, when @samp{Num Lock} is | ||
| 1645 | on, the key labelled @samp{8} on the numeric keypad produces | ||
| 1646 | @code{kp-8}, which is translated to @kbd{8}; when @samp{Num Lock} is | ||
| 1647 | off, the same key produces @code{kp-up}, which is translated to | ||
| 1648 | @key{UP}. If you rebind a key such as @kbd{8} or @key{UP}, it affects | ||
| 1649 | the equivalent keypad key too. However, if you rebind a @samp{kp-} | ||
| 1650 | key directly, that won't affect its non-keypad equivalent. | ||
| 1651 | |||
| 1652 | Emacs provides a convenient method for binding the numeric keypad | ||
| 1653 | keys, using the variables @code{keypad-setup}, | ||
| 1654 | @code{keypad-numlock-setup}, @code{keypad-shifted-setup}, and | ||
| 1655 | @code{keypad-numlock-shifted-setup}. These can be found in the | ||
| 1656 | @samp{keyboard} customization group (@pxref{Easy Customization}). You | ||
| 1657 | can rebind the keys to perform other tasks, such as issuing numeric | ||
| 1658 | prefix arguments. | ||
| 1659 | |||
| 1639 | @node Named ASCII Chars | 1660 | @node Named ASCII Chars |
| 1640 | @subsection Named @acronym{ASCII} Control Characters | 1661 | @subsection Named @acronym{ASCII} Control Characters |
| 1641 | 1662 | ||
diff --git a/man/dired-x.texi b/man/dired-x.texi index d51fda342df..208d07ce170 100644 --- a/man/dired-x.texi +++ b/man/dired-x.texi | |||
| @@ -1004,10 +1004,11 @@ Alist of major modes and their notion of @code{default-directory}, as a | |||
| 1004 | Lisp expression to evaluate. A resulting value of @code{nil} is ignored | 1004 | Lisp expression to evaluate. A resulting value of @code{nil} is ignored |
| 1005 | in favor of @code{default-directory}. | 1005 | in favor of @code{default-directory}. |
| 1006 | 1006 | ||
| 1007 | @item default-directory | 1007 | @item dired-default-directory |
| 1008 | @findex default-directory | 1008 | @findex dired-default-directory |
| 1009 | Function with usage like variable @code{default-directory}, but knows about the | 1009 | Use this function like you would use the variable |
| 1010 | special cases in variable @code{default-directory-alist}. | 1010 | @code{default-directory}, except that @code{dired-default-directory} |
| 1011 | also consults the variable @code{default-directory-alist}. | ||
| 1011 | @end table | 1012 | @end table |
| 1012 | 1013 | ||
| 1013 | @node Find File At Point, Miscellaneous Commands, Multiple Dired Directories, Top | 1014 | @node Find File At Point, Miscellaneous Commands, Multiple Dired Directories, Top |
diff --git a/man/dired.texi b/man/dired.texi index 6973a4e4000..b50ac82ab0b 100644 --- a/man/dired.texi +++ b/man/dired.texi | |||
| @@ -39,6 +39,7 @@ files. | |||
| 39 | * Hiding Subdirectories:: Making subdirectories visible or invisible. | 39 | * Hiding Subdirectories:: Making subdirectories visible or invisible. |
| 40 | * Updating: Dired Updating. Discarding lines for files of no interest. | 40 | * Updating: Dired Updating. Discarding lines for files of no interest. |
| 41 | * Find: Dired and Find. Using `find' to choose the files for Dired. | 41 | * Find: Dired and Find. Using `find' to choose the files for Dired. |
| 42 | * Wdired:: Operating on files by editing the Dired buffer. | ||
| 42 | * Misc: Misc Dired Features. Various other features. | 43 | * Misc: Misc Dired Features. Various other features. |
| 43 | @end menu | 44 | @end menu |
| 44 | 45 | ||
| @@ -1103,6 +1104,39 @@ operations work, but do not always automatically update the buffer. | |||
| 1103 | Reverting the buffer with @kbd{g} deletes all inserted subdirectories, | 1104 | Reverting the buffer with @kbd{g} deletes all inserted subdirectories, |
| 1104 | and erases all flags and marks. | 1105 | and erases all flags and marks. |
| 1105 | 1106 | ||
| 1107 | @node Wdired | ||
| 1108 | @section Editing the Dired Buffer | ||
| 1109 | |||
| 1110 | @cindex wdired mode | ||
| 1111 | @findex wdired-change-to-wdired-mode | ||
| 1112 | Wdired is a special mode that allows you to perform file operations | ||
| 1113 | by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands | ||
| 1114 | for ``writable''.) To enter Wdired mode, type @kbd{M-x | ||
| 1115 | wdired-change-to-wdired-mode} while in a Dired buffer. Alternatively, | ||
| 1116 | use @samp{Edit File Names} in the @samp{Immediate} menu bar menu. | ||
| 1117 | |||
| 1118 | @findex wdired-finish-edit | ||
| 1119 | While in Wdired mode, you can rename files by editing the file names | ||
| 1120 | displayed in the Dired buffer. All the ordinary Emacs editing | ||
| 1121 | commands, including rectangle operations and @code{query-replace}, are | ||
| 1122 | available for this. Once you are done editing, type @kbd{C-c C-c} | ||
| 1123 | (@code{wdired-finish-edit}). This applies your changes and switches | ||
| 1124 | back to ordinary Dired mode. | ||
| 1125 | |||
| 1126 | Apart from simply renaming files, you can move a file to another | ||
| 1127 | directory by typing in the new file name (either absolute or | ||
| 1128 | relative). To mark a file for deletion, delete the entire filename. | ||
| 1129 | To change the target of a symbolic link, just edit the target name | ||
| 1130 | displayed next to the link name. | ||
| 1131 | |||
| 1132 | The rest of the text in the buffer, such as the file sizes and | ||
| 1133 | modification dates, is marked read-only, so you can't edit it. | ||
| 1134 | However, if you set @code{wdired-allow-to-change-permissions} to | ||
| 1135 | @code{t}, the file permission bits can also be edited. For example, | ||
| 1136 | you can change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file | ||
| 1137 | world-writable. These changes also take effect when you type @kbd{C-c | ||
| 1138 | C-c}. | ||
| 1139 | |||
| 1106 | @node Misc Dired Features | 1140 | @node Misc Dired Features |
| 1107 | @section Other Dired Features | 1141 | @section Other Dired Features |
| 1108 | 1142 | ||
diff --git a/man/display.texi b/man/display.texi index ff939e00cdb..01b0291e5e8 100644 --- a/man/display.texi +++ b/man/display.texi | |||
| @@ -913,6 +913,17 @@ they are displayed using their graphics (assuming your terminal supports | |||
| 913 | them), otherwise as escape sequences. @xref{Single-Byte Character | 913 | them), otherwise as escape sequences. @xref{Single-Byte Character |
| 914 | Support}. | 914 | Support}. |
| 915 | 915 | ||
| 916 | @vindex show-nonbreak-escape | ||
| 917 | @cindex no-break space, display | ||
| 918 | @cindex no-break hyphen, display | ||
| 919 | Some character sets define ``no-break'' versions of the space | ||
| 920 | and hyphen characters, which are used where a line should not be | ||
| 921 | broken. Emacs displays these with an escape character in order to | ||
| 922 | distinguish them from ordinary spaces and hyphens. For example, a | ||
| 923 | non-breaking space is displayed as @samp{\ }. You can turn off this | ||
| 924 | behavior by setting the variable @code{show-nonbreak-escape} to | ||
| 925 | @code{nil}. | ||
| 926 | |||
| 916 | @node Cursor Display | 927 | @node Cursor Display |
| 917 | @section Displaying the Cursor | 928 | @section Displaying the Cursor |
| 918 | 929 | ||
diff --git a/man/emacs-mime.texi b/man/emacs-mime.texi index c128ed096c3..11a07df5361 100644 --- a/man/emacs-mime.texi +++ b/man/emacs-mime.texi | |||
| @@ -387,15 +387,15 @@ The program used to start an external terminal. | |||
| 387 | 387 | ||
| 388 | @item mm-enable-external | 388 | @item mm-enable-external |
| 389 | @vindex mm-enable-external | 389 | @vindex mm-enable-external |
| 390 | Indicate whether external MIME handlers should be used. | 390 | Indicate whether external @acronym{MIME} handlers should be used. |
| 391 | 391 | ||
| 392 | If @code{t}, all defined external MIME handlers are used. If | 392 | If @code{t}, all defined external @acronym{MIME} handlers are used. If |
| 393 | @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}). | 393 | @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}). |
| 394 | If it is the symbol @code{ask}, you are prompted before the external | 394 | If it is the symbol @code{ask}, you are prompted before the external |
| 395 | @acronym{MIME} handler is invoked. | 395 | @acronym{MIME} handler is invoked. |
| 396 | 396 | ||
| 397 | When you launch an attachment through mailcap (@pxref{mailcap}) an | 397 | When you launch an attachment through mailcap (@pxref{mailcap}) an |
| 398 | attempt is made to use a safe viewer with the safest options--this isn't | 398 | attempt is made to use a safe viewer with the safest options---this isn't |
| 399 | the case if you save it to disk and launch it in a different way | 399 | the case if you save it to disk and launch it in a different way |
| 400 | (command line or double-clicking). Anyhow, if you want to be sure not | 400 | (command line or double-clicking). Anyhow, if you want to be sure not |
| 401 | to launch any external programs, set this variable to @code{nil} or | 401 | to launch any external programs, set this variable to @code{nil} or |
| @@ -1327,8 +1327,8 @@ RFC2047 specifies two forms of encoding---@code{Q} (a | |||
| 1327 | Quoted-Printable-like encoding) and @code{B} (base64). This alist | 1327 | Quoted-Printable-like encoding) and @code{B} (base64). This alist |
| 1328 | specifies which charset should use which encoding. | 1328 | specifies which charset should use which encoding. |
| 1329 | 1329 | ||
| 1330 | @item rfc2047-encoding-function-alist | 1330 | @item rfc2047-encode-function-alist |
| 1331 | @vindex rfc2047-encoding-function-alist | 1331 | @vindex rfc2047-encode-function-alist |
| 1332 | This is an alist of encoding / function pairs. The encodings are | 1332 | This is an alist of encoding / function pairs. The encodings are |
| 1333 | @code{Q}, @code{B} and @code{nil}. | 1333 | @code{Q}, @code{B} and @code{nil}. |
| 1334 | 1334 | ||
| @@ -1336,6 +1336,11 @@ This is an alist of encoding / function pairs. The encodings are | |||
| 1336 | @vindex rfc2047-encoded-word-regexp | 1336 | @vindex rfc2047-encoded-word-regexp |
| 1337 | When decoding words, this library looks for matches to this regexp. | 1337 | When decoding words, this library looks for matches to this regexp. |
| 1338 | 1338 | ||
| 1339 | @item rfc2047-encode-encoded-words | ||
| 1340 | @vindex rfc2047-encode-encoded-words | ||
| 1341 | The boolean variable specifies whether encoded words | ||
| 1342 | (e.g. @samp{=?hello?=}) should be encoded again. | ||
| 1343 | |||
| 1339 | @end table | 1344 | @end table |
| 1340 | 1345 | ||
| 1341 | Those were the variables, and these are this functions: | 1346 | Those were the variables, and these are this functions: |
| @@ -1366,6 +1371,24 @@ Decode the encoded words in the region. | |||
| 1366 | @findex rfc2047-decode-string | 1371 | @findex rfc2047-decode-string |
| 1367 | Decode a string and return the results. | 1372 | Decode a string and return the results. |
| 1368 | 1373 | ||
| 1374 | @item rfc2047-encode-parameter | ||
| 1375 | @findex rfc2047-encode-parameter | ||
| 1376 | Encode a parameter in the RFC2047-like style. This is a replacement for | ||
| 1377 | the @code{rfc2231-encode-string} function. @xref{rfc2231}. | ||
| 1378 | |||
| 1379 | When attaching files as @acronym{MIME} parts, we should use the RFC2231 | ||
| 1380 | encoding to specify the file names containing non-@acronym{ASCII} | ||
| 1381 | characters. However, many mail softwares don't support it in practice | ||
| 1382 | and recipients won't be able to extract files with correct names. | ||
| 1383 | Instead, the RFC2047-like encoding is acceptable generally. This | ||
| 1384 | function provides the very RFC2047-like encoding, resigning to such a | ||
| 1385 | regrettable trend. To use it, put the following line in your | ||
| 1386 | @file{~/.gnus.el} file: | ||
| 1387 | |||
| 1388 | @lisp | ||
| 1389 | (defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) | ||
| 1390 | @end lisp | ||
| 1391 | |||
| 1369 | @end table | 1392 | @end table |
| 1370 | 1393 | ||
| 1371 | 1394 | ||
diff --git a/man/emacs-xtra.texi b/man/emacs-xtra.texi index a1ccf101bd6..94a37c2ec5e 100644 --- a/man/emacs-xtra.texi +++ b/man/emacs-xtra.texi | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | @copying | 10 | @copying |
| 11 | This manual describes specialized features of Emacs. | 11 | This manual describes specialized features of Emacs. |
| 12 | 12 | ||
| 13 | Copyright (C) 2004 | 13 | Copyright (C) 2004, 2005 |
| 14 | Free Software Foundation, Inc. | 14 | Free Software Foundation, Inc. |
| 15 | 15 | ||
| 16 | @quotation | 16 | @quotation |
| @@ -59,6 +59,7 @@ license to the document, as described in section 6 of the license. | |||
| 59 | * Introduction:: What documentation belongs here? | 59 | * Introduction:: What documentation belongs here? |
| 60 | * Autorevert:: Auto Reverting non-file buffers. | 60 | * Autorevert:: Auto Reverting non-file buffers. |
| 61 | * Subdir switches:: Subdirectory switches in Dired. | 61 | * Subdir switches:: Subdirectory switches in Dired. |
| 62 | * Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. | ||
| 62 | * Index:: | 63 | * Index:: |
| 63 | @end menu | 64 | @end menu |
| 64 | 65 | ||
| @@ -307,6 +308,922 @@ You can make Dired forget about all subdirectory switches and relist | |||
| 307 | all subdirectories with the buffer's default switches using | 308 | all subdirectories with the buffer's default switches using |
| 308 | @kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. | 309 | @kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. |
| 309 | 310 | ||
| 311 | |||
| 312 | @c Moved here from the Emacs Lisp Reference Manual, 2005-03-26. | ||
| 313 | @node Advanced Calendar/Diary Usage | ||
| 314 | @chapter Customizing the Calendar and Diary | ||
| 315 | |||
| 316 | There are many customizations that you can use to make the calendar and | ||
| 317 | diary suit your personal tastes. | ||
| 318 | |||
| 319 | @menu | ||
| 320 | * Calendar Customizing:: Defaults you can set. | ||
| 321 | * Holiday Customizing:: Defining your own holidays. | ||
| 322 | * Date Display Format:: Changing the format. | ||
| 323 | * Time Display Format:: Changing the format. | ||
| 324 | * Daylight Savings:: Changing the default. | ||
| 325 | * Diary Customizing:: Defaults you can set. | ||
| 326 | * Hebrew/Islamic Entries:: How to obtain them. | ||
| 327 | * Fancy Diary Display:: Enhancing the diary display, sorting entries, | ||
| 328 | using included diary files. | ||
| 329 | * Sexp Diary Entries:: Fancy things you can do. | ||
| 330 | @end menu | ||
| 331 | |||
| 332 | @node Calendar Customizing | ||
| 333 | @section Customizing the Calendar | ||
| 334 | @vindex calendar-holiday-marker | ||
| 335 | @vindex diary-entry-marker | ||
| 336 | The variable @code{calendar-holiday-marker} specifies how to mark a | ||
| 337 | date as being a holiday. Its value may be a single-character string | ||
| 338 | to insert next to the date, or a face name to use for displaying the | ||
| 339 | date. Likewise, the variable @code{diary-entry-marker} specifies how | ||
| 340 | to mark a date that has diary entries. The calendar creates faces | ||
| 341 | named @code{holiday-face} and @code{diary-face} for these purposes; | ||
| 342 | those symbols are the default values of these variables. | ||
| 343 | |||
| 344 | @vindex calendar-load-hook | ||
| 345 | The variable @code{calendar-load-hook} is a normal hook run when the | ||
| 346 | calendar package is first loaded (before actually starting to display | ||
| 347 | the calendar). | ||
| 348 | |||
| 349 | @vindex initial-calendar-window-hook | ||
| 350 | Starting the calendar runs the normal hook | ||
| 351 | @code{initial-calendar-window-hook}. Recomputation of the calendar | ||
| 352 | display does not run this hook. But if you leave the calendar with the | ||
| 353 | @kbd{q} command and reenter it, the hook runs again.@refill | ||
| 354 | |||
| 355 | @vindex today-visible-calendar-hook | ||
| 356 | The variable @code{today-visible-calendar-hook} is a normal hook run | ||
| 357 | after the calendar buffer has been prepared with the calendar when the | ||
| 358 | current date is visible in the window. One use of this hook is to | ||
| 359 | replace today's date with asterisks; to do that, use the hook function | ||
| 360 | @code{calendar-star-date}. | ||
| 361 | |||
| 362 | @findex calendar-star-date | ||
| 363 | @example | ||
| 364 | (add-hook 'today-visible-calendar-hook 'calendar-star-date) | ||
| 365 | @end example | ||
| 366 | |||
| 367 | @noindent | ||
| 368 | Another standard hook function marks the current date, either by | ||
| 369 | changing its face or by adding an asterisk. Here's how to use it: | ||
| 370 | |||
| 371 | @findex calendar-mark-today | ||
| 372 | @example | ||
| 373 | (add-hook 'today-visible-calendar-hook 'calendar-mark-today) | ||
| 374 | @end example | ||
| 375 | |||
| 376 | @noindent | ||
| 377 | @vindex calendar-today-marker | ||
| 378 | The variable @code{calendar-today-marker} specifies how to mark | ||
| 379 | today's date. Its value should be a single-character string to insert | ||
| 380 | next to the date or a face name to use for displaying the date. A | ||
| 381 | face named @code{calendar-today-face} is provided for this purpose; | ||
| 382 | that symbol is the default for this variable. | ||
| 383 | |||
| 384 | @vindex today-invisible-calendar-hook | ||
| 385 | @noindent | ||
| 386 | A similar normal hook, @code{today-invisible-calendar-hook} is run if | ||
| 387 | the current date is @emph{not} visible in the window. | ||
| 388 | |||
| 389 | @vindex calendar-move-hook | ||
| 390 | Each of the calendar cursor motion commands runs the hook | ||
| 391 | @code{calendar-move-hook} after it moves the cursor. | ||
| 392 | |||
| 393 | @node Holiday Customizing | ||
| 394 | @section Customizing the Holidays | ||
| 395 | |||
| 396 | @vindex calendar-holidays | ||
| 397 | @vindex christian-holidays | ||
| 398 | @vindex hebrew-holidays | ||
| 399 | @vindex islamic-holidays | ||
| 400 | Emacs knows about holidays defined by entries on one of several lists. | ||
| 401 | You can customize these lists of holidays to your own needs, adding or | ||
| 402 | deleting holidays. The lists of holidays that Emacs uses are for | ||
| 403 | general holidays (@code{general-holidays}), local holidays | ||
| 404 | (@code{local-holidays}), Christian holidays (@code{christian-holidays}), | ||
| 405 | Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim) | ||
| 406 | holidays (@code{islamic-holidays}), and other holidays | ||
| 407 | (@code{other-holidays}). | ||
| 408 | |||
| 409 | @vindex general-holidays | ||
| 410 | The general holidays are, by default, holidays common throughout the | ||
| 411 | United States. To eliminate these holidays, set @code{general-holidays} | ||
| 412 | to @code{nil}. | ||
| 413 | |||
| 414 | @vindex local-holidays | ||
| 415 | There are no default local holidays (but sites may supply some). You | ||
| 416 | can set the variable @code{local-holidays} to any list of holidays, as | ||
| 417 | described below. | ||
| 418 | |||
| 419 | @vindex all-christian-calendar-holidays | ||
| 420 | @vindex all-hebrew-calendar-holidays | ||
| 421 | @vindex all-islamic-calendar-holidays | ||
| 422 | By default, Emacs does not include all the holidays of the religions | ||
| 423 | that it knows, only those commonly found in secular calendars. For a | ||
| 424 | more extensive collection of religious holidays, you can set any (or | ||
| 425 | all) of the variables @code{all-christian-calendar-holidays}, | ||
| 426 | @code{all-hebrew-calendar-holidays}, or | ||
| 427 | @code{all-islamic-calendar-holidays} to @code{t}. If you want to | ||
| 428 | eliminate the religious holidays, set any or all of the corresponding | ||
| 429 | variables @code{christian-holidays}, @code{hebrew-holidays}, and | ||
| 430 | @code{islamic-holidays} to @code{nil}.@refill | ||
| 431 | |||
| 432 | @vindex other-holidays | ||
| 433 | You can set the variable @code{other-holidays} to any list of | ||
| 434 | holidays. This list, normally empty, is intended for individual use. | ||
| 435 | |||
| 436 | @cindex holiday forms | ||
| 437 | Each of the lists (@code{general-holidays}, @code{local-holidays}, | ||
| 438 | @code{christian-holidays}, @code{hebrew-holidays}, | ||
| 439 | @code{islamic-holidays}, and @code{other-holidays}) is a list of | ||
| 440 | @dfn{holiday forms}, each holiday form describing a holiday (or | ||
| 441 | sometimes a list of holidays). | ||
| 442 | |||
| 443 | Here is a table of the possible kinds of holiday form. Day numbers | ||
| 444 | and month numbers count starting from 1, but ``dayname'' numbers | ||
| 445 | count Sunday as 0. The element @var{string} is always the | ||
| 446 | name of the holiday, as a string. | ||
| 447 | |||
| 448 | @table @code | ||
| 449 | @item (holiday-fixed @var{month} @var{day} @var{string}) | ||
| 450 | A fixed date on the Gregorian calendar. | ||
| 451 | |||
| 452 | @item (holiday-float @var{month} @var{dayname} @var{k} @var{string}) | ||
| 453 | The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar | ||
| 454 | (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back | ||
| 455 | from the end of the month. | ||
| 456 | |||
| 457 | @item (holiday-hebrew @var{month} @var{day} @var{string}) | ||
| 458 | A fixed date on the Hebrew calendar. | ||
| 459 | |||
| 460 | @item (holiday-islamic @var{month} @var{day} @var{string}) | ||
| 461 | A fixed date on the Islamic calendar. | ||
| 462 | |||
| 463 | @item (holiday-julian @var{month} @var{day} @var{string}) | ||
| 464 | A fixed date on the Julian calendar. | ||
| 465 | |||
| 466 | @item (holiday-sexp @var{sexp} @var{string}) | ||
| 467 | A date calculated by the Lisp expression @var{sexp}. The expression | ||
| 468 | should use the variable @code{year} to compute and return the date of a | ||
| 469 | holiday, or @code{nil} if the holiday doesn't happen this year. The | ||
| 470 | value of @var{sexp} must represent the date as a list of the form | ||
| 471 | @code{(@var{month} @var{day} @var{year})}. | ||
| 472 | |||
| 473 | @item (if @var{condition} @var{holiday-form}) | ||
| 474 | A holiday that happens only if @var{condition} is true. | ||
| 475 | |||
| 476 | @item (@var{function} @r{[}@var{args}@r{]}) | ||
| 477 | A list of dates calculated by the function @var{function}, called with | ||
| 478 | arguments @var{args}. | ||
| 479 | @end table | ||
| 480 | |||
| 481 | For example, suppose you want to add Bastille Day, celebrated in | ||
| 482 | France on July 14. You can do this as follows: | ||
| 483 | |||
| 484 | @smallexample | ||
| 485 | (setq other-holidays '((holiday-fixed 7 14 "Bastille Day"))) | ||
| 486 | @end smallexample | ||
| 487 | |||
| 488 | @noindent | ||
| 489 | The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the | ||
| 490 | fourteenth day of the seventh month (July). | ||
| 491 | |||
| 492 | Many holidays occur on a specific day of the week, at a specific time | ||
| 493 | of month. Here is a holiday form describing Hurricane Supplication Day, | ||
| 494 | celebrated in the Virgin Islands on the fourth Monday in August: | ||
| 495 | |||
| 496 | @smallexample | ||
| 497 | (holiday-float 8 1 4 "Hurricane Supplication Day") | ||
| 498 | @end smallexample | ||
| 499 | |||
| 500 | @noindent | ||
| 501 | Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, | ||
| 502 | Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in | ||
| 503 | the month (1 specifies the first occurrence, 2 the second occurrence, | ||
| 504 | @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and | ||
| 505 | so on). | ||
| 506 | |||
| 507 | You can specify holidays that occur on fixed days of the Hebrew, | ||
| 508 | Islamic, and Julian calendars too. For example, | ||
| 509 | |||
| 510 | @smallexample | ||
| 511 | (setq other-holidays | ||
| 512 | '((holiday-hebrew 10 2 "Last day of Hanukkah") | ||
| 513 | (holiday-islamic 3 12 "Mohammed's Birthday") | ||
| 514 | (holiday-julian 4 2 "Jefferson's Birthday"))) | ||
| 515 | @end smallexample | ||
| 516 | |||
| 517 | @noindent | ||
| 518 | adds the last day of Hanukkah (since the Hebrew months are numbered with | ||
| 519 | 1 starting from Nisan), the Islamic feast celebrating Mohammed's | ||
| 520 | birthday (since the Islamic months are numbered from 1 starting with | ||
| 521 | Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the | ||
| 522 | Julian calendar. | ||
| 523 | |||
| 524 | To include a holiday conditionally, use either Emacs Lisp's @code{if} or the | ||
| 525 | @code{holiday-sexp} form. For example, American presidential elections | ||
| 526 | occur on the first Tuesday after the first Monday in November of years | ||
| 527 | divisible by 4: | ||
| 528 | |||
| 529 | @smallexample | ||
| 530 | (holiday-sexp '(if (= 0 (% year 4)) | ||
| 531 | (calendar-gregorian-from-absolute | ||
| 532 | (1+ (calendar-dayname-on-or-before | ||
| 533 | 1 (+ 6 (calendar-absolute-from-gregorian | ||
| 534 | (list 11 1 year))))))) | ||
| 535 | "US Presidential Election") | ||
| 536 | @end smallexample | ||
| 537 | |||
| 538 | @noindent | ||
| 539 | or | ||
| 540 | |||
| 541 | @smallexample | ||
| 542 | (if (= 0 (% displayed-year 4)) | ||
| 543 | (fixed 11 | ||
| 544 | (extract-calendar-day | ||
| 545 | (calendar-gregorian-from-absolute | ||
| 546 | (1+ (calendar-dayname-on-or-before | ||
| 547 | 1 (+ 6 (calendar-absolute-from-gregorian | ||
| 548 | (list 11 1 displayed-year))))))) | ||
| 549 | "US Presidential Election")) | ||
| 550 | @end smallexample | ||
| 551 | |||
| 552 | Some holidays just don't fit into any of these forms because special | ||
| 553 | calculations are involved in their determination. In such cases you | ||
| 554 | must write a Lisp function to do the calculation. To include eclipses, | ||
| 555 | for example, add @code{(eclipses)} to @code{other-holidays} | ||
| 556 | and write an Emacs Lisp function @code{eclipses} that returns a | ||
| 557 | (possibly empty) list of the relevant Gregorian dates among the range | ||
| 558 | visible in the calendar window, with descriptive strings, like this: | ||
| 559 | |||
| 560 | @smallexample | ||
| 561 | (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) | ||
| 562 | @end smallexample | ||
| 563 | |||
| 564 | @node Date Display Format | ||
| 565 | @section Date Display Format | ||
| 566 | @vindex calendar-date-display-form | ||
| 567 | |||
| 568 | You can customize the manner of displaying dates in the diary, in mode | ||
| 569 | lines, and in messages by setting @code{calendar-date-display-form}. | ||
| 570 | This variable holds a list of expressions that can involve the variables | ||
| 571 | @code{month}, @code{day}, and @code{year}, which are all numbers in | ||
| 572 | string form, and @code{monthname} and @code{dayname}, which are both | ||
| 573 | alphabetic strings. In the American style, the default value of this | ||
| 574 | list is as follows: | ||
| 575 | |||
| 576 | @smallexample | ||
| 577 | ((if dayname (concat dayname ", ")) monthname " " day ", " year) | ||
| 578 | @end smallexample | ||
| 579 | |||
| 580 | @noindent | ||
| 581 | while in the European style this value is the default: | ||
| 582 | |||
| 583 | @smallexample | ||
| 584 | ((if dayname (concat dayname ", ")) day " " monthname " " year) | ||
| 585 | @end smallexample | ||
| 586 | |||
| 587 | @noindent | ||
| 588 | The ISO standard date representation is this: | ||
| 589 | |||
| 590 | @smallexample | ||
| 591 | (year "-" month "-" day) | ||
| 592 | @end smallexample | ||
| 593 | |||
| 594 | @noindent | ||
| 595 | This specifies a typical American format: | ||
| 596 | |||
| 597 | @smallexample | ||
| 598 | (month "/" day "/" (substring year -2)) | ||
| 599 | @end smallexample | ||
| 600 | |||
| 601 | @node Time Display Format | ||
| 602 | @section Time Display Format | ||
| 603 | @vindex calendar-time-display-form | ||
| 604 | |||
| 605 | The calendar and diary by default display times of day in the | ||
| 606 | conventional American style with the hours from 1 through 12, minutes, | ||
| 607 | and either @samp{am} or @samp{pm}. If you prefer the European style, | ||
| 608 | also known in the US as military, in which the hours go from 00 to 23, | ||
| 609 | you can alter the variable @code{calendar-time-display-form}. This | ||
| 610 | variable is a list of expressions that can involve the variables | ||
| 611 | @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all | ||
| 612 | numbers in string form, and @code{am-pm} and @code{time-zone}, which are | ||
| 613 | both alphabetic strings. The default value of | ||
| 614 | @code{calendar-time-display-form} is as follows: | ||
| 615 | |||
| 616 | @smallexample | ||
| 617 | (12-hours ":" minutes am-pm | ||
| 618 | (if time-zone " (") time-zone (if time-zone ")")) | ||
| 619 | @end smallexample | ||
| 620 | |||
| 621 | @noindent | ||
| 622 | Here is a value that provides European style times: | ||
| 623 | |||
| 624 | @smallexample | ||
| 625 | (24-hours ":" minutes | ||
| 626 | (if time-zone " (") time-zone (if time-zone ")")) | ||
| 627 | @end smallexample | ||
| 628 | |||
| 629 | @node Daylight Savings | ||
| 630 | @section Daylight Savings Time | ||
| 631 | @cindex daylight savings time | ||
| 632 | |||
| 633 | Emacs understands the difference between standard time and daylight | ||
| 634 | savings time---the times given for sunrise, sunset, solstices, | ||
| 635 | equinoxes, and the phases of the moon take that into account. The rules | ||
| 636 | for daylight savings time vary from place to place and have also varied | ||
| 637 | historically from year to year. To do the job properly, Emacs needs to | ||
| 638 | know which rules to use. | ||
| 639 | |||
| 640 | Some operating systems keep track of the rules that apply to the place | ||
| 641 | where you are; on these systems, Emacs gets the information it needs | ||
| 642 | from the system automatically. If some or all of this information is | ||
| 643 | missing, Emacs fills in the gaps with the rules currently used in | ||
| 644 | Cambridge, Massachusetts, which is the center of GNU's world. | ||
| 645 | |||
| 646 | |||
| 647 | @vindex calendar-daylight-savings-starts | ||
| 648 | @vindex calendar-daylight-savings-ends | ||
| 649 | If the default choice of rules is not appropriate for your location, | ||
| 650 | you can tell Emacs the rules to use by setting the variables | ||
| 651 | @code{calendar-daylight-savings-starts} and | ||
| 652 | @code{calendar-daylight-savings-ends}. Their values should be Lisp | ||
| 653 | expressions that refer to the variable @code{year}, and evaluate to the | ||
| 654 | Gregorian date on which daylight savings time starts or (respectively) | ||
| 655 | ends, in the form of a list @code{(@var{month} @var{day} @var{year})}. | ||
| 656 | The values should be @code{nil} if your area does not use daylight | ||
| 657 | savings time. | ||
| 658 | |||
| 659 | Emacs uses these expressions to determine the start and end dates of | ||
| 660 | daylight savings time as holidays and for correcting times of day in the | ||
| 661 | solar and lunar calculations. | ||
| 662 | |||
| 663 | The values for Cambridge, Massachusetts are as follows: | ||
| 664 | |||
| 665 | @example | ||
| 666 | @group | ||
| 667 | (calendar-nth-named-day 1 0 4 year) | ||
| 668 | (calendar-nth-named-day -1 0 10 year) | ||
| 669 | @end group | ||
| 670 | @end example | ||
| 671 | |||
| 672 | @noindent | ||
| 673 | i.e., the first 0th day (Sunday) of the fourth month (April) in | ||
| 674 | the year specified by @code{year}, and the last Sunday of the tenth month | ||
| 675 | (October) of that year. If daylight savings time were | ||
| 676 | changed to start on October 1, you would set | ||
| 677 | @code{calendar-daylight-savings-starts} to this: | ||
| 678 | |||
| 679 | @example | ||
| 680 | (list 10 1 year) | ||
| 681 | @end example | ||
| 682 | |||
| 683 | For a more complex example, suppose daylight savings time begins on | ||
| 684 | the first of Nisan on the Hebrew calendar. You should set | ||
| 685 | @code{calendar-daylight-savings-starts} to this value: | ||
| 686 | |||
| 687 | @example | ||
| 688 | (calendar-gregorian-from-absolute | ||
| 689 | (calendar-absolute-from-hebrew | ||
| 690 | (list 1 1 (+ year 3760)))) | ||
| 691 | @end example | ||
| 692 | |||
| 693 | @noindent | ||
| 694 | because Nisan is the first month in the Hebrew calendar and the Hebrew | ||
| 695 | year differs from the Gregorian year by 3760 at Nisan. | ||
| 696 | |||
| 697 | If there is no daylight savings time at your location, or if you want | ||
| 698 | all times in standard time, set @code{calendar-daylight-savings-starts} | ||
| 699 | and @code{calendar-daylight-savings-ends} to @code{nil}. | ||
| 700 | |||
| 701 | @vindex calendar-daylight-time-offset | ||
| 702 | The variable @code{calendar-daylight-time-offset} specifies the | ||
| 703 | difference between daylight savings time and standard time, measured in | ||
| 704 | minutes. The value for Cambridge is 60. | ||
| 705 | |||
| 706 | @vindex calendar-daylight-savings-starts-time | ||
| 707 | @vindex calendar-daylight-savings-ends-time | ||
| 708 | The variable @code{calendar-daylight-savings-starts-time} and the | ||
| 709 | variable @code{calendar-daylight-savings-ends-time} specify the number | ||
| 710 | of minutes after midnight local time when the transition to and from | ||
| 711 | daylight savings time should occur. For Cambridge, both variables' | ||
| 712 | values are 120. | ||
| 713 | |||
| 714 | @node Diary Customizing | ||
| 715 | @section Customizing the Diary | ||
| 716 | |||
| 717 | @vindex holidays-in-diary-buffer | ||
| 718 | Ordinarily, the mode line of the diary buffer window indicates any | ||
| 719 | holidays that fall on the date of the diary entries. The process of | ||
| 720 | checking for holidays can take several seconds, so including holiday | ||
| 721 | information delays the display of the diary buffer noticeably. If you'd | ||
| 722 | prefer to have a faster display of the diary buffer but without the | ||
| 723 | holiday information, set the variable @code{holidays-in-diary-buffer} to | ||
| 724 | @code{nil}.@refill | ||
| 725 | |||
| 726 | @vindex number-of-diary-entries | ||
| 727 | The variable @code{number-of-diary-entries} controls the number of | ||
| 728 | days of diary entries to be displayed at one time. It affects the | ||
| 729 | initial display when @code{view-diary-entries-initially} is @code{t}, as | ||
| 730 | well as the command @kbd{M-x diary}. For example, the default value is | ||
| 731 | 1, which says to display only the current day's diary entries. If the | ||
| 732 | value is 2, both the current day's and the next day's entries are | ||
| 733 | displayed. The value can also be a vector of seven elements: for | ||
| 734 | example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries | ||
| 735 | appear on Sunday, the current date's and the next day's diary entries | ||
| 736 | appear Monday through Thursday, Friday through Monday's entries appear | ||
| 737 | on Friday, while on Saturday only that day's entries appear. | ||
| 738 | |||
| 739 | @vindex print-diary-entries-hook | ||
| 740 | @findex print-diary-entries | ||
| 741 | The variable @code{print-diary-entries-hook} is a normal hook run | ||
| 742 | after preparation of a temporary buffer containing just the diary | ||
| 743 | entries currently visible in the diary buffer. (The other, irrelevant | ||
| 744 | diary entries are really absent from the temporary buffer; in the diary | ||
| 745 | buffer, they are merely hidden.) The default value of this hook does | ||
| 746 | the printing with the command @code{lpr-buffer}. If you want to use a | ||
| 747 | different command to do the printing, just change the value of this | ||
| 748 | hook. Other uses might include, for example, rearranging the lines into | ||
| 749 | order by day and time. | ||
| 750 | |||
| 751 | @vindex diary-date-forms | ||
| 752 | You can customize the form of dates in your diary file, if neither the | ||
| 753 | standard American nor European styles suits your needs, by setting the | ||
| 754 | variable @code{diary-date-forms}. This variable is a list of patterns | ||
| 755 | for recognizing a date. Each date pattern is a list whose elements may | ||
| 756 | be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs | ||
| 757 | Lisp Reference Manual}) or the symbols @code{month}, @code{day}, | ||
| 758 | @code{year}, @code{monthname}, and @code{dayname}. All these elements | ||
| 759 | serve as patterns that match certain kinds of text in the diary file. | ||
| 760 | In order for the date pattern, as a whole, to match, all of its elements | ||
| 761 | must match consecutively. | ||
| 762 | |||
| 763 | A regular expression in a date pattern matches in its usual fashion, | ||
| 764 | using the standard syntax table altered so that @samp{*} is a word | ||
| 765 | constituent. | ||
| 766 | |||
| 767 | The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, | ||
| 768 | and @code{dayname} match the month number, day number, year number, | ||
| 769 | month name, and day name of the date being considered. The symbols that | ||
| 770 | match numbers allow leading zeros; those that match names allow | ||
| 771 | three-letter abbreviations and capitalization. All the symbols can | ||
| 772 | match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any | ||
| 773 | month'', and so on, it should match regardless of the date being | ||
| 774 | considered. | ||
| 775 | |||
| 776 | The default value of @code{diary-date-forms} in the American style is | ||
| 777 | this: | ||
| 778 | |||
| 779 | @example | ||
| 780 | ((month "/" day "[^/0-9]") | ||
| 781 | (month "/" day "/" year "[^0-9]") | ||
| 782 | (monthname " *" day "[^,0-9]") | ||
| 783 | (monthname " *" day ", *" year "[^0-9]") | ||
| 784 | (dayname "\\W")) | ||
| 785 | @end example | ||
| 786 | |||
| 787 | The date patterns in the list must be @emph{mutually exclusive} and | ||
| 788 | must not match any portion of the diary entry itself, just the date and | ||
| 789 | one character of whitespace. If, to be mutually exclusive, the pattern | ||
| 790 | must match a portion of the diary entry text---beyond the whitespace | ||
| 791 | that ends the date---then the first element of the date pattern | ||
| 792 | @emph{must} be @code{backup}. This causes the date recognizer to back | ||
| 793 | up to the beginning of the current word of the diary entry, after | ||
| 794 | finishing the match. Even if you use @code{backup}, the date pattern | ||
| 795 | must absolutely not match more than a portion of the first word of the | ||
| 796 | diary entry. The default value of @code{diary-date-forms} in the | ||
| 797 | European style is this list: | ||
| 798 | |||
| 799 | @example | ||
| 800 | ((day "/" month "[^/0-9]") | ||
| 801 | (day "/" month "/" year "[^0-9]") | ||
| 802 | (backup day " *" monthname "\\W+\\<[^*0-9]") | ||
| 803 | (day " *" monthname " *" year "[^0-9]") | ||
| 804 | (dayname "\\W")) | ||
| 805 | @end example | ||
| 806 | |||
| 807 | @noindent | ||
| 808 | Notice the use of @code{backup} in the third pattern, because it needs | ||
| 809 | to match part of a word beyond the date itself to distinguish it from | ||
| 810 | the fourth pattern. | ||
| 811 | |||
| 812 | @node Hebrew/Islamic Entries | ||
| 813 | @section Hebrew- and Islamic-Date Diary Entries | ||
| 814 | |||
| 815 | Your diary file can have entries based on Hebrew or Islamic dates, as | ||
| 816 | well as entries based on the world-standard Gregorian calendar. | ||
| 817 | However, because recognition of such entries is time-consuming and most | ||
| 818 | people don't use them, you must explicitly enable their use. If you | ||
| 819 | want the diary to recognize Hebrew-date diary entries, for example, | ||
| 820 | you must do this: | ||
| 821 | |||
| 822 | @vindex nongregorian-diary-listing-hook | ||
| 823 | @vindex nongregorian-diary-marking-hook | ||
| 824 | @findex list-hebrew-diary-entries | ||
| 825 | @findex mark-hebrew-diary-entries | ||
| 826 | @smallexample | ||
| 827 | (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) | ||
| 828 | (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) | ||
| 829 | @end smallexample | ||
| 830 | |||
| 831 | @noindent | ||
| 832 | If you want Islamic-date entries, do this: | ||
| 833 | |||
| 834 | @findex list-islamic-diary-entries | ||
| 835 | @findex mark-islamic-diary-entries | ||
| 836 | @smallexample | ||
| 837 | (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) | ||
| 838 | (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) | ||
| 839 | @end smallexample | ||
| 840 | |||
| 841 | Hebrew- and Islamic-date diary entries have the same formats as | ||
| 842 | Gregorian-date diary entries, except that @samp{H} precedes a Hebrew | ||
| 843 | date and @samp{I} precedes an Islamic date. Moreover, because the | ||
| 844 | Hebrew and Islamic month names are not uniquely specified by the first | ||
| 845 | three letters, you may not abbreviate them. For example, a diary entry | ||
| 846 | for the Hebrew date Heshvan 25 could look like this: | ||
| 847 | |||
| 848 | @smallexample | ||
| 849 | HHeshvan 25 Happy Hebrew birthday! | ||
| 850 | @end smallexample | ||
| 851 | |||
| 852 | @noindent | ||
| 853 | and would appear in the diary for any date that corresponds to Heshvan 25 | ||
| 854 | on the Hebrew calendar. And here is an Islamic-date diary entry that matches | ||
| 855 | Dhu al-Qada 25: | ||
| 856 | |||
| 857 | @smallexample | ||
| 858 | IDhu al-Qada 25 Happy Islamic birthday! | ||
| 859 | @end smallexample | ||
| 860 | |||
| 861 | As with Gregorian-date diary entries, Hebrew- and Islamic-date entries | ||
| 862 | are nonmarking if they are preceded with an ampersand (@samp{&}). | ||
| 863 | |||
| 864 | Here is a table of commands used in the calendar to create diary entries | ||
| 865 | that match the selected date and other dates that are similar in the Hebrew | ||
| 866 | or Islamic calendar: | ||
| 867 | |||
| 868 | @table @kbd | ||
| 869 | @item i h d | ||
| 870 | Add a diary entry for the Hebrew date corresponding to the selected date | ||
| 871 | (@code{insert-hebrew-diary-entry}). | ||
| 872 | @item i h m | ||
| 873 | Add a diary entry for the day of the Hebrew month corresponding to the | ||
| 874 | selected date (@code{insert-monthly-hebrew-diary-entry}). This diary | ||
| 875 | entry matches any date that has the same Hebrew day-within-month as the | ||
| 876 | selected date. | ||
| 877 | @item i h y | ||
| 878 | Add a diary entry for the day of the Hebrew year corresponding to the | ||
| 879 | selected date (@code{insert-yearly-hebrew-diary-entry}). This diary | ||
| 880 | entry matches any date which has the same Hebrew month and day-within-month | ||
| 881 | as the selected date. | ||
| 882 | @item i i d | ||
| 883 | Add a diary entry for the Islamic date corresponding to the selected date | ||
| 884 | (@code{insert-islamic-diary-entry}). | ||
| 885 | @item i i m | ||
| 886 | Add a diary entry for the day of the Islamic month corresponding to the | ||
| 887 | selected date (@code{insert-monthly-islamic-diary-entry}). | ||
| 888 | @item i i y | ||
| 889 | Add a diary entry for the day of the Islamic year corresponding to the | ||
| 890 | selected date (@code{insert-yearly-islamic-diary-entry}). | ||
| 891 | @end table | ||
| 892 | |||
| 893 | @findex insert-hebrew-diary-entry | ||
| 894 | @findex insert-monthly-hebrew-diary-entry | ||
| 895 | @findex insert-yearly-hebrew-diary-entry | ||
| 896 | @findex insert-islamic-diary-entry | ||
| 897 | @findex insert-monthly-islamic-diary-entry | ||
| 898 | @findex insert-yearly-islamic-diary-entry | ||
| 899 | These commands work much like the corresponding commands for ordinary | ||
| 900 | diary entries: they apply to the date that point is on in the calendar | ||
| 901 | window, and what they do is insert just the date portion of a diary entry | ||
| 902 | at the end of your diary file. You must then insert the rest of the | ||
| 903 | diary entry. | ||
| 904 | |||
| 905 | @node Fancy Diary Display | ||
| 906 | @section Fancy Diary Display | ||
| 907 | @vindex diary-display-hook | ||
| 908 | @findex simple-diary-display | ||
| 909 | |||
| 910 | Diary display works by preparing the diary buffer and then running the | ||
| 911 | hook @code{diary-display-hook}. The default value of this hook | ||
| 912 | (@code{simple-diary-display}) hides the irrelevant diary entries and | ||
| 913 | then displays the buffer. However, if you specify the hook as follows, | ||
| 914 | |||
| 915 | @cindex diary buffer | ||
| 916 | @findex fancy-diary-display | ||
| 917 | @example | ||
| 918 | (add-hook 'diary-display-hook 'fancy-diary-display) | ||
| 919 | @end example | ||
| 920 | |||
| 921 | @noindent | ||
| 922 | this enables fancy diary display. It displays diary entries and | ||
| 923 | holidays by copying them into a special buffer that exists only for the | ||
| 924 | sake of display. Copying to a separate buffer provides an opportunity | ||
| 925 | to change the displayed text to make it prettier---for example, to sort | ||
| 926 | the entries by the dates they apply to. | ||
| 927 | |||
| 928 | As with simple diary display, you can print a hard copy of the buffer | ||
| 929 | with @code{print-diary-entries}. To print a hard copy of a day-by-day | ||
| 930 | diary for a week, position point on Sunday of that week, type | ||
| 931 | @kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the | ||
| 932 | inclusion of the holidays slows down the display slightly; you can speed | ||
| 933 | things up by setting the variable @code{holidays-in-diary-buffer} to | ||
| 934 | @code{nil}. | ||
| 935 | |||
| 936 | @vindex diary-list-include-blanks | ||
| 937 | Ordinarily, the fancy diary buffer does not show days for which there are | ||
| 938 | no diary entries, even if that day is a holiday. If you want such days to be | ||
| 939 | shown in the fancy diary buffer, set the variable | ||
| 940 | @code{diary-list-include-blanks} to @code{t}.@refill | ||
| 941 | |||
| 942 | @cindex sorting diary entries | ||
| 943 | If you use the fancy diary display, you can use the normal hook | ||
| 944 | @code{list-diary-entries-hook} to sort each day's diary entries by their | ||
| 945 | time of day. Here's how: | ||
| 946 | |||
| 947 | @findex sort-diary-entries | ||
| 948 | @example | ||
| 949 | (add-hook 'list-diary-entries-hook 'sort-diary-entries t) | ||
| 950 | @end example | ||
| 951 | |||
| 952 | @noindent | ||
| 953 | For each day, this sorts diary entries that begin with a recognizable | ||
| 954 | time of day according to their times. Diary entries without times come | ||
| 955 | first within each day. | ||
| 956 | |||
| 957 | Fancy diary display also has the ability to process included diary | ||
| 958 | files. This permits a group of people to share a diary file for events | ||
| 959 | that apply to all of them. Lines in the diary file of this form: | ||
| 960 | |||
| 961 | @smallexample | ||
| 962 | #include "@var{filename}" | ||
| 963 | @end smallexample | ||
| 964 | |||
| 965 | @noindent | ||
| 966 | includes the diary entries from the file @var{filename} in the fancy | ||
| 967 | diary buffer. The include mechanism is recursive, so that included files | ||
| 968 | can include other files, and so on; you must be careful not to have a | ||
| 969 | cycle of inclusions, of course. Here is how to enable the include | ||
| 970 | facility: | ||
| 971 | |||
| 972 | @vindex list-diary-entries-hook | ||
| 973 | @vindex mark-diary-entries-hook | ||
| 974 | @findex include-other-diary-files | ||
| 975 | @findex mark-included-diary-files | ||
| 976 | @smallexample | ||
| 977 | (add-hook 'list-diary-entries-hook 'include-other-diary-files) | ||
| 978 | (add-hook 'mark-diary-entries-hook 'mark-included-diary-files) | ||
| 979 | @end smallexample | ||
| 980 | |||
| 981 | The include mechanism works only with the fancy diary display, because | ||
| 982 | ordinary diary display shows the entries directly from your diary file. | ||
| 983 | |||
| 984 | @node Sexp Diary Entries | ||
| 985 | @section Sexp Entries and the Fancy Diary Display | ||
| 986 | @cindex sexp diary entries | ||
| 987 | |||
| 988 | Sexp diary entries allow you to do more than just have complicated | ||
| 989 | conditions under which a diary entry applies. If you use the fancy | ||
| 990 | diary display, sexp entries can generate the text of the entry depending | ||
| 991 | on the date itself. For example, an anniversary diary entry can insert | ||
| 992 | the number of years since the anniversary date into the text of the | ||
| 993 | diary entry. Thus the @samp{%d} in this dairy entry: | ||
| 994 | |||
| 995 | @findex diary-anniversary | ||
| 996 | @smallexample | ||
| 997 | %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old) | ||
| 998 | @end smallexample | ||
| 999 | |||
| 1000 | @noindent | ||
| 1001 | gets replaced by the age, so on October 31, 1990 the entry appears in | ||
| 1002 | the fancy diary buffer like this: | ||
| 1003 | |||
| 1004 | @smallexample | ||
| 1005 | Arthur's birthday (42 years old) | ||
| 1006 | @end smallexample | ||
| 1007 | |||
| 1008 | @noindent | ||
| 1009 | If the diary file instead contains this entry: | ||
| 1010 | |||
| 1011 | @smallexample | ||
| 1012 | %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday | ||
| 1013 | @end smallexample | ||
| 1014 | |||
| 1015 | @noindent | ||
| 1016 | the entry in the fancy diary buffer for October 31, 1990 appears like this: | ||
| 1017 | |||
| 1018 | @smallexample | ||
| 1019 | Arthur's 42nd birthday | ||
| 1020 | @end smallexample | ||
| 1021 | |||
| 1022 | Similarly, cyclic diary entries can interpolate the number of repetitions | ||
| 1023 | that have occurred: | ||
| 1024 | |||
| 1025 | @findex diary-cyclic | ||
| 1026 | @smallexample | ||
| 1027 | %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time) | ||
| 1028 | @end smallexample | ||
| 1029 | |||
| 1030 | @noindent | ||
| 1031 | looks like this: | ||
| 1032 | |||
| 1033 | @smallexample | ||
| 1034 | Renew medication (5th time) | ||
| 1035 | @end smallexample | ||
| 1036 | |||
| 1037 | @noindent | ||
| 1038 | in the fancy diary display on September 8, 1990. | ||
| 1039 | |||
| 1040 | There is an early reminder diary sexp that includes its entry in the | ||
| 1041 | diary not only on the date of occurrence, but also on earlier dates. | ||
| 1042 | For example, if you want a reminder a week before your anniversary, you | ||
| 1043 | can use | ||
| 1044 | |||
| 1045 | @findex diary-remind | ||
| 1046 | @smallexample | ||
| 1047 | %%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary | ||
| 1048 | @end smallexample | ||
| 1049 | |||
| 1050 | @noindent | ||
| 1051 | and the fancy diary will show | ||
| 1052 | @smallexample | ||
| 1053 | Ed's anniversary | ||
| 1054 | @end smallexample | ||
| 1055 | @noindent | ||
| 1056 | both on December 15 and on December 22. | ||
| 1057 | |||
| 1058 | @findex diary-date | ||
| 1059 | The function @code{diary-date} applies to dates described by a month, | ||
| 1060 | day, year combination, each of which can be an integer, a list of | ||
| 1061 | integers, or @code{t}. The value @code{t} means all values. For | ||
| 1062 | example, | ||
| 1063 | |||
| 1064 | @smallexample | ||
| 1065 | %%(diary-date '(10 11 12) 22 t) Rake leaves | ||
| 1066 | @end smallexample | ||
| 1067 | |||
| 1068 | @noindent | ||
| 1069 | causes the fancy diary to show | ||
| 1070 | |||
| 1071 | @smallexample | ||
| 1072 | Rake leaves | ||
| 1073 | @end smallexample | ||
| 1074 | |||
| 1075 | @noindent | ||
| 1076 | on October 22, November 22, and December 22 of every year. | ||
| 1077 | |||
| 1078 | @findex diary-float | ||
| 1079 | The function @code{diary-float} allows you to describe diary entries | ||
| 1080 | that apply to dates like the third Friday of November, or the last | ||
| 1081 | Tuesday in April. The parameters are the @var{month}, @var{dayname}, | ||
| 1082 | and an index @var{n}. The entry appears on the @var{n}th @var{dayname} | ||
| 1083 | of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and | ||
| 1084 | so on. If @var{n} is negative it counts backward from the end of | ||
| 1085 | @var{month}. The value of @var{month} can be a list of months, a single | ||
| 1086 | month, or @code{t} to specify all months. You can also use an optional | ||
| 1087 | parameter @var{day} to specify the @var{n}th @var{dayname} of | ||
| 1088 | @var{month} on or after/before @var{day}; the value of @var{day} defaults | ||
| 1089 | to 1 if @var{n} is positive and to the last day of @var{month} if | ||
| 1090 | @var{n} is negative. For example, | ||
| 1091 | |||
| 1092 | @smallexample | ||
| 1093 | %%(diary-float t 1 -1) Pay rent | ||
| 1094 | @end smallexample | ||
| 1095 | |||
| 1096 | @noindent | ||
| 1097 | causes the fancy diary to show | ||
| 1098 | |||
| 1099 | @smallexample | ||
| 1100 | Pay rent | ||
| 1101 | @end smallexample | ||
| 1102 | |||
| 1103 | @noindent | ||
| 1104 | on the last Monday of every month. | ||
| 1105 | |||
| 1106 | The generality of sexp diary entries lets you specify any diary | ||
| 1107 | entry that you can describe algorithmically. A sexp diary entry | ||
| 1108 | contains an expression that computes whether the entry applies to any | ||
| 1109 | given date. If its value is non-@code{nil}, the entry applies to that | ||
| 1110 | date; otherwise, it does not. The expression can use the variable | ||
| 1111 | @code{date} to find the date being considered; its value is a list | ||
| 1112 | (@var{month} @var{day} @var{year}) that refers to the Gregorian | ||
| 1113 | calendar. | ||
| 1114 | |||
| 1115 | The sexp diary entry applies to a date when the expression's value | ||
| 1116 | is non-@code{nil}, but some values have more specific meanings. If | ||
| 1117 | the value is a string, that string is a description of the event which | ||
| 1118 | occurs on that date. The value can also have the form | ||
| 1119 | @code{(@var{mark} . @var{string})}; then @var{mark} specifies how to | ||
| 1120 | mark the date in the calendar, and @var{string} is the description of | ||
| 1121 | the event. If @var{mark} is a single-character string, that character | ||
| 1122 | appears next to the date in the calendar. If @var{mark} is a face | ||
| 1123 | name, the date is displayed in that face. If @var{mark} is | ||
| 1124 | @code{nil}, that specifies no particular highlighting for the date. | ||
| 1125 | |||
| 1126 | Suppose you get paid on the 21st of the month if it is a weekday, and | ||
| 1127 | on the Friday before if the 21st is on a weekend. Here is how to write | ||
| 1128 | a sexp diary entry that matches those dates: | ||
| 1129 | |||
| 1130 | @smallexample | ||
| 1131 | &%%(let ((dayname (calendar-day-of-week date)) | ||
| 1132 | (day (car (cdr date)))) | ||
| 1133 | (or (and (= day 21) (memq dayname '(1 2 3 4 5))) | ||
| 1134 | (and (memq day '(19 20)) (= dayname 5))) | ||
| 1135 | ) Pay check deposited | ||
| 1136 | @end smallexample | ||
| 1137 | |||
| 1138 | The following sexp diary entries take advantage of the ability (in the fancy | ||
| 1139 | diary display) to concoct diary entries whose text varies based on the date: | ||
| 1140 | |||
| 1141 | @findex diary-sunrise-sunset | ||
| 1142 | @findex diary-phases-of-moon | ||
| 1143 | @findex diary-day-of-year | ||
| 1144 | @findex diary-iso-date | ||
| 1145 | @findex diary-julian-date | ||
| 1146 | @findex diary-astro-day-number | ||
| 1147 | @findex diary-hebrew-date | ||
| 1148 | @findex diary-islamic-date | ||
| 1149 | @findex diary-french-date | ||
| 1150 | @findex diary-mayan-date | ||
| 1151 | @table @code | ||
| 1152 | @item %%(diary-sunrise-sunset) | ||
| 1153 | Make a diary entry for the local times of today's sunrise and sunset. | ||
| 1154 | @item %%(diary-phases-of-moon) | ||
| 1155 | Make a diary entry for the phases (quarters) of the moon. | ||
| 1156 | @item %%(diary-day-of-year) | ||
| 1157 | Make a diary entry with today's day number in the current year and the number | ||
| 1158 | of days remaining in the current year. | ||
| 1159 | @item %%(diary-iso-date) | ||
| 1160 | Make a diary entry with today's equivalent ISO commercial date. | ||
| 1161 | @item %%(diary-julian-date) | ||
| 1162 | Make a diary entry with today's equivalent date on the Julian calendar. | ||
| 1163 | @item %%(diary-astro-day-number) | ||
| 1164 | Make a diary entry with today's equivalent astronomical (Julian) day number. | ||
| 1165 | @item %%(diary-hebrew-date) | ||
| 1166 | Make a diary entry with today's equivalent date on the Hebrew calendar. | ||
| 1167 | @item %%(diary-islamic-date) | ||
| 1168 | Make a diary entry with today's equivalent date on the Islamic calendar. | ||
| 1169 | @item %%(diary-french-date) | ||
| 1170 | Make a diary entry with today's equivalent date on the French Revolutionary | ||
| 1171 | calendar. | ||
| 1172 | @item %%(diary-mayan-date) | ||
| 1173 | Make a diary entry with today's equivalent date on the Mayan calendar. | ||
| 1174 | @end table | ||
| 1175 | |||
| 1176 | @noindent | ||
| 1177 | Thus including the diary entry | ||
| 1178 | |||
| 1179 | @example | ||
| 1180 | &%%(diary-hebrew-date) | ||
| 1181 | @end example | ||
| 1182 | |||
| 1183 | @noindent | ||
| 1184 | causes every day's diary display to contain the equivalent date on the | ||
| 1185 | Hebrew calendar, if you are using the fancy diary display. (With simple | ||
| 1186 | diary display, the line @samp{&%%(diary-hebrew-date)} appears in the | ||
| 1187 | diary for any date, but does nothing particularly useful.) | ||
| 1188 | |||
| 1189 | These functions can be used to construct sexp diary entries based on | ||
| 1190 | the Hebrew calendar in certain standard ways: | ||
| 1191 | |||
| 1192 | @cindex rosh hodesh | ||
| 1193 | @findex diary-rosh-hodesh | ||
| 1194 | @cindex parasha, weekly | ||
| 1195 | @findex diary-parasha | ||
| 1196 | @cindex candle lighting times | ||
| 1197 | @findex diary-sabbath-candles | ||
| 1198 | @cindex omer count | ||
| 1199 | @findex diary-omer | ||
| 1200 | @cindex yahrzeits | ||
| 1201 | @findex diary-yahrzeit | ||
| 1202 | @table @code | ||
| 1203 | @item %%(diary-rosh-hodesh) | ||
| 1204 | Make a diary entry that tells the occurrence and ritual announcement of each | ||
| 1205 | new Hebrew month. | ||
| 1206 | @item %%(diary-parasha) | ||
| 1207 | Make a Saturday diary entry that tells the weekly synagogue scripture reading. | ||
| 1208 | @item %%(diary-sabbath-candles) | ||
| 1209 | Make a Friday diary entry that tells the @emph{local time} of Sabbath | ||
| 1210 | candle lighting. | ||
| 1211 | @item %%(diary-omer) | ||
| 1212 | Make a diary entry that gives the omer count, when appropriate. | ||
| 1213 | @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name} | ||
| 1214 | Make a diary entry marking the anniversary of a date of death. The date | ||
| 1215 | is the @emph{Gregorian} (civil) date of death. The diary entry appears | ||
| 1216 | on the proper Hebrew calendar anniversary and on the day before. (In | ||
| 1217 | the European style, the order of the parameters is changed to @var{day}, | ||
| 1218 | @var{month}, @var{year}.) | ||
| 1219 | @end table | ||
| 1220 | |||
| 1221 | All the functions documented above take an optional argument | ||
| 1222 | @var{mark} which specifies how to mark the date in the calendar display. | ||
| 1223 | If one of these functions decides that it applies to a certain date, | ||
| 1224 | it returns a value that contains @var{mark}. | ||
| 1225 | |||
| 1226 | |||
| 310 | @node Index | 1227 | @node Index |
| 311 | @unnumbered Index | 1228 | @unnumbered Index |
| 312 | 1229 | ||
diff --git a/man/emacs.texi b/man/emacs.texi index a619448a8ba..0ad3a5148c9 100644 --- a/man/emacs.texi +++ b/man/emacs.texi | |||
| @@ -224,11 +224,13 @@ Recovery from Problems | |||
| 224 | * Contributing:: How to contribute improvements to Emacs. | 224 | * Contributing:: How to contribute improvements to Emacs. |
| 225 | * Service:: How to get help for your own Emacs needs. | 225 | * Service:: How to get help for your own Emacs needs. |
| 226 | 226 | ||
| 227 | |||
| 228 | Detailed Node Listing | ||
| 229 | --------------------- | ||
| 230 | |||
| 227 | Here are some other nodes which are really inferiors of the ones | 231 | Here are some other nodes which are really inferiors of the ones |
| 228 | already listed, mentioned here so you can get to them in one step: | 232 | already listed, mentioned here so you can get to them in one step: |
| 229 | 233 | ||
| 230 | --- The Detailed Node Listing --- | ||
| 231 | |||
| 232 | The Organization of the Screen | 234 | The Organization of the Screen |
| 233 | 235 | ||
| 234 | * Point:: The place in the text where editing commands operate. | 236 | * Point:: The place in the text where editing commands operate. |
| @@ -563,6 +565,8 @@ Compiling and Testing Programs | |||
| 563 | * Compilation Mode:: The mode for visiting compiler errors. | 565 | * Compilation Mode:: The mode for visiting compiler errors. |
| 564 | * Compilation Shell:: Customizing your shell properly | 566 | * Compilation Shell:: Customizing your shell properly |
| 565 | for use in the compilation buffer. | 567 | for use in the compilation buffer. |
| 568 | * Grep Searching:: Searching with grep. | ||
| 569 | * Flymake:: Finding syntax errors on the fly. | ||
| 566 | * Debuggers:: Running symbolic debuggers for non-Lisp programs. | 570 | * Debuggers:: Running symbolic debuggers for non-Lisp programs. |
| 567 | * Executing Lisp:: Various modes for editing Lisp programs, | 571 | * Executing Lisp:: Various modes for editing Lisp programs, |
| 568 | with different facilities for running | 572 | with different facilities for running |
| @@ -676,6 +680,9 @@ Dired, the Directory Editor | |||
| 676 | * Hiding Subdirectories:: Making subdirectories visible or invisible. | 680 | * Hiding Subdirectories:: Making subdirectories visible or invisible. |
| 677 | * Dired Updating:: Discarding lines for files of no interest. | 681 | * Dired Updating:: Discarding lines for files of no interest. |
| 678 | * Dired and Find:: Using `find' to choose the files for Dired. | 682 | * Dired and Find:: Using `find' to choose the files for Dired. |
| 683 | * Dired and Find:: Using `find' to choose the files for Dired. | ||
| 684 | * Wdired:: Operating on files by editing the Dired buffer. | ||
| 685 | * Misc Dired Features:: Various other features. | ||
| 679 | 686 | ||
| 680 | The Calendar and the Diary | 687 | The Calendar and the Diary |
| 681 | 688 | ||
| @@ -709,7 +716,7 @@ Conversion To and From Other Calendars | |||
| 709 | 716 | ||
| 710 | The Diary | 717 | The Diary |
| 711 | 718 | ||
| 712 | * Diary Commands:: Viewing diary entries and associated calendar dates. | 719 | * Displaying the Diary:: Viewing diary entries and associated calendar dates. |
| 713 | * Format of Diary File:: Entering events in your diary. | 720 | * Format of Diary File:: Entering events in your diary. |
| 714 | * Date Formats:: Various ways you can specify dates. | 721 | * Date Formats:: Various ways you can specify dates. |
| 715 | * Adding to Diary:: Commands to create diary entries. | 722 | * Adding to Diary:: Commands to create diary entries. |
diff --git a/man/files.texi b/man/files.texi index 4e944f83afd..7ed2baa0b93 100644 --- a/man/files.texi +++ b/man/files.texi | |||
| @@ -238,13 +238,13 @@ or tool bar) use the toolkit's standard File Selection dialog instead | |||
| 238 | of prompting for the file name in the minibuffer. On Unix and | 238 | of prompting for the file name in the minibuffer. On Unix and |
| 239 | GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and | 239 | GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and |
| 240 | Motif toolkits; on MS-Windows, the GUI version does that by default. | 240 | Motif toolkits; on MS-Windows, the GUI version does that by default. |
| 241 | For information on how to customize this, see @xref{Dialog Boxes}. | 241 | For information on how to customize this, see @ref{Dialog Boxes}. |
| 242 | 242 | ||
| 243 | Secondly, Emacs supports the ``drag and drop'' protocol on the X | 243 | Secondly, Emacs supports the ``drag and drop'' protocol on the X |
| 244 | window system. Dropping a file into an ordinary Emacs window visits | 244 | window system. Dropping a file into an ordinary Emacs window visits |
| 245 | the file using that window. However, dropping a file into a window | 245 | the file using that window. However, dropping a file into a window |
| 246 | displaying a Dired buffer moves or copies the file into the displayed | 246 | displaying a Dired buffer moves or copies the file into the displayed |
| 247 | directory. For details, see @xref{Drag and Drop} and @xref{Misc Dired | 247 | directory. For details, see @ref{Drag and Drop}, @ref{Misc Dired |
| 248 | Features}. | 248 | Features}. |
| 249 | 249 | ||
| 250 | @cindex creating files | 250 | @cindex creating files |
| @@ -940,6 +940,15 @@ Auto-Revert Tail mode, @kbd{M-x auto-revert-tail-mode}. | |||
| 940 | for a changed file. Since checking a remote file is too slow, these | 940 | for a changed file. Since checking a remote file is too slow, these |
| 941 | modes do not check or revert remote files. | 941 | modes do not check or revert remote files. |
| 942 | 942 | ||
| 943 | @vindex auto-revert-check-vc-info | ||
| 944 | Whenever Auto Revert mode reverts the buffer, it updates the version | ||
| 945 | control information, such as the version control number displayed in | ||
| 946 | the mode line. However, this information may not be properly updated | ||
| 947 | if the version control state changes outside of Emacs---for example, | ||
| 948 | if a new version is checked in from outside the current Emacs session. | ||
| 949 | If you set @code{auto-revert-check-vc-info} to @code{t}, Auto Revert | ||
| 950 | mode will update the version control status information periodically. | ||
| 951 | |||
| 943 | @node Auto Save | 952 | @node Auto Save |
| 944 | @section Auto-Saving: Protection Against Disasters | 953 | @section Auto-Saving: Protection Against Disasters |
| 945 | @cindex Auto Save mode | 954 | @cindex Auto Save mode |
| @@ -1263,6 +1272,10 @@ as multiple branches, are not available with SCCS. You should use | |||
| 1263 | SCCS only if for some reason you cannot use RCS, or one of the | 1272 | SCCS only if for some reason you cannot use RCS, or one of the |
| 1264 | higher-level systems such as CVS or GNU Arch. | 1273 | higher-level systems such as CVS or GNU Arch. |
| 1265 | 1274 | ||
| 1275 | In the following, we discuss mainly RCS, SCCS and CVS. Nearly | ||
| 1276 | everything said about CVS applies to Gnu Arch, Subversion and Meta-CVS | ||
| 1277 | as well. | ||
| 1278 | |||
| 1266 | @node VC Concepts | 1279 | @node VC Concepts |
| 1267 | @subsubsection Concepts of Version Control | 1280 | @subsubsection Concepts of Version Control |
| 1268 | 1281 | ||
| @@ -1463,9 +1476,9 @@ informs you if another user has checked in changes in the same file | |||
| 1463 | since you began editing it, and when this happens, his changes will be | 1476 | since you began editing it, and when this happens, his changes will be |
| 1464 | effectively removed when you check in your version (though they will | 1477 | effectively removed when you check in your version (though they will |
| 1465 | remain in the master file, so they will not be entirely lost). You must | 1478 | remain in the master file, so they will not be entirely lost). You must |
| 1466 | therefore verify the current version is unchanged, before you check in your | 1479 | therefore verify that the current version is unchanged, before you |
| 1467 | changes. We hope to eliminate this risk and provide automatic merging | 1480 | check in your changes. We hope to eliminate this risk and provide |
| 1468 | with RCS in a future Emacs version. | 1481 | automatic merging with RCS in a future Emacs version. |
| 1469 | 1482 | ||
| 1470 | In addition, locking is possible with RCS even in this mode, although | 1483 | In addition, locking is possible with RCS even in this mode, although |
| 1471 | it is not required; @kbd{C-x v v} with an unmodified file locks the | 1484 | it is not required; @kbd{C-x v v} with an unmodified file locks the |
| @@ -1689,13 +1702,10 @@ there is more than one system in use for a directory, Emacs uses the one | |||
| 1689 | that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). | 1702 | that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). |
| 1690 | On the other hand, if there are no files already registered, | 1703 | On the other hand, if there are no files already registered, |
| 1691 | Emacs uses the first system from @code{vc-handled-backends} that could | 1704 | Emacs uses the first system from @code{vc-handled-backends} that could |
| 1692 | register the file---for example, you cannot register a file under CVS if | 1705 | register the file (for example, you cannot register a file under CVS if |
| 1693 | its directory is not already part of a CVS tree. | 1706 | its directory is not already part of a CVS tree); with the default |
| 1694 | 1707 | value of @code{vc-handled-backends}, this means that Emacs uses RCS in | |
| 1695 | With the default value of @code{vc-handled-backends}, this means | 1708 | this situation. |
| 1696 | that Emacs uses RCS if there are any files under RCS control, CVS if | ||
| 1697 | there are any files under CVS, SCCS if any files are under SCCS, or | ||
| 1698 | RCS as the ultimate default. | ||
| 1699 | 1709 | ||
| 1700 | If locking is in use, @kbd{C-x v i} leaves the file unlocked and | 1710 | If locking is in use, @kbd{C-x v i} leaves the file unlocked and |
| 1701 | read-only. Type @kbd{C-x v v} if you wish to start editing it. After | 1711 | read-only. Type @kbd{C-x v v} if you wish to start editing it. After |
| @@ -1883,7 +1893,8 @@ marked files, so that you can lock or check in several files at once. | |||
| 1883 | If it operates on more than one file, it handles each file according to | 1893 | If it operates on more than one file, it handles each file according to |
| 1884 | its current state; thus, it might lock one file, but check in another | 1894 | its current state; thus, it might lock one file, but check in another |
| 1885 | file. This could be confusing; it is up to you to avoid confusing | 1895 | file. This could be confusing; it is up to you to avoid confusing |
| 1886 | behavior by marking a set of files that are in a similar state. | 1896 | behavior by marking a set of files that are in a similar state. If no |
| 1897 | files are marked, @kbd{v v} operates on the file in the current line. | ||
| 1887 | 1898 | ||
| 1888 | If any files call for check-in, @kbd{v v} reads a single log entry, | 1899 | If any files call for check-in, @kbd{v v} reads a single log entry, |
| 1889 | then uses it for all the files being checked in. This is convenient for | 1900 | then uses it for all the files being checked in. This is convenient for |
| @@ -1911,8 +1922,7 @@ program in which you are gradually adding various unfinished new | |||
| 1911 | features. Each such independent line of development is called a | 1922 | features. Each such independent line of development is called a |
| 1912 | @dfn{branch}. VC allows you to create branches, switch between | 1923 | @dfn{branch}. VC allows you to create branches, switch between |
| 1913 | different branches, and merge changes from one branch to another. | 1924 | different branches, and merge changes from one branch to another. |
| 1914 | Please note, however, that branches are only supported for RCS at the | 1925 | Please note, however, that branches are not supported for SCCS. |
| 1915 | moment. | ||
| 1916 | 1926 | ||
| 1917 | A file's main line of development is usually called the @dfn{trunk}. | 1927 | A file's main line of development is usually called the @dfn{trunk}. |
| 1918 | The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At | 1928 | The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At |
| @@ -2255,7 +2265,8 @@ But if you do this, the revision numbers in the RCS master no longer | |||
| 2255 | correspond to those of CVS. Technically, this is not a problem, but | 2265 | correspond to those of CVS. Technically, this is not a problem, but |
| 2256 | it can become difficult to keep track of what is in the CVS repository | 2266 | it can become difficult to keep track of what is in the CVS repository |
| 2257 | and what is not. So we suggest that you return from time to time to | 2267 | and what is not. So we suggest that you return from time to time to |
| 2258 | CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}. | 2268 | CVS-only operation, by committing your local changes back to the |
| 2269 | repository using @kbd{C-u C-x v v cvs @key{RET}}. | ||
| 2259 | 2270 | ||
| 2260 | @node Snapshots | 2271 | @node Snapshots |
| 2261 | @subsection Snapshots | 2272 | @subsection Snapshots |
| @@ -2543,13 +2554,11 @@ insert a suitable header string. | |||
| 2543 | Insert headers in a file for use with your version-control system. | 2554 | Insert headers in a file for use with your version-control system. |
| 2544 | @end table | 2555 | @end table |
| 2545 | 2556 | ||
| 2546 | @vindex vc-header-alist | 2557 | @vindex vc-@var{backend}-header |
| 2547 | The default header string is @samp{@w{$}Id$} for RCS and | 2558 | The default header string is @samp{@w{$}Id$} for RCS and |
| 2548 | @samp{@w{%}W%} for SCCS. You can specify other headers to insert by | 2559 | @samp{@w{%}W%} for SCCS. You can specify other headers to insert by |
| 2549 | setting the variable @code{vc-header-alist}. Its value is a list of | 2560 | setting the variables @code{vc-@var{backend}-header} where |
| 2550 | elements of the form @code{(@var{program} . @var{string})} where | 2561 | @var{backend} is @code{rcs} or @code{sccs}. |
| 2551 | @var{program} is @code{RCS} or @code{SCCS} and @var{string} is the | ||
| 2552 | string to use. | ||
| 2553 | 2562 | ||
| 2554 | Instead of a single string, you can specify a list of strings; then | 2563 | Instead of a single string, you can specify a list of strings; then |
| 2555 | each string in the list is inserted as a separate header on a line of | 2564 | each string in the list is inserted as a separate header on a line of |
| @@ -2577,8 +2586,8 @@ elements of the form @code{(@var{regexp} . @var{format})}. Whenever | |||
| 2577 | @var{regexp} matches the buffer name, @var{format} is inserted as part | 2586 | @var{regexp} matches the buffer name, @var{format} is inserted as part |
| 2578 | of the header. A header line is inserted for each element that matches | 2587 | of the header. A header line is inserted for each element that matches |
| 2579 | the buffer name, and for each string specified by | 2588 | the buffer name, and for each string specified by |
| 2580 | @code{vc-header-alist}. The header line is made by processing the | 2589 | @code{vc-@var{backend}-header}. The header line is made by processing the |
| 2581 | string from @code{vc-header-alist} with the format taken from the | 2590 | string from @code{vc-@var{backend}-header} with the format taken from the |
| 2582 | element. The default value for @code{vc-static-header-alist} is as follows: | 2591 | element. The default value for @code{vc-static-header-alist} is as follows: |
| 2583 | 2592 | ||
| 2584 | @example | 2593 | @example |
| @@ -2615,10 +2624,10 @@ headers. | |||
| 2615 | @vindex vc-handled-backends | 2624 | @vindex vc-handled-backends |
| 2616 | The variable @code{vc-handled-backends} determines which version | 2625 | The variable @code{vc-handled-backends} determines which version |
| 2617 | control systems VC should handle. The default value is @code{(RCS CVS | 2626 | control systems VC should handle. The default value is @code{(RCS CVS |
| 2618 | SCCS)}, so it contains all three version systems that are currently | 2627 | SVN SCCS Arch MCVS)}, so it contains all six version systems that are |
| 2619 | supported. If you want VC to ignore one or more of these systems, | 2628 | currently supported. If you want VC to ignore one or more of these |
| 2620 | exclude its name from the list. To disable VC entirely, set this | 2629 | systems, exclude its name from the list. To disable VC entirely, set |
| 2621 | variable to @code{nil}. | 2630 | this variable to @code{nil}. |
| 2622 | 2631 | ||
| 2623 | The order of systems in the list is significant: when you visit a file | 2632 | The order of systems in the list is significant: when you visit a file |
| 2624 | registered in more than one system (@pxref{Local Version Control}), | 2633 | registered in more than one system (@pxref{Local Version Control}), |
| @@ -2771,8 +2780,9 @@ pick up any recent changes from the repository first, using @kbd{C-x v m | |||
| 2771 | @key{RET}}, @pxref{Merging}). | 2780 | @key{RET}}, @pxref{Merging}). |
| 2772 | 2781 | ||
| 2773 | @vindex vc-cvs-global-switches | 2782 | @vindex vc-cvs-global-switches |
| 2774 | The variable @code{vc-cvs-global-switches} should be a string | 2783 | The variable @code{vc-cvs-global-switches}, if non-@code{nil}, |
| 2775 | specifying switches to pass to CVS for all CVS operations. | 2784 | should be a string specifying switches to pass to CVS for all CVS |
| 2785 | operations. | ||
| 2776 | 2786 | ||
| 2777 | When @code{vc-cvs-stay-local} is @code{t}, VC also makes local | 2787 | When @code{vc-cvs-stay-local} is @code{t}, VC also makes local |
| 2778 | version backups, so that simple diff and revert operations are | 2788 | version backups, so that simple diff and revert operations are |
| @@ -2891,7 +2901,7 @@ the command is finished. For more information about windows in Emacs, | |||
| 2891 | With a numeric argument, @code{compare-windows} ignores changes in | 2901 | With a numeric argument, @code{compare-windows} ignores changes in |
| 2892 | whitespace. If the variable @code{compare-ignore-case} is | 2902 | whitespace. If the variable @code{compare-ignore-case} is |
| 2893 | non-@code{nil}, the comparison ignores differences in case as well. | 2903 | non-@code{nil}, the comparison ignores differences in case as well. |
| 2894 | If the variable @code{compare-ignore-whitespace} is non-nil, | 2904 | If the variable @code{compare-ignore-whitespace} is non-@code{nil}, |
| 2895 | @code{compare-windows} normally ignores changes in whitespace, and a | 2905 | @code{compare-windows} normally ignores changes in whitespace, and a |
| 2896 | prefix argument turns that off. | 2906 | prefix argument turns that off. |
| 2897 | 2907 | ||
| @@ -3289,6 +3299,10 @@ Clear the cache; that is, remove all file names from it. | |||
| 3289 | @node File Conveniences | 3299 | @node File Conveniences |
| 3290 | @section Convenience Features for Finding Files | 3300 | @section Convenience Features for Finding Files |
| 3291 | 3301 | ||
| 3302 | In this section, we introduce some convenient facilities for finding | ||
| 3303 | recently-opened files, reading file names from a buffer, and viewing | ||
| 3304 | image files. | ||
| 3305 | |||
| 3292 | @findex recentf-mode | 3306 | @findex recentf-mode |
| 3293 | @vindex recentf-mode | 3307 | @vindex recentf-mode |
| 3294 | @findex recentf-save-list | 3308 | @findex recentf-save-list |
| @@ -3299,25 +3313,22 @@ opened files. @kbd{M-x recentf-save-list} saves the current | |||
| 3299 | @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} | 3313 | @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} |
| 3300 | edits it. | 3314 | edits it. |
| 3301 | 3315 | ||
| 3302 | @findex auto-image-file-mode | ||
| 3303 | @findex mode, auto-image-file | ||
| 3304 | @cindex images, visiting | ||
| 3305 | @cindex visiting image files | ||
| 3306 | @vindex image-file-name-regexps | ||
| 3307 | @vindex image-file-name-extensions | ||
| 3308 | When Auto-image-file minor mode is enabled, visiting an image file | ||
| 3309 | displays it as an image, not as text. Likewise, inserting an image | ||
| 3310 | file into a buffer inserts it as an image. This works only when Emacs | ||
| 3311 | can display the relevant image type. The variables | ||
| 3312 | @code{image-file-name-extensions} or @code{image-file-name-regexps} | ||
| 3313 | control which file names are recognized as containing images. | ||
| 3314 | |||
| 3315 | The @kbd{M-x ffap} command generalizes @code{find-file} with more | 3316 | The @kbd{M-x ffap} command generalizes @code{find-file} with more |
| 3316 | powerful heuristic defaults (@pxref{FFAP}), often based on the text at | 3317 | powerful heuristic defaults (@pxref{FFAP}), often based on the text at |
| 3317 | point. Partial Completion mode offers other features extending | 3318 | point. Partial Completion mode offers other features extending |
| 3318 | @code{find-file}, which can be used with @code{ffap}. | 3319 | @code{find-file}, which can be used with @code{ffap}. |
| 3319 | @xref{Completion Options}. | 3320 | @xref{Completion Options}. |
| 3320 | 3321 | ||
| 3322 | @findex thumbs-mode | ||
| 3323 | @findex mode, thumbs | ||
| 3324 | Thumbs mode is a major mode for viewing directories containing many | ||
| 3325 | image files. To use it, type @kbd{M-x thumbs} and specify the | ||
| 3326 | directory to view. The images in that directory will be displayed in | ||
| 3327 | a @samp{Thumbs} buffer as @dfn{thumbnails}; type @kbd{RET} on a | ||
| 3328 | thumbnail to view the full-size image. Thumbs mode requires the | ||
| 3329 | @file{convert} program, which is part of the ImageMagick software | ||
| 3330 | package. | ||
| 3331 | |||
| 3321 | @ignore | 3332 | @ignore |
| 3322 | arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 | 3333 | arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 |
| 3323 | @end ignore | 3334 | @end ignore |
diff --git a/man/frames.texi b/man/frames.texi index edbda679b46..dee29afe050 100644 --- a/man/frames.texi +++ b/man/frames.texi | |||
| @@ -83,6 +83,18 @@ in between the mouse command and @key{DELETE}, it does not do this. | |||
| 83 | Move point to where you click (@code{mouse-set-point}). | 83 | Move point to where you click (@code{mouse-set-point}). |
| 84 | This is normally the left button. | 84 | This is normally the left button. |
| 85 | 85 | ||
| 86 | @vindex x-mouse-click-focus-ignore-position | ||
| 87 | Normally, Emacs does not distinguish between ordinary mouse clicks and | ||
| 88 | clicks that select a frame. When you click on a frame to select it, | ||
| 89 | that also changes the selected window and cursor position according to | ||
| 90 | the mouse click position. On the X window system, you can change this | ||
| 91 | behavior by setting the variable | ||
| 92 | @code{x-mouse-click-focus-ignore-position} to @code{t}. Then the | ||
| 93 | first click selects the frame, but does not affect the selected window | ||
| 94 | or cursor position. If you click again in the same place, since that | ||
| 95 | click will be in the selected frame, it will change the window or | ||
| 96 | cursor position. | ||
| 97 | |||
| 86 | @item Drag-Mouse-1 | 98 | @item Drag-Mouse-1 |
| 87 | Set the region to the text you select by dragging, and copy it to the | 99 | Set the region to the text you select by dragging, and copy it to the |
| 88 | kill ring (@code{mouse-set-region}). You can specify both ends of the | 100 | kill ring (@code{mouse-set-region}). You can specify both ends of the |
| @@ -96,6 +108,10 @@ entirely on the screen. The number of lines scrolled per step depends | |||
| 96 | on how far away from the window edge the mouse has gone; the variable | 108 | on how far away from the window edge the mouse has gone; the variable |
| 97 | @code{mouse-scroll-min-lines} specifies a minimum step size. | 109 | @code{mouse-scroll-min-lines} specifies a minimum step size. |
| 98 | 110 | ||
| 111 | @vindex mouse-drag-copy-region | ||
| 112 | If the variable @code{mouse-drag-copy-region} is @code{nil}, this | ||
| 113 | mouse command does not copy the selected region into the kill ring. | ||
| 114 | |||
| 99 | @item Mouse-2 | 115 | @item Mouse-2 |
| 100 | Yank the last killed text, where you click (@code{mouse-yank-at-click}). | 116 | Yank the last killed text, where you click (@code{mouse-yank-at-click}). |
| 101 | This is normally the middle button. | 117 | This is normally the middle button. |
diff --git a/man/gnus-faq.texi b/man/gnus-faq.texi index 42266aa4646..742227b64fc 100644 --- a/man/gnus-faq.texi +++ b/man/gnus-faq.texi | |||
| @@ -1,210 +1,203 @@ | |||
| 1 | @c Insert "\input texinfo" at 1st line before texing this file alone. | 1 | @c \input texinfo @c -*-texinfo-*- |
| 2 | @c -*-texinfo-*- | 2 | @c Uncomment 1st line before texing this file alone. |
| 3 | @c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. | 3 | @c %**start of header |
| 4 | @c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. | ||
| 5 | @c | ||
| 6 | @c Do not modify this file, it was generated from gnus-faq.xml, available from | ||
| 7 | @c <URL:http://my.gnus.org/FAQ/>. | ||
| 8 | @c | ||
| 4 | @setfilename gnus-faq.info | 9 | @setfilename gnus-faq.info |
| 5 | 10 | @settitle Frequently Asked Questions | |
| 6 | @c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top | 11 | @c %**end of header |
| 12 | @c | ||
| 7 | 13 | ||
| 8 | @node Frequently Asked Questions | 14 | @node Frequently Asked Questions |
| 9 | @comment node-name, next, previous, up | ||
| 10 | |||
| 11 | @c @chapter Frequently Asked Questions | ||
| 12 | @section Frequently Asked Questions | 15 | @section Frequently Asked Questions |
| 13 | @cindex FAQ | ||
| 14 | @cindex Frequently Asked Questions | ||
| 15 | |||
| 16 | @c - Uncomment @chapter, comment @section | ||
| 17 | @c - run (texinfo-every-node-update) | ||
| 18 | @c - revert it. | ||
| 19 | 16 | ||
| 20 | @menu | 17 | @menu |
| 21 | * FAQ - Introduction:: About Gnus and this FAQ. | 18 | * FAQ - Changes:: |
| 22 | * FAQ 1 - Installation:: Installation of Gnus. | 19 | * FAQ - Introduction:: About Gnus and this FAQ. |
| 23 | * FAQ 2 - Startup / Group buffer:: Start up questions and the first | 20 | * FAQ 1 - Installation FAQ:: Installation of Gnus. |
| 24 | buffer Gnus shows you. | 21 | * FAQ 2 - Startup / Group buffer:: Start up questions and the |
| 25 | * FAQ 3 - Getting messages:: Making Gnus read your mail and news. | 22 | first buffer Gnus shows you. |
| 26 | * FAQ 4 - Reading messages:: How to efficiently read messages. | 23 | * FAQ 3 - Getting Messages:: Making Gnus read your mail |
| 27 | * FAQ 5 - Composing messages:: Composing mails or Usenet postings. | 24 | and news. |
| 28 | * FAQ 6 - Old messages:: Importing, archiving, searching | 25 | * FAQ 4 - Reading messages:: How to efficiently read |
| 29 | and deleting messages. | 26 | messages. |
| 30 | * FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. | 27 | * FAQ 5 - Composing messages:: Composing mails or Usenet |
| 31 | * FAQ 8 - Getting help:: When this FAQ isn't enough. | 28 | postings. |
| 32 | * FAQ 9 - Tuning Gnus:: How to make Gnus faster. | 29 | * FAQ 6 - Old messages:: Importing, archiving, |
| 33 | * FAQ - Glossary:: Terms used in the FAQ explained. | 30 | searching and deleting messages. |
| 31 | * FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while | ||
| 32 | offline. | ||
| 33 | * FAQ 8 - Getting help:: When this FAQ isn't enough. | ||
| 34 | * FAQ 9 - Tuning Gnus:: How to make Gnus faster. | ||
| 35 | * FAQ - Glossary:: Terms used in the FAQ | ||
| 36 | explained. | ||
| 34 | @end menu | 37 | @end menu |
| 35 | 38 | ||
| 36 | |||
| 37 | @subheading Abstract | 39 | @subheading Abstract |
| 38 | 40 | ||
| 39 | This is the new Gnus Frequently Asked Questions list. If you have a | 41 | This is the new Gnus Frequently Asked Questions list. |
| 40 | Web browser, the official hypertext version is at | 42 | If you have a Web browser, the official hypertext version is at |
| 41 | @uref{http://my.gnus.org/FAQ/}, the Docbook source is available from | 43 | @uref{http://my.gnus.org/FAQ/}, |
| 42 | @uref{http://sourceforge.net/projects/gnus/}. | 44 | the Docbook source is available from |
| 43 | 45 | @uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}. | |
| 44 | 46 | ||
| 45 | Please submit features and suggestions to the | 47 | Please submit features and suggestions to the |
| 46 | @email{faq-discuss@@my.gnus.org,FAQ discussion list}. | 48 | @email{faq-discuss@@my.gnus.org, FAQ discussion list}. |
| 47 | The list is protected against junk mail with | 49 | The list is protected against junk mail with |
| 48 | @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As | 50 | @uref{http://smarden.org/qconfirm/index.html, qconfirm}. As |
| 49 | a subscriber, your submissions will automatically pass. You can | 51 | a subscriber, your submissions will automatically pass. You can |
| 50 | also subscribe to the list by sending a blank email to | 52 | also subscribe to the list by sending a blank email to |
| 51 | @email{faq-discuss-subscribe@@my.gnus.org} | 53 | @email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org} |
| 52 | and | 54 | and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse |
| 53 | @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse | 55 | the archive}. |
| 54 | the archive, browse the archive}. | ||
| 55 | |||
| 56 | @node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions | ||
| 57 | @comment node-name, next, previous, up | ||
| 58 | @heading Introduction | ||
| 59 | 56 | ||
| 60 | This is the Gnus Frequently Asked Questions list. | 57 | @node FAQ - Changes |
| 58 | @subheading Changes | ||
| 61 | 59 | ||
| 62 | Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented | ||
| 63 | as a part of Emacs. It's been around in some form for almost a decade | ||
| 64 | now, and has been distributed as a standard part of Emacs for much of | ||
| 65 | that time. Gnus 5 is the latest (and greatest) incarnation. The | ||
| 66 | original version was called GNUS, and was written by Masanobu UMEDA. | ||
| 67 | When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and | ||
| 68 | decided to rewrite Gnus. | ||
| 69 | |||
| 70 | Its biggest strength is the fact that it is extremely | ||
| 71 | customizable. It is somewhat intimidating at first glance, but | ||
| 72 | most of the complexity can be ignored until you're ready to take | ||
| 73 | advantage of it. If you receive a reasonable volume of e-mail | ||
| 74 | (you're on various mailing lists), or you would like to read | ||
| 75 | high-volume mailing lists but cannot keep up with them, or read | ||
| 76 | high volume newsgroups or are just bored, then Gnus is what you | ||
| 77 | want. | ||
| 78 | |||
| 79 | This FAQ was maintained by Justin Sheehy until March 2002. He | ||
| 80 | would like to thank Steve Baur and Per Abrahamsen for doing a wonderful | ||
| 81 | job with this FAQ before him. We would like to do the same - thanks, | ||
| 82 | Justin! | ||
| 83 | |||
| 84 | 60 | ||
| 85 | If you have a Web browser, the official hypertext version is at:@* | ||
| 86 | @uref{http://my.gnus.org/FAQ/}. | ||
| 87 | This version is much nicer than the unofficial hypertext | ||
| 88 | versions that are archived at Utrecht, Oxford, Smart Pages, Ohio | ||
| 89 | State, and other FAQ archives. See the resources question below | ||
| 90 | if you want information on obtaining it in another format. | ||
| 91 | |||
| 92 | 61 | ||
| 93 | The information contained here was compiled with the assistance | 62 | @itemize @bullet |
| 94 | of the Gnus development mailing list, and any errors or | 63 | |
| 95 | misprints are the my.gnus.org team's fault, sorry. | 64 | @item |
| 65 | Updated FAQ to reflect release of Gnus 5.10 and start of | ||
| 66 | No Gnus development. | ||
| 67 | @end itemize | ||
| 96 | 68 | ||
| 69 | @node FAQ - Introduction | ||
| 70 | @subheading Introduction | ||
| 71 | |||
| 72 | This is the Gnus Frequently Asked Questions list. | ||
| 97 | 73 | ||
| 98 | @ifnottex | 74 | Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented |
| 99 | @node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions | 75 | as a part of Emacs. It's been around in some form for almost a decade |
| 100 | @end ifnottex | 76 | now, and has been distributed as a standard part of Emacs for much of |
| 101 | @subsection Installation | 77 | that time. Gnus 5 is the latest (and greatest) incarnation. The |
| 78 | original version was called GNUS, and was written by Masanobu UMEDA. | ||
| 79 | When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and | ||
| 80 | decided to rewrite Gnus. | ||
| 81 | |||
| 82 | Its biggest strength is the fact that it is extremely | ||
| 83 | customizable. It is somewhat intimidating at first glance, but | ||
| 84 | most of the complexity can be ignored until you're ready to take | ||
| 85 | advantage of it. If you receive a reasonable volume of e-mail | ||
| 86 | (you're on various mailing lists), or you would like to read | ||
| 87 | high-volume mailing lists but cannot keep up with them, or read | ||
| 88 | high volume newsgroups or are just bored, then Gnus is what you | ||
| 89 | want. | ||
| 90 | |||
| 91 | This FAQ was maintained by Justin Sheehy until March 2002. He | ||
| 92 | would like to thank Steve Baur and Per Abrahamsen for doing a wonderful | ||
| 93 | job with this FAQ before him. We would like to do the same - thanks, | ||
| 94 | Justin! | ||
| 95 | |||
| 96 | If you have a Web browser, the official hypertext version is at: | ||
| 97 | @uref{http://my.gnus.org/FAQ/}. | ||
| 98 | This version is much nicer than the unofficial hypertext | ||
| 99 | versions that are archived at Utrecht, Oxford, Smart Pages, Ohio | ||
| 100 | State, and other FAQ archives. See the resources question below | ||
| 101 | if you want information on obtaining it in another format. | ||
| 102 | |||
| 103 | The information contained here was compiled with the assistance | ||
| 104 | of the Gnus development mailing list, and any errors or | ||
| 105 | misprints are the my.gnus.org team's fault, sorry. | ||
| 106 | |||
| 107 | @node FAQ 1 - Installation FAQ | ||
| 108 | @subsection Installation FAQ | ||
| 102 | 109 | ||
| 103 | @menu | 110 | @menu |
| 104 | * [1.1]:: What is the latest version of Gnus? | 111 | * [1.1]:: What is the latest version of Gnus? |
| 105 | * [1.2]:: What's new in 5.10? | 112 | * [1.2]:: What's new in 5.10? |
| 106 | * [1.3]:: Where and how to get Gnus? | 113 | * [1.3]:: Where and how to get Gnus? |
| 107 | * [1.4]:: What to do with the tarball now? | 114 | * [1.4]:: What to do with the tarball now? |
| 108 | * [1.5]:: Which version of Emacs do I need? | 115 | * [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what |
| 109 | * [1.6]:: How do I run Gnus on both Emacs and XEmacs? | 116 | are those? |
| 117 | * [1.6]:: Which version of Emacs do I need? | ||
| 118 | * [1.7]:: How do I run Gnus on both Emacs and XEmacs? | ||
| 110 | @end menu | 119 | @end menu |
| 111 | 120 | ||
| 112 | 121 | @node [1.1] | |
| 113 | @ifnottex | 122 | @subsubheading Question 1.1 |
| 114 | @node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation | ||
| 115 | @end ifnottex | ||
| 116 | @subsubheading Question 1.1: | ||
| 117 | 123 | ||
| 118 | What is the latest version of Gnus? | 124 | What is the latest version of Gnus? |
| 119 | 125 | ||
| 120 | Answer: | 126 | @subsubheading Answer |
| 121 | 127 | ||
| 122 | Jingle please: Gnus 5.10 is released, get it while it's | 128 | Jingle please: Gnus 5.10 is released, get it while it's |
| 123 | hot! As well as the step in version number is rather | 129 | hot! As well as the step in version number is rather |
| 124 | small, Gnus 5.10 has tons of new features which you | 130 | small, Gnus 5.10 has tons of new features which you |
| 125 | shouldn't miss, however if you are cautious, you might | 131 | shouldn't miss. The current release (5.10.6) should be at |
| 126 | prefer to stay with 5.8.8 respectively 5.9 (they are | 132 | least as stable as the latest release of the 5.8 series. |
| 127 | basically the same) until some bugfix releases are out. | ||
| 128 | |||
| 129 | @ifnottex | ||
| 130 | @node [1.2], [1.3], [1.1], FAQ 1 - Installation | ||
| 131 | @end ifnottex | ||
| 132 | @subsubheading Question 1.2: | ||
| 133 | 133 | ||
| 134 | What's new in 5.10? | 134 | @node [1.2] |
| 135 | @subsubheading Question 1.2 | ||
| 135 | 136 | ||
| 136 | Answer: | 137 | What's new in 5.10? |
| 137 | 138 | ||
| 138 | First of all, you should have a look into the file | 139 | @subsubheading Answer |
| 139 | GNUS-NEWS in the toplevel directory of the Gnus tarball, | ||
| 140 | there the most important changes are listed. Here's a | ||
| 141 | short list of the changes I find especially | ||
| 142 | important/interesting: | ||
| 143 | |||
| 144 | 140 | ||
| 145 | 141 | First of all, you should have a look into the file | |
| 142 | GNUS-NEWS in the toplevel directory of the Gnus tarball, | ||
| 143 | there the most important changes are listed. Here's a | ||
| 144 | short list of the changes I find especially | ||
| 145 | important/interesting: | ||
| 146 | 146 | ||
| 147 | @itemize @bullet{} | 147 | @itemize @bullet |
| 148 | 148 | ||
| 149 | @item | 149 | @item |
| 150 | Major rewrite of the Gnus agent, Gnus agent is now | 150 | Major rewrite of the Gnus agent, Gnus agent is now |
| 151 | active by default. | 151 | active by default. |
| 152 | 152 | ||
| 153 | @item | 153 | @item |
| 154 | Many new article washing functions for dealing with | 154 | Many new article washing functions for dealing with |
| 155 | ugly formatted articles. | 155 | ugly formatted articles. |
| 156 | 156 | ||
| 157 | @item | 157 | @item |
| 158 | Anti Spam features. | 158 | Anti Spam features. |
| 159 | 159 | ||
| 160 | @item | 160 | @item |
| 161 | message-utils now included in Gnus. | 161 | Message-utils now included in Gnus. |
| 162 | 162 | ||
| 163 | @item | 163 | @item |
| 164 | New format specifiers for summary lines, e.g. %B for | 164 | New format specifiers for summary lines, e.g. %B for |
| 165 | a complex trn-style thread tree. | 165 | a complex trn-style thread tree. |
| 166 | |||
| 167 | @end itemize | 166 | @end itemize |
| 168 | 167 | ||
| 169 | @ifnottex | 168 | @node [1.3] |
| 170 | @node [1.3], [1.4], [1.2], FAQ 1 - Installation | 169 | @subsubheading Question 1.3 |
| 171 | @end ifnottex | ||
| 172 | @subsubheading Question 1.3: | ||
| 173 | 170 | ||
| 174 | Where and how to get Gnus? | 171 | Where and how to get Gnus? |
| 175 | 172 | ||
| 176 | Answer: | 173 | @subsubheading Answer |
| 177 | 174 | ||
| 178 | The latest released version of Gnus isn't included in | 175 | The latest released version of Gnus isn't included in |
| 179 | Emacs 21 and until now it also isn't available through the | 176 | Emacs 21, therefor you should get the Gnus tarball from |
| 180 | package system of XEmacs 21.4, therefor you should get the | 177 | @uref{http://www.gnus.org/dist/gnus.tar.gz} |
| 181 | Gnus tarball from | 178 | or via anonymous FTP from |
| 182 | @uref{http://www.gnus.org/dist/gnus.tar.gz} | 179 | @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. |
| 183 | or via anonymous FTP from | 180 | If you use XEmacs instead of Emacs you can use XEmacs' |
| 184 | @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. | 181 | package system instead. |
| 185 | |||
| 186 | @ifnottex | ||
| 187 | @node [1.4], [1.5], [1.3], FAQ 1 - Installation | ||
| 188 | @end ifnottex | ||
| 189 | @subsubheading Question 1.4: | ||
| 190 | 182 | ||
| 191 | What to do with the tarball now? | 183 | @node [1.4] |
| 192 | 184 | @subsubheading Question 1.4 | |
| 193 | 185 | ||
| 194 | Answer: | 186 | What to do with the tarball now? |
| 195 | 187 | ||
| 196 | Untar it via @samp{tar xvzf gnus.tar.gz} and do the common | 188 | @subsubheading Answer |
| 197 | @samp{./configure; make; make install} circle. | 189 | |
| 198 | (under MS-Windows either get the Cygwin environment from | 190 | Untar it via @samp{tar xvzf gnus.tar.gz} and do the common |
| 199 | @uref{http://www.cygwin.com} | 191 | @samp{./configure; make; make install} circle. |
| 200 | which allows you to do what's described above or unpack the | 192 | (under MS-Windows either get the Cygwin environment from |
| 201 | tarball with some packer (e.g. Winace from | 193 | @uref{http://www.cygwin.com} |
| 202 | @uref{http://www.winace.com}) | 194 | which allows you to do what's described above or unpack the |
| 203 | and use the batch-file make.bat included in the tarball to install | 195 | tarball with some packer (e.g. Winace from |
| 204 | Gnus. If you don't want to (or aren't allowed to) install Gnus | 196 | @uref{http://www.winace.com}) |
| 205 | system-wide, you can install it in your home directory and add the | 197 | and use the batch-file make.bat included in the tarball to install |
| 206 | following lines to your ~/.xemacs/init.el or ~/.emacs: | 198 | Gnus.) If you don't want to (or aren't allowed to) install Gnus |
| 207 | 199 | system-wide, you can install it in your home directory and add the | |
| 200 | following lines to your ~/.xemacs/init.el or ~/.emacs: | ||
| 208 | 201 | ||
| 209 | @example | 202 | @example |
| 210 | (add-to-list 'load-path "/path/to/gnus/lisp") | 203 | (add-to-list 'load-path "/path/to/gnus/lisp") |
| @@ -212,436 +205,395 @@ Answer: | |||
| 212 | (add-to-list 'Info-directory-list "/path/to/gnus/texi/") | 205 | (add-to-list 'Info-directory-list "/path/to/gnus/texi/") |
| 213 | (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) | 206 | (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) |
| 214 | @end example | 207 | @end example |
| 215 | |||
| 216 | @noindent | 208 | @noindent |
| 217 | Make sure that you don't have any Gnus related stuff | 209 | |
| 218 | before this line, on MS Windows use something like | 210 | Make sure that you don't have any Gnus related stuff |
| 219 | "C:/path/to/lisp" (yes, "/"). | 211 | before this line, on MS Windows use something like |
| 220 | 212 | "C:/path/to/lisp" (yes, "/"). | |
| 221 | @ifnottex | 213 | |
| 222 | @node [1.5], [1.6], [1.4], FAQ 1 - Installation | 214 | @node [1.5] |
| 223 | @end ifnottex | 215 | @subsubheading Question 1.5 |
| 224 | @subsubheading Question 1.5: | 216 | |
| 217 | I sometimes read references to No Gnus and Oort Gnus, | ||
| 218 | what are those? | ||
| 219 | |||
| 220 | @subsubheading Answer | ||
| 221 | |||
| 222 | Oort Gnus was the name of the development version of | ||
| 223 | Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is | ||
| 224 | the name of the current development version which will | ||
| 225 | once become Gnus 5.12 or Gnus 6. (If you're wondering why | ||
| 226 | not 5.11, the odd version numbers are normally used for | ||
| 227 | the Gnus versions bundled with Emacs) | ||
| 228 | |||
| 229 | @node [1.6] | ||
| 230 | @subsubheading Question 1.6 | ||
| 225 | 231 | ||
| 226 | Which version of Emacs do I need? | 232 | Which version of Emacs do I need? |
| 227 | 233 | ||
| 228 | Answer: | 234 | @subsubheading Answer |
| 229 | 235 | ||
| 230 | Gnus 5.10 requires an Emacs version that is greater | 236 | Gnus 5.10 requires an Emacs version that is greater |
| 231 | than or equal to Emacs 20.7 or XEmacs 21.1. | 237 | than or equal to Emacs 20.7 or XEmacs 21.1. The |
| 232 | 238 | development versions of Gnus (aka No Gnus) require Emacs | |
| 233 | @ifnottex | 239 | 21 or XEmacs 21.4. |
| 234 | @node [1.6], , [1.5], FAQ 1 - Installation | 240 | |
| 235 | @end ifnottex | 241 | @node [1.7] |
| 236 | @subsubheading Question 1.6: | 242 | @subsubheading Question 1.7 |
| 237 | 243 | ||
| 238 | How do I run Gnus on both Emacs and XEmacs? | 244 | How do I run Gnus on both Emacs and XEmacs? |
| 239 | 245 | ||
| 240 | Answer: | 246 | @subsubheading Answer |
| 241 | 247 | ||
| 242 | You can't use the same copy of Gnus in both as the Lisp | 248 | You can't use the same copy of Gnus in both as the Lisp |
| 243 | files are byte-compiled to a format which is different | 249 | files are byte-compiled to a format which is different |
| 244 | depending on which Emacs did the compilation. Get one copy | 250 | depending on which Emacs did the compilation. Get one copy |
| 245 | of Gnus for Emacs and one for XEmacs. | 251 | of Gnus for Emacs and one for XEmacs. |
| 246 | 252 | ||
| 247 | @ifnottex | 253 | @node FAQ 2 - Startup / Group buffer |
| 248 | @node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions | ||
| 249 | @end ifnottex | ||
| 250 | @subsection Startup / Group buffer | 254 | @subsection Startup / Group buffer |
| 251 | 255 | ||
| 252 | @menu | 256 | @menu |
| 253 | * [2.1]:: Every time I start Gnus I get a message | 257 | * [2.1]:: Every time I start Gnus I get a message "Gnus auto-save |
| 254 | "Gnus auto-save file exists. Do you want to read it?", | 258 | file exists. Do you want to read it?", what does this mean and |
| 255 | what does this mean and how to prevent it? | 259 | how to prevent it? |
| 256 | * [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? | 260 | * [2.2]:: Gnus doesn't remember which groups I'm subscribed to, |
| 257 | * [2.3]:: How to change the format of the lines in Group buffer? | 261 | what's this? |
| 258 | * [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my | 262 | * [2.3]:: How to change the format of the lines in Group buffer? |
| 259 | groups into categories so I can easier browse through them? | 263 | * [2.4]:: My group buffer becomes a bit crowded, is there a way to |
| 260 | * [2.5]:: How to manually sort the groups in Group buffer? How to sort the | 264 | sort my groups into categories so I can easier browse through |
| 261 | groups in a topic? | 265 | them? |
| 266 | * [2.5]:: How to manually sort the groups in Group buffer? How to | ||
| 267 | sort the groups in a topic? | ||
| 262 | @end menu | 268 | @end menu |
| 263 | 269 | ||
| 264 | @ifnottex | 270 | @node [2.1] |
| 265 | @node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer | 271 | @subsubheading Question 2.1 |
| 266 | @end ifnottex | ||
| 267 | @subsubheading Question 2.1: | ||
| 268 | 272 | ||
| 269 | Every time I start Gnus I get a message "Gnus auto-save | 273 | Every time I start Gnus I get a message "Gnus auto-save |
| 270 | file exists. Do you want to read it?", what does this mean | 274 | file exists. Do you want to read it?", what does this mean |
| 271 | and how to prevent it? | 275 | and how to prevent it? |
| 272 | |||
| 273 | 276 | ||
| 274 | Answer: | 277 | @subsubheading Answer |
| 275 | 278 | ||
| 276 | This message means that the last time you used Gnus, it | 279 | This message means that the last time you used Gnus, it |
| 277 | wasn't properly exited and therefor couldn't write its | 280 | wasn't properly exited and therefor couldn't write its |
| 278 | informations to disk (e.g. which messages you read), you | 281 | informations to disk (e.g. which messages you read), you |
| 279 | are now asked if you want to restore those informations | 282 | are now asked if you want to restore those informations |
| 280 | from the auto-save file. | 283 | from the auto-save file. |
| 281 | |||
| 282 | 284 | ||
| 283 | To prevent this message make sure you exit Gnus | 285 | To prevent this message make sure you exit Gnus |
| 284 | via @samp{q} in group buffer instead of | 286 | via @samp{q} in group buffer instead of |
| 285 | just killing Emacs. | 287 | just killing Emacs. |
| 286 | |||
| 287 | @ifnottex | ||
| 288 | @node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer | ||
| 289 | @end ifnottex | ||
| 290 | @subsubheading Question: 2.2 | ||
| 291 | 288 | ||
| 292 | Gnus doesn't remember which groups I'm subscribed to, | 289 | @node [2.2] |
| 293 | what's this? | 290 | @subsubheading Question 2.2 |
| 294 | |||
| 295 | 291 | ||
| 296 | Answer: | 292 | Gnus doesn't remember which groups I'm subscribed to, |
| 293 | what's this? | ||
| 297 | 294 | ||
| 298 | You get the message described in the q/a pair above while | 295 | @subsubheading Answer |
| 299 | starting Gnus, right? It's an other symptom for the same | ||
| 300 | problem, so read the answer above. | ||
| 301 | |||
| 302 | @ifnottex | ||
| 303 | @node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer | ||
| 304 | @end ifnottex | ||
| 305 | @subsubheading Question 2.3: | ||
| 306 | 296 | ||
| 307 | How to change the format of the lines in Group buffer? | 297 | You get the message described in the q/a pair above while |
| 308 | 298 | starting Gnus, right? It's an other symptom for the same | |
| 299 | problem, so read the answer above. | ||
| 309 | 300 | ||
| 310 | Answer: | 301 | @node [2.3] |
| 302 | @subsubheading Question 2.3 | ||
| 311 | 303 | ||
| 312 | You've got to tweak the value of the variable | 304 | How to change the format of the lines in Group buffer? |
| 313 | gnus-group-line-format. See the manual node "Group Line | ||
| 314 | Specification" for information on how to do this. An | ||
| 315 | example for this (guess from whose .gnus :-)): | ||
| 316 | |||
| 317 | 305 | ||
| 318 | @example | 306 | @subsubheading Answer |
| 319 | 307 | ||
| 308 | You've got to tweak the value of the variable | ||
| 309 | gnus-group-line-format. See the manual node "Group Line | ||
| 310 | Specification" for information on how to do this. An | ||
| 311 | example for this (guess from whose .gnus :-)): | ||
| 312 | |||
| 313 | @example | ||
| 320 | (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") | 314 | (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") |
| 321 | |||
| 322 | @end example | 315 | @end example |
| 323 | 316 | @noindent | |
| 324 | @ifnottex | ||
| 325 | @node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer | ||
| 326 | @end ifnottex | ||
| 327 | @subsubheading Question 2.4: | ||
| 328 | |||
| 329 | My group buffer becomes a bit crowded, is there a way to | ||
| 330 | sort my groups into categories so I can easier browse | ||
| 331 | through them? | ||
| 332 | |||
| 333 | 317 | ||
| 334 | Answer: | 318 | @node [2.4] |
| 319 | @subsubheading Question 2.4 | ||
| 335 | 320 | ||
| 336 | Gnus offers the topic mode, it allows you to sort your | 321 | My group buffer becomes a bit crowded, is there a way to |
| 337 | groups in, well, topics, e.g. all groups dealing with | 322 | sort my groups into categories so I can easier browse |
| 338 | Linux under the topic linux, all dealing with music under | 323 | through them? |
| 339 | the topic music and all dealing with scottish music under | ||
| 340 | the topic scottish which is a subtopic of music. | ||
| 341 | |||
| 342 | 324 | ||
| 343 | To enter topic mode, just hit t while in Group buffer. Now | 325 | @subsubheading Answer |
| 344 | you can use @samp{T n} to create a topic | ||
| 345 | at point and @samp{T m} to move a group to | ||
| 346 | a specific topic. For more commands see the manual or the | ||
| 347 | menu. You might want to include the %P specifier at the | ||
| 348 | beginning of your gnus-group-line-format variable to have | ||
| 349 | the groups nicely indented. | ||
| 350 | |||
| 351 | @ifnottex | ||
| 352 | @node [2.5], , [2.4], FAQ 2 - Startup / Group buffer | ||
| 353 | @end ifnottex | ||
| 354 | @subsubheading Question 2.5: | ||
| 355 | 326 | ||
| 356 | How to manually sort the groups in Group buffer? How to | 327 | Gnus offers the topic mode, it allows you to sort your |
| 357 | sort the groups in a topic? | 328 | groups in, well, topics, e.g. all groups dealing with |
| 358 | 329 | Linux under the topic linux, all dealing with music under | |
| 330 | the topic music and all dealing with scottish music under | ||
| 331 | the topic scottish which is a subtopic of music. | ||
| 359 | 332 | ||
| 360 | Answer: | 333 | To enter topic mode, just hit t while in Group buffer. Now |
| 334 | you can use @samp{T n} to create a topic | ||
| 335 | at point and @samp{T m} to move a group to | ||
| 336 | a specific topic. For more commands see the manual or the | ||
| 337 | menu. You might want to include the %P specifier at the | ||
| 338 | beginning of your gnus-group-line-format variable to have | ||
| 339 | the groups nicely indented. | ||
| 361 | 340 | ||
| 362 | Move point over the group you want to move and | 341 | @node [2.5] |
| 363 | hit @samp{C-k}, now move point to the | 342 | @subsubheading Question 2.5 |
| 364 | place where you want the group to be and | 343 | |
| 365 | hit @samp{C-y}. | 344 | How to manually sort the groups in Group buffer? How to |
| 366 | 345 | sort the groups in a topic? | |
| 367 | @ifnottex | 346 | |
| 368 | @node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions | 347 | @subsubheading Answer |
| 369 | @end ifnottex | 348 | |
| 370 | @subsection Getting messages | 349 | Move point over the group you want to move and |
| 350 | hit @samp{C-k}, now move point to the | ||
| 351 | place where you want the group to be and | ||
| 352 | hit @samp{C-y}. | ||
| 353 | |||
| 354 | @node FAQ 3 - Getting Messages | ||
| 355 | @subsection Getting Messages | ||
| 371 | 356 | ||
| 372 | @menu | 357 | @menu |
| 373 | * [3.1]:: I just installed Gnus, started it via M-x gnus but it only says | 358 | * [3.1]:: I just installed Gnus, started it via @samp{M-x gnus} |
| 374 | "nntp (news) open error", what to do? | 359 | but it only says "nntp (news) open error", what to do? |
| 375 | * [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. | 360 | * [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el |
| 376 | * [3.3]:: My news server requires authentication, how to store user name | 361 | means. |
| 377 | and password on disk? | 362 | * [3.3]:: My news server requires authentication, how to store user |
| 378 | * [3.4]:: Gnus seems to start up OK, but I can't find out how to | 363 | name and password on disk? |
| 379 | subscribe to a group. | 364 | * [3.4]:: Gnus seems to start up OK, but I can't find out how to |
| 380 | * [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to | 365 | subscribe to a group. |
| 381 | post on this server as well as I am, what's that? | 366 | * [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed |
| 382 | * [3.6]:: I want Gnus to fetch news from several servers, is this possible? | 367 | to post on this server as well as I am, what's that? |
| 383 | * [3.7]:: And how about local spool files? | 368 | * [3.6]:: I want Gnus to fetch news from several servers, is this |
| 384 | * [3.8]:: OK, reading news works now, but I want to be able to read my mail | 369 | possible? |
| 385 | with Gnus, too. How to do it? | 370 | * [3.7]:: And how about local spool files? |
| 386 | * [3.9]:: And what about IMAP? | 371 | * [3.8]:: OK, reading news works now, but I want to be able to read |
| 387 | * [3.10]:: At the office we use one of those MS Exchange servers, | 372 | my mail with Gnus, too. How to do it? |
| 388 | can I use Gnus to read my mail from it? | 373 | * [3.9]:: And what about IMAP? |
| 389 | * [3.11]:: Can I tell Gnus not to delete the mails on the server | 374 | * [3.10]:: At the office we use one of those MS Exchange servers, can |
| 390 | it retrieves via POP3? | 375 | I use Gnus to read my mail from it? |
| 376 | * [3.11]:: Can I tell Gnus not to delete the mails on the server it | ||
| 377 | retrieves via POP3? | ||
| 391 | @end menu | 378 | @end menu |
| 392 | 379 | ||
| 393 | @ifnottex | 380 | @node [3.1] |
| 394 | @node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages | 381 | @subsubheading Question 3.1 |
| 395 | @end ifnottex | ||
| 396 | @subsubheading Question 3.1: | ||
| 397 | 382 | ||
| 398 | I just installed Gnus, started it via | 383 | I just installed Gnus, started it via |
| 399 | @samp{M-x gnus} | 384 | @samp{M-x gnus} |
| 400 | but it only says "nntp (news) open error", what to do? | 385 | but it only says "nntp (news) open error", what to do? |
| 401 | |||
| 402 | 386 | ||
| 403 | Answer: | 387 | @subsubheading Answer |
| 404 | 388 | ||
| 405 | You've got to tell Gnus where to fetch the news from. Read | 389 | You've got to tell Gnus where to fetch the news from. Read |
| 406 | the documentation for information on how to do this. As a | 390 | the documentation for information on how to do this. As a |
| 407 | first start, put those lines in ~/.gnus: | 391 | first start, put those lines in ~/.gnus.el: |
| 408 | |||
| 409 | 392 | ||
| 410 | @example | 393 | @example |
| 411 | (setq gnus-select-method '(nntp "news.yourprovider.net")) | 394 | (setq gnus-select-method '(nntp "news.yourprovider.net")) |
| 412 | (setq user-mail-address "you@@yourprovider.net") | 395 | (setq user-mail-address "you@@yourprovider.net") |
| 413 | (setq user-full-name "Your Name") | 396 | (setq user-full-name "Your Name") |
| 414 | @end example | 397 | @end example |
| 415 | 398 | @noindent | |
| 416 | @ifnottex | ||
| 417 | @node [3.2], [3.3], [3.1], FAQ 3 - Getting messages | ||
| 418 | @end ifnottex | ||
| 419 | @subsubheading Question 3.2: | ||
| 420 | |||
| 421 | I'm working under Windows and have no idea what ~/.gnus means. | ||
| 422 | |||
| 423 | 399 | ||
| 424 | Answer: | 400 | @node [3.2] |
| 425 | 401 | @subsubheading Question 3.2 | |
| 426 | The ~/ means the home directory where Gnus and Emacs look for the | 402 | |
| 427 | configuration files. However, you don't really need to know what this | 403 | I'm working under Windows and have no idea what ~/.gnus.el means. |
| 428 | means, it suffices that Emacs knows what it means :-) You can type | 404 | |
| 429 | @samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on | 405 | @subsubheading Answer |
| 430 | Windows), and Emacs will open the right file for you. (It will most | 406 | |
| 431 | likely be new, and thus empty.) However, I'd discourage you from | 407 | The ~/ means the home directory where Gnus and Emacs look |
| 432 | doing so, since the directory Emacs chooses will most certainly not be | 408 | for the configuration files. However, you don't really |
| 433 | what you want, so let's do it the correct way. The first thing you've | 409 | need to know what this means, it suffices that Emacs knows |
| 434 | got to do is to create a suitable directory (no blanks in directory | 410 | what it means :-) You can type |
| 435 | name please) e.g. @file{c:\myhome}. Then you must set the environment | 411 | @samp{C-x C-f ~/.gnus.el RET } |
| 436 | variable HOME to this directory. To do this under Win9x or Me include | 412 | (yes, with the forward slash, even on Windows), and |
| 437 | the line | 413 | Emacs will open the right file for you. (It will most |
| 438 | 414 | likely be new, and thus empty.) | |
| 415 | However, I'd discourage you from doing so, since the | ||
| 416 | directory Emacs chooses will most certainly not be what | ||
| 417 | you want, so let's do it the correct way. | ||
| 418 | The first thing you've got to do is to | ||
| 419 | create a suitable directory (no blanks in directory name | ||
| 420 | please) e.g. c:\myhome. Then you must set the environment | ||
| 421 | variable HOME to this directory. To do this under Win9x | ||
| 422 | or Me include the line | ||
| 439 | 423 | ||
| 440 | @example | 424 | @example |
| 441 | |||
| 442 | SET HOME=C:\myhome | 425 | SET HOME=C:\myhome |
| 443 | |||
| 444 | @end example | 426 | @end example |
| 445 | |||
| 446 | @noindent | 427 | @noindent |
| 447 | in your autoexec.bat and reboot. Under NT, 2000 and XP, | ||
| 448 | hit Winkey+Pause/Break to enter system options (if it | ||
| 449 | doesn't work, go to Control Panel -> System). There you'll | ||
| 450 | find the possibility to set environment variables, create | ||
| 451 | a new one with name HOME and value @file{c:\myhome}, a reboot is | ||
| 452 | not necessary. | ||
| 453 | |||
| 454 | 428 | ||
| 455 | Now to create ~/.gnus, say | 429 | in your autoexec.bat and reboot. Under NT, 2000 and XP, |
| 456 | @samp{C-x C-f ~/.gnus RET C-x C-s}. | 430 | hit Winkey+Pause/Break to enter system options (if it |
| 457 | in Emacs. | 431 | doesn't work, go to Control Panel -> System). There you'll |
| 458 | 432 | find the possibility to set environment variables, create | |
| 459 | @ifnottex | 433 | a new one with name HOME and value C:\myhome, a reboot is |
| 460 | @node [3.3], [3.4], [3.2], FAQ 3 - Getting messages | 434 | not necessary. |
| 461 | @end ifnottex | ||
| 462 | @subsubheading Question 3.3: | ||
| 463 | 435 | ||
| 464 | My news server requires authentication, how to store | 436 | Now to create ~/.gnus.el, say |
| 465 | user name and password on disk? | 437 | @samp{C-x C-f ~/.gnus.el RET C-x C-s}. |
| 466 | 438 | in Emacs. | |
| 467 | 439 | ||
| 468 | Answer: | 440 | @node [3.3] |
| 441 | @subsubheading Question 3.3 | ||
| 469 | 442 | ||
| 470 | Create a file ~/.authinfo which includes for each server a line like this | 443 | My news server requires authentication, how to store |
| 471 | 444 | user name and password on disk? | |
| 445 | |||
| 446 | @subsubheading Answer | ||
| 447 | |||
| 448 | Create a file ~/.authinfo which includes for each server a line like this | ||
| 472 | 449 | ||
| 473 | @example | 450 | @example |
| 474 | machine news.yourprovider.net login YourUserName password YourPassword | 451 | machine news.yourprovider.net login YourUserName password YourPassword |
| 475 | @end example | 452 | @end example |
| 476 | |||
| 477 | @noindent | 453 | @noindent |
| 478 | . | 454 | . |
| 479 | Make sure that the file isn't readable to others if you | 455 | Make sure that the file isn't readable to others if you |
| 480 | work on a OS which is capable of doing so. (Under Unix | 456 | work on a OS which is capable of doing so. (Under Unix |
| 481 | say | 457 | say |
| 482 | |||
| 483 | @example | 458 | @example |
| 484 | chmod 600 ~/.authinfo | 459 | chmod 600 ~/.authinfo |
| 485 | @end example | 460 | @end example |
| 486 | |||
| 487 | @noindent | 461 | @noindent |
| 488 | in a shell.) | ||
| 489 | |||
| 490 | @ifnottex | ||
| 491 | @node [3.4], [3.5], [3.3], FAQ 3 - Getting messages | ||
| 492 | @end ifnottex | ||
| 493 | @subsubheading Question 3.4: | ||
| 494 | 462 | ||
| 495 | Gnus seems to start up OK, but I can't find out how to | 463 | in a shell.) |
| 496 | subscribe to a group. | ||
| 497 | |||
| 498 | 464 | ||
| 499 | Answer: | 465 | @node [3.4] |
| 466 | @subsubheading Question 3.4 | ||
| 500 | 467 | ||
| 501 | If you know the name of the group say @samp{U | 468 | Gnus seems to start up OK, but I can't find out how to |
| 502 | name.of.group RET} in group buffer (use the | 469 | subscribe to a group. |
| 503 | tab-completion Luke). Otherwise hit ^ in group buffer, | ||
| 504 | this brings you to the server buffer. Now place point (the | ||
| 505 | cursor) over the server which carries the group you want, | ||
| 506 | hit @samp{RET}, move point to the group | ||
| 507 | you want to subscribe to and say @samp{u} | ||
| 508 | to subscribe to it. | ||
| 509 | |||
| 510 | @ifnottex | ||
| 511 | @node [3.5], [3.6], [3.4], FAQ 3 - Getting messages | ||
| 512 | @end ifnottex | ||
| 513 | @subsubheading Question 3.5: | ||
| 514 | 470 | ||
| 515 | Gnus doesn't show all groups / Gnus says I'm not allowed to | 471 | @subsubheading Answer |
| 516 | post on this server as well as I am, what's that? | ||
| 517 | |||
| 518 | 472 | ||
| 519 | Answer: | 473 | If you know the name of the group say @samp{U |
| 474 | name.of.group RET} in group buffer (use the | ||
| 475 | tab-completion Luke). Otherwise hit ^ in group buffer, | ||
| 476 | this brings you to the server buffer. Now place point (the | ||
| 477 | cursor) over the server which carries the group you want, | ||
| 478 | hit @samp{RET}, move point to the group | ||
| 479 | you want to subscribe to and say @samp{u} | ||
| 480 | to subscribe to it. | ||
| 520 | 481 | ||
| 521 | Some providers allow restricted anonymous access and full | 482 | @node [3.5] |
| 522 | access only after authorization. To make Gnus send authinfo | 483 | @subsubheading Question 3.5 |
| 523 | to those servers append | 484 | |
| 524 | 485 | Gnus doesn't show all groups / Gnus says I'm not allowed to | |
| 486 | post on this server as well as I am, what's that? | ||
| 487 | |||
| 488 | @subsubheading Answer | ||
| 489 | |||
| 490 | Some providers allow restricted anonymous access and full | ||
| 491 | access only after authorization. To make Gnus send authinfo | ||
| 492 | to those servers append | ||
| 525 | 493 | ||
| 526 | @example | 494 | @example |
| 527 | force yes | 495 | force yes |
| 528 | @end example | 496 | @end example |
| 529 | |||
| 530 | |||
| 531 | @noindent | 497 | @noindent |
| 532 | to the line for those servers in ~/.authinfo. | ||
| 533 | 498 | ||
| 534 | @ifnottex | 499 | to the line for those servers in ~/.authinfo. |
| 535 | @node [3.6], [3.7], [3.5], FAQ 3 - Getting messages | ||
| 536 | @end ifnottex | ||
| 537 | @subsubheading Question 3.6: | ||
| 538 | 500 | ||
| 539 | I want Gnus to fetch news from several servers, is this possible? | 501 | @node [3.6] |
| 540 | 502 | @subsubheading Question 3.6 | |
| 541 | 503 | ||
| 542 | Answer: | 504 | I want Gnus to fetch news from several servers, is this possible? |
| 543 | 505 | ||
| 544 | Of course. You can specify more sources for articles in the | 506 | @subsubheading Answer |
| 545 | variable gnus-secondary-select-methods. Add something like | 507 | |
| 546 | this in ~/.gnus: | 508 | Of course. You can specify more sources for articles in the |
| 547 | 509 | variable gnus-secondary-select-methods. Add something like | |
| 510 | this in ~/.gnus.el: | ||
| 548 | 511 | ||
| 549 | @example | 512 | @example |
| 550 | (add-to-list 'gnus-secondary-select-methods | 513 | (add-to-list 'gnus-secondary-select-methods |
| 551 | '(nntp "news.yourSecondProvider.net")) | 514 | '(nntp "news.yourSecondProvider.net")) |
| 552 | (add-to-list 'gnus-secondary-select-methods | 515 | (add-to-list 'gnus-secondary-select-methods |
| 553 | '(nntp "news.yourThirdProvider.net")) | 516 | '(nntp "news.yourThirdProvider.net")) |
| 554 | @end example | 517 | @end example |
| 555 | 518 | @noindent | |
| 556 | @ifnottex | ||
| 557 | @node [3.7], [3.8], [3.6], FAQ 3 - Getting messages | ||
| 558 | @end ifnottex | ||
| 559 | @subsubheading Question 3.7: | ||
| 560 | 519 | ||
| 561 | And how about local spool files? | 520 | @node [3.7] |
| 562 | 521 | @subsubheading Question 3.7 | |
| 563 | 522 | ||
| 564 | Answer: | 523 | And how about local spool files? |
| 565 | 524 | ||
| 566 | No problem, this is just one more select method called | 525 | @subsubheading Answer |
| 567 | nnspool, so you want this: | 526 | |
| 568 | 527 | No problem, this is just one more select method called | |
| 528 | nnspool, so you want this: | ||
| 569 | 529 | ||
| 570 | @example | 530 | @example |
| 571 | (add-to-list 'gnus-secondary-select-methods '(nnspool "")) | 531 | (add-to-list 'gnus-secondary-select-methods '(nnspool "")) |
| 572 | @end example | 532 | @end example |
| 573 | |||
| 574 | @noindent | 533 | @noindent |
| 575 | Or this if you don't want an NNTP Server as primary news source: | 534 | |
| 576 | 535 | Or this if you don't want an NNTP Server as primary news source: | |
| 577 | 536 | ||
| 578 | @example | 537 | @example |
| 579 | (setq gnus-select-method '(nnspool "")) | 538 | (setq gnus-select-method '(nnspool "")) |
| 580 | @end example | 539 | @end example |
| 581 | |||
| 582 | @noindent | 540 | @noindent |
| 583 | Gnus will look for the spool file in /usr/spool/news, if you | 541 | |
| 584 | want something different, change the line above to something like this: | 542 | Gnus will look for the spool file in /usr/spool/news, if you |
| 585 | 543 | want something different, change the line above to something like this: | |
| 586 | 544 | ||
| 587 | @example | 545 | @example |
| 588 | (add-to-list 'gnus-secondary-select-methods | 546 | (add-to-list 'gnus-secondary-select-methods |
| 589 | '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) | 547 | '(nnspool "" |
| 548 | (nnspool-directory "/usr/local/myspoolddir"))) | ||
| 590 | @end example | 549 | @end example |
| 591 | |||
| 592 | @noindent | 550 | @noindent |
| 593 | This sets the spool directory for this server only. | ||
| 594 | You might have to specify more stuff like the program used | ||
| 595 | to post articles, see the Gnus manual on how to do this. | ||
| 596 | |||
| 597 | @ifnottex | ||
| 598 | @node [3.8], [3.9], [3.7], FAQ 3 - Getting messages | ||
| 599 | @end ifnottex | ||
| 600 | @subsubheading Question 3.8: | ||
| 601 | 551 | ||
| 602 | OK, reading news works now, but I want to be able to read my mail | 552 | This sets the spool directory for this server only. |
| 603 | with Gnus, too. How to do it? | 553 | You might have to specify more stuff like the program used |
| 604 | 554 | to post articles, see the Gnus manual on how to do this. | |
| 605 | 555 | ||
| 606 | Answer: | 556 | @node [3.8] |
| 607 | 557 | @subsubheading Question 3.8 | |
| 608 | That's a bit harder since there are many possible sources | 558 | |
| 609 | for mail, many possible ways for storing mail and many | 559 | OK, reading news works now, but I want to be able to read my mail |
| 610 | different ways for sending mail. The most common cases are | 560 | with Gnus, too. How to do it? |
| 611 | these: 1: You want to read your mail from a pop3 server and | 561 | |
| 612 | send them directly to a SMTP Server 2: Some program like | 562 | @subsubheading Answer |
| 613 | fetchmail retrieves your mail and stores it on disk from | 563 | |
| 614 | where Gnus shall read it. Outgoing mail is sent by | 564 | That's a bit harder since there are many possible sources |
| 615 | Sendmail, Postfix or some other MTA. Sometimes, you even | 565 | for mail, many possible ways for storing mail and many |
| 616 | need a combination of the above cases. | 566 | different ways for sending mail. The most common cases are |
| 617 | 567 | these: 1: You want to read your mail from a pop3 server and | |
| 618 | 568 | send them directly to a SMTP Server 2: Some program like | |
| 619 | However, the first thing to do is to tell Gnus in which way | 569 | fetchmail retrieves your mail and stores it on disk from |
| 620 | it should store the mail, in Gnus terminology which back end | 570 | where Gnus shall read it. Outgoing mail is sent by |
| 621 | to use. Gnus supports many different back ends, the most | 571 | Sendmail, Postfix or some other MTA. Sometimes, you even |
| 622 | commonly used one is nnml. It stores every mail in one file | 572 | need a combination of the above cases. |
| 623 | and is therefor quite fast. However you might prefer a one | 573 | |
| 624 | file per group approach if your file system has problems with | 574 | However, the first thing to do is to tell Gnus in which way |
| 625 | many small files, the nnfolder back end is then probably the | 575 | it should store the mail, in Gnus terminology which back end |
| 626 | choice for you. To use nnml add the following to ~/.gnus: | 576 | to use. Gnus supports many different back ends, the most |
| 627 | 577 | commonly used one is nnml. It stores every mail in one file | |
| 578 | and is therefor quite fast. However you might prefer a one | ||
| 579 | file per group approach if your file system has problems with | ||
| 580 | many small files, the nnfolder back end is then probably the | ||
| 581 | choice for you. To use nnml add the following to ~/.gnus.el: | ||
| 628 | 582 | ||
| 629 | @example | 583 | @example |
| 630 | (add-to-list 'gnus-secondary-select-methods '(nnml "")) | 584 | (add-to-list 'gnus-secondary-select-methods '(nnml "")) |
| 631 | @end example | 585 | @end example |
| 632 | |||
| 633 | @noindent | 586 | @noindent |
| 634 | As you might have guessed, if you want nnfolder, it's | 587 | |
| 635 | 588 | As you might have guessed, if you want nnfolder, it's | |
| 636 | 589 | ||
| 637 | @example | 590 | @example |
| 638 | (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) | 591 | (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) |
| 639 | @end example | 592 | @end example |
| 640 | 593 | @noindent | |
| 641 | 594 | ||
| 642 | Now we need to tell Gnus, where to get it's mail from. If | 595 | Now we need to tell Gnus, where to get it's mail from. If |
| 643 | it's a POP3 server, then you need something like this: | 596 | it's a POP3 server, then you need something like this: |
| 644 | |||
| 645 | 597 | ||
| 646 | @example | 598 | @example |
| 647 | (eval-after-load "mail-source" | 599 | (eval-after-load "mail-source" |
| @@ -649,75 +601,68 @@ Answer: | |||
| 649 | :user "yourUserName" | 601 | :user "yourUserName" |
| 650 | :password "yourPassword"))) | 602 | :password "yourPassword"))) |
| 651 | @end example | 603 | @end example |
| 652 | |||
| 653 | @noindent | 604 | @noindent |
| 654 | Make sure ~/.gnus isn't readable to others if you store | 605 | |
| 655 | your password there. If you want to read your mail from a | 606 | Make sure ~/.gnus.el isn't readable to others if you store |
| 656 | traditional spool file on your local machine, it's | 607 | your password there. If you want to read your mail from a |
| 657 | 608 | traditional spool file on your local machine, it's | |
| 658 | 609 | ||
| 659 | @example | 610 | @example |
| 660 | (eval-after-load "mail-source" | 611 | (eval-after-load "mail-source" |
| 661 | '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))) | 612 | '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) |
| 662 | @end example | 613 | @end example |
| 663 | |||
| 664 | @noindent | 614 | @noindent |
| 665 | If it's a Maildir, with one file per message as used by | 615 | |
| 666 | postfix, Qmail and (optionally) fetchmail it's | 616 | If it's a Maildir, with one file per message as used by |
| 667 | 617 | postfix, Qmail and (optionally) fetchmail it's | |
| 668 | 618 | ||
| 669 | @example | 619 | @example |
| 670 | (eval-after-load "mail-source" | 620 | (eval-after-load "mail-source" |
| 671 | '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" | 621 | '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" |
| 672 | :subdirs ("cur" "new"))) | 622 | :subdirs ("cur" "new"))) |
| 673 | @end example | 623 | @end example |
| 674 | |||
| 675 | @noindent | 624 | @noindent |
| 676 | And finally if you want to read your mail from several files | 625 | |
| 677 | in one directory, for example because procmail already split your | 626 | And finally if you want to read your mail from several files |
| 678 | mail, it's | 627 | in one directory, for example because procmail already split your |
| 679 | 628 | mail, it's | |
| 680 | 629 | ||
| 681 | @example | 630 | @example |
| 682 | (eval-after-load "mail-source" | 631 | (eval-after-load "mail-source" |
| 683 | '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" | 632 | '(add-to-list 'mail-sources |
| 684 | :suffix ".prcml")) | 633 | '(directory :path "/path/to/procmail-dir/" |
| 634 | :suffix ".prcml"))) | ||
| 685 | @end example | 635 | @end example |
| 686 | |||
| 687 | @noindent | 636 | @noindent |
| 688 | Where :suffix ".prcml" tells Gnus only to use files with the | ||
| 689 | suffix .prcml. | ||
| 690 | |||
| 691 | 637 | ||
| 692 | OK, now you only need to tell Gnus how to send mail. If you | 638 | Where :suffix ".prcml" tells Gnus only to use files with the |
| 693 | want to send mail via sendmail (or whichever MTA is playing | 639 | suffix .prcml. |
| 694 | the role of sendmail on your system), you don't need to do | 640 | |
| 695 | anything. However, if you want to send your mail to an | 641 | OK, now you only need to tell Gnus how to send mail. If you |
| 696 | SMTP Server you need the following in your ~/.gnus | 642 | want to send mail via sendmail (or whichever MTA is playing |
| 697 | 643 | the role of sendmail on your system), you don't need to do | |
| 644 | anything. However, if you want to send your mail to an | ||
| 645 | SMTP Server you need the following in your ~/.gnus.el | ||
| 698 | 646 | ||
| 699 | @example | 647 | @example |
| 700 | (setq send-mail-function 'smtpmail-send-it) | 648 | (setq send-mail-function 'smtpmail-send-it) |
| 701 | (setq message-send-mail-function 'smtpmail-send-it) | 649 | (setq message-send-mail-function 'smtpmail-send-it) |
| 702 | (setq smtpmail-default-smtp-server "smtp.yourProvider.net") | 650 | (setq smtpmail-default-smtp-server "smtp.yourProvider.net") |
| 703 | @end example | 651 | @end example |
| 704 | 652 | @noindent | |
| 705 | @ifnottex | ||
| 706 | @node [3.9], [3.10], [3.8], FAQ 3 - Getting messages | ||
| 707 | @end ifnottex | ||
| 708 | @subsubheading Question 3.9: | ||
| 709 | 653 | ||
| 710 | And what about IMAP? | 654 | @node [3.9] |
| 711 | 655 | @subsubheading Question 3.9 | |
| 712 | 656 | ||
| 713 | Answer: | 657 | And what about IMAP? |
| 714 | 658 | ||
| 715 | There are two ways of using IMAP with Gnus. The first one is | 659 | @subsubheading Answer |
| 716 | to use IMAP like POP3, that means Gnus fetches the mail from | 660 | |
| 717 | the IMAP server and stores it on disk. If you want to do | 661 | There are two ways of using IMAP with Gnus. The first one is |
| 718 | this (you don't really want to do this) add the following to | 662 | to use IMAP like POP3, that means Gnus fetches the mail from |
| 719 | ~/.gnus | 663 | the IMAP server and stores it on disk. If you want to do |
| 720 | 664 | this (you don't really want to do this) add the following to | |
| 665 | ~/.gnus.el | ||
| 721 | 666 | ||
| 722 | @example | 667 | @example |
| 723 | (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" | 668 | (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" |
| @@ -728,249 +673,215 @@ Answer: | |||
| 728 | :mailbox "INBOX" | 673 | :mailbox "INBOX" |
| 729 | :fetchflag "\\Seen")) | 674 | :fetchflag "\\Seen")) |
| 730 | @end example | 675 | @end example |
| 731 | |||
| 732 | @noindent | 676 | @noindent |
| 733 | You might have to tweak the values for stream and/or | ||
| 734 | authentification, see the Gnus manual node "Mail Source | ||
| 735 | Specifiers" for possible values. | ||
| 736 | |||
| 737 | 677 | ||
| 738 | If you want to use IMAP the way it's intended, you've got to | 678 | You might have to tweak the values for stream and/or |
| 739 | follow a different approach. You've got to add the nnimap | 679 | authentification, see the Gnus manual node "Mail Source |
| 740 | back end to your select method and give the information | 680 | Specifiers" for possible values. |
| 741 | about the server there. | 681 | |
| 742 | 682 | If you want to use IMAP the way it's intended, you've got to | |
| 683 | follow a different approach. You've got to add the nnimap | ||
| 684 | back end to your select method and give the information | ||
| 685 | about the server there. | ||
| 743 | 686 | ||
| 744 | @example | 687 | @example |
| 745 | (add-to-list | 688 | (add-to-list 'gnus-secondary-select-methods |
| 746 | 'gnus-secondary-select-methods | 689 | '(nnimap "Give the baby a name" |
| 747 | '(nnimap "Give the baby a name" | 690 | (nnimap-address "imap.yourProvider.net") |
| 748 | (nnimap-address "imap.yourProvider.net") | 691 | (nnimap-port 143) |
| 749 | (nnimap-port 143) | 692 | (nnimap-list-pattern "archive.*"))) |
| 750 | (nnimap-list-pattern "archive.*"))) | ||
| 751 | @end example | 693 | @end example |
| 752 | |||
| 753 | @noindent | 694 | @noindent |
| 754 | Again, you might have to specify how to authenticate to the | ||
| 755 | server if Gnus can't guess the correct way, see the Manual | ||
| 756 | Node "IMAP" for detailed information. | ||
| 757 | |||
| 758 | @ifnottex | ||
| 759 | @node [3.10], [3.11], [3.9], FAQ 3 - Getting messages | ||
| 760 | @end ifnottex | ||
| 761 | @subsubheading Question 3.10: | ||
| 762 | |||
| 763 | At the office we use one of those MS Exchange servers, can I use | ||
| 764 | Gnus to read my mail from it? | ||
| 765 | |||
| 766 | |||
| 767 | Answer: | ||
| 768 | 695 | ||
| 769 | Offer your administrator a pair of new running shoes for | 696 | Again, you might have to specify how to authenticate to the |
| 770 | activating IMAP on the server and follow the instructions | 697 | server if Gnus can't guess the correct way, see the Manual |
| 771 | above. | 698 | Node "IMAP" for detailed information. |
| 772 | 699 | ||
| 773 | @ifnottex | 700 | @node [3.10] |
| 774 | @node [3.11], , [3.10], FAQ 3 - Getting messages | 701 | @subsubheading Question 3.10 |
| 775 | @end ifnottex | 702 | |
| 776 | @subsubheading Question 3.11: | 703 | At the office we use one of those MS Exchange servers, can I use |
| 777 | 704 | Gnus to read my mail from it? | |
| 778 | Can I tell Gnus not to delete the mails on the server it | 705 | |
| 779 | retrieves via POP3? | 706 | @subsubheading Answer |
| 780 | 707 | ||
| 781 | 708 | Offer your administrator a pair of new running shoes for | |
| 782 | Answer: | 709 | activating IMAP on the server and follow the instructions |
| 783 | 710 | above. | |
| 784 | First of all, that's not the way POP3 is intended to work, | 711 | |
| 785 | if you have the possibility, you should use the IMAP | 712 | @node [3.11] |
| 786 | Protocol if you want your messages to stay on the | 713 | @subsubheading Question 3.11 |
| 787 | server. Nevertheless there might be situations where you | 714 | |
| 788 | need the feature, but sadly Gnus itself has no predefined | 715 | Can I tell Gnus not to delete the mails on the server it |
| 789 | functionality to do so. | 716 | retrieves via POP3? |
| 790 | 717 | ||
| 791 | 718 | @subsubheading Answer | |
| 792 | However this is Gnus county so there are possibilities to | 719 | |
| 793 | achieve what you want. The easiest way is to get an external | 720 | First of all, that's not the way POP3 is intended to work, |
| 794 | program which retrieves copies of the mail and stores them | 721 | if you have the possibility, you should use the IMAP |
| 795 | on disk, so Gnus can read it from there. On Unix systems you | 722 | Protocol if you want your messages to stay on the |
| 796 | could use e.g. fetchmail for this, on MS Windows you can use | 723 | server. Nevertheless there might be situations where you |
| 797 | Hamster, an excellent local news and mail server. | 724 | need the feature, but sadly Gnus itself has no predefined |
| 798 | 725 | functionality to do so. | |
| 799 | 726 | ||
| 800 | The other solution would be, to replace the method Gnus | 727 | However this is Gnus county so there are possibilities to |
| 801 | uses to get mail from POP3 servers by one which is capable | 728 | achieve what you want. The easiest way is to get an external |
| 802 | of leaving the mail on the server. If you use XEmacs, get | 729 | program which retrieves copies of the mail and stores them |
| 803 | the package mail-lib, it includes an enhanced pop3.el, | 730 | on disk, so Gnus can read it from there. On Unix systems you |
| 804 | look in the file, there's documentation on how to tell | 731 | could use e.g. fetchmail for this, on MS Windows you can use |
| 805 | Gnus to use it and not to delete the retrieved mail. For | 732 | Hamster, an excellent local news and mail server. |
| 806 | GNU Emacs look for the file epop3.el which can do the same | 733 | |
| 807 | (If you know the home of this file, please send me an | 734 | The other solution would be, to replace the method Gnus |
| 808 | e-mail). You can also tell Gnus to use an external program | 735 | uses to get mail from POP3 servers by one which is capable |
| 809 | (e.g. fetchmail) to fetch your mail, see the info node | 736 | of leaving the mail on the server. If you use XEmacs, get |
| 810 | "Mail Source Specifiers" in the Gnus manual on how to do | 737 | the package mail-lib, it includes an enhanced pop3.el, |
| 811 | it. | 738 | look in the file, there's documentation on how to tell |
| 812 | 739 | Gnus to use it and not to delete the retrieved mail. For | |
| 813 | 740 | GNU Emacs look for the file epop3.el which can do the same | |
| 814 | @ifnottex | 741 | (If you know the home of this file, please send me an |
| 815 | @node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions | 742 | e-mail). You can also tell Gnus to use an external program |
| 816 | @end ifnottex | 743 | (e.g. fetchmail) to fetch your mail, see the info node |
| 744 | "Mail Source Specifiers" in the Gnus manual on how to do | ||
| 745 | it. | ||
| 746 | |||
| 747 | @node FAQ 4 - Reading messages | ||
| 817 | @subsection Reading messages | 748 | @subsection Reading messages |
| 818 | 749 | ||
| 819 | @menu | 750 | @menu |
| 820 | * [4.1]:: When I enter a group, all read messages are gone. | 751 | * [4.1]:: When I enter a group, all read messages are gone. How to |
| 821 | How to view them again? | 752 | view them again? |
| 822 | * [4.2]:: How to tell Gnus to show an important message every time | 753 | * [4.2]:: How to tell Gnus to show an important message every time I |
| 823 | I enter a group, even when it's read? | 754 | enter a group, even when it's read? |
| 824 | * [4.3]:: How to view the headers of a message? | 755 | * [4.3]:: How to view the headers of a message? |
| 825 | * [4.4]:: How to view the raw unformatted message? | 756 | * [4.4]:: How to view the raw unformatted message? |
| 826 | * [4.5]:: How can I change the headers Gnus displays by default at the | 757 | * [4.5]:: How can I change the headers Gnus displays by default at |
| 827 | top of the article buffer? | 758 | the top of the article buffer? |
| 828 | * [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the | 759 | * [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the |
| 829 | text part if it's available. How to do it? | 760 | text part if it's available. How to do it? |
| 830 | * [4.7]:: Can I use some other browser than w3 to render my HTML-mails? | 761 | * [4.7]:: Can I use some other browser than w3 to render my |
| 831 | * [4.8]:: Is there anything I can do to make poorly formatted mails | 762 | HTML-mails? |
| 832 | more readable? | 763 | * [4.8]:: Is there anything I can do to make poorly formatted mails |
| 833 | * [4.9]:: Is there a way to automatically ignore posts by specific authors | 764 | more readable? |
| 834 | or with specific words in the subject? And can I highlight more | 765 | * [4.9]:: Is there a way to automatically ignore posts by specific |
| 835 | interesting ones in some way? | 766 | authors or with specific words in the subject? And can I highlight |
| 836 | * [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set | 767 | more interesting ones in some way? |
| 837 | other variables specific for some groups? | 768 | * [4.10]:: How can I disable threading in some (e.g. mail-) groups, |
| 838 | * [4.11]:: Can I highlight messages written by me and follow-ups to those? | 769 | or set other variables specific for some groups? |
| 839 | * [4.12]:: The number of total messages in a group which Gnus displays in | 770 | * [4.11]:: Can I highlight messages written by me and follow-ups to |
| 840 | group buffer is by far to high, especially in mail groups. | 771 | those? |
| 841 | Is this a bug? | 772 | * [4.12]:: The number of total messages in a group which Gnus |
| 842 | * [4.13]:: I don't like the layout of summary and article buffer, | 773 | displays in group buffer is by far to high, especially in mail |
| 843 | how to change it? Perhaps even a three pane display? | 774 | groups. Is this a bug? |
| 844 | * [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? | 775 | * [4.13]:: I don't like the layout of summary and article buffer, how |
| 845 | * [4.15]:: How to split incoming mails in several groups? | 776 | to change it? Perhaps even a three pane display? |
| 777 | * [4.14]:: I don't like the way the Summary buffer looks, how to | ||
| 778 | tweak it? | ||
| 779 | * [4.15]:: How to split incoming mails in several groups? | ||
| 846 | @end menu | 780 | @end menu |
| 847 | 781 | ||
| 848 | @ifnottex | 782 | @node [4.1] |
| 849 | @node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages | 783 | @subsubheading Question 4.1 |
| 850 | @end ifnottex | ||
| 851 | @subsubheading Question 4.1: | ||
| 852 | 784 | ||
| 853 | When I enter a group, all read messages are gone. How to view them again? | 785 | When I enter a group, all read messages are gone. How to view them again? |
| 854 | |||
| 855 | 786 | ||
| 856 | Answer: | 787 | @subsubheading Answer |
| 857 | 788 | ||
| 858 | If you enter the group by saying | 789 | If you enter the group by saying |
| 859 | @samp{RET} | 790 | @samp{RET} |
| 860 | in group buffer with point over the group, only unread and ticked messages are loaded. Say | 791 | in group buffer with point over the group, only unread and ticked messages are loaded. Say |
| 861 | @samp{C-u RET} | 792 | @samp{C-u RET} |
| 862 | instead to load all available messages. If you want only the e.g. 300 newest say | 793 | instead to load all available messages. If you want only the e.g. 300 newest say |
| 863 | @samp{C-u 300 RET} | 794 | @samp{C-u 300 RET} |
| 864 | |||
| 865 | 795 | ||
| 866 | Loading only unread messages can be annoying if you have threaded view enabled, say | 796 | Loading only unread messages can be annoying if you have threaded view enabled, say |
| 867 | |||
| 868 | 797 | ||
| 869 | @example | 798 | @example |
| 870 | (setq gnus-fetch-old-headers 'some) | 799 | (setq gnus-fetch-old-headers 'some) |
| 871 | @end example | 800 | @end example |
| 872 | |||
| 873 | |||
| 874 | @noindent | 801 | @noindent |
| 875 | in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load | ||
| 876 | all articles (Warning: Both settings enlarge the amount of data which is | ||
| 877 | fetched when you enter a group and slow down the process of entering a group). | ||
| 878 | 802 | ||
| 803 | in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load | ||
| 804 | all articles (Warning: Both settings enlarge the amount of data which is | ||
| 805 | fetched when you enter a group and slow down the process of entering a group). | ||
| 879 | 806 | ||
| 880 | If you already use Gnus 5.10, you can say | 807 | If you already use Gnus 5.10, you can say |
| 881 | @samp{/o N} | 808 | @samp{/o N} |
| 882 | In summary buffer to load the last N messages, this feature is not available in 5.8.8 | 809 | In summary buffer to load the last N messages, this feature is not available in 5.8.8 |
| 883 | |||
| 884 | 810 | ||
| 885 | If you don't want all old messages, but the parent of the message you're just reading, | 811 | If you don't want all old messages, but the parent of the message you're just reading, |
| 886 | you can say @samp{^}, if you want to retrieve the whole thread | 812 | you can say @samp{^}, if you want to retrieve the whole thread |
| 887 | the message you're just reading belongs to, @samp{A T} is your friend. | 813 | the message you're just reading belongs to, @samp{A T} is your friend. |
| 888 | |||
| 889 | @ifnottex | ||
| 890 | @node [4.2], [4.3], [4.1], FAQ 4 - Reading messages | ||
| 891 | @end ifnottex | ||
| 892 | @subsubheading Question 4.2: | ||
| 893 | 814 | ||
| 894 | How to tell Gnus to show an important message every time I | 815 | @node [4.2] |
| 895 | enter a group, even when it's read? | 816 | @subsubheading Question 4.2 |
| 896 | |||
| 897 | 817 | ||
| 898 | Answer: | 818 | How to tell Gnus to show an important message every time I |
| 819 | enter a group, even when it's read? | ||
| 899 | 820 | ||
| 900 | You can tick important messages. To do this hit | 821 | @subsubheading Answer |
| 901 | @samp{u} while point is in summary buffer | ||
| 902 | over the message. When you want to remove the mark, hit | ||
| 903 | either @samp{d} (this deletes the tick | ||
| 904 | mark and set's unread mark) or @samp{M c} | ||
| 905 | (which deletes all marks for the message). | ||
| 906 | |||
| 907 | @ifnottex | ||
| 908 | @node [4.3], [4.4], [4.2], FAQ 4 - Reading messages | ||
| 909 | @end ifnottex | ||
| 910 | @subsubheading Question 4.3: | ||
| 911 | 822 | ||
| 912 | How to view the headers of a message? | 823 | You can tick important messages. To do this hit |
| 913 | 824 | @samp{u} while point is in summary buffer | |
| 825 | over the message. When you want to remove the mark, hit | ||
| 826 | either @samp{d} (this deletes the tick | ||
| 827 | mark and set's unread mark) or @samp{M c} | ||
| 828 | (which deletes all marks for the message). | ||
| 914 | 829 | ||
| 915 | Answer: | 830 | @node [4.3] |
| 831 | @subsubheading Question 4.3 | ||
| 916 | 832 | ||
| 917 | Say @samp{t} | 833 | How to view the headers of a message? |
| 918 | to show all headers, one more | ||
| 919 | @samp{t} | ||
| 920 | hides them again. | ||
| 921 | |||
| 922 | @ifnottex | ||
| 923 | @node [4.4], [4.5], [4.3], FAQ 4 - Reading messages | ||
| 924 | @end ifnottex | ||
| 925 | @subsubheading Question 4.4: | ||
| 926 | 834 | ||
| 927 | How to view the raw unformatted message? | 835 | @subsubheading Answer |
| 928 | |||
| 929 | 836 | ||
| 930 | Answer: | 837 | Say @samp{t} |
| 838 | to show all headers, one more | ||
| 839 | @samp{t} | ||
| 840 | hides them again. | ||
| 931 | 841 | ||
| 932 | Say | 842 | @node [4.4] |
| 933 | @samp{C-u g} | 843 | @subsubheading Question 4.4 |
| 934 | to show the raw message | ||
| 935 | @samp{g} | ||
| 936 | returns to normal view. | ||
| 937 | |||
| 938 | @ifnottex | ||
| 939 | @node [4.5], [4.6], [4.4], FAQ 4 - Reading messages | ||
| 940 | @end ifnottex | ||
| 941 | @subsubheading Question 4.5: | ||
| 942 | 844 | ||
| 943 | How can I change the headers Gnus displays by default at | 845 | How to view the raw unformatted message? |
| 944 | the top of the article buffer? | ||
| 945 | |||
| 946 | 846 | ||
| 947 | Answer: | 847 | @subsubheading Answer |
| 848 | |||
| 849 | Say | ||
| 850 | @samp{C-u g} | ||
| 851 | to show the raw message | ||
| 852 | @samp{g} | ||
| 853 | returns to normal view. | ||
| 854 | |||
| 855 | @node [4.5] | ||
| 856 | @subsubheading Question 4.5 | ||
| 857 | |||
| 858 | How can I change the headers Gnus displays by default at | ||
| 859 | the top of the article buffer? | ||
| 860 | |||
| 861 | @subsubheading Answer | ||
| 862 | |||
| 863 | The variable gnus-visible-headers controls which headers | ||
| 864 | are shown, its value is a regular expression, header lines | ||
| 865 | which match it are shown. So if you want author, subject, | ||
| 866 | date, and if the header exists, Followup-To and MUA / NUA | ||
| 867 | say this in ~/.gnus.el: | ||
| 948 | 868 | ||
| 949 | The variable gnus-visible-headers controls which headers | ||
| 950 | are shown, its value is a regular expression, header lines | ||
| 951 | which match it are shown. So if you want author, subject, | ||
| 952 | date, and if the header exists, Followup-To and MUA / NUA | ||
| 953 | say this in ~/.gnus: | ||
| 954 | |||
| 955 | @example | 869 | @example |
| 956 | (setq gnus-visible-headers | 870 | (setq gnus-visible-headers |
| 957 | "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\ | 871 | '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To" |
| 958 | \\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") | 872 | "^User-Agent" "^X-Newsreader" "^X-Mailer")) |
| 959 | @end example | 873 | @end example |
| 960 | 874 | @noindent | |
| 961 | @ifnottex | ||
| 962 | @node [4.6], [4.7], [4.5], FAQ 4 - Reading messages | ||
| 963 | @end ifnottex | ||
| 964 | @subsubheading Question 4.6: | ||
| 965 | 875 | ||
| 966 | I'd like Gnus NOT to render HTML-mails but show me the | 876 | @node [4.6] |
| 967 | text part if it's available. How to do it? | 877 | @subsubheading Question 4.6 |
| 968 | |||
| 969 | 878 | ||
| 970 | Answer: | 879 | I'd like Gnus NOT to render HTML-mails but show me the |
| 880 | text part if it's available. How to do it? | ||
| 971 | 881 | ||
| 972 | Say | 882 | @subsubheading Answer |
| 973 | 883 | ||
| 884 | Say | ||
| 974 | 885 | ||
| 975 | @example | 886 | @example |
| 976 | (eval-after-load "mm-decode" | 887 | (eval-after-load "mm-decode" |
| @@ -978,240 +889,206 @@ Answer: | |||
| 978 | (add-to-list 'mm-discouraged-alternatives "text/html") | 889 | (add-to-list 'mm-discouraged-alternatives "text/html") |
| 979 | (add-to-list 'mm-discouraged-alternatives "text/richtext"))) | 890 | (add-to-list 'mm-discouraged-alternatives "text/richtext"))) |
| 980 | @end example | 891 | @end example |
| 981 | |||
| 982 | @noindent | 892 | @noindent |
| 983 | in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add | 893 | |
| 984 | 894 | in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add | |
| 985 | 895 | ||
| 986 | @example | 896 | @example |
| 987 | (setq mm-automatic-display (remove "text/html" mm-automatic-display)) | 897 | (setq mm-automatic-display (remove "text/html" mm-automatic-display)) |
| 988 | @end example | 898 | @end example |
| 989 | |||
| 990 | @noindent | 899 | @noindent |
| 991 | too. | ||
| 992 | |||
| 993 | @ifnottex | ||
| 994 | @node [4.7], [4.8], [4.6], FAQ 4 - Reading messages | ||
| 995 | @end ifnottex | ||
| 996 | @subsubheading Question 4.7: | ||
| 997 | 900 | ||
| 998 | Can I use some other browser than w3 to render my HTML-mails? | 901 | too. |
| 999 | |||
| 1000 | 902 | ||
| 1001 | Answer: | 903 | @node [4.7] |
| 904 | @subsubheading Question 4.7 | ||
| 1002 | 905 | ||
| 1003 | Only if you use Gnus 5.10 or younger. In this case you've got the | 906 | Can I use some other browser than w3 to render my HTML-mails? |
| 1004 | choice between w3, w3m, links, lynx and html2text, which | 907 | |
| 1005 | one is used can be specified in the variable | 908 | @subsubheading Answer |
| 1006 | mm-text-html-renderer, so if you want links to render your | 909 | |
| 1007 | mail say | 910 | Only if you use Gnus 5.10 or younger. In this case you've got the |
| 1008 | 911 | choice between w3, w3m, links, lynx and html2text, which | |
| 912 | one is used can be specified in the variable | ||
| 913 | mm-text-html-renderer, so if you want links to render your | ||
| 914 | mail say | ||
| 1009 | 915 | ||
| 1010 | @example | 916 | @example |
| 1011 | (setq mm-text-html-renderer 'links) | 917 | (setq mm-text-html-renderer 'links) |
| 1012 | @end example | 918 | @end example |
| 1013 | 919 | @noindent | |
| 1014 | @ifnottex | ||
| 1015 | @node [4.8], [4.9], [4.7], FAQ 4 - Reading messages | ||
| 1016 | @end ifnottex | ||
| 1017 | @subsubheading Question 4.8: | ||
| 1018 | |||
| 1019 | Is there anything I can do to make poorly formatted mails | ||
| 1020 | more readable? | ||
| 1021 | |||
| 1022 | |||
| 1023 | Answer: | ||
| 1024 | |||
| 1025 | Gnus offers you several functions to "wash" incoming mail, | ||
| 1026 | you can find them if you browse through the menu, item Article->Washing. The most | ||
| 1027 | interesting ones are probably "Wrap long lines" ( | ||
| 1028 | @samp{W w} | ||
| 1029 | ), "Decode ROT13" ( | ||
| 1030 | @samp{W r} | ||
| 1031 | ) and "Outlook Deuglify" which repairs the dumb quoting used | ||
| 1032 | by many users of Microsoft products ( | ||
| 1033 | @samp{W Y f} gives you full deuglify. | ||
| 1034 | See @samp{W Y C-h} or | ||
| 1035 | have a look at the menus for other deuglifications). | ||
| 1036 | Outlook deuglify is only available since Gnus 5.10. | ||
| 1037 | |||
| 1038 | @ifnottex | ||
| 1039 | @node [4.9], [4.10], [4.8], FAQ 4 - Reading messages | ||
| 1040 | @end ifnottex | ||
| 1041 | @subsubheading Question 4.9: | ||
| 1042 | |||
| 1043 | Is there a way to automatically ignore posts by specific | ||
| 1044 | authors or with specific words in the subject? And can I | ||
| 1045 | highlight more interesting ones in some way? | ||
| 1046 | |||
| 1047 | |||
| 1048 | Answer: | ||
| 1049 | |||
| 1050 | You want Scoring. Scoring means, that you define rules | ||
| 1051 | which assign each message an integer value. Depending on | ||
| 1052 | the value the message is highlighted in summary buffer (if | ||
| 1053 | it's high, say +2000) or automatically marked read (if the | ||
| 1054 | value is low, say -800) or some other action happens. | ||
| 1055 | |||
| 1056 | |||
| 1057 | There are basically three ways of setting up rules which assign | ||
| 1058 | the scoring-value to messages. The first and easiest way is to set | ||
| 1059 | up rules based on the article you are just reading. Say you're | ||
| 1060 | reading a message by a guy who always writes nonsense and you want | ||
| 1061 | to ignore his messages in the future. Hit | ||
| 1062 | @samp{L}, to set up a rule which lowers the score. | ||
| 1063 | Now Gnus asks you which the criteria for lowering the Score shall | ||
| 1064 | be. Hit @samp{?} twice to see all possibilities, | ||
| 1065 | we want @samp{a} which means the author (the from | ||
| 1066 | header). Now Gnus wants to know which kind of matching we want. | ||
| 1067 | Hit either @samp{e} for an exact match or | ||
| 1068 | @samp{s} for substring-match and delete afterwards | ||
| 1069 | everything but the name to score down all authors with the given | ||
| 1070 | name no matter which email address is used. Now you need to tell | ||
| 1071 | Gnus when to apply the rule and how long it should last, hit e.g. | ||
| 1072 | @samp{p} to apply the rule now and let it last | ||
| 1073 | forever. If you want to raise the score instead of lowering it say | ||
| 1074 | @samp{I} instead of @samp{L}. | ||
| 1075 | |||
| 1076 | 920 | ||
| 1077 | You can also set up rules by hand. To do this say @samp{V | 921 | @node [4.8] |
| 1078 | f} in summary buffer. Then you are asked for the name | 922 | @subsubheading Question 4.8 |
| 1079 | of the score file, it's name.of.group.SCORE for rules valid in | 923 | |
| 1080 | only one group or all.Score for rules valid in all groups. See the | 924 | Is there anything I can do to make poorly formatted mails |
| 1081 | Gnus manual for the exact syntax, basically it's one big list | 925 | more readable? |
| 1082 | whose elements are lists again. the first element of those lists | 926 | |
| 1083 | is the header to score on, then one more list with what to match, | 927 | @subsubheading Answer |
| 1084 | which score to assign, when to expire the rule and how to do the | 928 | |
| 1085 | matching. If you find me very interesting, you could e.g. add the | 929 | Gnus offers you several functions to "wash" incoming mail, you can |
| 1086 | following to your all.Score: | 930 | find them if you browse through the menu, item |
| 1087 | 931 | Article->Washing. The most interesting ones are probably "Wrap | |
| 932 | long lines" (@samp{W w}), "Decode ROT13" | ||
| 933 | (@samp{W r}) and "Outlook Deuglify" which repairs | ||
| 934 | the dumb quoting used by many users of Microsoft products | ||
| 935 | (@samp{W Y f} gives you full deuglify. | ||
| 936 | See @samp{W Y C-h} or have a look at the menus for | ||
| 937 | other deuglifications). Outlook deuglify is only available since | ||
| 938 | Gnus 5.10. | ||
| 939 | |||
| 940 | @node [4.9] | ||
| 941 | @subsubheading Question 4.9 | ||
| 942 | |||
| 943 | Is there a way to automatically ignore posts by specific | ||
| 944 | authors or with specific words in the subject? And can I | ||
| 945 | highlight more interesting ones in some way? | ||
| 946 | |||
| 947 | @subsubheading Answer | ||
| 948 | |||
| 949 | You want Scoring. Scoring means, that you define rules | ||
| 950 | which assign each message an integer value. Depending on | ||
| 951 | the value the message is highlighted in summary buffer (if | ||
| 952 | it's high, say +2000) or automatically marked read (if the | ||
| 953 | value is low, say -800) or some other action happens. | ||
| 954 | |||
| 955 | There are basically three ways of setting up rules which assign | ||
| 956 | the scoring-value to messages. The first and easiest way is to set | ||
| 957 | up rules based on the article you are just reading. Say you're | ||
| 958 | reading a message by a guy who always writes nonsense and you want | ||
| 959 | to ignore his messages in the future. Hit | ||
| 960 | @samp{L}, to set up a rule which lowers the score. | ||
| 961 | Now Gnus asks you which the criteria for lowering the Score shall | ||
| 962 | be. Hit @samp{?} twice to see all possibilities, | ||
| 963 | we want @samp{a} which means the author (the from | ||
| 964 | header). Now Gnus wants to know which kind of matching we want. | ||
| 965 | Hit either @samp{e} for an exact match or | ||
| 966 | @samp{s} for substring-match and delete afterwards | ||
| 967 | everything but the name to score down all authors with the given | ||
| 968 | name no matter which email address is used. Now you need to tell | ||
| 969 | Gnus when to apply the rule and how long it should last, hit e.g. | ||
| 970 | @samp{p} to apply the rule now and let it last | ||
| 971 | forever. If you want to raise the score instead of lowering it say | ||
| 972 | @samp{I} instead of @samp{L}. | ||
| 973 | |||
| 974 | You can also set up rules by hand. To do this say @samp{V | ||
| 975 | f} in summary buffer. Then you are asked for the name | ||
| 976 | of the score file, it's name.of.group.SCORE for rules valid in | ||
| 977 | only one group or all.Score for rules valid in all groups. See the | ||
| 978 | Gnus manual for the exact syntax, basically it's one big list | ||
| 979 | whose elements are lists again. the first element of those lists | ||
| 980 | is the header to score on, then one more list with what to match, | ||
| 981 | which score to assign, when to expire the rule and how to do the | ||
| 982 | matching. If you find me very interesting, you could e.g. add the | ||
| 983 | following to your all.Score: | ||
| 1088 | 984 | ||
| 1089 | @example | 985 | @example |
| 1090 | (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) | 986 | (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) |
| 1091 | ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) | 987 | ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) |
| 1092 | @end example | 988 | @end example |
| 1093 | |||
| 1094 | @noindent | 989 | @noindent |
| 1095 | This would add 999 to the score of messages written by me | ||
| 1096 | and 500 to the score of messages which are a (possibly | ||
| 1097 | indirect) answer to a message written by me. Of course | ||
| 1098 | nobody with a sane mind would do this :-) | ||
| 1099 | |||
| 1100 | 990 | ||
| 1101 | The third alternative is adaptive scoring. This means Gnus | 991 | This would add 999 to the score of messages written by me |
| 1102 | watches you and tries to find out what you find | 992 | and 500 to the score of messages which are a (possibly |
| 1103 | interesting and what annoying and sets up rules | 993 | indirect) answer to a message written by me. Of course |
| 1104 | which reflect this. Adaptive scoring can be a huge help | 994 | nobody with a sane mind would do this :-) |
| 1105 | when reading high traffic groups. If you want to activate | 995 | |
| 1106 | adaptive scoring say | 996 | The third alternative is adaptive scoring. This means Gnus |
| 1107 | 997 | watches you and tries to find out what you find | |
| 998 | interesting and what annoying and sets up rules | ||
| 999 | which reflect this. Adaptive scoring can be a huge help | ||
| 1000 | when reading high traffic groups. If you want to activate | ||
| 1001 | adaptive scoring say | ||
| 1108 | 1002 | ||
| 1109 | @example | 1003 | @example |
| 1110 | (setq gnus-use-adaptive-scoring t) | 1004 | (setq gnus-use-adaptive-scoring t) |
| 1111 | @end example | 1005 | @end example |
| 1112 | |||
| 1113 | @noindent | 1006 | @noindent |
| 1114 | in ~/.gnus. | ||
| 1115 | |||
| 1116 | @ifnottex | ||
| 1117 | @node [4.10], [4.11], [4.9], FAQ 4 - Reading messages | ||
| 1118 | @end ifnottex | ||
| 1119 | @subsubheading Question 4.10: | ||
| 1120 | 1007 | ||
| 1121 | How can I disable threading in some (e.g. mail-) groups, or | 1008 | in ~/.gnus.el. |
| 1122 | set other variables specific for some groups? | ||
| 1123 | |||
| 1124 | 1009 | ||
| 1125 | Answer: | 1010 | @node [4.10] |
| 1011 | @subsubheading Question 4.10 | ||
| 1126 | 1012 | ||
| 1127 | While in group buffer move point over the group and hit | 1013 | How can I disable threading in some (e.g. mail-) groups, or |
| 1128 | @samp{G c}, this opens a buffer where you | 1014 | set other variables specific for some groups? |
| 1129 | can set options for the group. At the bottom of the buffer | ||
| 1130 | you'll find an item that allows you to set variables | ||
| 1131 | locally for the group. To disable threading enter | ||
| 1132 | gnus-show-threads as name of variable and nil as | ||
| 1133 | value. Hit button done at the top of the buffer when | ||
| 1134 | you're ready. | ||
| 1135 | |||
| 1136 | @ifnottex | ||
| 1137 | @node [4.11], [4.12], [4.10], FAQ 4 - Reading messages | ||
| 1138 | @end ifnottex | ||
| 1139 | @subsubheading Question 4.11: | ||
| 1140 | 1015 | ||
| 1141 | Can I highlight messages written by me and follow-ups to | 1016 | @subsubheading Answer |
| 1142 | those? | ||
| 1143 | |||
| 1144 | 1017 | ||
| 1145 | Answer: | 1018 | While in group buffer move point over the group and hit |
| 1019 | @samp{G c}, this opens a buffer where you | ||
| 1020 | can set options for the group. At the bottom of the buffer | ||
| 1021 | you'll find an item that allows you to set variables | ||
| 1022 | locally for the group. To disable threading enter | ||
| 1023 | gnus-show-threads as name of variable and nil as | ||
| 1024 | value. Hit button done at the top of the buffer when | ||
| 1025 | you're ready. | ||
| 1146 | 1026 | ||
| 1147 | Stop those "Can I ..." questions, the answer is always yes | 1027 | @node [4.11] |
| 1148 | in Gnus Country :-). It's a three step process: First we | 1028 | @subsubheading Question 4.11 |
| 1149 | make faces (specifications of how summary-line shall look | ||
| 1150 | like) for those postings, then we'll give them some | ||
| 1151 | special score and finally we'll tell Gnus to use the new | ||
| 1152 | faces. You can find detailed instructions on how to do it on | ||
| 1153 | @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org} | ||
| 1154 | |||
| 1155 | @ifnottex | ||
| 1156 | @node [4.12], [4.13], [4.11], FAQ 4 - Reading messages | ||
| 1157 | @end ifnottex | ||
| 1158 | @subsubheading Question 4.12: | ||
| 1159 | |||
| 1160 | The number of total messages in a group which Gnus | ||
| 1161 | displays in group buffer is by far to high, especially in | ||
| 1162 | mail groups. Is this a bug? | ||
| 1163 | |||
| 1164 | 1029 | ||
| 1165 | Answer: | 1030 | Can I highlight messages written by me and follow-ups to |
| 1166 | 1031 | those? | |
| 1167 | No, that's a matter of design of Gnus, fixing this would | ||
| 1168 | mean reimplementation of major parts of Gnus' | ||
| 1169 | back ends. Gnus thinks "highest-article-number - | ||
| 1170 | lowest-article-number = total-number-of-articles". This | ||
| 1171 | works OK for Usenet groups, but if you delete and move | ||
| 1172 | many messages in mail groups, this fails. To cure the | ||
| 1173 | symptom, enter the group via @samp{C-u RET} | ||
| 1174 | (this makes Gnus get all messages), then | ||
| 1175 | hit @samp{M P b} to mark all messages and | ||
| 1176 | then say @samp{B m name.of.group} to move | ||
| 1177 | all messages to the group they have been in before, they | ||
| 1178 | get new message numbers in this process and the count is | ||
| 1179 | right again (until you delete and move your mail to other | ||
| 1180 | groups again). | ||
| 1181 | |||
| 1182 | @ifnottex | ||
| 1183 | @node [4.13], [4.14], [4.12], FAQ 4 - Reading messages | ||
| 1184 | @end ifnottex | ||
| 1185 | @subsubheading Question 4.13: | ||
| 1186 | 1032 | ||
| 1187 | I don't like the layout of summary and article buffer, how | 1033 | @subsubheading Answer |
| 1188 | to change it? Perhaps even a three pane display? | ||
| 1189 | |||
| 1190 | 1034 | ||
| 1191 | Answer: | 1035 | Stop those "Can I ..." questions, the answer is always yes |
| 1036 | in Gnus Country :-). It's a three step process: First we | ||
| 1037 | make faces (specifications of how summary-line shall look | ||
| 1038 | like) for those postings, then we'll give them some | ||
| 1039 | special score and finally we'll tell Gnus to use the new | ||
| 1040 | faces. You can find detailed instructions on how to do it on | ||
| 1041 | @uref{http://my.gnus.org/node/view/224, my.gnus.org} | ||
| 1192 | 1042 | ||
| 1193 | You can control the windows configuration by calling the | 1043 | @node [4.12] |
| 1194 | function gnus-add-configuration. The syntax is a bit | 1044 | @subsubheading Question 4.12 |
| 1195 | complicated but explained very well in the manual node | ||
| 1196 | "Window Layout". Some popular examples: | ||
| 1197 | |||
| 1198 | 1045 | ||
| 1199 | Instead 25% summary 75% article buffer 35% summary and 65% | 1046 | The number of total messages in a group which Gnus |
| 1200 | article (the 1.0 for article means "take the remaining | 1047 | displays in group buffer is by far to high, especially in |
| 1201 | space"): | 1048 | mail groups. Is this a bug? |
| 1202 | 1049 | ||
| 1050 | @subsubheading Answer | ||
| 1051 | |||
| 1052 | No, that's a matter of design of Gnus, fixing this would | ||
| 1053 | mean reimplementation of major parts of Gnus' | ||
| 1054 | back ends. Gnus thinks "highest-article-number - | ||
| 1055 | lowest-article-number = total-number-of-articles". This | ||
| 1056 | works OK for Usenet groups, but if you delete and move | ||
| 1057 | many messages in mail groups, this fails. To cure the | ||
| 1058 | symptom, enter the group via @samp{C-u RET} | ||
| 1059 | (this makes Gnus get all messages), then | ||
| 1060 | hit @samp{M P b} to mark all messages and | ||
| 1061 | then say @samp{B m name.of.group} to move | ||
| 1062 | all messages to the group they have been in before, they | ||
| 1063 | get new message numbers in this process and the count is | ||
| 1064 | right again (until you delete and move your mail to other | ||
| 1065 | groups again). | ||
| 1066 | |||
| 1067 | @node [4.13] | ||
| 1068 | @subsubheading Question 4.13 | ||
| 1069 | |||
| 1070 | I don't like the layout of summary and article buffer, how | ||
| 1071 | to change it? Perhaps even a three pane display? | ||
| 1072 | |||
| 1073 | @subsubheading Answer | ||
| 1074 | |||
| 1075 | You can control the windows configuration by calling the | ||
| 1076 | function gnus-add-configuration. The syntax is a bit | ||
| 1077 | complicated but explained very well in the manual node | ||
| 1078 | "Window Layout". Some popular examples: | ||
| 1079 | |||
| 1080 | Instead 25% summary 75% article buffer 35% summary and 65% | ||
| 1081 | article (the 1.0 for article means "take the remaining | ||
| 1082 | space"): | ||
| 1203 | 1083 | ||
| 1204 | @example | 1084 | @example |
| 1205 | (gnus-add-configuration | 1085 | (gnus-add-configuration |
| 1206 | '(article (vertical 1.0 | 1086 | '(article (vertical 1.0 (summary .35 point) (article 1.0)))) |
| 1207 | (summary .35 point) | ||
| 1208 | (article 1.0)))) | ||
| 1209 | @end example | 1087 | @end example |
| 1210 | 1088 | @noindent | |
| 1211 | 1089 | ||
| 1212 | A three pane layout, Group buffer on the left, summary | 1090 | A three pane layout, Group buffer on the left, summary |
| 1213 | buffer top-right, article buffer bottom-right: | 1091 | buffer top-right, article buffer bottom-right: |
| 1214 | |||
| 1215 | 1092 | ||
| 1216 | @example | 1093 | @example |
| 1217 | (gnus-add-configuration | 1094 | (gnus-add-configuration |
| @@ -1228,46 +1105,40 @@ Answer: | |||
| 1228 | (vertical 25 | 1105 | (vertical 25 |
| 1229 | (group 1.0)) | 1106 | (group 1.0)) |
| 1230 | (vertical 1.0 | 1107 | (vertical 1.0 |
| 1231 | (summary 1.0 point))))) | 1108 | (summary 1.0 point))))) |
| 1232 | @end example | 1109 | @end example |
| 1233 | 1110 | @noindent | |
| 1234 | @ifnottex | ||
| 1235 | @node [4.14], [4.15], [4.13], FAQ 4 - Reading messages | ||
| 1236 | @end ifnottex | ||
| 1237 | @subsubheading Question 4.14: | ||
| 1238 | 1111 | ||
| 1239 | I don't like the way the Summary buffer looks, how to tweak it? | 1112 | @node [4.14] |
| 1240 | 1113 | @subsubheading Question 4.14 | |
| 1241 | 1114 | ||
| 1242 | Answer: | 1115 | I don't like the way the Summary buffer looks, how to tweak it? |
| 1243 | |||
| 1244 | You've got to play around with the variable | ||
| 1245 | gnus-summary-line-format. It's value is a string of | ||
| 1246 | symbols which stand for things like author, date, subject | ||
| 1247 | etc. A list of the available specifiers can be found in the | ||
| 1248 | manual node "Summary Buffer Lines" and the often forgotten | ||
| 1249 | node "Formatting Variables" and it's sub-nodes. There | ||
| 1250 | you'll find useful things like positioning the cursor and | ||
| 1251 | tabulators which allow you a summary in table form, but | ||
| 1252 | sadly hard tabulators are broken in 5.8.8. | ||
| 1253 | |||
| 1254 | 1116 | ||
| 1255 | Since 5.10, Gnus offers you some very nice new specifiers, | 1117 | @subsubheading Answer |
| 1256 | e.g. %B which draws a thread-tree and %&user-date which | 1118 | |
| 1257 | gives you a date where the details are dependent of the | 1119 | You've got to play around with the variable |
| 1258 | articles age. Here's an example which uses both: | 1120 | gnus-summary-line-format. It's value is a string of |
| 1259 | 1121 | symbols which stand for things like author, date, subject | |
| 1122 | etc. A list of the available specifiers can be found in the | ||
| 1123 | manual node "Summary Buffer Lines" and the often forgotten | ||
| 1124 | node "Formatting Variables" and it's sub-nodes. There | ||
| 1125 | you'll find useful things like positioning the cursor and | ||
| 1126 | tabulators which allow you a summary in table form, but | ||
| 1127 | sadly hard tabulators are broken in 5.8.8. | ||
| 1128 | |||
| 1129 | Since 5.10, Gnus offers you some very nice new specifiers, | ||
| 1130 | e.g. %B which draws a thread-tree and %&user-date which | ||
| 1131 | gives you a date where the details are dependent of the | ||
| 1132 | articles age. Here's an example which uses both: | ||
| 1260 | 1133 | ||
| 1261 | @example | 1134 | @example |
| 1262 | (setq gnus-summary-line-format | 1135 | (setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") |
| 1263 | ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") | ||
| 1264 | @end example | 1136 | @end example |
| 1265 | |||
| 1266 | @noindent | 1137 | @noindent |
| 1267 | resulting in: | ||
| 1268 | |||
| 1269 | 1138 | ||
| 1270 | @smallexample | 1139 | resulting in: |
| 1140 | |||
| 1141 | @example | ||
| 1271 | :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 | 1142 | :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 |
| 1272 | :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 | 1143 | :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 |
| 1273 | :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 | 1144 | :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 |
| @@ -1280,54 +1151,48 @@ Answer: | |||
| 1280 | :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 | 1151 | :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 |
| 1281 | :O \-> ... | 18 |Kai Grossjohann | 0:35 | 1152 | :O \-> ... | 18 |Kai Grossjohann | 0:35 |
| 1282 | :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 | 1153 | :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 |
| 1283 | @end smallexample | 1154 | @end example |
| 1284 | 1155 | @noindent | |
| 1285 | @ifnottex | ||
| 1286 | @node [4.15], , [4.14], FAQ 4 - Reading messages | ||
| 1287 | @end ifnottex | ||
| 1288 | @subsubheading Question 4.15: | ||
| 1289 | 1156 | ||
| 1290 | How to split incoming mails in several groups? | 1157 | @node [4.15] |
| 1291 | 1158 | @subsubheading Question 4.15 | |
| 1292 | 1159 | ||
| 1293 | Answer: | 1160 | How to split incoming mails in several groups? |
| 1294 | 1161 | ||
| 1295 | Gnus offers two possibilities for splitting mail, the easy | 1162 | @subsubheading Answer |
| 1296 | nnmail-split-methods and the more powerful Fancy Mail | ||
| 1297 | Splitting. I'll only talk about the first one, refer to | ||
| 1298 | the manual, node "Fancy Mail Splitting" for the latter. | ||
| 1299 | |||
| 1300 | 1163 | ||
| 1301 | The value of nnmail-split-methods is a list, each element | 1164 | Gnus offers two possibilities for splitting mail, the easy |
| 1302 | is a list which stands for a splitting rule. Each rule has | 1165 | nnmail-split-methods and the more powerful Fancy Mail |
| 1303 | the form "group where matching articles should go to", | 1166 | Splitting. I'll only talk about the first one, refer to |
| 1304 | "regular expression which has to be matched", the first | 1167 | the manual, node "Fancy Mail Splitting" for the latter. |
| 1305 | rule which matches wins. The last rule must always be a | 1168 | |
| 1306 | general rule (regular expression .*) which denotes where | 1169 | The value of nnmail-split-methods is a list, each element |
| 1307 | articles should go which don't match any other rule. If | 1170 | is a list which stands for a splitting rule. Each rule has |
| 1308 | the folder doesn't exist yet, it will be created as soon | 1171 | the form "group where matching articles should go to", |
| 1309 | as an article lands there. By default the mail will be | 1172 | "regular expression which has to be matched", the first |
| 1310 | send to all groups whose rules match. If you | 1173 | rule which matches wins. The last rule must always be a |
| 1311 | don't want that (you probably don't want), say | 1174 | general rule (regular expression .*) which denotes where |
| 1312 | 1175 | articles should go which don't match any other rule. If | |
| 1176 | the folder doesn't exist yet, it will be created as soon | ||
| 1177 | as an article lands there. By default the mail will be | ||
| 1178 | send to all groups whose rules match. If you | ||
| 1179 | don't want that (you probably don't want), say | ||
| 1313 | 1180 | ||
| 1314 | @example | 1181 | @example |
| 1315 | (setq nnmail-crosspost nil) | 1182 | (setq nnmail-crosspost nil) |
| 1316 | @end example | 1183 | @end example |
| 1317 | |||
| 1318 | @noindent | 1184 | @noindent |
| 1319 | in ~/.gnus. | ||
| 1320 | |||
| 1321 | 1185 | ||
| 1322 | An example might be better than thousand words, so here's | 1186 | in ~/.gnus.el. |
| 1323 | my nnmail-split-methods. Note that I send duplicates in a | 1187 | |
| 1324 | special group and that the default group is spam, since I | 1188 | An example might be better than thousand words, so here's |
| 1325 | filter all mails out which are from some list I'm | 1189 | my nnmail-split-methods. Note that I send duplicates in a |
| 1326 | subscribed to or which are addressed directly to me | 1190 | special group and that the default group is spam, since I |
| 1327 | before. Those rules kill about 80% of the Spam which | 1191 | filter all mails out which are from some list I'm |
| 1328 | reaches me (Email addresses are changed to prevent spammers | 1192 | subscribed to or which are addressed directly to me |
| 1329 | from using them): | 1193 | before. Those rules kill about 80% of the Spam which |
| 1330 | 1194 | reaches me (Email addresses are changed to prevent spammers | |
| 1195 | from using them): | ||
| 1331 | 1196 | ||
| 1332 | @example | 1197 | @example |
| 1333 | (setq nnmail-split-methods | 1198 | (setq nnmail-split-methods |
| @@ -1336,133 +1201,114 @@ Answer: | |||
| 1336 | ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") | 1201 | ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") |
| 1337 | ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") | 1202 | ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") |
| 1338 | ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") | 1203 | ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") |
| 1339 | ("Hamster-src" | 1204 | ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") |
| 1340 | "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") | ||
| 1341 | ("Tagesschau" "^From: tagesschau <localpart@@www.tagesschau.bla>$") | 1205 | ("Tagesschau" "^From: tagesschau <localpart@@www.tagesschau.bla>$") |
| 1342 | ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") | 1206 | ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") |
| 1343 | ("EK" | 1207 | ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") |
| 1344 | "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") | 1208 | ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") |
| 1345 | ("Spam" | 1209 | ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") |
| 1346 | "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") | 1210 | ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") |
| 1347 | ("Spam" | ||
| 1348 | "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") | ||
| 1349 | ("Spam" | ||
| 1350 | "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") | ||
| 1351 | ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") | 1211 | ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") |
| 1352 | ("Spam" | 1212 | ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") |
| 1353 | "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") | 1213 | ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") |
| 1354 | ("Spam" | ||
| 1355 | "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") | ||
| 1356 | ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") | 1214 | ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") |
| 1357 | ("Spam" "^Received: from link2buy.com") | 1215 | ("Spam" "^Received: from link2buy.com") |
| 1358 | ("Spam" "^CC: .*azzrael@@t-online.bla") | 1216 | ("Spam" "^CC: .*azzrael@@t-online.bla") |
| 1359 | ("Spam" "^X-Mailer-Version: 1.50 BETA") | 1217 | ("Spam" "^X-Mailer-Version: 1.50 BETA") |
| 1360 | ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") | 1218 | ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") |
| 1361 | ("Inbox" | 1219 | ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") |
| 1362 | "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") | ||
| 1363 | ("Spam" ""))) | 1220 | ("Spam" ""))) |
| 1364 | @end example | 1221 | @end example |
| 1365 | 1222 | @noindent | |
| 1366 | 1223 | ||
| 1367 | @ifnottex | 1224 | @node FAQ 5 - Composing messages |
| 1368 | @node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions | ||
| 1369 | @end ifnottex | ||
| 1370 | @subsection Composing messages | 1225 | @subsection Composing messages |
| 1371 | 1226 | ||
| 1372 | @menu | 1227 | @menu |
| 1373 | * [5.1]:: What are the basic commands I need to know for sending mail and | 1228 | * [5.1]:: What are the basic commands I need to know for sending |
| 1374 | postings? | 1229 | mail and postings? |
| 1375 | * [5.2]:: How to enable automatic word-wrap when composing messages? | 1230 | * [5.2]:: How to enable automatic word-wrap when composing messages? |
| 1376 | * [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? | 1231 | * [5.3]:: How to set stuff like From, Organization, Reply-To, |
| 1377 | * [5.4]:: Can I set things like From, Signature etc group based on the | 1232 | signature...? |
| 1378 | group I post too? | 1233 | * [5.4]:: Can I set things like From, Signature etc group based on |
| 1379 | * [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? | 1234 | the group I post too? |
| 1380 | * [5.6]:: Can I set the dictionary based on the group I'm posting to? | 1235 | * [5.5]:: Is there a spell-checker? Perhaps even on-the-fly |
| 1381 | * [5.7]:: Is there some kind of address-book, so I needn't remember all | 1236 | spell-checking? |
| 1382 | those email addresses? | 1237 | * [5.6]:: Can I set the dictionary based on the group I'm posting |
| 1383 | * [5.8]:: Sometimes I see little images at the top of article buffer. | 1238 | to? |
| 1384 | What's that and how can I send one with my postings, too? | 1239 | * [5.7]:: Is there some kind of address-book, so I needn't remember |
| 1385 | * [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. | 1240 | all those email addresses? |
| 1386 | Can Gnus warn me, when I'm replying by mail in newsgroups? | 1241 | * [5.8]:: Sometimes I see little images at the top of article |
| 1387 | * [5.10]:: How to tell Gnus not to generate a sender header? | 1242 | buffer. What's that and how can I send one with my postings, too? |
| 1388 | * [5.11]:: I want Gnus to locally store copies of my send mail and news, | 1243 | * [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. |
| 1389 | how to do it? | 1244 | Can Gnus warn me, when I'm replying by mail in newsgroups? |
| 1390 | * [5.12]:: People tell me my Message-IDs are not correct, | 1245 | * [5.10]:: How to tell Gnus not to generate a sender header? |
| 1391 | why aren't they and how to fix it? | 1246 | * [5.11]:: I want Gnus to locally store copies of my send mail and |
| 1247 | news, how to do it? | ||
| 1248 | * [5.12]:: People tell me my Message-IDs are not correct, why aren't | ||
| 1249 | they and how to fix it? | ||
| 1392 | @end menu | 1250 | @end menu |
| 1393 | 1251 | ||
| 1394 | @ifnottex | 1252 | @node [5.1] |
| 1395 | @node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages | 1253 | @subsubheading Question 5.1 |
| 1396 | @end ifnottex | ||
| 1397 | @subsubheading Question 5.1: | ||
| 1398 | 1254 | ||
| 1399 | What are the basic commands I need to know for sending mail and postings? | 1255 | What are the basic commands I need to know for sending mail and postings? |
| 1400 | |||
| 1401 | 1256 | ||
| 1402 | Answer: | 1257 | @subsubheading Answer |
| 1403 | |||
| 1404 | To start composing a new mail hit @samp{m} | ||
| 1405 | either in Group or Summary buffer, for a posting, it's | ||
| 1406 | either @samp{a} in Group buffer and | ||
| 1407 | filling the Newsgroups header manually | ||
| 1408 | or @samp{a} in the Summary buffer of the | ||
| 1409 | group where the posting shall be send to. Replying by mail | ||
| 1410 | is | ||
| 1411 | @samp{r} if you don't want to cite the | ||
| 1412 | author, or import the cited text manually and | ||
| 1413 | @samp{R} to cite the text of the original | ||
| 1414 | message. For a follow up to a newsgroup, it's | ||
| 1415 | @samp{f} and @samp{F} | ||
| 1416 | (analog to @samp{r} and | ||
| 1417 | @samp{R}). | ||
| 1418 | |||
| 1419 | 1258 | ||
| 1420 | Enter new headers above the line saying "--text follows | 1259 | To start composing a new mail hit @samp{m} |
| 1421 | this line--", enter the text below the line. When ready | 1260 | either in Group or Summary buffer, for a posting, it's |
| 1422 | hit @samp{C-c C-c}, to send the message, | 1261 | either @samp{a} in Group buffer and |
| 1423 | if you want to finish it later hit @samp{C-c | 1262 | filling the Newsgroups header manually |
| 1424 | C-d} to save it in the drafts group, where you | 1263 | or @samp{a} in the Summary buffer of the |
| 1425 | can start editing it again by saying @samp{D | 1264 | group where the posting shall be send to. Replying by mail |
| 1426 | e}. | 1265 | is |
| 1427 | 1266 | @samp{r} if you don't want to cite the | |
| 1428 | @ifnottex | 1267 | author, or import the cited text manually and |
| 1429 | @node [5.2], [5.3], [5.1], FAQ 5 - Composing messages | 1268 | @samp{R} to cite the text of the original |
| 1430 | @end ifnottex | 1269 | message. For a follow up to a newsgroup, it's |
| 1431 | @subsubheading Question 5.2: | 1270 | @samp{f} and @samp{F} |
| 1271 | (analogously to @samp{r} and | ||
| 1272 | @samp{R}). | ||
| 1432 | 1273 | ||
| 1433 | How to enable automatic word-wrap when composing messages? | 1274 | Enter new headers above the line saying "--text follows |
| 1434 | 1275 | this line--", enter the text below the line. When ready | |
| 1276 | hit @samp{C-c C-c}, to send the message, | ||
| 1277 | if you want to finish it later hit @samp{C-c | ||
| 1278 | C-d} to save it in the drafts group, where you | ||
| 1279 | can start editing it again by saying @samp{D | ||
| 1280 | e}. | ||
| 1435 | 1281 | ||
| 1436 | Answer: | 1282 | @node [5.2] |
| 1283 | @subsubheading Question 5.2 | ||
| 1437 | 1284 | ||
| 1438 | Say | 1285 | How to enable automatic word-wrap when composing messages? |
| 1439 | 1286 | ||
| 1287 | @subsubheading Answer | ||
| 1288 | |||
| 1289 | Say | ||
| 1440 | 1290 | ||
| 1441 | @example | 1291 | @example |
| 1442 | (add-hook 'message-mode-hook | 1292 | (add-hook 'message-mode-hook |
| 1443 | (lambda () | 1293 | (lambda () |
| 1444 | (setq fill-column 72) | 1294 | (setq fill-column 72) |
| 1445 | (turn-on-auto-fill))) | 1295 | (turn-on-auto-fill))) |
| 1446 | @end example | 1296 | @end example |
| 1447 | |||
| 1448 | @noindent | 1297 | @noindent |
| 1449 | in ~/.gnus. You can reformat a paragraph by hitting | ||
| 1450 | @samp{M-q} (as usual) | ||
| 1451 | |||
| 1452 | @ifnottex | ||
| 1453 | @node [5.3], [5.4], [5.2], FAQ 5 - Composing messages | ||
| 1454 | @end ifnottex | ||
| 1455 | @subsubheading Question 5.3: | ||
| 1456 | 1298 | ||
| 1457 | How to set stuff like From, Organization, Reply-To, signature...? | 1299 | in ~/.gnus.el. You can reformat a paragraph by hitting |
| 1458 | 1300 | @samp{M-q} (as usual) | |
| 1459 | 1301 | ||
| 1460 | Answer: | 1302 | @node [5.3] |
| 1303 | @subsubheading Question 5.3 | ||
| 1461 | 1304 | ||
| 1462 | There are other ways, but you should use posting styles | 1305 | How to set stuff like From, Organization, Reply-To, signature...? |
| 1463 | for this. (See below why). | 1306 | |
| 1464 | This example should make the syntax clear: | 1307 | @subsubheading Answer |
| 1465 | 1308 | ||
| 1309 | There are other ways, but you should use posting styles | ||
| 1310 | for this. (See below why). | ||
| 1311 | This example should make the syntax clear: | ||
| 1466 | 1312 | ||
| 1467 | @example | 1313 | @example |
| 1468 | (setq gnus-posting-styles | 1314 | (setq gnus-posting-styles |
| @@ -1474,146 +1320,121 @@ Answer: | |||
| 1474 | ("X-SampleHeader" "foobar") | 1320 | ("X-SampleHeader" "foobar") |
| 1475 | (eval (setq some-variable "Foo bar"))))) | 1321 | (eval (setq some-variable "Foo bar"))))) |
| 1476 | @end example | 1322 | @end example |
| 1477 | |||
| 1478 | @noindent | 1323 | @noindent |
| 1479 | The ".*" means that this settings are the default ones | ||
| 1480 | (see below), valid values for the first element of the | ||
| 1481 | following lists are signature, signature-file, | ||
| 1482 | organization, address, name or body. The attribute name | ||
| 1483 | can also be a string. In that case, this will be used as | ||
| 1484 | a header name, and the value will be inserted in the | ||
| 1485 | headers of the article; if the value is `nil', the header | ||
| 1486 | name will be removed. You can also say (eval (foo bar)), | ||
| 1487 | then the function foo will be evaluated with argument bar | ||
| 1488 | and the result will be thrown away. | ||
| 1489 | |||
| 1490 | @ifnottex | ||
| 1491 | @node [5.4], [5.5], [5.3], FAQ 5 - Composing messages | ||
| 1492 | @end ifnottex | ||
| 1493 | @subsubheading Question 5.4: | ||
| 1494 | |||
| 1495 | Can I set things like From, Signature etc group based on the group I post too? | ||
| 1496 | |||
| 1497 | 1324 | ||
| 1498 | Answer: | 1325 | The ".*" means that this settings are the default ones |
| 1499 | 1326 | (see below), valid values for the first element of the | |
| 1500 | That's the strength of posting styles. Before, we used ".*" | 1327 | following lists are signature, signature-file, |
| 1501 | to set the default for all groups. You can use a regexp | 1328 | organization, address, name or body. The attribute name |
| 1502 | like "^gmane" and the following settings are only applied | 1329 | can also be a string. In that case, this will be used as |
| 1503 | to postings you send to the gmane hierarchy, use | 1330 | a header name, and the value will be inserted in the |
| 1504 | ".*binaries" instead and they will be applied to postings | 1331 | headers of the article; if the value is `nil', the header |
| 1505 | send to groups containing the string binaries in their | 1332 | name will be removed. You can also say (eval (foo bar)), |
| 1506 | name etc. | 1333 | then the function foo will be evaluated with argument bar |
| 1507 | 1334 | and the result will be thrown away. | |
| 1508 | 1335 | ||
| 1509 | You can instead of specifying a regexp specify a function | 1336 | @node [5.4] |
| 1510 | which is evaluated, only if it returns true, the | 1337 | @subsubheading Question 5.4 |
| 1511 | corresponding settings take effect. Two interesting | 1338 | |
| 1512 | candidates for this are message-news-p which returns t if | 1339 | Can I set things like From, Signature etc group based on the group I post too? |
| 1513 | the current Group is a newsgroup and the corresponding | 1340 | |
| 1514 | message-mail-p. | 1341 | @subsubheading Answer |
| 1515 | 1342 | ||
| 1516 | 1343 | That's the strength of posting styles. Before, we used ".*" | |
| 1517 | Note that all forms that match are applied, that means in | 1344 | to set the default for all groups. You can use a regexp |
| 1518 | the example below, when I post to | 1345 | like "^gmane" and the following settings are only applied |
| 1519 | gmane.mail.spam.spamassassin.general, the settings under | 1346 | to postings you send to the gmane hierarchy, use |
| 1520 | ".*" are applied and the settings under message-news-p and | 1347 | ".*binaries" instead and they will be applied to postings |
| 1521 | those under "^gmane" and those under | 1348 | send to groups containing the string binaries in their |
| 1522 | "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because | 1349 | name etc. |
| 1523 | of this put general settings at the top and specific ones | 1350 | |
| 1524 | at the bottom. | 1351 | You can instead of specifying a regexp specify a function |
| 1525 | 1352 | which is evaluated, only if it returns true, the | |
| 1353 | corresponding settings take effect. Two interesting | ||
| 1354 | candidates for this are message-news-p which returns t if | ||
| 1355 | the current Group is a newsgroup and the corresponding | ||
| 1356 | message-mail-p. | ||
| 1357 | |||
| 1358 | Note that all forms that match are applied, that means in | ||
| 1359 | the example below, when I post to | ||
| 1360 | gmane.mail.spam.spamassassin.general, the settings under | ||
| 1361 | ".*" are applied and the settings under message-news-p and | ||
| 1362 | those under "^gmane" and those under | ||
| 1363 | "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because | ||
| 1364 | of this put general settings at the top and specific ones | ||
| 1365 | at the bottom. | ||
| 1526 | 1366 | ||
| 1527 | @example | 1367 | @example |
| 1528 | (setq gnus-posting-styles | 1368 | (setq gnus-posting-styles |
| 1529 | '((".*" ;;default | 1369 | '((".*" ;;default |
| 1530 | (name "Frank Schmitt") | 1370 | (name "Frank Schmitt") |
| 1531 | (organization "Hamme net, kren mer och nimmi") | 1371 | (organization "Hamme net, kren mer och nimmi") |
| 1532 | (signature-file "~/.signature")) | 1372 | (signature-file "~/.signature") ) |
| 1533 | ((message-news-p) ;;Usenet news? | 1373 | ((message-news-p) ;;Usenet news? |
| 1534 | (address "mySpamTrap@@Frank-Schmitt.bla") | 1374 | (address "mySpamTrap@@Frank-Schmitt.bla") |
| 1535 | ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")) | 1375 | ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") ) |
| 1536 | ((message-mail-p) ;;mail? | 1376 | ((message-mail-p) ;;mail? |
| 1537 | (address "usedForMails@@Frank-Schmitt.bla")) | 1377 | (address "usedForMails@@Frank-Schmitt.bla") ) |
| 1538 | ("^gmane" ;;this is mail, too in fact | 1378 | ("^gmane" ;;this is mail, too in fact |
| 1539 | (address "usedForMails@@Frank-Schmitt.net") | 1379 | (address "usedForMails@@Frank-Schmitt.net") |
| 1540 | ("Reply-To" nil)) | 1380 | ("Reply-To" nil) ) |
| 1541 | ("^gmane.mail.spam.spamassassin.general$" | 1381 | ("^gmane.mail.spam.spamassassin.general$" |
| 1542 | (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) | 1382 | (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) |
| 1543 | (address "Azzrael@@rz-online.de")))) | 1383 | (address "Azzrael@@rz-online.de")) )) |
| 1544 | @end example | 1384 | @end example |
| 1545 | 1385 | @noindent | |
| 1546 | @ifnottex | ||
| 1547 | @node [5.5], [5.6], [5.4], FAQ 5 - Composing messages | ||
| 1548 | @end ifnottex | ||
| 1549 | @subsubheading Question 5.5: | ||
| 1550 | 1386 | ||
| 1551 | Is there a spell-checker? Perhaps even on-the-fly spell-checking? | 1387 | @node [5.5] |
| 1552 | 1388 | @subsubheading Question 5.5 | |
| 1553 | 1389 | ||
| 1554 | Answer: | 1390 | Is there a spell-checker? Perhaps even on-the-fly spell-checking? |
| 1555 | 1391 | ||
| 1556 | You can use ispell.el to spell-check stuff in Emacs. So the first | 1392 | @subsubheading Answer |
| 1557 | thing to do is to make sure that you've got either | ||
| 1558 | @itemize @bullet | ||
| 1559 | @item | ||
| 1560 | @uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell} | ||
| 1561 | or | ||
| 1562 | @item | ||
| 1563 | @uref{http://aspell.sourceforge.net/,aspell} | ||
| 1564 | @end itemize | ||
| 1565 | @noindent | ||
| 1566 | installed and in your Path. | ||
| 1567 | |||
| 1568 | Then you need | ||
| 1569 | @uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el} | ||
| 1570 | and for on-the-fly spell-checking | ||
| 1571 | @uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}. | ||
| 1572 | Ispell.el is shipped with Gnus Emacs and available through the Emacs | ||
| 1573 | package system, flyspell.el is shipped with Emacs and part of XEmacs | ||
| 1574 | text-modes package which is available through the package system, so | ||
| 1575 | there should be no need to install them manually. | ||
| 1576 | |||
| 1577 | 1393 | ||
| 1578 | Ispell.el assumes you use ispell, if you choose aspell say | 1394 | You can use ispell.el to spell-check stuff in Emacs. So the |
| 1579 | 1395 | first thing to do is to make sure that you've got either | |
| 1396 | @uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell} | ||
| 1397 | or @uref{http://aspell.sourceforge.net/, aspell} | ||
| 1398 | installed and in your Path. Then you need | ||
| 1399 | @uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el} | ||
| 1400 | and for on-the-fly spell-checking | ||
| 1401 | @uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. | ||
| 1402 | Ispell.el is shipped with Emacs and available through the XEmacs package system, | ||
| 1403 | flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is | ||
| 1404 | available through the package system, so there should be no need to install them | ||
| 1405 | manually. | ||
| 1406 | |||
| 1407 | Ispell.el assumes you use ispell, if you choose aspell say | ||
| 1580 | 1408 | ||
| 1581 | @example | 1409 | @example |
| 1582 | (setq ispell-program-name "aspell") | 1410 | (setq ispell-program-name "aspell") |
| 1583 | @end example | 1411 | @end example |
| 1584 | |||
| 1585 | |||
| 1586 | @noindent | 1412 | @noindent |
| 1587 | in your Emacs configuration file. | ||
| 1588 | 1413 | ||
| 1414 | in your Emacs configuration file. | ||
| 1589 | 1415 | ||
| 1590 | If you want your outgoing messages to be spell-checked, say | 1416 | If you want your outgoing messages to be spell-checked, say |
| 1591 | |||
| 1592 | 1417 | ||
| 1593 | @example | 1418 | @example |
| 1594 | (add-hook 'message-send-hook 'ispell-message) | 1419 | (add-hook 'message-send-hook 'ispell-message) |
| 1595 | @end example | 1420 | @end example |
| 1596 | |||
| 1597 | @noindent | 1421 | @noindent |
| 1598 | In your ~/.gnus, if you prefer on-the-fly spell-checking say | 1422 | |
| 1599 | 1423 | In your ~/.gnus.el, if you prefer on-the-fly spell-checking say | |
| 1600 | 1424 | ||
| 1601 | @example | 1425 | @example |
| 1602 | (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) | 1426 | (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) |
| 1603 | @end example | 1427 | @end example |
| 1604 | 1428 | @noindent | |
| 1605 | @ifnottex | ||
| 1606 | @node [5.6], [5.7], [5.5], FAQ 5 - Composing messages | ||
| 1607 | @end ifnottex | ||
| 1608 | @subsubheading Question 5.6: | ||
| 1609 | 1429 | ||
| 1610 | Can I set the dictionary based on the group I'm posting to? | 1430 | @node [5.6] |
| 1611 | 1431 | @subsubheading Question 5.6 | |
| 1612 | 1432 | ||
| 1613 | Answer: | 1433 | Can I set the dictionary based on the group I'm posting to? |
| 1614 | 1434 | ||
| 1615 | Yes, say something like | 1435 | @subsubheading Answer |
| 1616 | 1436 | ||
| 1437 | Yes, say something like | ||
| 1617 | 1438 | ||
| 1618 | @example | 1439 | @example |
| 1619 | (add-hook 'gnus-select-group-hook | 1440 | (add-hook 'gnus-select-group-hook |
| @@ -1625,55 +1446,47 @@ Answer: | |||
| 1625 | (t | 1446 | (t |
| 1626 | (ispell-change-dictionary "english"))))) | 1447 | (ispell-change-dictionary "english"))))) |
| 1627 | @end example | 1448 | @end example |
| 1628 | |||
| 1629 | |||
| 1630 | @noindent | 1449 | @noindent |
| 1631 | in ~/.gnus. Change "^de\\." and "deutsch8" to something | ||
| 1632 | that suits your needs. | ||
| 1633 | 1450 | ||
| 1634 | @ifnottex | 1451 | in ~/.gnus.el. Change "^de\\." and "deutsch8" to something |
| 1635 | @node [5.7], [5.8], [5.6], FAQ 5 - Composing messages | 1452 | that suits your needs. |
| 1636 | @end ifnottex | ||
| 1637 | @subsubheading Question 5.7: | ||
| 1638 | 1453 | ||
| 1639 | Is there some kind of address-book, so I needn't remember | 1454 | @node [5.7] |
| 1640 | all those email addresses? | 1455 | @subsubheading Question 5.7 |
| 1641 | |||
| 1642 | 1456 | ||
| 1643 | Answer: | 1457 | Is there some kind of address-book, so I needn't remember |
| 1458 | all those email addresses? | ||
| 1644 | 1459 | ||
| 1645 | There's an very basic solution for this, mail aliases. | 1460 | @subsubheading Answer |
| 1646 | You can store your mail addresses in a ~/.mailrc file using a simple | 1461 | |
| 1647 | alias syntax: | 1462 | There's an very basic solution for this, mail aliases. |
| 1648 | 1463 | You can store your mail addresses in a ~/.mailrc file using a simple | |
| 1464 | alias syntax: | ||
| 1649 | 1465 | ||
| 1650 | @example | 1466 | @example |
| 1651 | alias al "Al <al@@english-heritage.bla>" | 1467 | alias al "Al <al@@english-heritage.bla>" |
| 1652 | @end example | 1468 | @end example |
| 1653 | |||
| 1654 | @noindent | 1469 | @noindent |
| 1655 | Then typing your alias (followed by a space or punctuation | ||
| 1656 | character) on a To: or Cc: line in the message buffer will | ||
| 1657 | cause Gnus to insert the full address for you. See the | ||
| 1658 | node "Mail Aliases" in Message (not Gnus) manual for | ||
| 1659 | details. | ||
| 1660 | |||
| 1661 | 1470 | ||
| 1662 | However, what you really want is the Insidious Big Brother | 1471 | Then typing your alias (followed by a space or punctuation |
| 1663 | Database bbdb. Get it through the XEmacs package system or from | 1472 | character) on a To: or Cc: line in the message buffer will |
| 1664 | @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. | 1473 | cause Gnus to insert the full address for you. See the |
| 1665 | Now place the following in ~/.gnus, to activate bbdb for Gnus: | 1474 | node "Mail Aliases" in Message (not Gnus) manual for |
| 1666 | 1475 | details. | |
| 1476 | |||
| 1477 | However, what you really want is the Insidious Big Brother | ||
| 1478 | Database bbdb. Get it through the XEmacs package system or from | ||
| 1479 | @uref{http://bbdb.sourceforge.net/, bbdb's homepage}. | ||
| 1480 | Now place the following in ~/.gnus.el, to activate bbdb for Gnus: | ||
| 1667 | 1481 | ||
| 1668 | @example | 1482 | @example |
| 1669 | (require 'bbdb) | 1483 | (require 'bbdb) |
| 1670 | (bbdb-initialize 'gnus 'message) | 1484 | (bbdb-initialize 'gnus 'message) |
| 1671 | @end example | 1485 | @end example |
| 1672 | |||
| 1673 | @noindent | 1486 | @noindent |
| 1674 | Now you probably want some general bbdb configuration, | 1487 | |
| 1675 | place them in ~/.emacs: | 1488 | Now you probably want some general bbdb configuration, |
| 1676 | 1489 | place them in ~/.emacs: | |
| 1677 | 1490 | ||
| 1678 | @example | 1491 | @example |
| 1679 | (require 'bbdb) | 1492 | (require 'bbdb) |
| @@ -1689,56 +1502,50 @@ alias al "Al <al@@english-heritage.bla>" | |||
| 1689 | ;;No popup-buffers | 1502 | ;;No popup-buffers |
| 1690 | (setq bbdb-use-pop-up nil) | 1503 | (setq bbdb-use-pop-up nil) |
| 1691 | @end example | 1504 | @end example |
| 1692 | |||
| 1693 | @noindent | 1505 | @noindent |
| 1694 | Now you should be ready to go. Say @samp{M-x bbdb RET | ||
| 1695 | RET} to open a bbdb buffer showing all | ||
| 1696 | entries. Say @samp{c} to create a new | ||
| 1697 | entry, @samp{b} to search your BBDB and | ||
| 1698 | @samp{C-o} to add a new field to an | ||
| 1699 | entry. If you want to add a sender to the BBDB you can | ||
| 1700 | also just hit `:' on the posting in the summary buffer and | ||
| 1701 | you are done. When you now compose a new mail, | ||
| 1702 | hit @samp{TAB} to cycle through know | ||
| 1703 | recipients. | ||
| 1704 | |||
| 1705 | @ifnottex | ||
| 1706 | @node [5.8], [5.9], [5.7], FAQ 5 - Composing messages | ||
| 1707 | @end ifnottex | ||
| 1708 | @subsubheading Question 5.8: | ||
| 1709 | |||
| 1710 | Sometimes I see little images at the top of article | ||
| 1711 | buffer. What's that and how can I send one with my | ||
| 1712 | postings, too? | ||
| 1713 | |||
| 1714 | 1506 | ||
| 1715 | Answer: | 1507 | Now you should be ready to go. Say @samp{M-x bbdb RET |
| 1716 | 1508 | RET} to open a bbdb buffer showing all | |
| 1717 | Those images are called X-Faces. They are 48*48 pixel b/w | 1509 | entries. Say @samp{c} to create a new |
| 1718 | pictures, encoded in a header line. If you want to include | 1510 | entry, @samp{b} to search your BBDB and |
| 1719 | one in your posts, you've got to convert some image to a | 1511 | @samp{C-o} to add a new field to an |
| 1720 | X-Face. So fire up some image manipulation program (say | 1512 | entry. If you want to add a sender to the BBDB you can |
| 1721 | Gimp), open the image you want to include, cut out the | 1513 | also just hit `:' on the posting in the summary buffer and |
| 1722 | relevant part, reduce color depth to 1 bit, resize to | 1514 | you are done. When you now compose a new mail, |
| 1723 | 48*48 and save as bitmap. Now you should get the compface | 1515 | hit @samp{TAB} to cycle through know |
| 1724 | package from | 1516 | recipients. |
| 1725 | @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. | 1517 | |
| 1726 | and create the actual X-face by saying | 1518 | @node [5.8] |
| 1727 | 1519 | @subsubheading Question 5.8 | |
| 1520 | |||
| 1521 | Sometimes I see little images at the top of article | ||
| 1522 | buffer. What's that and how can I send one with my | ||
| 1523 | postings, too? | ||
| 1524 | |||
| 1525 | @subsubheading Answer | ||
| 1526 | |||
| 1527 | Those images are called X-Faces. They are 48*48 pixel b/w | ||
| 1528 | pictures, encoded in a header line. If you want to include | ||
| 1529 | one in your posts, you've got to convert some image to a | ||
| 1530 | X-Face. So fire up some image manipulation program (say | ||
| 1531 | Gimp), open the image you want to include, cut out the | ||
| 1532 | relevant part, reduce color depth to 1 bit, resize to | ||
| 1533 | 48*48 and save as bitmap. Now you should get the compface | ||
| 1534 | package from | ||
| 1535 | @uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}. | ||
| 1536 | and create the actual X-face by saying | ||
| 1728 | 1537 | ||
| 1729 | @example | 1538 | @example |
| 1730 | cat file.xbm | xbm2ikon |compface > file.face | 1539 | cat file.xbm | xbm2ikon | compface > file.face |
| 1731 | cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted | 1540 | cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted |
| 1732 | @end example | 1541 | @end example |
| 1733 | |||
| 1734 | @noindent | 1542 | @noindent |
| 1735 | If you can't use compface, there's an online X-face converter at@* | ||
| 1736 | @uref{http://www.dairiki.org/xface/}. If you use MS Windows, you | ||
| 1737 | could also use the WinFace program from | ||
| 1738 | @uref{http://www.xs4all.nl/~walterln/winface/}. | ||
| 1739 | 1543 | ||
| 1740 | Now you only have to tell Gnus to include the X-face in your postings | 1544 | If you can't use compface, there's an online X-face converter at |
| 1741 | by saying | 1545 | @uref{http://www.dairiki.org/xface/}. |
| 1546 | If you use MS Windows, you could also use the WinFace program from | ||
| 1547 | @uref{http://www.xs4all.nl/~walterln/winface/}. | ||
| 1548 | Now you only have to tell Gnus to include the X-face in your postings by saying | ||
| 1742 | 1549 | ||
| 1743 | @example | 1550 | @example |
| 1744 | (setq message-default-headers | 1551 | (setq message-default-headers |
| @@ -1747,33 +1554,28 @@ by saying | |||
| 1747 | (insert-file-contents "~/.xemacs/xface") | 1554 | (insert-file-contents "~/.xemacs/xface") |
| 1748 | (buffer-string))) | 1555 | (buffer-string))) |
| 1749 | @end example | 1556 | @end example |
| 1750 | |||
| 1751 | @noindent | 1557 | @noindent |
| 1752 | in ~/.gnus. | ||
| 1753 | |||
| 1754 | @ifnottex | ||
| 1755 | @node [5.9], [5.10], [5.8], FAQ 5 - Composing messages | ||
| 1756 | @end ifnottex | ||
| 1757 | @subsubheading Question 5.9: | ||
| 1758 | |||
| 1759 | Sometimes I accidentally hit r instead of f in | ||
| 1760 | newsgroups. Can Gnus warn me, when I'm replying by mail in | ||
| 1761 | newsgroups? | ||
| 1762 | |||
| 1763 | 1558 | ||
| 1764 | Answer: | 1559 | in ~/.gnus.el. |
| 1765 | 1560 | ||
| 1766 | Put this in ~/.gnus: | 1561 | @node [5.9] |
| 1767 | 1562 | @subsubheading Question 5.9 | |
| 1563 | |||
| 1564 | Sometimes I accidentally hit r instead of f in | ||
| 1565 | newsgroups. Can Gnus warn me, when I'm replying by mail in | ||
| 1566 | newsgroups? | ||
| 1567 | |||
| 1568 | @subsubheading Answer | ||
| 1569 | |||
| 1570 | Put this in ~/.gnus.el: | ||
| 1768 | 1571 | ||
| 1769 | @example | 1572 | @example |
| 1770 | (setq gnus-confirm-mail-reply-to-news t) | 1573 | (setq gnus-confirm-mail-reply-to-news t) |
| 1771 | @end example | 1574 | @end example |
| 1772 | |||
| 1773 | @noindent | 1575 | @noindent |
| 1774 | if you already use Gnus 5.10, if you still use 5.8.8 or | 1576 | |
| 1775 | 5.9 try this instead: | 1577 | if you already use Gnus 5.10, if you still use 5.8.8 or |
| 1776 | 1578 | 5.9 try this instead: | |
| 1777 | 1579 | ||
| 1778 | @example | 1580 | @example |
| 1779 | (eval-after-load "gnus-msg" | 1581 | (eval-after-load "gnus-msg" |
| @@ -1785,44 +1587,37 @@ Answer: | |||
| 1785 | (y-or-n-p "Really reply by mail to article author? ")) | 1587 | (y-or-n-p "Really reply by mail to article author? ")) |
| 1786 | ad-do-it)))) | 1588 | ad-do-it)))) |
| 1787 | @end example | 1589 | @end example |
| 1788 | 1590 | @noindent | |
| 1789 | @ifnottex | ||
| 1790 | @node [5.10], [5.11], [5.9], FAQ 5 - Composing messages | ||
| 1791 | @end ifnottex | ||
| 1792 | @subsubheading Question 5.10: | ||
| 1793 | 1591 | ||
| 1794 | How to tell Gnus not to generate a sender header? | 1592 | @node [5.10] |
| 1795 | 1593 | @subsubheading Question 5.10 | |
| 1796 | 1594 | ||
| 1797 | Answer: | 1595 | How to tell Gnus not to generate a sender header? |
| 1798 | 1596 | ||
| 1799 | Since 5.10 Gnus doesn't generate a sender header by | 1597 | @subsubheading Answer |
| 1800 | default. For older Gnus' try this in ~/.gnus: | 1598 | |
| 1801 | 1599 | Since 5.10 Gnus doesn't generate a sender header by | |
| 1600 | default. For older Gnus' try this in ~/.gnus.el: | ||
| 1802 | 1601 | ||
| 1803 | @example | 1602 | @example |
| 1804 | (eval-after-load "message" | 1603 | (eval-after-load "message" |
| 1805 | '(add-to-list 'message-syntax-checks '(sender . disabled))) | 1604 | '(add-to-list 'message-syntax-checks '(sender . disabled))) |
| 1806 | @end example | 1605 | @end example |
| 1807 | 1606 | @noindent | |
| 1808 | |||
| 1809 | @ifnottex | ||
| 1810 | @node [5.11], [5.12], [5.10], FAQ 5 - Composing messages | ||
| 1811 | @end ifnottex | ||
| 1812 | @subsubheading Question 5.11: | ||
| 1813 | 1607 | ||
| 1814 | I want gnus to locally store copies of my send mail and | 1608 | @node [5.11] |
| 1815 | news, how to do it? | 1609 | @subsubheading Question 5.11 |
| 1816 | |||
| 1817 | 1610 | ||
| 1818 | Answer: | 1611 | I want Gnus to locally store copies of my send mail and |
| 1612 | news, how to do it? | ||
| 1819 | 1613 | ||
| 1820 | You must set the variable gnus-message-archive-group to do | 1614 | @subsubheading Answer |
| 1821 | this. You can set it to a string giving the name of the | 1615 | |
| 1822 | group where the copies shall go or like in the example | 1616 | You must set the variable gnus-message-archive-group to do |
| 1823 | below use a function which is evaluated and which returns | 1617 | this. You can set it to a string giving the name of the |
| 1824 | the group to use. | 1618 | group where the copies shall go or like in the example |
| 1825 | 1619 | below use a function which is evaluated and which returns | |
| 1620 | the group to use. | ||
| 1826 | 1621 | ||
| 1827 | @example | 1622 | @example |
| 1828 | (setq gnus-message-archive-group | 1623 | (setq gnus-message-archive-group |
| @@ -1830,31 +1625,31 @@ Answer: | |||
| 1830 | "nnml:Send-News" | 1625 | "nnml:Send-News" |
| 1831 | "nnml:Send-Mail"))) | 1626 | "nnml:Send-Mail"))) |
| 1832 | @end example | 1627 | @end example |
| 1833 | 1628 | @noindent | |
| 1834 | |||
| 1835 | @ifnottex | ||
| 1836 | @node [5.12], , [5.11], FAQ 5 - Composing messages | ||
| 1837 | @end ifnottex | ||
| 1838 | @subsubheading Question 5.12: | ||
| 1839 | 1629 | ||
| 1840 | People tell me my Message-IDs are not correct, why | 1630 | @node [5.12] |
| 1841 | aren't they and how to fix it? | 1631 | @subsubheading Question 5.12 |
| 1842 | 1632 | ||
| 1633 | People tell me my Message-IDs are not correct, why | ||
| 1634 | aren't they and how to fix it? | ||
| 1843 | 1635 | ||
| 1844 | Answer: | 1636 | @subsubheading Answer |
| 1637 | |||
| 1638 | The message-ID is an unique identifier for messages you | ||
| 1639 | send. To make it unique, Gnus need to know which machine | ||
| 1640 | name to put after the "@@". If the name of the machine | ||
| 1641 | where Gnus is running isn't suitable (it probably isn't | ||
| 1642 | at most private machines) you can tell Gnus what to use | ||
| 1643 | by saying: | ||
| 1845 | 1644 | ||
| 1846 | The message-ID is an unique identifier for messages you | ||
| 1847 | send. To make it unique, Gnus need to know which machine | ||
| 1848 | name to put after the "@@". If the name of the machine | ||
| 1849 | where Gnus is running isn't suitable (it probably isn't | ||
| 1850 | at most private machines) you can tell Gnus what to use | ||
| 1851 | by saying | ||
| 1852 | @example | 1645 | @example |
| 1853 | (setq message-user-fqdn "yourmachine.yourdomain.tld") | 1646 | (setq message-user-fqdn "yourmachine.yourdomain.tld") |
| 1854 | @end example | 1647 | @end example |
| 1855 | @noindent | 1648 | @noindent |
| 1856 | in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this | 1649 | |
| 1857 | instead (works for newer versions a well): | 1650 | in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this |
| 1651 | instead (works for newer versions a well): | ||
| 1652 | |||
| 1858 | @example | 1653 | @example |
| 1859 | (eval-after-load "message" | 1654 | (eval-after-load "message" |
| 1860 | '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! | 1655 | '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! |
| @@ -1865,110 +1660,97 @@ instead (works for newer versions a well): | |||
| 1865 | "Return user's fully qualified domain name." | 1660 | "Return user's fully qualified domain name." |
| 1866 | fqdn)))) | 1661 | fqdn)))) |
| 1867 | @end example | 1662 | @end example |
| 1663 | @noindent | ||
| 1868 | 1664 | ||
| 1869 | If you have no idea what to insert for | 1665 | If you have no idea what to insert for |
| 1870 | "yourmachine.yourdomain.tld", you've got several | 1666 | "yourmachine.yourdomain.tld", you've got several |
| 1871 | choices. You can either ask your provider if he allows | 1667 | choices. You can either ask your provider if he allows |
| 1872 | you to use something like | 1668 | you to use something like |
| 1873 | yourUserName.userfqdn.provider.net, or you can use | 1669 | yourUserName.userfqdn.provider.net, or you can use |
| 1874 | somethingUnique.yourdomain.tld if you own the domain | 1670 | somethingUnique.yourdomain.tld if you own the domain |
| 1875 | yourdomain.tld, or you can register at a service which | 1671 | yourdomain.tld, or you can register at a service which |
| 1876 | gives private users a FQDN for free, e.g. | 1672 | gives private users a FQDN for free, e.g. |
| 1877 | @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. | 1673 | @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. |
| 1878 | (Sorry but this website is in German, if you know of an | 1674 | (Sorry but this website is in German, if you know of an |
| 1879 | English one offering the same, drop me a note). | 1675 | English one offering the same, drop me a note). |
| 1880 | 1676 | ||
| 1881 | 1677 | Finally you can tell Gnus not to generate a Message-ID | |
| 1882 | Finally you can tell Gnus not to generate a Message-ID | 1678 | for News at all (and letting the server do the job) by saying |
| 1883 | for News at all (and letting the server do the job) by saying | ||
| 1884 | |||
| 1885 | 1679 | ||
| 1886 | @example | 1680 | @example |
| 1887 | (setq message-required-news-headers | 1681 | (setq message-required-news-headers |
| 1888 | (remove' Message-ID message-required-news-headers)) | 1682 | (remove' Message-ID message-required-news-headers)) |
| 1889 | @end example | 1683 | @end example |
| 1890 | |||
| 1891 | @noindent | 1684 | @noindent |
| 1892 | you can also tell Gnus not to generate Message-IDs for mail by saying | 1685 | |
| 1893 | 1686 | you can also tell Gnus not to generate Message-IDs for mail by saying | |
| 1894 | 1687 | ||
| 1895 | @example | 1688 | @example |
| 1896 | (setq message-required-mail-headers | 1689 | (setq message-required-mail-headers |
| 1897 | (remove' Message-ID message-required-mail-headers)) | 1690 | (remove' Message-ID message-required-mail-headers)) |
| 1898 | @end example | 1691 | @end example |
| 1899 | |||
| 1900 | @noindent | 1692 | @noindent |
| 1901 | , however some mail servers don't generate proper | ||
| 1902 | Message-IDs, too, so test if your Mail Server behaves | ||
| 1903 | correctly by sending yourself a Mail and looking at the Message-ID. | ||
| 1904 | |||
| 1905 | 1693 | ||
| 1906 | @ifnottex | 1694 | , however some mail servers don't generate proper |
| 1907 | @node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions | 1695 | Message-IDs, too, so test if your Mail Server behaves |
| 1908 | @end ifnottex | 1696 | correctly by sending yourself a Mail and looking at the Message-ID. |
| 1697 | |||
| 1698 | @node FAQ 6 - Old messages | ||
| 1909 | @subsection Old messages | 1699 | @subsection Old messages |
| 1910 | 1700 | ||
| 1911 | @menu | 1701 | @menu |
| 1912 | * [6.1]:: How to import my old mail into Gnus? | 1702 | * [6.1]:: How to import my old mail into Gnus? |
| 1913 | * [6.2]:: How to archive interesting messages? | 1703 | * [6.2]:: How to archive interesting messages? |
| 1914 | * [6.3]:: How to search for a specific message? | 1704 | * [6.3]:: How to search for a specific message? |
| 1915 | * [6.4]:: How to get rid of old unwanted mail? | 1705 | * [6.4]:: How to get rid of old unwanted mail? |
| 1916 | * [6.5]:: I want that all read messages are expired (at least in some | 1706 | * [6.5]:: I want that all read messages are expired (at least in some |
| 1917 | groups). How to do it? | 1707 | groups). How to do it? |
| 1918 | * [6.6]:: I don't want expiration to delete my mails but to move them | 1708 | * [6.6]:: I don't want expiration to delete my mails but to move them |
| 1919 | to another group. | 1709 | to another group. |
| 1920 | @end menu | 1710 | @end menu |
| 1921 | 1711 | ||
| 1922 | @ifnottex | 1712 | @node [6.1] |
| 1923 | @node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages | 1713 | @subsubheading Question 6.1 |
| 1924 | @end ifnottex | 1714 | |
| 1925 | @subsubheading Question 6.1: | 1715 | How to import my old mail into Gnus? |
| 1926 | 1716 | ||
| 1927 | How to import my old mail into Gnus? | 1717 | @subsubheading Answer |
| 1928 | 1718 | ||
| 1929 | 1719 | The easiest way is to tell your old mail program to | |
| 1930 | Answer: | 1720 | export the messages in mbox format. Most Unix mailers |
| 1931 | 1721 | are able to do this, if you come from the MS Windows | |
| 1932 | The easiest way is to tell your old mail program to | 1722 | world, you may find tools at |
| 1933 | export the messages in mbox format. Most Unix mailers | 1723 | @uref{http://mbx2mbox.sourceforge.net/}. |
| 1934 | are able to do this, if you come from the MS Windows | 1724 | |
| 1935 | world, you may find tools at | 1725 | Now you've got to import this mbox file into Gnus. To do |
| 1936 | @uref{http://mbx2mbox.sourceforge.net/}. | 1726 | this, create a nndoc group based on the mbox file by |
| 1937 | 1727 | saying @samp{G f /path/file.mbox RET} in | |
| 1938 | 1728 | Group buffer. You now have read-only access to your | |
| 1939 | Now you've got to import this mbox file into Gnus. To do | 1729 | mail. If you want to import the messages to your normal |
| 1940 | this, create a nndoc group based on the mbox file by | 1730 | Gnus mail groups hierarchy, enter the nndoc group you've |
| 1941 | saying @samp{G f /path/file.mbox RET} in | 1731 | just created by saying @samp{C-u RET} |
| 1942 | Group buffer. You now have read-only access to your | 1732 | (thus making sure all messages are retrieved), mark all |
| 1943 | mail. If you want to import the messages to your normal | 1733 | messages by saying @samp{M P b} and |
| 1944 | Gnus mail groups hierarchy, enter the nndoc group you've | 1734 | either copy them to the desired group by saying |
| 1945 | just created by saying @samp{C-u RET} | 1735 | @samp{B c name.of.group RET} or send them |
| 1946 | (thus making sure all messages are retrieved), mark all | 1736 | through nnmail-split-methods (respool them) by saying |
| 1947 | messages by saying @samp{M P b} and | 1737 | @samp{B r}. |
| 1948 | either copy them to the desired group by saying | 1738 | |
| 1949 | @samp{B c name.of.group RET} or send them | 1739 | @node [6.2] |
| 1950 | through nnmail-split-methods (respool them) by saying | 1740 | @subsubheading Question 6.2 |
| 1951 | @samp{B r}. | 1741 | |
| 1952 | 1742 | How to archive interesting messages? | |
| 1953 | @ifnottex | 1743 | |
| 1954 | @node [6.2], [6.3], [6.1], FAQ 6 - Old messages | 1744 | @subsubheading Answer |
| 1955 | @end ifnottex | 1745 | |
| 1956 | @subsubheading Question 6.2: | 1746 | If you stumble across an interesting message, say in |
| 1957 | 1747 | gnu.emacs.gnus and want to archive it there are several | |
| 1958 | How to archive interesting messages? | 1748 | solutions. The first and easiest is to save it to a file |
| 1959 | 1749 | by saying @samp{O f}. However, wouldn't | |
| 1960 | 1750 | it be much more convenient to have more direct access to | |
| 1961 | Answer: | 1751 | the archived message from Gnus? If you say yes, put this |
| 1962 | 1752 | snippet by Frank Haun <pille3003@@fhaun.de> in | |
| 1963 | If you stumble across an interesting message, say in | 1753 | ~/.gnus.el: |
| 1964 | gnu.emacs.gnus and want to archive it there are several | ||
| 1965 | solutions. The first and easiest is to save it to a file | ||
| 1966 | by saying @samp{O f}. However, wouldn't | ||
| 1967 | it be much more convenient to have more direct access to | ||
| 1968 | the archived message from Gnus? If you say yes, put this | ||
| 1969 | snippet by Frank Haun <pille3003@@fhaun.de> in | ||
| 1970 | ~/.gnus: | ||
| 1971 | |||
| 1972 | 1754 | ||
| 1973 | @example | 1755 | @example |
| 1974 | (defun my-archive-article (&optional n) | 1756 | (defun my-archive-article (&optional n) |
| @@ -1987,624 +1769,531 @@ more then one article." | |||
| 1987 | (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) | 1769 | (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) |
| 1988 | (gnus-summary-copy-article n archive-name))) | 1770 | (gnus-summary-copy-article n archive-name))) |
| 1989 | @end example | 1771 | @end example |
| 1990 | |||
| 1991 | @noindent | 1772 | @noindent |
| 1992 | You can now say @samp{M-x | ||
| 1993 | my-archive-article} in summary buffer to | ||
| 1994 | archive the article under the cursor in a nnml | ||
| 1995 | group. (Change nnml to your preferred back end) | ||
| 1996 | |||
| 1997 | 1773 | ||
| 1998 | Of course you can also make sure the cache is enabled by saying | 1774 | You can now say @samp{M-x |
| 1999 | 1775 | my-archive-article} in summary buffer to | |
| 1776 | archive the article under the cursor in a nnml | ||
| 1777 | group. (Change nnml to your preferred back end) | ||
| 1778 | |||
| 1779 | Of course you can also make sure the cache is enabled by saying | ||
| 2000 | 1780 | ||
| 2001 | @example | 1781 | @example |
| 2002 | (setq gnus-use-cache t) | 1782 | (setq gnus-use-cache t) |
| 2003 | @end example | 1783 | @end example |
| 2004 | |||
| 2005 | @noindent | 1784 | @noindent |
| 2006 | then you only have to set either the tick or the dormant | ||
| 2007 | mark for articles you want to keep, setting the read | ||
| 2008 | mark will remove them from cache. | ||
| 2009 | |||
| 2010 | @ifnottex | ||
| 2011 | @node [6.3], [6.4], [6.2], FAQ 6 - Old messages | ||
| 2012 | @end ifnottex | ||
| 2013 | @subsubheading Question 6.3: | ||
| 2014 | |||
| 2015 | How to search for a specific message? | ||
| 2016 | |||
| 2017 | |||
| 2018 | Answer: | ||
| 2019 | |||
| 2020 | There are several ways for this, too. For a posting from | ||
| 2021 | a Usenet group the easiest solution is probably to ask | ||
| 2022 | @uref{http://groups.google.com,groups.google.com}, | ||
| 2023 | if you found the posting there, tell Google to display | ||
| 2024 | the raw message, look for the message-id, and say | ||
| 2025 | @samp{M-^ the@@message.id RET} in a | ||
| 2026 | summary buffer. | ||
| 2027 | Since Gnus 5.10 there's also a Gnus interface for | ||
| 2028 | groups.google.com which you can call with | ||
| 2029 | @samp{G W}) in group buffer. | ||
| 2030 | |||
| 2031 | |||
| 2032 | Another idea which works for both mail and news groups | ||
| 2033 | is to enter the group where the message you are | ||
| 2034 | searching is and use the standard Emacs search | ||
| 2035 | @samp{C-s}, it's smart enough to look at | ||
| 2036 | articles in collapsed threads, too. If you want to | ||
| 2037 | search bodies, too try @samp{M-s} | ||
| 2038 | instead. Further on there are the | ||
| 2039 | gnus-summary-limit-to-foo functions, which can help you, | ||
| 2040 | too. | ||
| 2041 | |||
| 2042 | 1785 | ||
| 2043 | Of course you can also use grep to search through your | 1786 | then you only have to set either the tick or the dormant |
| 2044 | local mail, but this is both slow for big archives and | 1787 | mark for articles you want to keep, setting the read |
| 2045 | inconvenient since you are not displaying the found mail | 1788 | mark will remove them from cache. |
| 2046 | in Gnus. Here comes nnir into action. Nnir is a front end | 1789 | |
| 2047 | to search engines like swish-e or swish++ and | 1790 | @node [6.3] |
| 2048 | others. You index your mail with one of those search | 1791 | @subsubheading Question 6.3 |
| 2049 | engines and with the help of nnir you can search trough | 1792 | |
| 2050 | the indexed mail and generate a temporary group with all | 1793 | How to search for a specific message? |
| 2051 | messages which met your search criteria. If this sound | 1794 | |
| 2052 | cool to you get nnir.el from the contrib directory of the Gnus | 1795 | @subsubheading Answer |
| 2053 | distribution or | 1796 | |
| 2054 | @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain} | 1797 | There are several ways for this, too. For a posting from |
| 2055 | Instructions on how to use it are at the top of the file. | 1798 | a Usenet group the easiest solution is probably to ask |
| 2056 | 1799 | @uref{http://groups.google.com, groups.google.com}, | |
| 2057 | @ifnottex | 1800 | if you found the posting there, tell Google to display |
| 2058 | @node [6.4], [6.5], [6.3], FAQ 6 - Old messages | 1801 | the raw message, look for the message-id, and say |
| 2059 | @end ifnottex | 1802 | @samp{M-^ the@@message.id RET} in a |
| 2060 | @subsubheading Question 6.4: | 1803 | summary buffer. |
| 2061 | 1804 | Since Gnus 5.10 there's also a Gnus interface for | |
| 2062 | How to get rid of old unwanted mail? | 1805 | groups.google.com which you can call with |
| 2063 | 1806 | @samp{G W}) in group buffer. | |
| 2064 | 1807 | ||
| 2065 | Answer: | 1808 | Another idea which works for both mail and news groups |
| 2066 | 1809 | is to enter the group where the message you are | |
| 2067 | You can of course just mark the mail you don't need | 1810 | searching is and use the standard Emacs search |
| 2068 | anymore by saying @samp{#} with point | 1811 | @samp{C-s}, it's smart enough to look at |
| 2069 | over the mail and then say @samp{B DEL} | 1812 | articles in collapsed threads, too. If you want to |
| 2070 | to get rid of them forever. You could also instead of | 1813 | search bodies, too try @samp{M-s} |
| 2071 | actually deleting them, send them to a junk-group by | 1814 | instead. Further on there are the |
| 2072 | saying @samp{B m nnml:trash-bin} which | 1815 | gnus-summary-limit-to-foo functions, which can help you, |
| 2073 | you clear from time to time, but both are not the intended | 1816 | too. |
| 2074 | way in Gnus. | 1817 | |
| 2075 | 1818 | Of course you can also use grep to search through your | |
| 2076 | 1819 | local mail, but this is both slow for big archives and | |
| 2077 | In Gnus, we let mail expire like news expires on a news | 1820 | inconvenient since you are not displaying the found mail |
| 2078 | server. That means you tell Gnus the message is | 1821 | in Gnus. Here comes nnir into action. Nnir is a front end |
| 2079 | expirable (you tell Gnus "I don't need this mail | 1822 | to search engines like swish-e or swish++ and |
| 2080 | anymore") by saying @samp{E} with point | 1823 | others. You index your mail with one of those search |
| 2081 | over the mail in summary buffer. Now when you leave the | 1824 | engines and with the help of nnir you can search trough |
| 2082 | group, Gnus looks at all messages which you marked as | 1825 | the indexed mail and generate a temporary group with all |
| 2083 | expirable before and if they are old enough (default is | 1826 | messages which met your search criteria. If this sound |
| 2084 | older than a week) they are deleted. | 1827 | cool to you get nnir.el from |
| 2085 | 1828 | @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} | |
| 2086 | @ifnottex | 1829 | or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. |
| 2087 | @node [6.5], [6.6], [6.4], FAQ 6 - Old messages | 1830 | Instructions on how to use it are at the top of the file. |
| 2088 | @end ifnottex | 1831 | |
| 2089 | @subsubheading Question 6.5: | 1832 | @node [6.4] |
| 2090 | 1833 | @subsubheading Question 6.4 | |
| 2091 | I want that all read messages are expired (at least in | 1834 | |
| 2092 | some groups). How to do it? | 1835 | How to get rid of old unwanted mail? |
| 2093 | 1836 | ||
| 2094 | 1837 | @subsubheading Answer | |
| 2095 | Answer: | 1838 | |
| 2096 | 1839 | You can of course just mark the mail you don't need | |
| 2097 | If you want all read messages to be expired (e.g. in | 1840 | anymore by saying @samp{#} with point |
| 2098 | mailing lists where there's an online archive), you've | 1841 | over the mail and then say @samp{B DEL} |
| 2099 | got two choices: auto-expire and | 1842 | to get rid of them forever. You could also instead of |
| 2100 | total-expire. Auto-expire means, that every article | 1843 | actually deleting them, send them to a junk-group by |
| 2101 | which has no marks set and is selected for reading is | 1844 | saying @samp{B m nnml:trash-bin} which |
| 2102 | marked as expirable, Gnus hits @samp{E} | 1845 | you clear from time to time, but both are not the intended |
| 2103 | for you every time you read a message. Total-expire | 1846 | way in Gnus. |
| 2104 | follows a slightly different approach, here all article | 1847 | |
| 2105 | where the read mark is set are expirable. | 1848 | In Gnus, we let mail expire like news expires on a news |
| 2106 | 1849 | server. That means you tell Gnus the message is | |
| 2107 | 1850 | expirable (you tell Gnus "I don't need this mail | |
| 2108 | To activate auto-expire, include auto-expire in the | 1851 | anymore") by saying @samp{E} with point |
| 2109 | Group parameters for the group. (Hit @samp{G | 1852 | over the mail in summary buffer. Now when you leave the |
| 2110 | c} in summary buffer with point over the | 1853 | group, Gnus looks at all messages which you marked as |
| 2111 | group to change group parameters). For total-expire add | 1854 | expirable before and if they are old enough (default is |
| 2112 | total-expire to the group-parameters. | 1855 | older than a week) they are deleted. |
| 2113 | 1856 | ||
| 2114 | 1857 | @node [6.5] | |
| 2115 | Which method you choose is merely a matter of taste: | 1858 | @subsubheading Question 6.5 |
| 2116 | Auto-expire is faster, but it doesn't play together with | 1859 | |
| 2117 | Adaptive Scoring, so if you want to use this feature, | 1860 | I want that all read messages are expired (at least in |
| 2118 | you should use total-expire. | 1861 | some groups). How to do it? |
| 2119 | 1862 | ||
| 2120 | 1863 | @subsubheading Answer | |
| 2121 | If you want a message to be excluded from expiration in | 1864 | |
| 2122 | a group where total or auto expire is active, set either | 1865 | If you want all read messages to be expired (e.g. in |
| 2123 | tick (hit @samp{u}) or dormant mark (hit | 1866 | mailing lists where there's an online archive), you've |
| 2124 | @samp{u}), when you use auto-expire, you | 1867 | got two choices: auto-expire and |
| 2125 | can also set the read mark (hit | 1868 | total-expire. Auto-expire means, that every article |
| 2126 | @samp{d}). | 1869 | which has no marks set and is selected for reading is |
| 2127 | 1870 | marked as expirable, Gnus hits @samp{E} | |
| 2128 | @ifnottex | 1871 | for you every time you read a message. Total-expire |
| 2129 | @node [6.6], , [6.5], FAQ 6 - Old messages | 1872 | follows a slightly different approach, here all article |
| 2130 | @end ifnottex | 1873 | where the read mark is set are expirable. |
| 2131 | @subsubheading Question 6.6: | 1874 | |
| 2132 | 1875 | To activate auto-expire, include auto-expire in the | |
| 2133 | I don't want expiration to delete my mails but to move them | 1876 | Group parameters for the group. (Hit @samp{G |
| 2134 | to another group. | 1877 | c} in summary buffer with point over the |
| 2135 | 1878 | group to change group parameters). For total-expire add | |
| 2136 | 1879 | total-expire to the group-parameters. | |
| 2137 | Answer: | 1880 | |
| 2138 | 1881 | Which method you choose is merely a matter of taste: | |
| 2139 | Say something like this in ~/.gnus: | 1882 | Auto-expire is faster, but it doesn't play together with |
| 2140 | 1883 | Adaptive Scoring, so if you want to use this feature, | |
| 1884 | you should use total-expire. | ||
| 1885 | |||
| 1886 | If you want a message to be excluded from expiration in | ||
| 1887 | a group where total or auto expire is active, set either | ||
| 1888 | tick (hit @samp{u}) or dormant mark (hit | ||
| 1889 | @samp{u}), when you use auto-expire, you | ||
| 1890 | can also set the read mark (hit | ||
| 1891 | @samp{d}). | ||
| 1892 | |||
| 1893 | @node [6.6] | ||
| 1894 | @subsubheading Question 6.6 | ||
| 1895 | |||
| 1896 | I don't want expiration to delete my mails but to move them | ||
| 1897 | to another group. | ||
| 1898 | |||
| 1899 | @subsubheading Answer | ||
| 1900 | |||
| 1901 | Say something like this in ~/.gnus.el: | ||
| 2141 | 1902 | ||
| 2142 | @example | 1903 | @example |
| 2143 | (setq nnmail-expiry-target "nnml:expired") | 1904 | (setq nnmail-expiry-target "nnml:expired") |
| 2144 | @end example | 1905 | @end example |
| 2145 | |||
| 2146 | @noindent | 1906 | @noindent |
| 2147 | (If you want to change the value of nnmail-expiry-target | ||
| 2148 | on a per group basis see the question "How can I disable | ||
| 2149 | threading in some (e.g. mail-) groups, or set other | ||
| 2150 | variables specific for some groups?") | ||
| 2151 | |||
| 2152 | 1907 | ||
| 2153 | @ifnottex | 1908 | (If you want to change the value of nnmail-expiry-target |
| 2154 | @node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions | 1909 | on a per group basis see the question "How can I disable |
| 2155 | @end ifnottex | 1910 | threading in some (e.g. mail-) groups, or set other |
| 1911 | variables specific for some groups?") | ||
| 1912 | |||
| 1913 | @node FAQ 7 - Gnus in a dial-up environment | ||
| 2156 | @subsection Gnus in a dial-up environment | 1914 | @subsection Gnus in a dial-up environment |
| 2157 | 1915 | ||
| 2158 | @menu | 1916 | @menu |
| 2159 | * [7.1]:: I don't have a permanent connection to the net, how can I | 1917 | * [7.1]:: I don't have a permanent connection to the net, how can I |
| 2160 | minimize the time I've got to be connected? | 1918 | minimize the time I've got to be connected? |
| 2161 | * [7.2]:: So what was this thing about the Agent? | 1919 | * [7.2]:: So what was this thing about the Agent? |
| 2162 | * [7.3]:: I want to store article bodies on disk, too. How to do it? | 1920 | * [7.3]:: I want to store article bodies on disk, too. How to do it? |
| 2163 | * [7.4]:: How to tell Gnus not to try to send mails / postings while | 1921 | * [7.4]:: How to tell Gnus not to try to send mails / postings while |
| 2164 | I'm offline? | 1922 | I'm offline? |
| 2165 | @end menu | 1923 | @end menu |
| 2166 | 1924 | ||
| 2167 | 1925 | @node [7.1] | |
| 2168 | @ifnottex | 1926 | @subsubheading Question 7.1 |
| 2169 | @node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment | 1927 | |
| 2170 | @end ifnottex | 1928 | I don't have a permanent connection to the net, how can |
| 2171 | @subsubheading Question 7.1: | 1929 | I minimize the time I've got to be connected? |
| 2172 | 1930 | ||
| 2173 | I don't have a permanent connection to the net, how can | 1931 | @subsubheading Answer |
| 2174 | I minimize the time I've got to be connected? | 1932 | |
| 2175 | 1933 | You've got basically two options: Either you use the | |
| 2176 | 1934 | Gnus Agent (see below) for this, or you can install | |
| 2177 | Answer: | 1935 | programs which fetch your news and mail to your local |
| 2178 | 1936 | disk and Gnus reads the stuff from your local | |
| 2179 | You've got basically two options: Either you use the | 1937 | machine. |
| 2180 | Gnus Agent (see below) for this, or you can install | 1938 | |
| 2181 | programs which fetch your news and mail to your local | 1939 | If you want to follow the second approach, you need a |
| 2182 | disk and Gnus reads the stuff from your local | 1940 | program which fetches news and offers them to Gnus, a |
| 2183 | machine. | 1941 | program which does the same for mail and a program which |
| 2184 | 1942 | receives the mail you write from Gnus and sends them | |
| 2185 | 1943 | when you're online. | |
| 2186 | If you want to follow the second approach, you need a | 1944 | |
| 2187 | program which fetches news and offers them to Gnus, a | 1945 | Let's talk about Unix systems first: For the news part, |
| 2188 | program which does the same for mail and a program which | 1946 | the easiest solution is a small nntp server like |
| 2189 | receives the mail you write from Gnus and sends them | 1947 | @uref{http://www.leafnode.org/, Leafnode} or |
| 2190 | when you're online. | 1948 | @uref{http://infa.abo.fi/~patrik/sn/, sn}, |
| 2191 | 1949 | of course you can also install a full featured news | |
| 2192 | 1950 | server like | |
| 2193 | Let's talk about Unix systems first: For the news part, the easiest | 1951 | @uref{http://www.isc.org/products/INN/, inn}. |
| 2194 | solution is a small nntp server like | 1952 | Then you want to fetch your Mail, popular choices |
| 2195 | @uref{http://www.leafnode.org/,Leafnode} or | 1953 | are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail} |
| 2196 | @uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also | 1954 | and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}. |
| 2197 | install a full featured news server like | 1955 | You should tell those to write the mail to your disk and |
| 2198 | @uref{http://www.isc.org/products/INN/,inn}. | 1956 | Gnus to read it from there. Last but not least the mail |
| 2199 | 1957 | sending part: This can be done with every MTA like | |
| 2200 | Then you want to fetch your Mail, popular choices are | 1958 | @uref{http://www.sendmail.org/, sendmail}, |
| 2201 | @itemize @bullet | 1959 | @uref{http://www.qmail.org/, postfix}, |
| 2202 | @item | 1960 | @uref{http://www.exim.org/, exim} or |
| 2203 | @uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and | 1961 | @uref{http://www.qmail.org/, qmail}. |
| 2204 | @item | 1962 | |
| 2205 | @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. | 1963 | On windows boxes I'd vote for |
| 2206 | @end itemize | 1964 | @uref{http://www.tglsoft.de/, Hamster}, |
| 2207 | You should tell those to write the mail to your disk and Gnus to read | 1965 | it's a small freeware, open-source program which fetches |
| 2208 | it from there. Last but not least the mail sending part: This can be | 1966 | your mail and news from remote servers and offers them |
| 2209 | done with every MTA like @uref{http://www.sendmail.org/,sendmail}, | 1967 | to Gnus (or any other mail and/or news reader) via nntp |
| 2210 | @uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim} | 1968 | respectively POP3 or IMAP. It also includes a smtp |
| 2211 | or @uref{http://www.qmail.org/,qmail}. | 1969 | server for receiving mails from Gnus. |
| 2212 | 1970 | ||
| 2213 | 1971 | @node [7.2] | |
| 2214 | On windows boxes I'd vote for | 1972 | @subsubheading Question 7.2 |
| 2215 | @uref{http://www.tglsoft.de/,Hamster}, | 1973 | |
| 2216 | it's a small freeware, open-source program which fetches | 1974 | So what was this thing about the Agent? |
| 2217 | your mail and news from remote servers and offers them | 1975 | |
| 2218 | to Gnus (or any other mail and/or news reader) via nntp | 1976 | @subsubheading Answer |
| 2219 | respectively POP3 or IMAP. It also includes a smtp | 1977 | |
| 2220 | server for receiving mails from Gnus. | 1978 | The Gnus agent is part of Gnus, it allows you to fetch |
| 2221 | 1979 | mail and news and store them on disk for reading them | |
| 2222 | @ifnottex | 1980 | later when you're offline. It kind of mimics offline |
| 2223 | @node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment | 1981 | newsreaders like e.g. Forte Agent. If you want to use |
| 2224 | @end ifnottex | 1982 | the Agent place the following in ~/.gnus.el if you are |
| 2225 | @subsubheading Question 7.2: | 1983 | still using 5.8.8 or 5.9 (it's the default since 5.10): |
| 2226 | |||
| 2227 | So what was this thing about the Agent? | ||
| 2228 | |||
| 2229 | |||
| 2230 | Answer: | ||
| 2231 | |||
| 2232 | The Gnus agent is part of Gnus, it allows you to fetch | ||
| 2233 | mail and news and store them on disk for reading them | ||
| 2234 | later when you're offline. It kind of mimics offline | ||
| 2235 | newsreaders like e.g. Forte Agent. If you want to use | ||
| 2236 | the Agent place the following in ~/.gnus if you are | ||
| 2237 | still using 5.8.8 or 5.9 (it's the default since 5.10): | ||
| 2238 | |||
| 2239 | 1984 | ||
| 2240 | @example | 1985 | @example |
| 2241 | (setq gnus-agent t) | 1986 | (setq gnus-agent t) |
| 2242 | @end example | 1987 | @end example |
| 2243 | 1988 | @noindent | |
| 2244 | 1989 | ||
| 2245 | Now you've got to select the servers whose groups can be | 1990 | Now you've got to select the servers whose groups can be |
| 2246 | stored locally. To do this, open the server buffer | 1991 | stored locally. To do this, open the server buffer |
| 2247 | (that is press @samp{^} while in the | 1992 | (that is press @samp{^} while in the |
| 2248 | group buffer). Now select a server by moving point to | 1993 | group buffer). Now select a server by moving point to |
| 2249 | the line naming that server. Finally, agentize the | 1994 | the line naming that server. Finally, agentize the |
| 2250 | server by typing @samp{J a}. If you | 1995 | server by typing @samp{J a}. If you |
| 2251 | make a mistake, or change your mind, you can undo this | 1996 | make a mistake, or change your mind, you can undo this |
| 2252 | action by typing @samp{J r}. When | 1997 | action by typing @samp{J r}. When |
| 2253 | you're done, type 'q' to return to the group buffer. | 1998 | you're done, type 'q' to return to the group buffer. |
| 2254 | Now the next time you enter a group on a agentized | 1999 | Now the next time you enter a group on a agentized |
| 2255 | server, the headers will be stored on disk and read from | 2000 | server, the headers will be stored on disk and read from |
| 2256 | there the next time you enter the group. | 2001 | there the next time you enter the group. |
| 2257 | 2002 | ||
| 2258 | @ifnottex | 2003 | @node [7.3] |
| 2259 | @node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment | 2004 | @subsubheading Question 7.3 |
| 2260 | @end ifnottex | 2005 | |
| 2261 | @subsubheading Question 7.3: | 2006 | I want to store article bodies on disk, too. How to do it? |
| 2007 | |||
| 2008 | @subsubheading Answer | ||
| 2009 | |||
| 2010 | You can tell the agent to automatically fetch the bodies | ||
| 2011 | of articles which fulfill certain predicates, this is | ||
| 2012 | done in a special buffer which can be reached by | ||
| 2013 | saying @samp{J c} in group | ||
| 2014 | buffer. Please refer to the documentation for | ||
| 2015 | information which predicates are possible and how | ||
| 2016 | exactly to do it. | ||
| 2017 | |||
| 2018 | Further on you can tell the agent manually which | ||
| 2019 | articles to store on disk. There are two ways to do | ||
| 2020 | this: Number one: In the summary buffer, process mark a | ||
| 2021 | set of articles that shall be stored in the agent by | ||
| 2022 | saying @samp{#} with point over the | ||
| 2023 | article and then type @samp{J s}. The | ||
| 2024 | other possibility is to set, again in the summary | ||
| 2025 | buffer, downloadable (%) marks for the articles you | ||
| 2026 | want by typing @samp{@@} with point over | ||
| 2027 | the article and then typing @samp{J u}. | ||
| 2028 | What's the difference? Well, process marks are erased as | ||
| 2029 | soon as you exit the summary buffer while downloadable | ||
| 2030 | marks are permanent. You can actually set downloadable | ||
| 2031 | marks in several groups then use fetch session ('J s' in | ||
| 2032 | the GROUP buffer) to fetch all of those articles. The | ||
| 2033 | only downside is that fetch session also fetches all of | ||
| 2034 | the headers for every selected group on an agentized | ||
| 2035 | server. Depending on the volume of headers, the initial | ||
| 2036 | fetch session could take hours. | ||
| 2037 | |||
| 2038 | @node [7.4] | ||
| 2039 | @subsubheading Question 7.4 | ||
| 2040 | |||
| 2041 | How to tell Gnus not to try to send mails / postings | ||
| 2042 | while I'm offline? | ||
| 2043 | |||
| 2044 | @subsubheading Answer | ||
| 2045 | |||
| 2046 | All you've got to do is to tell Gnus when you are online | ||
| 2047 | (plugged) and when you are offline (unplugged), the rest | ||
| 2048 | works automatically. You can toggle plugged/unplugged | ||
| 2049 | state by saying @samp{J j} in group | ||
| 2050 | buffer. To start Gnus unplugged say @samp{M-x | ||
| 2051 | gnus-unplugged} instead of | ||
| 2052 | @samp{M-x gnus}. Note that for this to | ||
| 2053 | work, the agent must be active. | ||
| 2054 | |||
| 2055 | @node FAQ 8 - Getting help | ||
| 2056 | @subsection Getting help | ||
| 2262 | 2057 | ||
| 2263 | I want to store article bodies on disk, too. How to do it? | 2058 | @menu |
| 2264 | 2059 | * [8.1]:: How to find information and help inside Emacs? | |
| 2060 | * [8.2]:: I can't find anything in the Gnus manual about X (e.g. | ||
| 2061 | attachments, PGP, MIME...), is it not documented? | ||
| 2062 | * [8.3]:: Which websites should I know? | ||
| 2063 | * [8.4]:: Which mailing lists and newsgroups are there? | ||
| 2064 | * [8.5]:: Where to report bugs? | ||
| 2065 | * [8.6]:: I need real-time help, where to find it? | ||
| 2066 | @end menu | ||
| 2265 | 2067 | ||
| 2266 | Answer: | 2068 | @node [8.1] |
| 2069 | @subsubheading Question 8.1 | ||
| 2267 | 2070 | ||
| 2268 | You can tell the agent to automatically fetch the bodies | 2071 | How to find information and help inside Emacs? |
| 2269 | of articles which fulfill certain predicates, this is | ||
| 2270 | done in a special buffer which can be reached by | ||
| 2271 | saying @samp{J c} in group | ||
| 2272 | buffer. Please refer to the documentation for | ||
| 2273 | information which predicates are possible and how | ||
| 2274 | exactly to do it. | ||
| 2275 | |||
| 2276 | 2072 | ||
| 2277 | Further on you can tell the agent manually which | 2073 | @subsubheading Answer |
| 2278 | articles to store on disk. There are two ways to do | ||
| 2279 | this: Number one: In the summary buffer, process mark a | ||
| 2280 | set of articles that shall be stored in the agent by | ||
| 2281 | saying @samp{#} with point over the | ||
| 2282 | article and then type @samp{J s}. The | ||
| 2283 | other possibility is to set, again in the summary | ||
| 2284 | buffer, downloadable (%) marks for the articles you | ||
| 2285 | want by typing @samp{@@} with point over | ||
| 2286 | the article and then typing @samp{J u}. | ||
| 2287 | What's the difference? Well, process marks are erased as | ||
| 2288 | soon as you exit the summary buffer while downloadable | ||
| 2289 | marks are permanent. You can actually set downloadable | ||
| 2290 | marks in several groups then use fetch session ('J s' in | ||
| 2291 | the GROUP buffer) to fetch all of those articles. The | ||
| 2292 | only downside is that fetch session also fetches all of | ||
| 2293 | the headers for every selected group on an agentized | ||
| 2294 | server. Depending on the volume of headers, the initial | ||
| 2295 | fetch session could take hours. | ||
| 2296 | |||
| 2297 | @ifnottex | ||
| 2298 | @node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment | ||
| 2299 | @end ifnottex | ||
| 2300 | @subsubheading Question 7.4: | ||
| 2301 | 2074 | ||
| 2302 | How to tell Gnus not to try to send mails / postings | 2075 | The first stop should be the Gnus manual (Say |
| 2303 | while I'm offline? | 2076 | @samp{C-h i d m Gnus RET} to start the |
| 2304 | 2077 | Gnus manual, then walk through the menus or do a | |
| 2078 | full-text search with @samp{s}). Then | ||
| 2079 | there are the general Emacs help commands starting with | ||
| 2080 | C-h, type @samp{C-h ? ?} to get a list | ||
| 2081 | of all available help commands and their meaning. Finally | ||
| 2082 | @samp{M-x apropos-command} lets you | ||
| 2083 | search through all available functions and @samp{M-x | ||
| 2084 | apropos} searches the bound variables. | ||
| 2305 | 2085 | ||
| 2306 | Answer: | 2086 | @node [8.2] |
| 2087 | @subsubheading Question 8.2 | ||
| 2307 | 2088 | ||
| 2308 | All you've got to do is to tell Gnus when you are online | 2089 | I can't find anything in the Gnus manual about X |
| 2309 | (plugged) and when you are offline (unplugged), the rest | 2090 | (e.g. attachments, PGP, MIME...), is it not documented? |
| 2310 | works automatically. You can toggle plugged/unplugged | ||
| 2311 | state by saying @samp{J j} in group | ||
| 2312 | buffer. To start Gnus unplugged say @samp{M-x | ||
| 2313 | gnus-unplugged} instead of | ||
| 2314 | @samp{M-x gnus}. Note that for this to | ||
| 2315 | work, the agent must be active. | ||
| 2316 | |||
| 2317 | 2091 | ||
| 2318 | @ifnottex | 2092 | @subsubheading Answer |
| 2319 | @node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions | ||
| 2320 | @end ifnottex | ||
| 2321 | @subsection Getting help | ||
| 2322 | 2093 | ||
| 2323 | @menu | 2094 | There's not only the Gnus manual but also the manuals |
| 2324 | * [8.1]:: How to find information and help inside Emacs? | 2095 | for message, emacs-mime, sieve and pgg. Those packages |
| 2325 | * [8.2]:: I can't find anything in the Gnus manual about X | 2096 | are distributed with Gnus and used by Gnus but aren't |
| 2326 | (e.g. attachments, PGP, MIME...), is it not documented? | 2097 | really part of core Gnus, so they are documented in |
| 2327 | * [8.3]:: Which websites should I know? | 2098 | different info files, you should have a look in those |
| 2328 | * [8.4]:: Which mailing lists and newsgroups are there? | 2099 | manuals, too. |
| 2329 | * [8.5]:: Where to report bugs? | ||
| 2330 | * [8.6]:: I need real-time help, where to find it? | ||
| 2331 | @end menu | ||
| 2332 | 2100 | ||
| 2333 | @ifnottex | 2101 | @node [8.3] |
| 2334 | @node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help | 2102 | @subsubheading Question 8.3 |
| 2335 | @end ifnottex | ||
| 2336 | @subsubheading Question 8.1: | ||
| 2337 | 2103 | ||
| 2338 | How to find information and help inside Emacs? | 2104 | Which websites should I know? |
| 2339 | |||
| 2340 | 2105 | ||
| 2341 | Answer: | 2106 | @subsubheading Answer |
| 2342 | |||
| 2343 | The first stop should be the Gnus manual (Say | ||
| 2344 | @samp{C-h i d m Gnus RET} to start the | ||
| 2345 | Gnus manual, then walk through the menus or do a | ||
| 2346 | full-text search with @samp{s}). Then | ||
| 2347 | there are the general Emacs help commands starting with | ||
| 2348 | C-h, type @samp{C-h ? ?} to get a list | ||
| 2349 | of all available help commands and their meaning. Finally | ||
| 2350 | @samp{M-x apropos-command} lets you | ||
| 2351 | search through all available functions and @samp{M-x | ||
| 2352 | apropos} searches the bound variables. | ||
| 2353 | |||
| 2354 | @ifnottex | ||
| 2355 | @node [8.2], [8.3], [8.1], FAQ 8 - Getting help | ||
| 2356 | @end ifnottex | ||
| 2357 | @subsubheading Question 8.2: | ||
| 2358 | 2107 | ||
| 2359 | I can't find anything in the Gnus manual about X | 2108 | The two most important ones are the |
| 2360 | (e.g. attachments, PGP, MIME...), is it not documented? | 2109 | @uref{http://www.gnus.org, official Gnus website}. |
| 2361 | 2110 | and it's sister site | |
| 2111 | @uref{http://my.gnus.org, my.gnus.org (MGO)}, | ||
| 2112 | hosting an archive of lisp snippets, howtos, a (not | ||
| 2113 | really finished) tutorial and this FAQ. | ||
| 2362 | 2114 | ||
| 2363 | Answer: | 2115 | Tell me about other sites which are interesting. |
| 2364 | 2116 | ||
| 2365 | There's not only the Gnus manual but also the manuals | 2117 | @node [8.4] |
| 2366 | for message, emacs-mime, sieve and pgg. Those packages | 2118 | @subsubheading Question 8.4 |
| 2367 | are distributed with Gnus and used by Gnus but aren't | ||
| 2368 | really part of core Gnus, so they are documented in | ||
| 2369 | different info files, you should have a look in those | ||
| 2370 | manuals, too. | ||
| 2371 | |||
| 2372 | @ifnottex | ||
| 2373 | @node [8.3], [8.4], [8.2], FAQ 8 - Getting help | ||
| 2374 | @end ifnottex | ||
| 2375 | @subsubheading Question 8.3: | ||
| 2376 | 2119 | ||
| 2377 | Which websites should I know? | 2120 | Which mailing lists and newsgroups are there? |
| 2378 | |||
| 2379 | 2121 | ||
| 2380 | Answer: | 2122 | @subsubheading Answer |
| 2381 | 2123 | ||
| 2382 | The two most important ones are the | 2124 | There's the newsgroup gnu.emacs.gnus (pull it from |
| 2383 | @uref{http://www.gnus.org,official Gnus website}. | 2125 | e.g. news.gnus.org) which deals with general questions and the |
| 2384 | and it's sister site | 2126 | ding mailing list (ding@@gnus.org) dealing with development of |
| 2385 | @uref{http://my.gnus.org,my.gnus.org (MGO)}, | 2127 | Gnus. You can read the ding list via NNTP, too under the name |
| 2386 | hosting an archive of lisp snippets, howtos, a (not | 2128 | gmane.emacs.gnus.general from news.gmane.org. |
| 2387 | really finished) tutorial and this FAQ. | ||
| 2388 | |||
| 2389 | 2129 | ||
| 2390 | Tell me about other sites which are interesting. | 2130 | If you want to stay in the big8, |
| 2391 | 2131 | news.software.newssreaders is also read by some Gnus | |
| 2392 | @ifnottex | 2132 | users (but chances for qualified help are much better in |
| 2393 | @node [8.4], [8.5], [8.3], FAQ 8 - Getting help | 2133 | the above groups) and if you speak German, there's |
| 2394 | @end ifnottex | 2134 | de.comm.software.gnus. |
| 2395 | @subsubheading Question 8.4: | ||
| 2396 | 2135 | ||
| 2397 | Which mailing lists and newsgroups are there? | 2136 | @node [8.5] |
| 2398 | 2137 | @subsubheading Question 8.5 | |
| 2399 | 2138 | ||
| 2400 | Answer: | 2139 | Where to report bugs? |
| 2401 | 2140 | ||
| 2402 | There's the newsgroup gnu.emacs.gnus (pull it from | 2141 | @subsubheading Answer |
| 2403 | e.g. news.gnus.org) which deals with general questions | ||
| 2404 | and the ding mailing list (ding@@gnus.org) dealing with | ||
| 2405 | development of Gnus. You can read the ding list via | ||
| 2406 | NNTP, too under the name gnus.ding from news.gnus.org. | ||
| 2407 | |||
| 2408 | 2142 | ||
| 2409 | If you want to stay in the big8, | 2143 | Say @samp{M-x gnus-bug}, this will start |
| 2410 | news.software.newssreaders is also read by some Gnus | 2144 | a message to the |
| 2411 | users (but chances for qualified help are much better in | 2145 | @email{bugs@@gnus.org, gnus bug mailing list} |
| 2412 | the above groups) and if you speak German, there's | 2146 | including information about your environment which make |
| 2413 | de.comm.software.gnus. | 2147 | it easier to help you. |
| 2414 | |||
| 2415 | @ifnottex | ||
| 2416 | @node [8.5], [8.6], [8.4], FAQ 8 - Getting help | ||
| 2417 | @end ifnottex | ||
| 2418 | @subsubheading Question 8.5: | ||
| 2419 | 2148 | ||
| 2420 | Where to report bugs? | 2149 | @node [8.6] |
| 2421 | 2150 | @subsubheading Question 8.6 | |
| 2422 | 2151 | ||
| 2423 | Answer: | 2152 | I need real-time help, where to find it? |
| 2424 | 2153 | ||
| 2425 | Say @samp{M-x gnus-bug}, this will start a message to the | 2154 | @subsubheading Answer |
| 2426 | @email{bugs@@gnus.org,gnus bug mailing list} including information | ||
| 2427 | about your environment which make it easier to help you. | ||
| 2428 | |||
| 2429 | @ifnottex | ||
| 2430 | @node [8.6], , [8.5], FAQ 8 - Getting help | ||
| 2431 | @end ifnottex | ||
| 2432 | @subsubheading Question 8.6: | ||
| 2433 | 2155 | ||
| 2434 | I need real-time help, where to find it? | 2156 | Point your IRC client to irc.my.gnus.org channel |
| 2435 | 2157 | #mygnus. Don't be afraid if people there speak German, | |
| 2436 | 2158 | they are willing and capable of switching to | |
| 2437 | Answer: | 2159 | English when people from outside Germany enter. |
| 2438 | |||
| 2439 | Point your IRC client to irc.my.gnus.org channel | ||
| 2440 | #mygnus. Don't be afraid if people there speak German, | ||
| 2441 | they are willing and capable of switching to | ||
| 2442 | English when people from outside Germany enter. | ||
| 2443 | |||
| 2444 | 2160 | ||
| 2445 | @ifnottex | 2161 | @node FAQ 9 - Tuning Gnus |
| 2446 | @node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions | ||
| 2447 | @end ifnottex | ||
| 2448 | @subsection Tuning Gnus | 2162 | @subsection Tuning Gnus |
| 2449 | 2163 | ||
| 2450 | @menu | 2164 | @menu |
| 2451 | * [9.1]:: Starting Gnus is really slow, how to speed it up? | 2165 | * [9.1]:: Starting Gnus is really slow, how to speed it up? |
| 2452 | * [9.2]:: How to speed up the process of entering a group? | 2166 | * [9.2]:: How to speed up the process of entering a group? |
| 2453 | * [9.3]:: Sending mail becomes slower and slower, what's up? | 2167 | * [9.3]:: Sending mail becomes slower and slower, what's up? |
| 2454 | @end menu | 2168 | @end menu |
| 2455 | 2169 | ||
| 2456 | @ifnottex | 2170 | @node [9.1] |
| 2457 | @node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus | 2171 | @subsubheading Question 9.1 |
| 2458 | @end ifnottex | ||
| 2459 | @subsubheading Question 9.1: | ||
| 2460 | 2172 | ||
| 2461 | Starting Gnus is really slow, how to speed it up? | 2173 | Starting Gnus is really slow, how to speed it up? |
| 2462 | |||
| 2463 | 2174 | ||
| 2464 | Answer: | 2175 | @subsubheading Answer |
| 2465 | 2176 | ||
| 2466 | The reason for this could be the way Gnus reads it's | 2177 | The reason for this could be the way Gnus reads it's |
| 2467 | active file, see the node "The Active File" in the Gnus | 2178 | active file, see the node "The Active File" in the Gnus |
| 2468 | manual for things you might try to speed the process up. | 2179 | manual for things you might try to speed the process up. |
| 2469 | An other idea would be to byte compile your ~/.gnus (say | 2180 | An other idea would be to byte compile your ~/.gnus.el (say |
| 2470 | @samp{M-x byte-compile-file RET ~/.gnus | 2181 | @samp{M-x byte-compile-file RET ~/.gnus.el |
| 2471 | RET} to do it). Finally, if you have require | 2182 | RET} to do it). Finally, if you have require |
| 2472 | statements in your .gnus, you could replace them with | 2183 | statements in your .gnus, you could replace them with |
| 2473 | eval-after-load, which loads the stuff not at startup | 2184 | eval-after-load, which loads the stuff not at startup |
| 2474 | time, but when it's needed. Say you've got this in your | 2185 | time, but when it's needed. Say you've got this in your |
| 2475 | ~/.gnus: | 2186 | ~/.gnus.el: |
| 2476 | |||
| 2477 | 2187 | ||
| 2478 | @example | 2188 | @example |
| 2479 | (require 'message) | 2189 | (require 'message) |
| 2480 | (add-to-list 'message-syntax-checks '(sender . disabled)) | 2190 | (add-to-list 'message-syntax-checks '(sender . disabled)) |
| 2481 | @end example | 2191 | @end example |
| 2482 | |||
| 2483 | @noindent | 2192 | @noindent |
| 2484 | then as soon as you start Gnus, message.el is loaded. If | 2193 | |
| 2485 | you replace it with | 2194 | then as soon as you start Gnus, message.el is loaded. If |
| 2486 | 2195 | you replace it with | |
| 2487 | 2196 | ||
| 2488 | @example | 2197 | @example |
| 2489 | (eval-after-load "message" | 2198 | (eval-after-load "message" |
| 2490 | '(add-to-list 'message-syntax-checks '(sender . disabled))) | 2199 | '(add-to-list 'message-syntax-checks '(sender . disabled))) |
| 2491 | @end example | 2200 | @end example |
| 2492 | |||
| 2493 | @noindent | 2201 | @noindent |
| 2494 | it's loaded when it's needed. | ||
| 2495 | |||
| 2496 | @ifnottex | ||
| 2497 | @node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus | ||
| 2498 | @end ifnottex | ||
| 2499 | @subsubheading Question 9.2: | ||
| 2500 | 2202 | ||
| 2501 | How to speed up the process of entering a group? | 2203 | it's loaded when it's needed. |
| 2502 | |||
| 2503 | 2204 | ||
| 2504 | Answer: | 2205 | @node [9.2] |
| 2206 | @subsubheading Question 9.2 | ||
| 2505 | 2207 | ||
| 2506 | A speed killer is setting the variable | 2208 | How to speed up the process of entering a group? |
| 2507 | gnus-fetch-old-headers to anything different from nil, | 2209 | |
| 2508 | so don't do this if speed is an issue. To speed up | 2210 | @subsubheading Answer |
| 2509 | building of summary say | 2211 | |
| 2510 | 2212 | A speed killer is setting the variable | |
| 2213 | gnus-fetch-old-headers to anything different from nil, | ||
| 2214 | so don't do this if speed is an issue. To speed up | ||
| 2215 | building of summary say | ||
| 2511 | 2216 | ||
| 2512 | @example | 2217 | @example |
| 2513 | (gnus-compile) | 2218 | (gnus-compile) |
| 2514 | @end example | 2219 | @end example |
| 2515 | |||
| 2516 | @noindent | 2220 | @noindent |
| 2517 | at the bottom of your ~/.gnus, this will make gnus | 2221 | |
| 2518 | byte-compile things like | 2222 | at the bottom of your ~/.gnus.el, this will make gnus |
| 2519 | gnus-summary-line-format. | 2223 | byte-compile things like |
| 2520 | then you could increase the value of gc-cons-threshold | 2224 | gnus-summary-line-format. |
| 2521 | by saying something like | 2225 | then you could increase the value of gc-cons-threshold |
| 2522 | 2226 | by saying something like | |
| 2523 | 2227 | ||
| 2524 | @example | 2228 | @example |
| 2525 | (setq gc-cons-threshold 3500000) | 2229 | (setq gc-cons-threshold 3500000) |
| 2526 | @end example | 2230 | @end example |
| 2527 | |||
| 2528 | @noindent | 2231 | @noindent |
| 2529 | in ~/.emacs. If you don't care about width of CJK | 2232 | |
| 2530 | characters or use Gnus 5.10 or younger together with a | 2233 | in ~/.emacs. If you don't care about width of CJK |
| 2531 | recent GNU Emacs, you should say | 2234 | characters or use Gnus 5.10 or younger together with a |
| 2532 | 2235 | recent GNU Emacs, you should say | |
| 2533 | 2236 | ||
| 2534 | @example | 2237 | @example |
| 2535 | (setq gnus-use-correct-string-widths nil) | 2238 | (setq gnus-use-correct-string-widths nil) |
| 2536 | @end example | 2239 | @end example |
| 2537 | |||
| 2538 | |||
| 2539 | @noindent | 2240 | @noindent |
| 2540 | in ~/.gnus (thanks to Jesper harder for the last | ||
| 2541 | two suggestions). Finally if you are still using 5.8.8 | ||
| 2542 | or 5.9 and experience speed problems with summary | ||
| 2543 | buffer generation, you definitely should update to | ||
| 2544 | 5.10 since there quite some work on improving it has | ||
| 2545 | been done. | ||
| 2546 | 2241 | ||
| 2547 | @ifnottex | 2242 | in ~/.gnus.el (thanks to Jesper harder for the last |
| 2548 | @node [9.3], , [9.2], FAQ 9 - Tuning Gnus | 2243 | two suggestions). Finally if you are still using 5.8.8 |
| 2549 | @end ifnottex | 2244 | or 5.9 and experience speed problems with summary |
| 2550 | @subsubheading Question 9.3: | 2245 | buffer generation, you definitely should update to |
| 2246 | 5.10 since there quite some work on improving it has | ||
| 2247 | been done. | ||
| 2551 | 2248 | ||
| 2552 | Sending mail becomes slower and slower, what's up? | 2249 | @node [9.3] |
| 2553 | 2250 | @subsubheading Question 9.3 | |
| 2554 | 2251 | ||
| 2555 | Answer: | 2252 | Sending mail becomes slower and slower, what's up? |
| 2556 | 2253 | ||
| 2557 | The reason could be that you told Gnus to archive the | 2254 | @subsubheading Answer |
| 2558 | messages you wrote by setting | ||
| 2559 | gnus-message-archive-group. Try to use a nnml group | ||
| 2560 | instead of an archive group, this should bring you back | ||
| 2561 | to normal speed. | ||
| 2562 | |||
| 2563 | 2255 | ||
| 2564 | @ifnottex | 2256 | The reason could be that you told Gnus to archive the |
| 2565 | @node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions | 2257 | messages you wrote by setting |
| 2566 | @end ifnottex | 2258 | gnus-message-archive-group. Try to use a nnml group |
| 2259 | instead of an archive group, this should bring you back | ||
| 2260 | to normal speed. | ||
| 2261 | |||
| 2262 | @node FAQ - Glossary | ||
| 2567 | @subsection Glossary | 2263 | @subsection Glossary |
| 2568 | 2264 | ||
| 2569 | @table @dfn | 2265 | @table @dfn |
| 2570 | 2266 | ||
| 2571 | @item ~/.gnus | 2267 | @item ~/.gnus.el |
| 2572 | When the term ~/.gnus is used it just means your Gnus | 2268 | When the term ~/.gnus.el is used it just means your Gnus |
| 2573 | configuration file. You might as well call it ~/.gnus.el or | 2269 | configuration file. You might as well call it ~/.gnus or |
| 2574 | specify another name. | 2270 | specify another name. |
| 2575 | |||
| 2576 | 2271 | ||
| 2577 | @item Back End | 2272 | @item Back End |
| 2578 | In Gnus terminology a back end is a virtual server, a layer | 2273 | In Gnus terminology a back end is a virtual server, a layer |
| 2579 | between core Gnus and the real NNTP-, POP3-, IMAP- or | 2274 | between core Gnus and the real NNTP-, POP3-, IMAP- or |
| 2580 | whatever-server which offers Gnus a standardized interface | 2275 | whatever-server which offers Gnus a standardized interface |
| 2581 | to functions like "get message", "get Headers" etc. | 2276 | to functions like "get message", "get Headers" etc. |
| 2582 | |||
| 2583 | 2277 | ||
| 2584 | @item Emacs | 2278 | @item Emacs |
| 2585 | When the term Emacs is used in this FAQ, it means either GNU | 2279 | When the term Emacs is used in this FAQ, it means either GNU |
| 2586 | Emacs or XEmacs. | 2280 | Emacs or XEmacs. |
| 2587 | |||
| 2588 | 2281 | ||
| 2589 | @item Message | 2282 | @item Message |
| 2590 | In this FAQ message means a either a mail or a posting to a | 2283 | In this FAQ message means a either a mail or a posting to a |
| 2591 | Usenet Newsgroup or to some other fancy back end, no matter | 2284 | Usenet Newsgroup or to some other fancy back end, no matter |
| 2592 | of which kind it is. | 2285 | of which kind it is. |
| 2593 | |||
| 2594 | 2286 | ||
| 2595 | @item MUA | 2287 | @item MUA |
| 2596 | MUA is an acronym for Mail User Agent, it's the program you | 2288 | MUA is an acronym for Mail User Agent, it's the program you |
| 2597 | use to read and write e-mails. | 2289 | use to read and write e-mails. |
| 2598 | |||
| 2599 | 2290 | ||
| 2600 | @item NUA | 2291 | @item NUA |
| 2601 | NUA is an acronym for News User Agent, it's the program you | 2292 | NUA is an acronym for News User Agent, it's the program you |
| 2602 | use to read and write Usenet news. | 2293 | use to read and write Usenet news. |
| 2603 | |||
| 2604 | @end table | ||
| 2605 | 2294 | ||
| 2606 | @c @bye | 2295 | @end table |
| 2607 | 2296 | ||
| 2608 | @ignore | 2297 | @ignore |
| 2609 | arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 | 2298 | arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 |
| 2610 | @end ignore | 2299 | @end ignore |
diff --git a/man/gnus.texi b/man/gnus.texi index 3a98f64baa1..c670da11b22 100644 --- a/man/gnus.texi +++ b/man/gnus.texi | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | 8 | ||
| 9 | @copying | 9 | @copying |
| 10 | Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, | 10 | Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, |
| 11 | 2002, 2003, 2004 | 11 | 2002, 2003, 2004, 2005 |
| 12 | Free Software Foundation, Inc. | 12 | Free Software Foundation, Inc. |
| 13 | 13 | ||
| 14 | @quotation | 14 | @quotation |
| @@ -18594,7 +18594,7 @@ that most will look for it here, this variable tells the summary | |||
| 18594 | buffer how to maneuver around undownloaded (only headers stored in the | 18594 | buffer how to maneuver around undownloaded (only headers stored in the |
| 18595 | agent) and unfetched (neither article nor headers stored) articles. | 18595 | agent) and unfetched (neither article nor headers stored) articles. |
| 18596 | 18596 | ||
| 18597 | The legal values are @code{nil} (maneuver to any article), | 18597 | The valid values are @code{nil} (maneuver to any article), |
| 18598 | @code{undownloaded} (maneuvering while unplugged ignores articles that | 18598 | @code{undownloaded} (maneuvering while unplugged ignores articles that |
| 18599 | have not been fetched), @code{always-undownloaded} (maneuvering always | 18599 | have not been fetched), @code{always-undownloaded} (maneuvering always |
| 18600 | ignores articles that have not been fetched), @code{unfetched} | 18600 | ignores articles that have not been fetched), @code{unfetched} |
diff --git a/man/help.texi b/man/help.texi index 8f7eed4915c..29c06b499df 100644 --- a/man/help.texi +++ b/man/help.texi | |||
| @@ -172,6 +172,9 @@ documented (@code{Info-goto-emacs-key-command-node}). | |||
| 172 | @item C-h S @var{symbol} @key{RET} | 172 | @item C-h S @var{symbol} @key{RET} |
| 173 | Display the Info documentation on symbol @var{symbol} according to the | 173 | Display the Info documentation on symbol @var{symbol} according to the |
| 174 | programming language you are editing (@code{info-lookup-symbol}). | 174 | programming language you are editing (@code{info-lookup-symbol}). |
| 175 | @item C-h . | ||
| 176 | Display a help message associated with special text areas, such as | ||
| 177 | links in @samp{*Help*} buffers (@code{display-local-help}). | ||
| 175 | @end table | 178 | @end table |
| 176 | 179 | ||
| 177 | @node Key Help | 180 | @node Key Help |
| @@ -277,13 +280,14 @@ example, it would say that you can invoke @code{find-file} by typing | |||
| 277 | normally checks only commands (interactive functions); if you specify a | 280 | normally checks only commands (interactive functions); if you specify a |
| 278 | prefix argument, it checks noninteractive functions as well. | 281 | prefix argument, it checks noninteractive functions as well. |
| 279 | 282 | ||
| 280 | Because @kbd{C-h a} looks only for commands whose names contain the | 283 | Because @kbd{C-h a} looks only for commands matching the string you |
| 281 | string you specify, you must use ingenuity in choosing the string. If | 284 | specify, you may not find what you want on the first try. In that |
| 282 | you are looking for commands for killing backwards and @kbd{C-h a | 285 | case, don't just give up. You can give Apropos a list of words to |
| 283 | kill-backwards @key{RET}} doesn't reveal any, don't give up. Try just | 286 | search for. When more than one word is specified, at least two of |
| 284 | @kbd{kill}, or just @kbd{backwards}, or just @kbd{back}. Be | 287 | those words must be present for an item to match. If you are looking |
| 285 | persistent. Also note that you can use a regular expression as the | 288 | for commands to kill a chunk of text before point, try @kbd{C-h a kill |
| 286 | argument, for more flexibility (@pxref{Regexps}). | 289 | back behind before @key{RET}}. For even greater flexibility, you can |
| 290 | also supply a regular expression to Apropos (@pxref{Regexps}). | ||
| 287 | 291 | ||
| 288 | Here is a set of arguments to give to @kbd{C-h a} that covers many | 292 | Here is a set of arguments to give to @kbd{C-h a} that covers many |
| 289 | classes of Emacs commands, since there are strong conventions for naming | 293 | classes of Emacs commands, since there are strong conventions for naming |
| @@ -327,6 +331,13 @@ check them. | |||
| 327 | If the variable @code{apropos-do-all} is non-@code{nil}, the commands | 331 | If the variable @code{apropos-do-all} is non-@code{nil}, the commands |
| 328 | above all behave as if they had been given a prefix argument. | 332 | above all behave as if they had been given a prefix argument. |
| 329 | 333 | ||
| 334 | @vindex apropos-sort-by-scores | ||
| 335 | @cindex apropos search results, order by score | ||
| 336 | By default, Apropos lists the search results in alphabetical order. | ||
| 337 | If the variable @code{apropos-sort-by-scores} is non-@code{nil}, | ||
| 338 | Apropos tries to guess the relevance of each result, and displays the | ||
| 339 | most relevant ones first. | ||
| 340 | |||
| 330 | If you want more information about a function definition, variable or | 341 | If you want more information about a function definition, variable or |
| 331 | symbol property listed in the Apropos buffer, you can click on it with | 342 | symbol property listed in the Apropos buffer, you can click on it with |
| 332 | @kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}. | 343 | @kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}. |
| @@ -590,10 +601,20 @@ Emacs (@code{describe-no-warranty}). | |||
| 590 | @cindex balloon help | 601 | @cindex balloon help |
| 591 | When a region of text is ``active,'' so that you can select it with | 602 | When a region of text is ``active,'' so that you can select it with |
| 592 | the mouse or a key like @kbd{RET}, it often has associated help text. | 603 | the mouse or a key like @kbd{RET}, it often has associated help text. |
| 593 | Areas of the mode line are examples. This help will normally be | 604 | Areas of the mode line are examples. On most window systems, the help |
| 594 | shown in the echo area when you move point into the active text. In | 605 | text is displayed as a ``tooltip'' (sometimes known as ``balloon |
| 595 | a window system you can display the help text as a ``tooltip'' | 606 | help''). @xref{Tooltips}. Otherwise, it is shown in the echo area |
| 596 | (sometimes known as ``balloon help''). @xref{Tooltips}. | 607 | when you move point into the active text. |
| 608 | |||
| 609 | @kindex C-h . | ||
| 610 | @findex display-local-help | ||
| 611 | @vindex help-at-pt-display-when-idle | ||
| 612 | You can also access text region help info using the keyboard. The | ||
| 613 | command @kbd{C-h .} (@code{display-local-help}) displays any help text | ||
| 614 | associated with the text at point, using the echo area. If you want | ||
| 615 | help text to be displayed automatically whenever it is available at | ||
| 616 | point, set the variable @code{help-at-pt-display-when-idle} to | ||
| 617 | @code{t}. | ||
| 597 | 618 | ||
| 598 | @ignore | 619 | @ignore |
| 599 | arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1 | 620 | arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1 |
diff --git a/man/idlwave.texi b/man/idlwave.texi index 42b3bea4034..8226c0ac63f 100644 --- a/man/idlwave.texi +++ b/man/idlwave.texi | |||
| @@ -14,12 +14,11 @@ | |||
| 14 | @set IDLVERSION 6.1 | 14 | @set IDLVERSION 6.1 |
| 15 | @set NSYSROUTINES 1850 | 15 | @set NSYSROUTINES 1850 |
| 16 | @set NSYSKEYWORDS 7685 | 16 | @set NSYSKEYWORDS 7685 |
| 17 | @set DATE November, 2004 | 17 | @set DATE March, 2005 |
| 18 | @set AUTHOR J.D. Smith & Carsten Dominik | 18 | @set AUTHOR J.D. Smith & Carsten Dominik |
| 19 | @set AUTHOR-EMAIL jdsmith@@as.arizona.edu | 19 | @set AUTHOR-EMAIL jdsmith@@as.arizona.edu |
| 20 | @set MAINTAINER J.D. Smith | 20 | @set MAINTAINER J.D. Smith |
| 21 | @set MAINTAINER-EMAIL jdsmith@@as.arizona.edu | 21 | @set MAINTAINER-EMAIL jdsmith@@as.arizona.edu |
| 22 | @set IDLWAVE-HOMEPAGE http://idlwave.org/ | ||
| 23 | @c %**end of header | 22 | @c %**end of header |
| 24 | @finalout | 23 | @finalout |
| 25 | 24 | ||
| @@ -30,7 +29,7 @@ Emacs, and interacting with an IDL shell run as a subprocess. | |||
| 30 | This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE | 29 | This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE |
| 31 | @value{VERSION} | 30 | @value{VERSION} |
| 32 | 31 | ||
| 33 | Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software | 32 | Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software |
| 34 | Foundation, Inc. | 33 | Foundation, Inc. |
| 35 | 34 | ||
| 36 | Permission is granted to copy, distribute and/or modify this document | 35 | Permission is granted to copy, distribute and/or modify this document |
| @@ -61,7 +60,7 @@ license to the document, as described in section 6 of the license. | |||
| 61 | This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for | 60 | This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for |
| 62 | IDLWAVE version @value{VERSION}, @value{DATE}. | 61 | IDLWAVE version @value{VERSION}, @value{DATE}. |
| 63 | @sp 2 | 62 | @sp 2 |
| 64 | Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software | 63 | Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software |
| 65 | Foundation, Inc. | 64 | Foundation, Inc. |
| 66 | @sp 2 | 65 | @sp 2 |
| 67 | @cindex Copyright, of IDLWAVE | 66 | @cindex Copyright, of IDLWAVE |
| @@ -101,7 +100,6 @@ Interactive Data Language (IDL), and running IDL as an inferior shell. | |||
| 101 | * Getting Started:: Tutorial | 100 | * Getting Started:: Tutorial |
| 102 | * The IDLWAVE Major Mode:: The mode for editing IDL programs | 101 | * The IDLWAVE Major Mode:: The mode for editing IDL programs |
| 103 | * The IDLWAVE Shell:: The mode for running IDL as an inferior program | 102 | * The IDLWAVE Shell:: The mode for running IDL as an inferior program |
| 104 | * Installation:: How to Install or Upgrade | ||
| 105 | * Acknowledgements:: Who did what | 103 | * Acknowledgements:: Who did what |
| 106 | * Sources of Routine Info:: How does IDLWAVE know about routine XYZ | 104 | * Sources of Routine Info:: How does IDLWAVE know about routine XYZ |
| 107 | * HTML Help Browser Tips:: | 105 | * HTML Help Browser Tips:: |
| @@ -180,11 +178,6 @@ Debugging IDL Programs | |||
| 180 | * Walking the Calling Stack:: | 178 | * Walking the Calling Stack:: |
| 181 | * Electric Debug Mode:: | 179 | * Electric Debug Mode:: |
| 182 | 180 | ||
| 183 | Installation | ||
| 184 | |||
| 185 | * Installing IDLWAVE:: How to install the distribution | ||
| 186 | * Installing Online Help:: Where to get the additional files needed | ||
| 187 | |||
| 188 | Sources of Routine Info | 181 | Sources of Routine Info |
| 189 | 182 | ||
| 190 | * Routine Definitions:: Where IDL Routines are defined. | 183 | * Routine Definitions:: Where IDL Routines are defined. |
| @@ -204,8 +197,6 @@ Catalogs | |||
| 204 | @node Introduction, IDLWAVE in a Nutshell, Top, Top | 197 | @node Introduction, IDLWAVE in a Nutshell, Top, Top |
| 205 | @chapter Introduction | 198 | @chapter Introduction |
| 206 | @cindex Introduction | 199 | @cindex Introduction |
| 207 | @cindex CORBA (Common Object Request Broker Architecture) | ||
| 208 | @cindex Interface Definition Language | ||
| 209 | @cindex Interactive Data Language | 200 | @cindex Interactive Data Language |
| 210 | @cindex cc-mode.el | 201 | @cindex cc-mode.el |
| 211 | @cindex @file{idl.el} | 202 | @cindex @file{idl.el} |
| @@ -213,14 +204,13 @@ Catalogs | |||
| 213 | @cindex Feature overview | 204 | @cindex Feature overview |
| 214 | 205 | ||
| 215 | IDLWAVE is a package which supports editing source files written in | 206 | IDLWAVE is a package which supports editing source files written in |
| 216 | the Interactive Data Language (IDL@footnote{IDL is a registered | 207 | the Interactive Data Language, and running |
| 217 | trademark of Research Systems, Inc., a Kodak Company}), and running | ||
| 218 | IDL as an inferior shell@footnote{Note that this package has nothing | 208 | IDL as an inferior shell@footnote{Note that this package has nothing |
| 219 | to do with the Interface Definition Language, part of the Common | 209 | to do with the Interface Definition Language, part of the Common |
| 220 | Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also | 210 | Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also |
| 221 | be used for editing source files for the related WAVE/CL language, but | 211 | be used for editing source files for the related WAVE/CL language, but |
| 222 | with only limited support.}. It is a feature-rich replacement for the | 212 | with only limited support.}. It is a feature-rich replacement for the |
| 223 | IDLDE development environment bundled with IDL, and uses the full | 213 | IDLDE development environment included with IDL, and uses the full |
| 224 | power of Emacs to make editing and running IDL programs easier, | 214 | power of Emacs to make editing and running IDL programs easier, |
| 225 | quicker, and more structured. | 215 | quicker, and more structured. |
| 226 | 216 | ||
| @@ -421,11 +411,10 @@ be discovered by reading the entire manual, or hovering over the | |||
| 421 | shoulder of your nearest IDLWAVE guru for a few days. | 411 | shoulder of your nearest IDLWAVE guru for a few days. |
| 422 | 412 | ||
| 423 | It is assumed that you have access to Emacs or XEmacs with the full | 413 | It is assumed that you have access to Emacs or XEmacs with the full |
| 424 | IDLWAVE package including online help (@pxref{Installation}). We also | 414 | IDLWAVE package including online help. We also assume that you are |
| 425 | assume that you are familiar with Emacs and can read the nomenclature of | 415 | familiar with Emacs and can read the nomenclature of key presses in |
| 426 | key presses in Emacs (in particular, @kbd{C} stands for @key{CONTROL} | 416 | Emacs (in particular, @kbd{C} stands for @key{CONTROL} and @kbd{M} for |
| 427 | and @kbd{M} for @key{META} (often the @key{ALT} key carries this | 417 | @key{META} (often the @key{ALT} key carries this functionality)). |
| 428 | functionality)). | ||
| 429 | 418 | ||
| 430 | Open a new source file by typing: | 419 | Open a new source file by typing: |
| 431 | 420 | ||
| @@ -612,9 +601,8 @@ restart Emacs. | |||
| 612 | 601 | ||
| 613 | You likely have your own indentation preferences for IDL code. For | 602 | You likely have your own indentation preferences for IDL code. For |
| 614 | example, some like to indent the main block of an IDL program from the | 603 | example, some like to indent the main block of an IDL program from the |
| 615 | margin, different from the conventions used by RSI, and use only 3 | 604 | margin and use only 3 spaces as indentation between @code{BEGIN} and |
| 616 | spaces as indentation between @code{BEGIN} and @code{END}. Try the | 605 | @code{END}. Try the following lines in @file{.emacs}: |
| 617 | following lines in @file{.emacs}: | ||
| 618 | 606 | ||
| 619 | @lisp | 607 | @lisp |
| 620 | (setq idlwave-main-block-indent 2) | 608 | (setq idlwave-main-block-indent 2) |
| @@ -1279,19 +1267,18 @@ Maximum number of source files displayed in the Routine Info window. | |||
| 1279 | @cindex Online Help, Installation | 1267 | @cindex Online Help, Installation |
| 1280 | @cindex Speed, of online help | 1268 | @cindex Speed, of online help |
| 1281 | 1269 | ||
| 1282 | For IDL system routines, RSI provides extensive documentation. | 1270 | IDLWAVE can display help from an HTML version of the IDL documentation |
| 1283 | IDLWAVE can access an HTML version of this documentation very quickly | 1271 | if it is available. This is @emph{much} faster than using the IDL |
| 1284 | and accurately. This is @emph{much} faster than using the IDL online | 1272 | online help application, because IDLWAVE usually gets you to the right |
| 1285 | help application, because IDLWAVE usually gets you to the right place | 1273 | place in the documentation directly --- e.g. a specific keyword of a |
| 1286 | in the documentation directly --- e.g. a specific keyword of a routine | 1274 | routine --- without any additional browsing and scrolling. There are |
| 1287 | --- without any additional browsing and scrolling. For this online | 1275 | a variety of options for displaying the HTML help: see below. Help |
| 1288 | help to work, an HTML version of the IDL documentation, which is not | 1276 | for routines without HTML documentation is also available, using the |
| 1289 | part of the standalone IDLWAVE distribution, is required. The | 1277 | routine documentation header and/or source. |
| 1290 | necessary files can be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, | 1278 | |
| 1291 | the maintainers webpage}. There are a variety of options for | 1279 | To make this feature work, you should set |
| 1292 | displaying the HTML help: see below. Help for routines without HTML | 1280 | @code{idlwave-html-help-location} to the directory name of the |
| 1293 | documentation is also available, using the routine documentation | 1281 | directory where the IDL help files are installed. |
| 1294 | header and/or source. | ||
| 1295 | 1282 | ||
| 1296 | @kindex M-? | 1283 | @kindex M-? |
| 1297 | In any IDL program (or, as with most IDLWAVE commands, in the IDL | 1284 | In any IDL program (or, as with most IDLWAVE commands, in the IDL |
| @@ -1376,19 +1363,19 @@ sent to. This function is used to set the variable | |||
| 1376 | Customize this variable to see what choices of browsers your system | 1363 | Customize this variable to see what choices of browsers your system |
| 1377 | offers. | 1364 | offers. |
| 1378 | 1365 | ||
| 1379 | Certain browsers like @code{w3} (bundled with many versions of Emacs) | 1366 | Certain browsers like @code{w3} and @code{w3m} |
| 1380 | and @code{w3m} (@uref{http://emacs-w3m.namazu.org/}, the author's help | 1367 | (@uref{http://emacs-w3m.namazu.org/}, the author's help browser of |
| 1381 | browser of choice) are run within Emacs, and use Emacs buffers to | 1368 | choice) are run within Emacs, and use Emacs buffers to display the |
| 1382 | display the HTML help. This can be convenient, especially on small | 1369 | HTML help. This can be convenient, especially on small displays, and |
| 1383 | displays, and images can even be displayed in-line on new Emacs | 1370 | images can even be displayed in-line on new Emacs versions. However, |
| 1384 | versions. However, better formatting results are often achieved with | 1371 | better formatting results are often achieved with external browsers, |
| 1385 | external browsers, like Mozilla. IDLWAVE assumes any browser function | 1372 | like Mozilla. IDLWAVE assumes any browser function containing "w3" is |
| 1386 | containing "w3" is displayed in a local buffer. If you are using | 1373 | displayed in a local buffer. If you are using another Emacs-local |
| 1387 | another Emacs-local browser for which this is not true, set the | 1374 | browser for which this is not true, set the variable |
| 1388 | variable @code{idlwave-help-browser-is-local}. | 1375 | @code{idlwave-help-browser-is-local}. |
| 1389 | 1376 | ||
| 1390 | @emph{N.B. For Windows users}: IDLWAVE can bring up RSI help directly | 1377 | @emph{N.B. For Windows users}: IDLWAVE can bring up help directly |
| 1391 | in the Microsoft HTMLHelp documentation supplied with IDL: no | 1378 | from the Microsoft HTMLHelp documentation supplied with IDL: no |
| 1392 | additional help files are needed. Be sure to set | 1379 | additional help files are needed. Be sure to set |
| 1393 | @code{idlwave-system-directory} and the help file will be found | 1380 | @code{idlwave-system-directory} and the help file will be found |
| 1394 | automatically (or, alternatively, specify its location directly with | 1381 | automatically (or, alternatively, specify its location directly with |
| @@ -2217,7 +2204,7 @@ case of routines, keywords, classes, and methods as they are completed, see | |||
| 2217 | 2204 | ||
| 2218 | @defopt idlwave-abbrev-change-case (@code{nil}) | 2205 | @defopt idlwave-abbrev-change-case (@code{nil}) |
| 2219 | Non-@code{nil} means all abbrevs will be forced to either upper or lower | 2206 | Non-@code{nil} means all abbrevs will be forced to either upper or lower |
| 2220 | case. Legal values are @code{nil}, @code{t}, and @code{down}. | 2207 | case. Valid values are @code{nil}, @code{t}, and @code{down}. |
| 2221 | @end defopt | 2208 | @end defopt |
| 2222 | 2209 | ||
| 2223 | @defopt idlwave-reserved-word-upcase (@code{nil}) | 2210 | @defopt idlwave-reserved-word-upcase (@code{nil}) |
| @@ -2343,7 +2330,7 @@ Normal hook. Executed when @file{idlwave.el} is loaded. | |||
| 2343 | 2330 | ||
| 2344 | 2331 | ||
| 2345 | 2332 | ||
| 2346 | @node The IDLWAVE Shell, Installation, The IDLWAVE Major Mode, Top | 2333 | @node The IDLWAVE Shell, Acknowledgements, The IDLWAVE Major Mode, Top |
| 2347 | @chapter The IDLWAVE Shell | 2334 | @chapter The IDLWAVE Shell |
| 2348 | @cindex IDLWAVE shell | 2335 | @cindex IDLWAVE shell |
| 2349 | @cindex Major mode, @code{idlwave-shell-mode} | 2336 | @cindex Major mode, @code{idlwave-shell-mode} |
| @@ -2842,7 +2829,7 @@ provides faster access (@pxref{Electric Debug Mode}). | |||
| 2842 | 2829 | ||
| 2843 | @defopt idlwave-shell-mark-breakpoints (@code{t}) | 2830 | @defopt idlwave-shell-mark-breakpoints (@code{t}) |
| 2844 | Non-@code{nil} means mark breakpoints in the source file buffers. The | 2831 | Non-@code{nil} means mark breakpoints in the source file buffers. The |
| 2845 | value indicates the preferred method. Legal values are @code{nil}, | 2832 | value indicates the preferred method. Valid values are @code{nil}, |
| 2846 | @code{t}, @code{face}, and @code{glyph}. | 2833 | @code{t}, @code{face}, and @code{glyph}. |
| 2847 | @end defopt | 2834 | @end defopt |
| 2848 | 2835 | ||
| @@ -2879,7 +2866,7 @@ been set (or you give two prefix arguments), the last command on the | |||
| 2879 | 2866 | ||
| 2880 | @defopt idlwave-shell-mark-stop-line (@code{t}) | 2867 | @defopt idlwave-shell-mark-stop-line (@code{t}) |
| 2881 | Non-@code{nil} means mark the source code line where IDL is currently | 2868 | Non-@code{nil} means mark the source code line where IDL is currently |
| 2882 | stopped. The value specifies the preferred method. Legal values are | 2869 | stopped. The value specifies the preferred method. Valid values are |
| 2883 | @code{nil}, @code{t}, @code{arrow}, and @code{face}. | 2870 | @code{nil}, @code{t}, @code{arrow}, and @code{face}. |
| 2884 | @end defopt | 2871 | @end defopt |
| 2885 | 2872 | ||
| @@ -3209,59 +3196,7 @@ examine command strings to send, after all instances of @code{___} | |||
| 3209 | @end defopt | 3196 | @end defopt |
| 3210 | 3197 | ||
| 3211 | 3198 | ||
| 3212 | @node Installation, Acknowledgements, The IDLWAVE Shell, Top | 3199 | @node Acknowledgements, Sources of Routine Info, The IDLWAVE Shell, Top |
| 3213 | @chapter Installation | ||
| 3214 | @cindex Installation | ||
| 3215 | |||
| 3216 | @menu | ||
| 3217 | * Installing IDLWAVE:: How to install the distribution | ||
| 3218 | * Installing Online Help:: Where to get the additional files needed | ||
| 3219 | @end menu | ||
| 3220 | |||
| 3221 | @node Installing IDLWAVE, Installing Online Help, Installation, Installation | ||
| 3222 | @section Installing IDLWAVE | ||
| 3223 | |||
| 3224 | @cindex FTP site | ||
| 3225 | @cindex URL, homepage for IDLWAVE | ||
| 3226 | @cindex Homepage for IDLWAVE | ||
| 3227 | @cindex IDLWAVE, homepage | ||
| 3228 | @cindex XEmacs package IDLWAVE | ||
| 3229 | @cindex Emacs, distributed with IDLWAVE | ||
| 3230 | @cindex Copyright, of IDL manual | ||
| 3231 | IDLWAVE is part of Emacs 21.1 and later. It is also an XEmacs package | ||
| 3232 | and can be installed from | ||
| 3233 | @uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,the XEmacs ftp site} | ||
| 3234 | with the normal package management system on XEmacs 21. These | ||
| 3235 | pre-installed versions should work out-of-the-box. However, the HTML | ||
| 3236 | files required for online HTML help are not distributed with | ||
| 3237 | XEmacs/Emacs and have to be installed separately@footnote{Due to | ||
| 3238 | copyright reasons, the HTML version of the IDL manual cannot be | ||
| 3239 | distributed under the GPL.} (@pxref{Installing Online Help}). | ||
| 3240 | |||
| 3241 | You can also download IDLWAVE and install it yourself from | ||
| 3242 | @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}. Follow the | ||
| 3243 | instructions in the INSTALL file. | ||
| 3244 | |||
| 3245 | @node Installing Online Help, , Installing IDLWAVE, Installation | ||
| 3246 | @section Installing Online Help | ||
| 3247 | @cindex Installing online help | ||
| 3248 | @cindex Online Help, Installation | ||
| 3249 | |||
| 3250 | If you want to use the online help display, an additional set of files | ||
| 3251 | (HTML versions of the IDL documentation) must be installed. These | ||
| 3252 | files can also be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, the | ||
| 3253 | maintainers webpage}. You need to place the files somewhere on your | ||
| 3254 | system and tell IDLWAVE where they are with | ||
| 3255 | |||
| 3256 | @lisp | ||
| 3257 | (setq idlwave-html-help-location "/path/to/help/dir/") ;e.g. /usr/local/etc | ||
| 3258 | @end lisp | ||
| 3259 | |||
| 3260 | Note that the help package only changes with new versions of the IDL | ||
| 3261 | documentation, and need not be updated unless your version of IDL | ||
| 3262 | changes. | ||
| 3263 | |||
| 3264 | @node Acknowledgements, Sources of Routine Info, Installation, Top | ||
| 3265 | @chapter Acknowledgements | 3200 | @chapter Acknowledgements |
| 3266 | @cindex Acknowledgements | 3201 | @cindex Acknowledgements |
| 3267 | @cindex Maintainer, of IDLWAVE | 3202 | @cindex Maintainer, of IDLWAVE |
| @@ -3731,10 +3666,7 @@ IDLWAVE derives its knowledge about system routines from the IDL | |||
| 3731 | manuals. The file @file{idlw-rinfo.el} contains the routine information | 3666 | manuals. The file @file{idlw-rinfo.el} contains the routine information |
| 3732 | for the IDL system routines, and links to relevant sections of the HTML | 3667 | for the IDL system routines, and links to relevant sections of the HTML |
| 3733 | documentation. The Online Help feature of IDLWAVE requires HTML | 3668 | documentation. The Online Help feature of IDLWAVE requires HTML |
| 3734 | versions of the IDL manuals to be available; the HTML documentation is | 3669 | versions of the IDL manuals to be available. |
| 3735 | not distributed with IDLWAVE by default, but must be downloaded | ||
| 3736 | separately from the @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers | ||
| 3737 | webpage}. | ||
| 3738 | 3670 | ||
| 3739 | The HTML files and related images can be produced from the | 3671 | The HTML files and related images can be produced from the |
| 3740 | @file{idl.chm} HTMLHelp file distributed with IDL using the free | 3672 | @file{idl.chm} HTMLHelp file distributed with IDL using the free |
| @@ -3755,22 +3687,19 @@ the online HTML help available with IDLWAVE (starting with version | |||
| 3755 | 5.0). Since IDLWAVE runs on a many different system types, a single | 3687 | 5.0). Since IDLWAVE runs on a many different system types, a single |
| 3756 | browser configuration is not possible, but choices abound. | 3688 | browser configuration is not possible, but choices abound. |
| 3757 | 3689 | ||
| 3758 | On many systems, the default browser configured in | 3690 | Unfortunately, the HTML manuals decompiled from the original |
| 3759 | @code{browse-url-browser-function}, and hence inherited by default by | 3691 | source contain formatting structures which Netscape 4.x does not |
| 3760 | @code{idlwave-help-browser-function}, is Netscape. Unfortunately, the | 3692 | handle well, though they are still readable. A much better choice is |
| 3761 | HTML manuals decompiled from the original RSI source contain | 3693 | Mozilla, or one of the Mozilla-derived browsers such as |
| 3762 | formatting structures which Netscape 4.x does not handle well, though | 3694 | @uref{http://galeon.sourceforge.net/,Galeon} (GNU/Linux), |
| 3763 | they are still readable. A much better choice is Mozilla, or one of | ||
| 3764 | the Mozilla-derived browsers such as | ||
| 3765 | @uref{http://galeon.sourceforge.net/,Galeon} (Linux), | ||
| 3766 | @uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or | 3695 | @uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or |
| 3767 | @uref{http://www.mozilla.org/projects/firebird/,Firebird} (all | 3696 | @uref{http://www.mozilla.org/projects/firebird/,Firebird} (all |
| 3768 | platforms). Newer versions of Emacs provide a browser-function choice | 3697 | platforms). Newer versions of Emacs provide a browser-function choice |
| 3769 | @code{browse-url-gnome-moz} which uses the Gnome-configured browser. | 3698 | @code{browse-url-gnome-moz} which uses the Gnome-configured browser. |
| 3770 | 3699 | ||
| 3771 | Note that the HTML files decompiled from RSI Microsoft Help sources | 3700 | Note that the HTML files decompiled from Microsoft Help sources |
| 3772 | contain specific references to the @samp{Symbol} font, which by default | 3701 | contain specific references to the @samp{Symbol} font, which by default |
| 3773 | is not permitted in normal encodings (it's technically illegal). Though | 3702 | is not permitted in normal encodings (it's invalid, technically). Though |
| 3774 | it only impacts a few symbols, you can trick Mozilla-based browsers into | 3703 | it only impacts a few symbols, you can trick Mozilla-based browsers into |
| 3775 | recognizing @samp{Symbol} by following the directions | 3704 | recognizing @samp{Symbol} by following the directions |
| 3776 | @uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}. With this | 3705 | @uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}. With this |
| @@ -3995,12 +3924,9 @@ IDLWAVE was developed on a UNIX system. However, thanks to the | |||
| 3995 | portability of Emacs, much of IDLWAVE does also work under different | 3924 | portability of Emacs, much of IDLWAVE does also work under different |
| 3996 | operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS. | 3925 | operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS. |
| 3997 | 3926 | ||
| 3998 | The only real problem is that RSI does not provide a command-line | 3927 | The only real problem is that there is no command-line |
| 3999 | version of IDL for Windows or MacOS(<=9) with which IDLWAVE can | 3928 | version of IDL for Windows or MacOS(<=9) with which IDLWAVE can |
| 4000 | interact@footnote{Call your RSI representative and complain --- it | 3929 | interact. As a result, the IDLWAVE Shell |
| 4001 | should be trivial for them to provide one. And if enough people ask for | ||
| 4002 | it, maybe they will. The new MacOSX version of IDL @emph{does} have a | ||
| 4003 | shell and works well with IDLWAVE.}. As a result, the IDLWAVE Shell | ||
| 4004 | does not work and you have to rely on IDLDE to run and debug your | 3930 | does not work and you have to rely on IDLDE to run and debug your |
| 4005 | programs. However, editing IDL source files with Emacs/IDLWAVE works | 3931 | programs. However, editing IDL source files with Emacs/IDLWAVE works |
| 4006 | with all bells and whistles, including routine info, completion and fast | 3932 | with all bells and whistles, including routine info, completion and fast |
| @@ -4018,7 +3944,7 @@ system. I am assuming that IDLWAVE has been installed in | |||
| 4018 | ;; the X/Emacs installation) | 3944 | ;; the X/Emacs installation) |
| 4019 | (setq load-path (cons "c:/program files/IDLWAVE" load-path)) | 3945 | (setq load-path (cons "c:/program files/IDLWAVE" load-path)) |
| 4020 | 3946 | ||
| 4021 | ;; The location of the IDL library files, both from RSI and your own. | 3947 | ;; The location of the IDL library files, both standard and your own. |
| 4022 | ;; note that the initial "+" expands the path recursively | 3948 | ;; note that the initial "+" expands the path recursively |
| 4023 | (setq idlwave-library-path | 3949 | (setq idlwave-library-path |
| 4024 | '("+c:/RSI/IDL55/lib/" "+c:/user/me/idllibs" )) | 3950 | '("+c:/RSI/IDL55/lib/" "+c:/user/me/idllibs" )) |
| @@ -4113,9 +4039,7 @@ in compiled lisp files. Presumably, you kept the original .elc files in | |||
| 4113 | place, and this is the source of the error. If you recompile (or just | 4039 | place, and this is the source of the error. If you recompile (or just |
| 4114 | "make; make install") from source, it should resolve this problem. | 4040 | "make; make install") from source, it should resolve this problem. |
| 4115 | Another option is to recompile the @file{idlw*.el} files by hand using | 4041 | Another option is to recompile the @file{idlw*.el} files by hand using |
| 4116 | @kbd{M-x byte-compile-file}. Why not take the opportunity to grab the | 4042 | @kbd{M-x byte-compile-file}. |
| 4117 | latest IDLWAVE version at @uref{@value{IDLWAVE-HOMEPAGE}, the | ||
| 4118 | maintainers webpage} | ||
| 4119 | 4043 | ||
| 4120 | @item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches | 4044 | @item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches |
| 4121 | windows on my desktop.} | 4045 | windows on my desktop.} |
| @@ -4214,7 +4138,7 @@ method, and the most recent information will be available to all users. | |||
| 4214 | @item @strong{All the Greek-font characters in the HTML help are | 4138 | @item @strong{All the Greek-font characters in the HTML help are |
| 4215 | displayed as Latin characters!} | 4139 | displayed as Latin characters!} |
| 4216 | 4140 | ||
| 4217 | Unfortunately, the HTMLHelp files RSI provides attempt to switch to | 4141 | Unfortunately, the HTMLHelp files attempt to switch to |
| 4218 | @samp{Symbol} font to display Greek characters, which is not really an | 4142 | @samp{Symbol} font to display Greek characters, which is not really an |
| 4219 | permitted method for doing this in HTML. There is a "workaround" for | 4143 | permitted method for doing this in HTML. There is a "workaround" for |
| 4220 | many browsers: @xref{HTML Help Browser Tips}. | 4144 | many browsers: @xref{HTML Help Browser Tips}. |
diff --git a/man/message.texi b/man/message.texi index 5e488b0e7cf..8a10ea2445d 100644 --- a/man/message.texi +++ b/man/message.texi | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | @copying | 8 | @copying |
| 9 | This file documents Message, the Emacs message composition mode. | 9 | This file documents Message, the Emacs message composition mode. |
| 10 | 10 | ||
| 11 | Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 | 11 | Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 |
| 12 | Free Software Foundation, Inc. | 12 | Free Software Foundation, Inc. |
| 13 | 13 | ||
| 14 | @quotation | 14 | @quotation |
diff --git a/man/misc.texi b/man/misc.texi index 5ef15d45d87..f1e05cae89c 100644 --- a/man/misc.texi +++ b/man/misc.texi | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | @c This is part of the Emacs manual. | 1 | @c This is part of the Emacs manual. |
| 2 | @c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000, 2001, 2004 | 2 | @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2004 |
| 3 | @c Free Software Foundation, Inc. | 3 | @c Free Software Foundation, Inc. |
| 4 | @c See file emacs.texi for copying conditions. | 4 | @c See file emacs.texi for copying conditions. |
| 5 | @iftex | 5 | @iftex |
| @@ -1247,6 +1247,14 @@ kills it if the file name matches the regular expression | |||
| 1247 | If you set the variable @code{server-window} to a window or a frame, | 1247 | If you set the variable @code{server-window} to a window or a frame, |
| 1248 | @kbd{C-x #} displays the server buffer in that window or in that frame. | 1248 | @kbd{C-x #} displays the server buffer in that window or in that frame. |
| 1249 | 1249 | ||
| 1250 | @vindex server-name | ||
| 1251 | You can run multiple Emacs servers on the same machine by giving | ||
| 1252 | each one a unique ``server name'', using the variable | ||
| 1253 | @code{server-name}. For example, @kbd{M-x set-variable @key{RET} | ||
| 1254 | server-name @key{RET} foo @key{RET}} sets the server name to | ||
| 1255 | @samp{foo}. The @code{emacsclient} program can visit a server by name | ||
| 1256 | using the @samp{-s} option. @xref{Invoking emacsclient}. | ||
| 1257 | |||
| 1250 | While @code{mail} or another application is waiting for | 1258 | While @code{mail} or another application is waiting for |
| 1251 | @code{emacsclient} to finish, @code{emacsclient} does not read terminal | 1259 | @code{emacsclient} to finish, @code{emacsclient} does not read terminal |
| 1252 | input. So the terminal that @code{mail} was using is effectively | 1260 | input. So the terminal that @code{mail} was using is effectively |
| @@ -1329,6 +1337,9 @@ open the given files with the option @samp{--display=@var{DISPLAY}}. | |||
| 1329 | This can be used typically when connecting from home to an Emacs | 1337 | This can be used typically when connecting from home to an Emacs |
| 1330 | server running on your machine at your workplace. | 1338 | server running on your machine at your workplace. |
| 1331 | 1339 | ||
| 1340 | If there is more than one Emacs server running, you can specify a | ||
| 1341 | server name with the option @samp{-s @var{name}}. | ||
| 1342 | |||
| 1332 | You can also use @code{emacsclient} to execute any piece of Emacs Lisp | 1343 | You can also use @code{emacsclient} to execute any piece of Emacs Lisp |
| 1333 | code, using the option @samp{--eval}. When this option is given, the | 1344 | code, using the option @samp{--eval}. When this option is given, the |
| 1334 | rest of the arguments is not taken as a list of files to visit but as | 1345 | rest of the arguments is not taken as a list of files to visit but as |
| @@ -1341,7 +1352,7 @@ a list of expressions to evaluate. | |||
| 1341 | The Emacs commands for making hardcopy let you print either an entire | 1352 | The Emacs commands for making hardcopy let you print either an entire |
| 1342 | buffer or just part of one, either with or without page headers. | 1353 | buffer or just part of one, either with or without page headers. |
| 1343 | See also the hardcopy commands of Dired (@pxref{Misc File Ops}) | 1354 | See also the hardcopy commands of Dired (@pxref{Misc File Ops}) |
| 1344 | and the diary (@pxref{Diary Commands}). | 1355 | and the diary (@pxref{Displaying the Diary}). |
| 1345 | 1356 | ||
| 1346 | @table @kbd | 1357 | @table @kbd |
| 1347 | @item M-x print-buffer | 1358 | @item M-x print-buffer |
diff --git a/man/mule.texi b/man/mule.texi index be71bd64402..c085839cbd8 100644 --- a/man/mule.texi +++ b/man/mule.texi | |||
| @@ -428,6 +428,9 @@ is the command @kbd{C-\} (@code{toggle-input-method}) used twice. | |||
| 428 | because it stops waiting for more characters to combine, and starts | 428 | because it stops waiting for more characters to combine, and starts |
| 429 | searching for what you have already entered. | 429 | searching for what you have already entered. |
| 430 | 430 | ||
| 431 | To find out how to input the character after point using the current | ||
| 432 | input method, type @kbd{C-u C-x =}. @xref{Position Info}. | ||
| 433 | |||
| 431 | @vindex input-method-verbose-flag | 434 | @vindex input-method-verbose-flag |
| 432 | @vindex input-method-highlight-flag | 435 | @vindex input-method-highlight-flag |
| 433 | The variables @code{input-method-highlight-flag} and | 436 | The variables @code{input-method-highlight-flag} and |
| @@ -928,6 +931,9 @@ files. | |||
| 928 | @item C-x @key{RET} X @var{coding} @key{RET} | 931 | @item C-x @key{RET} X @var{coding} @key{RET} |
| 929 | Use coding system @var{coding} for transferring @emph{one} | 932 | Use coding system @var{coding} for transferring @emph{one} |
| 930 | selection---the next one---to or from the window system. | 933 | selection---the next one---to or from the window system. |
| 934 | |||
| 935 | @item M-x recode-region | ||
| 936 | Convert the region from a previous coding system to a new one. | ||
| 931 | @end table | 937 | @end table |
| 932 | 938 | ||
| 933 | @kindex C-x RET f | 939 | @kindex C-x RET f |
| @@ -1056,6 +1062,12 @@ corresponding buffer. | |||
| 1056 | The default for translation of process input and output depends on the | 1062 | The default for translation of process input and output depends on the |
| 1057 | current language environment. | 1063 | current language environment. |
| 1058 | 1064 | ||
| 1065 | @findex recode-region | ||
| 1066 | If a piece of text has already been inserted into a buffer using the | ||
| 1067 | wrong coding system, you can decode it again using @kbd{M-x | ||
| 1068 | recode-region}. This prompts you for the old coding system and the | ||
| 1069 | desired coding system, and acts on the text in the region. | ||
| 1070 | |||
| 1059 | @vindex file-name-coding-system | 1071 | @vindex file-name-coding-system |
| 1060 | @cindex file names with non-@acronym{ASCII} characters | 1072 | @cindex file names with non-@acronym{ASCII} characters |
| 1061 | @findex set-file-name-coding-system | 1073 | @findex set-file-name-coding-system |
| @@ -1084,6 +1096,12 @@ these buffers under the visited file name, saving may use the wrong file | |||
| 1084 | name, or it may get an error. If such a problem happens, use @kbd{C-x | 1096 | name, or it may get an error. If such a problem happens, use @kbd{C-x |
| 1085 | C-w} to specify a new file name for that buffer. | 1097 | C-w} to specify a new file name for that buffer. |
| 1086 | 1098 | ||
| 1099 | @findex recode-file-name | ||
| 1100 | If a mistake occurs when encoding a file name, use the command | ||
| 1101 | command @kbd{M-x recode-file-name} to change the file name's coding | ||
| 1102 | system. This prompts for an existing file name, its old coding | ||
| 1103 | system, and the coding system to which you wish to convert. | ||
| 1104 | |||
| 1087 | @vindex locale-coding-system | 1105 | @vindex locale-coding-system |
| 1088 | @cindex decoding non-@acronym{ASCII} keyboard input on X | 1106 | @cindex decoding non-@acronym{ASCII} keyboard input on X |
| 1089 | The variable @code{locale-coding-system} specifies a coding system | 1107 | The variable @code{locale-coding-system} specifies a coding system |
| @@ -1333,62 +1351,52 @@ inclusive) are displayed as octal escapes. You can change this for | |||
| 1333 | non-standard ``extended'' versions of ISO-8859 character sets by using the | 1351 | non-standard ``extended'' versions of ISO-8859 character sets by using the |
| 1334 | function @code{standard-display-8bit} in the @code{disp-table} library. | 1352 | function @code{standard-display-8bit} in the @code{disp-table} library. |
| 1335 | 1353 | ||
| 1336 | There are several ways you can input single-byte non-@acronym{ASCII} | 1354 | There are two ways to input single-byte non-@acronym{ASCII} |
| 1337 | characters: | 1355 | characters: |
| 1338 | 1356 | ||
| 1339 | @itemize @bullet | 1357 | @itemize @bullet |
| 1340 | @cindex 8-bit input | 1358 | @cindex 8-bit input |
| 1341 | @item | 1359 | @item |
| 1360 | You can use an input method for the selected language environment. | ||
| 1361 | @xref{Input Methods}. When you use an input method in a unibyte buffer, | ||
| 1362 | the non-@acronym{ASCII} character you specify with it is converted to unibyte. | ||
| 1363 | |||
| 1364 | @item | ||
| 1342 | If your keyboard can generate character codes 128 (decimal) and up, | 1365 | If your keyboard can generate character codes 128 (decimal) and up, |
| 1343 | representing non-@acronym{ASCII} characters, you can type those character codes | 1366 | representing non-@acronym{ASCII} characters, you can type those character codes |
| 1344 | directly. | 1367 | directly. |
| 1345 | 1368 | ||
| 1346 | On a windowing terminal, you should not need to do anything special to | 1369 | On a window system, you should not need to do anything special to use |
| 1347 | use these keys; they should simply work. On a text-only terminal, you | 1370 | these keys; they should simply work. On a text-only terminal, you |
| 1348 | should use the command @code{M-x set-keyboard-coding-system} or the | 1371 | should use the command @code{M-x set-keyboard-coding-system} or the |
| 1349 | variable @code{keyboard-coding-system} to specify which coding | 1372 | variable @code{keyboard-coding-system} to specify which coding system |
| 1350 | system your keyboard uses (@pxref{Specify Coding}). Enabling this | 1373 | your keyboard uses (@pxref{Specify Coding}). Enabling this feature |
| 1351 | feature will probably require you to use @kbd{ESC} to type Meta | 1374 | will probably require you to use @kbd{ESC} to type Meta characters; |
| 1352 | characters; however, on a console terminal or in @code{xterm}, you can | 1375 | however, on a console terminal or in @code{xterm}, you can arrange for |
| 1353 | arrange for Meta to be converted to @kbd{ESC} and still be able type | 1376 | Meta to be converted to @kbd{ESC} and still be able type 8-bit |
| 1354 | 8-bit characters present directly on the keyboard or using | 1377 | characters present directly on the keyboard or using @kbd{Compose} or |
| 1355 | @kbd{Compose} or @kbd{AltGr} keys. @xref{User Input}. | 1378 | @kbd{AltGr} keys. @xref{User Input}. |
| 1356 | |||
| 1357 | @item | ||
| 1358 | You can use an input method for the selected language environment. | ||
| 1359 | @xref{Input Methods}. When you use an input method in a unibyte buffer, | ||
| 1360 | the non-@acronym{ASCII} character you specify with it is converted to unibyte. | ||
| 1361 | 1379 | ||
| 1362 | @kindex C-x 8 | 1380 | @kindex C-x 8 |
| 1363 | @cindex @code{iso-transl} library | 1381 | @cindex @code{iso-transl} library |
| 1364 | @cindex compose character | 1382 | @cindex compose character |
| 1365 | @cindex dead character | 1383 | @cindex dead character |
| 1366 | @item | 1384 | @item |
| 1367 | For Latin-1 only, you can use the | 1385 | For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose |
| 1368 | key @kbd{C-x 8} as a ``compose character'' prefix for entry of | 1386 | character'' prefix for entry of non-@acronym{ASCII} Latin-1 printing |
| 1369 | non-@acronym{ASCII} Latin-1 printing characters. @kbd{C-x 8} is good for | 1387 | characters. @kbd{C-x 8} is good for insertion (in the minibuffer as |
| 1370 | insertion (in the minibuffer as well as other buffers), for searching, | 1388 | well as other buffers), for searching, and in any other context where |
| 1371 | and in any other context where a key sequence is allowed. | 1389 | a key sequence is allowed. |
| 1372 | 1390 | ||
| 1373 | @kbd{C-x 8} works by loading the @code{iso-transl} library. Once that | 1391 | @kbd{C-x 8} works by loading the @code{iso-transl} library. Once that |
| 1374 | library is loaded, the @key{ALT} modifier key, if you have one, serves | 1392 | library is loaded, the @key{ALT} modifier key, if the keyboard has |
| 1375 | the same purpose as @kbd{C-x 8}; use @key{ALT} together with an accent | 1393 | one, serves the same purpose as @kbd{C-x 8}: use @key{ALT} together |
| 1376 | character to modify the following letter. In addition, if you have keys | 1394 | with an accent character to modify the following letter. In addition, |
| 1377 | for the Latin-1 ``dead accent characters,'' they too are defined to | 1395 | if the keyboard has keys for the Latin-1 ``dead accent characters,'' |
| 1378 | compose with the following character, once @code{iso-transl} is loaded. | 1396 | they too are defined to compose with the following character, once |
| 1379 | Use @kbd{C-x 8 C-h} to list the available translations as mnemonic | 1397 | @code{iso-transl} is loaded. |
| 1380 | command names. | 1398 | |
| 1381 | 1399 | Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations. | |
| 1382 | @item | ||
| 1383 | @cindex @code{iso-acc} library | ||
| 1384 | @cindex ISO Accents mode | ||
| 1385 | @findex iso-accents-mode | ||
| 1386 | @cindex Latin-1, Latin-2 and Latin-3 input mode | ||
| 1387 | For Latin-1, Latin-2 and Latin-3, @kbd{M-x iso-accents-mode} enables | ||
| 1388 | a minor mode that works much like the @code{latin-1-prefix} input | ||
| 1389 | method, but does not depend on having the input methods installed. This | ||
| 1390 | mode is buffer-local. It can be customized for various languages with | ||
| 1391 | @kbd{M-x iso-accents-customize}. | ||
| 1392 | @end itemize | 1400 | @end itemize |
| 1393 | 1401 | ||
| 1394 | @node Charsets | 1402 | @node Charsets |
diff --git a/man/org.texi b/man/org.texi index d461e9c1020..d1a388f958a 100644 --- a/man/org.texi +++ b/man/org.texi | |||
| @@ -3,8 +3,8 @@ | |||
| 3 | @setfilename ../info/org | 3 | @setfilename ../info/org |
| 4 | @settitle Org Mode Manual | 4 | @settitle Org Mode Manual |
| 5 | 5 | ||
| 6 | @set VERSION 3.04 | 6 | @set VERSION 3.05 |
| 7 | @set DATE December 2004 | 7 | @set DATE April 2005 |
| 8 | 8 | ||
| 9 | @dircategory Emacs | 9 | @dircategory Emacs |
| 10 | @direntry | 10 | @direntry |
| @@ -34,7 +34,7 @@ | |||
| 34 | @copying | 34 | @copying |
| 35 | This manual is for Org-mode (version @value{VERSION}). | 35 | This manual is for Org-mode (version @value{VERSION}). |
| 36 | 36 | ||
| 37 | Copyright @copyright{} 2004 Free Software Foundation | 37 | Copyright @copyright{} 2004, 2005 Free Software Foundation |
| 38 | 38 | ||
| 39 | @quotation | 39 | @quotation |
| 40 | Permission is granted to copy, distribute and/or modify this document | 40 | Permission is granted to copy, distribute and/or modify this document |
| @@ -184,7 +184,8 @@ top of outline-mode, which makes it possible to keep the content of | |||
| 184 | large files well structured. Visibility cycling and structure editing | 184 | large files well structured. Visibility cycling and structure editing |
| 185 | help to work with the tree. Tables are easily created with a built-in | 185 | help to work with the tree. Tables are easily created with a built-in |
| 186 | table editor. Org-mode supports ToDo items, deadlines, time stamps, | 186 | table editor. Org-mode supports ToDo items, deadlines, time stamps, |
| 187 | and scheduling. It dynamically compiles entries into an agenda. | 187 | and scheduling. It dynamically compiles entries into an agenda that |
| 188 | utilizes and smoothly integrates much of the Emacs calendar and diary. | ||
| 188 | Plain text URL-like links connect to websites, emails, usenet | 189 | Plain text URL-like links connect to websites, emails, usenet |
| 189 | messages, BBDB entries, and any files related to the projects. For | 190 | messages, BBDB entries, and any files related to the projects. For |
| 190 | printing and sharing of notes, an Org-mode file can be exported as a | 191 | printing and sharing of notes, an Org-mode file can be exported as a |
| @@ -203,15 +204,14 @@ different levels and in different ways, for example | |||
| 203 | @r{@bullet{} as a full agenda and planner with deadlines and work scheduling} | 204 | @r{@bullet{} as a full agenda and planner with deadlines and work scheduling} |
| 204 | @end example | 205 | @end example |
| 205 | 206 | ||
| 206 | The Org-mode table editor can be used integrated into any major mode | 207 | The Org-mode table editor can be integrated into any major mode by |
| 207 | by activating the minor Ortbl-mode. | 208 | activating the minor Orgtbl-mode. |
| 208 | 209 | ||
| 209 | There is a website for Org-mode which provides links to the newest | 210 | There is a website for Org-mode which provides links to the newest |
| 210 | version of Org-mode, as well as additional information, screen shots | 211 | version of Org-mode, as well as additional information, screen shots |
| 211 | and example files. This page is located at | 212 | and example files. This page is located at |
| 212 | @uref{http://www.astro.uva.nl/~dominik/Tools/org/}. | 213 | @uref{http://www.astro.uva.nl/~dominik/Tools/org/}. |
| 213 | 214 | ||
| 214 | |||
| 215 | @page | 215 | @page |
| 216 | 216 | ||
| 217 | @node Installation, , Summary, Introduction | 217 | @node Installation, , Summary, Introduction |
| @@ -352,6 +352,18 @@ Note that inside tables, @kbd{S-@key{TAB}} jumps to the previous field. | |||
| 352 | Show all. | 352 | Show all. |
| 353 | @end table | 353 | @end table |
| 354 | 354 | ||
| 355 | When Emacs firsts visits a Org-mode file, the global state is set to | ||
| 356 | OVERVIEW, i.e. only the top level headlines are visible. This can be | ||
| 357 | configured through the variable @code{org-startup-folded}, or on a | ||
| 358 | per-file basis by adding one of the following lines anywhere in the | ||
| 359 | buffer: | ||
| 360 | |||
| 361 | @example | ||
| 362 | #+STARTUP: fold | ||
| 363 | #+STARTUP: nofold | ||
| 364 | @end example | ||
| 365 | |||
| 366 | |||
| 355 | @node Motion, Structure editing, Visibility cycling, Document Structure | 367 | @node Motion, Structure editing, Visibility cycling, Document Structure |
| 356 | @section Motion | 368 | @section Motion |
| 357 | @cindex motion, between headlines | 369 | @cindex motion, between headlines |
| @@ -473,6 +485,17 @@ the match. | |||
| 473 | Other commands are using this feature as well. For example @kbd{C-c | 485 | Other commands are using this feature as well. For example @kbd{C-c |
| 474 | C-v} creates a sparse TODO tree (@pxref{TODO basics}). | 486 | C-v} creates a sparse TODO tree (@pxref{TODO basics}). |
| 475 | 487 | ||
| 488 | @kindex C-c C-x v | ||
| 489 | @cindex printing sparse trees | ||
| 490 | @cindex visible text, printing | ||
| 491 | To print a sparse tree, you can use the Emacs command | ||
| 492 | @code{ps-print-buffer-with-faces} which does not print invisible parts | ||
| 493 | of the document @footnote{this does not work under XEmacs, because | ||
| 494 | XEmacs uses selective display for outlining, not text properties}. | ||
| 495 | Or you can use the command @kbd{C-c C-x v} to copy the visible part of | ||
| 496 | the document to another file (extension @file{.txt}) which then can be | ||
| 497 | printed in any desired way. | ||
| 498 | |||
| 476 | @node TODO items, Tables, Document Structure, Top | 499 | @node TODO items, Tables, Document Structure, Top |
| 477 | @chapter TODO items | 500 | @chapter TODO items |
| 478 | @cindex TODO items | 501 | @cindex TODO items |
| @@ -611,7 +634,7 @@ persons. | |||
| 611 | @end lisp | 634 | @end lisp |
| 612 | 635 | ||
| 613 | In this case, different keywords do not indicate a sequence, but | 636 | In this case, different keywords do not indicate a sequence, but |
| 614 | rather different levels. This changes the behavior of the command | 637 | rather different types. This changes the behavior of the command |
| 615 | @kbd{C-c C-t} slightly. When used several times in succession, it | 638 | @kbd{C-c C-t} slightly. When used several times in succession, it |
| 616 | will still cycle through all names. But when when you return to the | 639 | will still cycle through all names. But when when you return to the |
| 617 | item after some time and execute @kbd{C-c C-t} again, it will switch | 640 | item after some time and execute @kbd{C-c C-t} again, it will switch |
| @@ -745,11 +768,6 @@ Re-align the table and move down to next row. Creates a new row if | |||
| 745 | necessary. At the beginning or end of a line, @key{RET} still does | 768 | necessary. At the beginning or end of a line, @key{RET} still does |
| 746 | NEWLINE, so it can be used to split a table. | 769 | NEWLINE, so it can be used to split a table. |
| 747 | 770 | ||
| 748 | @kindex S-@key{RET} | ||
| 749 | @item S-@key{RET} | ||
| 750 | Copy from first non-empty | ||
| 751 | field above current field. | ||
| 752 | |||
| 753 | @tsubheading{Column and row editing} | 771 | @tsubheading{Column and row editing} |
| 754 | @kindex M-@key{left} | 772 | @kindex M-@key{left} |
| 755 | @kindex M-@key{right} | 773 | @kindex M-@key{right} |
| @@ -796,7 +814,7 @@ Copy an rectangular region from a table to a special clipboard, and | |||
| 796 | blank all fields in the rectangle. | 814 | blank all fields in the rectangle. |
| 797 | @kindex C-c C-h C-y | 815 | @kindex C-c C-h C-y |
| 798 | @item C-c C-h C-y | 816 | @item C-c C-h C-y |
| 799 | Paste a rectangluar region into a table. | 817 | Paste a rectangular region into a table. |
| 800 | The upper right corner ends up in the current field. All involved fields | 818 | The upper right corner ends up in the current field. All involved fields |
| 801 | will be overwritten. If the rectangle does not fit into the present table, | 819 | will be overwritten. If the rectangle does not fit into the present table, |
| 802 | the table is enlarged as needed. The process ignores horizontal separator | 820 | the table is enlarged as needed. The process ignores horizontal separator |
| @@ -828,6 +846,14 @@ Sum the numbers in the current column, or in the rectangle defined by | |||
| 828 | the active region. The result is displayed in the echo area and can | 846 | the active region. The result is displayed in the echo area and can |
| 829 | be inserted with @kbd{C-y}. | 847 | be inserted with @kbd{C-y}. |
| 830 | 848 | ||
| 849 | @kindex S-@key{RET} | ||
| 850 | @item S-@key{RET} | ||
| 851 | When current field is empty, copy from first non-empty field above. | ||
| 852 | When not empty, copy current field down to next row and move cursor | ||
| 853 | along with it. Depending on the variable | ||
| 854 | @code{org-table-copy-increment}, integer field values will be | ||
| 855 | incremented during copy. | ||
| 856 | |||
| 831 | @cindex formula, in tables | 857 | @cindex formula, in tables |
| 832 | @cindex calculations, in tables | 858 | @cindex calculations, in tables |
| 833 | @kindex C-c = | 859 | @kindex C-c = |
| @@ -1063,7 +1089,7 @@ text has a headline, i.e. a first line that starts with a @samp{*}. | |||
| 1063 | If not, a headline is constructed from the current date and some | 1089 | If not, a headline is constructed from the current date and some |
| 1064 | additional data. If the variable @code{org-adapt-indentation} is | 1090 | additional data. If the variable @code{org-adapt-indentation} is |
| 1065 | non-nil, the entire text is also indented so that it starts in the | 1091 | non-nil, the entire text is also indented so that it starts in the |
| 1066 | same column as the headline (after the asterixes). | 1092 | same column as the headline (after the asterisks). |
| 1067 | 1093 | ||
| 1068 | @node Timestamps, Timeline and Agenda, Hyperlinks, Top | 1094 | @node Timestamps, Timeline and Agenda, Hyperlinks, Top |
| 1069 | @chapter Timestamps | 1095 | @chapter Timestamps |
| @@ -1404,11 +1430,12 @@ Sorting can be customized using the variable | |||
| 1404 | @node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda | 1430 | @node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda |
| 1405 | @section Commands in the agenda buffer | 1431 | @section Commands in the agenda buffer |
| 1406 | 1432 | ||
| 1407 | Entries in the agenda buffer are linked back to the org file. You are | 1433 | Entries in the agenda buffer are linked back to the org file or diary |
| 1408 | not allowed to edit the agenda buffer itself, but commands are provided | 1434 | file where they originate. You are not allowed to edit the agenda |
| 1409 | to edit the org-files ``remotely'' from the agenda buffer. In this | 1435 | buffer itself, but commands are provided to show and jump to the |
| 1410 | way, all information is stored only once, and you don't risk that your | 1436 | original entry location, and to edit the org-files ``remotely'' from |
| 1411 | agenda and note files diverge. | 1437 | the agenda buffer. In this way, all information is stored only once, |
| 1438 | and you don't risk that your agenda and note files diverge. | ||
| 1412 | 1439 | ||
| 1413 | Some commands can be executed with mouse clicks on agenda lines. For | 1440 | Some commands can be executed with mouse clicks on agenda lines. For |
| 1414 | the other commands, the cursor needs to be in the desired line. Most | 1441 | the other commands, the cursor needs to be in the desired line. Most |
| @@ -1468,7 +1495,7 @@ S-@key{right}. | |||
| 1468 | Display the following @code{org-agenda-ndays} days. For example, if | 1495 | Display the following @code{org-agenda-ndays} days. For example, if |
| 1469 | the display covers a week, switch to the following week. With prefix | 1496 | the display covers a week, switch to the following week. With prefix |
| 1470 | arg, go forward that many times @code{org-agenda-ndays} days. Not | 1497 | arg, go forward that many times @code{org-agenda-ndays} days. Not |
| 1471 | available in timlines. | 1498 | available in timelines. |
| 1472 | 1499 | ||
| 1473 | @kindex @key{left} | 1500 | @kindex @key{left} |
| 1474 | @item @key{left} | 1501 | @item @key{left} |
| @@ -1536,6 +1563,29 @@ Insert a new entry into the diary. Prompts for the type of entry | |||
| 1536 | entry in the diary, just like @kbd{i d} etc. would do in the calendar. | 1563 | entry in the diary, just like @kbd{i d} etc. would do in the calendar. |
| 1537 | The date is taken from the cursor position. | 1564 | The date is taken from the cursor position. |
| 1538 | 1565 | ||
| 1566 | @tsubheading{Calendar commands} | ||
| 1567 | @kindex c | ||
| 1568 | @item c | ||
| 1569 | Open the Emacs calendar and move to the date at the agenda cursor. | ||
| 1570 | |||
| 1571 | @kindex C | ||
| 1572 | @item C | ||
| 1573 | Convert the date at cursor into many other cultural and historic | ||
| 1574 | calendars. | ||
| 1575 | |||
| 1576 | @kindex M | ||
| 1577 | @item M | ||
| 1578 | Show the phases of the moon for three month around current date. | ||
| 1579 | |||
| 1580 | @kindex S | ||
| 1581 | @item S | ||
| 1582 | Show sunrise and sunset times. The location must be set with calendar | ||
| 1583 | variables, see documentation of the Emacs calendar. | ||
| 1584 | |||
| 1585 | @kindex H | ||
| 1586 | @item H | ||
| 1587 | Show holidays for three month around the cursor date. | ||
| 1588 | |||
| 1539 | @tsubheading{Quit and Exit} | 1589 | @tsubheading{Quit and Exit} |
| 1540 | @kindex q | 1590 | @kindex q |
| 1541 | @item q | 1591 | @item q |
| @@ -1564,8 +1614,9 @@ Org-mode. It can be very useful to combine output from Org-mode with | |||
| 1564 | the diary. | 1614 | the diary. |
| 1565 | 1615 | ||
| 1566 | The interaction between Org-mode and diary works both ways: You can | 1616 | The interaction between Org-mode and diary works both ways: You can |
| 1567 | list entries from the diary in the Org-mode agenda, or you can display | 1617 | list entries from the diary in the Org-mode agenda, from which many |
| 1568 | entries from the org agenda in the Emacs diary. | 1618 | calendar and diary commands are directly accessible. Or you can |
| 1619 | display entries from the org agenda in the Emacs diary. | ||
| 1569 | 1620 | ||
| 1570 | @menu | 1621 | @menu |
| 1571 | * Diary to agenda:: Agenda incorporates the diary | 1622 | * Diary to agenda:: Agenda incorporates the diary |
| @@ -1584,7 +1635,15 @@ agenda, you only need to customize the variable | |||
| 1584 | @end lisp | 1635 | @end lisp |
| 1585 | @noindent | 1636 | @noindent |
| 1586 | 1637 | ||
| 1587 | @noindent After that, everything will happen automatically. | 1638 | @noindent After that, everything will happen automatically. All diary |
| 1639 | entries including holidays, anniversaries etc will be included in the | ||
| 1640 | agenda buffer created by Org-mode. @key{SPC}, @key{TAB}, and | ||
| 1641 | @key{RET} can be used from the agenda buffer to jump to the diary | ||
| 1642 | file, in order to edit existing diary entries. Also the @kbd{i} | ||
| 1643 | command to insert new entries for the current date works in the agenda | ||
| 1644 | buffer, as well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to | ||
| 1645 | display Sunrise/Sunset times, show lunar phases and to convert to | ||
| 1646 | other calendars, respectively. | ||
| 1588 | 1647 | ||
| 1589 | @node Agenda to diary, , Diary to agenda, Calendar/Diary integration | 1648 | @node Agenda to diary, , Diary to agenda, Calendar/Diary integration |
| 1590 | @subsection Including the agenda into the diary | 1649 | @subsection Including the agenda into the diary |
diff --git a/man/programs.texi b/man/programs.texi index 353cb85aa60..98e60d0385c 100644 --- a/man/programs.texi +++ b/man/programs.texi | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | @c This is part of the Emacs manual. | 1 | @c This is part of the Emacs manual. |
| 2 | @c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc. | 2 | @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, |
| 3 | @c 2001, 2005 Free Software Foundation, Inc. | ||
| 3 | @c See file emacs.texi for copying conditions. | 4 | @c See file emacs.texi for copying conditions. |
| 4 | @node Programs, Building, Text, Top | 5 | @node Programs, Building, Text, Top |
| 5 | @chapter Editing Programs | 6 | @chapter Editing Programs |
| @@ -80,17 +81,19 @@ and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}. | |||
| 80 | @cindex Shell-script mode | 81 | @cindex Shell-script mode |
| 81 | @cindex Delphi mode | 82 | @cindex Delphi mode |
| 82 | @cindex PostScript mode | 83 | @cindex PostScript mode |
| 84 | @cindex Conf mode | ||
| 85 | @cindex DNS mode | ||
| 83 | The existing programming language major modes include Lisp, Scheme (a | 86 | The existing programming language major modes include Lisp, Scheme (a |
| 84 | variant of Lisp) and the Scheme-based DSSSL expression language, Ada, | 87 | variant of Lisp) and the Scheme-based DSSSL expression language, Ada, |
| 85 | ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed | 88 | ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed |
| 86 | format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s | 89 | format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s |
| 87 | companion for font creation), Modula2, Objective-C, Octave, Pascal, | 90 | companion for font creation), Modula2, Objective-C, Octave, Pascal, |
| 88 | Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. There is | 91 | Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. An |
| 89 | also a major mode for makefiles, called Makefile mode. An alternative | 92 | alternative mode for Perl is called CPerl mode. Modes are available for |
| 90 | mode for Perl is called CPerl mode. Modes are available for the | 93 | the scripting languages of the common GNU and Unix shells, VMS DCL, and |
| 91 | scripting languages of the common GNU and Unix shells, VMS DCL, and | ||
| 92 | MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for | 94 | MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for |
| 93 | editing various sorts of configuration files. | 95 | editing makefiles, DNS master files, and various sorts of configuration |
| 96 | files. | ||
| 94 | 97 | ||
| 95 | @kindex DEL @r{(programming modes)} | 98 | @kindex DEL @r{(programming modes)} |
| 96 | @findex c-electric-backspace | 99 | @findex c-electric-backspace |
| @@ -1801,11 +1804,11 @@ names. | |||
| 1801 | @cindex Fortran mode | 1804 | @cindex Fortran mode |
| 1802 | @cindex mode, Fortran | 1805 | @cindex mode, Fortran |
| 1803 | 1806 | ||
| 1804 | Fortran mode provides special motion commands for Fortran statements and | 1807 | Fortran mode provides special motion commands for Fortran statements |
| 1805 | subprograms, and indentation commands that understand Fortran conventions | 1808 | and subprograms, and indentation commands that understand Fortran |
| 1806 | of nesting, line numbers and continuation statements. Fortran mode has | 1809 | conventions of nesting, line numbers and continuation statements. |
| 1807 | its own Auto Fill mode that breaks long lines into proper Fortran | 1810 | Fortran mode has support for Auto Fill mode that breaks long lines into |
| 1808 | continuation lines. | 1811 | proper Fortran continuation lines. |
| 1809 | 1812 | ||
| 1810 | Special commands for comments are provided because Fortran comments | 1813 | Special commands for comments are provided because Fortran comments |
| 1811 | are unlike those of other languages. Built-in abbrevs optionally save | 1814 | are unlike those of other languages. Built-in abbrevs optionally save |
| @@ -1817,18 +1820,18 @@ runs the hook @code{fortran-mode-hook} (@pxref{Hooks}). | |||
| 1817 | @cindex Fortran77 and Fortran90 | 1820 | @cindex Fortran77 and Fortran90 |
| 1818 | @findex f90-mode | 1821 | @findex f90-mode |
| 1819 | @findex fortran-mode | 1822 | @findex fortran-mode |
| 1820 | Fortran mode is meant for editing Fortran77 ``fixed format'' source | 1823 | Fortran mode is meant for editing Fortran77 ``fixed format'' (and also |
| 1821 | code. For editing the modern Fortran90 ``free format'' source code, | 1824 | ``tab format'') source code. For editing the modern Fortran90 or |
| 1822 | use F90 mode (@code{f90-mode}). Emacs normally uses Fortran mode for | 1825 | Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}). |
| 1823 | files with extension @samp{.f}, @samp{.F} or @samp{.for}, and F90 mode | 1826 | Emacs normally uses Fortran mode for files with extension @samp{.f}, |
| 1824 | for the extension @samp{.f90}. GNU Fortran supports both kinds of | 1827 | @samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and |
| 1825 | format. | 1828 | @samp{.f95}. GNU Fortran supports both kinds of format. |
| 1826 | 1829 | ||
| 1827 | @menu | 1830 | @menu |
| 1828 | * Motion: Fortran Motion. Moving point by statements or subprograms. | 1831 | * Motion: Fortran Motion. Moving point by statements or subprograms. |
| 1829 | * Indent: Fortran Indent. Indentation commands for Fortran. | 1832 | * Indent: Fortran Indent. Indentation commands for Fortran. |
| 1830 | * Comments: Fortran Comments. Inserting and aligning comments. | 1833 | * Comments: Fortran Comments. Inserting and aligning comments. |
| 1831 | * Autofill: Fortran Autofill. Auto fill minor mode for Fortran. | 1834 | * Autofill: Fortran Autofill. Auto fill support for Fortran. |
| 1832 | * Columns: Fortran Columns. Measuring columns for valid Fortran. | 1835 | * Columns: Fortran Columns. Measuring columns for valid Fortran. |
| 1833 | * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. | 1836 | * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. |
| 1834 | @end menu | 1837 | @end menu |
| @@ -1837,8 +1840,9 @@ format. | |||
| 1837 | @subsection Motion Commands | 1840 | @subsection Motion Commands |
| 1838 | 1841 | ||
| 1839 | In addition to the normal commands for moving by and operating on | 1842 | In addition to the normal commands for moving by and operating on |
| 1840 | ``defuns'' (Fortran subprograms---functions and subroutines), Fortran | 1843 | ``defuns'' (Fortran subprograms---functions and subroutines, as well as |
| 1841 | mode provides special commands to move by statements. | 1844 | modules for F90 mode), Fortran mode provides special commands to move by |
| 1845 | statements and other program units. | ||
| 1842 | 1846 | ||
| 1843 | @table @kbd | 1847 | @table @kbd |
| 1844 | @kindex C-c C-n @r{(Fortran mode)} | 1848 | @kindex C-c C-n @r{(Fortran mode)} |
| @@ -1873,21 +1877,24 @@ Move point backward to the previous code block | |||
| 1873 | (@code{f90-previous-block}). This is like @code{f90-next-block}, but | 1877 | (@code{f90-previous-block}). This is like @code{f90-next-block}, but |
| 1874 | moves backwards. | 1878 | moves backwards. |
| 1875 | 1879 | ||
| 1876 | @kindex C-M-n @r{(F90 mode)} | 1880 | @kindex C-M-n @r{(Fortran mode)} |
| 1881 | @findex fortran-end-of-block | ||
| 1877 | @findex f90-end-of-block | 1882 | @findex f90-end-of-block |
| 1878 | @item C-M-n | 1883 | @item C-M-n |
| 1879 | Move to the end of the current code block (@code{f90-end-of-block}). | 1884 | Move to the end of the current code block |
| 1880 | This is for F90 mode only. With a numeric agument, move forward that | 1885 | (@code{fortran-end-of-block}/@code{f90-end-of-block}). With a numeric |
| 1881 | number of blocks. This command checks for consistency of block types | 1886 | agument, move forward that number of blocks. The mark is set before |
| 1882 | and labels (if present), but it does not check the outermost block | 1887 | moving point. The F90 mode version of this command checks for |
| 1883 | since that may be incomplete. The mark is set before moving point. | 1888 | consistency of block types and labels (if present), but it does not |
| 1884 | 1889 | check the outermost block since that may be incomplete. | |
| 1885 | @kindex C-M-p @r{(F90 mode)} | 1890 | |
| 1891 | @kindex C-M-p @r{(Fortran mode)} | ||
| 1892 | @findex fortran-beginning-of-block | ||
| 1886 | @findex f90-beginning-of-block | 1893 | @findex f90-beginning-of-block |
| 1887 | @item C-M-p | 1894 | @item C-M-p |
| 1888 | Move to the start of the current code block | 1895 | Move to the start of the current code block |
| 1889 | (@code{f90-beginning-of-block}). This is like @code{f90-end-of-block}, | 1896 | (@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This |
| 1890 | but moves backwards. | 1897 | is like @code{fortran-end-of-block}, but moves backwards. |
| 1891 | @end table | 1898 | @end table |
| 1892 | 1899 | ||
| 1893 | @node Fortran Indent | 1900 | @node Fortran Indent |
| @@ -1896,7 +1903,7 @@ but moves backwards. | |||
| 1896 | Special commands and features are needed for indenting Fortran code in | 1903 | Special commands and features are needed for indenting Fortran code in |
| 1897 | order to make sure various syntactic entities (line numbers, comment line | 1904 | order to make sure various syntactic entities (line numbers, comment line |
| 1898 | indicators and continuation line flags) appear in the columns that are | 1905 | indicators and continuation line flags) appear in the columns that are |
| 1899 | required for standard Fortran. | 1906 | required for standard, fixed (or tab) format Fortran. |
| 1900 | 1907 | ||
| 1901 | @menu | 1908 | @menu |
| 1902 | * Commands: ForIndent Commands. Commands for indenting and filling Fortran. | 1909 | * Commands: ForIndent Commands. Commands for indenting and filling Fortran. |
| @@ -1911,7 +1918,7 @@ required for standard Fortran. | |||
| 1911 | 1918 | ||
| 1912 | @table @kbd | 1919 | @table @kbd |
| 1913 | @item C-M-j | 1920 | @item C-M-j |
| 1914 | Break the current line and set up a continuation line | 1921 | Break the current line at point and set up a continuation line |
| 1915 | (@code{fortran-split-line}). | 1922 | (@code{fortran-split-line}). |
| 1916 | @item M-^ | 1923 | @item M-^ |
| 1917 | Join this line to the previous line (@code{fortran-join-line}). | 1924 | Join this line to the previous line (@code{fortran-join-line}). |
| @@ -1953,30 +1960,39 @@ point is in. This removes any excess statement continuations. | |||
| 1953 | @cindex Fortran continuation lines | 1960 | @cindex Fortran continuation lines |
| 1954 | 1961 | ||
| 1955 | @vindex fortran-continuation-string | 1962 | @vindex fortran-continuation-string |
| 1956 | Most modern Fortran compilers allow two ways of writing continuation | 1963 | Most Fortran77 compilers allow two ways of writing continuation lines. |
| 1957 | lines. If the first non-space character on a line is in column 5, then | 1964 | If the first non-space character on a line is in column 5, then that |
| 1958 | that line is a continuation of the previous line. We call this | 1965 | line is a continuation of the previous line. We call this @dfn{fixed |
| 1959 | @dfn{fixed format}. (In GNU Emacs we always count columns from 0.) The | 1966 | format}. (In GNU Emacs we always count columns from 0; but note that |
| 1960 | variable @code{fortran-continuation-string} specifies what character to | 1967 | the Fortran standard counts from 1.) The variable |
| 1961 | put on column 5. A line that starts with a tab character followed by | 1968 | @code{fortran-continuation-string} specifies what character to put in |
| 1962 | any digit except @samp{0} is also a continuation line. We call this | 1969 | column 5. A line that starts with a tab character followed by any digit |
| 1963 | style of continuation @dfn{tab format}. | 1970 | except @samp{0} is also a continuation line. We call this style of |
| 1971 | continuation @dfn{tab format}. (Fortran90 introduced ``free format'', | ||
| 1972 | with another style of continuation lines). | ||
| 1964 | 1973 | ||
| 1965 | @vindex indent-tabs-mode @r{(Fortran mode)} | 1974 | @vindex indent-tabs-mode @r{(Fortran mode)} |
| 1966 | Fortran mode can make either style of continuation line, but you | 1975 | @vindex fortran-analyze-depth |
| 1967 | must specify which one you prefer. The value of the variable | 1976 | @vindex fortran-tab-mode-default |
| 1968 | @code{indent-tabs-mode} controls the choice: @code{nil} for fixed | 1977 | Fortran mode can use either style of continuation line. When you |
| 1969 | format, and non-@code{nil} for tab format. You can tell which style | 1978 | enter Fortran mode, it tries to deduce the proper continuation style |
| 1970 | is presently in effect by the presence or absence of the string | 1979 | automatically from the buffer contents. It does this by scanning up to |
| 1971 | @samp{Tab} in the mode line. | 1980 | @code{fortran-analyze-depth} (default 100) lines from the start of the |
| 1972 | 1981 | buffer. The first line that begins with either a tab character or six | |
| 1973 | If the text on a line starts with the conventional Fortran | 1982 | spaces determines the choice. If the scan fails (for example, if the |
| 1974 | continuation marker @samp{$}, or if it begins with any non-whitespace | 1983 | buffer is new and therefore empty), the value of |
| 1975 | character in column 5, Fortran mode treats it as a continuation line. | 1984 | @code{fortran-tab-mode-default} (@code{nil} for fixed format, and |
| 1976 | When you indent a continuation line with @key{TAB}, it converts the line | 1985 | non-@code{nil} for tab format) is used. @samp{/t} in the mode line |
| 1977 | to the current continuation style. When you split a Fortran statement | 1986 | indicates tab format is selected. Fortran mode sets the value of |
| 1978 | with @kbd{C-M-j}, the continuation marker on the newline is created | 1987 | @code{indent-tabs-mode} accordingly (@pxref{Just Spaces}). |
| 1979 | according to the continuation style. | 1988 | |
| 1989 | If the text on a line starts with the Fortran continuation marker | ||
| 1990 | @samp{$}, or if it begins with any non-whitespace character in column | ||
| 1991 | 5, Fortran mode treats it as a continuation line. When you indent a | ||
| 1992 | continuation line with @key{TAB}, it converts the line to the current | ||
| 1993 | continuation style. When you split a Fortran statement with | ||
| 1994 | @kbd{C-M-j}, the continuation marker on the newline is created according | ||
| 1995 | to the continuation style. | ||
| 1980 | 1996 | ||
| 1981 | The setting of continuation style affects several other aspects of | 1997 | The setting of continuation style affects several other aspects of |
| 1982 | editing in Fortran mode. In fixed format mode, the minimum column | 1998 | editing in Fortran mode. In fixed format mode, the minimum column |
| @@ -1986,17 +2002,6 @@ space character for whitespace. In tab format mode, the minimum | |||
| 1986 | column number for the statement body is 8, and the whitespace before | 2002 | column number for the statement body is 8, and the whitespace before |
| 1987 | column 8 must always consist of one tab character. | 2003 | column 8 must always consist of one tab character. |
| 1988 | 2004 | ||
| 1989 | @vindex fortran-tab-mode-default | ||
| 1990 | @vindex fortran-analyze-depth | ||
| 1991 | When you enter Fortran mode for an existing file, it tries to deduce the | ||
| 1992 | proper continuation style automatically from the file contents. The first | ||
| 1993 | line that begins with either a tab character or six spaces determines the | ||
| 1994 | choice. The variable @code{fortran-analyze-depth} specifies how many lines | ||
| 1995 | to consider (at the beginning of the file); if none of those lines | ||
| 1996 | indicates a style, then the variable @code{fortran-tab-mode-default} | ||
| 1997 | specifies the style. If it is @code{nil}, that specifies fixed format, and | ||
| 1998 | non-@code{nil} specifies tab format. | ||
| 1999 | |||
| 2000 | @node ForIndent Num | 2005 | @node ForIndent Num |
| 2001 | @subsubsection Line Numbers | 2006 | @subsubsection Line Numbers |
| 2002 | 2007 | ||
| @@ -2007,9 +2012,11 @@ through 4. (Columns always count from 0 in GNU Emacs.) | |||
| 2007 | @vindex fortran-line-number-indent | 2012 | @vindex fortran-line-number-indent |
| 2008 | Line numbers of four digits or less are normally indented one space. | 2013 | Line numbers of four digits or less are normally indented one space. |
| 2009 | The variable @code{fortran-line-number-indent} controls this; it | 2014 | The variable @code{fortran-line-number-indent} controls this; it |
| 2010 | specifies the maximum indentation a line number can have. Line numbers | 2015 | specifies the maximum indentation a line number can have. The default |
| 2011 | are right-justified to end in column 4 unless that would require more | 2016 | value of the variable is 1. Fortran mode tries to prevent line number |
| 2012 | than this maximum indentation. The default value of the variable is 1. | 2017 | digits passing column 4, reducing the indentation below the specified |
| 2018 | maximum if necessary. If @code{fortran-line-number-indent} has the | ||
| 2019 | value 5, line numbers are right-justified to end in column 4. | ||
| 2013 | 2020 | ||
| 2014 | @vindex fortran-electric-line-number | 2021 | @vindex fortran-electric-line-number |
| 2015 | Simply inserting a line number is enough to indent it according to | 2022 | Simply inserting a line number is enough to indent it according to |
| @@ -2062,54 +2069,59 @@ followed. | |||
| 2062 | Extra indentation within each level of @samp{do} statement (default 3). | 2069 | Extra indentation within each level of @samp{do} statement (default 3). |
| 2063 | 2070 | ||
| 2064 | @item fortran-if-indent | 2071 | @item fortran-if-indent |
| 2065 | Extra indentation within each level of @samp{if} statement (default 3). | 2072 | Extra indentation within each level of @samp{if}, @samp{select case}, or |
| 2066 | This value is also used for extra indentation within each level of the | 2073 | @samp{where} statements (default 3). |
| 2067 | Fortran 90 @samp{where} statement. | ||
| 2068 | 2074 | ||
| 2069 | @item fortran-structure-indent | 2075 | @item fortran-structure-indent |
| 2070 | Extra indentation within each level of @samp{structure}, @samp{union}, or | 2076 | Extra indentation within each level of @samp{structure}, @samp{union}, |
| 2071 | @samp{map} statements (default 3). | 2077 | @samp{map}, or @samp{interface} statements (default 3). |
| 2072 | 2078 | ||
| 2073 | @item fortran-continuation-indent | 2079 | @item fortran-continuation-indent |
| 2074 | Extra indentation for bodies of continuation lines (default 5). | 2080 | Extra indentation for bodies of continuation lines (default 5). |
| 2075 | 2081 | ||
| 2076 | @item fortran-check-all-num-for-matching-do | 2082 | @item fortran-check-all-num-for-matching-do |
| 2077 | If this is @code{nil}, indentation assumes that each @samp{do} statement | 2083 | In Fortran77, a numbered @samp{do} statement is ended by any statement |
| 2078 | ends on a @samp{continue} statement. Therefore, when computing | 2084 | with a matching line number. It is common (but not compulsory) to use a |
| 2079 | indentation for a statement other than @samp{continue}, it can save time | 2085 | @samp{continue} statement for this purpose. If this variable has a |
| 2080 | by not checking for a @samp{do} statement ending there. If this is | 2086 | non-@code{nil} value, indenting any numbered statement must check for a |
| 2081 | non-@code{nil}, indenting any numbered statement must check for a | 2087 | @samp{do} that ends there. If you always end @samp{do} statements with |
| 2082 | @samp{do} that ends there. The default is @code{nil}. | 2088 | a @samp{continue} line (or if you use the more modern @samp{enddo}), |
| 2089 | then you can speed up indentation by setting this variable to | ||
| 2090 | @code{nil}. The default is @code{nil}. | ||
| 2083 | 2091 | ||
| 2084 | @item fortran-blink-matching-if | 2092 | @item fortran-blink-matching-if |
| 2085 | If this is @code{t}, indenting an @samp{endif} statement moves the | 2093 | If this is @code{t}, indenting an @samp{endif} (or @samp{enddo} |
| 2086 | cursor momentarily to the matching @samp{if} statement to show where it | 2094 | statement moves the cursor momentarily to the matching @samp{if} (or |
| 2087 | is. The default is @code{nil}. | 2095 | @samp{do}) statement to show where it is. The default is @code{nil}. |
| 2088 | 2096 | ||
| 2089 | @item fortran-minimum-statement-indent-fixed | 2097 | @item fortran-minimum-statement-indent-fixed |
| 2090 | Minimum indentation for fortran statements when using fixed format | 2098 | Minimum indentation for Fortran statements when using fixed format |
| 2091 | continuation line style. Statement bodies are never indented less than | 2099 | continuation line style. Statement bodies are never indented less than |
| 2092 | this much. The default is 6. | 2100 | this much. The default is 6. |
| 2093 | 2101 | ||
| 2094 | @item fortran-minimum-statement-indent-tab | 2102 | @item fortran-minimum-statement-indent-tab |
| 2095 | Minimum indentation for fortran statements for tab format continuation line | 2103 | Minimum indentation for Fortran statements for tab format continuation line |
| 2096 | style. Statement bodies are never indented less than this much. The | 2104 | style. Statement bodies are never indented less than this much. The |
| 2097 | default is 8. | 2105 | default is 8. |
| 2098 | @end table | 2106 | @end table |
| 2099 | 2107 | ||
| 2108 | The variables controlling the indentation of comments are described in | ||
| 2109 | the following section. | ||
| 2110 | |||
| 2100 | @node Fortran Comments | 2111 | @node Fortran Comments |
| 2101 | @subsection Fortran Comments | 2112 | @subsection Fortran Comments |
| 2102 | 2113 | ||
| 2103 | The usual Emacs comment commands assume that a comment can follow a line | 2114 | The usual Emacs comment commands assume that a comment can follow a |
| 2104 | of code. In Fortran, the standard comment syntax requires an entire line | 2115 | line of code. In Fortran77, the standard comment syntax requires an |
| 2105 | to be just a comment. Therefore, Fortran mode replaces the standard Emacs | 2116 | entire line to be just a comment. Therefore, Fortran mode replaces the |
| 2106 | comment commands and defines some new variables. | 2117 | standard Emacs comment commands and defines some new variables. |
| 2107 | 2118 | ||
| 2119 | @vindex fortran-comment-line-start | ||
| 2108 | Fortran mode can also handle the Fortran90 comment syntax where comments | 2120 | Fortran mode can also handle the Fortran90 comment syntax where comments |
| 2109 | start with @samp{!} and can follow other text. Because only some Fortran77 | 2121 | start with @samp{!} and can follow other text. Because only some Fortran77 |
| 2110 | compilers accept this syntax, Fortran mode will not insert such comments | 2122 | compilers accept this syntax, Fortran mode will not insert such comments |
| 2111 | unless you have said in advance to do so. To do this, set the variable | 2123 | unless you have said in advance to do so. To do this, set the variable |
| 2112 | @code{comment-start} to @samp{"!"} (@pxref{Variables}). | 2124 | @code{fortran-comment-line-start} to @samp{"!"}. |
| 2113 | 2125 | ||
| 2114 | @table @kbd | 2126 | @table @kbd |
| 2115 | @item M-; | 2127 | @item M-; |
| @@ -2123,6 +2135,7 @@ Turn all lines of the region into comments, or (with argument) turn them back | |||
| 2123 | into real code (@code{fortran-comment-region}). | 2135 | into real code (@code{fortran-comment-region}). |
| 2124 | @end table | 2136 | @end table |
| 2125 | 2137 | ||
| 2138 | @findex fortran-indent-comment | ||
| 2126 | @kbd{M-;} in Fortran mode is redefined as the command | 2139 | @kbd{M-;} in Fortran mode is redefined as the command |
| 2127 | @code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this | 2140 | @code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this |
| 2128 | recognizes any kind of existing comment and aligns its text appropriately; | 2141 | recognizes any kind of existing comment and aligns its text appropriately; |
| @@ -2178,14 +2191,6 @@ never be indented at all, no matter what the value of | |||
| 2178 | lines are directives. Matching lines are never indented, and receive | 2191 | lines are directives. Matching lines are never indented, and receive |
| 2179 | distinctive font-locking. | 2192 | distinctive font-locking. |
| 2180 | 2193 | ||
| 2181 | @vindex comment-line-start | ||
| 2182 | @vindex comment-line-start-skip | ||
| 2183 | Fortran mode introduces two variables @code{comment-line-start} and | ||
| 2184 | @code{comment-line-start-skip}, which play for full-line comments the same | ||
| 2185 | roles played by @code{comment-start} and @code{comment-start-skip} for | ||
| 2186 | ordinary text-following comments. Normally these are set properly by | ||
| 2187 | Fortran mode, so you do not need to change them. | ||
| 2188 | |||
| 2189 | The normal Emacs comment command @kbd{C-x ;} has not been redefined. If | 2194 | The normal Emacs comment command @kbd{C-x ;} has not been redefined. If |
| 2190 | you use @samp{!} comments, this command can be used with them. Otherwise | 2195 | you use @samp{!} comments, this command can be used with them. Otherwise |
| 2191 | it is useless in Fortran mode. | 2196 | it is useless in Fortran mode. |
| @@ -2204,34 +2209,28 @@ of the name never conflict because in Lisp and in Emacs it is always | |||
| 2204 | clear from the context which one is meant. | 2209 | clear from the context which one is meant. |
| 2205 | 2210 | ||
| 2206 | @node Fortran Autofill | 2211 | @node Fortran Autofill |
| 2207 | @subsection Fortran Auto Fill Mode | 2212 | @subsection Auto Fill in Fortran Mode |
| 2208 | 2213 | ||
| 2209 | Fortran Auto Fill mode is a minor mode which automatically splits | 2214 | Fortran mode has specialized support for Auto Fill mode, which is a |
| 2210 | Fortran statements as you insert them when they become too wide. | 2215 | minor mode that automatically splits statements as you insert them when |
| 2211 | Splitting a statement involves making continuation lines using | 2216 | they become too wide. Splitting a statement involves making |
| 2212 | @code{fortran-continuation-string} (@pxref{ForIndent Cont}). This | 2217 | continuation lines using @code{fortran-continuation-string} |
| 2213 | splitting happens when you type @key{SPC}, @key{RET}, or @key{TAB}, and | 2218 | (@pxref{ForIndent Cont}). This splitting happens when you type |
| 2214 | also in the Fortran indentation commands. | 2219 | @key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran indentation |
| 2215 | 2220 | commands. You activate Auto Fill in Fortran mode in the normal way | |
| 2216 | @findex fortran-auto-fill-mode | 2221 | (@pxref{Auto Fill}). |
| 2217 | @kbd{M-x fortran-auto-fill-mode} toggles Fortran Auto Fill mode, | ||
| 2218 | which is a variant of normal Auto Fill mode (@pxref{Filling}) designed | ||
| 2219 | for Fortran programs. Fortran Auto Fill mode is a buffer-local minor | ||
| 2220 | mode (@pxref{Minor Modes}). When Fortran Auto Fill mode is in effect, | ||
| 2221 | the word @samp{Fill} appears in the mode line inside the parentheses. | ||
| 2222 | 2222 | ||
| 2223 | @vindex fortran-break-before-delimiters | 2223 | @vindex fortran-break-before-delimiters |
| 2224 | Fortran Auto Fill mode breaks lines at spaces or delimiters when the | 2224 | Auto Fill breaks lines at spaces or delimiters when the lines get |
| 2225 | lines get longer than the desired width (the value of @code{fill-column}). | 2225 | longer than the desired width (the value of @code{fill-column}). The |
| 2226 | The delimiters that Fortran Auto Fill mode may break at are @samp{,}, | 2226 | delimiters (besides whitespace) that Auto Fill can break at are |
| 2227 | @samp{'}, @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, and @samp{)}. | 2227 | @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>}, |
| 2228 | The line break comes after the delimiter if the variable | 2228 | and @samp{,}. The line break comes after the delimiter if the |
| 2229 | @code{fortran-break-before-delimiters} is @code{nil}. Otherwise (and by | 2229 | variable @code{fortran-break-before-delimiters} is @code{nil}. |
| 2230 | default), the break comes before the delimiter. | 2230 | Otherwise (and by default), the break comes before the delimiter. |
| 2231 | 2231 | ||
| 2232 | To enable this mode permanently, add a hook function to | 2232 | To enable Auto Fill in all Fortran buffers, add |
| 2233 | @code{fortran-mode-hook} to execute @code{(fortran-auto-fill-mode 1)}. | 2233 | @code{turn-on-auto-fill} to @code{fortran-mode-hook}. @xref{Hooks}. |
| 2234 | @xref{Hooks}. | ||
| 2235 | 2234 | ||
| 2236 | @node Fortran Columns | 2235 | @node Fortran Columns |
| 2237 | @subsection Checking Columns in Fortran | 2236 | @subsection Checking Columns in Fortran |
| @@ -2280,7 +2279,7 @@ display. | |||
| 2280 | @findex fortran-window-create-momentarily | 2279 | @findex fortran-window-create-momentarily |
| 2281 | @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily | 2280 | @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily |
| 2282 | splits the current window horizontally, making a window 72 columns | 2281 | splits the current window horizontally, making a window 72 columns |
| 2283 | wide, so you can see which lines that is too long. Type a space to | 2282 | wide, so you can see any lines that are too long. Type a space to |
| 2284 | restore the normal width. | 2283 | restore the normal width. |
| 2285 | 2284 | ||
| 2286 | @kindex C-u C-c C-w @r{(Fortran mode)} | 2285 | @kindex C-u C-c C-w @r{(Fortran mode)} |
diff --git a/man/reftex.texi b/man/reftex.texi index 7de16dcb0e1..0d3c5bdc32e 100644 --- a/man/reftex.texi +++ b/man/reftex.texi | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | @c Version and Contact Info | 9 | @c Version and Contact Info |
| 10 | @set VERSION 4.24 | 10 | @set VERSION 4.24 |
| 11 | @set EDITION 4.24 | 11 | @set EDITION 4.24 |
| 12 | @set DATE August 2004 | 12 | @set DATE March 2005 |
| 13 | @set AUCTEXSITE @uref{http://www.nongnu.org/auctex/,AUCTeX distribution site} | 13 | @set AUCTEXSITE @uref{http://www.nongnu.org/auctex/,AUCTeX distribution site} |
| 14 | @set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/,maintainers webpage} | 14 | @set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/,maintainers webpage} |
| 15 | @set MAINTAINER Carsten Dominik | 15 | @set MAINTAINER Carsten Dominik |
| @@ -25,7 +25,8 @@ citations and indices for LaTeX documents with Emacs. | |||
| 25 | This is edition @value{EDITION} of the @b{Ref@TeX{}} User Manual for | 25 | This is edition @value{EDITION} of the @b{Ref@TeX{}} User Manual for |
| 26 | @b{Ref@TeX{}} @value{VERSION} | 26 | @b{Ref@TeX{}} @value{VERSION} |
| 27 | 27 | ||
| 28 | Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. | 28 | Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2005 |
| 29 | Free Software Foundation, Inc. | ||
| 29 | 30 | ||
| 30 | @quotation | 31 | @quotation |
| 31 | Permission is granted to copy, distribute and/or modify this document | 32 | Permission is granted to copy, distribute and/or modify this document |
| @@ -734,9 +735,9 @@ indicating the type of the label and a unique mark. @b{Ref@TeX{}} has | |||
| 734 | A label can be derived from context. This means, @b{Ref@TeX{}} takes | 735 | A label can be derived from context. This means, @b{Ref@TeX{}} takes |
| 735 | the context of the label definition and constructs a label from | 736 | the context of the label definition and constructs a label from |
| 736 | that@footnote{Note that the context may contain constructs which are | 737 | that@footnote{Note that the context may contain constructs which are |
| 737 | illegal in labels. @b{Ref@TeX{}} will therefore strip the accent from | 738 | invalid in labels. @b{Ref@TeX{}} will therefore strip the accent from |
| 738 | accented Latin-1 characters and remove everything else which is not | 739 | accented Latin-1 characters and remove everything else which is not |
| 739 | legal in labels. This mechanism is safe, but may not be satisfactory | 740 | valid in labels. This mechanism is safe, but may not be satisfactory |
| 740 | for non-western languages. Check the following variables if you need to | 741 | for non-western languages. Check the following variables if you need to |
| 741 | change things: @code{reftex-translate-to-ascii-function}, | 742 | change things: @code{reftex-translate-to-ascii-function}, |
| 742 | @code{reftex-derive-label-parameters}, @code{reftex-label-illegal-re}, | 743 | @code{reftex-derive-label-parameters}, @code{reftex-label-illegal-re}, |
| @@ -2832,7 +2833,7 @@ to be changed for other languages. See the variables | |||
| 2832 | @vindex reftex-translate-to-ascii-function | 2833 | @vindex reftex-translate-to-ascii-function |
| 2833 | @vindex reftex-label-illegal-re | 2834 | @vindex reftex-label-illegal-re |
| 2834 | Also, when a label is derived from context, @b{Ref@TeX{}} clears the | 2835 | Also, when a label is derived from context, @b{Ref@TeX{}} clears the |
| 2835 | context string from non-ASCII characters in order to make a legal label. | 2836 | context string from non-ASCII characters in order to make a valid label. |
| 2836 | If there should ever be a version of @TeX{} which allows extended | 2837 | If there should ever be a version of @TeX{} which allows extended |
| 2837 | characters @emph{in labels}, then we will have to look at the | 2838 | characters @emph{in labels}, then we will have to look at the |
| 2838 | variables @code{reftex-translate-to-ascii-function} and | 2839 | variables @code{reftex-translate-to-ascii-function} and |
| @@ -4119,7 +4120,7 @@ Flags governing label insertion. The value has the form | |||
| 4119 | 4120 | ||
| 4120 | If @var{derive}is @code{t}, @b{Ref@TeX{}} will try to derive a sensible | 4121 | If @var{derive}is @code{t}, @b{Ref@TeX{}} will try to derive a sensible |
| 4121 | label from context. A section label for example will be derived from | 4122 | label from context. A section label for example will be derived from |
| 4122 | the section heading. The conversion of the context to a legal label is | 4123 | the section heading. The conversion of the context to a valid label is |
| 4123 | governed by the specifications given in | 4124 | governed by the specifications given in |
| 4124 | @code{reftex-derive-label-parameters}. If @var{derive} is @code{nil}, | 4125 | @code{reftex-derive-label-parameters}. If @var{derive} is @code{nil}, |
| 4125 | the default label will consist of the prefix and a unique number, like | 4126 | the default label will consist of the prefix and a unique number, like |
| @@ -4165,7 +4166,7 @@ buffer. | |||
| 4165 | @end deffn | 4166 | @end deffn |
| 4166 | 4167 | ||
| 4167 | @deffn Hook reftex-string-to-label-function | 4168 | @deffn Hook reftex-string-to-label-function |
| 4168 | Function to turn an arbitrary string into a legal label. | 4169 | Function to turn an arbitrary string into a valid label. |
| 4169 | @b{Ref@TeX{}}'s default function uses the variable | 4170 | @b{Ref@TeX{}}'s default function uses the variable |
| 4170 | @code{reftex-derive-label-parameters}. | 4171 | @code{reftex-derive-label-parameters}. |
| 4171 | @end deffn | 4172 | @end deffn |
| @@ -4173,7 +4174,7 @@ Function to turn an arbitrary string into a legal label. | |||
| 4173 | @deffn Hook reftex-translate-to-ascii-function | 4174 | @deffn Hook reftex-translate-to-ascii-function |
| 4174 | Filter function which will process a context string before it is used to | 4175 | Filter function which will process a context string before it is used to |
| 4175 | derive a label from it. The intended application is to convert ISO or | 4176 | derive a label from it. The intended application is to convert ISO or |
| 4176 | Mule characters into something legal in labels. The default function | 4177 | Mule characters into something valid in labels. The default function |
| 4177 | @code{reftex-latin1-to-ascii} removes the accents from Latin-1 | 4178 | @code{reftex-latin1-to-ascii} removes the accents from Latin-1 |
| 4178 | characters. X-Symbol (>=2.6) sets this variable to the much more | 4179 | characters. X-Symbol (>=2.6) sets this variable to the much more |
| 4179 | general @code{x-symbol-translate-to-ascii}. | 4180 | general @code{x-symbol-translate-to-ascii}. |
| @@ -4187,9 +4188,9 @@ list of the following items: | |||
| 4187 | Number of words to use. | 4188 | Number of words to use. |
| 4188 | @item @var{maxchar} | 4189 | @item @var{maxchar} |
| 4189 | Maximum number of characters in a label string. | 4190 | Maximum number of characters in a label string. |
| 4190 | @item @var{illegal} | 4191 | @item @var{invalid} |
| 4191 | @code{nil}: Throw away any words containing characters illegal in labels.@* | 4192 | @code{nil}: Throw away any words containing characters invalid in labels.@* |
| 4192 | @code{t}: Throw away only the illegal characters, not the whole word. | 4193 | @code{t}: Throw away only the invalid characters, not the whole word. |
| 4193 | @item @var{abbrev} | 4194 | @item @var{abbrev} |
| 4194 | @code{nil}: Never abbreviate words.@* | 4195 | @code{nil}: Never abbreviate words.@* |
| 4195 | @code{t}: Always abbreviate words (see @code{reftex-abbrev-parameters}).@* | 4196 | @code{t}: Always abbreviate words (see @code{reftex-abbrev-parameters}).@* |
| @@ -4204,7 +4205,7 @@ List of words which should not be part of labels. | |||
| 4204 | @end defopt | 4205 | @end defopt |
| 4205 | 4206 | ||
| 4206 | @defopt reftex-label-illegal-re | 4207 | @defopt reftex-label-illegal-re |
| 4207 | Regexp matching characters not legal in labels. | 4208 | Regexp matching characters not valid in labels. |
| 4208 | @end defopt | 4209 | @end defopt |
| 4209 | 4210 | ||
| 4210 | @defopt reftex-abbrev-parameters | 4211 | @defopt reftex-abbrev-parameters |
| @@ -4557,7 +4558,7 @@ indexing from the phrase buffer. | |||
| 4557 | 4558 | ||
| 4558 | The final entry may also be a symbol. It must have an association in | 4559 | The final entry may also be a symbol. It must have an association in |
| 4559 | the variable @code{reftex-index-macros-builtin} to specify the main | 4560 | the variable @code{reftex-index-macros-builtin} to specify the main |
| 4560 | indexing package you are using. Legal values are currently | 4561 | indexing package you are using. Valid values are currently |
| 4561 | @example | 4562 | @example |
| 4562 | default @r{The LaTeX default - unnecessary to specify this one} | 4563 | default @r{The LaTeX default - unnecessary to specify this one} |
| 4563 | multind @r{The multind.sty package} | 4564 | multind @r{The multind.sty package} |
| @@ -4589,7 +4590,7 @@ Default index tag. When working with multiple indexes, RefTeX queries | |||
| 4589 | for an index tag when creating index entries or displaying a specific | 4590 | for an index tag when creating index entries or displaying a specific |
| 4590 | index. This variable controls the default offered for these queries. | 4591 | index. This variable controls the default offered for these queries. |
| 4591 | The default can be selected with @key{RET} during selection or | 4592 | The default can be selected with @key{RET} during selection or |
| 4592 | completion. Legal values of this variable are: | 4593 | completion. Valid values of this variable are: |
| 4593 | @example | 4594 | @example |
| 4594 | nil @r{Do not provide a default index} | 4595 | nil @r{Do not provide a default index} |
| 4595 | "tag" @r{The default index tag given as a string, e.g. "idx"} | 4596 | "tag" @r{The default index tag given as a string, e.g. "idx"} |
| @@ -4829,9 +4830,9 @@ This is a list of items, each item is like: | |||
| 4829 | @example | 4830 | @example |
| 4830 | @var{type}: @r{File type like @code{"bib"} or @code{"tex"}.} | 4831 | @var{type}: @r{File type like @code{"bib"} or @code{"tex"}.} |
| 4831 | @var{def-ext}: @r{The default extension for that file type, like @code{".tex"} or @code{".bib"}.} | 4832 | @var{def-ext}: @r{The default extension for that file type, like @code{".tex"} or @code{".bib"}.} |
| 4832 | @var{other-ext}: @r{Any number of other legal extensions for this file type.} | 4833 | @var{other-ext}: @r{Any number of other valid extensions for this file type.} |
| 4833 | @end example | 4834 | @end example |
| 4834 | When a files is searched and it does not have any of the legal extensions, | 4835 | When a files is searched and it does not have any of the valid extensions, |
| 4835 | we try the default extension first, and then the naked file name. | 4836 | we try the default extension first, and then the naked file name. |
| 4836 | @end defopt | 4837 | @end defopt |
| 4837 | 4838 | ||
| @@ -5456,7 +5457,7 @@ lowercase labels (default @code{t}). | |||
| 5456 | All @file{.rel} files have a final newline to avoid queries. | 5457 | All @file{.rel} files have a final newline to avoid queries. |
| 5457 | @item | 5458 | @item |
| 5458 | Single byte representations of accented European letters (ISO-8859-1) | 5459 | Single byte representations of accented European letters (ISO-8859-1) |
| 5459 | are now legal in labels. | 5460 | are now valid in labels. |
| 5460 | @end itemize | 5461 | @end itemize |
| 5461 | 5462 | ||
| 5462 | @noindent @b{Version 3.33} | 5463 | @noindent @b{Version 3.33} |
diff --git a/man/text.texi b/man/text.texi index 327a03116f8..958e18db8d5 100644 --- a/man/text.texi +++ b/man/text.texi | |||
| @@ -403,13 +403,13 @@ Text}). | |||
| 403 | * Fill Prefix:: Filling paragraphs that are indented | 403 | * Fill Prefix:: Filling paragraphs that are indented |
| 404 | or in a comment, etc. | 404 | or in a comment, etc. |
| 405 | * Adaptive Fill:: How Emacs can determine the fill prefix automatically. | 405 | * Adaptive Fill:: How Emacs can determine the fill prefix automatically. |
| 406 | * Longlines:: Editing text with very long lines. | ||
| 406 | @end menu | 407 | @end menu |
| 407 | 408 | ||
| 408 | @node Auto Fill | 409 | @node Auto Fill |
| 409 | @subsection Auto Fill Mode | 410 | @subsection Auto Fill Mode |
| 410 | @cindex Auto Fill mode | 411 | @cindex Auto Fill mode |
| 411 | @cindex mode, Auto Fill | 412 | @cindex mode, Auto Fill |
| 412 | @cindex word wrap | ||
| 413 | 413 | ||
| 414 | @dfn{Auto Fill} mode is a minor mode in which lines are broken | 414 | @dfn{Auto Fill} mode is a minor mode in which lines are broken |
| 415 | automatically when they become too wide. Breaking happens only when | 415 | automatically when they become too wide. Breaking happens only when |
| @@ -474,16 +474,19 @@ you type or modify them in other ways. It provides an effect similar | |||
| 474 | to typical word processor behavior. This works by running a | 474 | to typical word processor behavior. This works by running a |
| 475 | paragraph-filling command at suitable times. | 475 | paragraph-filling command at suitable times. |
| 476 | 476 | ||
| 477 | When you are typing text, only characters which normally trigger | ||
| 478 | auto filling, like the space character, will trigger refilling. This | ||
| 479 | is to avoid making it too slow. Apart from self-inserting characters, | ||
| 480 | other commands which modify the text cause refilling. | ||
| 481 | |||
| 482 | The current implementation is preliminary and probably not robust. | ||
| 483 | We expect to improve on it. | ||
| 484 | |||
| 485 | To toggle the use of Refill mode in the current buffer, type | 477 | To toggle the use of Refill mode in the current buffer, type |
| 486 | @kbd{M-x refill-mode}. | 478 | @kbd{M-x refill-mode}. When you are typing text, only characters |
| 479 | which normally trigger auto filling, like the space character, will | ||
| 480 | trigger refilling. This is to avoid making it too slow. Apart from | ||
| 481 | self-inserting characters, other commands which modify the text cause | ||
| 482 | refilling. | ||
| 483 | |||
| 484 | The current implementation is preliminary and not robust. You can | ||
| 485 | get better ``line wrapping'' behavior using Longlines mode. | ||
| 486 | @xref{Longlines}. However, Longlines mode has an important | ||
| 487 | side-effect: the newlines that it inserts for you are not saved to | ||
| 488 | disk, so the files that you make with Longlines mode will appear to be | ||
| 489 | completely unfilled if you edit them without Longlines mode. | ||
| 487 | 490 | ||
| 488 | @node Fill Commands | 491 | @node Fill Commands |
| 489 | @subsection Explicit Fill Commands | 492 | @subsection Explicit Fill Commands |
| @@ -745,6 +748,56 @@ line, and it should return the appropriate fill prefix based on that | |||
| 745 | line. If it returns @code{nil}, that means it sees no fill prefix in | 748 | line. If it returns @code{nil}, that means it sees no fill prefix in |
| 746 | that line. | 749 | that line. |
| 747 | 750 | ||
| 751 | @node Longlines | ||
| 752 | @subsection Long Lines Mode | ||
| 753 | @cindex refilling text, word processor style | ||
| 754 | @cindex modes, Long Lines | ||
| 755 | @cindex word wrap | ||
| 756 | @cindex Long Lines minor mode | ||
| 757 | |||
| 758 | Long Lines mode is a minor mode for @dfn{word wrapping}; it lets you | ||
| 759 | edit ``unfilled'' text files, which Emacs would normally display as a | ||
| 760 | bunch of extremely long lines. Many text editors, such as those built | ||
| 761 | into many web browsers, normally do word wrapping. | ||
| 762 | |||
| 763 | @findex longlines-mode | ||
| 764 | To enable Long Lines mode, type @kbd{M-x longlines-mode}. If the | ||
| 765 | text is full of long lines, this will ``wrap'' them | ||
| 766 | immediately---i.e., break up to fit in the window. As you edit the | ||
| 767 | text, Long Lines mode automatically re-wraps lines by inserting or | ||
| 768 | deleting @dfn{soft newlines} as necessary (@pxref{Hard and Soft | ||
| 769 | Newlines}.) These soft newlines won't show up when you save the | ||
| 770 | buffer into a file, or when you copy the text into the kill ring, | ||
| 771 | clipboard, or a register. | ||
| 772 | |||
| 773 | @findex longlines-auto-wrap | ||
| 774 | Word wrapping is @emph{not} the same as ordinary filling | ||
| 775 | (@pxref{Fill Commands}). It does not contract multiple spaces into a | ||
| 776 | single space, recognize fill prefixes (@pxref{Fill Prefix}), or | ||
| 777 | perform adaptive filling (@pxref{Adaptive Fill}). The reason for this | ||
| 778 | is that a wrapped line is still, conceptually, a single line. Each | ||
| 779 | soft newline is equivalent to exactly one space in that long line, and | ||
| 780 | vice versa. However, you can still call filling functions such as | ||
| 781 | @kbd{M-q}, and these will work as expected, inserting soft newlines | ||
| 782 | that won't show up on disk or when the text is copied. You can even | ||
| 783 | rely entirely on the normal fill commands by turning off automatic | ||
| 784 | line wrapping, with @kbd{C-u M-x longlines-auto-wrap}. To turn | ||
| 785 | automatic line wrapping back on, type @kbd{M-x longlines-auto-wrap}. | ||
| 786 | |||
| 787 | @findex longlines-show-hard-newlines | ||
| 788 | Whenever you type @kbd{RET}, you are inserting a hard newline. If | ||
| 789 | you want to see where all the hard newlines are, type @kbd{M-x | ||
| 790 | longlines-show-hard-newlines}. This will mark each hard newline with | ||
| 791 | a special symbol. The same command with a prefix argument turns this | ||
| 792 | display off. | ||
| 793 | |||
| 794 | Long Lines mode does not change normal text files that are already | ||
| 795 | filled, since the existing newlines are considered hard newlines. | ||
| 796 | Before Long Lines can do anything, you need to transform each | ||
| 797 | paragraph into a long line. One way is to set @code{fill-column} to a | ||
| 798 | large number (e.g., @kbd{C-u 9999 C-x f}), re-fill all the paragraphs, | ||
| 799 | and then set @code{fill-column} back to its original value. | ||
| 800 | |||
| 748 | @node Case | 801 | @node Case |
| 749 | @section Case Conversion Commands | 802 | @section Case Conversion Commands |
| 750 | @cindex case conversion | 803 | @cindex case conversion |
| @@ -1053,30 +1106,35 @@ Most of them fall into pairs of opposites. They are not undoable; instead, | |||
| 1053 | you can undo right past them. Making lines visible or invisible is simply | 1106 | you can undo right past them. Making lines visible or invisible is simply |
| 1054 | not recorded by the undo mechanism. | 1107 | not recorded by the undo mechanism. |
| 1055 | 1108 | ||
| 1109 | Many of these commands act on the ``current'' heading line. If | ||
| 1110 | point is on a heading line, that is the current heading line; if point | ||
| 1111 | is on a body line, the current heading line is the nearest preceding | ||
| 1112 | header line. | ||
| 1113 | |||
| 1056 | @table @kbd | 1114 | @table @kbd |
| 1057 | @item C-c C-t | 1115 | @item C-c C-c |
| 1058 | Make all body lines in the buffer invisible (@code{hide-body}). | 1116 | Make the current heading line's body invisible (@code{hide-entry}). |
| 1059 | @item C-c C-a | 1117 | @item C-c C-e |
| 1060 | Make all lines in the buffer visible (@code{show-all}). | 1118 | Make the current heading line's body visible (@code{show-entry}). |
| 1061 | @item C-c C-d | 1119 | @item C-c C-d |
| 1062 | Make everything under this heading invisible, not including this | 1120 | Make everything under the current heading invisible, not including the |
| 1063 | heading itself (@code{hide-subtree}). | 1121 | heading itself (@code{hide-subtree}). |
| 1064 | @item C-c C-s | 1122 | @item C-c C-s |
| 1065 | Make everything under this heading visible, including body, | 1123 | Make everything under the current heading visible, including body, |
| 1066 | subheadings, and their bodies (@code{show-subtree}). | 1124 | subheadings, and their bodies (@code{show-subtree}). |
| 1067 | @item C-c C-l | 1125 | @item C-c C-l |
| 1068 | Make the body of this heading line, and of all its subheadings, | 1126 | Make the body of the current heading line, and of all its subheadings, |
| 1069 | invisible (@code{hide-leaves}). | 1127 | invisible (@code{hide-leaves}). |
| 1070 | @item C-c C-k | 1128 | @item C-c C-k |
| 1071 | Make all subheadings of this heading line, at all levels, visible | 1129 | Make all subheadings of the current heading line, at all levels, |
| 1072 | (@code{show-branches}). | 1130 | visible (@code{show-branches}). |
| 1073 | @item C-c C-i | 1131 | @item C-c C-i |
| 1074 | Make immediate subheadings (one level down) of this heading line | 1132 | Make immediate subheadings (one level down) of the current heading |
| 1075 | visible (@code{show-children}). | 1133 | line visible (@code{show-children}). |
| 1076 | @item C-c C-c | 1134 | @item C-c C-t |
| 1077 | Make this heading line's body invisible (@code{hide-entry}). | 1135 | Make all body lines in the buffer invisible (@code{hide-body}). |
| 1078 | @item C-c C-e | 1136 | @item C-c C-a |
| 1079 | Make this heading line's body visible (@code{show-entry}). | 1137 | Make all lines in the buffer visible (@code{show-all}). |
| 1080 | @item C-c C-q | 1138 | @item C-c C-q |
| 1081 | Hide everything except the top @var{n} levels of heading lines | 1139 | Hide everything except the top @var{n} levels of heading lines |
| 1082 | (@code{hide-sublevels}). | 1140 | (@code{hide-sublevels}). |
| @@ -1091,22 +1149,21 @@ the headings leading up from there to the top level of the outline | |||
| 1091 | @kindex C-c C-c @r{(Outline mode)} | 1149 | @kindex C-c C-c @r{(Outline mode)} |
| 1092 | @kindex C-c C-e @r{(Outline mode)} | 1150 | @kindex C-c C-e @r{(Outline mode)} |
| 1093 | Two commands that are exact opposites are @kbd{C-c C-c} | 1151 | Two commands that are exact opposites are @kbd{C-c C-c} |
| 1094 | (@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}). They are | 1152 | (@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}). They apply |
| 1095 | used with point on a heading line, and apply only to the body lines of | 1153 | to the body lines directly following the current heading line. |
| 1096 | that heading. Subheadings and their bodies are not affected. | 1154 | Subheadings and their bodies are not affected. |
| 1097 | 1155 | ||
| 1098 | @findex hide-subtree | 1156 | @findex hide-subtree |
| 1099 | @findex show-subtree | 1157 | @findex show-subtree |
| 1100 | @kindex C-c C-s @r{(Outline mode)} | 1158 | @kindex C-c C-s @r{(Outline mode)} |
| 1101 | @kindex C-c C-d @r{(Outline mode)} | 1159 | @kindex C-c C-d @r{(Outline mode)} |
| 1102 | @cindex subtree (Outline mode) | 1160 | @cindex subtree (Outline mode) |
| 1103 | Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree}) and | 1161 | Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree}) |
| 1104 | @kbd{C-c C-s} (@code{show-subtree}). Both expect to be used when point is | 1162 | and @kbd{C-c C-s} (@code{show-subtree}). Both apply to the current |
| 1105 | on a heading line, and both apply to all the lines of that heading's | 1163 | heading line's @dfn{subtree}: its body, all its subheadings, both |
| 1106 | @dfn{subtree}: its body, all its subheadings, both direct and indirect, and | 1164 | direct and indirect, and all of their bodies. In other words, the |
| 1107 | all of their bodies. In other words, the subtree contains everything | 1165 | subtree contains everything following the current heading line, up to |
| 1108 | following this heading line, up to and not including the next heading of | 1166 | and not including the next heading of the same or higher rank.@refill |
| 1109 | the same or higher rank.@refill | ||
| 1110 | 1167 | ||
| 1111 | @findex hide-leaves | 1168 | @findex hide-leaves |
| 1112 | @findex show-branches | 1169 | @findex show-branches |
| @@ -1131,9 +1188,12 @@ they were invisible.@refill | |||
| 1131 | @kindex C-c C-a @r{(Outline mode)} | 1188 | @kindex C-c C-a @r{(Outline mode)} |
| 1132 | Two commands have a blanket effect on the whole file. @kbd{C-c C-t} | 1189 | Two commands have a blanket effect on the whole file. @kbd{C-c C-t} |
| 1133 | (@code{hide-body}) makes all body lines invisible, so that you see just | 1190 | (@code{hide-body}) makes all body lines invisible, so that you see just |
| 1134 | the outline structure. @kbd{C-c C-a} (@code{show-all}) makes all lines | 1191 | the outline structure (as a special exception, it will not hide lines |
| 1135 | visible. These commands can be thought of as a pair of opposites even | 1192 | at the top of the file, preceding the first header line, even though |
| 1136 | though @kbd{C-c C-a} applies to more than just body lines. | 1193 | these are technically body lines). @kbd{C-c C-a} (@code{show-all}) |
| 1194 | makes all lines visible. These commands can be thought of as a pair | ||
| 1195 | of opposites even though @kbd{C-c C-a} applies to more than just body | ||
| 1196 | lines. | ||
| 1137 | 1197 | ||
| 1138 | @findex hide-sublevels | 1198 | @findex hide-sublevels |
| 1139 | @kindex C-c C-q @r{(Outline mode)} | 1199 | @kindex C-c C-q @r{(Outline mode)} |
| @@ -1284,39 +1344,45 @@ automatically by putting this in your @file{.emacs} file: | |||
| 1284 | @cindex @TeX{} mode | 1344 | @cindex @TeX{} mode |
| 1285 | @cindex La@TeX{} mode | 1345 | @cindex La@TeX{} mode |
| 1286 | @cindex Sli@TeX{} mode | 1346 | @cindex Sli@TeX{} mode |
| 1347 | @cindex Doc@TeX{} mode | ||
| 1287 | @cindex mode, @TeX{} | 1348 | @cindex mode, @TeX{} |
| 1288 | @cindex mode, La@TeX{} | 1349 | @cindex mode, La@TeX{} |
| 1289 | @cindex mode, Sli@TeX{} | 1350 | @cindex mode, Sli@TeX{} |
| 1351 | @cindex mode, Doc@TeX{} | ||
| 1290 | @findex tex-mode | 1352 | @findex tex-mode |
| 1291 | @findex plain-tex-mode | 1353 | @findex plain-tex-mode |
| 1292 | @findex latex-mode | 1354 | @findex latex-mode |
| 1293 | @findex slitex-mode | 1355 | @findex slitex-mode |
| 1356 | @findex doctex-mode | ||
| 1294 | 1357 | ||
| 1295 | @TeX{} is a powerful text formatter written by Donald Knuth; it is also | 1358 | @TeX{} is a powerful text formatter written by Donald Knuth; it is also |
| 1296 | free, like GNU Emacs. La@TeX{} is a simplified input format for @TeX{}, | 1359 | free, like GNU Emacs. La@TeX{} is a simplified input format for @TeX{}, |
| 1297 | implemented by @TeX{} macros; it comes with @TeX{}. Sli@TeX{} is a special | 1360 | implemented by @TeX{} macros; it comes with @TeX{}. Sli@TeX{} is a special |
| 1298 | form of La@TeX{}.@footnote{Sli@TeX{} is obsoleted by the @samp{slides} | 1361 | form of La@TeX{}.@footnote{Sli@TeX{} is obsoleted by the @samp{slides} |
| 1299 | document class in recent La@TeX{} versions.} | 1362 | document class in recent La@TeX{} versions.} Doc@TeX{} (@file{.dtx}) |
| 1363 | is a special file format in which the La@TeX{} sources are written, | ||
| 1364 | combining sources with documentation. | ||
| 1300 | 1365 | ||
| 1301 | Emacs has a special @TeX{} mode for editing @TeX{} input files. | 1366 | Emacs has a special @TeX{} mode for editing @TeX{} input files. |
| 1302 | It provides facilities for checking the balance of delimiters and for | 1367 | It provides facilities for checking the balance of delimiters and for |
| 1303 | invoking @TeX{} on all or part of the file. | 1368 | invoking @TeX{} on all or part of the file. |
| 1304 | 1369 | ||
| 1305 | @vindex tex-default-mode | 1370 | @vindex tex-default-mode |
| 1306 | @TeX{} mode has three variants, Plain @TeX{} mode, La@TeX{} mode, and | 1371 | @TeX{} mode has four variants: Plain @TeX{} mode, La@TeX{} mode, |
| 1307 | Sli@TeX{} mode (these three distinct major modes differ only slightly). | 1372 | Sli@TeX{} mode, and Doc@TeX{} mode (these distinct major modes differ |
| 1308 | They are designed for editing the three different formats. The command | 1373 | only slightly). They are designed for editing the four different |
| 1309 | @kbd{M-x tex-mode} looks at the contents of the buffer to determine | 1374 | formats. The command @kbd{M-x tex-mode} looks at the contents of the |
| 1310 | whether the contents appear to be either La@TeX{} input or Sli@TeX{} | 1375 | buffer to determine whether the contents appear to be either La@TeX{} |
| 1311 | input; if so, it selects the appropriate mode. If the file contents do | 1376 | input, Sli@TeX{}, or Doc@TeX{} input; if so, it selects the |
| 1312 | not appear to be La@TeX{} or Sli@TeX{}, it selects Plain @TeX{} mode. | 1377 | appropriate mode. If the file contents do not appear to be La@TeX{}, |
| 1313 | If the contents are insufficient to determine this, the variable | 1378 | Sli@TeX{} or Doc@TeX{}, it selects Plain @TeX{} mode. If the contents |
| 1379 | are insufficient to determine this, the variable | ||
| 1314 | @code{tex-default-mode} controls which mode is used. | 1380 | @code{tex-default-mode} controls which mode is used. |
| 1315 | 1381 | ||
| 1316 | When @kbd{M-x tex-mode} does not guess right, you can use the commands | 1382 | When @kbd{M-x tex-mode} does not guess right, you can use the commands |
| 1317 | @kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, and @kbd{M-x | 1383 | @kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, @kbd{M-x slitex-mode}, |
| 1318 | slitex-mode} to select explicitly the particular variants of @TeX{} | 1384 | and @kbd{doctex-mode} to select explicitly the particular variants of |
| 1319 | mode. | 1385 | @TeX{} mode. |
| 1320 | 1386 | ||
| 1321 | @menu | 1387 | @menu |
| 1322 | * Editing: TeX Editing. Special commands for editing in TeX mode. | 1388 | * Editing: TeX Editing. Special commands for editing in TeX mode. |
diff --git a/man/xresources.texi b/man/xresources.texi index b1b7d230660..aaf7262d060 100644 --- a/man/xresources.texi +++ b/man/xresources.texi | |||
| @@ -7,10 +7,14 @@ | |||
| 7 | You can customize some X-related aspects of Emacs behavior using X | 7 | You can customize some X-related aspects of Emacs behavior using X |
| 8 | resources, as is usual for programs that use X. On MS-Windows, you | 8 | resources, as is usual for programs that use X. On MS-Windows, you |
| 9 | can customize some of the same aspects using the system registry. | 9 | can customize some of the same aspects using the system registry. |
| 10 | @xref{MS-Windows Registry}. X resources are the only way to customize | 10 | @xref{MS-Windows Registry}. |
| 11 | tooltip windows and LessTif menus, since the libraries that implement | 11 | |
| 12 | them don't provide for customization through Emacs. This appendix | 12 | When Emacs is built using an `X toolkit', such as Lucid or LessTif, |
| 13 | describes the X resources that Emacs recognizes and how to use them. | 13 | you need to use X resources to customize the appearance of the |
| 14 | widgets, including the menu-bar, scroll-bar, and dialog boxes. This | ||
| 15 | is because the libraries that implement these don't provide for | ||
| 16 | customization through Emacs. GTK+ widgets use a separate system of | ||
| 17 | `GTK resources', which we will also describe. | ||
| 14 | 18 | ||
| 15 | @menu | 19 | @menu |
| 16 | * Resources:: Using X resources with Emacs (in general). | 20 | * Resources:: Using X resources with Emacs (in general). |
| @@ -48,7 +52,8 @@ Registry, under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs} | |||
| 48 | and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. | 52 | and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. |
| 49 | The menu and scrollbars are native widgets on MS-Windows, so they are | 53 | The menu and scrollbars are native widgets on MS-Windows, so they are |
| 50 | only customizable via the system-wide settings in the Display Control | 54 | only customizable via the system-wide settings in the Display Control |
| 51 | Panel. | 55 | Panel. You can also set resources using the @samp{-xrm} command line |
| 56 | option (see below.) | ||
| 52 | 57 | ||
| 53 | Programs define named resources with particular meanings. They also | 58 | Programs define named resources with particular meanings. They also |
| 54 | define how to group resources into named classes. For instance, in | 59 | define how to group resources into named classes. For instance, in |
| @@ -58,6 +63,11 @@ of the external border. Both of these resources are part of the | |||
| 58 | @samp{BorderWidth} class. Case distinctions are significant in these | 63 | @samp{BorderWidth} class. Case distinctions are significant in these |
| 59 | names. | 64 | names. |
| 60 | 65 | ||
| 66 | Every resource definition is associated with a specific program | ||
| 67 | name---the name of the executable file that you ran. For Emacs, that | ||
| 68 | is normally @samp{emacs}. To specify a definition for all instances | ||
| 69 | of Emacs, regardless of their names, use @samp{Emacs}. | ||
| 70 | |||
| 61 | In @file{~/.Xdefaults}, you can specify a value for a single resource | 71 | In @file{~/.Xdefaults}, you can specify a value for a single resource |
| 62 | on one line, like this: | 72 | on one line, like this: |
| 63 | 73 | ||
| @@ -86,11 +96,8 @@ emacs.borderWidth: 4 | |||
| 86 | 96 | ||
| 87 | The order in which the lines appear in the file does not matter. | 97 | The order in which the lines appear in the file does not matter. |
| 88 | Also, command-line options always override the X resources file. | 98 | Also, command-line options always override the X resources file. |
| 89 | 99 | Here is a list of X command-line options and their corresponding | |
| 90 | The string @samp{emacs} in the examples above is also a resource | 100 | resource names. |
| 91 | name. It actually represents the name of the executable file that you | ||
| 92 | invoke to run Emacs. If Emacs is installed under a different name, it | ||
| 93 | looks for resources under that name instead of @samp{emacs}. | ||
| 94 | 101 | ||
| 95 | @table @samp | 102 | @table @samp |
| 96 | @item -name @var{name} | 103 | @item -name @var{name} |
| @@ -272,6 +279,17 @@ especially slow X client/server links. | |||
| 272 | @item @code{verticalScrollBars} (class @code{ScrollBars}) | 279 | @item @code{verticalScrollBars} (class @code{ScrollBars}) |
| 273 | Give frames scroll bars if @samp{on}; don't have scroll bars if | 280 | Give frames scroll bars if @samp{on}; don't have scroll bars if |
| 274 | @samp{off}. | 281 | @samp{off}. |
| 282 | |||
| 283 | @item @code{visualClass} (class @code{VisualClass}) | ||
| 284 | Specify the ``visual'' that X should use. This tells X how to handle | ||
| 285 | colors. | ||
| 286 | |||
| 287 | The value should start with one of @samp{TrueColor}, | ||
| 288 | @samp{PseudoColor}, @samp{DirectColor}, @samp{StaticColor}, | ||
| 289 | @samp{GrayScale}, and @samp{StaticGray}, followed by | ||
| 290 | @samp{-@var{depth}}, where @var{depth} is the number of color planes. | ||
| 291 | Most terminals only allow a few ``visuals,'' and the @samp{dpyinfo} | ||
| 292 | program outputs information saying which ones. | ||
| 275 | @end table | 293 | @end table |
| 276 | 294 | ||
| 277 | @node Face Resources | 295 | @node Face Resources |
| @@ -552,31 +570,32 @@ The color for the border shadow, on the top and the left. | |||
| 552 | @cindex @file{~/.gtkrc-2.0} file | 570 | @cindex @file{~/.gtkrc-2.0} file |
| 553 | @cindex @file{~/.emacs.d/gtkrc} file | 571 | @cindex @file{~/.emacs.d/gtkrc} file |
| 554 | 572 | ||
| 555 | If the Emacs installed at your site was built to use the GTK widget set, | 573 | If Emacs was built to use the GTK widget set, then the menu bar, |
| 556 | then the menu bar, scroll bar and the dialogs can be customized with | 574 | scroll bar and the dialogs are customized with the standard GTK |
| 557 | the standard GTK @file{~/.gtkrc-2.0} file or with the Emacs specific | 575 | customization file, @file{~/.gtkrc-2.0}, or with the Emacs specific |
| 558 | @file{~/.emacs.d/gtkrc} file; note that these files are only for | 576 | file @file{~/.emacs.d/gtkrc}. We recommend that you use |
| 559 | customizing specific GTK widget features. To customize Emacs font, | 577 | @file{~/.emacs.d/gtkrc} for customizations, since @file{~/.gtkrc-2.0} |
| 560 | background, faces etc., use the normal X resources, see @ref{Resources}. | 578 | seems to be ignored when running GConf with GNOME. These files apply |
| 579 | only to GTK widget features. To customize Emacs font, background, | ||
| 580 | faces, etc., use the normal X resources (@pxref{Resources}). | ||
| 561 | 581 | ||
| 562 | Some GTK themes override these mechanisms, which means that using | 582 | Some GTK themes override these mechanisms, which means that using |
| 563 | these mechanisms will not work to customize them. We recommend that | 583 | these mechanisms will not work to customize them. |
| 564 | you use @file{~/.emacs.d/gtkrc} for customizations, since | ||
| 565 | @file{~/.gtkrc-2.0} seems to be ignored when running GConf with GNOME. | ||
| 566 | 584 | ||
| 567 | In these files you first defines a style and then how to apply that style | 585 | In these files you first define a style and say what it means; then |
| 568 | to widgets (@pxref{GTK widget names}). Here is an example of how to | 586 | you specify to apply the style to various widget types (@pxref{GTK |
| 569 | change the font for Emacs menus: | 587 | widget names}). Here is an example of how to change the font for |
| 588 | Emacs menus: | ||
| 570 | 589 | ||
| 571 | @smallexample | 590 | @smallexample |
| 572 | # This is a comment. | 591 | # @r{Define the style @samp{metafont}.} |
| 573 | style "menufont" | 592 | style "menufont" |
| 574 | @{ | 593 | @{ |
| 575 | font_name = "helvetica bold 14" # This is a Pango font name | 594 | font_name = "helvetica bold 14" # This is a Pango font name |
| 576 | @} | 595 | @} |
| 577 | 596 | ||
| 597 | # @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{metafont}.} | ||
| 578 | widget "*emacs-menuitem*" style "menufont" | 598 | widget "*emacs-menuitem*" style "menufont" |
| 579 | |||
| 580 | @end smallexample | 599 | @end smallexample |
| 581 | 600 | ||
| 582 | Here is a more elaborate example, showing how to change the parts of | 601 | Here is a more elaborate example, showing how to change the parts of |
| @@ -585,72 +604,74 @@ the scroll bar: | |||
| 585 | @smallexample | 604 | @smallexample |
| 586 | style "scroll" | 605 | style "scroll" |
| 587 | @{ | 606 | @{ |
| 588 | fg[NORMAL] = "red"@ @ @ @ @ # The arrow color. | 607 | fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.} |
| 589 | bg[NORMAL] = "yellow"@ @ # The thumb and background around the arrow. | 608 | bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.} |
| 590 | bg[ACTIVE] = "blue"@ @ @ @ # The trough color. | 609 | bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.} |
| 591 | bg[PRELIGHT] = "white"@ # The thumb color when the mouse is over it. | 610 | bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.} |
| 592 | @} | 611 | @} |
| 593 | 612 | ||
| 594 | widget "*verticalScrollBar*" style "scroll" | 613 | widget "*verticalScrollBar*" style "scroll" |
| 595 | @end smallexample | 614 | @end smallexample |
| 596 | 615 | ||
| 597 | There are some things you can set without using any style or widget name, | 616 | There are also parameters that affect GTK as a whole. For example, |
| 598 | which affect GTK as a whole. Most of these are poorly documented, but can | 617 | the property @code{gtk-font-name} sets the default font for GTK. You |
| 599 | be found in the `Properties' section of the documentation page for | 618 | must use Pango font names (@pxref{GTK styles}). A GTK resources file |
| 600 | @code{GtkSetting}, in the GTK document references below. | 619 | that just sets a default font looks like this: |
| 601 | |||
| 602 | One property of interest is @code{gtk-font-name} which sets the default | ||
| 603 | font for GTK; you must use Pango font names (@pxref{GTK styles}). A | ||
| 604 | @file{~/.gtkrc-2.0} file that just sets a default font looks like this: | ||
| 605 | 620 | ||
| 606 | @smallexample | 621 | @smallexample |
| 607 | gtk-font-name = "courier 12" | 622 | gtk-font-name = "courier 12" |
| 608 | @end smallexample | 623 | @end smallexample |
| 609 | 624 | ||
| 610 | 625 | The GTK resources file is fully described in the GTK API document. | |
| 611 | If GTK at your site is installed under @var{prefix}, | 626 | This can be found in |
| 612 | the resource file syntax is fully described in the GTK API | 627 | @file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html}, |
| 613 | document | 628 | where @file{prefix} is the directory in which the GTK libraries were |
| 614 | @file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html}. | 629 | installed (usually @file{/usr} or @file{/usr/local}). You can also |
| 615 | @var{prefix} is usually @file{/usr} or @file{/usr/local}. | 630 | find the document online, at |
| 616 | You can find the same document online at | ||
| 617 | @uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}. | 631 | @uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}. |
| 618 | 632 | ||
| 619 | |||
| 620 | @menu | 633 | @menu |
| 621 | * GTK widget names:: How widgets in GTK are named in general. | 634 | * GTK widget names:: How widgets in GTK are named in general. |
| 622 | * GTK names in Emacs:: GTK widget names in Emacs. | 635 | * GTK Names in Emacs:: GTK widget names in Emacs. |
| 623 | * GTK styles:: What can be customized in a GTK widget. | 636 | * GTK styles:: What can be customized in a GTK widget. |
| 624 | @end menu | 637 | @end menu |
| 625 | 638 | ||
| 626 | |||
| 627 | @node GTK widget names | 639 | @node GTK widget names |
| 628 | @appendixsubsec GTK widget names | 640 | @appendixsubsec GTK widget names |
| 629 | @cindex GTK widget names | 641 | @cindex GTK widget names |
| 630 | 642 | ||
| 631 | Widgets are specified by widget class or by widget name. | 643 | A GTK widget is specified by its @dfn{widget class} and |
| 632 | The widget class is the type of the widget, for example @code{GtkMenuBar}. | 644 | @dfn{widget name}. The widget class is the type of the widget: for |
| 633 | The widget name is the name given to a specific widget within a program. | 645 | example, @code{GtkMenuBar}. The widget name is the name given to a |
| 634 | A widget always have a class but it is not mandatory to give a name to | 646 | specific widget. A widget always has a class, but need not have a |
| 635 | a widget. Absolute names are sequences of widget names or | 647 | name. |
| 636 | widget classes, corresponding to hierarchies of widgets embedded within | ||
| 637 | other widgets. For example, if a @code{GtkWindow} contains a @code{GtkVBox} | ||
| 638 | which in turn contains a @code{GtkMenuBar}, the absolute class name | ||
| 639 | is @code{GtkWindow.GtkVBox.GtkMenuBar}. | ||
| 640 | 648 | ||
| 641 | @noindent | 649 | @dfn{Absolute names} are sequences of widget names or widget |
| 642 | If the widgets are named ``top'', ``box'' and ``menubar'', the absolute | 650 | classes, corresponding to hierarchies of widgets embedded within |
| 643 | widget name is @code{top.box.menubar}, | 651 | other widgets. For example, if a @code{GtkWindow} named @code{top} |
| 652 | contains a @code{GtkVBox} named @code{box}, which in turn contains | ||
| 653 | a @code{GtkMenuBar} called @code{menubar}, the absolute class name | ||
| 654 | of the menu-bar widget is @code{GtkWindow.GtkVBox.GtkMenuBar}, and | ||
| 655 | its absolute widget name is @code{top.box.menubar}. | ||
| 644 | 656 | ||
| 645 | When assigning a style to a widget, you can use the absolute class | 657 | When assigning a style to a widget, you can use the absolute class |
| 646 | name or the absolute widget name. | 658 | name or the absolute widget name. |
| 647 | There are two commands: @code{widget_class} will assign a style to | 659 | |
| 648 | widgets, matching only against the absolute class name. | 660 | There are two commands to specify changes for widgets: |
| 649 | The command @code{widget} will match the absolute widget name, | 661 | |
| 650 | but if there is no name for a widget in the hierarchy, the class is matched. | 662 | @table @asis |
| 651 | These commands require the absolute name and the style name to be | 663 | @item @code{widget_class} |
| 652 | within double quotes. These commands are written at the top level in a | 664 | specifies a style for widgets based on the absolute class name. |
| 653 | @file{~/.gtkrc-2.0} file, like this: | 665 | |
| 666 | @item @code{widget} | ||
| 667 | specifies a style for widgets based on the absolute class name, | ||
| 668 | or just the class. | ||
| 669 | @end table | ||
| 670 | |||
| 671 | @noindent | ||
| 672 | You must specify the class and the style in double-quotes, and put | ||
| 673 | these commands at the top level in the GTK customization file, like | ||
| 674 | this: | ||
| 654 | 675 | ||
| 655 | @smallexample | 676 | @smallexample |
| 656 | style "menufont" | 677 | style "menufont" |
| @@ -662,18 +683,17 @@ widget "top.box.menubar" style "menufont" | |||
| 662 | widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont" | 683 | widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont" |
| 663 | @end smallexample | 684 | @end smallexample |
| 664 | 685 | ||
| 665 | 686 | Matching of absolute names uses shell wildcard syntax: @samp{*} | |
| 666 | Matching of absolute names is done with shell ``glob'' syntax, that is | 687 | matches zero or more characters and @samp{?} matches one character. |
| 667 | @samp{*} matches zero or more characters and @samp{?} matches one character. | 688 | This example assigns @code{base_style} to all widgets: |
| 668 | So the following would assign @code{base_style} to all widgets: | ||
| 669 | 689 | ||
| 670 | @smallexample | 690 | @smallexample |
| 671 | widget "*" style "base_style" | 691 | widget "*" style "base_style" |
| 672 | @end smallexample | 692 | @end smallexample |
| 673 | 693 | ||
| 674 | Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar} | 694 | Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar} |
| 675 | and the corresponding absolute widget name @code{top.box.menubar}, | 695 | and the corresponding absolute widget name @code{top.box.menubar}, all |
| 676 | the following all assign @code{my_style} to the menu bar: | 696 | these examples specify @code{my_style} for the menu bar: |
| 677 | 697 | ||
| 678 | @smallexample | 698 | @smallexample |
| 679 | widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style" | 699 | widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style" |
| @@ -685,17 +705,17 @@ widget "*menubar" style "my_style" | |||
| 685 | widget "*menu*" style "my_style" | 705 | widget "*menu*" style "my_style" |
| 686 | @end smallexample | 706 | @end smallexample |
| 687 | 707 | ||
| 688 | @node GTK names in Emacs | 708 | @node GTK Names in Emacs |
| 689 | @appendixsubsec GTK names in Emacs | 709 | @appendixsubsec GTK Widget Names in Emacs |
| 690 | @cindex GTK widget names | 710 | @cindex GTK widget names |
| 691 | @cindex GTK widget classes | 711 | @cindex GTK widget classes |
| 692 | 712 | ||
| 693 | In Emacs the top level widget for a frame is a @code{GtkWindow} that | 713 | In Emacs, the top level widget for a frame is a @code{GtkWindow} |
| 694 | contains a @code{GtkVBox}. The @code{GtkVBox} contains the | 714 | that contains a @code{GtkVBox}. The @code{GtkVBox} contains the |
| 695 | @code{GtkMenuBar} and a @code{GtkFixed} widget. | 715 | @code{GtkMenuBar} and a @code{GtkFixed} widget. The vertical scroll |
| 696 | The vertical scroll bars, @code{GtkVScrollbar}, | 716 | bars, @code{GtkVScrollbar}, are contained in the @code{GtkFixed} |
| 697 | are contained in the @code{GtkFixed} widget. | 717 | widget. The text you write in Emacs is drawn in the @code{GtkFixed} |
| 698 | The text you write in Emacs is drawn in the @code{GtkFixed} widget. | 718 | widget. |
| 699 | 719 | ||
| 700 | Dialogs in Emacs are @code{GtkDialog} widgets. The file dialog is a | 720 | Dialogs in Emacs are @code{GtkDialog} widgets. The file dialog is a |
| 701 | @code{GtkFileSelection} widget. | 721 | @code{GtkFileSelection} widget. |
| @@ -759,14 +779,14 @@ widget "*emacs-filedialog* style "my_file_style" | |||
| 759 | widget "*emacs-menuitem* style "my_menu_style" | 779 | widget "*emacs-menuitem* style "my_menu_style" |
| 760 | @end smallexample | 780 | @end smallexample |
| 761 | 781 | ||
| 762 | An alternative is to put customization into @file{~/.emacs.d/gtkrc}. | 782 | If you specify a customization in @file{~/.emacs.d/gtkrc}, then it |
| 763 | This file is only read by Emacs, so anything in @file{~/.emacs.d/gtkrc} | 783 | automatically applies only to Emacs, since other programs don't read |
| 764 | affects Emacs but leaves other applications unaffected. | 784 | that file. For example, the drop down menu in the file dialog can not |
| 765 | For example, the drop down menu in the file dialog can not | 785 | be customized by any absolute widget name, only by an absolute class |
| 766 | be customized by any absolute widget name, only by an absolute | 786 | name. This is because the widgets in the drop down menu do not |
| 767 | class name. This is so because the widgets in the drop down menu does not | 787 | have names and the menu is not contained in the Emacs GtkWindow. To |
| 768 | have names and the menu is not contained in the Emacs GtkWindow. | 788 | have all menus in Emacs look the same, use this in |
| 769 | To have all menus in Emacs look the same, use this in @file{~/.emacs.d/gtkrc}: | 789 | @file{~/.emacs.d/gtkrc}: |
| 770 | 790 | ||
| 771 | @smallexample | 791 | @smallexample |
| 772 | widget_class "*Menu*" style "my_menu_style" | 792 | widget_class "*Menu*" style "my_menu_style" |
| @@ -777,16 +797,16 @@ widget_class "*Menu*" style "my_menu_style" | |||
| 777 | @cindex GTK styles | 797 | @cindex GTK styles |
| 778 | 798 | ||
| 779 | In a GTK style you specify the appearance widgets shall have. You | 799 | In a GTK style you specify the appearance widgets shall have. You |
| 780 | can specify foreground and background color, background pixmap and font. | 800 | can specify foreground and background color, background pixmap and |
| 781 | The edit widget (where you edit the text) in Emacs is a GTK widget, | 801 | font. The edit widget (where you edit the text) in Emacs is a GTK |
| 782 | but trying to specify a style for the edit widget will have no effect. | 802 | widget, but trying to specify a style for the edit widget will have no |
| 783 | This is so that Emacs compiled for GTK is compatible with Emacs compiled | 803 | effect. This is so that Emacs compiled for GTK is compatible with |
| 784 | for other X toolkits. The settings for foreground, background and font | 804 | Emacs compiled for other X toolkits. The settings for foreground, |
| 785 | for the edit widget is taken from the X resources; @pxref{Resources}. | 805 | background and font for the edit widget is taken from the X resources; |
| 786 | Here is an example of two style declarations, ``default'' and ``ruler'': | 806 | @pxref{Resources}. Here is an example of two style declarations, |
| 807 | @samp{default} and @samp{ruler}: | ||
| 787 | 808 | ||
| 788 | @smallexample | 809 | @smallexample |
| 789 | |||
| 790 | pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" | 810 | pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" |
| 791 | 811 | ||
| 792 | style "default" | 812 | style "default" |
| @@ -821,12 +841,13 @@ style "ruler" = "default" | |||
| 821 | 841 | ||
| 822 | @end smallexample | 842 | @end smallexample |
| 823 | 843 | ||
| 824 | The style ``ruler'' inherits from ``default''. This way you can build | 844 | The style @samp{ruler} inherits from @samp{default}. This way you can build |
| 825 | on existing styles. The syntax for fonts and colors is described below. | 845 | on existing styles. The syntax for fonts and colors is described below. |
| 826 | 846 | ||
| 827 | As this example shows, it is possible to specify several values | 847 | As this example shows, it is possible to specify several values for |
| 828 | for foreground and background depending on which state the widget has. | 848 | foreground and background depending on the widget's @dfn{state}. The |
| 829 | The possible states are | 849 | possible states are: |
| 850 | |||
| 830 | @table @code | 851 | @table @code |
| 831 | @item NORMAL | 852 | @item NORMAL |
| 832 | This is the default state for widgets. | 853 | This is the default state for widgets. |
| @@ -846,71 +867,73 @@ be selected text or items selected in a list. | |||
| 846 | There is no place in Emacs where this setting has any effect. | 867 | There is no place in Emacs where this setting has any effect. |
| 847 | @item INSENSITIVE | 868 | @item INSENSITIVE |
| 848 | This is the state for widgets that are visible, but they can not be | 869 | This is the state for widgets that are visible, but they can not be |
| 849 | manipulated like they normally can. For example, buttons that can't be | 870 | manipulated in the usual way---for example, buttons that can't be |
| 850 | pressed and menu items that can't be selected. | 871 | pressed, and disabled menu items. To display disabled menu items in |
| 851 | Text for menu items that are not available can be set to yellow with | 872 | yellow, use @code{fg[INSENSITIVE] = "yellow"}. |
| 852 | @code{fg[INSENSITIVE] = "yellow"}. | ||
| 853 | @end table | 873 | @end table |
| 854 | 874 | ||
| 855 | Here are the things that can go in a style declaration: | 875 | Here are the things that can go in a style declaration: |
| 856 | 876 | ||
| 857 | @table @code | 877 | @table @code |
| 858 | @item bg[@var{state}] = @var{color} | 878 | @item bg[@var{state}] = @var{color} |
| 859 | This is the background color widgets use. This background is not used for | 879 | This specifies the background color for the widget. Note that |
| 860 | editable text, use @code{base} for that. | 880 | editable text doesn't use @code{bg}; it uses @code{base} instead. |
| 861 | 881 | ||
| 862 | @item base[@var{state}] = @var{color} | 882 | @item base[@var{state}] = @var{color} |
| 863 | This is the background color for editable text. | 883 | This specifies the background color for editable text. In Emacs, this |
| 864 | In Emacs, this color is used for the background of the text fields in the | 884 | color is used for the background of the text fields in the file |
| 865 | file dialog. | 885 | dialog. |
| 866 | 886 | ||
| 867 | @item bg_pixmap[@var{state}] = "@var{pixmap}" | 887 | @item bg_pixmap[@var{state}] = "@var{pixmap}" |
| 868 | You can specify a pixmap to be used instead of the background color. | 888 | This specifies an image background (instead of a background color). |
| 869 | @var{pixmap} is a file name. GTK can use a number of file formats, | 889 | @var{pixmap} should be the image file name. GTK can use a number of |
| 870 | including XPM, XBM, GIF, JPEG and PNG. If you want a widget to use the same | 890 | image file formats, including XPM, XBM, GIF, JPEG and PNG. If you |
| 871 | pixmap as its parent, use @samp{<parent>}. If you don't want any | 891 | want a widget to use the same image as its parent, use |
| 872 | pixmap use @samp{<none>}. Using @samp{<none>} can be useful | 892 | @samp{<parent>}. If you don't want any image, use @samp{<none>}. |
| 873 | if your style inherits a style that does specify a pixmap. | 893 | @samp{<none>} is the way to cancel a background image inherited from a |
| 874 | 894 | parent style. | |
| 875 | GTK looks for the pixmap in directories specified in @code{pixmap_path}. | 895 | |
| 876 | It is not possible to refer to a file by its absolute path name. | 896 | You can't specify the file by its absolute file name. GTK looks for |
| 877 | @code{pixmap_path} is a colon-separated list of directories within double | 897 | the pixmap file in directories specified in @code{pixmap_path}. |
| 878 | quotes, specified at the top level in a @file{gtkrc} file (i.e. not inside | 898 | @code{pixmap_path} is a colon-separated list of directories within |
| 879 | a style definition; see example above): | 899 | double quotes, specified at the top level in a @file{gtkrc} file |
| 900 | (i.e. not inside a style definition; see example above): | ||
| 880 | 901 | ||
| 881 | @smallexample | 902 | @smallexample |
| 882 | pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" | 903 | pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" |
| 883 | @end smallexample | 904 | @end smallexample |
| 884 | 905 | ||
| 885 | @item fg[@var{state}] = @var{color} | 906 | @item fg[@var{state}] = @var{color} |
| 886 | This is the foreground color widgets use. This is the color | 907 | This specifies the foreground color for widgets to use. It is the |
| 887 | of text in menus and buttons. It is also the color for the arrows in the | 908 | color of text in menus and buttons, and the color for the arrows in |
| 888 | scroll bar. For editable text, use @code{text}. | 909 | the scroll bar. For editable text, use @code{text}. |
| 889 | 910 | ||
| 890 | @item text[@var{state}] = @var{color} | 911 | @item text[@var{state}] = @var{color} |
| 891 | This is the color for editable text. In Emacs, this color is used for the | 912 | This is the color for editable text. In Emacs, this color is used for the |
| 892 | text fields in the file dialog. | 913 | text fields in the file dialog. |
| 893 | 914 | ||
| 894 | @item font_name = "@var{font}" | 915 | @item font_name = "@var{font}" |
| 895 | This is the font a widget shall use. @var{font} is a Pango font name, | 916 | This specifies the the font for text in the widget. @var{font} is a |
| 896 | for example ``Sans Italic 10'', ``Helvetica Bold 12'', ``Courier 14'', | 917 | Pango font name, for example @samp{Sans Italic 10}, @samp{Helvetica |
| 897 | ``Times 18''. See below for exact syntax. The names are case insensitive. | 918 | Bold 12}, @samp{Courier 14}, @samp{Times 18}. See below for exact |
| 919 | syntax. The names are case insensitive. | ||
| 898 | @end table | 920 | @end table |
| 899 | 921 | ||
| 900 | Colors are specified in three ways, a name, a hexadecimal form or | 922 | There are three ways to specify a color: by name, in hexadecimal |
| 901 | an RGB triplet. | 923 | form, and with an RGB triplet. |
| 902 | 924 | ||
| 903 | @noindent | 925 | @noindent |
| 904 | A color name is written within double quotes, for example @code{"red"}. | 926 | A color name is written within double quotes, for example @code{"red"}. |
| 905 | 927 | ||
| 906 | @noindent | 928 | @noindent |
| 907 | A hexadecimal form is written within double quotes. There are four forms, | 929 | Hexadecimal form is the same as in X: |
| 908 | @code{#rrrrggggbbbb}, @code{#rrrgggbbb}, | 930 | @code{#@var{rrrr}@var{gggg}@var{bbbb}}, where all three color specs |
| 909 | @code{#rrggbb}, or @code{#rgb}. In each of these r, g and b are hex digits. | 931 | must have the same number of hex digits (1, 2, 3 or 4). |
| 910 | 932 | ||
| 911 | @noindent | 933 | @noindent |
| 912 | An RGB triplet looks like @code{@{ r, g, b @}}, where r, g and b are either | 934 | An RGB triplet looks like @code{@{ @var{r}, @var{g}, @var{b} @}}, |
| 913 | integers in the range 0-65535 or floats in the range 0.0-1.0. | 935 | where @var{r}, @var{g} and @var{b} are either integers in the range |
| 936 | 0-65535 or floats in the range 0.0-1.0. | ||
| 914 | 937 | ||
| 915 | Pango font names have the form ``@var{family-list} @var{style-options} | 938 | Pango font names have the form ``@var{family-list} @var{style-options} |
| 916 | @var{size}''. | 939 | @var{size}''. |
| @@ -935,8 +958,9 @@ these is @code{normal}. | |||
| 935 | 958 | ||
| 936 | @noindent | 959 | @noindent |
| 937 | A `style' corresponds to the fourth part of an X font name. In X font | 960 | A `style' corresponds to the fourth part of an X font name. In X font |
| 938 | names it is the character ``r'', ``i'' or ``o''; in Pango font names the | 961 | names it is the character @samp{r}, @samp{i} or @samp{o}; in Pango |
| 939 | corresponding values are @code{normal}, @code{italic}, or @code{oblique}. | 962 | font names the corresponding values are @code{normal}, @code{italic}, |
| 963 | or @code{oblique}. | ||
| 940 | 964 | ||
| 941 | @noindent | 965 | @noindent |
| 942 | A `variant' is either @code{normal} or @code{small-caps}. | 966 | A `variant' is either @code{normal} or @code{small-caps}. |
diff --git a/src/ChangeLog b/src/ChangeLog index 54b54b95f27..c3f13e624a8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,54 @@ | |||
| 1 | 2005-03-30 Kim F. Storm <storm@cua.dk> | ||
| 2 | |||
| 3 | * xdisp.c (display_line): Allow multiple overlay arrows in window. | ||
| 4 | |||
| 5 | 2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 6 | |||
| 7 | * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP. | ||
| 8 | (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p. | ||
| 9 | (Ffile_name_absolute_p): Use it. | ||
| 10 | (search_embedded_absfilename): New fun, extracted from | ||
| 11 | Fsubstitute_in_file_name. Use file_name_absolute_p. | ||
| 12 | Free the pw data after use. | ||
| 13 | (Fsubstitute_in_file_name): Use it. | ||
| 14 | After cutting a prefix, re-check file-name-handler. | ||
| 15 | |||
| 16 | 2005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se> | ||
| 17 | |||
| 18 | * w32term.h (x_output): add focus_state. | ||
| 19 | |||
| 20 | * w32term.c (x_focus_changed, w32_detect_focus_change): New functions. | ||
| 21 | (w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change. | ||
| 22 | |||
| 23 | 2005-03-25 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 24 | |||
| 25 | * minibuf.c (Fminibuffer_complete_and_exit, Fself_insert_and_exit): | ||
| 26 | Use Fexit_minibuffer. | ||
| 27 | (Fexit_minibuffer): Mark it as no-return, deactivate the mark. | ||
| 28 | |||
| 29 | 2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 30 | |||
| 31 | * dired.c (Ffile_attributes): Add a missing gcpro. | ||
| 32 | |||
| 33 | * alloc.c (make_number): The arg can be bigger than `int'. | ||
| 34 | * lisp.h (make_number): Make prototype more precise. | ||
| 35 | |||
| 36 | * process.c, dired.c (Vfile_name_coding_system) | ||
| 37 | (Vdefault_file_name_coding_system): | ||
| 38 | * callproc.c (Vdoc_file_name, Vfile_name_coding_system) | ||
| 39 | (Vdefault_file_name_coding_system): Remove unused declarations. | ||
| 40 | |||
| 41 | 2005-03-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | ||
| 42 | |||
| 43 | * xmenu.c (create_and_show_popup_menu): Just remove menu and return | ||
| 44 | if it failed to pop up (Gnome "show pointer on ctrl" option makes | ||
| 45 | menus fail to pop up). | ||
| 46 | |||
| 47 | 2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 48 | |||
| 49 | * xdisp.c (get_next_display_element): Also use `\ ' & `\-' for latin-9. | ||
| 50 | Just prepend a backslash without replacing the NBSP by an SPC. | ||
| 51 | |||
| 1 | 2005-03-22 Kim F. Storm <storm@cua.dk> | 52 | 2005-03-22 Kim F. Storm <storm@cua.dk> |
| 2 | 53 | ||
| 3 | * xfaces.c (lookup_derived_face): Add arg SIGNAL_P. | 54 | * xfaces.c (lookup_derived_face): Add arg SIGNAL_P. |
| @@ -17,7 +68,7 @@ | |||
| 17 | 2005-03-22 David Kastrup <dak@gnu.org> | 68 | 2005-03-22 David Kastrup <dak@gnu.org> |
| 18 | 69 | ||
| 19 | * textprop.c (Fnext_char_property_change) | 70 | * textprop.c (Fnext_char_property_change) |
| 20 | (Fprevious_char_property_change): allow marker as limit. | 71 | (Fprevious_char_property_change): Allow marker as limit. |
| 21 | (Fnext_single_char_property_change) | 72 | (Fnext_single_char_property_change) |
| 22 | (Fprevious_single_char_property_change): Check that limit is a | 73 | (Fprevious_single_char_property_change): Check that limit is a |
| 23 | number in strings. | 74 | number in strings. |
| @@ -51,8 +102,7 @@ | |||
| 51 | 102 | ||
| 52 | 2005-03-17 Kenichi Handa <handa@m17n.org> | 103 | 2005-03-17 Kenichi Handa <handa@m17n.org> |
| 53 | 104 | ||
| 54 | * coding.c (syms_of_coding): Docstring of coding-category-list | 105 | * coding.c (syms_of_coding): Docstring of coding-category-list fixed. |
| 55 | fixed. | ||
| 56 | 106 | ||
| 57 | 2005-03-17 Stefan Monnier <monnier@iro.umontreal.ca> | 107 | 2005-03-17 Stefan Monnier <monnier@iro.umontreal.ca> |
| 58 | 108 | ||
diff --git a/src/alloc.c b/src/alloc.c index 70cf2d7b70e..aacce3041d5 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -1502,7 +1502,7 @@ mark_interval_tree (tree) | |||
| 1502 | #ifndef make_number | 1502 | #ifndef make_number |
| 1503 | Lisp_Object | 1503 | Lisp_Object |
| 1504 | make_number (n) | 1504 | make_number (n) |
| 1505 | int n; | 1505 | EMACS_INT n; |
| 1506 | { | 1506 | { |
| 1507 | Lisp_Object obj; | 1507 | Lisp_Object obj; |
| 1508 | obj.s.val = n; | 1508 | obj.s.val = n; |
diff --git a/src/callproc.c b/src/callproc.c index 623509ce199..c410b5a121b 100644 --- a/src/callproc.c +++ b/src/callproc.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Synchronous subprocess invocation for GNU Emacs. | 1 | /* Synchronous subprocess invocation for GNU Emacs. |
| 2 | Copyright (C) 1985,86,87,88,93,94,95,99, 2000,01,02,03,04 | 2 | Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001, |
| 3 | Free Software Foundation, Inc. | 3 | 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| 6 | 6 | ||
| @@ -130,10 +130,6 @@ int synch_process_termsig; | |||
| 130 | /* If synch_process_death is zero, | 130 | /* If synch_process_death is zero, |
| 131 | this is exit code of synchronous subprocess. */ | 131 | this is exit code of synchronous subprocess. */ |
| 132 | int synch_process_retcode; | 132 | int synch_process_retcode; |
| 133 | |||
| 134 | extern Lisp_Object Vdoc_file_name; | ||
| 135 | |||
| 136 | extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system; | ||
| 137 | 133 | ||
| 138 | /* Clean up when exiting Fcall_process. | 134 | /* Clean up when exiting Fcall_process. |
| 139 | On MSDOS, delete the temporary file on any kind of termination. | 135 | On MSDOS, delete the temporary file on any kind of termination. |
diff --git a/src/coding.c b/src/coding.c index c36060cad44..6fcb031b432 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -9357,8 +9357,7 @@ associated with each coding-category one by one in this order. When | |||
| 9357 | one algorithm agrees with a byte sequence of source text, the coding | 9357 | one algorithm agrees with a byte sequence of source text, the coding |
| 9358 | system bound to the corresponding coding-category is selected. | 9358 | system bound to the corresponding coding-category is selected. |
| 9359 | 9359 | ||
| 9360 | When you modify this variable, `update-coding-systems-internal' must | 9360 | Don't modify this variable directly, but use `set-coding-category'. */); |
| 9361 | be called. */); | ||
| 9362 | { | 9361 | { |
| 9363 | int i; | 9362 | int i; |
| 9364 | 9363 | ||
diff --git a/src/dired.c b/src/dired.c index 71597ebc9ea..032040222da 100644 --- a/src/dired.c +++ b/src/dired.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* Lisp functions for making directory listings. | 1 | /* Lisp functions for making directory listings. |
| 2 | Copyright (C) 1985, 1986, 1993, 1994, 1999, 2000, 2001, 2004 | 2 | Copyright (C) 1985, 1986, 1993, 1994, 1999, 2000, 2001, 2004, 2005 |
| 3 | Free Software Foundation, Inc. | 3 | Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| @@ -115,7 +115,6 @@ extern void filemodestring P_ ((struct stat *, char *)); | |||
| 115 | 115 | ||
| 116 | extern int completion_ignore_case; | 116 | extern int completion_ignore_case; |
| 117 | extern Lisp_Object Vcompletion_regexp_list; | 117 | extern Lisp_Object Vcompletion_regexp_list; |
| 118 | extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system; | ||
| 119 | 118 | ||
| 120 | Lisp_Object Vcompletion_ignored_extensions; | 119 | Lisp_Object Vcompletion_ignored_extensions; |
| 121 | Lisp_Object Qcompletion_ignore_case; | 120 | Lisp_Object Qcompletion_ignore_case; |
| @@ -908,6 +907,7 @@ Elements of the attribute list are: | |||
| 908 | #endif | 907 | #endif |
| 909 | char modes[10]; | 908 | char modes[10]; |
| 910 | Lisp_Object handler; | 909 | Lisp_Object handler; |
| 910 | struct gcpro gcpro1; | ||
| 911 | 911 | ||
| 912 | filename = Fexpand_file_name (filename, Qnil); | 912 | filename = Fexpand_file_name (filename, Qnil); |
| 913 | 913 | ||
| @@ -923,7 +923,9 @@ Elements of the attribute list are: | |||
| 923 | return call3 (handler, Qfile_attributes, filename, id_format); | 923 | return call3 (handler, Qfile_attributes, filename, id_format); |
| 924 | } | 924 | } |
| 925 | 925 | ||
| 926 | GCPRO1 (filename); | ||
| 926 | encoded = ENCODE_FILE (filename); | 927 | encoded = ENCODE_FILE (filename); |
| 928 | UNGCPRO; | ||
| 927 | 929 | ||
| 928 | if (lstat (SDATA (encoded), &s) < 0) | 930 | if (lstat (SDATA (encoded), &s) < 0) |
| 929 | return Qnil; | 931 | return Qnil; |
diff --git a/src/editfns.c b/src/editfns.c index 59e57565d49..1cbd28dd109 100644 --- a/src/editfns.c +++ b/src/editfns.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Lisp functions pertaining to editing. | 1 | /* Lisp functions pertaining to editing. |
| 2 | Copyright (C) 1985,86,87,89,93,94,95,96,97,98,1999,2000,01,02,03,2004 | 2 | Copyright (C) 1985, 1986, 1987, 1989, 1993, 1994, 1995, 1996, 1997, 1998, |
| 3 | Free Software Foundation, Inc. | 3 | 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| 6 | 6 | ||
diff --git a/src/fileio.c b/src/fileio.c index bd61d3847c5..9b3360a7fa8 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -1018,7 +1018,7 @@ probably use `make-temp-file' instead, except in three circumstances: | |||
| 1018 | DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, | 1018 | DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, |
| 1019 | doc: /* Convert filename NAME to absolute, and canonicalize it. | 1019 | doc: /* Convert filename NAME to absolute, and canonicalize it. |
| 1020 | Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative | 1020 | Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative |
| 1021 | (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, | 1021 | \(does not start with slash); if DEFAULT-DIRECTORY is nil or missing, |
| 1022 | the current buffer's value of default-directory is used. | 1022 | the current buffer's value of default-directory is used. |
| 1023 | File name components that are `.' are removed, and | 1023 | File name components that are `.' are removed, and |
| 1024 | so are file name components followed by `..', along with the `..' itself; | 1024 | so are file name components followed by `..', along with the `..' itself; |
| @@ -1468,7 +1468,7 @@ See also the function `substitute-in-file-name'. */) | |||
| 1468 | indirectly by prepending newdir to nm if necessary, and using | 1468 | indirectly by prepending newdir to nm if necessary, and using |
| 1469 | cwd (or the wd of newdir's drive) as the new newdir. */ | 1469 | cwd (or the wd of newdir's drive) as the new newdir. */ |
| 1470 | 1470 | ||
| 1471 | if (IS_DRIVE (newdir[0]) && newdir[1] == ':') | 1471 | if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) |
| 1472 | { | 1472 | { |
| 1473 | drive = newdir[0]; | 1473 | drive = newdir[0]; |
| 1474 | newdir += 2; | 1474 | newdir += 2; |
| @@ -1491,7 +1491,7 @@ See also the function `substitute-in-file-name'. */) | |||
| 1491 | } | 1491 | } |
| 1492 | 1492 | ||
| 1493 | /* Strip off drive name from prefix, if present. */ | 1493 | /* Strip off drive name from prefix, if present. */ |
| 1494 | if (IS_DRIVE (newdir[0]) && newdir[1] == ':') | 1494 | if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) |
| 1495 | { | 1495 | { |
| 1496 | drive = newdir[0]; | 1496 | drive = newdir[0]; |
| 1497 | newdir += 2; | 1497 | newdir += 2; |
| @@ -1725,7 +1725,7 @@ See also the function `substitute-in-file-name'. */) | |||
| 1725 | DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, | 1725 | DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, |
| 1726 | "Convert FILENAME to absolute, and canonicalize it.\n\ | 1726 | "Convert FILENAME to absolute, and canonicalize it.\n\ |
| 1727 | Second arg DEFAULT is directory to start with if FILENAME is relative\n\ | 1727 | Second arg DEFAULT is directory to start with if FILENAME is relative\n\ |
| 1728 | (does not start with slash); if DEFAULT is nil or missing,\n\ | 1728 | \(does not start with slash); if DEFAULT is nil or missing,\n\ |
| 1729 | the current buffer's value of default-directory is used.\n\ | 1729 | the current buffer's value of default-directory is used.\n\ |
| 1730 | Filenames containing `.' or `..' as components are simplified;\n\ | 1730 | Filenames containing `.' or `..' as components are simplified;\n\ |
| 1731 | initial `~/' expands to your home directory.\n\ | 1731 | initial `~/' expands to your home directory.\n\ |
| @@ -2044,6 +2044,75 @@ See also the function `substitute-in-file-name'.") | |||
| 2044 | } | 2044 | } |
| 2045 | #endif | 2045 | #endif |
| 2046 | 2046 | ||
| 2047 | /* If /~ or // appears, discard everything through first slash. */ | ||
| 2048 | static int | ||
| 2049 | file_name_absolute_p (filename) | ||
| 2050 | const unsigned char *filename; | ||
| 2051 | { | ||
| 2052 | return | ||
| 2053 | (IS_DIRECTORY_SEP (*filename) || *filename == '~' | ||
| 2054 | #ifdef VMS | ||
| 2055 | /* ??? This criterion is probably wrong for '<'. */ | ||
| 2056 | || index (filename, ':') || index (filename, '<') | ||
| 2057 | || (*filename == '[' && (filename[1] != '-' | ||
| 2058 | || (filename[2] != '.' && filename[2] != ']')) | ||
| 2059 | && filename[1] != '.') | ||
| 2060 | #endif /* VMS */ | ||
| 2061 | #ifdef DOS_NT | ||
| 2062 | || (IS_DRIVE (*filename) && IS_DEVICE_SEP (filename[1]) | ||
| 2063 | && IS_DIRECTORY_SEP (filename[2])) | ||
| 2064 | #endif | ||
| 2065 | ); | ||
| 2066 | } | ||
| 2067 | |||
| 2068 | static unsigned char * | ||
| 2069 | search_embedded_absfilename (nm, endp) | ||
| 2070 | unsigned char *nm, *endp; | ||
| 2071 | { | ||
| 2072 | unsigned char *p, *s; | ||
| 2073 | |||
| 2074 | for (p = nm + 1; p < endp; p++) | ||
| 2075 | { | ||
| 2076 | if ((0 | ||
| 2077 | #ifdef VMS | ||
| 2078 | || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' | ||
| 2079 | #endif /* VMS */ | ||
| 2080 | || IS_DIRECTORY_SEP (p[-1])) | ||
| 2081 | && file_name_absolute_p (p) | ||
| 2082 | #if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) | ||
| 2083 | /* // at start of file name is meaningful in Apollo, | ||
| 2084 | WindowsNT and Cygwin systems. */ | ||
| 2085 | && !(IS_DIRECTORY_SEP (p[0]) && p - 1 == nm) | ||
| 2086 | #endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ | ||
| 2087 | ) | ||
| 2088 | { | ||
| 2089 | for (s = p; *s && (!IS_DIRECTORY_SEP (*s) | ||
| 2090 | #ifdef VMS | ||
| 2091 | && *s != ':' | ||
| 2092 | #endif /* VMS */ | ||
| 2093 | ); s++); | ||
| 2094 | if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */ | ||
| 2095 | { | ||
| 2096 | unsigned char *o = alloca (s - p + 1); | ||
| 2097 | struct passwd *pw; | ||
| 2098 | bcopy (p, o, s - p); | ||
| 2099 | o [s - p] = 0; | ||
| 2100 | |||
| 2101 | /* If we have ~user and `user' exists, discard | ||
| 2102 | everything up to ~. But if `user' does not exist, leave | ||
| 2103 | ~user alone, it might be a literal file name. */ | ||
| 2104 | if ((pw = getpwnam (o + 1))) | ||
| 2105 | return p; | ||
| 2106 | else | ||
| 2107 | xfree (pw); | ||
| 2108 | } | ||
| 2109 | else | ||
| 2110 | return p; | ||
| 2111 | } | ||
| 2112 | } | ||
| 2113 | return NULL; | ||
| 2114 | } | ||
| 2115 | |||
| 2047 | DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, | 2116 | DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, |
| 2048 | Ssubstitute_in_file_name, 1, 1, 0, | 2117 | Ssubstitute_in_file_name, 1, 1, 0, |
| 2049 | doc: /* Substitute environment variables referred to in FILENAME. | 2118 | doc: /* Substitute environment variables referred to in FILENAME. |
| @@ -2065,7 +2134,6 @@ duplicates what `expand-file-name' does. */) | |||
| 2065 | int total = 0; | 2134 | int total = 0; |
| 2066 | int substituted = 0; | 2135 | int substituted = 0; |
| 2067 | unsigned char *xnm; | 2136 | unsigned char *xnm; |
| 2068 | struct passwd *pw; | ||
| 2069 | Lisp_Object handler; | 2137 | Lisp_Object handler; |
| 2070 | 2138 | ||
| 2071 | CHECK_STRING (filename); | 2139 | CHECK_STRING (filename); |
| @@ -2085,61 +2153,17 @@ duplicates what `expand-file-name' does. */) | |||
| 2085 | endp = nm + SBYTES (filename); | 2153 | endp = nm + SBYTES (filename); |
| 2086 | 2154 | ||
| 2087 | /* If /~ or // appears, discard everything through first slash. */ | 2155 | /* If /~ or // appears, discard everything through first slash. */ |
| 2088 | 2156 | p = search_embedded_absfilename (nm, endp); | |
| 2089 | for (p = nm; p != endp; p++) | 2157 | if (p) |
| 2090 | { | 2158 | /* Start over with the new string, so we check the file-name-handler |
| 2091 | if ((p[0] == '~' | 2159 | again. Important with filenames like "/home/foo//:/hello///there" |
| 2092 | #if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) | 2160 | which whould substitute to "/:/hello///there" rather than "/there". */ |
| 2093 | /* // at start of file name is meaningful in Apollo, | 2161 | return Fsubstitute_in_file_name |
| 2094 | WindowsNT and Cygwin systems. */ | 2162 | (make_specified_string (p, -1, endp - p, |
| 2095 | || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) | 2163 | STRING_MULTIBYTE (filename))); |
| 2096 | #else /* not (APOLLO || WINDOWSNT || CYGWIN) */ | ||
| 2097 | || IS_DIRECTORY_SEP (p[0]) | ||
| 2098 | #endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ | ||
| 2099 | ) | ||
| 2100 | && p != nm | ||
| 2101 | && (0 | ||
| 2102 | #ifdef VMS | ||
| 2103 | || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' | ||
| 2104 | #endif /* VMS */ | ||
| 2105 | || IS_DIRECTORY_SEP (p[-1]))) | ||
| 2106 | { | ||
| 2107 | for (s = p; *s && (!IS_DIRECTORY_SEP (*s) | ||
| 2108 | #ifdef VMS | ||
| 2109 | && *s != ':' | ||
| 2110 | #endif /* VMS */ | ||
| 2111 | ); s++); | ||
| 2112 | if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */ | ||
| 2113 | { | ||
| 2114 | o = (unsigned char *) alloca (s - p + 1); | ||
| 2115 | bcopy ((char *) p, o, s - p); | ||
| 2116 | o [s - p] = 0; | ||
| 2117 | |||
| 2118 | pw = (struct passwd *) getpwnam (o + 1); | ||
| 2119 | } | ||
| 2120 | /* If we have ~/ or ~user and `user' exists, discard | ||
| 2121 | everything up to ~. But if `user' does not exist, leave | ||
| 2122 | ~user alone, it might be a literal file name. */ | ||
| 2123 | if (IS_DIRECTORY_SEP (p[0]) || s == p + 1 || pw) | ||
| 2124 | { | ||
| 2125 | nm = p; | ||
| 2126 | substituted = 1; | ||
| 2127 | } | ||
| 2128 | } | ||
| 2129 | #ifdef DOS_NT | ||
| 2130 | /* see comment in expand-file-name about drive specifiers */ | ||
| 2131 | else if (IS_DRIVE (p[0]) && p[1] == ':' | ||
| 2132 | && p > nm && IS_DIRECTORY_SEP (p[-1])) | ||
| 2133 | { | ||
| 2134 | nm = p; | ||
| 2135 | substituted = 1; | ||
| 2136 | } | ||
| 2137 | #endif /* DOS_NT */ | ||
| 2138 | } | ||
| 2139 | 2164 | ||
| 2140 | #ifdef VMS | 2165 | #ifdef VMS |
| 2141 | return make_specified_string (nm, -1, strlen (nm), | 2166 | return filename; |
| 2142 | STRING_MULTIBYTE (filename)); | ||
| 2143 | #else | 2167 | #else |
| 2144 | 2168 | ||
| 2145 | /* See if any variables are substituted into the string | 2169 | /* See if any variables are substituted into the string |
| @@ -2266,22 +2290,11 @@ duplicates what `expand-file-name' does. */) | |||
| 2266 | *x = 0; | 2290 | *x = 0; |
| 2267 | 2291 | ||
| 2268 | /* If /~ or // appears, discard everything through first slash. */ | 2292 | /* If /~ or // appears, discard everything through first slash. */ |
| 2269 | 2293 | while ((p = search_embedded_absfilename (xnm, x))) | |
| 2270 | for (p = xnm; p != x; p++) | 2294 | /* This time we do not start over because we've already expanded envvars |
| 2271 | if ((p[0] == '~' | 2295 | and replaced $$ with $. Maybe we should start over as well, but we'd |
| 2272 | #if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) | 2296 | need to quote some $ to $$ first. */ |
| 2273 | || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm) | 2297 | xnm = p; |
| 2274 | #else /* not (APOLLO || WINDOWSNT || CYGWIN) */ | ||
| 2275 | || IS_DIRECTORY_SEP (p[0]) | ||
| 2276 | #endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ | ||
| 2277 | ) | ||
| 2278 | && p != xnm && IS_DIRECTORY_SEP (p[-1])) | ||
| 2279 | xnm = p; | ||
| 2280 | #ifdef DOS_NT | ||
| 2281 | else if (IS_DRIVE (p[0]) && p[1] == ':' | ||
| 2282 | && p > xnm && IS_DIRECTORY_SEP (p[-1])) | ||
| 2283 | xnm = p; | ||
| 2284 | #endif | ||
| 2285 | 2298 | ||
| 2286 | return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename)); | 2299 | return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename)); |
| 2287 | 2300 | ||
| @@ -2964,24 +2977,8 @@ On Unix, this is a name starting with a `/' or a `~'. */) | |||
| 2964 | (filename) | 2977 | (filename) |
| 2965 | Lisp_Object filename; | 2978 | Lisp_Object filename; |
| 2966 | { | 2979 | { |
| 2967 | const unsigned char *ptr; | ||
| 2968 | |||
| 2969 | CHECK_STRING (filename); | 2980 | CHECK_STRING (filename); |
| 2970 | ptr = SDATA (filename); | 2981 | return file_name_absolute_p (SDATA (filename)) ? Qt : Qnil; |
| 2971 | if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~' | ||
| 2972 | #ifdef VMS | ||
| 2973 | /* ??? This criterion is probably wrong for '<'. */ | ||
| 2974 | || index (ptr, ':') || index (ptr, '<') | ||
| 2975 | || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']')) | ||
| 2976 | && ptr[1] != '.') | ||
| 2977 | #endif /* VMS */ | ||
| 2978 | #ifdef DOS_NT | ||
| 2979 | || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2])) | ||
| 2980 | #endif | ||
| 2981 | ) | ||
| 2982 | return Qt; | ||
| 2983 | else | ||
| 2984 | return Qnil; | ||
| 2985 | } | 2982 | } |
| 2986 | 2983 | ||
| 2987 | /* Return nonzero if file FILENAME exists and can be executed. */ | 2984 | /* Return nonzero if file FILENAME exists and can be executed. */ |
diff --git a/src/lisp.h b/src/lisp.h index 2da2fe6c7dd..160a5cb398b 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Fundamental definitions for GNU Emacs Lisp interpreter. | 1 | /* Fundamental definitions for GNU Emacs Lisp interpreter. |
| 2 | Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000,01,02,03,2004 | 2 | Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000, |
| 3 | Free Software Foundation, Inc. | 3 | 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| 6 | 6 | ||
| @@ -452,7 +452,7 @@ enum pvec_type | |||
| 452 | #define make_number(N) \ | 452 | #define make_number(N) \ |
| 453 | (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; })) | 453 | (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; })) |
| 454 | #else | 454 | #else |
| 455 | extern Lisp_Object make_number (); | 455 | extern Lisp_Object make_number P_ ((EMACS_INT)); |
| 456 | #endif | 456 | #endif |
| 457 | 457 | ||
| 458 | #define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type) | 458 | #define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type) |
diff --git a/src/minibuf.c b/src/minibuf.c index 329070c5cb3..538fd0b8dac 100644 --- a/src/minibuf.c +++ b/src/minibuf.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* Minibuffer input and completion. | 1 | /* Minibuffer input and completion. |
| 2 | Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04 | 2 | Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04,05 |
| 3 | Free Software Foundation, Inc. | 3 | Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| @@ -2080,6 +2080,8 @@ complete_and_exit_2 (ignore) | |||
| 2080 | return make_number (1); | 2080 | return make_number (1); |
| 2081 | } | 2081 | } |
| 2082 | 2082 | ||
| 2083 | EXFUN (Fexit_minibuffer, 0) NO_RETURN; | ||
| 2084 | |||
| 2083 | DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit, | 2085 | DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit, |
| 2084 | Sminibuffer_complete_and_exit, 0, 0, "", | 2086 | Sminibuffer_complete_and_exit, 0, 0, "", |
| 2085 | doc: /* If the minibuffer contents is a valid completion then exit. | 2087 | doc: /* If the minibuffer contents is a valid completion then exit. |
| @@ -2142,7 +2144,7 @@ a repetition of this command will exit. */) | |||
| 2142 | return Qnil; | 2144 | return Qnil; |
| 2143 | } | 2145 | } |
| 2144 | exit: | 2146 | exit: |
| 2145 | return Fthrow (Qexit, Qnil); | 2147 | return Fexit_minibuffer (); |
| 2146 | /* NOTREACHED */ | 2148 | /* NOTREACHED */ |
| 2147 | } | 2149 | } |
| 2148 | 2150 | ||
| @@ -2539,14 +2541,21 @@ DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0, | |||
| 2539 | else | 2541 | else |
| 2540 | bitch_at_user (); | 2542 | bitch_at_user (); |
| 2541 | 2543 | ||
| 2542 | return Fthrow (Qexit, Qnil); | 2544 | return Fexit_minibuffer (); |
| 2543 | } | 2545 | } |
| 2544 | 2546 | ||
| 2545 | DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "", | 2547 | DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "", |
| 2546 | doc: /* Terminate this minibuffer argument. */) | 2548 | doc: /* Terminate this minibuffer argument. */) |
| 2547 | () | 2549 | () |
| 2548 | { | 2550 | { |
| 2549 | return Fthrow (Qexit, Qnil); | 2551 | /* If the command that uses this has made modifications in the minibuffer, |
| 2552 | we don't want them to cause deactivation of the mark in the original | ||
| 2553 | buffer. | ||
| 2554 | A better solution would be to make deactivate-mark buffer-local | ||
| 2555 | (or to turn it into a list of buffers, ...), but in the mean time, | ||
| 2556 | this should do the trick in most cases. */ | ||
| 2557 | Vdeactivate_mark = Qnil; | ||
| 2558 | Fthrow (Qexit, Qnil); | ||
| 2550 | } | 2559 | } |
| 2551 | 2560 | ||
| 2552 | DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0, | 2561 | DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0, |
diff --git a/src/process.c b/src/process.c index 8ce21f3e8ee..26d40c26cd5 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Asynchronous subprocess control for GNU Emacs. | 1 | /* Asynchronous subprocess control for GNU Emacs. |
| 2 | Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 98, 1999, | 2 | Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1998, 1999, |
| 3 | 2001, 2002, 2003, 2004 Free Software Foundation, Inc. | 3 | 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| 6 | 6 | ||
| @@ -376,8 +376,6 @@ extern int timers_run; | |||
| 376 | /* Maximum number of bytes to send to a pty without an eof. */ | 376 | /* Maximum number of bytes to send to a pty without an eof. */ |
| 377 | static int pty_max_bytes; | 377 | static int pty_max_bytes; |
| 378 | 378 | ||
| 379 | extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system; | ||
| 380 | |||
| 381 | #ifdef HAVE_PTYS | 379 | #ifdef HAVE_PTYS |
| 382 | #ifdef HAVE_PTY_H | 380 | #ifdef HAVE_PTY_H |
| 383 | #include <pty.h> | 381 | #include <pty.h> |
diff --git a/src/w32term.c b/src/w32term.c index 151afb7e841..51f001bfd45 100644 --- a/src/w32term.c +++ b/src/w32term.c | |||
| @@ -282,6 +282,10 @@ static void frame_highlight P_ ((struct frame *)); | |||
| 282 | static void frame_unhighlight P_ ((struct frame *)); | 282 | static void frame_unhighlight P_ ((struct frame *)); |
| 283 | static void x_new_focus_frame P_ ((struct w32_display_info *, | 283 | static void x_new_focus_frame P_ ((struct w32_display_info *, |
| 284 | struct frame *)); | 284 | struct frame *)); |
| 285 | static void x_focus_changed P_ ((int, int, struct w32_display_info *, | ||
| 286 | struct frame *, struct input_event *)); | ||
| 287 | static void w32_detect_focus_change P_ ((struct w32_display_info *, | ||
| 288 | W32Msg *, struct input_event *)); | ||
| 285 | static void w32_frame_rehighlight P_ ((struct frame *)); | 289 | static void w32_frame_rehighlight P_ ((struct frame *)); |
| 286 | static void x_frame_rehighlight P_ ((struct w32_display_info *)); | 290 | static void x_frame_rehighlight P_ ((struct w32_display_info *)); |
| 287 | static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); | 291 | static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); |
| @@ -2967,6 +2971,81 @@ x_new_focus_frame (dpyinfo, frame) | |||
| 2967 | x_frame_rehighlight (dpyinfo); | 2971 | x_frame_rehighlight (dpyinfo); |
| 2968 | } | 2972 | } |
| 2969 | 2973 | ||
| 2974 | |||
| 2975 | /* Handle FocusIn and FocusOut state changes for FRAME. | ||
| 2976 | If FRAME has focus and there exists more than one frame, puts | ||
| 2977 | a FOCUS_IN_EVENT into *BUFP. */ | ||
| 2978 | |||
| 2979 | static void | ||
| 2980 | x_focus_changed (type, state, dpyinfo, frame, bufp) | ||
| 2981 | int type; | ||
| 2982 | int state; | ||
| 2983 | struct w32_display_info *dpyinfo; | ||
| 2984 | struct frame *frame; | ||
| 2985 | struct input_event *bufp; | ||
| 2986 | { | ||
| 2987 | if (type == WM_SETFOCUS) | ||
| 2988 | { | ||
| 2989 | if (dpyinfo->w32_focus_event_frame != frame) | ||
| 2990 | { | ||
| 2991 | x_new_focus_frame (dpyinfo, frame); | ||
| 2992 | dpyinfo->w32_focus_event_frame = frame; | ||
| 2993 | |||
| 2994 | /* Don't stop displaying the initial startup message | ||
| 2995 | for a switch-frame event we don't need. */ | ||
| 2996 | if (GC_NILP (Vterminal_frame) | ||
| 2997 | && GC_CONSP (Vframe_list) | ||
| 2998 | && !GC_NILP (XCDR (Vframe_list))) | ||
| 2999 | { | ||
| 3000 | bufp->kind = FOCUS_IN_EVENT; | ||
| 3001 | XSETFRAME (bufp->frame_or_window, frame); | ||
| 3002 | } | ||
| 3003 | } | ||
| 3004 | |||
| 3005 | frame->output_data.x->focus_state |= state; | ||
| 3006 | |||
| 3007 | /* TODO: IME focus? */ | ||
| 3008 | } | ||
| 3009 | else if (type == WM_KILLFOCUS) | ||
| 3010 | { | ||
| 3011 | frame->output_data.x->focus_state &= ~state; | ||
| 3012 | |||
| 3013 | if (dpyinfo->w32_focus_event_frame == frame) | ||
| 3014 | { | ||
| 3015 | dpyinfo->w32_focus_event_frame = 0; | ||
| 3016 | x_new_focus_frame (dpyinfo, 0); | ||
| 3017 | } | ||
| 3018 | |||
| 3019 | /* TODO: IME focus? */ | ||
| 3020 | } | ||
| 3021 | } | ||
| 3022 | |||
| 3023 | |||
| 3024 | /* The focus may have changed. Figure out if it is a real focus change, | ||
| 3025 | by checking both FocusIn/Out and Enter/LeaveNotify events. | ||
| 3026 | |||
| 3027 | Returns FOCUS_IN_EVENT event in *BUFP. */ | ||
| 3028 | |||
| 3029 | static void | ||
| 3030 | w32_detect_focus_change (dpyinfo, event, bufp) | ||
| 3031 | struct w32_display_info *dpyinfo; | ||
| 3032 | W32Msg *event; | ||
| 3033 | struct input_event *bufp; | ||
| 3034 | { | ||
| 3035 | struct frame *frame; | ||
| 3036 | |||
| 3037 | frame = x_any_window_to_frame (dpyinfo, event->msg.hwnd); | ||
| 3038 | if (! frame) | ||
| 3039 | return; | ||
| 3040 | |||
| 3041 | /* On w32, this is only called from focus events, so no switch needed. */ | ||
| 3042 | x_focus_changed (event->msg.message, | ||
| 3043 | (event->msg.message == WM_KILLFOCUS ? | ||
| 3044 | FOCUS_IMPLICIT : FOCUS_EXPLICIT), | ||
| 3045 | dpyinfo, frame, bufp); | ||
| 3046 | } | ||
| 3047 | |||
| 3048 | |||
| 2970 | /* Handle an event saying the mouse has moved out of an Emacs frame. */ | 3049 | /* Handle an event saying the mouse has moved out of an Emacs frame. */ |
| 2971 | 3050 | ||
| 2972 | void | 3051 | void |
| @@ -4811,27 +4890,13 @@ w32_read_socket (sd, expected, hold_quit) | |||
| 4811 | break; | 4890 | break; |
| 4812 | 4891 | ||
| 4813 | case WM_SETFOCUS: | 4892 | case WM_SETFOCUS: |
| 4814 | /* TODO: Port this change: | 4893 | w32_detect_focus_change (dpyinfo, &msg, &inev); |
| 4815 | 2002-06-28 Jan D. <jan.h.d@swipnet.se> | ||
| 4816 | * xterm.h (struct x_output): Add focus_state. | ||
| 4817 | * xterm.c (x_focus_changed): New function. | ||
| 4818 | (x_detect_focus_change): New function. | ||
| 4819 | (XTread_socket): Call x_detect_focus_change for FocusIn/FocusOut | ||
| 4820 | EnterNotify and LeaveNotify to track X focus changes. | ||
| 4821 | */ | ||
| 4822 | f = x_any_window_to_frame (dpyinfo, msg.msg.hwnd); | ||
| 4823 | |||
| 4824 | dpyinfo->w32_focus_event_frame = f; | ||
| 4825 | |||
| 4826 | if (f) | ||
| 4827 | x_new_focus_frame (dpyinfo, f); | ||
| 4828 | 4894 | ||
| 4829 | dpyinfo->grabbed = 0; | 4895 | dpyinfo->grabbed = 0; |
| 4830 | check_visibility = 1; | 4896 | check_visibility = 1; |
| 4831 | break; | 4897 | break; |
| 4832 | 4898 | ||
| 4833 | case WM_KILLFOCUS: | 4899 | case WM_KILLFOCUS: |
| 4834 | /* TODO: some of this belongs in MOUSE_LEAVE */ | ||
| 4835 | f = x_top_window_to_frame (dpyinfo, msg.msg.hwnd); | 4900 | f = x_top_window_to_frame (dpyinfo, msg.msg.hwnd); |
| 4836 | 4901 | ||
| 4837 | if (f) | 4902 | if (f) |
diff --git a/src/w32term.h b/src/w32term.h index a25a3b49782..61c7c5b6115 100644 --- a/src/w32term.h +++ b/src/w32term.h | |||
| @@ -278,8 +278,25 @@ struct x_output | |||
| 278 | { | 278 | { |
| 279 | PIX_TYPE background_pixel; | 279 | PIX_TYPE background_pixel; |
| 280 | PIX_TYPE foreground_pixel; | 280 | PIX_TYPE foreground_pixel; |
| 281 | |||
| 282 | /* Keep track of focus. May be EXPLICIT if we received a FocusIn for this | ||
| 283 | frame, or IMPLICIT if we received an EnterNotify. | ||
| 284 | FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */ | ||
| 285 | int focus_state; | ||
| 286 | |||
| 281 | }; | 287 | }; |
| 282 | 288 | ||
| 289 | enum | ||
| 290 | { | ||
| 291 | /* Values for focus_state, used as bit mask. | ||
| 292 | EXPLICIT means we received a FocusIn for the frame and know it has | ||
| 293 | the focus. IMPLICIT means we recevied an EnterNotify and the frame | ||
| 294 | may have the focus if no window manager is running. | ||
| 295 | FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */ | ||
| 296 | FOCUS_NONE = 0, | ||
| 297 | FOCUS_IMPLICIT = 1, | ||
| 298 | FOCUS_EXPLICIT = 2 | ||
| 299 | }; | ||
| 283 | 300 | ||
| 284 | struct w32_output | 301 | struct w32_output |
| 285 | { | 302 | { |
diff --git a/src/xdisp.c b/src/xdisp.c index 60ac47b0ec5..0b46eaf8621 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -463,7 +463,7 @@ static Lisp_Object Vwindow_size_change_functions; | |||
| 463 | 463 | ||
| 464 | Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook; | 464 | Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook; |
| 465 | 465 | ||
| 466 | /* Nonzero if overlay arrow has been displayed once in this window. */ | 466 | /* Nonzero if an overlay arrow has been displayed in this window. */ |
| 467 | 467 | ||
| 468 | static int overlay_arrow_seen; | 468 | static int overlay_arrow_seen; |
| 469 | 469 | ||
| @@ -15362,10 +15362,9 @@ display_line (it) | |||
| 15362 | mark this glyph row as the one containing the overlay arrow. | 15362 | mark this glyph row as the one containing the overlay arrow. |
| 15363 | This is clearly a mess with variable size fonts. It would be | 15363 | This is clearly a mess with variable size fonts. It would be |
| 15364 | better to let it be displayed like cursors under X. */ | 15364 | better to let it be displayed like cursors under X. */ |
| 15365 | if (! overlay_arrow_seen | 15365 | if ((overlay_arrow_string |
| 15366 | && (overlay_arrow_string | 15366 | = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), |
| 15367 | = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), | 15367 | !NILP (overlay_arrow_string))) |
| 15368 | !NILP (overlay_arrow_string))) | ||
| 15369 | { | 15368 | { |
| 15370 | /* Overlay arrow in window redisplay is a fringe bitmap. */ | 15369 | /* Overlay arrow in window redisplay is a fringe bitmap. */ |
| 15371 | if (STRINGP (overlay_arrow_string)) | 15370 | if (STRINGP (overlay_arrow_string)) |
diff --git a/src/xmenu.c b/src/xmenu.c index c8747689c1e..e369d04743c 100644 --- a/src/xmenu.c +++ b/src/xmenu.c | |||
| @@ -2490,11 +2490,14 @@ create_and_show_popup_menu (f, first_wv, x, y, for_click) | |||
| 2490 | 2490 | ||
| 2491 | record_unwind_protect (pop_down_menu, make_save_value (menu, 0)); | 2491 | record_unwind_protect (pop_down_menu, make_save_value (menu, 0)); |
| 2492 | 2492 | ||
| 2493 | /* Set this to one. popup_widget_loop increases it by one, so it becomes | 2493 | if (GTK_WIDGET_MAPPED (menu)) |
| 2494 | two. show_help_echo uses this to detect popup menus. */ | 2494 | { |
| 2495 | popup_activated_flag = 1; | 2495 | /* Set this to one. popup_widget_loop increases it by one, so it becomes |
| 2496 | /* Process events that apply to the menu. */ | 2496 | two. show_help_echo uses this to detect popup menus. */ |
| 2497 | popup_widget_loop (1, menu); | 2497 | popup_activated_flag = 1; |
| 2498 | /* Process events that apply to the menu. */ | ||
| 2499 | popup_widget_loop (1, menu); | ||
| 2500 | } | ||
| 2498 | 2501 | ||
| 2499 | unbind_to (specpdl_count, Qnil); | 2502 | unbind_to (specpdl_count, Qnil); |
| 2500 | 2503 | ||