From a0554a40e2efd9352e185fbb3af48811a8e4044c Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sun, 27 Mar 2005 02:17:27 +0000 Subject: [PATCH 001/241] Several small changes in addition to: (Visiting): Change xref for Dialog Boxes to ref. (Version Headers): Replace references to obsolete var `vc-header-alist' with `vc-BACKEND-header'. (Customizing VC): Update value of `vc-handled-backends'. --- man/files.texi | 59 +++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/man/files.texi b/man/files.texi index 1e40651a4ce..8f5bf596238 100644 --- a/man/files.texi +++ b/man/files.texi @@ -238,7 +238,7 @@ or tool bar) use the toolkit's standard File Selection dialog instead of prompting for the file name in the minibuffer. On Unix and GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and Motif toolkits; on MS-Windows, the GUI version does that by default. -For information on how to customize this, see @xref{Dialog Boxes}. +For information on how to customize this, see @ref{Dialog Boxes}. Secondly, Emacs supports the ``drag and drop'' protocol on the X window system. Dropping a file into an ordinary Emacs window visits @@ -1272,6 +1272,10 @@ as multiple branches, are not available with SCCS. You should use SCCS only if for some reason you cannot use RCS, or one of the higher-level systems such as CVS or GNU Arch. +In the following, we discuss mainly RCS, SCCS and CVS. Nearly +everything said about CVS applies to Gnu Arch, Subversion and Meta-CVS +as well. + @node VC Concepts @subsubsection Concepts of Version Control @@ -1472,9 +1476,9 @@ informs you if another user has checked in changes in the same file since you began editing it, and when this happens, his changes will be effectively removed when you check in your version (though they will remain in the master file, so they will not be entirely lost). You must -therefore verify the current version is unchanged, before you check in your -changes. We hope to eliminate this risk and provide automatic merging -with RCS in a future Emacs version. +therefore verify that the current version is unchanged, before you +check in your changes. We hope to eliminate this risk and provide +automatic merging with RCS in a future Emacs version. In addition, locking is possible with RCS even in this mode, although it is not required; @kbd{C-x v v} with an unmodified file locks the @@ -1698,13 +1702,10 @@ there is more than one system in use for a directory, Emacs uses the one that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). On the other hand, if there are no files already registered, Emacs uses the first system from @code{vc-handled-backends} that could -register the file---for example, you cannot register a file under CVS if -its directory is not already part of a CVS tree. - - With the default value of @code{vc-handled-backends}, this means -that Emacs uses RCS if there are any files under RCS control, CVS if -there are any files under CVS, SCCS if any files are under SCCS, or -RCS as the ultimate default. +register the file (for example, you cannot register a file under CVS if +its directory is not already part of a CVS tree); with the default +value of @code{vc-handled-backends}, this means that Emacs uses RCS in +this situation. If locking is in use, @kbd{C-x v i} leaves the file unlocked and read-only. Type @kbd{C-x v v} if you wish to start editing it. After @@ -1892,7 +1893,8 @@ marked files, so that you can lock or check in several files at once. If it operates on more than one file, it handles each file according to its current state; thus, it might lock one file, but check in another file. This could be confusing; it is up to you to avoid confusing -behavior by marking a set of files that are in a similar state. +behavior by marking a set of files that are in a similar state. If no +files are marked, @kbd{v v} operates on the file in the current line. If any files call for check-in, @kbd{v v} reads a single log entry, then uses it for all the files being checked in. This is convenient for @@ -1920,8 +1922,7 @@ program in which you are gradually adding various unfinished new features. Each such independent line of development is called a @dfn{branch}. VC allows you to create branches, switch between different branches, and merge changes from one branch to another. -Please note, however, that branches are only supported for RCS at the -moment. +Please note, however, that branches are not supported for SCCS. A file's main line of development is usually called the @dfn{trunk}. The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At @@ -2264,7 +2265,8 @@ But if you do this, the revision numbers in the RCS master no longer correspond to those of CVS. Technically, this is not a problem, but it can become difficult to keep track of what is in the CVS repository and what is not. So we suggest that you return from time to time to -CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}. +CVS-only operation, by committing your local changes back to the +repository using @kbd{C-u C-x v v cvs @key{RET}}. @node Snapshots @subsection Snapshots @@ -2552,13 +2554,11 @@ insert a suitable header string. Insert headers in a file for use with your version-control system. @end table -@vindex vc-header-alist +@vindex vc-@var{backend}-header The default header string is @samp{@w{$}Id$} for RCS and @samp{@w{%}W%} for SCCS. You can specify other headers to insert by -setting the variable @code{vc-header-alist}. Its value is a list of -elements of the form @code{(@var{program} . @var{string})} where -@var{program} is @code{RCS} or @code{SCCS} and @var{string} is the -string to use. +setting the variables @code{vc-@var{backend}-header} where +@var{backend} is @code{rcs} or @code{sccs}. Instead of a single string, you can specify a list of strings; then each string in the list is inserted as a separate header on a line of @@ -2586,8 +2586,8 @@ elements of the form @code{(@var{regexp} . @var{format})}. Whenever @var{regexp} matches the buffer name, @var{format} is inserted as part of the header. A header line is inserted for each element that matches the buffer name, and for each string specified by -@code{vc-header-alist}. The header line is made by processing the -string from @code{vc-header-alist} with the format taken from the +@code{vc-@var{backend}-header}. The header line is made by processing the +string from @code{vc-@var{backend}-header} with the format taken from the element. The default value for @code{vc-static-header-alist} is as follows: @example @@ -2624,10 +2624,10 @@ headers. @vindex vc-handled-backends The variable @code{vc-handled-backends} determines which version control systems VC should handle. The default value is @code{(RCS CVS -SCCS)}, so it contains all three version systems that are currently -supported. If you want VC to ignore one or more of these systems, -exclude its name from the list. To disable VC entirely, set this -variable to @code{nil}. +SVN SCCS Arch MCVS)}, so it contains all six version systems that are +currently supported. If you want VC to ignore one or more of these +systems, exclude its name from the list. To disable VC entirely, set +this variable to @code{nil}. The order of systems in the list is significant: when you visit a file registered in more than one system (@pxref{Local Version Control}), @@ -2780,8 +2780,9 @@ pick up any recent changes from the repository first, using @kbd{C-x v m @key{RET}}, @pxref{Merging}). @vindex vc-cvs-global-switches - The variable @code{vc-cvs-global-switches} should be a string -specifying switches to pass to CVS for all CVS operations. + The variable @code{vc-cvs-global-switches}, if non-@code{nil}, +should be a string specifying switches to pass to CVS for all CVS +operations. When @code{vc-cvs-stay-local} is @code{t}, VC also makes local version backups, so that simple diff and revert operations are @@ -2900,7 +2901,7 @@ the command is finished. For more information about windows in Emacs, With a numeric argument, @code{compare-windows} ignores changes in whitespace. If the variable @code{compare-ignore-case} is non-@code{nil}, the comparison ignores differences in case as well. -If the variable @code{compare-ignore-whitespace} is non-nil, +If the variable @code{compare-ignore-whitespace} is non-@code{nil}, @code{compare-windows} normally ignores changes in whitespace, and a prefix argument turns that off. From 468b711f631a3fd44d6b8b54c976b198f5726e4c Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sun, 27 Mar 2005 02:57:31 +0000 Subject: [PATCH 002/241] *** empty log message *** --- lisp/ChangeLog | 4 ++++ man/ChangeLog | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ac6f62b9a40..c408ff37928 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-26 Luc Teirlinck + + * autorevert.el (auto-revert-check-vc-info): Minor doc fix. + 2005-03-26 Dan Nicolaescu * term.el (term-move-columns): Fix face after extending a line. diff --git a/man/ChangeLog b/man/ChangeLog index 432fd8bad2c..e343ce68b54 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,11 @@ +2005-03-26 Luc Teirlinck + + * files.texi: Several small changes in addition to: + (Visiting): Change xref for Dialog Boxes to ref. + (Version Headers): Replace references to obsolete var + `vc-header-alist' with `vc-BACKEND-header'. + (Customizing VC): Update value of `vc-handled-backends'. + 2005-03-26 Glenn Morris * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section; @@ -49,7 +57,7 @@ * files.texi (Visiting): Fix cross-references introduced with the last change. - * xresources.texi (GTK resources): Fix last change. + * xresources.texi (GTK resources): Fix last change. 2005-03-26 Jay Belanger From f9478d4d2e6610294a32c73890a2205a7ba8bb5e Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sun, 27 Mar 2005 03:07:38 +0000 Subject: [PATCH 003/241] (auto-revert-check-vc-info): Minor doc fix. --- lisp/autorevert.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 control info every `auto-revert-interval' seconds. Nevertheless, it should not cause excessive CPU usage on a reasonably fast machine, if it does not apply to too many version controlled -buffers. CPU usage depends on the version control system" +buffers. CPU usage depends on the version control system." :group 'auto-revert :type 'boolean :version "22.1") From 73cba75d191ac148696f30afcca30e2777c683cf Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sun, 27 Mar 2005 03:34:12 +0000 Subject: [PATCH 004/241] (html-mode): Doc update. --- lisp/ChangeLog | 2 ++ lisp/textmodes/sgml-mode.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c408ff37928..c365fcbb30c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2005-03-26 Luc Teirlinck + * textmodes/sgml-mode.el (html-mode): Doc update. + * autorevert.el (auto-revert-check-vc-info): Minor doc fix. 2005-03-26 Dan Nicolaescu diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index 6fcf5869143..c4019d39fe5 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -1804,7 +1804,7 @@ have

Very Major Headlines

through
Very Minor Headlines

Paragraphs only need an opening tag. Line breaks and multiple spaces are ignored unless the text is

preformatted.
Text can be marked as -bold, italic or underlined using the normal M-g or +bold, italic or underlined using the normal M-o or Edit/Text Properties/Face commands. Pages can have named points and can link other points From f0ea280c6458216bdfadccf1c28b4d6e637a1ebf Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 27 Mar 2005 14:19:30 +0000 Subject: [PATCH 005/241] *** empty log message *** --- etc/NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 19f10bee98a..9e523a7b3d5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -254,6 +254,8 @@ in the region, rather than on all complete lines in the region. for matching the beginning and end of a symbol. A symbol is a non-empty sequence of either word or symbol constituent characters, as specified by the syntax table. +--- +*** rx.el has new corresponding `symbol-end' and `symbol-start' elements. ** Passing resources on the command line now works on MS Windows. You can use --xrm to pass resource settings to Emacs, overriding any From 8f59a4b0d6a9ab220ea5e2d83d9e512e8b95fb7f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 27 Mar 2005 14:23:09 +0000 Subject: [PATCH 006/241] (Fgoto_char): Fix docstring. Probably left-over from Emacs-20.1. --- src/editfns.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/editfns.c b/src/editfns.c index 0587d66bb0f..f77b9cafc80 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1,6 +1,6 @@ /* Lisp functions pertaining to editing. - Copyright (C) 1985,86,87,89,93,94,95,96,97,98,1999,2000,01,02,03,2004 - Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1987, 1989, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -265,10 +265,7 @@ clip_to_bounds (lower, num, upper) DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ", doc: /* Set point to POSITION, a number or marker. -Beginning of buffer is position (point-min), end is (point-max). -If the position is in the middle of a multibyte form, -the actual point is set at the head of the multibyte form -except in the case that `enable-multibyte-characters' is nil. */) +Beginning of buffer is position (point-min), end is (point-max). */) (position) register Lisp_Object position; { From 719d548a338e527b3e461cb130fe185da9abd631 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 27 Mar 2005 14:25:33 +0000 Subject: [PATCH 007/241] Move iso-acc to the obsolete subdir. --- lisp/{international => obsolete}/iso-acc.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename lisp/{international => obsolete}/iso-acc.el (99%) diff --git a/lisp/international/iso-acc.el b/lisp/obsolete/iso-acc.el similarity index 99% rename from lisp/international/iso-acc.el rename to 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 @@ ;;; iso-acc.el --- minor mode providing electric accent keys -;; Copyright (C) 1993, 1994, 1996, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1996, 2001, 2002, 2005 +;; Free Software Foundation, Inc. ;; Author: Johan Vromans ;; Maintainer: FSF @@ -487,5 +488,5 @@ Noninteractively, this operates on text from START to END." (add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup) -;;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 +;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 ;;; iso-acc.el ends here From a57e098f6126509df1020b2a4b9f600309104249 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 27 Mar 2005 14:27:36 +0000 Subject: [PATCH 008/241] *** empty log message *** --- etc/NEWS | 2 ++ lisp/ChangeLog | 25 +++++++++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 9e523a7b3d5..25af84ddd1c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -107,6 +107,8 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types. * Changes in Emacs 22.1 +** iso-acc.el is now obsolete. Use one of the latin input methods instead. + ** Languange environment and various default coding systems are setup more correctly according to the current locale name. If the locale name doesn't specify a charset, the default is what glibc defines. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c365fcbb30c..59888da5284 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -351,8 +351,7 @@ 2005-03-21 Lute Kamstra - * generic.el: Fix commentary section. Don't require cl for - compilation. + * generic.el: Fix commentary section. Don't require cl for compilation. (generic-mode-list): Add autoload cookie. (generic-use-find-file-hook, generic-lines-to-scan) (generic-find-file-regexp, generic-ignore-files-regexp) @@ -402,20 +401,27 @@ * tramp-smb.el (all): Remove debug construct for `with-parsed-tramp-file-name'. - (tramp-smb-prompt): Prompt can contain spaces inside directory - names. + (tramp-smb-prompt): Prompt can contain spaces inside directory names. (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file): No error message if DIRECTORY or FILENAME doesn't exist. (tramp-smb-open-connection): Check existence of `tramp-smb-program'. +2005-03-20 Stefan Monnier + + * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function): + Properly handle the case where the `m' or `s' command's argument is not + yet terminated. + (perl-indent-new-calculate): New function. + (perl-indent-line): Use it. + 2005-03-20 Miles Bader * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces in text-mode too. Change to new face names. - (breakpoint-enabled): Renamed from `breakpoint-enabled-bitmap-face'. + (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'. Add `:weight bold' attribute. - (breakpoint-disabled): Renamed from `breakpoint-disabled-bitmap-face'. + (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'. 2005-03-19 Juri Linkov @@ -432,8 +438,7 @@ 2005-03-19 Yoichi NAKAYAMA (tiny changes) - * finder.el (finder-current-item): Throw an error on an empty - line. + * finder.el (finder-current-item): Throw an error on an empty line. * man.el (Man-follow-manual-reference): If current-word returns nil, use "". @@ -472,8 +477,8 @@ 2005-03-19 Vinicius Jose Latorre - * ps-print.el (ps-generate-string-list, ps-generate-header-line): Use - functionp instead of symbolp and fboundp. Reported by Drkm + * ps-print.el (ps-generate-string-list, ps-generate-header-line): + Use functionp instead of symbolp and fboundp. Reported by Drkm . (ps-print-version): New version 6.6.6. From 91878d2b21e8aeef079d043d2617bf21ea3d0d9c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 27 Mar 2005 17:16:09 +0000 Subject: [PATCH 009/241] *** empty log message *** --- man/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/man/ChangeLog b/man/ChangeLog index e343ce68b54..61faf95989c 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,8 @@ +2005-03-27 Glenn Morris + + * programs.texi: Reformat and update copyright years. + (Fortran): Update section. + 2005-03-26 Luc Teirlinck * files.texi: Several small changes in addition to: From 40279251d4832bd4424e8b6acc04bfa6bd92b1fd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 27 Mar 2005 17:16:31 +0000 Subject: [PATCH 010/241] Reformat and update copyright years. (Fortran): Update section. --- man/programs.texi | 203 +++++++++++++++++++++++----------------------- 1 file changed, 100 insertions(+), 103 deletions(-) diff --git a/man/programs.texi b/man/programs.texi index 353cb85aa60..6855d57d327 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1,5 +1,6 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2005 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Programs, Building, Text, Top @chapter Editing Programs @@ -1801,11 +1802,11 @@ names. @cindex Fortran mode @cindex mode, Fortran - Fortran mode provides special motion commands for Fortran statements and -subprograms, and indentation commands that understand Fortran conventions -of nesting, line numbers and continuation statements. Fortran mode has -its own Auto Fill mode that breaks long lines into proper Fortran -continuation lines. + Fortran mode provides special motion commands for Fortran statements +and subprograms, and indentation commands that understand Fortran +conventions of nesting, line numbers and continuation statements. +Fortran mode has support for Auto Fill mode that breaks long lines into +proper Fortran continuation lines. Special commands for comments are provided because Fortran comments are unlike those of other languages. Built-in abbrevs optionally save @@ -1817,18 +1818,18 @@ runs the hook @code{fortran-mode-hook} (@pxref{Hooks}). @cindex Fortran77 and Fortran90 @findex f90-mode @findex fortran-mode - Fortran mode is meant for editing Fortran77 ``fixed format'' source -code. For editing the modern Fortran90 ``free format'' source code, -use F90 mode (@code{f90-mode}). Emacs normally uses Fortran mode for -files with extension @samp{.f}, @samp{.F} or @samp{.for}, and F90 mode -for the extension @samp{.f90}. GNU Fortran supports both kinds of -format. + Fortran mode is meant for editing Fortran77 ``fixed format'' (and also +``tab format'') source code. For editing the modern Fortran90 or +Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}). +Emacs normally uses Fortran mode for files with extension @samp{.f}, +@samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and +@samp{.f95}. GNU Fortran supports both kinds of format. @menu * Motion: Fortran Motion. Moving point by statements or subprograms. * Indent: Fortran Indent. Indentation commands for Fortran. * Comments: Fortran Comments. Inserting and aligning comments. -* Autofill: Fortran Autofill. Auto fill minor mode for Fortran. +* Autofill: Fortran Autofill. Auto fill support for Fortran. * Columns: Fortran Columns. Measuring columns for valid Fortran. * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. @end menu @@ -1837,8 +1838,9 @@ format. @subsection Motion Commands In addition to the normal commands for moving by and operating on -``defuns'' (Fortran subprograms---functions and subroutines), Fortran -mode provides special commands to move by statements. +``defuns'' (Fortran subprograms---functions and subroutines, as well as +modules for F90 mode), Fortran mode provides special commands to move by +statements. @table @kbd @kindex C-c C-n @r{(Fortran mode)} @@ -1896,7 +1898,7 @@ but moves backwards. Special commands and features are needed for indenting Fortran code in order to make sure various syntactic entities (line numbers, comment line indicators and continuation line flags) appear in the columns that are -required for standard Fortran. +required for standard, fixed (or tab) format Fortran. @menu * Commands: ForIndent Commands. Commands for indenting and filling Fortran. @@ -1911,7 +1913,7 @@ required for standard Fortran. @table @kbd @item C-M-j -Break the current line and set up a continuation line +Break the current line at point and set up a continuation line (@code{fortran-split-line}). @item M-^ Join this line to the previous line (@code{fortran-join-line}). @@ -1953,30 +1955,42 @@ point is in. This removes any excess statement continuations. @cindex Fortran continuation lines @vindex fortran-continuation-string - Most modern Fortran compilers allow two ways of writing continuation -lines. If the first non-space character on a line is in column 5, then -that line is a continuation of the previous line. We call this -@dfn{fixed format}. (In GNU Emacs we always count columns from 0.) The -variable @code{fortran-continuation-string} specifies what character to -put on column 5. A line that starts with a tab character followed by -any digit except @samp{0} is also a continuation line. We call this -style of continuation @dfn{tab format}. + Most Fortran77 compilers allow two ways of writing continuation lines. +If the first non-space character on a line is in column 5, then that +line is a continuation of the previous line. We call this @dfn{fixed +format}. (In GNU Emacs we always count columns from 0; but note that +the Fortran standard counts from 1.) The variable +@code{fortran-continuation-string} specifies what character to put in +column 5. A line that starts with a tab character followed by any digit +except @samp{0} is also a continuation line. We call this style of +continuation @dfn{tab format}. (Fortran90 introduced ``free format'', +with another style of continuation lines). @vindex indent-tabs-mode @r{(Fortran mode)} - Fortran mode can make either style of continuation line, but you -must specify which one you prefer. The value of the variable -@code{indent-tabs-mode} controls the choice: @code{nil} for fixed -format, and non-@code{nil} for tab format. You can tell which style -is presently in effect by the presence or absence of the string -@samp{Tab} in the mode line. +@vindex fortran-analyze-depth +@vindex fortran-tab-mode-default +@vindex fortran-tab-mode-string + Fortran mode can use either style of continuation line. When you +enter Fortran mode, it tries to deduce the proper continuation style +automatically from the buffer contents. It does this by scanning up to +@code{fortran-analyze-depth} (default 100) lines from the start of the +buffer. The first line that begins with either a tab character or six +spaces determines the choice. If the scan fails (for example, if the +buffer is new and therefore empty), the value of +@code{fortran-tab-mode-default} (@code{nil} for fixed format, and +non-@code{nil} for tab format) is used. You can tell which style is +presently in effect by the presence or absence of the string specified +by @code{fortran-tab-mode-string} (default @samp{/t}) in the mode line. - If the text on a line starts with the conventional Fortran -continuation marker @samp{$}, or if it begins with any non-whitespace -character in column 5, Fortran mode treats it as a continuation line. -When you indent a continuation line with @key{TAB}, it converts the line -to the current continuation style. When you split a Fortran statement -with @kbd{C-M-j}, the continuation marker on the newline is created -according to the continuation style. +@vindex fortran-continuation-string + If the text on a line starts with the Fortran continuation marker +specified by @code{fortran-continuation-string} (conventionally +@samp{$}), or if it begins with any non-whitespace character in column +5, Fortran mode treats it as a continuation line. When you indent a +continuation line with @key{TAB}, it converts the line to the current +continuation style. When you split a Fortran statement with +@kbd{C-M-j}, the continuation marker on the newline is created according +to the continuation style. The setting of continuation style affects several other aspects of editing in Fortran mode. In fixed format mode, the minimum column @@ -1986,17 +2000,6 @@ space character for whitespace. In tab format mode, the minimum column number for the statement body is 8, and the whitespace before column 8 must always consist of one tab character. -@vindex fortran-tab-mode-default -@vindex fortran-analyze-depth - When you enter Fortran mode for an existing file, it tries to deduce the -proper continuation style automatically from the file contents. The first -line that begins with either a tab character or six spaces determines the -choice. The variable @code{fortran-analyze-depth} specifies how many lines -to consider (at the beginning of the file); if none of those lines -indicates a style, then the variable @code{fortran-tab-mode-default} -specifies the style. If it is @code{nil}, that specifies fixed format, and -non-@code{nil} specifies tab format. - @node ForIndent Num @subsubsection Line Numbers @@ -2007,9 +2010,11 @@ through 4. (Columns always count from 0 in GNU Emacs.) @vindex fortran-line-number-indent Line numbers of four digits or less are normally indented one space. The variable @code{fortran-line-number-indent} controls this; it -specifies the maximum indentation a line number can have. Line numbers -are right-justified to end in column 4 unless that would require more -than this maximum indentation. The default value of the variable is 1. +specifies the maximum indentation a line number can have. The default +value of the variable is 1. Fortran mode tries to prevent line number +digits passing column 4, reducing the indentation below the specified +maximum if necessary. If @code{fortran-line-number-indent} has the +value 5, line numbers are right-justified to end in column 4. @vindex fortran-electric-line-number Simply inserting a line number is enough to indent it according to @@ -2063,53 +2068,58 @@ Extra indentation within each level of @samp{do} statement (default 3). @item fortran-if-indent Extra indentation within each level of @samp{if} statement (default 3). -This value is also used for extra indentation within each level of the -Fortran 90 @samp{where} statement. @item fortran-structure-indent -Extra indentation within each level of @samp{structure}, @samp{union}, or -@samp{map} statements (default 3). +Extra indentation within each level of @samp{structure}, @samp{union}, +@samp{map}, or @samp{interface} statements (default 3). @item fortran-continuation-indent Extra indentation for bodies of continuation lines (default 5). @item fortran-check-all-num-for-matching-do -If this is @code{nil}, indentation assumes that each @samp{do} statement -ends on a @samp{continue} statement. Therefore, when computing -indentation for a statement other than @samp{continue}, it can save time -by not checking for a @samp{do} statement ending there. If this is -non-@code{nil}, indenting any numbered statement must check for a -@samp{do} that ends there. The default is @code{nil}. +In Fortran77, a numbered @samp{do} statement is ended by any statement +with a matching line number. It is common (but not compulsory) to use a +@samp{continue} statement for this purpose. If this variable has a +non-@code{nil} value, indenting any numbered statement must check for a +@samp{do} that ends there. If you always end @samp{do} statements with +a @samp{continue} line (or if you use the more modern @samp{enddo}), +then you can speed up indentation by setting this variable to +@code{nil}. The default is @code{nil}. @item fortran-blink-matching-if -If this is @code{t}, indenting an @samp{endif} statement moves the -cursor momentarily to the matching @samp{if} statement to show where it -is. The default is @code{nil}. +If this is @code{t}, indenting an @samp{endif} (or @samp{enddo} +statement moves the cursor momentarily to the matching @samp{if} (or +@samp{do}) statement to show where it is. The default is @code{nil}. @item fortran-minimum-statement-indent-fixed -Minimum indentation for fortran statements when using fixed format +Minimum indentation for Fortran statements when using fixed format continuation line style. Statement bodies are never indented less than this much. The default is 6. @item fortran-minimum-statement-indent-tab -Minimum indentation for fortran statements for tab format continuation line +Minimum indentation for Fortran statements for tab format continuation line style. Statement bodies are never indented less than this much. The default is 8. @end table +The variables controlling the indentation of comments are described in +a separate section (@pxref{Fortran Comments}). + + @node Fortran Comments @subsection Fortran Comments - The usual Emacs comment commands assume that a comment can follow a line -of code. In Fortran, the standard comment syntax requires an entire line -to be just a comment. Therefore, Fortran mode replaces the standard Emacs -comment commands and defines some new variables. + The usual Emacs comment commands assume that a comment can follow a +line of code. In Fortran77, the standard comment syntax requires an +entire line to be just a comment. Therefore, Fortran mode replaces the +standard Emacs comment commands and defines some new variables. +@vindex fortran-comment-line-start Fortran mode can also handle the Fortran90 comment syntax where comments start with @samp{!} and can follow other text. Because only some Fortran77 compilers accept this syntax, Fortran mode will not insert such comments unless you have said in advance to do so. To do this, set the variable -@code{comment-start} to @samp{"!"} (@pxref{Variables}). +@code{fortran-comment-line-start} to @samp{"!"}. @table @kbd @item M-; @@ -2123,6 +2133,7 @@ Turn all lines of the region into comments, or (with argument) turn them back into real code (@code{fortran-comment-region}). @end table +@findex fortran-indent-comment @kbd{M-;} in Fortran mode is redefined as the command @code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this recognizes any kind of existing comment and aligns its text appropriately; @@ -2178,14 +2189,6 @@ never be indented at all, no matter what the value of lines are directives. Matching lines are never indented, and receive distinctive font-locking. -@vindex comment-line-start -@vindex comment-line-start-skip - Fortran mode introduces two variables @code{comment-line-start} and -@code{comment-line-start-skip}, which play for full-line comments the same -roles played by @code{comment-start} and @code{comment-start-skip} for -ordinary text-following comments. Normally these are set properly by -Fortran mode, so you do not need to change them. - The normal Emacs comment command @kbd{C-x ;} has not been redefined. If you use @samp{!} comments, this command can be used with them. Otherwise it is useless in Fortran mode. @@ -2204,34 +2207,28 @@ of the name never conflict because in Lisp and in Emacs it is always clear from the context which one is meant. @node Fortran Autofill -@subsection Fortran Auto Fill Mode +@subsection Auto Fill in Fortran Mode - Fortran Auto Fill mode is a minor mode which automatically splits -Fortran statements as you insert them when they become too wide. -Splitting a statement involves making continuation lines using -@code{fortran-continuation-string} (@pxref{ForIndent Cont}). This -splitting happens when you type @key{SPC}, @key{RET}, or @key{TAB}, and -also in the Fortran indentation commands. - -@findex fortran-auto-fill-mode - @kbd{M-x fortran-auto-fill-mode} toggles Fortran Auto Fill mode, -which is a variant of normal Auto Fill mode (@pxref{Filling}) designed -for Fortran programs. Fortran Auto Fill mode is a buffer-local minor -mode (@pxref{Minor Modes}). When Fortran Auto Fill mode is in effect, -the word @samp{Fill} appears in the mode line inside the parentheses. + Fortran mode has specialized support for Auto Fill mode, which is a +minor mode that automatically splits statements as you insert them when +they become too wide. Splitting a statement involves making +continuation lines using @code{fortran-continuation-string} +(@pxref{ForIndent Cont}). This splitting happens when you type +@key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran indentation +commands. You activate Auto Fill in Fortran mode in the normal way +(@pxref{Auto Fill}). @vindex fortran-break-before-delimiters - Fortran Auto Fill mode breaks lines at spaces or delimiters when the -lines get longer than the desired width (the value of @code{fill-column}). -The delimiters that Fortran Auto Fill mode may break at are @samp{,}, -@samp{'}, @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, and @samp{)}. -The line break comes after the delimiter if the variable + Auto Fill breaks lines at spaces or delimiters when the lines get +longer than the desired width (the value of @code{fill-column}). The +delimiters (besides whitespace) that Auto Fill may break at are +@samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>}, +and @samp{,}. The line break comes after the delimiter if the variable @code{fortran-break-before-delimiters} is @code{nil}. Otherwise (and by default), the break comes before the delimiter. - To enable this mode permanently, add a hook function to -@code{fortran-mode-hook} to execute @code{(fortran-auto-fill-mode 1)}. -@xref{Hooks}. + To enable Auto Fill in all Fortran buffers, add +@code{turn-on-auto-fill} to @code{fortran-mode-hook}. @xref{Hooks}. @node Fortran Columns @subsection Checking Columns in Fortran @@ -2280,7 +2277,7 @@ display. @findex fortran-window-create-momentarily @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily splits the current window horizontally, making a window 72 columns -wide, so you can see which lines that is too long. Type a space to +wide, so you can see any lines that are too long. Type a space to restore the normal width. @kindex C-u C-c C-w @r{(Fortran mode)} From 2314298c67182f618a166615974982090aae7ada Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 27 Mar 2005 17:33:49 +0000 Subject: [PATCH 011/241] (ForIndent Cont): Mention setting of indent-tabs-mode. --- man/programs.texi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/man/programs.texi b/man/programs.texi index 6855d57d327..62e0c31f331 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1981,6 +1981,8 @@ buffer is new and therefore empty), the value of non-@code{nil} for tab format) is used. You can tell which style is presently in effect by the presence or absence of the string specified by @code{fortran-tab-mode-string} (default @samp{/t}) in the mode line. +Fortran mode sets the value of @code{indent-tabs-mode} accordingly +(@pxref{Just Spaces}). @vindex fortran-continuation-string If the text on a line starts with the Fortran continuation marker From 11782fd64969a22bd54aa2e49932a7c98acf33ae Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:05:52 +0000 Subject: [PATCH 012/241] * dired.el (dired-mode-map): Add ellipsis to "Compare directories". --- lisp/dired.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/dired.el b/lisp/dired.el index b42d4f8cece..8ee19486a7e 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1252,7 +1252,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST." '("--")) (define-key map [menu-bar immediate compare-directories] - '(menu-item "Compare directories" dired-compare-directories + '(menu-item "Compare directories..." dired-compare-directories :help "Mark files with different attributes in two dired buffers")) (define-key map [menu-bar immediate backup-diff] '(menu-item "Compare with Backup" dired-backup-diff From bd649ca3ce53473b21e10678f03dccad7655bb1a Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:16:44 +0000 Subject: [PATCH 013/241] (menu-bar-file-menu): Remove ellipsis from "Recover Crashed Session". (menu-bar-search-menu): Add ellipsis to "Search tagged files". (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files". (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name". (menu-bar-goto-menu): Add ellipsis to "Tags Apropos". (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset". (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual". (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual". (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages". --- lisp/menu-bar.el | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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." '(menu-item "--")) (define-key menu-bar-file-menu [recover-session] - '(menu-item "Recover Crashed Session..." recover-session + '(menu-item "Recover Crashed Session" recover-session :enable (and auto-save-list-file-prefix (file-directory-p (file-name-directory auto-save-list-file-prefix)) @@ -298,7 +298,7 @@ A large number or nil slows down menu responsiveness." '(menu-item "Continue Tags Search" tags-loop-continue :help "Continue last tags search operation")) (define-key menu-bar-search-menu [tags-srch] - '(menu-item "Search tagged files" tags-search + '(menu-item "Search tagged files..." tags-search :help "Search for a regexp in all tagged files")) (define-key menu-bar-search-menu [separator-tag-search] '(menu-item "--")) @@ -342,7 +342,7 @@ A large number or nil slows down menu responsiveness." '(menu-item "Continue Replace" tags-loop-continue :help "Continue last tags replace operation")) (define-key menu-bar-replace-menu [tags-repl] - '(menu-item "Replace in tagged files" tags-query-replace + '(menu-item "Replace in tagged files..." tags-query-replace :help "Interactively replace a regexp in all tagged files")) (define-key menu-bar-replace-menu [separator-replace-tags] '(menu-item "--")) @@ -377,14 +377,14 @@ A large number or nil slows down menu responsiveness." (defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) (define-key menu-bar-goto-menu [set-tags-name] - '(menu-item "Set Tags File Name" visit-tags-table + '(menu-item "Set Tags File Name..." visit-tags-table :help "Tell Tags commands which tag table file to use")) (define-key menu-bar-goto-menu [separator-tag-file] '(menu-item "--")) (define-key menu-bar-goto-menu [apropos-tags] - '(menu-item "Tags Apropos" tags-apropos + '(menu-item "Tags Apropos..." tags-apropos :help "Find function/variables whose names match regexp")) (define-key menu-bar-goto-menu [next-tag-otherw] '(menu-item "Next Tag in Other Window" @@ -673,7 +673,7 @@ by \"Save Options\" in Custom buffers.") '("--")) (define-key menu-bar-options-menu [mouse-set-font] - '(menu-item "Set Font/Fontset" mouse-set-font + '(menu-item "Set Font/Fontset..." mouse-set-font :visible (display-multi-font-p) :help "Select a font from list of known fonts/fontsets")) @@ -1332,10 +1332,10 @@ key (or menu-item)")) (define-key menu-bar-manuals-menu [sep3] '("--")) (define-key menu-bar-manuals-menu [command] - '(menu-item "Find Command in Manual" Info-goto-emacs-command-node + '(menu-item "Find Command in Manual..." Info-goto-emacs-command-node :help "Display manual section that describes a command")) (define-key menu-bar-manuals-menu [key] - '(menu-item "Find Key in Manual" Info-goto-emacs-key-command-node + '(menu-item "Find Key in Manual..." Info-goto-emacs-key-command-node :help "Display manual section that describes a key")) (define-key menu-bar-help-menu [eliza] @@ -1369,7 +1369,7 @@ key (or menu-item)")) (define-key menu-bar-help-menu [sep2] '("--")) (define-key menu-bar-help-menu [finder-by-keyword] - '(menu-item "Find Emacs Packages..." finder-by-keyword + '(menu-item "Find Emacs Packages" finder-by-keyword :help "Find packages and features by keyword")) (define-key menu-bar-help-menu [manuals] (list 'menu-item "More Manuals" menu-bar-manuals-menu From 25b66519d2d7abc3b078d17ea3cb0ec582531eb4 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 28 Mar 2005 01:17:20 +0000 Subject: [PATCH 014/241] *** empty log message *** --- man/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/man/ChangeLog b/man/ChangeLog index 61faf95989c..78c3804274f 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,7 @@ +2005-03-27 Luc Teirlinck + + * commands.texi (Keys): M-o is now a prefix key. + 2005-03-27 Glenn Morris * programs.texi: Reformat and update copyright years. From 24258b53e762f1363abc7cf19d6a5c4668c8122b Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:18:22 +0000 Subject: [PATCH 015/241] (menu-bar-ediff-misc-menu, ediff-misc-menu): Remove ellipsis from "Ediff Manual", "Customize Ediff", "List Ediff Sessions", "Toggle use of separate control buffer frame", "Use separate frame for Ediff control buffer". --- lisp/ediff-hook.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 @@ )) (defvar ediff-misc-menu '("Ediff Miscellanea" - ["Ediff Manual..." ediff-documentation t] - ["Customize Ediff..." ediff-customize t] - ["List Ediff Sessions..." ediff-show-registry t] - ["Use separate frame for Ediff control buffer..." + ["Ediff Manual" ediff-documentation t] + ["Customize Ediff" ediff-customize t] + ["List Ediff Sessions" ediff-show-registry t] + ["Use separate frame for Ediff control buffer" ediff-toggle-multiframe :style toggle :selected (if (and (featurep 'ediff-util) @@ -242,14 +242,14 @@ ;; define ediff miscellanea (define-key menu-bar-ediff-misc-menu [emultiframe] - '("Toggle use of separate control buffer frame..." + '("Toggle use of separate control buffer frame" . ediff-toggle-multiframe)) (define-key menu-bar-ediff-misc-menu [eregistry] - '("List Ediff Sessions..." . ediff-show-registry)) + '("List Ediff Sessions" . ediff-show-registry)) (define-key menu-bar-ediff-misc-menu [ediff-cust] - '("Customize Ediff..." . ediff-customize)) + '("Customize Ediff" . ediff-customize)) (define-key menu-bar-ediff-misc-menu [ediff-doc] - '("Ediff Manual..." . ediff-documentation)) + '("Ediff Manual" . ediff-documentation)) ) ) ; emacs case From 3fb572907c991b253e9fb2ee4e26f58f6724515a Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 28 Mar 2005 01:19:01 +0000 Subject: [PATCH 016/241] (Keys): M-o is now a prefix key. --- man/commands.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h}, @kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x -n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x -6}, @key{ESC}, and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for +n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x 6}, +@key{ESC}, @kbd{M-o} and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for @kbd{C-h} and @kbd{C-x 6}.) But this list is not cast in concrete; it is just a matter of Emacs's standard key bindings. If you customize Emacs, you can make new prefix keys, or eliminate these. @xref{Key From b2a664c0ddc59f982ae3262a18398a0b891df9a9 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:19:46 +0000 Subject: [PATCH 017/241] (menu-bar-bookmark-map): Add ellipsis to "Jump to Bookmark", "Set Bookmark", "Insert Contents", "Insert Location", "Rename Bookmark", "Delete Bookmark". --- lisp/bookmark.el | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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." (define-key map [write] '("Save Bookmarks As..." . bookmark-write)) (define-key map [save] '("Save Bookmarks" . bookmark-save)) (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list)) - (define-key map [delete] '("Delete Bookmark" . bookmark-delete)) - (define-key map [rename] '("Rename Bookmark" . bookmark-rename)) - (define-key map [locate] '("Insert Location" . bookmark-locate)) - (define-key map [insert] '("Insert Contents" . bookmark-insert)) - (define-key map [set] '("Set Bookmark" . bookmark-set)) - (define-key map [jump] '("Jump to Bookmark" . bookmark-jump)) + (define-key map [delete] '("Delete Bookmark..." . bookmark-delete)) + (define-key map [rename] '("Rename Bookmark..." . bookmark-rename)) + (define-key map [locate] '("Insert Location..." . bookmark-locate)) + (define-key map [insert] '("Insert Contents..." . bookmark-insert)) + (define-key map [set] '("Set Bookmark..." . bookmark-set)) + (define-key map [jump] '("Jump to Bookmark..." . bookmark-jump)) map)) ;;;###autoload From 5938202c7df85400fe553745d8012f908fe827da Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:24:10 +0000 Subject: [PATCH 018/241] (Info-mode-menu): Remove ellipsis from "Index". Add ellipsis to "Lookup a String", "Lookup a string in all indices". Add `:active Info-index-alternatives' to "Next Matching Item". --- lisp/info.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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." :help "Go to menu of visited nodes"] ["Table of Contents" Info-toc :help "Go to table of contents"] - ("Index..." - ["Lookup a String" Info-index + ("Index" + ["Lookup a String..." Info-index :help "Look for a string in the index items"] - ["Next Matching Item" Info-index-next + ["Next Matching Item" Info-index-next :active Info-index-alternatives :help "Look for another occurrence of previous item"] - ["Lookup a string in all indices" info-apropos + ["Lookup a string in all indices..." info-apropos :help "Look for a string in the indices of all manuals"]) ["Edit" Info-edit :help "Edit contents of this node" :active Info-enable-edit] From 853f9bf3015c0e8a8d73b0bf7ba80f36d9da52fb Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:25:54 +0000 Subject: [PATCH 019/241] (wdired-change-to-wdired-mode): Mention `wdired-abort-changes' key in the initial message. --- lisp/wdired.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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'." (set-buffer-modified-p nil) (setq buffer-undo-list nil) (run-hooks 'wdired-mode-hook) - (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished"))) + (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished \ +or \\[wdired-abort-changes] to abort changes"))) ;; Protect the buffer so only the filenames can be changed, and put From ba40634b4f2bf06fdd8f1ec26073d73b8d58fdb0 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 28 Mar 2005 01:40:34 +0000 Subject: [PATCH 020/241] (auto-coding-alist): Associate non-ascii image filename extensions with `no-conversion'. --- lisp/ChangeLog | 34 ++++++++++++++++++++++++++++++++++ lisp/international/mule.el | 1 + 2 files changed, 35 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 59888da5284..62f84d0ce41 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,37 @@ +2005-03-28 Juri Linkov + + * dired.el (dired-mode-map): Add ellipsis to "Compare directories". + + * menu-bar.el (menu-bar-file-menu): Remove ellipsis from + "Recover Crashed Session". + (menu-bar-search-menu): Add ellipsis to "Search tagged files". + (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files". + (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name". + (menu-bar-goto-menu): Add ellipsis to "Tags Apropos". + (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset". + (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual". + (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual". + (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages". + + * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu): + Remove ellipsis from "Ediff Manual", "Customize Ediff", "List + Ediff Sessions", "Toggle use of separate control buffer frame", + "Use separate frame for Ediff control buffer". + + * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to + Bookmark", "Set Bookmark", "Insert Contents", "Insert Location", + "Rename Bookmark", "Delete Bookmark". + + * info.el (Info-mode-menu): Remove ellipsis from "Index". + Add ellipsis to "Lookup a String", "Lookup a string in all indices". + Add `:active Info-index-alternatives' to "Next Matching Item". + + * wdired.el (wdired-change-to-wdired-mode): + Mention `wdired-abort-changes' key in the initial message. + + * international/mule.el (auto-coding-alist): Associate non-ascii + image filename extensions with `no-conversion'. + 2005-03-26 Luc Teirlinck * textmodes/sgml-mode.el (html-mode): Doc update. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 1ec546e22fd..49635652bb2 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -1546,6 +1546,7 @@ text, and convert it in the temporary buffer. Otherwise, convert in-place." ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion) ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion) ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion) + ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion) ("/#[^/]+#\\'" . emacs-mule)) "Alist of filename patterns vs corresponding coding systems. Each element looks like (REGEXP . CODING-SYSTEM). From f141c9bb1c858fb3c74e16cb34f52440efe33184 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 28 Mar 2005 02:28:49 +0000 Subject: [PATCH 021/241] (Prefix Keys): facemenu-keymap is now on M-o. --- lispref/keymaps.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lispref/keymaps.texi b/lispref/keymaps.texi index f374472e101..01a4c31ba7e 100644 --- a/lispref/keymaps.texi +++ b/lispref/keymaps.texi @@ -456,9 +456,9 @@ key. key. @item -@cindex @kbd{M-g} +@cindex @kbd{M-o} @vindex facemenu-keymap -@code{facemenu-keymap} is the global keymap used for the @kbd{M-g} +@code{facemenu-keymap} is the global keymap used for the @kbd{M-o} prefix key. @c Emacs 19 feature From aaac12514d92237420d5d2834fe9dd4f2bbfc2ce Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 28 Mar 2005 02:43:22 +0000 Subject: [PATCH 022/241] (Other Font Lock Variables): font-lock-fontify-block is now bound to M-o M-o. --- lispref/ChangeLog | 7 +++++++ lispref/modes.texi | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lispref/ChangeLog b/lispref/ChangeLog index e6c901f786e..cf86afc4e45 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,10 @@ +2005-03-27 Luc Teirlinck + + * modes.texi (Other Font Lock Variables): `font-lock-fontify-block' + is now bound to M-o M-o. + + * keymaps.texi (Prefix Keys): `facemenu-keymap' is now on M-o. + 2005-03-26 Glenn Morris * calendar.texi: Delete file (and move contents to emacs-xtra.texi 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. @defvar font-lock-mark-block-function If this variable is non-@code{nil}, it should be a function that is called with no arguments, to choose an enclosing range of text for -refontification for the command @kbd{M-g M-g} +refontification for the command @kbd{M-o M-o} (@code{font-lock-fontify-block}). The function should report its choice by placing the region around it. From c5568a11c085c09d6acd6a3bf0fcf1e769115293 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 28 Mar 2005 03:17:53 +0000 Subject: [PATCH 023/241] (Prefix Keys): M-g is still a prefix key. --- lispref/keymaps.texi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lispref/keymaps.texi b/lispref/keymaps.texi index 01a4c31ba7e..59e2e19966d 100644 --- a/lispref/keymaps.texi +++ b/lispref/keymaps.texi @@ -463,9 +463,9 @@ prefix key. @c Emacs 19 feature @item -The other Emacs prefix keys are @kbd{C-x @@}, @kbd{C-x a i}, @kbd{C-x -@key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps that have no -special names. +The other Emacs prefix keys are @kbd{M-g}, @kbd{C-x @@}, @kbd{C-x a i}, +@kbd{C-x @key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps +that have no special names. @end itemize The keymap binding of a prefix key is used for looking up the event From 12566797d3f622212d165bb1d11df335e295dc4a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Mar 2005 14:36:25 +0000 Subject: [PATCH 024/241] (python-preoutput-leftover): New var. (python-preoutput-filter): Use it. (python-send-receive): Loop until all the result has been received. --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/python.el | 44 ++++++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 62f84d0ce41..46f5bdc0880 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-03-28 Stefan Monnier + + * progmodes/python.el (python-preoutput-leftover): New var. + (python-preoutput-filter): Use it. + (python-send-receive): Loop until all the result has been received. + 2005-03-28 Juri Linkov * dired.el (dired-mode-map): Add ellipsis to "Compare directories". diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 20af0aaf96e..10845b23630 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1098,28 +1098,40 @@ Don't save anything for STR matching `inferior-python-filter-regexp'." (defvar python-preoutput-continuation nil "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.") +(defvar python-preoutput-leftover nil) + ;; Using this stops us getting lines in the buffer like ;; >>> ... ... >>> ;; Also look for (and delete) an `_emacs_ok' string and call ;; `python-preoutput-continuation' if we get it. (defun python-preoutput-filter (s) "`comint-preoutput-filter-functions' function: ignore prompts not at bol." + (when python-preoutput-leftover + (setq s (concat python-preoutput-leftover s)) + (setq python-preoutput-leftover nil)) (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>")) - " " string-end)) - s) - (/= (let ((inhibit-field-text-motion t)) - (line-beginning-position)) - (point))) + " " string-end)) + s) + (/= (let ((inhibit-field-text-motion t)) + (line-beginning-position)) + (point))) + "") + ((string= s "_emacs_ok\n") + (when python-preoutput-continuation + (funcall python-preoutput-continuation) + (setq python-preoutput-continuation nil)) + "") + ((string-match "_emacs_out \\(.*\\)\n" s) + (setq python-preoutput-result (match-string 1 s)) + "") + ((string-match ".*\n" s) + s) + ((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s))) + (eq t (compare-strings s nil nil "_emacs_out " nil + (min (length "_emacs_out ") (length s))))) + (setq python-preoutput-leftover s) "") - ((string= s "_emacs_ok\n") - (when python-preoutput-continuation - (funcall python-preoutput-continuation) - (setq python-preoutput-continuation nil)) - "") - ((string-match "_emacs_out \\(.*\\)\n" s) - (setq python-preoutput-result (match-string 1 s)) - "") - (t s))) + (t s))) ;;;###autoload (defun run-python (&optional cmd noshow) @@ -1359,7 +1371,9 @@ The result is what follows `_emacs_out' in the output (or nil)." (let ((proc (python-proc))) (python-send-string string) (setq python-preoutput-result nil) - (accept-process-output proc 5) + (while (progn + (accept-process-output proc 5) + python-preoutput-leftover)) python-preoutput-result)) ;; Fixme: try to make it work with point in the arglist. Also, is From ba96f392009080f6262c8287635868e11ae56747 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Mar 2005 14:52:02 +0000 Subject: [PATCH 025/241] (window-buffer-height): Use count-screen-lines. --- lisp/ChangeLog | 2 ++ lisp/window.el | 21 +++++++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 46f5bdc0880..5fe346e9840 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2005-03-28 Stefan Monnier + * window.el (window-buffer-height): Use count-screen-lines. + * progmodes/python.el (python-preoutput-leftover): New var. (python-preoutput-filter): Use it. (python-send-receive): Loop until all the result has been received. 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." (defun window-buffer-height (window) "Return the height (in screen lines) of the buffer that WINDOW is displaying." - (save-excursion - (set-buffer (window-buffer window)) - (goto-char (point-min)) - (let ((ignore-final-newline - ;; If buffer ends with a newline, ignore it when counting height - ;; unless point is after it. - (and (not (eobp)) (eq ?\n (char-after (1- (point-max))))))) - (+ 1 (nth 2 (compute-motion (point-min) - '(0 . 0) - (- (point-max) (if ignore-final-newline 1 0)) - (cons 0 100000000) - nil - nil - window)))))) + (with-current-buffer (window-buffer window) + (max 1 + (count-screen-lines (point-min) (point-max) + ;; If buffer ends with a newline, ignore it when + ;; counting height unless point is after it. + (eobp) + window)))) (defun count-screen-lines (&optional beg end count-final-newline window) "Return the number of screen lines in the region. From 2d526287db4c389e17af4ab43d04dc53b0ebe0ed Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 28 Mar 2005 16:49:20 +0000 Subject: [PATCH 026/241] Bind `font-lock-fontify-block' to M-o M-o. --- lisp/ChangeLog | 4 ++++ lisp/font-lock.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5fe346e9840..f2dac559136 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-28 Luc Teirlinck + + * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o. + 2005-03-28 Stefan Monnier * window.el (window-buffer-height): Use count-screen-lines. diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 5054b320e74..6b86d3274ed 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -1097,7 +1097,7 @@ delimit the region to fontify." ((error quit) (message "Fontifying block...%s" error-data))))))) (if (boundp 'facemenu-keymap) - (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block)) + (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block)) ;;; End of Fontification functions. From 5e472af02dd1abba631eb1e9d13efbdbef650780 Mon Sep 17 00:00:00 2001 From: Reiner Steib Date: Mon, 28 Mar 2005 17:33:37 +0000 Subject: [PATCH 027/241] Fix entries according to RMS in : Please do not *ever* write "From so-and-so" in a change log entry. If someone else wrote the code you are installing, *always* put his name in the header line of the change. --- lisp/gnus/ChangeLog | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 5d15a6f9646..3c7c3d3d5c4 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -618,7 +618,7 @@ unless plugged. Disable the agent so that an open failure causes an error. -2004-10-18 Kevin Greiner for Reiner Steib +2004-10-18 Reiner Steib * gnus-agent.el (gnus-agent-fetched-hook): Add :version. (gnus-agent-go-online): Change :version. @@ -660,21 +660,21 @@ (gnus-convert-mark-converter-prompt) (gnus-convert-converter-needs-prompt): Fix use of property list. -2004-10-18 Kevin Greiner for Katsumi Yamaoka +2004-10-18 Katsumi Yamaoka * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. -2004-10-18 Kevin Greiner for Lars Magne Ingebrigtsen +2004-10-18 Lars Magne Ingebrigtsen * gnus-start.el (gnus-get-unread-articles-in-group): Don't do stuff for non-living groups. -2004-10-18 Kevin Greiner for Lars Magne Ingebrigtsen +2004-10-18 Lars Magne Ingebrigtsen * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. (gnus-agent-regenerate-group): Using nil messages aren't valid. -2004-10-18 Kevin Greiner for Lars Magne Ingebrigtsen +2004-10-18 Lars Magne Ingebrigtsen * gnus-agent.el (gnus-agent-read-agentview): Inline gnus-uncompress-range. @@ -691,7 +691,7 @@ message-send-mail-function. The change makes the agent real-time responsive to user changes to message-send-mail-function. -2004-10-18 Kevin Greiner for Reiner Steib +2004-10-18 Reiner Steib * gnus-start.el (gnus-get-unread-articles): Fix last commit. @@ -732,12 +732,12 @@ * gnus-util.el (gnus-rename-file): New function. -2004-10-18 Kevin Greiner for Katsumi Yamaoka +2004-10-18 Katsumi Yamaoka * gnus-agent.el (gnus-agent-regenerate-group): Activate the group when the group's active is not available. -2004-10-18 Kevin Greiner for Katsumi Yamaoka +2004-10-18 Katsumi Yamaoka * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to error. From a7ad007929b1d18cf0487901b9294a54a2e51a0c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Mar 2005 19:33:45 +0000 Subject: [PATCH 028/241] (PC-read-include-file-name-internal): Use test-completion. --- lisp/complete.el | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lisp/complete.el b/lisp/complete.el index 337af81de71..60bddd01f17 100644 --- a/lisp/complete.el +++ b/lisp/complete.el @@ -937,12 +937,11 @@ absolute rather than relative to some directory on the SEARCH-PATH." ((not completion-table) nil) ((eq action nil) (try-completion str2 completion-table nil)) ((eq action t) (all-completions str2 completion-table nil)) - ((eq action 'lambda) - (eq (try-completion str2 completion-table nil) t)))) + ((eq action 'lambda) (test-completion str2 completion-table nil)))) (funcall PC-old-read-file-name-internal string dir action))) (provide 'complete) -;;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 +;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 ;;; complete.el ends here From a42e7db0c44718304f265bdd2426d3a95393e34a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Mar 2005 19:58:58 +0000 Subject: [PATCH 029/241] (minibuffer-with-setup-hook): New macro. (find-file-read-args): Use it to avoid let-binding minibuffer-with-setup-hook (which breaks turning on/off file-name-shadow-mode while in the prompt). --- lisp/files.el | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index b6ef1dea31f..15d6f794e16 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -928,20 +928,31 @@ documentation for additional customization information." (defvar find-file-default nil "Used within `find-file-read-args'.") +(defmacro minibuffer-with-setup-hook (fun &rest body) + "Add FUN to `minibuffer-setup-hook' while executing BODY. +BODY should use the minibuffer at most once. +Recursive uses of the minibuffer will not be affected." + (declare (indent 1) (debug t)) + (let ((hook (make-symbol "setup-hook"))) + `(let ((,hook + (lambda () + ;; Clear out this hook so it does not interfere + ;; with any recursive minibuffer usage. + (remove-hook 'minibuffer-setup-hook ,hook) + (,fun)))) + (unwind-protect + (progn + (add-hook 'minibuffer-setup-hook ,hook) + ,@body) + (remove-hook 'minibuffer-setup-hook ,hook))))) + (defun find-file-read-args (prompt mustmatch) (list (let ((find-file-default (and buffer-file-name - (abbreviate-file-name buffer-file-name))) - (munge-default-fun - (lambda () - (setq minibuffer-default find-file-default) - ;; Clear out this hook so it does not interfere - ;; with any recursive minibuffer usage. - (pop minibuffer-setup-hook))) - (minibuffer-setup-hook - minibuffer-setup-hook)) - (add-hook 'minibuffer-setup-hook munge-default-fun) - (read-file-name prompt nil default-directory mustmatch)) + (abbreviate-file-name buffer-file-name)))) + (minibuffer-with-setup-hook + (lambda () (setq minibuffer-default find-file-default)) + (read-file-name prompt nil default-directory mustmatch))) t)) (defun find-file (filename &optional wildcards) From caf3c78f59f3bfee940b699cd3d5d33b35427a10 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Mar 2005 20:03:18 +0000 Subject: [PATCH 030/241] (sc-mail-field): Use assoc-string. (sc-get-address): Simplify regexps. --- lisp/ChangeLog | 12 ++++++++++++ lisp/mail/supercite.el | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f2dac559136..95ab41b8a86 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2005-03-28 Stefan Monnier + + * mail/supercite.el (sc-mail-field): Use assoc-string. + (sc-get-address): Simplify regexps. + + * files.el (minibuffer-with-setup-hook): New macro. + (find-file-read-args): Use it to avoid let-binding + minibuffer-with-setup-hook (which breaks turning on/off + file-name-shadow-mode while in the prompt). + + * complete.el (PC-read-include-file-name-internal): Use test-completion. + 2005-03-28 Luc Teirlinck * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o. diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index 3f24c952d89..371bb90b9cf 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -838,7 +838,7 @@ error occurs." "Return the mail header field value associated with FIELD. If there was no mail header with FIELD as its key, return the value of `sc-mumble'. FIELD is case insensitive." - (or (cdr (assoc (downcase field) sc-mail-info)) sc-mumble)) + (or (cdr (assoc-string field sc-mail-info 'case-fold)) sc-mumble)) (defun sc-mail-field-query (arg) "View the value of a mail field. @@ -916,8 +916,8 @@ Match addresses of the style ``.''" "Get the full email address path from FROM. AUTHOR is the author's name (which is removed from the address)." (let ((eos (length from))) - (if (string-match (concat "\\(^\\|^\"\\)" author - "\\(\\s +\\|\"\\s +\\)") from 0) + (if (string-match (concat "\\`\"?" (regexp-quote author) + "\"?\\s +") from 0) (let ((address (substring from (match-end 0) eos))) (if (and (= (aref address 0) ?<) (= (aref address (1- (length address))) ?>)) @@ -2054,5 +2054,5 @@ more information. Info node `(SC)Top'." (provide 'supercite) (run-hooks 'sc-load-hook) -;;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 +;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 ;;; supercite.el ends here From 30b1dff16c95ec230d71a34a76ece1ccc8cb8f60 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:01:11 +0000 Subject: [PATCH 031/241] (File Conveniences): Delete Auto Image File mode. (File Conveniences): Reorder entries. Document Thumbs mode. --- man/files.texi | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/man/files.texi b/man/files.texi index 8f5bf596238..7ed2baa0b93 100644 --- a/man/files.texi +++ b/man/files.texi @@ -3299,6 +3299,10 @@ Clear the cache; that is, remove all file names from it. @node File Conveniences @section Convenience Features for Finding Files + In this section, we introduce some convenient facilities for finding +recently-opened files, reading file names from a buffer, and viewing +image files. + @findex recentf-mode @vindex recentf-mode @findex recentf-save-list @@ -3309,25 +3313,22 @@ opened files. @kbd{M-x recentf-save-list} saves the current @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} edits it. -@findex auto-image-file-mode -@findex mode, auto-image-file -@cindex images, visiting -@cindex visiting image files -@vindex image-file-name-regexps -@vindex image-file-name-extensions - When Auto-image-file minor mode is enabled, visiting an image file -displays it as an image, not as text. Likewise, inserting an image -file into a buffer inserts it as an image. This works only when Emacs -can display the relevant image type. The variables -@code{image-file-name-extensions} or @code{image-file-name-regexps} -control which file names are recognized as containing images. - The @kbd{M-x ffap} command generalizes @code{find-file} with more powerful heuristic defaults (@pxref{FFAP}), often based on the text at point. Partial Completion mode offers other features extending @code{find-file}, which can be used with @code{ffap}. @xref{Completion Options}. +@findex thumbs-mode +@findex mode, thumbs + Thumbs mode is a major mode for viewing directories containing many +image files. To use it, type @kbd{M-x thumbs} and specify the +directory to view. The images in that directory will be displayed in +a @samp{Thumbs} buffer as @dfn{thumbnails}; type @kbd{RET} on a +thumbnail to view the full-size image. Thumbs mode requires the +@file{convert} program, which is part of the ImageMagick software +package. + @ignore arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 @end ignore From 9ae7d7afc72302369163b94654bb61437c69b355 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:01:31 +0000 Subject: [PATCH 032/241] (Wdired): New node. --- man/dired.texi | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) 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. * Hiding Subdirectories:: Making subdirectories visible or invisible. * Updating: Dired Updating. Discarding lines for files of no interest. * Find: Dired and Find. Using `find' to choose the files for Dired. +* Wdired:: Operating on files by editing the Dired buffer. * Misc: Misc Dired Features. Various other features. @end menu @@ -1103,6 +1104,39 @@ operations work, but do not always automatically update the buffer. Reverting the buffer with @kbd{g} deletes all inserted subdirectories, and erases all flags and marks. +@node Wdired +@section Editing the Dired Buffer + +@cindex wdired mode +@findex wdired-change-to-wdired-mode + Wdired is a special mode that allows you to perform file operations +by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands +for ``writable''.) To enter Wdired mode, type @kbd{M-x +wdired-change-to-wdired-mode} while in a Dired buffer. Alternatively, +use @samp{Edit File Names} in the @samp{Immediate} menu bar menu. + +@findex wdired-finish-edit + While in Wdired mode, you can rename files by editing the file names +displayed in the Dired buffer. All the ordinary Emacs editing +commands, including rectangle operations and @code{query-replace}, are +available for this. Once you are done editing, type @kbd{C-c C-c} +(@code{wdired-finish-edit}). This applies your changes and switches +back to ordinary Dired mode. + + Apart from simply renaming files, you can move a file to another +directory by typing in the new file name (either absolute or +relative). To mark a file for deletion, delete the entire filename. +To change the target of a symbolic link, just edit the target name +displayed next to the link name. + + The rest of the text in the buffer, such as the file sizes and +modification dates, is marked read-only, so you can't edit it. +However, if you set @code{wdired-allow-to-change-permissions} to +@code{t}, the file permission bits can also be edited. For example, +you can change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file +world-writable. These changes also take effect when you type @kbd{C-c +C-c}. + @node Misc Dired Features @section Other Dired Features From 10510ea3e3456b03fa2606fe224aa25f6148234e Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:02:51 +0000 Subject: [PATCH 033/241] (Top): Update list of subnodes of Dired. --- man/emacs.texi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/man/emacs.texi b/man/emacs.texi index 86b42baefc6..0cc3c1a6026 100644 --- a/man/emacs.texi +++ b/man/emacs.texi @@ -228,6 +228,7 @@ Here are some other nodes which are really inferiors of the ones already listed, mentioned here so you can get to them in one step: --- The Detailed Node Listing --- + --- These nodes are subnodes of the ones above --- The Organization of the Screen @@ -676,6 +677,9 @@ Dired, the Directory Editor * Hiding Subdirectories:: Making subdirectories visible or invisible. * Dired Updating:: Discarding lines for files of no interest. * Dired and Find:: Using `find' to choose the files for Dired. +* Dired and Find:: Using `find' to choose the files for Dired. +* Wdired:: Operating on files by editing the Dired buffer. +* Misc Dired Features:: Various other features. The Calendar and the Diary From 05ff843ed70c883c6dd4217dabd0f916d2b9fd9f Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:04:23 +0000 Subject: [PATCH 034/241] (Top): Update list of subnodes of building.texi. --- man/emacs.texi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/man/emacs.texi b/man/emacs.texi index 0cc3c1a6026..2aaa1ff8353 100644 --- a/man/emacs.texi +++ b/man/emacs.texi @@ -564,6 +564,8 @@ Compiling and Testing Programs * Compilation Mode:: The mode for visiting compiler errors. * Compilation Shell:: Customizing your shell properly for use in the compilation buffer. +* Grep Searching:: Searching with grep. +* Flymake:: Finding syntax errors on the fly. * Debuggers:: Running symbolic debuggers for non-Lisp programs. * Executing Lisp:: Various modes for editing Lisp programs, with different facilities for running From ff994d963a52d9d2ade4a95c91cda778aed256e4 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:04:39 +0000 Subject: [PATCH 035/241] (Flymake): New node. --- man/building.texi | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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. * Compilation Shell:: Customizing your shell properly for use in the compilation buffer. * Grep Searching:: Searching with grep. +* Flymake:: Finding syntax errors on the fly. * Debuggers:: Running symbolic debuggers for non-Lisp programs. * Executing Lisp:: Various modes for editing Lisp programs, with different facilities for running @@ -337,6 +338,31 @@ initial default for the command---one that runs both @code{find} and @code{grep}, so as to search every file in a directory tree. See also the @code{find-grep-dired} command, in @ref{Dired and Find}. +@node Flymake +@section Finding Syntax Errors On The Fly +@cindex checking syntax + + Flymake mode is a minor mode that performs on-the-fly syntax +checking for many programming and markup languages, including C, C++, +Perl, HTML, and @TeX{}/La@TeX{}. It is somewhat analogous to Flyspell +mode, which performs spell checking for ordinary human languages in a +similar fashion (@pxref{Spelling}). As you edit a file, Flymake mode +runs an appropriate syntax checking tool in the background, using a +temporary copy of the buffer. It then parses the error and warning +messages, and highlights the erroneous lines in the buffer. The +syntax checking tool used depends on the language; for example, for +C/C++ files this is usually the C compiler. Flymake can also use +build tools such as @code{make} for checking complicated projects. + + To activate Flymake mode, type @kbd{M-x flymake-mode}. You can move +to the errors spotted by Flymake mode with @kbd{M-x +flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To +display any error messages associated with the current line, use +@kbd{M-x flymake-display-err-menu-for-current-line}. + + For more details about using Flymake, see @ref{Top, Flymake, +Flymake, flymake, The Flymake Manual}. + @node Debuggers @section Running Debuggers Under Emacs @cindex debuggers From 617f06a8c277be4fee8b45cba73f544ed0451040 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:05:54 +0000 Subject: [PATCH 036/241] (Function Keys): Document kp- event types and keypad-setup package. --- man/custom.texi | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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: (global-set-key [H-M-right] 'forward-word) @end example +@cindex keypad + Many keyboards have a ``numeric keypad'' on the right hand side. +The numeric keys in the keypad double up as cursor motion keys, +toggled by a key labelled @samp{Num Lock}. By default, Emacs +translates these keys to the corresponding keys in the main keyboard +(@pxref{Keyboard Translations}). For example, when @samp{Num Lock} is +on, the key labelled @samp{8} on the numeric keypad produces +@code{kp-8}, which is translated to @kbd{8}; when @samp{Num Lock} is +off, the same key produces @code{kp-up}, which is translated to +@key{UP}. If you rebind a key such as @kbd{8} or @key{UP}, it affects +the equivalent keypad key too. However, if you rebind a @samp{kp-} +key directly, that won't affect its non-keypad equivalent. + + Emacs provides a convenient method for binding the numeric keypad +keys, using the variables @code{keypad-setup}, +@code{keypad-numlock-setup}, @code{keypad-shifted-setup}, and +@code{keypad-numlock-shifted-setup}. These can be found in the +@samp{keyboard} customization group (@pxref{Easy Customization}). You +can rebind the keys to perform other tasks, such as issuing numeric +prefix arguments. + @node Named ASCII Chars @subsection Named @acronym{ASCII} Control Characters From 0d937faf65c284d5a70c42b143380a7f9e7ae9a0 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:07:34 +0000 Subject: [PATCH 037/241] (Specify Coding): Document recode-region and recode-file-name. --- man/mule.texi | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/man/mule.texi b/man/mule.texi index 54952fa08fa..8e31afe488f 100644 --- a/man/mule.texi +++ b/man/mule.texi @@ -928,6 +928,9 @@ files. @item C-x @key{RET} X @var{coding} @key{RET} Use coding system @var{coding} for transferring @emph{one} selection---the next one---to or from the window system. + +@item M-x recode-region +Convert the region from a previous coding system to a new one. @end table @kindex C-x RET f @@ -1056,6 +1059,12 @@ corresponding buffer. The default for translation of process input and output depends on the current language environment. +@findex recode-region + If a piece of text has already been inserted into a buffer using the +wrong coding system, you can decode it again using @kbd{M-x +recode-region}. This prompts you for the old coding system and the +desired coding system, and acts on the text in the region. + @vindex file-name-coding-system @cindex file names with non-@acronym{ASCII} characters @findex set-file-name-coding-system @@ -1084,6 +1093,12 @@ these buffers under the visited file name, saving may use the wrong file name, or it may get an error. If such a problem happens, use @kbd{C-x C-w} to specify a new file name for that buffer. +@findex recode-file-name + If a mistake occurs when encoding a file name, use the command +command @kbd{M-x recode-file-name} to change the file name's coding +system. This prompts for an existing file name, its old coding +system, and the coding system to which you wish to convert. + @vindex locale-coding-system @cindex decoding non-@acronym{ASCII} keyboard input on X The variable @code{locale-coding-system} specifies a coding system From 8758a7da945582fb8285953ab81a49054fe733f9 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:09:23 +0000 Subject: [PATCH 038/241] (Program Modes): Add Conf mode and DNS mode. --- man/ChangeLog | 25 +++++++++++++++++++++++++ man/programs.texi | 12 +++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/man/ChangeLog b/man/ChangeLog index 78c3804274f..9c3279b211d 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,28 @@ +2005-03-28 Richard M. Stallman + + * emacs.texi (Top): Update list of subnodes of Dired. + Likewise for building.texi. + + * files.texi (File Conveniences): Delete Auto Image File mode. + +2005-03-28 Chong Yidong + + * building.texi (Flymake): New node. + + * custom.texi (Function Keys): Document kp- event types and + keypad-setup package. + + * dired.texi (Wdired): New node. + + * files.texi (File Conveniences): Reorder entries. + Explain how to turn on Auto-image-file mode. + Document Thumbs mode. + + * mule.texi (Specify Coding): Document recode-region and + recode-file-name. + + * programs.texi (Program Modes): Add Conf mode and DNS mode. + 2005-03-27 Luc Teirlinck * commands.texi (Keys): M-o is now a prefix key. diff --git a/man/programs.texi b/man/programs.texi index 62e0c31f331..67262e99e96 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -81,17 +81,19 @@ and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}. @cindex Shell-script mode @cindex Delphi mode @cindex PostScript mode +@cindex Conf mode +@cindex DNS mode The existing programming language major modes include Lisp, Scheme (a variant of Lisp) and the Scheme-based DSSSL expression language, Ada, ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s companion for font creation), Modula2, Objective-C, Octave, Pascal, -Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. There is -also a major mode for makefiles, called Makefile mode. An alternative -mode for Perl is called CPerl mode. Modes are available for the -scripting languages of the common GNU and Unix shells, VMS DCL, and +Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. An +alternative mode for Perl is called CPerl mode. Modes are available for +the scripting languages of the common GNU and Unix shells, VMS DCL, and MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for -editing various sorts of configuration files. +editing makefiles, DNS master files, and various sorts of configuration +files. @kindex DEL @r{(programming modes)} @findex c-electric-backspace From 1d7485128080719d798c2865aea75f20b3cf850d Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:11:16 +0000 Subject: [PATCH 039/241] (Antinews): Mention `G' interactive code. --- lispref/anti.texi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lispref/anti.texi b/lispref/anti.texi index a744ddf421b..458409f2603 100644 --- a/lispref/anti.texi +++ b/lispref/anti.texi @@ -237,6 +237,10 @@ longer accept lists of strings or hash tables (it will still accept alists, obarrays, and functions.) In addition, the function @code{test-completion} is no longer available. +@item +The @samp{G} interactive code character is no longer supported. +Use @samp{F} instead. + @item Arbitrary Lisp functions can no longer be recorded into @code{buffer-undo-list}. As a consequence, @code{yank-undo-function} From 6b7abae0d005704f456671b8fa571ce4ca3aeb15 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:11:28 +0000 Subject: [PATCH 040/241] (Compilation Tips): Mention benchmark.el. --- lispref/tips.texi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lispref/tips.texi b/lispref/tips.texi index c029ee1d451..538affd7450 100644 --- a/lispref/tips.texi +++ b/lispref/tips.texi @@ -451,6 +451,13 @@ Lisp programs. Profile your program with the @file{elp} library. See the file @file{elp.el} for instructions. +@item +@cindex @file{benchmark.el} +@cindex benchmarking +Check the speed of individual Emacs Lisp forms using the +@file{benchmark} library. See the functions @code{benchmark-run} and +@code{benchmark-run-compiled} in @file{benchmark.el}. + @item Use iteration rather than recursion whenever possible. Function calls are slow in Emacs Lisp even when a compiled function From 10787f7a8a12e4f6b809852170e55ceef0b8e8d2 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:16:48 +0000 Subject: [PATCH 041/241] (Fortran): Small fixes to previous changes. --- man/programs.texi | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/man/programs.texi b/man/programs.texi index 67262e99e96..74932174c6b 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1980,16 +1980,13 @@ buffer. The first line that begins with either a tab character or six spaces determines the choice. If the scan fails (for example, if the buffer is new and therefore empty), the value of @code{fortran-tab-mode-default} (@code{nil} for fixed format, and -non-@code{nil} for tab format) is used. You can tell which style is -presently in effect by the presence or absence of the string specified -by @code{fortran-tab-mode-string} (default @samp{/t}) in the mode line. -Fortran mode sets the value of @code{indent-tabs-mode} accordingly -(@pxref{Just Spaces}). +non-@code{nil} for tab format) is used. @samp{/t} in the mode line +indicates tab format is selected. Fortran mode sets the value of +@code{indent-tabs-mode} accordingly (@pxref{Just Spaces}). @vindex fortran-continuation-string If the text on a line starts with the Fortran continuation marker -specified by @code{fortran-continuation-string} (conventionally -@samp{$}), or if it begins with any non-whitespace character in column +@samp{$}, or if it begins with any non-whitespace character in column 5, Fortran mode treats it as a continuation line. When you indent a continuation line with @key{TAB}, it converts the line to the current continuation style. When you split a Fortran statement with @@ -2107,8 +2104,7 @@ default is 8. @end table The variables controlling the indentation of comments are described in -a separate section (@pxref{Fortran Comments}). - +the following section. @node Fortran Comments @subsection Fortran Comments @@ -2225,11 +2221,11 @@ commands. You activate Auto Fill in Fortran mode in the normal way @vindex fortran-break-before-delimiters Auto Fill breaks lines at spaces or delimiters when the lines get longer than the desired width (the value of @code{fill-column}). The -delimiters (besides whitespace) that Auto Fill may break at are +delimiters (besides whitespace) that Auto Fill can break at are @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>}, -and @samp{,}. The line break comes after the delimiter if the variable -@code{fortran-break-before-delimiters} is @code{nil}. Otherwise (and by -default), the break comes before the delimiter. +and @samp{,}. The line break comes after the delimiter if the +variable @code{fortran-break-before-delimiters} is @code{nil}. +Otherwise (and by default), the break comes before the delimiter. To enable Auto Fill in all Fortran buffers, add @code{turn-on-auto-fill} to @code{fortran-mode-hook}. @xref{Hooks}. From a20cba2c77f7c6ffe6886c1378e7b260274ebe74 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:30:06 +0000 Subject: [PATCH 042/241] Minor fixes to previous change. --- man/calendar.texi | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/man/calendar.texi b/man/calendar.texi index 747a6b822df..999c29dae06 100644 --- a/man/calendar.texi +++ b/man/calendar.texi @@ -433,7 +433,7 @@ click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays} from the menu that appears. Either way, this displays the holidays for that date, in the echo area if they fit there, otherwise in a separate window. If the variable @code{view-calendar-holidays-initially} is -non-@code{nil}, holidays are displayed when the calendar is created. +non-@code{nil}, creating the calendar displays holidays in this way. @kindex x @r{(Calendar mode)} @findex mark-calendar-holidays @@ -449,9 +449,8 @@ both to the currently visible months and to other months that subsequently become visible by scrolling. To turn marking off and erase the current marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is -non-@code{nil}, holidays are marked in the calendar when it is created -(or recomputed). - +non-@code{nil}, creating or updating the calendar marks holidays +automatically. @kindex a @r{(Calendar mode)} @findex list-calendar-holidays @@ -1005,13 +1004,14 @@ of the new window shows the date of the diary entries and any holidays that fall on that date. If you specify a numeric argument with @kbd{d}, it shows all the diary entries for that many successive days. Thus, @kbd{2 d} displays all the entries for the selected date and for the -following day. If the variable @code{view-diary-entries-initially} is -non-@code{nil}, the diary entries for the current date are displayed -when the calendar is created (provided the current date is visible). +following day. Another way to display the diary entries for a date is to click @kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from -the menu that appears. +the menu that appears. If the variable +@code{view-diary-entries-initially} is non-@code{nil}, creating the +calendar also lists diary entries for the current date (provided the +current date is visible). @kindex m @r{(Calendar mode)} @findex mark-diary-entries @@ -1023,10 +1023,10 @@ with multiple faces is not available). @inforef{Calendar Customizing, diary-entry-marker, emacs-xtra}. The command applies both to the currently visible months and to other months that subsequently become visible by scrolling. To turn marking off and erase the current marks, -type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). If -the variable @code{mark-diary-entries-in-calendar} is non-@code{nil}, -diary dates are marked in the calendar when it is created (or -recomputed). +type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). +If the variable @code{mark-diary-entries-in-calendar} is +non-@code{nil}, creating or updating the calendar marks diary dates +automatically. @kindex s @r{(Calendar mode)} @findex show-all-diary-entries @@ -1034,14 +1034,12 @@ recomputed). the @kbd{s} command. Display of selected diary entries uses the selective display feature -to hide entries that don't apply. - - The diary buffer as you see it is an illusion, so simply printing the -buffer does not print what you see on your screen. There is a special -command to print hard copy of the diary buffer @emph{as it appears}; -this command is @kbd{M-x print-diary-entries}. It sends the data -directly to the printer. You can customize it like @code{lpr-region} -(@pxref{Hardcopy}). +to hide entries that don't apply. The diary buffer as you see it is +an illusion, so simply printing the buffer does not print what you see +on your screen. There is a special command to print hard copy of the +diary buffer @emph{as it appears}; this command is @kbd{M-x +print-diary-entries}. It sends the data directly to the printer. You +can customize it like @code{lpr-region} (@pxref{Hardcopy}). @findex diary The command @kbd{M-x diary} displays the diary entries for the current From f60a6f87ff45773b0d1737ef8d8d2b83269e34a6 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 21:30:15 +0000 Subject: [PATCH 043/241] *** empty log message *** --- etc/NEWS | 22 ++++++++++++++++++++++ lispref/ChangeLog | 6 ++++++ man/ChangeLog | 4 ++++ 3 files changed, 32 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 25af84ddd1c..50b074849cf 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -109,6 +109,7 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types. ** iso-acc.el is now obsolete. Use one of the latin input methods instead. +--- ** Languange environment and various default coding systems are setup more correctly according to the current locale name. If the locale name doesn't specify a charset, the default is what glibc defines. @@ -259,6 +260,7 @@ specified by the syntax table. --- *** rx.el has new corresponding `symbol-end' and `symbol-start' elements. ++++ ** Passing resources on the command line now works on MS Windows. You can use --xrm to pass resource settings to Emacs, overriding any existing values. For example: @@ -841,6 +843,7 @@ possible matches. the current Info node name into the kill ring. With a zero prefix arg, puts the node name inside the `info' function call. +--- *** New face `info-xref-visited' distinguishes visited nodes from unvisited and a new option `Info-fontify-visited-nodes' to control this. @@ -852,6 +855,7 @@ references and following them calls `browse-url'. If you prefer the old behavior, you can set the new user option `Info-hide-note-references' to nil. +--- *** Images in Info pages are supported. Info pages show embedded images, in Emacs frames with image support. Info documentation that includes images, processed with makeinfo @@ -938,6 +942,7 @@ horizontal scroll bars in a frame or window. +++ ** Under X, mouse-wheel-mode is turned on by default. ++++ ** The X resource useXIM can be used to turn off use of XIM, which may speed up Emacs with slow networking to the X server. @@ -1003,6 +1008,7 @@ You can now put the init files .emacs and .emacs_SHELL under instead. The updated skeleton-insert docstring explains these new features along with other details of skeleton construction. +--- ** MH-E changes. Upgraded to MH-E version 7.82. There have been major changes since @@ -1236,6 +1242,7 @@ when Emacs visits them. default, all trivial operations involving whole lines are performed automatically. The game uses faces for better visual feedback. +--- ** The new variable `x-select-request-type' controls how Emacs requests X selection. The default value is nil, which means that Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, @@ -2411,6 +2418,7 @@ used to effect hiding for hideshow minor mode. Integration with isearch handles the overlay property `display' specially, preserving it during temporary overlay showing in the course of an isearch operation. ++++ ** New command `recode-region' decodes the region again by a specified coding system. @@ -2425,10 +2433,12 @@ section { }). Many files under /etc/, or with suffixes like .cf through .config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are recognized. ++++ ** The new package dns-mode.el add syntax highlight of DNS master files. The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used to increment the SOA serial. ++++ ** The new package flymake.el does on-the-fly syntax checking of program source files. See the Flymake's Info manual for more details. @@ -2436,9 +2446,11 @@ source files. See the Flymake's Info manual for more details. of hierarchical data as an outline. For example, the tree-widget is well suited to display a hierarchy of directories and files. ++++ ** The wdired.el package allows you to use normal editing commands on Dired buffers to change filenames, permissions, etc... ++++ ** The thumbs.el package allows you to preview image files as thumbnails and can be invoked from a Dired buffer. @@ -2451,6 +2463,7 @@ and can be invoked from a Dired buffer. ** The new global minor mode `size-indication-mode' (off by default) shows the size of accessible part of the buffer on the mode line. +--- ** GDB-Script-mode is used for files like .gdbinit. --- @@ -2506,6 +2519,7 @@ versions of cua.el and cua-mode.el. To ensure proper operation, you must remove older versions of cua.el or cua-mode.el as well as the loading and customization of those packages from the .emacs file. ++++ ** The new keypad setup package provides several common bindings for the numeric keypad which is available on most keyboards. The numeric keypad typically has the digits 0 to 9, a decimal point, keys marked @@ -2633,6 +2647,7 @@ There is also Global Reveal mode which affects all buffers. ** The new package ibuffer provides a powerful, completely customizable replacement for buff-menu.el. ++++ ** The new package table.el implements editable, WYSIWYG, embedded `text tables' in Emacs buffers. It simulates the effect of putting these tables in a special major mode. The package emulates WYSIWYG @@ -2655,17 +2670,20 @@ mode-lines in inverse-video. --- ** cplus-md.el has been removed to avoid problems with Custom. ++++ ** New package benchmark.el contains simple support for convenient timing measurements of code (including the garbage collection component). --- ** The new Lisp library fringe.el controls the appearance of fringes. +--- ** `cfengine-mode' is a major mode for editing GNU Cfengine configuration files. * Incompatible Lisp Changes in Emacs 22.1 ++++ ** The new interactive-specification `G' reads a file name much like `F', but if the input is a directory name (even defaulted), it returns just the directory name. @@ -3205,6 +3223,7 @@ contents are detected automatically. However, certain implicit changes to mode lines, header lines, or display properties may require forcing an explicit window update. +--- ** New function `redirect-debugging-output' can be used to redirect debugging output on the stderr file handle to a file. @@ -4405,6 +4424,7 @@ formerly used for that purpose is now an alias for locale-coding-system. display a prompt but don't use the minibuffer, now display the prompt using the text properties (esp. the face) of the prompt string. +--- ** New function x-send-client-message sends a client message when running under X. @@ -4414,6 +4434,7 @@ all overlays in the buffer by just calling (remove-overlay). ** New packages: ++++ *** The new package gdb-ui.el provides an enhanced graphical interface to GDB. You can interact with GDB through the GUD buffer in the usual way, but there are also further buffers which control the execution and describe the @@ -4430,6 +4451,7 @@ current syntactic context (as returned by parse-partial-sexp). binary data structures, such as network packets, to and from Lisp data structures. +--- *** The TCL package tcl-mode.el was replaced by tcl.el. This was actually done in Emacs-21.1, and was not documented. diff --git a/lispref/ChangeLog b/lispref/ChangeLog index cf86afc4e45..232e992e658 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,9 @@ +2005-03-26 Chong Yidong + + * anti.texi (Antinews): Mention `G' interactive code. + + * tips.texi (Compilation Tips): Mention benchmark.el. + 2005-03-27 Luc Teirlinck * modes.texi (Other Font Lock Variables): `font-lock-fontify-block' diff --git a/man/ChangeLog b/man/ChangeLog index 9c3279b211d..7d0c98af9d2 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,5 +1,9 @@ 2005-03-28 Richard M. Stallman + * calendar.texi: Minor fixes to previous change. + + * programs.texi (Fortran): Small fixes to previous changes. + * emacs.texi (Top): Update list of subnodes of Dired. Likewise for building.texi. From c70a4df6d2e683a591e7487c7940f7f18f5af65e Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Mar 2005 21:31:14 +0000 Subject: [PATCH 044/241] (Fexpand_file_name): Use IS_DEVICE_SEP. (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p. (Ffile_name_absolute_p): Use it. (search_embedded_absfilename): New fun, extracted from Fsubstitute_in_file_name. Use file_name_absolute_p. Free the pw data after use. (Fsubstitute_in_file_name): Use it. After cutting a prefix, re-check file-name-handler. --- src/ChangeLog | 11 ++++ src/fileio.c | 179 +++++++++++++++++++++++++------------------------- 2 files changed, 99 insertions(+), 91 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4ea174bdc60..1a5561160d0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2005-03-28 Stefan Monnier + + * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP. + (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p. + (Ffile_name_absolute_p): Use it. + (search_embedded_absfilename): New fun, extracted from + Fsubstitute_in_file_name. Use file_name_absolute_p. + Free the pw data after use. + (Fsubstitute_in_file_name): Use it. + After cutting a prefix, re-check file-name-handler. + 2005-03-26 Lennart Borgman * w32term.h (x_output): add focus_state. diff --git a/src/fileio.c b/src/fileio.c index dbbcace1212..58efa38c254 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1014,7 +1014,7 @@ probably use `make-temp-file' instead, except in three circumstances: DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, doc: /* Convert filename NAME to absolute, and canonicalize it. Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative - (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, +\(does not start with slash); if DEFAULT-DIRECTORY is nil or missing, the current buffer's value of default-directory is used. File name components that are `.' are removed, and so are file name components followed by `..', along with the `..' itself; @@ -1464,7 +1464,7 @@ See also the function `substitute-in-file-name'. */) indirectly by prepending newdir to nm if necessary, and using cwd (or the wd of newdir's drive) as the new newdir. */ - if (IS_DRIVE (newdir[0]) && newdir[1] == ':') + if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) { drive = newdir[0]; newdir += 2; @@ -1487,7 +1487,7 @@ See also the function `substitute-in-file-name'. */) } /* Strip off drive name from prefix, if present. */ - if (IS_DRIVE (newdir[0]) && newdir[1] == ':') + if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) { drive = newdir[0]; newdir += 2; @@ -1721,7 +1721,7 @@ See also the function `substitute-in-file-name'. */) DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, "Convert FILENAME to absolute, and canonicalize it.\n\ Second arg DEFAULT is directory to start with if FILENAME is relative\n\ - (does not start with slash); if DEFAULT is nil or missing,\n\ +\(does not start with slash); if DEFAULT is nil or missing,\n\ the current buffer's value of default-directory is used.\n\ Filenames containing `.' or `..' as components are simplified;\n\ initial `~/' expands to your home directory.\n\ @@ -2040,6 +2040,75 @@ See also the function `substitute-in-file-name'.") } #endif +/* If /~ or // appears, discard everything through first slash. */ +static int +file_name_absolute_p (filename) + const unsigned char *filename; +{ + return + (IS_DIRECTORY_SEP (*filename) || *filename == '~' +#ifdef VMS + /* ??? This criterion is probably wrong for '<'. */ + || index (filename, ':') || index (filename, '<') + || (*filename == '[' && (filename[1] != '-' + || (filename[2] != '.' && filename[2] != ']')) + && filename[1] != '.') +#endif /* VMS */ +#ifdef DOS_NT + || (IS_DRIVE (*filename) && IS_DEVICE_SEP (filename[1]) + && IS_DIRECTORY_SEP (filename[2])) +#endif + ); +} + +static unsigned char * +search_embedded_absfilename (nm, endp) + unsigned char *nm, *endp; +{ + unsigned char *p, *s; + + for (p = nm + 1; p < endp; p++) + { + if ((0 +#ifdef VMS + || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' +#endif /* VMS */ + || IS_DIRECTORY_SEP (p[-1])) + && file_name_absolute_p (p) +#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) + /* // at start of file name is meaningful in Apollo, + WindowsNT and Cygwin systems. */ + && !(IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) +#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ + ) + { + for (s = p; *s && (!IS_DIRECTORY_SEP (*s) +#ifdef VMS + && *s != ':' +#endif /* VMS */ + ); s++); + if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */ + { + unsigned char *o = alloca (s - p + 1); + struct passwd *pw; + bcopy (p, o, s - p); + o [s - p] = 0; + + /* If we have ~user and `user' exists, discard + everything up to ~. But if `user' does not exist, leave + ~user alone, it might be a literal file name. */ + if ((pw = getpwnam (o + 1))) + return p; + else + xfree (pw); + } + else + return p; + } + } + return NULL; +} + DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, Ssubstitute_in_file_name, 1, 1, 0, doc: /* Substitute environment variables referred to in FILENAME. @@ -2061,7 +2130,6 @@ duplicates what `expand-file-name' does. */) int total = 0; int substituted = 0; unsigned char *xnm; - struct passwd *pw; Lisp_Object handler; CHECK_STRING (filename); @@ -2081,61 +2149,17 @@ duplicates what `expand-file-name' does. */) endp = nm + SBYTES (filename); /* If /~ or // appears, discard everything through first slash. */ - - for (p = nm; p != endp; p++) - { - if ((p[0] == '~' -#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) - /* // at start of file name is meaningful in Apollo, - WindowsNT and Cygwin systems. */ - || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) -#else /* not (APOLLO || WINDOWSNT || CYGWIN) */ - || IS_DIRECTORY_SEP (p[0]) -#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ - ) - && p != nm - && (0 -#ifdef VMS - || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' -#endif /* VMS */ - || IS_DIRECTORY_SEP (p[-1]))) - { - for (s = p; *s && (!IS_DIRECTORY_SEP (*s) -#ifdef VMS - && *s != ':' -#endif /* VMS */ - ); s++); - if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */ - { - o = (unsigned char *) alloca (s - p + 1); - bcopy ((char *) p, o, s - p); - o [s - p] = 0; - - pw = (struct passwd *) getpwnam (o + 1); - } - /* If we have ~/ or ~user and `user' exists, discard - everything up to ~. But if `user' does not exist, leave - ~user alone, it might be a literal file name. */ - if (IS_DIRECTORY_SEP (p[0]) || s == p + 1 || pw) - { - nm = p; - substituted = 1; - } - } -#ifdef DOS_NT - /* see comment in expand-file-name about drive specifiers */ - else if (IS_DRIVE (p[0]) && p[1] == ':' - && p > nm && IS_DIRECTORY_SEP (p[-1])) - { - nm = p; - substituted = 1; - } -#endif /* DOS_NT */ - } + p = search_embedded_absfilename (nm, endp); + if (p) + /* Start over with the new string, so we check the file-name-handler + again. Important with filenames like "/home/foo//:/hello///there" + which whould substitute to "/:/hello///there" rather than "/there". */ + return Fsubstitute_in_file_name + (make_specified_string (p, -1, endp - p, + STRING_MULTIBYTE (filename))); #ifdef VMS - return make_specified_string (nm, -1, strlen (nm), - STRING_MULTIBYTE (filename)); + return filename; #else /* See if any variables are substituted into the string @@ -2261,22 +2285,11 @@ duplicates what `expand-file-name' does. */) *x = 0; /* If /~ or // appears, discard everything through first slash. */ - - for (p = xnm; p != x; p++) - if ((p[0] == '~' -#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) - || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm) -#else /* not (APOLLO || WINDOWSNT || CYGWIN) */ - || IS_DIRECTORY_SEP (p[0]) -#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ - ) - && p != xnm && IS_DIRECTORY_SEP (p[-1])) - xnm = p; -#ifdef DOS_NT - else if (IS_DRIVE (p[0]) && p[1] == ':' - && p > xnm && IS_DIRECTORY_SEP (p[-1])) - xnm = p; -#endif + while ((p = search_embedded_absfilename (xnm, x))) + /* This time we do not start over because we've already expanded envvars + and replaced $$ with $. Maybe we should start over as well, but we'd + need to quote some $ to $$ first. */ + xnm = p; return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename)); @@ -2959,24 +2972,8 @@ On Unix, this is a name starting with a `/' or a `~'. */) (filename) Lisp_Object filename; { - const unsigned char *ptr; - CHECK_STRING (filename); - ptr = SDATA (filename); - if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~' -#ifdef VMS -/* ??? This criterion is probably wrong for '<'. */ - || index (ptr, ':') || index (ptr, '<') - || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']')) - && ptr[1] != '.') -#endif /* VMS */ -#ifdef DOS_NT - || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2])) -#endif - ) - return Qt; - else - return Qnil; + return file_name_absolute_p (SDATA (filename)) ? Qt : Qnil; } /* Return nonzero if file FILENAME exists and can be executed. */ From 488cacbdee3b0706670929cce6e112d76d7e5d8b Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 28 Mar 2005 22:23:44 +0000 Subject: [PATCH 045/241] (Top): Use @section for the detailed node listing. --- man/ChangeLog | 2 ++ man/emacs.texi | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/man/ChangeLog b/man/ChangeLog index 7d0c98af9d2..1a8df1c2643 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,5 +1,7 @@ 2005-03-28 Richard M. Stallman + * emacs.texi (Top): Use @section for the detailed node listing. + * calendar.texi: Minor fixes to previous change. * programs.texi (Fortran): Small fixes to previous changes. diff --git a/man/emacs.texi b/man/emacs.texi index 2aaa1ff8353..f4304fe560b 100644 --- a/man/emacs.texi +++ b/man/emacs.texi @@ -227,8 +227,10 @@ Recovery from Problems Here are some other nodes which are really inferiors of the ones already listed, mentioned here so you can get to them in one step: - --- The Detailed Node Listing --- - --- These nodes are subnodes of the ones above --- +@section Detailed Node Listing + + This continuation of the manual's main menu lists second-level +subnodes (usually sections rather than chapters). The Organization of the Screen From 1f912e994c0abccaba6c7f37e272e781104d5b0d Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Tue, 29 Mar 2005 01:15:30 +0000 Subject: [PATCH 046/241] *** empty log message *** --- admin/FOR-RELEASE | 5 +++++ 1 file changed, 5 insertions(+) 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 @@ Tasks needed before the next release. +* THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE + +`undo-ask-before-discard', currently set to t for debugging purposes +has to be set to nil: when t, it can leak memory and cause other problems. + * NEW FEATURES ** Face remapping. From 6a17cee0f7b1864fe9d96ecc4a25ddbd204c57d5 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 01:26:33 +0000 Subject: [PATCH 047/241] Add comments before all calls of update-coding-systems-internal. --- lisp/international/mule-cmds.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 5ca08b78453..4957a7cfc7e 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -384,6 +384,7 @@ See also `coding-category-list' and `coding-system-category'." ;; CODING-SYSTEM is no-conversion or undecided. (error "Can't prefer the coding system `%s'" coding-system)) (set coding-category (or base coding-system)) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal) (or (eq coding-category (car coding-category-list)) ;; We must change the order. @@ -1691,6 +1692,7 @@ The default status is as follows: coding-category-ccl coding-category-binary)) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal) (set-default-coding-systems nil) @@ -1904,6 +1906,7 @@ of `buffer-file-coding-system' set by this function." (while priority (set (car categories) (car priority)) (setq priority (cdr priority) categories (cdr categories))) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal))))) (defsubst princ-list (&rest args) From 0f58da4cd73c61299ac7af3438dcbfa3cb652129 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 01:27:40 +0000 Subject: [PATCH 048/241] (detect-coding-with-priority): Add comment before the call of update-coding-systems-internal. --- lisp/international/mule-util.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el index 7c51409422b..8ac56b4bd65 100644 --- a/lisp/international/mule-util.el +++ b/lisp/international/mule-util.el @@ -327,6 +327,7 @@ coding systems ordered by priority." (mapc (function (lambda (x) (set (car x) (cdr x)))) prio-list) (set-coding-priority (mapcar #'car prio-list)) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal) (detect-coding-region ,from ,to)) ;; We must restore the internal database. From 27a132c3ac27a486c279d4b89e4ea179c4407749 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 02:02:44 +0000 Subject: [PATCH 049/241] (Position Info): Update the description about the command C-u C-x =. --- man/basic.texi | 62 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/man/basic.texi b/man/basic.texi index 2f8c2bc1764..cb5c08fe736 100644 --- a/man/basic.texi +++ b/man/basic.texi @@ -677,36 +677,58 @@ point=26957 of 26956(100%) column 0 @cindex character set of character at point @cindex font of character at point @cindex text properties at point - @w{@kbd{C-u C-x =}} displays additional information about a -character, including the character set name and the codes that -identify the character within that character set; @acronym{ASCII} characters are -identified as belonging to the @code{ascii} character set. It also -shows the character's syntax, categories, and encodings both -internally in the buffer and externally if you save the file. It also -shows the character's text properties (@pxref{Text Properties,,, + @w{@kbd{C-u C-x =}} displays these additional information about a +character. + +@itemize @bullet +@item +The character set name and the codes that identify the character +within that character set; @acronym{ASCII} characters are identified +as belonging to the @code{ascii} character set. + +@item +The character's syntax and categories. + +@item +The cahracter's encodings both internally in the buffer and externally +if you save the file. + +@item +What to type to input the character if an input method is activated +and it supports the character. + +@item +If you are running Emacs on a window system, the font name and glyph +code for the character. If you are running Emacs on a terminal, the +code(s) sent to the terminal. + +@item +The character's text properties (@pxref{Text Properties,,, elisp, the Emacs Lisp Reference Manual}), and any overlays containing it (@pxref{Overlays,,, elisp, the same manual}). +@end itemize + Here's an example showing the Latin-1 character A with grave accent, -in a buffer whose coding system is @code{iso-2022-7bit}, whose +in a buffer whose coding system is @code{iso-latin-1}, whose terminal coding system is @code{iso-latin-1} (so the terminal actually displays the character as @samp{@`A}), and which has font-lock-mode (@pxref{Font Lock}) enabled: @smallexample - character: @`A (04300, 2240, 0x8c0) - charset: latin-iso8859-1 - (Right-Hand Part of Latin Alphabet 1@dots{} - code point: 64 - syntax: w which means: word - category: l:Latin - buffer code: 0x81 0xC0 - file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) -terminal code: C0 + character: @`A (04300, 2240, 0x8c0, U+00C0) + charset: latin-iso8859-1 + (Right-Hand Part of Latin Alphabet 1@dots{} + code point: 64 + syntax: w which means: word + category: l:Latin + to input: type "`A" +buffer code: 0x81 0xC0 + file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) + display: terminal code 0xC0 -Text properties - font-lock-face: font-lock-variable-name-face - fontified: t +There are text properties here: + fontified t @end smallexample @node Arguments From ca1768db82767cec7d78a71db41c471e75ecc5f4 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 02:17:55 +0000 Subject: [PATCH 050/241] (Input Methods): Refer to the command C-u C-x =. --- man/ChangeLog | 7 +++++++ man/mule.texi | 3 +++ 2 files changed, 10 insertions(+) diff --git a/man/ChangeLog b/man/ChangeLog index 1a8df1c2643..716ae971e7c 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,10 @@ +2005-03-29 Kenichi Handa + + * mule.texi (Input Methods): Refer to the command C-u C-x =. + + * basic.texi (Position Info): Update the description about the + command C-u C-x =. + 2005-03-28 Richard M. Stallman * emacs.texi (Top): Use @section for the detailed node listing. diff --git a/man/mule.texi b/man/mule.texi index 8e31afe488f..244a19129e1 100644 --- a/man/mule.texi +++ b/man/mule.texi @@ -428,6 +428,9 @@ is the command @kbd{C-\} (@code{toggle-input-method}) used twice. because it stops waiting for more characters to combine, and starts searching for what you have already entered. + You can see how to input the character at point by the current input +using the command @kbd{C-u C-x =}. @xref{Position Info}. + @vindex input-method-verbose-flag @vindex input-method-highlight-flag The variables @code{input-method-highlight-flag} and From 671dfbd8cfd6c14805f61ff6d34fe1c1bc96c8fc Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Tue, 29 Mar 2005 04:54:48 +0000 Subject: [PATCH 051/241] Add functions to math-function-table properties of tex and math. --- lisp/calc/calc-lang.el | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 @@ ( \\arg . calcFunc-arg ) ( \\cos . calcFunc-cos ) ( \\cosh . calcFunc-cosh ) + ( \\cot . calcFunc-cot ) + ( \\coth . calcFunc-coth ) + ( \\csc . calcFunc-csc ) ( \\det . calcFunc-det ) ( \\exp . calcFunc-exp ) ( \\gcd . calcFunc-gcd ) @@ -395,10 +398,11 @@ ( \\log . calcFunc-log10 ) ( \\max . calcFunc-max ) ( \\min . calcFunc-min ) - ( \\tan . calcFunc-tan ) + ( \\sec . calcFunc-sec ) ( \\sin . calcFunc-sin ) ( \\sinh . calcFunc-sinh ) ( \\sqrt . calcFunc-sqrt ) + ( \\tan . calcFunc-tan ) ( \\tanh . calcFunc-tanh ) ( \\phi . calcFunc-totient ) ( \\mu . calcFunc-moebius ))) @@ -686,6 +690,10 @@ ( Conjugate . calcFunc-conj ) ( Cos . calcFunc-cos ) ( Cosh . calcFunc-cosh ) + ( Cot . calcFunc-cot ) + ( Coth . calcFunc-coth ) + ( Csc . calcFunc-csc ) + ( Csch . calcFunc-csch ) ( D . calcFunc-deriv ) ( Dt . calcFunc-tderiv ) ( Det . calcFunc-det ) @@ -708,6 +716,8 @@ ( Random . calcFunc-random ) ( Round . calcFunc-round ) ( Re . calcFunc-re ) + ( Sec . calcFunc-sec ) + ( Sech . calcFunc-sech ) ( Sign . calcFunc-sign ) ( Sin . calcFunc-sin ) ( Sinh . calcFunc-sinh ) From 814c3037ec8915a0741de5b11da8e5830b503408 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Tue, 29 Mar 2005 04:55:43 +0000 Subject: [PATCH 052/241] (next-error-highlight-timer): New variable. --- lisp/simple.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/simple.el b/lisp/simple.el index aa0724e87d8..95b519cf5ca 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -105,6 +105,8 @@ If `fringe-arrow', indicate the locus by the fringe arrow." :group 'next-error :version "22.1") +(defvar next-error-highlight-timer nil) + (defvar next-error-last-buffer nil "The most recent next-error buffer. A buffer becomes most recent when its compilation, grep, or From 073fcaf68bd794174f3f9de585185fa23cc87485 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Tue, 29 Mar 2005 04:57:52 +0000 Subject: [PATCH 053/241] (compilation-goto-locus): Use `next-error-highlight-timer' instead of `sit-for'. --- lisp/ChangeLog | 7 +++++++ lisp/progmodes/compile.el | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 95ab41b8a86..eea97f40a95 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2005-03-29 Juri Linkov + + * simple.el (next-error-highlight-timer): New variable. + + * progmodes/compile.el (compilation-goto-locus): + Use `next-error-highlight-timer' instead of `sit-for'. + 2005-03-28 Stefan Monnier * mail/supercite.el (sc-mail-field): Use assoc-string. 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." (compilation-set-window-height w) (when highlight-regexp + (if (timerp next-error-highlight-timer) + (cancel-timer next-error-highlight-timer)) (unless compilation-highlight-overlay (setq compilation-highlight-overlay (make-overlay (point-min) (point-min))) @@ -1632,8 +1634,11 @@ and overlay is highlighted between MK and END-MK." (move-overlay compilation-highlight-overlay (point) end (current-buffer))) (if (numberp next-error-highlight) - (sit-for next-error-highlight)) - (if (not (eq next-error-highlight t)) + (setq next-error-highlight-timer + (run-at-time next-error-highlight nil 'delete-overlay + compilation-highlight-overlay))) + (if (not (or (eq next-error-highlight t) + (numberp next-error-highlight))) (delete-overlay compilation-highlight-overlay)))))) (when (and (eq next-error-highlight 'fringe-arrow)) (set (make-local-variable 'overlay-arrow-position) From 3409eda2d8cfb5ce2b96defe420b4c01ea66c49e Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 05:06:48 +0000 Subject: [PATCH 054/241] (ps-print-translation-table): New variable. (ps-plot-region): Translate characters by ps-print-translation-table. --- lisp/ps-print.el | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lisp/ps-print.el b/lisp/ps-print.el index 726b0e4402c..b47ea3d4f89 100644 --- a/lisp/ps-print.el +++ b/lisp/ps-print.el @@ -6150,6 +6150,19 @@ XSTART YSTART are the relative position for the first page in a sheet.") (defvar ps-current-effect 0) +(defvar ps-print-translation-table + (let ((tbl (make-char-table 'translation-table nil))) + (if (and (boundp 'ucs-mule-8859-to-mule-unicode) + (char-table-p ucs-mule-8859-to-mule-unicode)) + (map-char-table + #'(lambda (k v) + (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v)) + (aset tbl k v))) + ucs-mule-8859-to-mule-unicode)) + tbl) + "Translation table for PostScript printing. +The default value is a table that translates non-Latin-1 Latin characters +to the equivalent Latin-1 characters.") (defun ps-plot-region (from to font &optional fg-color bg-color effects) (or (equal font ps-current-font) @@ -6240,11 +6253,17 @@ XSTART YSTART are the relative position for the first page in a sheet.") (ps-plot 'ps-mule-plot-composition match-point (point) bg-color)) ((> match 255) ; a multi-byte character + (setq match (or (aref ps-print-translation-table match) match)) (let* ((charset (char-charset match)) (composition (ps-e-find-composition match-point to)) (stop (if (nth 2 composition) (car composition) to))) (or (eq charset 'composition) - (while (and (< (point) stop) (eq (charset-after) charset)) + (while (and (< (point) stop) + (let ((ch (following-char))) + (setq ch + (or (aref ps-print-translation-table ch) + ch)) + (eq (char-charset ch) charset))) (forward-char 1))) (ps-plot 'ps-mule-plot-string match-point (point) bg-color))) ; characters from ^@ to ^_ and From eab4bb89764e1b5778335118f1999bdd1b1078ab Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 05:07:34 +0000 Subject: [PATCH 055/241] (ps-mule-plot-string): Translate characters by ps-print-translation-table. (ps-mule-begin-job): Call find-charset-region/string with ps-print-translation-table. --- lisp/ChangeLog | 11 +++++++++++ lisp/ps-mule.el | 14 +++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eea97f40a95..78514349768 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2005-03-29 Kenichi Handa + + * ps-mule.el (ps-mule-plot-string): Translate characters by + ps-print-translation-table. + (ps-mule-begin-job): Call find-charset-region/string with + ps-print-translation-table. + + * ps-print.el (ps-print-translation-table): New variable. + (ps-plot-region): Translate characters by + ps-print-translation-table. + 2005-03-29 Juri Linkov * simple.el (next-error-highlight-timer): New variable. diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el index 6f14538ff4d..3f66ba2368f 100644 --- a/lisp/ps-mule.el +++ b/lisp/ps-mule.el @@ -824,7 +824,9 @@ Returns the value: Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of the sequence." - (setq ps-mule-current-charset (charset-after from)) + (let ((ch (char-after from))) + (setq ps-mule-current-charset + (char-charset (or (aref ps-print-translation-table ch) ch)))) (let* ((wrappoint (ps-mule-find-wrappoint from to (ps-avg-char-width 'ps-font-for-text))) (to (car wrappoint)) @@ -832,6 +834,10 @@ the sequence." (ps-font-alist 'ps-font-for-text)))) (font-spec (ps-mule-get-font-spec ps-mule-current-charset font-type)) (string (buffer-substring-no-properties from to))) + (dotimes (i (length string)) + (let ((ch (aref ps-print-translation-table (aref string i)))) + (if ch + (aset string i ch)))) (cond ((= from to) ;; We can't print any more characters in the current line. @@ -1469,13 +1475,15 @@ This checks if all multi-byte characters in the region are printable or not." (setq ps-mule-charset-list (delq 'ascii (delq 'eight-bit-control (delq 'eight-bit-graphic - (find-charset-region from to)))) + (find-charset-region + from to ps-print-translation-table)))) ps-mule-header-charsets (delq 'ascii (delq 'eight-bit-control (delq 'eight-bit-graphic (find-charset-string (mapconcat - 'identity header-footer-list "")))))) + 'identity header-footer-list "") + ps-print-translation-table))))) (dolist (cs ps-mule-charset-list) (or (ps-mule-printable-p cs) (push cs unprintable-charsets))) From 51bb954e7ad81cc91cdac77e82a3e73f264ec769 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 05:48:10 +0000 Subject: [PATCH 056/241] (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1. --- lisp/ChangeLog | 2 ++ lisp/ps-mule.el | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 78514349768..eec6cba623a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,8 @@ ps-print-translation-table. (ps-mule-begin-job): Call find-charset-region/string with ps-print-translation-table. + (ps-mule-printable-p): Return t if CHARSET is ascii or + latin-iso8859-1. * ps-print.el (ps-print-translation-table): New variable. (ps-plot-region): Translate characters by diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el index 3f66ba2368f..e0e9268c3de 100644 --- a/lisp/ps-mule.el +++ b/lisp/ps-mule.el @@ -511,7 +511,10 @@ element of the list." (defsubst ps-mule-printable-p (charset) "Non-nil if characters in CHARSET is printable." - (ps-mule-get-font-spec charset 'normal)) + ;; ASCII and Latin-1 are always printable. + (or (eq charset 'ascii) + (eq charset 'latin-iso8859-1) + (ps-mule-get-font-spec charset 'normal))) (defconst ps-mule-external-libraries '((builtin nil nil From d59ea3ae6d3986d8f9b313b2f1258535ad0674c1 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Tue, 29 Mar 2005 06:03:46 +0000 Subject: [PATCH 057/241] *** empty log message *** --- lisp/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eec6cba623a..f04f93a8b34 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-03-29 Jay Belanger + + * calc/calc-lang.el: Add functions to math-function-table + properties of tex and math. + 2005-03-29 Kenichi Handa * ps-mule.el (ps-mule-plot-string): Translate characters by From 675ae7bc050a15b30418aed04ec0b0b6c54842ab Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 07:47:09 +0000 Subject: [PATCH 058/241] (thai-word-table): Declare it by defvar, use dolist to initialize it. (thai-kill-word, thai-backward-kill-word, thai-transpose-words) (thai-fill-find-break-point): New functions. --- lisp/language/thai-word.el | 52 ++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 14 deletions(-) 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 @@ ;;; thai-word.el -- find Thai word boundaries -;; Copyright (C) 2000, 2001, 2002, 2003, 2004 -;; Electrotechnical Laboratory, JAPAN. +;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +;; National Institute of Advanced Industrial Science and Technology (AIST) +;; Registration Number H14PRO021 ;; Author: Kenichi HANDA @@ -72,13 +73,10 @@ ;; which means that you can easily index the list character by ;; character. -(defconst thai-word-table nil) - - -;; Set up `thai-word-table'. - -(let - ((l +(defvar thai-word-table + (let ((table (list 'thai-words))) + (dolist (elt + ;;; The following is indented as this to minimize this file size. '("¡¡" "¡¡Å" "¡¡Ø¸Àѳ±ì" @@ -10732,11 +10730,10 @@ "äÎâ¡ÃÁÔàµÍÃì" "äÎâ´Ã¤ÒÃìºÍ¹" "äÎâÅ" - ))) - (setq thai-word-table (list 'thai-words)) - (while l - (set-nested-alist (car l) 1 thai-word-table) - (setq l (cdr l)))) + )) + (set-nested-alist elt 1 table)) + table) + "Nested alist of Thai words.") (defun thai-update-word-table (file &optional append) @@ -11042,6 +11039,33 @@ If COUNT is negative, move point forward (- COUNT) words." (thai-forward-word (- count))) +(defun thai-kill-word (arg) + "Like kill-word but pay attention to Thai word boundaries. +With argument, do this that many times." + (interactive "p") + (kill-region (point) (progn (thai-forward-word arg) (point)))) + + +(defun thai-backward-kill-word (arg) + "Like backward-kill-word but pay attention to Thai word boundaries." + (interactive "p") + (thai-kill-word (- arg))) + + +(defun thai-transpose-words (arg) + "Like transpose-words but pay attention to Thai word boundaries." + (interactive "*p") + (transpose-subr 'thai-forward-word arg)) + +(defun thai-fill-find-break-point (linebeg) + "Go to a line breaking position near point considering Thai word boundaries." + (let ((pos (point))) + (thai-forward-word -1) + (when (<= (point) linebeg) + (goto-char pos) + (thai-forward-word 1)) + (kinsoku linebeg))) + (provide 'thai-word) From 1085b5512ac943c0f835e4b95eb8b149321f5924 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 07:50:59 +0000 Subject: [PATCH 059/241] Require thai-word. (thai-word-mode-map): New variable. (thai-word-mode): New minor mode. (setup-thai-language-environment-internal): New function. (exit-thai-language-environment-internal): New function. --- lisp/language/thai-util.el | 40 +++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el index 09f84d6fad6..e130c187c6d 100644 --- a/lisp/language/thai-util.el +++ b/lisp/language/thai-util.el @@ -1,8 +1,6 @@ ;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*- -;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. -;; Licensed to the Free Software Foundation. -;; Copyright (C) 2005 +;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2005 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H14PRO021 @@ -382,6 +380,42 @@ The return value is number of composed characters." (t (add-hook 'after-change-functions 'thai-auto-composition)))) +;; Thai-word-mode requires functions in the feature `thai-word'. +(require 'thai-word) + +(defvar thai-word-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [remap forward-word] 'thai-forward-word) + (define-key map [remap backward-word] 'thai-backward-word) + (define-key map [remap kill-word] 'thai-kill-word) + (define-key map [remap backward-kill-word] 'thai-backward-kill-word) + (define-key map [remap transpose-words] 'thai-transpose-words) + map) + "Keymap for `thai-word-mode'.") + +(define-minor-mode thai-word-mode + "Minor mode to make word-oriented commands aware of Thai words. +The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]." + :global t + (cond (thai-word-mode + ;; This enables linebreak between Thai characters. + (modify-category-entry (make-char 'thai-tis620) ?|) + ;; This enables linebreak at a Thai word boundary. + (put-charset-property 'thai-tis620 'fill-find-break-point-function + 'thai-fill-find-break-point)) + (t + (modify-category-entry (make-char 'thai-tis620) ?| nil t) + (put-charset-property 'thai-tis620 'fill-find-break-point-function + nil)))) + +;; Function to call on entering the Thai language environment. +(defun setup-thai-language-environment-internal () + (thai-word-mode 1)) + +;; Function to call on exiting the Thai language environment. +(defun exit-thai-language-environment-internal () + (thai-word-mode -1)) + ;; (provide 'thai-util) From 44053845d838fc09f49fc6c8e340bfb165c49c0e Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 07:56:54 +0000 Subject: [PATCH 060/241] ("Thai"): Set setup-function and exit-function for Thai language environment. --- lisp/language/thai.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lisp/language/thai.el b/lisp/language/thai.el index 6b5df5c08b6..c14d0005a72 100644 --- a/lisp/language/thai.el +++ b/lisp/language/thai.el @@ -1,10 +1,9 @@ ;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*- -;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. -;; Licensed to the Free Software Foundation. -;; Copyright (C) 2005 +;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2005 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H14PRO021 +;; Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. ;; Keywords: multilingual, Thai @@ -53,6 +52,8 @@ (input-method . "thai-kesmanee") (unibyte-display . thai-tis620) (features thai-util) + (setup-function . setup-thai-language-environment-internal) + (exit-function . exit-thai-language-environment-internal) (sample-text . (thai-compose-string (copy-sequence "Thai (,T@RIRd7B(B) ,TJ0GQ1J04U1$0CQ1:(B, ,TJ0GQ1J04U10$h1P(B"))) From 32a803465bd6ebd183f8102d525d9112b763ed35 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 07:59:02 +0000 Subject: [PATCH 061/241] Fix copyright notice. --- lisp/language/thai-util.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el index e130c187c6d..6c121c60db2 100644 --- a/lisp/language/thai-util.el +++ b/lisp/language/thai-util.el @@ -3,6 +3,7 @@ ;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2005 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H14PRO021 +;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. ;; Keywords: mule, multilingual, thai From d3cd33652b82b3fc6cbc7dadb51860947f099303 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 29 Mar 2005 11:53:18 +0000 Subject: [PATCH 062/241] *** empty log message *** --- etc/NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 50b074849cf..f634e65e847 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -107,6 +107,10 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types. * Changes in Emacs 22.1 +** In Thai language environment, such word-oriented commands as M-f, +M-b, M-d, M-DEL, M-t, and M-q are remapped to commands that recognize +Thai word segument. + ** iso-acc.el is now obsolete. Use one of the latin input methods instead. --- From d70299080162eab4a35d4048e6df26f23a048683 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Tue, 29 Mar 2005 13:59:41 +0000 Subject: [PATCH 063/241] (debug-on-entry): Handle autoloaded functions and compiled macros. (debug-convert-byte-code): Handle macros too. (debug-on-entry-1): Don't signal an error when trying to clear a function that is not set to debug on entry. --- lisp/ChangeLog | 8 ++++ lisp/emacs-lisp/debug.el | 100 ++++++++++++++++++++++----------------- 2 files changed, 65 insertions(+), 43 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f04f93a8b34..54629d63992 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2005-03-29 Lute Kamstra + + * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded + functions and compiled macros. + (debug-convert-byte-code): Handle macros too. + (debug-on-entry-1): Don't signal an error when trying to clear a + function that is not set to debug on entry. + 2005-03-29 Jay Belanger * calc/calc-lang.el: Add functions to math-function-table diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 1e45439658c..2149cba8720 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el @@ -632,24 +632,31 @@ which must be written in Lisp, not predefined. Use \\[cancel-debug-on-entry] to cancel the effect of this command. Redefining FUNCTION also cancels it." (interactive "aDebug on entry (to function): ") - ;; Handle a function that has been aliased to some other function. - (if (and (subrp (symbol-function function)) - (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) - (error "Function %s is a special form" function)) - (if (or (symbolp (symbol-function function)) + (when (and (subrp (symbol-function function)) + (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) + (error "Function %s is a special form" function)) + (if (or (symbolp (symbol-function function)) (subrp (symbol-function function))) - ;; Create a wrapper in which we can then add the necessary debug call. + ;; The function is built-in or aliased to another function. + ;; Create a wrapper in which we can add the debug call. (fset function `(lambda (&rest debug-on-entry-args) ,(interactive-form (symbol-function function)) - (apply ',(symbol-function function) - debug-on-entry-args)))) - (or (consp (symbol-function function)) - (debug-convert-byte-code function)) - (or (consp (symbol-function function)) - (error "Definition of %s is not a list" function)) + (apply ',(symbol-function function) + debug-on-entry-args))) + (when (eq (car-safe (symbol-function function)) 'autoload) + ;; The function is autoloaded. Load its real definition. + (load (cadr (symbol-function function)) nil noninteractive nil t)) + (when (or (not (consp (symbol-function function))) + (and (eq (car (symbol-function function)) 'macro) + (not (consp (cdr (symbol-function function)))))) + ;; The function is byte-compiled. Create a wrapper in which + ;; we can add the debug call. + (debug-convert-byte-code function))) + (unless (consp (symbol-function function)) + (error "Definition of %s is not a list" function)) (fset function (debug-on-entry-1 function t)) - (or (memq function debug-function-list) - (push function debug-function-list)) + (unless (memq function debug-function-list) + (push function debug-function-list)) function) ;;;###autoload @@ -664,45 +671,52 @@ If argument is nil or an empty string, cancel for all functions." (if name (intern name))))) (if (and function (not (string= function ""))) (progn - (let ((f (debug-on-entry-1 function nil))) + (let ((defn (debug-on-entry-1 function nil))) (condition-case nil - (if (and (equal (nth 1 f) '(&rest debug-on-entry-args)) - (eq (car (nth 3 f)) 'apply)) - ;; `f' is a wrapper introduced in debug-on-entry. - ;; Get rid of it since we don't need it any more. - (setq f (nth 1 (nth 1 (nth 3 f))))) + (when (and (equal (nth 1 defn) '(&rest debug-on-entry-args)) + (eq (car (nth 3 defn)) 'apply)) + ;; `defn' is a wrapper introduced in debug-on-entry. + ;; Get rid of it since we don't need it any more. + (setq defn (nth 1 (nth 1 (nth 3 defn))))) (error nil)) - (fset function f)) + (fset function defn)) (setq debug-function-list (delq function debug-function-list)) function) (message "Cancelling debug-on-entry for all functions") (mapcar 'cancel-debug-on-entry debug-function-list))) (defun debug-convert-byte-code (function) - (let ((defn (symbol-function function))) - (if (not (consp defn)) - ;; Assume a compiled code object. - (let* ((contents (append defn nil)) - (body - (list (list 'byte-code (nth 1 contents) - (nth 2 contents) (nth 3 contents))))) - (if (nthcdr 5 contents) - (setq body (cons (list 'interactive (nth 5 contents)) body))) - (if (nth 4 contents) - ;; Use `documentation' here, to get the actual string, - ;; in case the compiled function has a reference - ;; to the .elc file. - (setq body (cons (documentation function) body))) - (fset function (cons 'lambda (cons (car contents) body))))))) + (let* ((defn (symbol-function function)) + (macro (eq (car-safe defn) 'macro))) + (when macro (setq defn (cdr defn))) + (unless (consp defn) + ;; Assume a compiled code object. + (let* ((contents (append defn nil)) + (body + (list (list 'byte-code (nth 1 contents) + (nth 2 contents) (nth 3 contents))))) + (if (nthcdr 5 contents) + (setq body (cons (list 'interactive (nth 5 contents)) body))) + (if (nth 4 contents) + ;; Use `documentation' here, to get the actual string, + ;; in case the compiled function has a reference + ;; to the .elc file. + (setq body (cons (documentation function) body))) + (setq defn (cons 'lambda (cons (car contents) body)))) + (when macro (setq defn (cons 'macro defn))) + (fset function defn)))) (defun debug-on-entry-1 (function flag) (let* ((defn (symbol-function function)) (tail defn)) - (if (subrp tail) - (error "%s is a built-in function" function) - (if (eq (car tail) 'macro) (setq tail (cdr tail))) - (if (eq (car tail) 'lambda) (setq tail (cdr tail)) - (error "%s not user-defined Lisp function" function)) + (when (eq (car-safe tail) 'macro) + (setq tail (cdr tail))) + (if (not (eq (car-safe tail) 'lambda)) + ;; Only signal an error when we try to set debug-on-entry. + ;; When we try to clear debug-on-entry, we are now done. + (when flag + (error "%s is not a user-defined Lisp function" function)) + (setq tail (cdr tail)) ;; Skip the docstring. (when (and (stringp (cadr tail)) (cddr tail)) (setq tail (cdr tail))) @@ -713,8 +727,8 @@ If argument is nil or an empty string, cancel for all functions." ;; Add/remove debug statement as needed. (if flag (setcdr tail (cons '(implement-debug-on-entry) (cdr tail))) - (setcdr tail (cddr tail)))) - defn))) + (setcdr tail (cddr tail))))) + defn)) (defun debugger-list-functions () "Display a list of all the functions now set to debug on entry." From 9f3f6a1854cfb2baad2cd5729432dcf36a9a0dcc Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 29 Mar 2005 14:12:23 +0000 Subject: [PATCH 064/241] (python-preoutput-filter): Fix last change. --- lisp/progmodes/python.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 10845b23630..5073f2bc23a 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1127,8 +1127,8 @@ Don't save anything for STR matching `inferior-python-filter-regexp'." ((string-match ".*\n" s) s) ((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s))) - (eq t (compare-strings s nil nil "_emacs_out " nil - (min (length "_emacs_out ") (length s))))) + (let ((end (min (length "_emacs_out ") (length s)))) + (eq t (compare-strings s nil end "_emacs_out " nil end)))) (setq python-preoutput-leftover s) "") (t s))) From 8d194e3e9b34551d9651413586da945a8450c53b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 29 Mar 2005 14:13:15 +0000 Subject: [PATCH 065/241] (reveal-mode-map): Don't override C-a and C-e. --- lisp/ChangeLog | 17 +++++++++++++---- lisp/reveal.el | 4 ++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 54629d63992..47d3fb33da3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-03-29 Stefan Monnier + + * reveal.el (reveal-mode-map): Don't override C-a and C-e. + + * progmodes/python.el (python-preoutput-filter): Fix last change. + 2005-03-29 Lute Kamstra * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded @@ -17,12 +23,10 @@ ps-print-translation-table. (ps-mule-begin-job): Call find-charset-region/string with ps-print-translation-table. - (ps-mule-printable-p): Return t if CHARSET is ascii or - latin-iso8859-1. + (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1. * ps-print.el (ps-print-translation-table): New variable. - (ps-plot-region): Translate characters by - ps-print-translation-table. + (ps-plot-region): Translate characters by ps-print-translation-table. 2005-03-29 Juri Linkov @@ -89,6 +93,11 @@ * international/mule.el (auto-coding-alist): Associate non-ascii image filename extensions with `no-conversion'. +2005-03-27 Stefan Monnier + + * international/iso-acc.el: + * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir. + 2005-03-26 Luc Teirlinck * textmodes/sgml-mode.el (html-mode): Doc update. 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 @@ (let ((map (make-sparse-keymap))) ;; Override the default move-beginning-of-line and move-end-of-line ;; which skips valuable invisible text. - (define-key map [?\C-a] 'beginning-of-line) - (define-key map [?\C-e] 'end-of-line) + (define-key map [remap move-beginning-of-line] 'beginning-of-line) + (define-key map [remap move-end-of-line] 'end-of-line) map)) ;;;###autoload From ef91372af5abbff26bbdbea17ec28202f7dd2f65 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 29 Mar 2005 14:18:00 +0000 Subject: [PATCH 066/241] (which-function): Be robust in the face of an imenu--make-index-alist failure. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/which-func.el | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 47d3fb33da3..648d58d9ff7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-03-29 Stephan Stahl (tiny change) + + * progmodes/which-func.el (which-function): Be robust in the face of an + imenu--make-index-alist failure. + 2005-03-29 Stefan Monnier * reveal.el (reveal-mode-map): Don't override C-a and C-e. 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 @@ ;;; which-func.el --- print current function in mode line -;; Copyright (C) 1994, 1997, 1998, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1997, 1998, 2001, 2003, 2005 +;; Free Software Foundation, Inc. ;; Author: Alex Rezinsky ;; (doesn't seem to be responsive any more) @@ -251,7 +252,7 @@ If no function name is found, return nil." (when (and (null name) (boundp 'imenu--index-alist) (null imenu--index-alist) (null which-function-imenu-failed)) - (imenu--make-index-alist) + (imenu--make-index-alist t) (unless imenu--index-alist (make-local-variable 'which-function-imenu-failed) (setq which-function-imenu-failed t))) @@ -291,5 +292,5 @@ If no function name is found, return nil." (provide 'which-func) -;;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 +;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 ;;; which-func.el ends here From 6380e5a7098ee06cbc2b94a281724e851620275a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 29 Mar 2005 14:56:14 +0000 Subject: [PATCH 067/241] quote file name arg passed shell (from olive lin) --- lisp/ChangeLog | 5 +++++ lisp/textmodes/tex-mode.el | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 648d58d9ff7..a656b62248c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-03-29 Olive Lin + + * textmodes/tex-mode.el (tex-send-command): shell-quote-argument + on the file name we pass to the inferior shell. + 2005-03-29 Stephan Stahl (tiny change) * progmodes/which-func.el (which-function): Be robust in the face of an diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 7e5d9fee78b..285f25dec88 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." (concat (if file (if star (concat (substring cmd 0 star) - file (substring cmd (1+ star))) - (concat cmd " " file)) + (shell-quote-argument file) + (substring cmd (1+ star))) + (concat cmd " " (shell-quote-argument file))) cmd) (if background "&" "")))) ;; Switch to buffer before checking for subproc output in it. From 55ec6b379a5e68cad310b677d7f96df6cd51969d Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 29 Mar 2005 15:30:39 +0000 Subject: [PATCH 068/241] (vc-do-command): Use a pipe for async processes, so password prompts don't show up at places where the user can't reply. --- lisp/ChangeLog | 5 +++++ lisp/vc.el | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a656b62248c..7ef89d4ce56 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-03-29 Stefan Monnier + + * vc.el (vc-do-command): Use a pipe for async processes, so password + prompts don't show up at places where the user can't reply. + 2005-03-29 Olive Lin * textmodes/tex-mode.el (tex-send-command): shell-quote-argument 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 @@ ;;; vc.el --- drive a version-control system from within Emacs ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +;; 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: FSF (see below for full credits) ;; Maintainer: Andre Spiegel @@ -962,8 +962,10 @@ that is inserted into the command line before the filename." ;; start-process does not support remote execution (setq okstatus nil)) (if (eq okstatus 'async) - (let ((proc (apply 'start-process command (current-buffer) command - squeezed))) + (let ((proc + (let ((process-connection-type nil)) + (apply 'start-process command (current-buffer) command + squeezed)))) (unless (active-minibuffer-window) (message "Running %s in the background..." command)) ;;(set-process-sentinel proc (lambda (p msg) (delete-process p))) From f7e30874fe62dbe37106827aeeb8965538e6c39b Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Tue, 29 Mar 2005 16:15:49 +0000 Subject: [PATCH 069/241] Update copyright date. (calc-version): Increase to 2.1 (calc-version-date): Remove. --- lisp/calc/calc.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 @@ ;;; calc.el --- the GNU Emacs calculator -;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: David Gillespie ;; Maintainer: Jay Belanger @@ -656,8 +657,7 @@ If nil, selections displayed but ignored.") (put 'math-underflow 'error-conditions '(error math-underflow calc-error)) (put 'math-underflow 'error-message "Floating-point underflow occurred") -(defconst calc-version "2.02g") -(defconst calc-version-date "Mon Nov 19 2001") +(defconst calc-version "2.1") (defvar calc-trail-pointer nil) ; "Current" entry in trail buffer. (defvar calc-trail-overlay nil) ; Value of overlay-arrow-string. (defvar calc-undo-list nil) ; List of previous operations for undo. From bb64248becb00ac37d0bb413174e65b9ac7f54be Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Tue, 29 Mar 2005 16:18:48 +0000 Subject: [PATCH 070/241] Update copyright date. (calc-full-help): Remove reference to calc-version-date. Update copyright date. --- lisp/ChangeLog | 10 ++++++++++ lisp/calc/calc-help.el | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7ef89d4ce56..e8b769d33ab 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2005-03-29 Jay Belanger + + * calc/calc.el: Update copyright date. + (calc-version): Increase to 2.1. + (calc-version-date): Remove. + + * calc/calc-help.el: Update copyright date. + (calc-full-help): Remove reference to calc-version-date. + Update copyright date. + 2005-03-29 Stefan Monnier * vc.el (vc-do-command): Use a pipe for async processes, so password diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index dc7f0b17c1d..27571191a5a 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el @@ -1,6 +1,6 @@ ;;; calc-help.el --- help display functions for Calc, -;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004 +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: David Gillespie @@ -409,10 +409,10 @@ C-w Describe how there is no warranty for Calc." (defun calc-full-help () (interactive) (with-output-to-temp-buffer "*Help*" - (princ (format "GNU Emacs Calculator version %s of %s.\n" - calc-version calc-version-date)) + (princ (format "GNU Emacs Calculator version %s.\n" + calc-version)) (princ " By Dave Gillespie, daveg@synaptics.com.\n") - (princ " Copyright (C) 1990, 1993 Free Software Foundation, Inc.\n\n") + (princ " Copyright (C) 2005 Free Software Foundation, Inc.\n\n") (princ "Type `h s' for a more detailed summary.\n") (princ "Or type `h i' to read the full Calc manual on-line.\n\n") (princ "Basic keys:\n") From 942fd38f89e586183b8bc643cce9f26124a84e0d Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 18:11:55 +0000 Subject: [PATCH 071/241] (Input Methods): Minor cleanup. --- man/mule.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/mule.texi b/man/mule.texi index 244a19129e1..26a2d91cf20 100644 --- a/man/mule.texi +++ b/man/mule.texi @@ -428,8 +428,8 @@ is the command @kbd{C-\} (@code{toggle-input-method}) used twice. because it stops waiting for more characters to combine, and starts searching for what you have already entered. - You can see how to input the character at point by the current input -using the command @kbd{C-u C-x =}. @xref{Position Info}. + To find out how to input the character after point using the current +input method, type @kbd{C-u C-x =}. @xref{Position Info}. @vindex input-method-verbose-flag @vindex input-method-highlight-flag From 99b57147626d7ae0ba095074215c61921a7a1320 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 18:13:35 +0000 Subject: [PATCH 072/241] *** empty log message *** --- man/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/man/ChangeLog b/man/ChangeLog index 716ae971e7c..82300ff9d50 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,8 @@ +2005-03-29 Glenn Morris + + * programs.texi (ForIndent Vars): `fortran-if-indent' does other + constructs as well. + 2005-03-29 Kenichi Handa * mule.texi (Input Methods): Refer to the command C-u C-x =. From 6351cad9d91725e5aa62771adc81b68d5a7d28c5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 18:14:04 +0000 Subject: [PATCH 073/241] (ForIndent Vars): `fortran-if-indent' does other constructs as well. --- man/programs.texi | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/man/programs.texi b/man/programs.texi index 74932174c6b..7262523fdc6 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1971,7 +1971,6 @@ with another style of continuation lines). @vindex indent-tabs-mode @r{(Fortran mode)} @vindex fortran-analyze-depth @vindex fortran-tab-mode-default -@vindex fortran-tab-mode-string Fortran mode can use either style of continuation line. When you enter Fortran mode, it tries to deduce the proper continuation style automatically from the buffer contents. It does this by scanning up to @@ -1984,7 +1983,6 @@ non-@code{nil} for tab format) is used. @samp{/t} in the mode line indicates tab format is selected. Fortran mode sets the value of @code{indent-tabs-mode} accordingly (@pxref{Just Spaces}). -@vindex fortran-continuation-string If the text on a line starts with the Fortran continuation marker @samp{$}, or if it begins with any non-whitespace character in column 5, Fortran mode treats it as a continuation line. When you indent a @@ -2068,7 +2066,8 @@ followed. Extra indentation within each level of @samp{do} statement (default 3). @item fortran-if-indent -Extra indentation within each level of @samp{if} statement (default 3). +Extra indentation within each level of @samp{if}, @samp{select case}, or +@samp{where} statements (default 3). @item fortran-structure-indent Extra indentation within each level of @samp{structure}, @samp{union}, From 42a9959328a069a427afc79546af7f8d2436627e Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 18:14:06 +0000 Subject: [PATCH 074/241] (Position Info): Minor cleanup. --- man/basic.texi | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/man/basic.texi b/man/basic.texi index cb5c08fe736..ad3cfbca88a 100644 --- a/man/basic.texi +++ b/man/basic.texi @@ -682,7 +682,7 @@ character. @itemize @bullet @item -The character set name and the codes that identify the character +The character set name, and the codes that identify the character within that character set; @acronym{ASCII} characters are identified as belonging to the @code{ascii} character set. @@ -690,12 +690,12 @@ as belonging to the @code{ascii} character set. The character's syntax and categories. @item -The cahracter's encodings both internally in the buffer and externally -if you save the file. +The character's encodings, both internally in the buffer, and externally +if you were to save the file. @item -What to type to input the character if an input method is activated -and it supports the character. +What to type to input the character in the current input method +(if it supports the character). @item If you are running Emacs on a window system, the font name and glyph @@ -706,7 +706,6 @@ code(s) sent to the terminal. The character's text properties (@pxref{Text Properties,,, elisp, the Emacs Lisp Reference Manual}), and any overlays containing it (@pxref{Overlays,,, elisp, the same manual}). - @end itemize Here's an example showing the Latin-1 character A with grave accent, From f1308a07353ad27c6795ec7b50fbc8b4ca596d4a Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 18:18:18 +0000 Subject: [PATCH 075/241] (Top): Don't use a real section heading for "Detailed Node Listing". Fake it instead. --- man/emacs.texi | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/man/emacs.texi b/man/emacs.texi index f4304fe560b..0ad3a5148c9 100644 --- a/man/emacs.texi +++ b/man/emacs.texi @@ -224,14 +224,13 @@ Recovery from Problems * Contributing:: How to contribute improvements to Emacs. * Service:: How to get help for your own Emacs needs. + +Detailed Node Listing +--------------------- + Here are some other nodes which are really inferiors of the ones already listed, mentioned here so you can get to them in one step: -@section Detailed Node Listing - - This continuation of the manual's main menu lists second-level -subnodes (usually sections rather than chapters). - The Organization of the Screen * Point:: The place in the text where editing commands operate. From 4f256c8ee13406f1de7b74bae6524ee6a3171b19 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 18:19:00 +0000 Subject: [PATCH 076/241] (Emacs Server): Fix Texinfo usage. --- man/misc.texi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/man/misc.texi b/man/misc.texi index 6181003d694..f1e05cae89c 100644 --- a/man/misc.texi +++ b/man/misc.texi @@ -1250,10 +1250,10 @@ kills it if the file name matches the regular expression @vindex server-name You can run multiple Emacs servers on the same machine by giving each one a unique ``server name'', using the variable -@code{server-name}. For example, @kbd{M-x set-variable RET -server-name RET foo RET} sets the server name to @samp{foo}. The -@code{emacsclient} program can visit a server by name using the -@samp{-s} option. @xref{Invoking emacsclient}. +@code{server-name}. For example, @kbd{M-x set-variable @key{RET} +server-name @key{RET} foo @key{RET}} sets the server name to +@samp{foo}. The @code{emacsclient} program can visit a server by name +using the @samp{-s} option. @xref{Invoking emacsclient}. While @code{mail} or another application is waiting for @code{emacsclient} to finish, @code{emacsclient} does not read terminal From 3eff9df26c6a6829972f48587cd7378ed906cc22 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 18:20:48 +0000 Subject: [PATCH 077/241] Minor fixes. --- man/ChangeLog | 13 +++++++++++++ man/xresources.texi | 9 +++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/man/ChangeLog b/man/ChangeLog index 82300ff9d50..cde6f8ebf10 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,16 @@ +2005-03-29 Richard M. Stallman + + * xresources.texi: Minor fixes. + + * misc.texi (Emacs Server): Fix Texinfo usage. + + * emacs.texi (Top): Don't use a real section heading for + "Detailed Node Listing". Fake it instead. + + * basic.texi (Position Info): Minor cleanup. + + * mule.texi (Input Methods): Minor cleanup. + 2005-03-29 Glenn Morris * programs.texi (ForIndent Vars): `fortran-if-indent' does other diff --git a/man/xresources.texi b/man/xresources.texi index c88ca6ad142..aaf7262d060 100644 --- a/man/xresources.texi +++ b/man/xresources.texi @@ -52,7 +52,8 @@ Registry, under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs} and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. The menu and scrollbars are native widgets on MS-Windows, so they are only customizable via the system-wide settings in the Display Control -Panel. +Panel. You can also set resources using the @samp{-xrm} command line +option (see below.) Programs define named resources with particular meanings. They also define how to group resources into named classes. For instance, in @@ -668,8 +669,8 @@ or just the class. @end table @noindent -You must soecify the class and the style in double-quotes, and put -these commands at the top level in a @file{~/.gtkrc-2.0} file, like +You must specify the class and the style in double-quotes, and put +these commands at the top level in the GTK customization file, like this: @smallexample @@ -782,7 +783,7 @@ widget "*emacs-menuitem* style "my_menu_style" automatically applies only to Emacs, since other programs don't read that file. For example, the drop down menu in the file dialog can not be customized by any absolute widget name, only by an absolute class -name. This is so because the widgets in the drop down menu do not +name. This is because the widgets in the drop down menu do not have names and the menu is not contained in the Emacs GtkWindow. To have all menus in Emacs look the same, use this in @file{~/.emacs.d/gtkrc}: From 0d6d7be5977900c67a66b74746f0a0485cafd275 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 18:33:56 +0000 Subject: [PATCH 078/241] *** empty log message *** --- lisp/ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e8b769d33ab..ce58cde5d3f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-03-29 Glenn Morris + + * progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc + fix. Tweak regexp. + (f90-beginning-of-block): Push mark first. + 2005-03-29 Jay Belanger * calc/calc.el: Update copyright date. From fcca5273e598fdf7813dd3adc077bd8c4cc05df5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 18:34:22 +0000 Subject: [PATCH 079/241] (f90-end-block-re, f90-start-block-re): Doc fix. Tweak regexp. (f90-beginning-of-block): Push mark first. --- lisp/progmodes/f90.el | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) 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.") ;; Hideshow support. (defconst f90-end-block-re - (concat "^[ \t0-9]*\\[ \t]*" + (concat "^[ \t0-9]*\\\\)\\)\\)\\ count 0) (re-search-backward f90-blocks-re nil 'move)) (beginning-of-line) From 8cb8832f2534c294c670e49b055f1e8bfcb12bf3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 18:59:02 +0000 Subject: [PATCH 080/241] Reformat and update copyright years. (fortran-if-indent): Doc fix. (fortran-font-lock-keywords-2): Add "where", "elsewhere". (fortran-font-lock-keywords-4): New variable. (fortran-blocks-re, fortran-end-block-re) (fortran-start-block-re): New constants, for hideshow. (hs-special-modes-alist): Add a Fortran entry. (fortran-mode-map): Bind fortran-end-of-block, fortran-beginning-of-block to \M-\C-n, \M-\C-p. (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4. (fortran-looking-at-if-then, fortran-end-of-block) (fortran-beginning-of-block): New functions, for hideshow. --- lisp/progmodes/fortran.el | 183 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 174 insertions(+), 9 deletions(-) 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 @@ ;;; fortran.el --- Fortran mode for GNU Emacs -;; Copyright (c) 1986, 93, 94, 95, 97, 98, 99, 2000, 01, 03, 04 -;; Free Software Foundation, Inc. +;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, +;; 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Michael D. Prange ;; Maintainer: Glenn Morris @@ -95,7 +95,7 @@ with a character in column 6." :group 'fortran-indent) (defcustom fortran-if-indent 3 - "*Extra indentation applied to IF blocks." + "*Extra indentation applied to IF, SELECT CASE and WHERE blocks." :type 'integer :group 'fortran-indent) @@ -321,7 +321,8 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?" "while" "inquire" "stop" "return" "include" "open" "close" "read" "write" "format" "print" "select" "case" - "cycle" "exit" "rewind" "backspace") + "cycle" "exit" "rewind" "backspace" + "where" "elsewhere") 'paren) "\\>") ;; Builtin operators. (concat "\\." (regexp-opt @@ -370,6 +371,29 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?" fortran-font-lock-keywords-2))) "Gaudy level highlighting for Fortran mode.") +(defvar fortran-font-lock-keywords-4 + (append fortran-font-lock-keywords-3 + (list (list + (concat "\\<" + (regexp-opt + '("int" "ifix" "idint" "real" "float" "sngl" + "dble" "cmplx" "ichar" "char" "aint" "dint" + "anint" "dnint" "nint" "idnint" "iabs" "abs" + "dabs" "cabs" "mod" "amod" "dmod" "isign" + "sign" "dsign" "idim" "dim" "ddim" "dprod" + "max" "max0" "amax1" "dmax1" "amax0" "max1" + "min0" "amin1" "dmin1" "amin0" "min1" "len" + "index" "lge" "lgt" "lle" "llt" "aimag" + "conjg" "sqrt" "dsqrt" "csqrt" "exp" "dexp" + "cexp" "log" "alog" "dlog" "clog" "log10" + "alog10" "dlog10" "sin" "dsin" "csin" "cos" + "dcos" "ccos" "tan" "dtan" "asin" "dasin" + "acos" "dacos" "atan" "datan" "atan2" "datan2" + "sinh" "dsinh" "cosh" "dcosh" "tanh" "dtanh") + 'paren) "[ \t]*(") '(1 font-lock-builtin-face)))) + "Maximum highlighting for Fortran mode. +Consists of level 3 plus all other intrinsics not already highlighted.") + ;; Comments are real pain in Fortran because there is no way to ;; represent the standard comment syntax in an Emacs syntax table. ;; (We can do so for F90-style). Therefore an unmatched quote in a @@ -408,6 +432,64 @@ These get fixed-format comments fontified.") '(nil "^\\s-+\\(block\\s-*data\\)\\s-*$" 1)) "Value for `imenu-generic-expression' in Fortran mode.") + +;; Hideshow support. +(defconst fortran-blocks-re + (concat "block[ \t]*data\\|select[ \t]*case\\|" + (regexp-opt '("do" "if" "interface" "function" "map" "program" + "structure" "subroutine" "union" "where"))) + "Regexp potentially indicating the start or end of a Fortran \"block\". +Omits naked END statements, and DO-loops closed by anything other +than ENDDO.") + +(defconst fortran-end-block-re + ;; Do-loops terminated by things other than ENDDO cannot be handled + ;; with a regexp. This omission does not seem to matter to hideshow... + (concat "^[ \t0-9]*\\\\)\\)\\)\\ count 0) + (re-search-forward + (concat "\\(" fortran-blocks-re + (if fortran-check-all-num-for-matching-do + "\\|^[ \t]*[0-9]+" "") + "\\|continue\\|end\\)\\>") + nil 'move)) + (beginning-of-line) + (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re)) + (fortran-looking-at-if-then) + (looking-at fortran-start-block-re)) + (setq count (1+ count)) + (if (or (looking-at fortran-end-block-re) + (and (or (looking-at "^[0-9 \t]*continue") + (and fortran-check-all-num-for-matching-do + (looking-at "[ \t]*[0-9]+"))) + (fortran-check-for-matching-do))) + (setq count (1- count)))) + (end-of-line)) + (if (> count 0) (error "Missing block end")))) + +(defun fortran-beginning-of-block (&optional num) + "Move point backwards to the start of the current code block. +With optional argument NUM, go backward that many balanced +blocks. If NUM is negative, go forward to the end of a block. +Does not check for consistency of block types. Interactively, +pushes mark before moving point." + (interactive "p") + (if (interactive-p) (push-mark (point) t)) + (and num (< num 0) (fortran-end-of-block (- num))) + (let ((case-fold-search t) + (count (or num 1))) + (beginning-of-line) + (while (and (> count 0) + (re-search-backward + (concat "\\(" fortran-blocks-re + (if fortran-check-all-num-for-matching-do + "\\|^[ \t]*[0-9]+" "") + "\\|continue\\|end\\)\\>") + nil 'move)) + (beginning-of-line) + (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re)) + (fortran-looking-at-if-then) + (looking-at fortran-start-block-re)) + (setq count (1- count)) + (if (or (looking-at fortran-end-block-re) + (and (or (looking-at "^[0-9 \t]*continue") + (and fortran-check-all-num-for-matching-do + (looking-at "[ \t]*[0-9]+"))) + (fortran-check-for-matching-do))) + (setq count (1+ count))))) + ;; Includes an un-named main program block. + (if (> count 0) (error "Missing block start")))) + (defun fortran-blink-match (regex keyword find-begin) "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." (1+ (point))))) (if (re-search-forward "\\S\"\\s\"\\S\"" eol t) (backward-char 2)) - ;; If the current string is longer than 72 - 6 chars, - ;; break it at the fill column (else infinite loop). + ;; If the current string is longer than (fill-column + ;; - 6) chars, break it at the fill column (else + ;; infinite loop). (if (> (- (point) start) (- fill-column 6 fortran-continuation-indent)) fcpoint From 3718bcde46e57b6ab6571875da25da5d47797749 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 19:07:36 +0000 Subject: [PATCH 081/241] (Fortran Motion): Add fortran-end-of-block, fortran-beginning-of-block. --- man/programs.texi | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/man/programs.texi b/man/programs.texi index 7262523fdc6..09f65f272cc 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1842,7 +1842,7 @@ Emacs normally uses Fortran mode for files with extension @samp{.f}, In addition to the normal commands for moving by and operating on ``defuns'' (Fortran subprograms---functions and subroutines, as well as modules for F90 mode), Fortran mode provides special commands to move by -statements. +statements and other program units. @table @kbd @kindex C-c C-n @r{(Fortran mode)} @@ -1877,21 +1877,26 @@ Move point backward to the previous code block (@code{f90-previous-block}). This is like @code{f90-next-block}, but moves backwards. +@kindex C-M-n @r{(Fortran mode)} @kindex C-M-n @r{(F90 mode)} +@findex fortran-end-of-block @findex f90-end-of-block @item C-M-n -Move to the end of the current code block (@code{f90-end-of-block}). -This is for F90 mode only. With a numeric agument, move forward that -number of blocks. This command checks for consistency of block types -and labels (if present), but it does not check the outermost block -since that may be incomplete. The mark is set before moving point. +Move to the end of the current code block (@code{fortran-end-of-block}, +@code{f90-end-of-block}). With a numeric agument, move forward that +number of blocks. The mark is set before moving point. The F90 mode +version of this command checks for consistency of block types and labels +(if present), but it does not check the outermost block since that may +be incomplete. +@kindex C-M-p @r{(Fortran mode)} @kindex C-M-p @r{(F90 mode)} +@findex fortran-beginning-of-block @findex f90-beginning-of-block @item C-M-p Move to the start of the current code block -(@code{f90-beginning-of-block}). This is like @code{f90-end-of-block}, -but moves backwards. +(@code{fortran-beginning-of-block}, @code{f90-beginning-of-block}). This +is like @code{fortran-end-of-block}, but moves backwards. @end table @node Fortran Indent From b976213b21c91f4d50cfc7aaca443e6900578b98 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 29 Mar 2005 19:11:30 +0000 Subject: [PATCH 082/241] *** empty log message *** --- etc/NEWS | 12 +++++++++--- lisp/ChangeLog | 12 ++++++++++++ man/ChangeLog | 2 ++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index f634e65e847..c3134d08880 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2252,17 +2252,23 @@ from the file name or buffer contents. --- ** Perl mode has a new variable `perl-indent-continued-arguments'. +--- +** Fortran mode does more font-locking by default. Use level 3 +highlighting for the old default. + +++ ** Fortran mode has a new variable `fortran-directive-re'. Adapt this to match the format of any compiler directives you use. Lines that match are never indented, and are given distinctive font-locking. +++ -** F90 mode has new navigation commands `f90-end-of-block', -`f90-beginning-of-block', `f90-next-block', `f90-previous-block'. +** F90 mode and Fortran mode have new navigation commands +`f90-end-of-block', `f90-beginning-of-block', `f90-next-block', +`f90-previous-block', `fortran-end-of-block', +`fortran-beginning-of-block'. --- -** F90 mode now has support for hs-minor-mode (hideshow). +** F90 mode and Fortran mode have support for hs-minor-mode (hideshow). It cannot deal with every code format, but ought to handle a sizeable majority. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ce58cde5d3f..6b623469eea 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,17 @@ 2005-03-29 Glenn Morris + * progmodes/fortran.el (fortran-if-indent): Doc fix. + (fortran-font-lock-keywords-2): Add "where", "elsewhere". + (fortran-font-lock-keywords-4): New variable. + (fortran-blocks-re, fortran-end-block-re) + (fortran-start-block-re): New constants, for hideshow. + (hs-special-modes-alist): Add a Fortran entry. + (fortran-mode-map): Bind fortran-end-of-block, + fortran-beginning-of-block to \M-\C-n, \M-\C-p. + (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4. + (fortran-looking-at-if-then, fortran-end-of-block) + (fortran-beginning-of-block): New functions, for hideshow. + * progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc fix. Tweak regexp. (f90-beginning-of-block): Push mark first. diff --git a/man/ChangeLog b/man/ChangeLog index cde6f8ebf10..ec6fbbdcced 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -15,6 +15,8 @@ * programs.texi (ForIndent Vars): `fortran-if-indent' does other constructs as well. + (Fortran Motion): Add fortran-end-of-block, + fortran-beginning-of-block. 2005-03-29 Kenichi Handa From cf6ffd8c178cb6b8c8931ec1093f1d66d4b64a73 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 20:50:57 +0000 Subject: [PATCH 083/241] Initial version. --- lisp/longlines.el | 392 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 lisp/longlines.el diff --git a/lisp/longlines.el b/lisp/longlines.el new file mode 100644 index 00000000000..9c8e5eee0de --- /dev/null +++ b/lisp/longlines.el @@ -0,0 +1,392 @@ +;;; longlines.el --- automatically wrap long lines + +;; Copyright (C) 2000, 2001, 2004, 2005 by Free Software Foundation, Inc. + +;; Authors: Kai Grossjohann +;; Alex Schroeder +;; Chong Yidong +;; Maintainer: Chong Yidong +;; Keywords: convenience + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Some text editors save text files with long lines, and they +;; automatically break these lines at whitespace, without actually +;; inserting any newline characters. When doing `M-q' in Emacs, you +;; are inserting newline characters. Longlines mode provides a file +;; format which wraps the long lines when reading a file and unwraps +;; the lines when saving the file. It can also wrap and unwrap +;; automatically as editing takes place. + +;; Special thanks to Rod Smith for many useful bug reports. + +;;; Code: + +(require 'easy-mmode) + +(defgroup longlines nil + "Automatic wrapping of long lines when loading files." + :group 'fill) + +(defcustom longlines-auto-wrap t + "*Non-nil means long lines are automatically wrapped after each command. +Otherwise, you can perform filling using `fill-paragraph' or +`auto-fill-mode'. In any case, the soft newlines will be removed +when the file is saved to disk." + :group 'longlines + :type 'boolean) + +(defcustom longlines-wrap-follows-window-size nil + "*Non-nil means wrapping and filling happen at the edge of the window. +Otherwise, `fill-column' is used, regardless of the window size. This +does not work well when the buffer is displayed in multiple windows +with differing widths." + :group 'longlines + :type 'boolean) + +(defcustom longlines-show-hard-newlines nil + "*Non-nil means each hard newline is marked with a symbol. +You can also enable the display temporarily, using the command +`longlines-show-hard-newlines'" + :group 'longlines + :type 'boolean) + +(defcustom longlines-show-effect (propertize "|\n" 'face 'escape-glyph) + "*A string to display when showing hard newlines. +This is used when `longlines-show-hard-newlines' is on." + :group 'longlines + :type 'string) + +;; Internal variables + +(defvar longlines-wrap-beg nil) +(defvar longlines-wrap-end nil) +(defvar longlines-wrap-point nil) +(defvar longlines-showing nil) + +(make-variable-buffer-local 'longlines-wrap-beg) +(make-variable-buffer-local 'longlines-wrap-end) +(make-variable-buffer-local 'longlines-wrap-point) +(make-variable-buffer-local 'longlines-showing) + +;; Mode + +;;;###autoload +(define-minor-mode longlines-mode + "Toggle Long Lines mode. +In Long Lines mode, long lines are wrapped if they extend beyond +`fill-column'. The soft newlines used for line wrapping will not +show up when the text is yanked or saved to disk. + +If `longlines-auto-wrap' is non-nil, lines are automatically +wrapped whenever the buffer is changed. You can always call +`fill-paragraph' to fill individual paragraphs. + +If `longlines-show-hard-newlines' is non-nil, hard newlines will +be marked by a symbol." + nil " ll" nil + (if longlines-mode + ;; Turn on longlines mode + (progn + (use-hard-newlines 1 'never) + (set (make-local-variable 'require-final-newline) nil) + (add-to-list 'buffer-file-format 'longlines) + (add-hook 'change-major-mode-hook 'longlines-mode-off nil t) + (make-local-variable 'buffer-substring-filters) + (add-to-list 'buffer-substring-filters 'longlines-encode-string) + (when longlines-wrap-follows-window-size + (set (make-local-variable 'fill-column) + (- (window-width) window-min-width)) + (add-hook 'window-configuration-change-hook + 'longlines-window-change-function nil t)) + (let ((buffer-undo-list t) + (mod (buffer-modified-p))) + ;; Turning off undo is OK since (spaces + newlines) is + ;; conserved, except for a corner case in + ;; longlines-wrap-lines that we'll never encounter from here + (longlines-decode-region (point-min) (point-max)) + (longlines-wrap-region (point-min) (point-max)) + (set-buffer-modified-p mod)) + (when (and longlines-show-hard-newlines + (not longlines-showing)) + (longlines-show-hard-newlines)) + (when longlines-auto-wrap + (auto-fill-mode 0) + (add-hook 'after-change-functions + 'longlines-after-change-function nil t) + (add-hook 'post-command-hook + 'longlines-post-command-function nil t))) + ;; Turn off longlines mode + (setq buffer-file-format (delete 'longlines buffer-file-format)) + (if longlines-showing + (longlines-unshow-hard-newlines)) + (let ((buffer-undo-list t)) + (longlines-encode-region (point-min) (point-max))) + (remove-hook 'change-major-mode-hook 'longlines-mode-off t) + (remove-hook 'before-kill-functions 'longlines-encode-region t) + (remove-hook 'after-change-functions 'longlines-after-change-function t) + (remove-hook 'post-command-hook 'longlines-post-command-function t) + (remove-hook 'window-configuration-change-hook + 'longlines-window-change-function t) + (kill-local-variable 'fill-column))) + +(defun longlines-mode-off () + "Turn off longlines mode. +This function exists to be called by `change-major-mode-hook' when the +major mode changes." + (longlines-mode 0)) + +;; Showing the effect of hard newlines in the buffer + +(defface longlines-visible-face + '((t (:background "red"))) + "Face used to make hard newlines visible in `longlines-mode'.") + +(defun longlines-show-hard-newlines (&optional arg) + "Make hard newlines visible by adding a face. +With optional argument ARG, make the hard newlines invisible again." + (interactive "P") + (let ((buffer-undo-list t) + (mod (buffer-modified-p))) + (if arg + (longlines-unshow-hard-newlines) + (setq longlines-showing t) + (longlines-show-region (point-min) (point-max))) + (set-buffer-modified-p mod))) + +(defun longlines-show-region (beg end) + "Make hard newlines between BEG and END visible." + (let* ((pmin (min beg end)) + (pmax (max beg end)) + (pos (text-property-any pmin pmax 'hard t))) + (while pos + (put-text-property pos (1+ pos) 'display + (copy-sequence longlines-show-effect)) + (setq pos (text-property-any (1+ pos) pmax 'hard t))))) + +(defun longlines-unshow-hard-newlines () + "Make hard newlines invisible again." + (interactive) + (setq longlines-showing nil) + (let ((pos (text-property-any (point-min) (point-max) 'hard t))) + (while pos + (remove-text-properties pos (1+ pos) '(display)) + (setq pos (text-property-any (1+ pos) (point-max) 'hard t))))) + +;; Wrapping the paragraphs. + +(defun longlines-wrap-region (beg end) + "Wrap each successive line, starting with the line before BEG. +Stop when we reach lines after END that don't need wrapping, or the +end of the buffer." + (setq longlines-wrap-point (point)) + (goto-char beg) + (forward-line -1) + ;; Two successful longlines-wrap-line's in a row mean successive + ;; lines don't need wrapping. + (while (null (and (longlines-wrap-line) + (or (eobp) + (and (>= (point) end) + (longlines-wrap-line)))))) + (goto-char longlines-wrap-point)) + +(defun longlines-wrap-line () + "If the current line needs to be wrapped, wrap it and return nil. +If wrapping is performed, point remains on the line. If the line does +not need to be wrapped, move point to the next line and return t." + (if (longlines-set-breakpoint) + (progn (backward-char 1) + (delete-char 1) + (insert-char ?\n 1) + nil) + (if (longlines-merge-lines-p) + (progn (end-of-line) + (delete-char 1) + ;; After certain commands (e.g. kill-line), there may be two + ;; successive soft newlines in the buffer. In this case, we + ;; replace these two newlines by a single space. Unfortunately, + ;; this breaks the conservation of (spaces + newlines), so we + ;; have to fiddle with longlines-wrap-point. + (if (or (bolp) (eolp)) + (if (> longlines-wrap-point (point)) + (setq longlines-wrap-point + (1- longlines-wrap-point))) + (insert-char ? 1)) + nil) + (forward-line 1) + t))) + +(defun longlines-set-breakpoint () + "Place point where we should break the current line, and return t. +If the line should not be broken, return nil; point remains on the +line." + (move-to-column fill-column) + (if (and (re-search-forward "[^ ]" (line-end-position) 1) + (> (current-column) fill-column)) + ;; This line is too long. Can we break it? + (or (longlines-find-break-backward) + (progn (move-to-column fill-column) + (longlines-find-break-forward))))) + +(defun longlines-find-break-backward () + "Move point backward to the first available breakpoint and return t. +If no breakpoint is found, return nil." + (and (search-backward " " (line-beginning-position) 1) + (save-excursion + (skip-chars-backward " " (line-beginning-position)) + (null (bolp))) + (progn (forward-char 1) + (if (and fill-nobreak-predicate + (run-hook-with-args-until-success + 'fill-nobreak-predicate)) + (progn (skip-chars-backward " " (line-beginning-position)) + (longlines-find-break-backward)) + t)))) + +(defun longlines-find-break-forward () + "Move point forward to the first available breakpoint and return t. +If no break point is found, return nil." + (and (search-forward " " (line-end-position) 1) + (progn (skip-chars-forward " " (line-end-position)) + (null (eolp))) + (if (and fill-nobreak-predicate + (run-hook-with-args-until-success + 'fill-nobreak-predicate)) + (longlines-find-break-forward) + t))) + +(defun longlines-merge-lines-p () + "Return t if part of the next line can fit onto the current line. +Otherwise, return nil. Text cannot be moved across hard newlines." + (save-excursion + (end-of-line) + (and (null (eobp)) + (null (get-text-property (point) 'hard)) + (let ((space (- fill-column (current-column)))) + (forward-line 1) + (if (eq (char-after) ? ) + t ; We can always merge some spaces + (<= (if (search-forward " " (line-end-position) 1) + (current-column) + (1+ (current-column))) + space)))))) + +(defun longlines-decode-region (beg end) + "Turn all newlines between BEG and END into hard newlines." + (save-excursion + (goto-char (min beg end)) + (while (search-forward "\n" (max beg end) t) + (set-hard-newline-properties + (match-beginning 0) (match-end 0))))) + +(defun longlines-encode-region (beg end &optional buffer) + "Replace each soft newline between BEG and END with exactly one space. +Hard newlines are left intact. The optional argument BUFFER exists for +compatibility with `format-alist', and is ignored." + (save-excursion + (let ((mod (buffer-modified-p))) + (goto-char (min beg end)) + (while (search-forward "\n" (max (max beg end)) t) + (unless (get-text-property (match-beginning 0) 'hard) + (replace-match " "))) + (set-buffer-modified-p mod) + end))) + +(defun longlines-encode-string (string) + "Return a copy of STRING with each soft newline replaced by a space. +Hard newlines are left intact." + (let* ((str (copy-sequence string)) + (pos (string-match "\n" str))) + (while pos + (if (null (get-text-property pos 'hard str)) + (aset str pos ? )) + (setq pos (string-match "\n" str (1+ pos)))) + str)) + +;; Auto wrap + +(defun longlines-auto-wrap (&optional arg) + "Turn on automatic line wrapping, and wrap the entire buffer. +With optional argument ARG, turn off line wrapping." + (interactive "P") + (remove-hook 'after-change-functions 'longlines-after-change-function t) + (remove-hook 'post-command-hook 'longlines-post-command-function t) + (if arg + (progn (setq longlines-auto-wrap nil) + (message "Auto wrap disabled.")) + (setq longlines-auto-wrap t) + (add-hook 'after-change-functions + 'longlines-after-change-function nil t) + (add-hook 'post-command-hook + 'longlines-post-command-function nil t) + (let ((mod (buffer-modified-p))) + (longlines-wrap-region (point-min) (point-max)) + (set-buffer-modified-p mod)) + (message "Auto wrap enabled."))) + +(defun longlines-after-change-function (beg end len) + "Update `longlines-wrap-beg' and `longlines-wrap-end'. +This is called by `after-change-functions' to keep track of the region +that has changed." + (unless undo-in-progress + (setq longlines-wrap-beg + (if longlines-wrap-beg (min longlines-wrap-beg beg) beg)) + (setq longlines-wrap-end + (if longlines-wrap-end (max longlines-wrap-end end) end)))) + +(defun longlines-post-command-function () + "Perform line wrapping on the parts of the buffer that have changed. +This is called by `post-command-hook' after each command." + (when longlines-wrap-beg + (cond ((or (eq this-command 'yank) + (eq this-command 'yank-pop)) + (longlines-decode-region (point) (mark t)) + (if longlines-showing + (longlines-show-region (point) (mark t)))) + ((and (eq this-command 'newline) longlines-showing) + (save-excursion + (if (search-backward "\n" nil t) + (longlines-show-region + (match-beginning 0) (match-end 0)))))) + (unless (or (eq this-command 'fill-paragraph) + (eq this-command 'fill-region)) + (longlines-wrap-region longlines-wrap-beg longlines-wrap-end)) + (setq longlines-wrap-beg nil) + (setq longlines-wrap-end nil))) + +(defun longlines-window-change-function () + "Re-wrap the buffer if the window width has changed. +This is called by `window-size-change-functions'." + (when (/= fill-column (- (window-width) window-min-width)) + (setq fill-column (- (window-width) window-min-width)) + (let ((mod (buffer-modified-p))) + (longlines-wrap-region (point-min) (point-max)) + (set-buffer-modified-p mod)))) + +;; Loading and saving + +(add-to-list + 'format-alist + (list 'longlines "Automatically wrap long lines." nil + 'longlines-decode-region 'longlines-encode-region t nil)) + +(provide 'longlines) + +;;; longlines.el ends here From 7fcce20f6949bffc680fd8bd828344fdf04b5748 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 20:53:19 +0000 Subject: [PATCH 084/241] (idle-update-delay): Move definition up. (buffer-substring-filters): New variable. (filter-buffer-substring): New function. (kill-region, copy-region-as-kill): Use it. --- lisp/simple.el | 57 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/lisp/simple.el b/lisp/simple.el index 95b519cf5ca..4d1369ddeda 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -35,6 +35,13 @@ (autoload 'widget-convert "wid-edit") (autoload 'shell-mode "shell")) +(defcustom idle-update-delay 0.5 + "*Idle time delay before updating various things on the screen. +Various Emacs features that update auxiliary information when point moves +wait this many seconds after Emacs becomes idle before doing an update." + :type 'number + :group 'display + :version "22.1") (defgroup killing nil "Killing and yanking commands." @@ -2218,6 +2225,42 @@ These commands include \\[set-mark-command] and \\[start-kbd-macro]." (reset-this-command-lengths) (restore-overriding-map)) +(defvar buffer-substring-filters nil + "List of filter functions for `filter-buffer-substring'. +Each function must accept a single argument, a string, and return +a string. The buffer substring is passed to the first function +in the list, and the return value of each function is passed to +the next. The return value of the last function is used as the +return value of `filter-buffer-substring'. + +If this variable is nil, no filtering is performed.") + +(defun filter-buffer-substring (beg end &optional delete) + "Return the buffer substring between BEG and END, after filtering. +The buffer substring is passed through each of the filter +functions in `buffer-substring-filters', and the value from the +last filter function is returned. If `buffer-substring-filters' +is nil, the buffer substring is returned unaltered. + +If DELETE is non-nil, the text between BEG and END is deleted +from the buffer. + +Point is temporarily set to BEG before caling +`buffer-substring-filters', in case the functions need to know +where the text came from. + +This function should be used instead of `buffer-substring' or +`delete-and-extract-region' when you want to allow filtering to +take place. For example, major or minor modes can use +`buffer-substring-filters' to extract characters that are special +to a buffer, and should not be copied into other buffers." + (save-excursion + (goto-char beg) + (let ((string (if delete (delete-and-extract-region beg end) + (buffer-substring beg end)))) + (dolist (filter buffer-substring-filters string) + (setq string (funcall filter string)))))) + ;;;; Window system cut and paste hooks. (defvar interprogram-cut-function nil @@ -2394,7 +2437,7 @@ specifies the yank-handler text property to be set on the killed text. See `insert-for-yank'." (interactive "r") (condition-case nil - (let ((string (delete-and-extract-region beg end))) + (let ((string (filter-buffer-substring beg end t))) (when string ;STRING is nil if BEG = END ;; Add that string to the kill ring, one way or another. (if (eq last-command 'kill-region) @@ -2430,8 +2473,8 @@ If `interprogram-cut-function' is non-nil, also save the text for a window system cut and paste." (interactive "r") (if (eq last-command 'kill-region) - (kill-append (buffer-substring beg end) (< end beg)) - (kill-new (buffer-substring beg end))) + (kill-append (filter-buffer-substring beg end) (< end beg)) + (kill-new (filter-buffer-substring beg end))) (if transient-mark-mode (setq deactivate-mark t)) nil) @@ -5184,14 +5227,6 @@ See also `normal-erase-is-backspace'." (message "Delete key deletes %s" (if normal-erase-is-backspace "forward" "backward")))) -(defcustom idle-update-delay 0.5 - "*Idle time delay before updating various things on the screen. -Various Emacs features that update auxiliary information when point moves -wait this many seconds after Emacs becomes idle before doing an update." - :type 'number - :group 'display - :version "22.1") - (defvar vis-mode-saved-buffer-invisibility-spec nil "Saved value of `buffer-invisibility-spec' when Visible mode is on.") From 13191e3233268b1ff9d948e9caae347fca30a7bb Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 20:54:04 +0000 Subject: [PATCH 085/241] (copy-to-register, append-to-register, prepend-to-register): Use filter-buffer-substring. --- lisp/register.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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." Called from program, takes four args: REGISTER, START, END and DELETE-FLAG. START and END are buffer positions indicating what to copy." (interactive "cCopy to register: \nr\nP") - (set-register register (buffer-substring start end)) + (set-register register (filter-buffer-substring start end)) (if delete-flag (delete-region start end))) (defun append-to-register (register start end &optional delete-flag) @@ -289,7 +289,7 @@ START and END are buffer positions indicating what to append." (or (stringp (get-register register)) (error "Register does not contain text")) (set-register register (concat (get-register register) - (buffer-substring start end))) + (filter-buffer-substring start end))) (if delete-flag (delete-region start end))) (defun prepend-to-register (register start end &optional delete-flag) @@ -300,7 +300,7 @@ START and END are buffer positions indicating what to prepend." (interactive "cPrepend to register: \nr\nP") (or (stringp (get-register register)) (error "Register does not contain text")) - (set-register register (concat (buffer-substring start end) + (set-register register (concat (filter-buffer-substring start end) (get-register register))) (if delete-flag (delete-region start end))) From 5f9ffb03c99ab08048b78019385b744f1ddc5433 Mon Sep 17 00:00:00 2001 From: Nick Roberts Date: Tue, 29 Mar 2005 20:59:01 +0000 Subject: [PATCH 086/241] *** empty log message *** --- lisp/ChangeLog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6b623469eea..e2cdac00334 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2005-03-30 Nick Roberts + + * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text. + (gud-filter-pending-text): Move in front of gdb. + (gud-overlay-arrow-position): New variable. + (gud-sentinel, gud-display-line): Use it in place of + overlay-arrow-position. + 2005-03-29 Glenn Morris * progmodes/fortran.el (fortran-if-indent): Doc fix. From 63cc3b0975bd3e25b11311b1dc7983afb22311d0 Mon Sep 17 00:00:00 2001 From: Nick Roberts Date: Tue, 29 Mar 2005 20:59:42 +0000 Subject: [PATCH 087/241] (gdb): (Re)-initialise gud-filter-pending-text. (gud-filter-pending-text): Move in front of gdb. (gud-overlay-arrow-position): New variable. (gud-sentinel, gud-display-line): Use it in place of overlay-arrow-position. --- lisp/progmodes/gud.el | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) 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." (defvar gdb-first-prompt t) +(defvar gud-filter-pending-text nil + "Non-nil means this is text that has been saved for later in `gud-filter'.") + ;;;###autoload (defun gdb (command-line) "Run gdb on program FILE in buffer *gud-FILE*. @@ -562,6 +565,7 @@ and source-file directory for your debugger." (setq comint-prompt-regexp "^(.*gdb[+]?) *") (setq paragraph-start comint-prompt-regexp) (setq gdb-first-prompt t) + (setq gud-filter-pending-text nil) (run-hooks 'gdb-mode-hook)) ;; One of the nice features of GDB is its impressive support for @@ -2445,9 +2449,6 @@ comint mode, which see." "Non-nil means don't process anything from the debugger right now. It is saved for when this flag is not set.") -(defvar gud-filter-pending-text nil - "Non-nil means this is text that has been saved for later in `gud-filter'.") - ;; These functions are responsible for inserting output from your debugger ;; into the buffer. The hard work is done by the method that is ;; the value of gud-marker-filter. @@ -2516,19 +2517,22 @@ It is saved for when this flag is not set.") (gud-filter proc "")))))) (defvar gud-minor-mode-type nil) +(defvar gud-overlay-arrow-position nil) +(put 'gud-overlay-arrow-position 'overlay-arrow-string "=>") +(add-to-list 'overlay-arrow-variable-list 'gud-overlay-arrow-position) (defun gud-sentinel (proc msg) (cond ((null (buffer-name (process-buffer proc))) ;; buffer killed ;; Stop displaying an arrow in a source file. - (setq overlay-arrow-position nil) + (setq gud-overlay-arrow-position nil) (set-process-buffer proc nil) (if (memq gud-minor-mode-type '(gdbmi gdba)) (gdb-reset) (gud-reset))) ((memq (process-status proc) '(signal exit)) ;; Stop displaying an arrow in a source file. - (setq overlay-arrow-position nil) + (setq gud-overlay-arrow-position nil) (with-current-buffer gud-comint-buffer (if (memq gud-minor-mode-type '(gdbmi gdba)) (gdb-reset) @@ -2611,13 +2615,13 @@ Obeying it means displaying in another window the specified file and line." (goto-line line) (setq pos (point)) (setq overlay-arrow-string "=>") - (or overlay-arrow-position - (setq overlay-arrow-position (make-marker))) - (set-marker overlay-arrow-position (point) (current-buffer))) + (or gud-overlay-arrow-position + (setq gud-overlay-arrow-position (make-marker))) + (set-marker gud-overlay-arrow-position (point) (current-buffer))) (cond ((or (< pos (point-min)) (> pos (point-max))) (widen) (goto-char pos)))) - (if window (set-window-point window overlay-arrow-position)))))) + (if window (set-window-point window gud-overlay-arrow-position)))))) ;; The gud-call function must do the right thing whether its invoking ;; keystroke is from the GUD buffer itself (via major-mode binding) From 19e7dd23ed5859155f955ff327bba9bfc4cf58de Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 21:06:20 +0000 Subject: [PATCH 088/241] (Refill): Refer to Long Lines Mode. (Longlines): New node. (Auto Fill): Don't index "word wrap" here. (Filling): Add Longlines to menu. --- man/text.texi | 73 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/man/text.texi b/man/text.texi index aba7496d5fc..958e18db8d5 100644 --- a/man/text.texi +++ b/man/text.texi @@ -403,13 +403,13 @@ Text}). * Fill Prefix:: Filling paragraphs that are indented or in a comment, etc. * Adaptive Fill:: How Emacs can determine the fill prefix automatically. +* Longlines:: Editing text with very long lines. @end menu @node Auto Fill @subsection Auto Fill Mode @cindex Auto Fill mode @cindex mode, Auto Fill -@cindex word wrap @dfn{Auto Fill} mode is a minor mode in which lines are broken 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 to typical word processor behavior. This works by running a paragraph-filling command at suitable times. - When you are typing text, only characters which normally trigger -auto filling, like the space character, will trigger refilling. This -is to avoid making it too slow. Apart from self-inserting characters, -other commands which modify the text cause refilling. - - The current implementation is preliminary and probably not robust. -We expect to improve on it. - To toggle the use of Refill mode in the current buffer, type -@kbd{M-x refill-mode}. +@kbd{M-x refill-mode}. When you are typing text, only characters +which normally trigger auto filling, like the space character, will +trigger refilling. This is to avoid making it too slow. Apart from +self-inserting characters, other commands which modify the text cause +refilling. + + The current implementation is preliminary and not robust. You can +get better ``line wrapping'' behavior using Longlines mode. +@xref{Longlines}. However, Longlines mode has an important +side-effect: the newlines that it inserts for you are not saved to +disk, so the files that you make with Longlines mode will appear to be +completely unfilled if you edit them without Longlines mode. @node Fill Commands @subsection Explicit Fill Commands @@ -745,6 +748,56 @@ line, and it should return the appropriate fill prefix based on that line. If it returns @code{nil}, that means it sees no fill prefix in that line. +@node Longlines +@subsection Long Lines Mode +@cindex refilling text, word processor style +@cindex modes, Long Lines +@cindex word wrap +@cindex Long Lines minor mode + + Long Lines mode is a minor mode for @dfn{word wrapping}; it lets you +edit ``unfilled'' text files, which Emacs would normally display as a +bunch of extremely long lines. Many text editors, such as those built +into many web browsers, normally do word wrapping. + +@findex longlines-mode + To enable Long Lines mode, type @kbd{M-x longlines-mode}. If the +text is full of long lines, this will ``wrap'' them +immediately---i.e., break up to fit in the window. As you edit the +text, Long Lines mode automatically re-wraps lines by inserting or +deleting @dfn{soft newlines} as necessary (@pxref{Hard and Soft +Newlines}.) These soft newlines won't show up when you save the +buffer into a file, or when you copy the text into the kill ring, +clipboard, or a register. + +@findex longlines-auto-wrap + Word wrapping is @emph{not} the same as ordinary filling +(@pxref{Fill Commands}). It does not contract multiple spaces into a +single space, recognize fill prefixes (@pxref{Fill Prefix}), or +perform adaptive filling (@pxref{Adaptive Fill}). The reason for this +is that a wrapped line is still, conceptually, a single line. Each +soft newline is equivalent to exactly one space in that long line, and +vice versa. However, you can still call filling functions such as +@kbd{M-q}, and these will work as expected, inserting soft newlines +that won't show up on disk or when the text is copied. You can even +rely entirely on the normal fill commands by turning off automatic +line wrapping, with @kbd{C-u M-x longlines-auto-wrap}. To turn +automatic line wrapping back on, type @kbd{M-x longlines-auto-wrap}. + +@findex longlines-show-hard-newlines + Whenever you type @kbd{RET}, you are inserting a hard newline. If +you want to see where all the hard newlines are, type @kbd{M-x +longlines-show-hard-newlines}. This will mark each hard newline with +a special symbol. The same command with a prefix argument turns this +display off. + + Long Lines mode does not change normal text files that are already +filled, since the existing newlines are considered hard newlines. +Before Long Lines can do anything, you need to transform each +paragraph into a long line. One way is to set @code{fill-column} to a +large number (e.g., @kbd{C-u 9999 C-x f}), re-fill all the paragraphs, +and then set @code{fill-column} back to its original value. + @node Case @section Case Conversion Commands @cindex case conversion From 8e669bbd42c254c32e3fffa489f4d97d48d9bd76 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 21:08:37 +0000 Subject: [PATCH 089/241] (Buffer Contents): Add filter-buffer-substring and buffer-substring-filters. --- etc/NEWS | 22 ++++++++++++++++++++++ lisp/ChangeLog | 15 +++++++++++++++ lispref/ChangeLog | 5 +++++ lispref/text.texi | 35 +++++++++++++++++++++++++++++++++++ man/ChangeLog | 7 +++++++ 5 files changed, 84 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index c3134d08880..8e85c86dde8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2435,6 +2435,17 @@ coding system. * New modes and packages in Emacs 22.1 ++++ +** The new package longlines.el provides a minor mode for editing text +files composed of long lines, based on the `use-hard-newlines' +mechanism. The long lines are broken up by inserting soft newlines, +which are automatically removed when saving the file to disk or +copying into the kill ring, clipboard, etc. By default, Longlines +mode inserts soft newlines automatically during editing, a behavior +referred to as "soft word wrap" in other text editors. This is +similar to Refill mode, but more reliable. To turn the word wrap +feature off, set `longlines-auto-wrap' to nil. + +++ ** The new package conf-mode.el handles thousands of configuration files, with varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, @@ -2711,6 +2722,17 @@ the command `undefined'. (In earlier Emacs versions, it used * Lisp Changes in Emacs 22.1 ++++ +** The new function `filter-buffer-substring' extracts a buffer +substring, passes it through a set of filter functions, and returns +the filtered substring. It is used instead of `buffer-substring' or +`delete-and-extract-region' when copying text into a user-accessible +data structure, like the kill-ring, X clipboard, or a register. The +list of filter function is specified by the new variable +`buffer-substring-filters'. For example, Longlines mode uses +`buffer-substring-filters' to remove soft newlines from the copied +text. + +++ ** An element of buffer-undo-list can now have the form (apply FUNNAME . ARGS), where FUNNAME is a symbol other than t or nil. That stands diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e2cdac00334..2ff35b7344d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,18 @@ +2005-03-29 Richard M. Stallman + + * simple.el (idle-update-delay): Move definition up. + +2005-03-29 Chong Yidong + + * longlines.el: New file. + + * simple.el (buffer-substring-filters): New variable. + (filter-buffer-substring): New function. + (kill-region, copy-region-as-kill): Use it. + + * register.el (copy-to-register, append-to-register) + (prepend-to-register): Use filter-buffer-substring. + 2005-03-30 Nick Roberts * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text. diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 232e992e658..7f22ad2e485 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,8 @@ +2005-03-29 Chong Yidong + + * text.texi (Buffer Contents): Add filter-buffer-substring and + buffer-substring-filters. + 2005-03-26 Chong Yidong * anti.texi (Antinews): Mention `G' interactive code. 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 properties, just the characters themselves. @xref{Text Properties}. @end defun +@defun filter-buffer-substring start end &optional delete +This function passes the buffer text between @var{start} and @var{end} +through the filter functions specified by the variable +@code{buffer-substring-filters}, and returns the value from the last +filter function. If @code{buffer-substring-filters} is @code{nil}, +the value is the unaltered text from the buffer, what +@code{buffer-substring} would return. + +If @var{delete} is non-@code{nil}, this function deletes the text +between @var{start} and @var{end} after copying it, like +@code{delete-and-extract-region}. + +Lisp code should use this function instead of @code{buffer-substring} +or @code{delete-and-extract-region} when copying into user-accessible +data structures such as the kill-ring, X clipboard, and registers. +Major and minor modes can add functions to +@code{buffer-substring-filters} to alter such text as it is copied out +of the buffer. +@end defun + +@defvar buffer-substring-filters +This variable should be a list of functions that accept a single +argument, a string, and return a string. +@code{filter-buffer-substring} passes the buffer substring to the +first function in this list, and the return value of each function is +passed to the next function. The return value of the last function is +used as the return value of @code{filter-buffer-substring}. + +As a special convention, point is set to the start of the buffer text +being operated on (i.e., the @var{start} argument for +@code{filter-buffer-substring}) before these functions are called. + +If this variable is @code{nil}, no filtering is performed. +@end defvar + @defun buffer-string This function returns the contents of the entire accessible portion of the current buffer as a string. It is equivalent to diff --git a/man/ChangeLog b/man/ChangeLog index ec6fbbdcced..c67256c5ec9 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,10 @@ +2005-03-29 Chong Yidong + + * text.texi (Refill): Refer to Long Lines Mode. + (Longlines): New node. + (Auto Fill): Don't index "word wrap" here. + (Filling): Add Longlines to menu. + 2005-03-29 Richard M. Stallman * xresources.texi: Minor fixes. From c364fe1954f1266e3f59df49a2de731a790551cf Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Tue, 29 Mar 2005 22:28:11 +0000 Subject: [PATCH 090/241] *** empty log message *** --- src/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 1a5561160d0..55c11986e12 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2005-03-30 Kim F. Storm + + * xdisp.c (display_line): Allow multiple overlay arrows in window. + 2005-03-28 Stefan Monnier * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP. From 39df553f4d983f57c83fcca5c3f6ccd6e9d24c06 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Tue, 29 Mar 2005 22:28:27 +0000 Subject: [PATCH 091/241] (display_line): Allow multiple overlay arrows in window. --- src/xdisp.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index fdaf2bf1a3c..d463a3d7fcd 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -462,7 +462,7 @@ static Lisp_Object Vwindow_size_change_functions; Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook; -/* Nonzero if overlay arrow has been displayed once in this window. */ +/* Nonzero if an overlay arrow has been displayed in this window. */ static int overlay_arrow_seen; @@ -15261,10 +15261,9 @@ display_line (it) mark this glyph row as the one containing the overlay arrow. This is clearly a mess with variable size fonts. It would be better to let it be displayed like cursors under X. */ - if (! overlay_arrow_seen - && (overlay_arrow_string - = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), - !NILP (overlay_arrow_string))) + if ((overlay_arrow_string + = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), + !NILP (overlay_arrow_string))) { /* Overlay arrow in window redisplay is a fringe bitmap. */ if (STRINGP (overlay_arrow_string)) From f59006cb6e45c0611c6658e8375369f930e02589 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 23:17:30 +0000 Subject: [PATCH 092/241] (set-mark): Doc fix. --- lisp/simple.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/simple.el b/lisp/simple.el index 4d1369ddeda..753391dabe8 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2999,7 +2999,7 @@ the user to see that the mark has moved, and you want the previous mark position to be lost. Normally, when a new mark is set, the old one should go on the stack. -This is why most applications should use push-mark, not set-mark. +This is why most applications should use `push-mark', not `set-mark'. Novice Emacs Lisp programmers often try to use the mark for the wrong purposes. The mark saves a location for the user's convenience. From 691101a4d8b9596f62313665558fc2c90399c3c2 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 23:24:27 +0000 Subject: [PATCH 093/241] (Single-Byte Character Support): Reinstall the C-x 8 info. --- man/mule.texi | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/man/mule.texi b/man/mule.texi index 26a2d91cf20..c085839cbd8 100644 --- a/man/mule.texi +++ b/man/mule.texi @@ -1376,6 +1376,27 @@ however, on a console terminal or in @code{xterm}, you can arrange for Meta to be converted to @kbd{ESC} and still be able type 8-bit characters present directly on the keyboard or using @kbd{Compose} or @kbd{AltGr} keys. @xref{User Input}. + +@kindex C-x 8 +@cindex @code{iso-transl} library +@cindex compose character +@cindex dead character +@item +For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose +character'' prefix for entry of non-@acronym{ASCII} Latin-1 printing +characters. @kbd{C-x 8} is good for insertion (in the minibuffer as +well as other buffers), for searching, and in any other context where +a key sequence is allowed. + +@kbd{C-x 8} works by loading the @code{iso-transl} library. Once that +library is loaded, the @key{ALT} modifier key, if the keyboard has +one, serves the same purpose as @kbd{C-x 8}: use @key{ALT} together +with an accent character to modify the following letter. In addition, +if the keyboard has keys for the Latin-1 ``dead accent characters,'' +they too are defined to compose with the following character, once +@code{iso-transl} is loaded. + +Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations. @end itemize @node Charsets From b36a687ca1707b1227f772a5580876cbab84acc2 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 29 Mar 2005 23:24:34 +0000 Subject: [PATCH 094/241] *** empty log message *** --- lisp/ChangeLog | 1 + man/ChangeLog | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2ff35b7344d..368486d01cc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,7 @@ 2005-03-29 Richard M. Stallman * simple.el (idle-update-delay): Move definition up. + (set-mark): Doc fix. 2005-03-29 Chong Yidong diff --git a/man/ChangeLog b/man/ChangeLog index c67256c5ec9..6da44c9a8e2 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,7 @@ +2005-03-29 Richard M. Stallman + + * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info. + 2005-03-29 Chong Yidong * text.texi (Refill): Refer to Long Lines Mode. From 7426980644c499592a211eca14388f49c4e521f2 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Wed, 30 Mar 2005 00:16:30 +0000 Subject: [PATCH 095/241] *** empty log message *** --- lisp/ChangeLog | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 368486d01cc..e893d00b591 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2005-03-29 Kenichi Handa + + * language/thai.el ("Thai"): Set setup-function and exit-function + for Thai language environment. + + * language/thai-util.el: Require thai-word. + (thai-word-mode-map): New variable. + (thai-word-mode): New minor mode. + (setup-thai-language-environment-internal): New function. + (exit-thai-language-environment-internal): New function. + + * language/thai-word.el (thai-word-table): Declare it by defvar, + use dolist to initialize it. + (thai-kill-word, thai-backward-kill-word, thai-transpose-words) + (thai-fill-find-break-point): New functions. + 2005-03-29 Richard M. Stallman * simple.el (idle-update-delay): Move definition up. From 96a29ab7a8e391db9078d1ffc0c76faffb470a1b Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Wed, 30 Mar 2005 00:35:44 +0000 Subject: [PATCH 096/241] Changes from arch/CVS synchronization --- lisp/longlines.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/longlines.el b/lisp/longlines.el index 9c8e5eee0de..8491a0b7960 100644 --- a/lisp/longlines.el +++ b/lisp/longlines.el @@ -389,4 +389,5 @@ This is called by `window-size-change-functions'." (provide 'longlines) +;; arch-tag: 3489d225-5506-47b9-8659-d8807b77c624 ;;; longlines.el ends here From 10ace8ea53395cc0ca656080cc3e828febc39b34 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Wed, 30 Mar 2005 08:14:32 +0000 Subject: [PATCH 097/241] Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-220 Merge from gnus--rel--5.10 Patches applied: * gnus--rel--5.10 (patch 45-52) - Update from CVS - Update from CVS: texi Makefile.in CVS keyw cruft - Update from CVS: ChangeLog tweaks 2005-03-29 Reiner Steib * etc/gnus-refcard.tex, etc/gnus-logo.eps: New files. 2005-03-25 Katsumi Yamaoka * lisp/gnus/message.el (message-resend): Bind rfc2047-encode-encoded-words. * lisp/gnus/mm-util.el (mm-replace-in-string): New function. (mm-xemacs-find-mime-charset-1): Ignore errors while loading latin-unity, which cannot be used with XEmacs 21.1. * lisp/gnus/rfc2047.el (rfc2047-encode-function-alist): Rename from rfc2047-encoding-function-alist in order to avoid conflicting with the old version. (rfc2047-encode-message-header): Remove useless goto-char. (rfc2047-encodable-p): Don't move point. (rfc2047-syntax-table): Treat `(' and `)' as is. (rfc2047-encode-region): Concatenate words containing non-ASCII characters in structured fields; don't encode space-delimited ASCII words even in unstructured fields; don't break words at char-category boundaries; encode encoded words in structured fields; treat text within parentheses as special; show the original text when error has occurred; move point to the end of the region after encoding, suggested by IRIE Tetsuya ; treat backslash-quoted characters as non-special; check carefully whether to encode special characters; fix some kind of misconfigured headers; signal a real error if debug-on-quit or debug-on-error is non-nil; don't infloop, suggested by Hiroshi Fujishima ; assume the close parenthesis may be included in the encoded word; encode bogus delimiters. (rfc2047-encode-string): Use mm-with-multibyte-buffer. (rfc2047-encode-max-chars): New variable. (rfc2047-encode-1): New function. (rfc2047-encode): Use it; encode text so that it occupies the maximum width within 76-column; work correctly on Q encoding for iso-2022-* charsets; fold the line before encoding; don't append a space if the encoded word includes close parenthesis. (rfc2047-fold-region): Use existing whitespace for LWSP; make it sure not to break a line just after the header name. (rfc2047-b-encode-region): Remove. (rfc2047-b-encode-string): New function. (rfc2047-q-encode-region): Remove. (rfc2047-q-encode-string): New function. (rfc2047-encode-parameter): New function. (rfc2047-encoded-word-regexp): Don't use shy group. (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change. (rfc2047-parse-and-decode): Ditto. (rfc2047-decode): Treat the ascii coding-system as raw-text by default. 2005-03-25 Lars Magne Ingebrigtsen * lisp/gnus/rfc2047.el (rfc2047-encode-encoded-words): New variable. (rfc2047-field-value): Strip props. (rfc2047-encode-message-header): Disabled header folding -- not all headers can be folded, and this should be done by the message composition mode. Probably. I think. (rfc2047-encodable-p): Say that =? needs encoding. (rfc2047-encode-region): Encode =? strings. 2005-03-25 Jesper Harder * lisp/gnus/rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231 language tags; remove unnecessary '+'. Reported by Stefan Wiens . (rfc2047-decode-string): Don't cons a string unnecessarily. (rfc2047-parse-and-decode, rfc2047-decode): Use a character for the encoding to avoid consing a string. (rfc2047-decode): Use mm-subst-char-in-string instead of mm-replace-chars-in-string. 2005-03-25 TSUCHIYA Masatoshi * lisp/gnus/rfc2047.el (rfc2047-encode): Use uppercase letters to specify encodings of MIME-encoded words, in order to improve interoperability with several broken MUAs. 2005-03-21 Reiner Steib * lisp/gnus/gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and pass it to `gnus-browse-read-group'. (gnus-browse-read-group): Add NUMBER argument and pass it to `gnus-group-read-ephemeral-group'. * lisp/gnus/gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER argument and pass it to `gnus-group-read-group'. 2005-03-19 Aidan Kehoe * lisp/gnus/mm-util.el (mm-xemacs-find-mime-charset): Only call mm-xemacs-find-mime-charset-1 if we have the mule feature available at runtime. 2005-03-25 Katsumi Yamaoka * man/emacs-mime.texi (Display Customization): Markup fixes. (rfc2047): Update. 2005-03-23 Reiner Steib * man/gnus-faq.texi: Replaced with auto-generated version. --- etc/ChangeLog | 4 + etc/gnus-logo.eps | 1055 ++++++++++++ etc/gnus-refcard.tex | 1427 +++++++++++++++++ lisp/gnus/ChangeLog | 91 ++ lisp/gnus/gnus-group.el | 6 +- lisp/gnus/gnus-srvr.el | 19 +- lisp/gnus/message.el | 3 +- lisp/gnus/mm-util.el | 30 +- lisp/gnus/rfc2047.el | 639 +++++--- man/ChangeLog | 9 + man/emacs-mime.texi | 33 +- man/gnus-faq.texi | 3367 ++++++++++++++++++--------------------- man/message.texi | 2 +- 13 files changed, 4597 insertions(+), 2088 deletions(-) create mode 100644 etc/gnus-logo.eps create mode 100644 etc/gnus-refcard.tex diff --git a/etc/ChangeLog b/etc/ChangeLog index 5632e1aaf12..4272d50cf2a 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2005-03-29 Reiner Steib + + * gnus-refcard.tex, gnus-logo.eps: New files. + 2005-03-23 David Ponce * NEWS: Mention recentf-keep. 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 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: gnuslogo1.ps +%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley +%%BoundingBox: 0 0 493 505 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 62 string def + +% lower left corner +0 0 translate + +% size of image (on paper, in 1/72inch coords) +493.0 505.0 scale + +% dimensions of data +493 505 1 + +% mapping matrix +[493 0 0 -505 0 505] + +{currentfile pix readhexstring pop} +image +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff01fffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff8003ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff0000ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff8000007ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000003ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe0000000ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000003fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000000fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffc0000000007ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff80000000003ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000001ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffe00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffc00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8000000000007f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe0000000000001f8 +fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8000000000000078 +fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000000000038 +fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000018 +ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000008 +ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffff000040000000000000 +fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffff0007ffc00000000000 +fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff +fffffffffffffffffffffffffffffffffe001ffffc0000000000 +fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff +fffffffffffffffffffffffffffffffffc003ffffe0000000000 +fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff +fffffffffffffffffffffffffffffffffc007fffffc000000000 +fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff +fffffffffffffffffffffffffffffffff800fffffff000000000 +ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff +fffffffffffffffffffffffffffffffff801fffffff800000000 +ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff +fffffffffffffffffffffffffffffffff003ffffffff00000000 +ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff +fffffffffffffffffffffffffffffffff007ffffffff00000000 +ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe00fffffffff80000000 +fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe01fffffffffc0000008 +fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff +ffffffffffffffffffffffffffffffffc03fffffffffc0000008 +fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffffc07ffffffffff0000000 +fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffff807ffffffffff0000000 +fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff +ffffffffffffffffffffffffffffffff80fffffffffff0000008 +fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff +ffffffffffffffffffffffffffffffff81fffffffffff8000008 +fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff +ffffffffffffffffffffffffffffffff01fffffffffff8000008 +ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff +ffffffffffffffffffffffffffffffff03fffffffffffc000008 +ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff +fffffffffffffffffffffffffffffffe03fffffffffffc000008 +ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff +fffffffffffffffffffffffffffffffe0ffffffffffffe000008 +ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff +fffffffffffffffffffffffffffffffc0ffffffffffffe000008 +ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff +fffffffffffffffffffffffffffffffc1fffffffffffff000008 +ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff +fffffffffffffffffffffffffffffffc3fffffffffffff000008 +ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff +fffffffffffffffffffffffffffffff8ffffffffffffff000008 +ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff +fffffffffffffffffffffffffffffffcffffffffffffff000008 +fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff +ffffffffffffffffffffffffffffc7ffffffffffffffff000008 +fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff +fffffffffeffffffffffffffffff87ffffffffffffffff000008 +f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff +fffffffffcffffffffffffffffff87ffffffffffffffff000008 +f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff +fffffffff8ffffffffffffffffff07ffffffffffffffff000008 +f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff +fffffffff8fffffffffffffffffe0fffffffffffffffff000008 +f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff +fffffffff0fffffffffffffffffe0fffffffffffffffff000018 +e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff +fffffffff0fffffffffffffffffc0fffffffffffffffff000018 +e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff +ffffffffe0fffffffffffffffffc1fffffffffffffffff000018 +c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff +ffffffffe0fffffffffffffffff81fffffffffffffffff000018 +c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff +ffffffffc0fffffffffffffffff83fffffffffffffffff000018 +800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff000038 +800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff800038 +00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff +fffffffe03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff +fffffffc03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff +fffffff803ffffffffffffffffc07fffffffffffffffff800038 +00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff +fffffff007ffffffffffffffffc0ffffffffffffffffff800038 +0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff +fffffff007ffffffffffffffff80ffffffffffffffffff800078 +0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff +ffffffc00fffffffffffffffff81ffffffffffffffffff800078 +8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff +ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8 +8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff +ffffff801fffffffffffffffff03ffffffffffffffffff8000f8 +c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff +fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8 +e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff +fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8 +f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff +fffff0003ffffffffffffffff80fffffffffffffffffff8000f8 +f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff +ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8 +f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f +ffff00007fffffffffffffffe01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007 +fffc00007fffffffffffffffc01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000 +ffe000007ffffbffffffffff801fffffffffffffffffff0001f8 +fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000 +00000000fffff3ffffffffff003fffffffffffffffffff0001f8 +fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000 +00000001fffff1fffffffffe003fffffffffffffffffff0003f8 +ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000 +00000001ffffe1fffffffffc007fffffffffffffffffff0003f8 +ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000 +00000003ffffe0fffffffff0007fffffffffffffffffff0003f8 +ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000 +00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8 +ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000 +00000007ffffc07fffffff8000ffffffffffffffffffff0003f8 +fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000 +00000007ffff803fffffff0000fffffffffffffffffffe0007f8 +fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000 +00000007ffff801ffffffc0001fffffffffffffffffffe0007f8 +fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000 +0000000fffff000ffffff80003fffffffffffffffffffe0007f8 +fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000 +0000000fffff0007ffffe00003fffffffffffffffffffe0007f8 +ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000 +0000001ffffe0001ffff800007fffffffffffffffffffe000ff8 +ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000 +0000001ffffe0000fffc000007fffffffffffffffffffe000ff8 +ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000 +0000003ffffe0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000 +0000003ffffc0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000 +000000fffff80000000000003ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000 +000003fffff00000000000007ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000 +000007ffffe00000000000007ffffffffffffffffffffe003ff8 +fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000 +000007ffffe0000000000000fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000 +00001fffffc0000000000001fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000 +00001fffffc0000000000003fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000 +00003fffff80000000000003fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000 +00007fffff80000000000007fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000 +0000ffffff0000000000000ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000 +0001ffffff0000000000001ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000 +0003fffffe0000000000001ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000 +0007fffffe0000000000003ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000 +001ffffffc0000000000007ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000 +003ffffffc000000000000fffffffffffffffffffffff800fff8 +ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000 +00fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000 +03fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000 +07fffffff0000000000007fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000 +3ffffffff000000000000ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f +fffffffff000000000003ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff800000000007ffffffffffffffffffffffff003fff8 +fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff80000000000ffffffffffffffffffffffffe003fff8 +fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffc0000000003ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe0000000007ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe000000000fffffffffffffffffffffffffe00ffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000001fffffffffffffffffffffffffe00ffff8 +ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff +ffffffffff800000007fffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff +ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff +ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff +fffffffffff800001fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff +fffffffffffe00007fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff +ffffffffffff8003ffffffffffffffffffffffffffff801ffff8 +ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe01fffff8 +ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc03fffff8 +fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe01ffffff8 +ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc03ffffff8 +fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff007ffffff8 +fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe01ffffffff8 +fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff80fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01fffffffff8 +ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff03fffffffff8 +ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff00ffffffffff8 +fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe01ffffffffff8 +ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe03ffffffffff8 +ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffdffffffffffffffffffe03ffffffffff8 +ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8 +ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff +ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8 +ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +ffffffffffffffffff07ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffe07fffffffffffffffffe01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffe03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +fffffffffffffffff03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +ffffffffffffffffe01ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffe03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff +fffffffffffffff807ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff807ffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe01fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffc03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00fffffffffffffffffffe00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe01fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe03fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc03fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc07fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff807fffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff807fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00fffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff +fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffff803ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff +fffffffffff807ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff801fffffffffffffffffffff801ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff803fffffffffffffffffffff801ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff +ffffffffff003fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff +fffffffffe007fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff +fffffffffc007fffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff +fffffffffc00ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff800ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff801ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff +fffffffff803ffffffffffffffffffffff007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff +fffffffff003fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff +ffffffffe007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff800ffffffffffffffffffffffe00fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff000ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff +fffffffe001ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +fffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff +0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07fffff0007ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07ffffe000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8 +03ffffc000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0 +03ffff8001fffffffffffffffffffffff801fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0 +01ffff0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0 +003ffc0007fffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80 +001fe0001ffffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00 +000fc0001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00 +000000001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000 +00000007ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000 +0000000fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000 +0000003fffffffffffffffffffffffffc01ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000 +000000ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000 +000007ffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000 +00000fffffffffffffffffffffffffff003ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000 +00000fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000 +00001fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200 +00003fffffffffffffffffffffffffff007ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700 +00007fffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80 +0000ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0 +0003ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8 +001fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc +007fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe +00ffffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff +dfffffffffffffffffffffffffffffff0ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff +fffffffffffffffffffffffffffffffe3ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 + + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%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 @@ +\documentclass{article} + +% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex +% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and +% gnuslogo-booklet.eps). +% +% From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps), +% we can generate the refcard and the booklet version. Appropriate Makefile +% rules were added. This simplifies to distribute the refcard with Emacs. +% +% (Reiner Steib, March 2005) + +\usepackage{ifthen} +\ifthenelse{\isundefined{\booklettrue}}{ + \typeout{Creating reference card...} +}{ + \typeout{Creating reference booklet...}} + +\usepackage{supertabular} + +\newlength{\logowidth} \setlength{\logowidth} {6.861in} +\newlength{\logoheight} \setlength{\logoheight}{7.013in} + +\usepackage{graphicx} + +\usepackage{geometry} + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Card + + \def\Guide{Card}\def\guide{card} + \def\logoscale{0.25} + + % Page setup for the refcard: + + % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in} + % \setlength{\topmargin}{-1.0in} + % % the same settings work for A4, although there is a bit of space at the + % % top and bottom of the page. + % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in} + + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm} + }{ + \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm} + } + +}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Booklet + + \def\Guide{Booklet}\def\guide{booklet} + \def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib + + % FIXME: Use geometry package. --rsteib +% \ifthenelse{\isundefined{\letterpapertrue}}{ +% \textwidth 4.9in \textheight 7.35in \topmargin -1.0in +% }{ +% \textwidth 4.5in \textheight 7.5in \topmargin -1.0in +% } +% \oddsidemargin -0.5in \evensidemargin -0.5in + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm} + }{ + % FIXME: Use geometry package. --rsteib + \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm} + } + + \def\sec{\section} + \def\subsec{\subsection} + \def\subsubsec{\subsubsection} + \def\blankpage{\vspace*{\fill}\par + %\centerline{(This page intentionally left blank.)} + \par\vspace*{\fill}\pagebreak} +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % +%% include file for the Gnus refcard and booklet + +\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions +\def\date{Mar, 2005} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +%% +\newlength{\keycolwidth} +\newenvironment{keys}[1]% #1 is the widest key +{\nopagebreak%\noindent% + \settowidth{\keycolwidth}{#1}% + \addtolength{\keycolwidth}{\tabcolsep}% + \addtolength{\keycolwidth}{-\columnwidth}% + \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% + {\end{supertabular}\\} + +%% uncomment the first definition if you do not want pagebreaks in maps +%%\newcommand{\esamepage}{\samepage} +\newcommand{\esamepage}{} + +\newcommand*{\B}[1]{{\bf#1})} % bold l)etter + +\newcommand{\Title}{% + \begin{center} + {\bf\LARGE Gnus \progver\ Reference \Guide\\} + %{\normalsize \Guide\ version \refver} + \end{center} + } + +% \newcommand*{\LogoOLD}[1]{\centerline{% +% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight +% {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}} + +\newcommand*{\Logo}[1]{\centerline{% + \includegraphics[width=\logoscale\logowidth]{gnus-logo}}} + +\newcommand{\Copyright}{% + \begin{center} + Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* + Copyright \copyright\ 1995 Vladimir Alexiev + $<$vladimir@cs.ualberta.ca$>$.\\* + Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* + Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\* + Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne + Ingebrigtsen.\\* + and the Emacs Help Bindings feature (C-h b).\\* + Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* + \end{center} + + Permission is granted to make and distribute copies of this reference + \guide{} provided the copyright notice and this permission are preserved on + all copies. Please send corrections, additions and suggestions to the + current maintainer's email address. \Guide{} last edited on \date. + } + +\newcommand{\Notes}{% + \subsection*{Notes} + {\esamepage + Gnus is complex. Currently it has some 876 interactive (user-callable) + functions. Of these 618 are in the two major modes (Group and + Summary/Article). Many of these functions have more than one binding, some + have 3 or even 4 bindings. The total number of keybindings is 677. So in + order to save 40\% space, every function is listed only once on this + \guide, under the ``more logical'' binding. Alternative bindings are given + in parentheses in the beginning of the description. + + Many Gnus commands are affected by the numeric prefix. Normally you enter a + prefix by holding the Meta key and typing a number, but in most Gnus modes + you don't need to use Meta since the digits are not self-inserting. The + prefixed behavior of commands is given in [brackets]. Often the prefix is + used to specify: + + \quad [distance] How many objects to move the point over. + + \quad [scope] How many objects to operate on (including the current one). + + \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it + determines how many objects to operate on. Else if there are some objects + marked with the process mark \#, these are operated on. Else only the + current object is affected. + + \quad [level] A group subscribedness level. Only groups with a lower or + equal level will be affected by the operation. If no prefix is given, + `gnus-group-default-list-level' is used. If + `gnus-group-use-permanent-levels', then a prefix to the `g' and `l' + commands will also set the default level. + + \quad [score] An article score. If no prefix is given, + `gnus-summary-default-score' is used. \\*[\baselineskip] + % some keys + Gnus startup-commands:\\* + \begin{keys}{M-x gnus-unplugged} + M-x gnus & start Gnus. \\ + M-x gnus-no-server & start Gnus without connecting to server + (i.e. to read mail). \\ + \end{keys} + Additionally, there are the two commands \texttt{gnus-plugged} and + \texttt{gnus-unplugged}, which are only used if you want to download + news and/or read previously downloaded news offline (see C-c C-i g Gnus + Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in + \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus + Unplugged. + % + \begin{keys}{C-c C-i} + C-c C-i & Go to the Gnus online {\bf info}.\\ + C-c C-b & Send a Gnus {\bf bug} report.\\ + \end{keys} + }} + +\newcommand{\GroupLevels}{% + The table below assumes that you use the default Gnus levels. + Fill your user-specific levels in the blank cells.\\[1\baselineskip] + \begin{tabular}{|c|l|l|} + \hline + Level & Groups & Status \\ + \hline + 1 & draft/mail groups & \\ + 2 & mail groups & \\ + 3 & & subscribed \\ + 4 & & \\ + 5 & default list level & \\ + \hline + 6 & & unsubscribed \\ + 7 & & \\ + \hline + 8 & & zombies \\ + \hline + 9 & & killed \\ + \hline + \end{tabular}} + +\newcommand{\MarkCharacters}{% + {\esamepage If a command directly sets a mark, it is shown in parentheses.\\* + \newlength{\markcolwidth} + \settowidth{\markcolwidth}{` '}% widest character + \addtolength{\markcolwidth}{4\tabcolsep} + \addtolength{\markcolwidth}{-\columnwidth} + \newlength{\markdblcolwidth} + \setlength{\markdblcolwidth}{\columnwidth} + \addtolength{\markdblcolwidth}{-2\tabcolsep} + \begin{tabular}{|c|p{-\markcolwidth}|} + \hline + \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.} + All these marks appear in the first column of the summary line, and so + are mutually exclusive.}\\ + \hline + ` ' & (M-u, M SPC, M c) Not read.\\ + ! & (!, M !, M t) Ticked (interesting).\\ + ? & (?, M ?) Dormant (only followups are interesting).\\ + E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ + G & (C, B DEL) Canceled article (or deleted in mailgroups).\\ + \$ & (M-d, M s x, S x). Marked as spam.\\ + \hline\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {The marks below mean that the article + is read (killed, uninteresting), and have more or less the same effect. + Some commands however explicitly differentiate between them (e.g.\ M + M-C-r, adaptive scoring).}\\ + \hline + r & (d, M d, M r) Deleted (marked as {\bf read}).\\ + C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ + F & SOUPed article. See the manual.\\ + O & {\bf Old} (read in a previous session).\\ + K & (k, M k; C-k, M K) {\bf Killed}.\\ + M & Article marked as read by duplicate suppression.\\ + Q & Article is part of a sparse thread (see ``Threading'' + in the manual).\\ + R & {\bf Read} (viewed in actuality).\\ + X & Killed by a kill file.\\ + Y & Killed due to low score.\\ + \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {{\bf Marks not affecting visibility}}\\ + \hline + \# & (\#, M \#, M P p) Processable (will be affected by the next operation). + [2]\\ + A & {\bf Answered} (followed-up or replied). [2]\\ + F & Forwarded. [2]\\ + $\ast$ & Cached. [2]\\ + S & Saved. [2]\\ + N & Recently arrived. [2]\\ + . & Unseen. [2]\\ + + & Over default score. [3]\\ + $-$ & Under default score. [3]\\ + $=$ & Has children (thread underneath it). Add `\%e' to + `gnus-summary-line-format'. [3]\\ + \hline + \end{tabular} + }} + +\newcommand{\GroupModeGeneral}{% + \begin{keys}{C-c M-C-x} + RET & (=) Enter this group. [Prefix: how many (read) articles to fetch. + Positive: newest articles, negative: oldest ones; non-numerical: + view all articles, not just unread]\\ + M-RET & Enter group quickly.\\ + M-SPC & Same as RET but does not expunge and hide dormants.\\ + M-C-RET & Enter group without any processing, changes will not be permanent.\\ + SPC & Select this group and display the first (unread) article. [Same + prefix as above.]\\ + ? & Give a very short help message.\\ + $<$ & Go to the beginning of the Group buffer.\\ + $>$ & Go to the end of the Group buffer.\\ + , & Jump to the lowest-level group with unread articles.\\ + . & Jump to the first group with unread articles.\\ + \^{} & Enter the Server buffer mode.\\ + a & Post an {\bf article} to a group + [Prefix: use group under point to find posting-style].\\ + b & Find {\bf bogus} groups and delete them.\\ + c & Mark all unticked articles in this group as read ({\bf catch-up}). + [p/p]\\ + g & Check the server for new articles ({\bf get}). [level]\\ + M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ + j & {\bf Jump} to a group.\\ + m & {\bf Mail} a message to someone + [Prefix: use group under point to find posting-style].\\ + n & Go to the {\bf next} group with unread articles. [distance]\\ + M-n & Go to the {\bf next} group on the same or lower level. + [distance]\\ + p & (DEL) Go to the {\bf previous} group with unread articles. + [distance]\\ + M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\ + q & {\bf Quit} Gnus.\\ + r & Re-read the init file ({\bf reset}).\\ + s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if + `gnus-save-newsrc-file').\\ + z & Suspend (kill all buffers of) Gnus.\\ + B & {\bf Browse} a foreign server.\\ + C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\ + F & {\bf Find} new groups and process them.\\ + N & Go to the {\bf next} group. [distance]\\ + P & Go to the {\bf previous} group. [distance]\\ + Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ + R & {\bf Restart} Gnus.\\ + Z & Clear the dribble buffer.\\ + M-c & Clear data from group (marks and list of read articles). \\ + C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level + (depending on `gnus-group-sort-function').\\ + C-c C-x & Run all expirable articles in this group through the {\bf expiry} + process.\\ + C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ + C-c M-g & Activate all {\bf groups}.\\ + C-c C-i & Gnus online-manual ({\bf info}).\\ + C-x C-t & {\bf Transpose} two groups.\\ + H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ + H c & Display this group's {\bf charter}. [Prefix: query for group]\\ + H C & Display this group's {\bf control message} (using + ange-ftp). [Prefix: query for group]\\ + H v & (V) Display the Gnus {\bf version} number.\\ + H d & (C-c C-d) Show the {\bf description} of this group + [Prefix: re-read from server].\\ + M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\ + D g & Regenerate a Sieve script from group parameters.\\ + D u & Regenerate Sieve script and {\bf upload} to server.\\ + \end{keys} + } + +\newcommand{\ListGroups}{% + {\esamepage + \begin{keys}{A M} + A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ + A k & (C-c C-l) List all {\bf killed} groups. + [Prefix: look at active-file from server]\\ + A l & List all groups on a specific level. + [Prefix: also list groups with no unread articles]\\ + A a & (C-c C-a) List all groups whose names match a regexp + ({\bf apropos}).\\ + A A & List the server's active-file.\\ + A M & List groups that {\bf match} a regexp.\\ + A m & List groups that {\bf match} a regexp and have unread articles. + [level]\\ + A s & (l) List all {\bf subscribed} groups with unread articles. + [level; 5 and lower is the default]\\ + A u & (L) List all groups (including read and {\bf unsubscribed}). + [level; 7 and lower is the default]\\ + A z & List all {\bf zombie} groups.\\ + A c & List all groups with cached articles. [level]\\ + A ? & List all groups with dormant articles. [level]\\ + \end{keys} + } + + \newcommand{\CreateEditGroups}{% + {\esamepage + The select methods are indicated in parentheses.\\* + \begin{keys}{G DEL} + G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ + G c & {\bf Customize} this group's parameters.\\ + G d & Make a {\bf directory} group (every file must be a posting and files + must have numeric names). (nndir)\\ + G D & Enter a {\bf directory} as a (temporary) group. + (nneething without recording articles read)\\ + G e & (M-e) {\bf Edit} this group's select method.\\ + G E & {\bf Edit} this group's info (select method, articles read, etc).\\ + G f & Make a group based on a {\bf file}. (nndoc)\\ + G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\ + G k & Make a {\bf kiboze} group. (nnkiboze)\\ + G m & {\bf Make} a new group.\\ + G p & Edit this group's {\bf parameters}.\\ + G r & Rename this group (does not work with read-only groups!).\\ + G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\ + G v & Add this group to a {\bf virtual} group. [p/p]\\ + G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ + G w & Create ephemeral group based on web-search. [Prefix: make solid group + instead]\\ + G R & Make an {\bf RSS} group.\\ + G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\ + G x & Expunge all deleted articles in an nnimap mailbox.\\ + G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\ + \end{keys} + You can also create mail-groups and read your mail with Gnus (very useful + if you are subscribed to mailing lists), using one of the methods + nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info + (C-c C-i g Reading Mail RET). + }} + + % TODO: + \newcommand{\SoupCommands}{% + \begin{keys}{G s w} + G s b & gnus-group-brew-soup: not documented.\\ + G s p & gnus-soup-pack-packet: not documented.\\ + G s r & nnsoup-pack-replies: not documented.\\ + G s s & gnus-soup-send-replies: not documented.\\ + G s w & gnus-soup-save-areas: not documented.\\ + \end{keys}} + + \newcommand{\MarkGroups}{% + \begin{keys}{M m} + M m & (\#) Set the process {\bf mark} on this group. [scope]\\ + M r & Mark all groups matching regular expression.\\ + M u & (M-\#) Remove the process mark from this group ({\bf unmark}). + [scope]\\ + M U & Remove the process mark from all groups (\textbf{umark all}).\\ + M w & Mark all groups in the current region. [prefix: unmark]\\ + M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\ + \end{keys}} + + \newcommand{\GroupTopicsGeneral}{% + {\esamepage + Topics are ``categories'' for groups. Press t in the group-buffer to + toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\* + \begin{keys}{C-c C-x} + T n & Prompt for topic {\bf name} and create it.\\ + T m & {\bf Move} the current group to some other topic [p/p].\\ + T j & {\bf Jump} to a topic.\\ + T c & {\bf Copy} the current group to some other topic [p/p].\\ + T D & Remove (not delete) the current group [p/p].\\ + T M & {\bf Move} all groups matching a regexp to a topic.\\ + T C & {\bf Copy} all groups matching a regexp to a topic.\\ + T H & Toggle {\bf hiding} of empty topics.\\ + T r & {\bf Rename} a topic.\\ + T DEL & Delete an empty topic.\\ + T \# & Mark all groups in the current topic with the process-mark.\\ + T M-\# & Remove the process-mark from all groups in the current topic.\\ + T TAB & (TAB) Indent current topic [Prefix: unindent].\\ + M-TAB & Unindent the current topic.\\ + RET & (SPC) Either unfold topic or enter group [level].\\ + T s & {\bf Show} the current topic. [Prefix: show permanently]\\ + T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\ + C-c C-x & Expire all articles in current group or topic.\\ + C-k & {\bf Kill} a group or topic.\\ + C-y & {\bf Yank} a group or topic.\\ + A T & List active-file using {\bf topics}.\\ + G p & Edit topic-{\bf parameters}.\\ + T M-n & Go to {\bf next} topic. [distance]\\ + T M-p & Go to {\bf previous} topic. [distance]\\ + \end{keys} + } + } + + \newcommand{\TopicSorting}{% + {\esamepage + \begin{keys}{T S m} + T S a & Sort {\bf alphabetically}.\\ + T S u & Sort by number of {\bf unread} articles.\\ + T S l & Sort by group {\bf level}.\\ + T S v & Sort by group score ({\bf value}).\\ + T S r & Sort by group {\bf rank}.\\ + T S m & Sort by {\bf method}.\\ + T S e & Sort by {\bf server} name.\\ + T S s & Sort according to `gnus-group-sort-function'.\\ + \end{keys} + With a prefix these commands will sort in reverse order. + } + } + + \newcommand{\SubscribeKillYankGroups}{% + {\esamepage + \begin{keys}{S C-k} + S k & (C-k) {\bf Kill} this group.\\ + S l & Set the {\bf level} of this group. [p/p]\\ + S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ + S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ + S w & (C-w) Kill all groups in the region.\\ + S y & (C-y) {\bf Yank} the last killed group.\\ + S z & Kill all {\bf zombie} groups.\\ + S C-k & Kill all groups on a certain level.\\ + \end{keys} + } + } + + \newcommand{\SummaryModeGeneral}{% + {\esamepage + \begin{keys}{M-RET} + SPC & (A SPC, A n) Select an article, scroll it one page, move to the + next one.\\ + DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ + RET & (A RET) Scroll this article one line forward. [distance]\\ + M-RET & (A M-RET) Scroll this article one line backward. [distance]\\ + = & Expand the Summary window (fullsize). + [Prefix: shrink to display article window]\\ + % + \& & Execute a command on all articles whose header matches a regexp. + [Prefix: move backwards]\\ + M-\& & Execute a command on all articles having the process mark.\\ + % + M-n & (G M-n) Go to the {\bf next} summary line of an unread article. + [distance]\\ + M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. + [distance]\\ + M-s & {\bf Search} through all subsequent articles for a regexp.\\ + M-r & Search through all previous articles for a regexp.\\ + % + A P & {\bf Postscript}-print current buffer.\\ + % + M-k & Edit this group's {\bf kill} file.\\ + M-K & Edit the general {\bf kill} file.\\ + % + C-t & Toggle {\bf truncation} of summary lines.\\ + Y g & Regenerate the summary-buffer.\\ + Y c & Insert all cached articles into the summary-buffer.\\ + % + M-C-e & {\bf Edit} the group-parameters.\\ + M-C-a & Customize the group-parameters.\\ + % + % article handling + % + A $<$ & ($<$, A b) Scroll to the beginning of this article.\\ + A $>$ & ($>$, A e) Scroll to the end of this article.\\ + A s & (s) Perform an i{\bf search} in the article buffer.\\ + % + A D & (C-d) Un{\bf digestify} this article into a separate group. + [Prefix: force digest]\\ + M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped + in an nnvirtual group [p/p]\\ + % + A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ + A r & (\^{}, A \^{}) Fetch the parent(s) of this article. + [Prefix: if positive fetch \textit{n} ancestors; + negative: fetch only the \textit{n}th ancestor]\\ + A t & {\bf Translate} this article.\\ + A R & Fetch all articles mentioned in the {\bf References}-header.\\ + A T & Fetch full \textbf{thread} in which the current article appears.\\ + M-\^{} & Fetch the article with a given Message-ID.\\ + S y & {\bf Yank} the current article into an existing message-buffer. + [p/p]\\ + A M & Setup group parameters for {\bf mailing} lists from + headers. [Prefix: replace old settings]\\ + \end{keys} + } + } + + \newcommand{\MIMESummary}{% + {\esamepage + For the commands operating on one MIME part (a subset of gnus-article-*), a + prefix selects which part to operate on. If the point is placed over a + MIME button in the article buffer, use the corresponding bindings for the + article buffer instead. + + \begin{keys}{W M w} + K v & (b, W M b) {\bf View} the MIME-part.\\ + K o & {\bf Save} the MIME part.\\ + K c & {\bf Copy} the MIME part.\\ + K e & View the MIME part {\bf externally}.\\ + K i & View the MIME part {\bf internally}.\\ + K $\mid$ & Pipe the MIME part to an external command.\\ + K b & Make all the MIME parts have buttons in front of them.\\ + K m & Try to repair {\bf multipart-headers}.\\ + K C & View the MIME part using a different {\bf charset}.\\ + X m & Save all parts matching a MIME type to a directory. [p/p]\\ + M-t & Toggle the buttonized display of the article buffer.\\ + W M w & Decode RFC2047-encoded words in the article headers.\\ + W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\ + W M v & View all MIME parts in the current article.\\ + \end{keys} + } + } + + \newcommand{\SortSummary}{% + {\esamepage + \begin{keys}{C-c C-s C-a} + C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\ + % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus + C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\ + C-c C-s C-i & Sort the summary-buffer by article score.\\ + C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\ + C-c C-s C-c & Sort the summary-buffer by length.\\ + C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\ + C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\ + C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\ + C-c C-s C-o & Sort the summary-buffer using the default method.\\ + \end{keys} + With a prefix these functions sort in reverse order. + } + } + + \newcommand{\MailGroups}{% formerly \Bsubmap + {\esamepage + These commands (except `B c') are only valid in a mail group.\\* + \begin{keys}{B M-C-e} + B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!). + [p/p]\\ + B B & Crosspost this article to another group.\\ + B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ + B e & {\bf Expire} all expirable articles in this group. [p/p]\\ + B i & {\bf Import} a random file into this group.\\ + B I & Create an empty article in this group.\\ + B m & {\bf Move} the article from one mail group to another. [p/p]\\ + B p & Query whether the article was {\bf posted} as well.\\ + B q & {\bf Query} where the article will end up after fancy splitting\\ + B r & {\bf Respool} this mail article. [p/p]\\ + B t & {\bf Trace} the fancy splitting patterns applied to this article.\\ + B w & (e) Edit this article.\\ + B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group + (!). [p/p]\\ + K E & {\bf Encrypt} article body. [p/p]\\ + \end{keys} + } + } + + \newcommand{\DraftGroup}{% formerly \Dsubmap + {\esamepage + The ``drafts''-group contains messages that have been saved but not sent + and rejected articles. \\* + \begin{keys}{B DEL} + D e & \textbf{edit} message.\\ + D s & \textbf{Send} message. [p/p]\\ + D S & \textbf{Send} all messages.\\ + D t & \textbf{Toggle} sending (mark as unsendable).\\ + B DEL & \textbf{Delete} message (like in mailgroup).\\ + \end{keys} + } + } + + \newcommand{\SelectArticles}{% formerly \Gsubmap + {\esamepage + These commands select the target article. They do not understand the prefix.\\* + \begin{keys}{G C-n} + h & Enter article-buffer.\\ + G b & (,) Go to the {\bf best} article (the one with highest score).\\ + G f & (.) Go to the {\bf first} unread article.\\ + G n & (n) Go to the {\bf next} unread article.\\ + G p & (p) Go to the {\bf previous} unread article.\\ + % + G N & (N) Go to {\bf the} next article.\\ + G P & (P) Go to the {\bf previous} article.\\ + % + G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ + G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ + % + G l & (l) Go to the previously read article ({\bf last-read-article}).\\ + G o & Pop an article off the summary history and go to it.\\ + % + G g & Search an article via subject.\\ + G j & (j) Search an article via Message-Id or subject.\\ + \end{keys} + } + } + + \newcommand{\ArticleModeGeneral}{% + {\esamepage + The normal navigation keys work in Article mode. Some additional keys are:\\ + \begin{keys}{C-c RET} + C-c \^{} & Get the article with the Message-ID near point.\\ + C-c RET & Send reply to address near point.\\ + h & Go to the \textbf{header}-line of the article in the + summary-buffer.\\ + s & Go to \textbf{summary}-buffer.\\ + RET & (middle mouse button) Activate the button at point to follow + an URL or Message-ID.\\ + TAB & Move the point to the next button.\\ + M-TAB & Move point to previous button.\\ + \end{keys} + } + } + + \newcommand{\WashArticle}{% formerly \Wsubmap + {\esamepage + \begin{keys}{W W H} + W 6 & Translate a base64 article.\\ + W a & Strip certain {\bf headers} from body.\\ + W b & Make Message-IDs and URLs in the article mouse-clickable + {\bf buttons}.\\ + W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\ + W d & Treat {\bf dumbquotes}.\\ + W e & Treat {\bf emphasized} text.\\ + W h & Treat {\bf HTML}.\\ + W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\ + W m & {\bf Morse} decode article.\\ + W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\ + W p & Verify X-{\bf PGP}-Sig header.\\ + W q & Treat {\bf quoted}-printable in the article.\\ + W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ + W s & Verify (and decrypt) a {\bf signed} message.\\ + W t & (t) {\bf Toggle} display of all headers.\\ + W u & {\bf Unsplit} broken URLs.\\ + W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ + W w & Do word {\bf wrap} in the article.\\ + W B & Add clickable {\bf buttons} to the article headers.\\ + W C & {\bf Capitalize} first word in each sentence.\\ + W Q & Fill long lines.\\ + W Z & Translate a HZ-encoded article.\\ + % + W G u & {\bf Unfold} folded header lines.\\ + W G f & {\bf Fold} all header lines.\\ + W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\ + % + W Y c & Repair broken {\bf citations}.\\ + W Y a & Repair broken {\bf attribution} lines.\\ + W Y u & {\bf Unwrap} broken citation lines.\\ + W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\ + \end{keys} + } + } + + \newcommand{\BlankAndWhitespace}{% + {\esamepage + \begin{keys}{W E w} + W E l & Strip blank {\bf lines} from the beginning of the article.\\ + W E m & Replace blank lines with empty lines and remove {\bf multiple} + blank lines.\\ + W E t & Remove {\bf trailing} blank lines.\\ + W E a & Strip blank lines at the beginning and the end + (W E l, W E m and W E t).\\ + W E A & Strip {\bf all} blank lines.\\ + W E s & Strip leading blank lines from the article body.\\ + W E e & Strip trailing blank lines from the article body.\\ + W E w & Remove leading {\bf whitespace} from all headers.\\ + \end{keys} + } + } + + \newcommand{\Picons}{% + {\esamepage + \begin{keys}{W D D} + W D s & (W g) Display {\bf smilies}.\\ + W D x & (W f) Look for and display any X-{\bf Face} headers.\\ + W D d & Display any Face headers.\\ + W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\ + W D m & Toggle picons in {\bf mail} headers (To and Cc).\\ + W D f & Toggle picons in {\bf From}.\\ + W D D & Remove all images from the article buffer.\\ + \end{keys} + } + } + + \newcommand{\TimeAndDate}{% + {\esamepage + \begin{keys}{W T u} + W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\ + W T i & Display the article timestamp in {\bf ISO} 8601.\\ + W T l & Display the article timestamp in the {\bf local} timezone.\\ + W T s & Display according to `gnus-article-time-format'.\\ + W T e & Display the time {\bf elapsed} since it was sent.\\ + W T o & Display the {\bf original} timestamp.\\ + W T p & Display the date in format that's {\bf + pronounceable} in English.\\ + \end{keys} + } + } + + \newcommand{\HideHighlightArticle}{% + {\esamepage + \begin{keys}{W W C-c} + W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ + W W h & Hide article {\bf headers}.\\ + W W b & Hide {\bf boring} headers.\\ + W W s & Hide {\bf signature}.\\ + W W l & Hide {\bf list} identifiers in subject-header.\\ + W W P & Hide {\bf PEM} (privacy enhanced messages).\\ + W W B & Hide banner specified by group parameter.\\ + W W c & Hide {\bf citation}.\\ + W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\ + W W C & Hide cited text in articles that aren't roots.\\ + W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ + W H c & Highlight article {\bf citations}.\\ + W H h & Highlight article {\bf headers}.\\ + W H s & Highlight article {\bf signature}.\\ + \end{keys} + For all hiding-commands: A positive prefix always hides, and a negative + prefix will show what was previously hidden. + }} + + \newcommand{\MIMEArticleMode}{% + {\esamepage + \begin{keys}{RET} + RET & (BUTTON-2) Toggle display of the MIME object.\\ + v & Prompt for a method and then view object using this method.\\ + o & Prompt for a filename and save the MIME object.\\ + C-o & Prompt for a filename to save the MIME object to and remove it.\\ + d & {\bf Delete} the MIME object.\\ + c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\ + i & Display the MIME object in this buffer.\\ + C & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\ + E & View internally. \\ + e & View {\bf externally}. \\ + t & View the MIME object as a different {\bf type}.\\ + p & {\bf Print} the MIME object.\\ + $\mid$ & Pipe the MIME object to a process.\\ + . & Take action on the MIME object.\\ + \end{keys} + } + } + + %% end of article mode for reading .......................................... + + \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap + {\esamepage + \begin{keys}{M M-C-r} + d & (M d, M r) Mark this article as read and move to the next one. + [scope]\\ + D & Mark this article as read and move to the previous one. [scope]\\ + ! & (u, M !, M t) Tick this article (mark it as interesting) and move + to the next one. [scope]\\ + U & Tick this article and move to the previous one. [scope]\\ + M ? & (?) Mark this article as dormant (only followups are + interesting). [scope]\\ + M D & Show all {\bf dormant} articles (normally they are hidden unless they + have any followups).\\ + M M-D & Hide all {\bf dormant} articles.\\ + C-w & Mark all articles between point and mark as read.\\ + M-u & (M SPC, M c) Clear all marks from this article and move to the next + one. [scope]\\ + M-U & Clear all marks from this article and move to the previous one. + [scope]\\ + % + M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\ + % + M k & (k) {\bf Kill} all articles with the same subject then select the + next unread one.\\ + M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ + % + M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\ + M C-c & {\bf Catch-up} all articles in this group.\\ + M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\ + % + M b & Set a {\bf bookmark} in this article.\\ + M B & Remove the {\bf bookmark} from this article.\\ + % + M M-r & (x) Expunge all {\bf read} articles from this group.\\ + M M-C-r & Expunge all articles having a given mark.\\ + M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ + M M C-h & Displays some more keys doing ticking slightly differently.\\ + \end{keys} + The variable `gnus-summary-goto-unread' controls what happens after a mark + has been set (C-x C-i g Setting Marks RET) + }} + + \newcommand{\MarkByScore}{% + \begin{keys}{M V m} + M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ + M V k & {\bf Kill} all low-scored articles. [score]\\ + M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ + M V u & Mark all high-scored articles as interesting (tick them). [score]\\ + \end{keys} + } + } + +\newcommand{\ProcessMark}{% + {\esamepage + These commands set and remove the process mark (\#). You only need to use + it if the set of articles you want to operate on is non-contiguous. Else + use a numeric prefix.\\* + \begin{keys}{M P R} + M P p & (\#, M \#) Mark this article.\\ + M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\ + M P b & Mark all articles in {\bf buffer}.\\ + M P r & Mark all articles in the {\bf region}.\\ + M P g & Unmark all articles in the region.\\ + M P R & Mark all articles matching a {\bf regexp}.\\ + M P G & Unmark all articles matching a regexp.\\ + M P t & Mark all articles in this (sub){\bf thread}.\\ + M P T & Unmark all articles in this (sub){\bf thread}.\\ + M P s & Mark all articles in the current {\bf series}.\\ + M P S & Mark all {\bf series} that already contain a marked article.\\ + M P a & Mark {\bf all} articles (in series order).\\ + M P U & \textbf{unmark} all articles.\\ + M P i & {\bf Invert} the list of process-marked articles.\\ + M P k & Push the current process-mark set onto stack and unmark + all articles.\\ + M P y & Pop process-mark set from stack and restore it.\\ + M P w & Push process-mark set on the stack.\\ + M P v & Mark all articles with score over the default score. [Prefix: score]\\ + \end{keys} + } + } + +\newcommand{\Limiting}{% + {\esamepage + \begin{keys}{/M} + // & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\ + /a & Limit the summary-buffer to articles matching {\bf author}.\\ + /x & Limit depending on ``extra'' headers.\\ + /u & (x) Limit to {\bf unread} articles. + [Prefix: also exclude ticked and dormant articles]\\ + /. & Limit to unseen articles.\\ + /m & Limit to articles marked with specified {\bf mark}.\\ + /t & Ask for a number and exclude articles younger than that many days. + [Prefix: exclude older articles]\\ + /n & Limit to current article. [p/p]\\ + /w & Pop the previous limit off the stack and restore it. + [Prefix: pop all limits]\\ + /v & Limit to score. [score]\\ + /E & (M S) Include all expunged articles in the limit.\\ + /D & Include all dormant articles in the limit.\\ + /* & Limit to cached articles.\\ + Y C & Include all cached articles in the limit.\\ + /d & Exclude all dormant articles from the limit.\\ + /M & Exclude all marked articles.\\ + /T & Include all articles from the current thread in the limit.\\ + /c & Exclude all dormant articles that have no children from the limit.\\ + /C & Mark all excluded unread articles as read. + [Prefix: also mark ticked and dormant articles]\\ + /o & Insert all {\bf old} articles. [Prefix: how many]\\ + /N & Insert all {\bf new} articles.\\ + /p & Limit to articles {\bf predicated} in the `display' group parameter.\\ + % /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus + \end{keys} + } + } + +\newcommand{\OutputArticles}{% formerly \Osubmap + {\esamepage + \begin{keys}{O m} + O o & (o, C-o) Save this article using the default article saver. [p/p]\\ + O b & Save this article's {\bf body} in plain file format [p/p]\\ + O f & Save this article in plain {\bf file} format. [p/p]\\ + O F & like O f, but overwrite file's contents. [p/p]\\ + O h & Save this article in {\bf mh} folder format. [p/p]\\ + O m & Save this article in {\bf mail} format. [p/p]\\ + O r & Save this article in {\bf rmail} format. [p/p]\\ + O v & Save this article in {\bf vm} format. [p/p]\\ + O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\ + O P & \textbf{Print} this article using Muttprint. [p/p]\\ + \end{keys} + } + } + +\newcommand{\PostReplyetc}{% formerly \Ssubmap + {\esamepage + These commands put you in a separate news or mail buffer. See the section + about composing messages for more information.\\* + %After + %editing the article, send it by pressing C-c C-c. If you are in a + %foreign group and want to post the article using the foreign server, give + %a prefix to C-c C-c.\\* + \begin{keys}{S O m} + S p & (a) {\bf Post} an article to this group.\\ + S f & (f) Post a {\bf followup} to this article.\\ + S F & (F) Post a {\bf followup} and include the original. [p/p]\\ + S o p & Forward this article as a {\bf post} to a newsgroup.\\ + S M-c & Send a complaint about excessive crossposting to the author of this + article. [p/p]\\ + % + S m & (m) Send a {\bf mail} to some other person.\\ + S r & (r) Mail a {\bf reply} to the author of this article.\\ + S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ + S B r & Like S r but ignore the Reply-To: header.\\ + S B R & Like S R but ignore the Reply-To: header.\\ + S w & Mail a {\bf wide} reply to this article.\\ + S W & Mail a {\bf wide} reply to this article and include + the original.\\ + S v & Mail a {\bf very} wide reply to this article.\\ + S V & Mail a {\bf very} wide reply to this article and include the original.\\ + S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\ + S D b & Resend {\bf bounced} mail.\\ + S D r & {\bf Resend} mail to a different person.\\ + S D e & {\bf Edit} and resend.\\ + % + S n & Post a followup via {\bf news} even if you got the message + through mail.\\ + S N & Post a followup via {\bf news} and include the original mail. + [p/p]\\ + % + S c & (C) {\bf Cancel} this article (only works if it is + your own). [p/p]\\ + S s & {\bf Supersede} this article with a new one (only for own + articles).\\ + % + S O m & Digest these series and forward by {\bf mail}. [p/p]\\ + S O p & Digest these series and forward as a {\bf post} to a newsgroup. + [p/p]\\ + % + S u & {\bf Uuencode} a file and post it as a series.\\ + \end{keys} + If you want to cancel or supersede an article you just posted (before it + has appeared on the server), go to the *post-news* buffer, change + `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. + }} + +\newcommand{\Threading}{% formerly \Tsubmap + {\esamepage + \begin{keys}{T M-\#} + T \# & Mark this thread with the process mark.\\ + T M-\# & Remove process-marks from this thread.\\ + % + T t & Re-{\bf thread} the current article's thread.\\ + T \^{} & Make the current article child of the marked (or previous) article.\\ + % movement + T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\ + T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\ + T d & {\bf Descend} this thread. [distance]\\ + T u & Ascend this thread ({\bf up}-thread). [distance]\\ + T o & Go to the top of this thread.\\ + % + T s & {\bf Show} the thread hidden under this article.\\ + T h & {\bf Hide} this (sub)thread.\\ + % + T i & {\bf Increase} the score of this thread.\\ + T l & (M-C-l) {\bf Lower} the score of this thread.\\ + % + T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix: + tick it, positive prefix: unmark it.]\\ + % + T H & {\bf Hide} all threads.\\ + T S & {\bf Show} all hidden threads.\\ + T T & (M-C-t) {\bf Toggle} threading.\\ + \end{keys} + } + } + +\newcommand{\Scoring}{% formerly \Vsubmap + {\esamepage + Read about Adaptive Scoring in the online info.\\* + \begin{keys}{\bf A p m l} + V a & {\bf Add} a new score entry, specifying all elements.\\ + V c & Specify a new score file as {\bf current}.\\ + V e & {\bf Edit} the current score alist.\\ + V f & Edit a score {\bf file} and make it the current one.\\ + V m & {\bf Mark} all articles below a given score as read.\\ + V s & Set the {\bf score} of this article.\\ + V t & Display all score rules applied to this article ({\bf track}).\\ + W w & List {\bf words} used in scoring.\\ + V x & {\bf Expunge} all low-scored articles. [score]\\ + V C & {\bf Customize} the current score file through a user-friendly + interface.\\ + V F & {\bf Flush} the cache of score files.\\ + V R & {\bf Re-score} the summary buffer.\\ + V S & Display the {\bf score} of this article.\\ + \bf A p m l& Make a scoring entry based on this article.\\ + \end{keys} + The four letters stand for:\\* + \quad \B{A}ction: I)ncrease, L)ower;\\* + \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines, + message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\* + \quad \B{m}atch type:\\* + \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\* + \qquad date: b)efore, a)t, n)this,\\* + \qquad number: $<$, =, $>$;\\* + \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate. + + If you type the second letter in uppercase, the remaining two are assumed + to be s)ubstring and t)emporary. + If you type the third letter in uppercase, the last one is assumed to be + t)emporary. + + \quad Extra keys for manual editing of a score file:\\* + \begin{keys}{C-c C-c} + C-c C-c & Finish editing the score file.\\ + C-c C-d & Insert the current {\bf date} as number of days.\\ + \end{keys} + } + } + +\newcommand{\ExtractSeries}{% formerly \Xsubmap + {\esamepage + Gnus recognizes if the current article is part of a series (multipart + posting whose parts are identified by numbers in their subjects, e.g.{} + 1/10\dots10/10) and processes the series accordingly. You can mark and + process more than one series at a time. If the posting contains any + archives, they are expanded and gathered in a new group.\\* + \begin{keys}{X p} + X b & Un-{\bf binhex} these series. [p/p]\\ + X o & Simply {\bf output} these series (no decoding). [p/p]\\ + X p & Unpack these {\bf postscript} series. [p/p]\\ + X s & Un-{\bf shar} these series. [p/p]\\ + X u & {\bf Uudecode} these series. [p/p]\\ + \end{keys} + + Each one of these commands has four variants:\\* + \begin{keys}{X v \bf Z} + X \bf z & Decode these series. [p/p]\\ + X \bf Z & Decode and save these series. [p/p]\\ + X v \bf z & Decode and view these series. [p/p]\\ + X v \bf Z & Decode, save and view these series. [p/p]\\ + \end{keys} + where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u). + + An alternative binding for the most-often used of these commands is\\* + \begin{keys}{C-c C-v C-v} + C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ + \end{keys} + }} + +\newcommand{\ExitSummary}{% formerly \Zsubmap + {\esamepage + \begin{keys}{Z G} + Z Z & (q, Z Q) Exit this group.\\ + Z E & (Q) {\bf Exit} without updating the group information.\\ + % + Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ + Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ + % + Z n & Mark all articles as read and go to the {\bf next} group.\\ + Z N & Exit and go to {\bf the} next group.\\ + Z P & Exit and go to the {\bf previous} group.\\ + % + Z G & (M-g) Check for new articles in this group ({\bf get}).\\ + Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}). + [Prefix: select all articles, read and unread.]\\ + Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionGeneral}{% + Press C-c ? in the composition-buffer to get this information.\\* + {\esamepage + \begin{keys}{C-c C-m} + % sending + C-c C-c & Send message and exit. [Prefix: send via foreign server]\\ + C-c C-s & Send message. [Prefix: send via foreign server]\\ + C-c C-d & Don't send message (save as \textbf{draft}).\\ + C-c C-k & \textbf{Kill} message-buffer.\\ + C-c C-m & {\bf Mail} reply to the address near point. + [Prefix: include the original]\\ + % modify headers/body + C-c C-o & Sort headers.\\ + C-c C-e & \textbf{Elide} region.\\ + C-c C-v & Kill everything outside region.\\ + C-c C-r & Do a \textbf{Rot-13} on the body.\\ + C-c C-w & Insert signature (from `message-signature-file').\\ + C-c C-z & Kill everything up to signature.\\ + C-c C-y & \textbf{Yank} original message.\\ + C-c C-q & Fill the yanked message.\\ + C-c M-C-y & \textbf{Yank} a buffer and quote it.\\ + M-RET & Insert four newlines and format quoted text. [Prefix: + justify as well]\\ + C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMovementArticle}{% + The following functions create the header-field if necessary.\\* + {\esamepage + \begin{keys}{C-c C-f C-u} + C-c TAB & Move to \textbf{signature}.\\ + C-c C-b & Move to \textbf{body}.\\ + C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\ + C-c C-f C-c & Move to \textbf{Cc:}.\\ + C-c C-f C-b & Move to \textbf{Bcc:}.\\ + C-c C-f C-w & Move to \textbf{Fcc:}.\\ + C-c C-f C-s & Move to \textbf{Subject:}.\\ + C-c C-f C-r & Move to \textbf{Reply-To:}.\\ + C-c C-f C-f & Move to \textbf{Followup-To:}.\\ + C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\ + C-c C-f C-u & Move to \textbf{Summary:}.\\ + C-c C-f C-k & Move to \textbf{Keywords:}.\\ + C-c C-f C-d & Move to \textbf{Distribution:}.\\ + C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\ + C-c C-f C-o & Move to \textbf{From:}.\\ + C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for + an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\ + C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\ + C-c M-n & Insert \textbf{Disposition-Notification-To:} + (request receipt).\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMML}{% + {\esamepage + \begin{keys}{C-c C-m P} + C-c C-m f & (C-c C-a) Attach \textbf{file}.\\ + C-c C-m b & Attach contents of \textbf{buffer}.\\ + C-c C-m e & Attach \textbf{external} file (ftp..).\\ + C-c C-m P & Create MIME-\textbf{preview} (new + buffer). [Prefix: show raw MIME preview]\\ + C-c C-m v & \textbf{Validate} article.\\ + C-c C-m p & Insert \textbf{part}.\\ + C-c C-m m & Insert \textbf{multi}-part.\\ + C-c C-m q & \textbf{Quote} region.\\ + C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\ + C-c C-m c o & Encrypt message using PGP.\\ + C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\ + C-c C-m s s & Sign message using \textbf{S/MIME}.\\ + C-c C-m s o & Sign message using PGP.\\ + C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\ + C-c C-m C-n & Remove security related MML tags from message.\\ + % TODO: narrow headers (C-c C-m n) ? + \end{keys} + } + } + +%% TODO: +\newcommand{\ServerMode}{% + {\esamepage + To enter this mode, press \^{} while in Group mode.\\* + \begin{keys}{SPC} + SPC & (RET) Browse this server.\\ + a & {\bf Add} a new server.\\ + c & {\bf Copy} this server.\\ + e & {\bf Edit} a server.\\ + k & {\bf Kill} this server. [scope]\\ + l & {\bf List} all servers.\\ + q & Return to the group buffer ({\bf quit}).\\ + s & Request that the server scan its sources for new articles.\\ + g & Request that the server regenerate its data.\\ + y & {\bf Yank} the previously killed server.\\ + O & Try to {\bf open} a connection to this server.\\ + C & {\bf Close} connection to this server.\\ + D & Mark this server as unreachable ({\bf deny}).\\ + M-o & {\bf Open} the connection to all servers.\\ + M-c & {\bf Close} the connection to all servers.\\ + R & Make all denied servers into closed servers.\\ + L & Set server status to offline.\\ + \end{keys} + } + } + +\newcommand{\BrowseServer}{% + {\esamepage + To enter this mode, press `B' while in Group mode.\\* + \begin{keys}{RET} + RET & Enter the current group.\\ + SPC & Enter the current group and display the first article.\\ + ? & Give a very short help message.\\ + n & Go to the {\bf next} group. [distance]\\ + p & Go to the {\bf previous} group. [distance]\\ + q & (l) {\bf Quit} browse mode.\\ + u & Subscribe to the current group. [scope]\\ + \end{keys} + } + } + +\newcommand{\GroupUnplugged}{% + {\esamepage + \begin{keys}{J S} + J j & Toggle plugged-state.\\ + J s & Fetch articles from all groups for offline-reading.\\ + J u & Fetch all eligible articles from this group.\\ + J S & \textbf{Send} all sendable messages in the drafts group.\\ + % + J c & Enter \textbf{category} buffer.\\ + J a & \textbf{Add} this group to an Agent category [p/p].\\ + J r & \textbf{Remove} this group from its Agent category [p/p].\\ + J Y & Synchronize flags changed while unplugged with remote server.\\ + \end{keys} + } + } + +\newcommand{\SummaryUnplugged}{% + {\esamepage + \begin{keys}{J M-\#} + J \# & \textbf{Mark} the article for downloading.\\ + J M-\# & \textbf{Unmark} the article for downloading.\\ + @ & \textbf{Toggle} whether to download the article.\\ + J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\ + J u & Download all downloadable articles from group.\\ + \end{keys} + } + } + +\newcommand{\ServerUnplugged}{% + {\esamepage + \begin{keys}{J a} + J a & \textbf{Add} the current server to the list of servers covered + by the agent.\\ + J r & \textbf{Remove} the current server from the list of servers covered + by the agent.\\ + \end{keys} + } + } + +% end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % + + +% o some things might not be updated: scoring and server modes, maybe more +% o Gnus Unplugged category-buffer commands need to be written + +\begin{document} + +\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions +\def\date{Jan 10th, 2004} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \raggedbottom\raggedright + \twocolumn + % use \tiny to shrink it to 4 pages (needs a high-resolution printer though) + % \tiny + \scriptsize + \pagestyle{plain} + \Title + \par + \Logo{refcard} +}{ + \setcounter{page}{0} + \thispagestyle{empty} + \vspace*{\fill} + \Title + \vspace{0.4in} + \Logo{booklet} + \vspace*{\fill} + \pagebreak +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% TODO: how does this work ? +%\tableofcontents + +\Notes +% + +\section*{Group-Mode} +\GroupModeGeneral + \subsection*{Group Subscribedness-Levels} + \GroupLevels + \subsection*{List Groups} + \ListGroups + \subsection*{Create/Edit Foreign Groups} + \CreateEditGroups + \subsection*{Unsubscribe, Kill and Yank Groups} + \SubscribeKillYankGroups + \subsection*{Mark Groups} + \MarkGroups + \subsection*{Group-Unplugged} + \GroupUnplugged +% topics in group-mode + \subsection*{Group Topics} + \GroupTopicsGeneral + \subsubsection*{Topic Sorting} + \TopicSorting + +% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak} + +% summary-mode +\section*{Summary Mode} +\SummaryModeGeneral + \subsection*{Select Articles} + \SelectArticles +% + \subsection*{Threading} + \Threading +% + \subsection*{Limiting} + \Limiting + \subsection*{Sort the Summary-Buffer} + \SortSummary + \subsection*{Score (Value) Commands} + \Scoring + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Output Articles} + \OutputArticles + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries +}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \subsection*{MIME operations from the Summary-Buffer} + \MIMESummary + +\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries + \subsection*{Output Articles} + \OutputArticles +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% + \subsection*{Post, Followup, Reply, Forward, Cancel} + \PostReplyetc + +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard + + \subsection*{Message Composition} + + \MsgCompositionGeneral + \subsubsection*{Jumping in message-buffer} + \MsgCompositionMovementArticle + \subsubsection*{Attachments/MML} + \MsgCompositionMML +% marking articles + \subsection*{Mark Articles} + \MarkArticlesGeneral + \subsubsection*{Mark Based on Score} + \MarkByScore + \subsubsection*{The Process Mark} + \ProcessMark + \subsubsection*{Mark Indication-Characters} + \MarkCharacters +% +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% + + \subsection*{Summary-Unplugged} + \SummaryUnplugged + \subsection*{Mail-Group Commands} + \MailGroups + \subsection*{Draft-Group Commands} + \DraftGroup +% exiting + \subsection*{Exit the Summary-Buffer} + \ExitSummary +% +% +\section*{Article Mode (reading)} +\ArticleModeGeneral + \subsection*{Wash the Article-Buffer} + \WashArticle + \subsubsection*{Blank Lines and Whitespace} + \BlankAndWhitespace + \subsubsection*{Picons, X-faces, Smileys} + \Picons + \subsubsection*{Time and Date} + \TimeAndDate + \subsection*{Hide/Highlight Parts of the Article} + \HideHighlightArticle + \subsection*{MIME operations from the Article-Buffer (reading)} + \MIMEArticleMode +% +% +\section*{Server Mode} +\ServerMode + \subsection*{Unplugged-Server} + \ServerUnplugged +% +% +\section*{Browse Server Mode} +\BrowseServer + +%\pagebreak +\vspace*{\fill} +\Copyright + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: + +% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1 diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 3c7c3d3d5c4..fe2fcab6643 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,94 @@ +2005-03-25 Katsumi Yamaoka + + * message.el (message-resend): Bind rfc2047-encode-encoded-words. + + * mm-util.el (mm-replace-in-string): New function. + (mm-xemacs-find-mime-charset-1): Ignore errors while loading + latin-unity, which cannot be used with XEmacs 21.1. + + * rfc2047.el (rfc2047-encode-function-alist): Rename from + rfc2047-encoding-function-alist in order to avoid conflicting with + the old version. + (rfc2047-encode-message-header): Remove useless goto-char. + (rfc2047-encodable-p): Don't move point. + (rfc2047-syntax-table): Treat `(' and `)' as is. + (rfc2047-encode-region): Concatenate words containing non-ASCII + characters in structured fields; don't encode space-delimited + ASCII words even in unstructured fields; don't break words at + char-category boundaries; encode encoded words in structured + fields; treat text within parentheses as special; show the + original text when error has occurred; move point to the end of + the region after encoding, suggested by IRIE Tetsuya + ; treat backslash-quoted characters as + non-special; check carefully whether to encode special characters; + fix some kind of misconfigured headers; signal a real error if + debug-on-quit or debug-on-error is non-nil; don't infloop, + suggested by Hiroshi Fujishima ; assume + the close parenthesis may be included in the encoded word; encode + bogus delimiters. + (rfc2047-encode-string): Use mm-with-multibyte-buffer. + (rfc2047-encode-max-chars): New variable. + (rfc2047-encode-1): New function. + (rfc2047-encode): Use it; encode text so that it occupies the + maximum width within 76-column; work correctly on Q encoding for + iso-2022-* charsets; fold the line before encoding; don't append a + space if the encoded word includes close parenthesis. + (rfc2047-fold-region): Use existing whitespace for LWSP; make it + sure not to break a line just after the header name. + (rfc2047-b-encode-region): Remove. + (rfc2047-b-encode-string): New function. + (rfc2047-q-encode-region): Remove. + (rfc2047-q-encode-string): New function. + (rfc2047-encode-parameter): New function. + (rfc2047-encoded-word-regexp): Don't use shy group. + (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change. + (rfc2047-parse-and-decode): Ditto. + (rfc2047-decode): Treat the ascii coding-system as raw-text by + default. + +2005-03-25 Lars Magne Ingebrigtsen + + * rfc2047.el (rfc2047-encode-encoded-words): New variable. + (rfc2047-field-value): Strip props. + (rfc2047-encode-message-header): Disabled header folding -- not + all headers can be folded, and this should be done by the message + composition mode. Probably. I think. + (rfc2047-encodable-p): Say that =? needs encoding. + (rfc2047-encode-region): Encode =? strings. + +2005-03-25 Jesper Harder + + * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231 + language tags; remove unnecessary '+'. Reported by Stefan Wiens + . + (rfc2047-decode-string): Don't cons a string unnecessarily. + (rfc2047-parse-and-decode, rfc2047-decode): Use a character for + the encoding to avoid consing a string. + (rfc2047-decode): Use mm-subst-char-in-string instead of + mm-replace-chars-in-string. + +2005-03-25 TSUCHIYA Masatoshi + + * rfc2047.el (rfc2047-encode): Use uppercase letters to specify + encodings of MIME-encoded words, in order to improve + interoperability with several broken MUAs. + +2005-03-21 Reiner Steib + + * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and + pass it to `gnus-browse-read-group'. + (gnus-browse-read-group): Add NUMBER argument and pass it to + `gnus-group-read-ephemeral-group'. + + * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER + argument and pass it to `gnus-group-read-group'. + +2005-03-19 Aidan Kehoe + + * mm-util.el (mm-xemacs-find-mime-charset): Only call + mm-xemacs-find-mime-charset-1 if we have the mule feature + available at runtime. + 2005-03-25 Werner Lemberg * nnmaildir.el: Replace `illegal' with `invalid'. 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." (defun gnus-group-read-ephemeral-group (group method &optional activate quit-config request-only select-articles - parameters) + parameters + number) "Read GROUP from METHOD as an ephemeral group. If ACTIVATE, request the group first. If QUIT-CONFIG, use that window configuration when exiting from the @@ -1992,6 +1993,7 @@ ephemeral group. If REQUEST-ONLY, don't actually read the group; just request it. If SELECT-ARTICLES, only select those articles. If PARAMETERS, use those as the group parameters. +If NUMBER, fetch this number of articles. Return the name of the group if selection was successful." (interactive @@ -2039,7 +2041,7 @@ Return the name of the group if selection was successful." (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) (gnus-fetch-old-headers gnus-fetch-old-ephemeral-headers)) - (gnus-group-read-group t t group select-articles)) + (gnus-group-read-group (or number t) t group select-articles)) group) ;;(error nil) (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. (setq buffer-read-only t) (gnus-run-hooks 'gnus-browse-mode-hook)) -(defun gnus-browse-read-group (&optional no-article) - "Enter the group at the current line." - (interactive) +(defun gnus-browse-read-group (&optional no-article number) + "Enter the group at the current line. +If NUMBER, fetch this number of articles." + (interactive "P") (let ((group (gnus-browse-group-name))) (if (or (not (gnus-get-info group)) (gnus-ephemeral-group-p group)) (unless (gnus-group-read-ephemeral-group group gnus-browse-current-method nil - (cons (current-buffer) 'browse)) + (cons (current-buffer) 'browse) + nil nil nil number) (error "Couldn't enter %s" group)) (unless (gnus-group-read-group nil no-article group) (error "Couldn't enter %s" group))))) -(defun gnus-browse-select-group () - "Select the current group." - (interactive) - (gnus-browse-read-group 'no)) +(defun gnus-browse-select-group (&optional number) + "Select the current group. +If NUMBER, fetch this number of articles." + (interactive "P") + (gnus-browse-read-group 'no number)) (defun gnus-browse-next-group (n) "Go to the next group." diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index de56fe2be96..9edbce2620e 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -6364,7 +6364,8 @@ Optional DIGEST will use digest to forward." (replace-match "X-From-Line: ")) ;; Send it. (let ((message-inhibit-body-encoding t) - message-required-mail-headers) + message-required-mail-headers + rfc2047-encode-encoded-words) (message-send-mail)) (kill-buffer (current-buffer))) (message "Resending message to %s...done" address))) diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el index 5b4200d6d52..3be6444f18f 100644 --- a/lisp/gnus/mm-util.el +++ b/lisp/gnus/mm-util.el @@ -85,6 +85,32 @@ (insert-byte . insert-char) (multibyte-char-to-unibyte . identity)))) +(eval-and-compile + (cond + ((fboundp 'replace-in-string) + (defalias 'mm-replace-in-string 'replace-in-string)) + ((fboundp 'replace-regexp-in-string) + (defun mm-replace-in-string (string regexp newtext &optional literal) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. + +This is a compatibility function for different Emacsen." + (replace-regexp-in-string regexp newtext string nil literal))) + (t + (defun mm-replace-in-string (string regexp newtext &optional literal) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. + +This is a compatibility function for different Emacsen." + (let ((start 0) tail) + (while (string-match regexp string start) + (setq tail (- (length string) (match-end 0))) + (setq string (replace-match newtext nil literal string)) + (setq start (- (length string) tail)))) + string)))) + (eval-and-compile (defalias 'mm-char-or-char-int-p (cond @@ -606,7 +632,7 @@ But this is very much a corner case, so don't worry about it." ;; Load the Latin Unity library, if available. (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) - (require 'latin-unity)) + (ignore-errors (require 'latin-unity))) ;; Now, can we use it? (if (featurep 'latin-unity) @@ -651,7 +677,7 @@ But this is very much a corner case, so don't worry about it." (defmacro mm-xemacs-find-mime-charset (begin end) (when (featurep 'xemacs) - `(mm-xemacs-find-mime-charset-1 ,begin ,end))) + `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end)))) (defun mm-find-mime-charset-region (b e &optional hack-charsets) "Return the MIME charsets needed to encode the region between B and E. diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el index 6086f422abd..538e22e0f88 100644 --- a/lisp/gnus/rfc2047.el +++ b/lisp/gnus/rfc2047.el @@ -119,12 +119,15 @@ The values can be: Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, quoted-printable and base64 respectively.") -(defvar rfc2047-encoding-function-alist - '((Q . rfc2047-q-encode-region) - (B . rfc2047-b-encode-region) - (nil . ignore)) +(defvar rfc2047-encode-function-alist + '((Q . rfc2047-q-encode-string) + (B . rfc2047-b-encode-string) + (nil . identity)) "Alist of RFC2047 encodings to encoding functions.") +(defvar rfc2047-encode-encoded-words t + "Whether encoded words should be encoded again.") + ;;; ;;; Functions for encoding RFC2047 messages ;;; @@ -166,7 +169,7 @@ This is either `base64' or `quoted-printable'." (save-restriction (rfc2047-narrow-to-field) (re-search-forward ":[ \t\n]*" nil t) - (buffer-substring (point) (point-max))))) + (buffer-substring-no-properties (point) (point-max))))) (defvar rfc2047-encoding-type 'address-mime "The type of encoding done by `rfc2047-encode-region'. @@ -186,24 +189,25 @@ Should be called narrowed to the head of the message." (rfc2047-narrow-to-field) (if (not (rfc2047-encodable-p)) (prog1 - (if (and (eq (mm-body-7-or-8) '8bit) - (mm-multibyte-p) - (mm-coding-system-p - (car message-posting-charset))) - ;; 8 bit must be decoded. - (mm-encode-coding-region - (point-min) (point-max) - (mm-charset-to-coding-system - (car message-posting-charset)))) + (if (and (eq (mm-body-7-or-8) '8bit) + (mm-multibyte-p) + (mm-coding-system-p + (car message-posting-charset))) + ;; 8 bit must be decoded. + (mm-encode-coding-region + (point-min) (point-max) + (mm-charset-to-coding-system + (car message-posting-charset)))) ;; No encoding necessary, but folding is nice - (rfc2047-fold-region - (save-excursion - (goto-char (point-min)) - (skip-chars-forward "^:") - (when (looking-at ": ") - (forward-char 2)) - (point)) - (point-max))) + (when nil + (rfc2047-fold-region + (save-excursion + (goto-char (point-min)) + (skip-chars-forward "^:") + (when (looking-at ": ") + (forward-char 2)) + (point)) + (point-max)))) ;; We found something that may perhaps be encoded. (setq method nil alist rfc2047-header-encoding-alist) @@ -213,7 +217,6 @@ Should be called narrowed to the head of the message." (eq (car elem) t)) (setq alist nil method (cdr elem)))) - (goto-char (point-min)) (re-search-forward "^[^:]+: *" nil t) (cond ((eq method 'address-mime) @@ -267,8 +270,13 @@ The buffer may be narrowed." (require 'message) ; for message-posting-charset (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))) - (and charsets - (not (equal charsets (list (car message-posting-charset))))))) + (goto-char (point-min)) + (or (and rfc2047-encode-encoded-words + (prog1 + (search-forward "=?" nil t) + (goto-char (point-min)))) + (and charsets + (not (equal charsets (list (car message-posting-charset)))))))) ;; Use this syntax table when parsing into regions that may need ;; encoding. Double quotes are string delimiters, backslash is @@ -292,8 +300,8 @@ The buffer may be narrowed." table)))) (modify-syntax-entry ?\\ "\\" table) (modify-syntax-entry ?\" "\"" table) - (modify-syntax-entry ?\( "." table) - (modify-syntax-entry ?\) "." table) + (modify-syntax-entry ?\( "(" table) + (modify-syntax-entry ?\) ")" table) (modify-syntax-entry ?\< "." table) (modify-syntax-entry ?\> "." table) (modify-syntax-entry ?\[ "." table) @@ -310,183 +318,341 @@ By default, the region is treated as containing RFC2822 addresses. Dynamically bind `rfc2047-encoding-type' to change that." (save-restriction (narrow-to-region b e) - (if (eq 'mime rfc2047-encoding-type) - ;; Simple case. Treat as single word after any initial ASCII - ;; part and before any tailing ASCII part. The leading ASCII - ;; is relevant for instance in Subject headers with `Re:' for - ;; interoperability with non-MIME clients, and we might as - ;; well avoid the tail too. - (progn + (let ((encodable-regexp (if rfc2047-encode-encoded-words + "[^\000-\177]+\\|=\\?" + "[^\000-\177]+")) + start ; start of current token + end begin csyntax + ;; Whether there's an encoded word before the current token, + ;; either immediately or separated by space. + last-encoded + (orig-text (buffer-substring-no-properties b e))) + (if (eq 'mime rfc2047-encoding-type) + ;; Simple case. Continuous words in which all those contain + ;; non-ASCII characters are encoded collectively. Encoding + ;; ASCII words, including `Re:' used in Subject headers, is + ;; avoided for interoperability with non-MIME clients and + ;; for making it easy to find keywords. + (progn + (goto-char (point-min)) + (while (progn (skip-chars-forward " \t\n") + (not (eobp))) + (setq start (point)) + (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)") + (progn + (setq end (match-end 0)) + (re-search-forward encodable-regexp end t))) + (goto-char end)) + (if (> (point) start) + (rfc2047-encode start (point)) + (goto-char end)))) + ;; `address-mime' case -- take care of quoted words, comments. + (with-syntax-table rfc2047-syntax-table (goto-char (point-min)) - ;; Does it need encoding? - (skip-chars-forward "\000-\177") - (unless (eobp) - (skip-chars-backward "^ \n") ; beginning of space-delimited word - (rfc2047-encode (point) (progn - (goto-char e) - (skip-chars-backward "\000-\177") - (skip-chars-forward "^ \n") - ;; end of space-delimited word - (point))))) - ;; `address-mime' case -- take care of quoted words, comments. - (with-syntax-table rfc2047-syntax-table - (let ((start) ; start of current token - end ; end of current token - ;; Whether there's an encoded word before the current - ;; token, either immediately or separated by space. - last-encoded) - (goto-char (point-min)) - (condition-case nil ; in case of unbalanced quotes + (condition-case err ; in case of unbalanced quotes ;; Look for rfc2822-style: sequences of atoms, quoted ;; strings, specials, whitespace. (Specials mustn't be ;; encoded.) (while (not (eobp)) - (setq start (point)) ;; Skip whitespace. - (unless (= 0 (skip-chars-forward " \t\n")) - (setq start (point))) + (skip-chars-forward " \t\n") + (setq start (point)) (cond ((not (char-after))) ; eob ;; else token start - ((eq ?\" (char-syntax (char-after))) + ((eq ?\" (setq csyntax (char-syntax (char-after)))) ;; Quoted word. (forward-sexp) (setq end (point)) ;; Does it need encoding? (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - ;; It needs encoding. Strip the quotes first, - ;; since encoded words can't occur in quotes. - (goto-char end) - (delete-backward-char 1) - (goto-char start) - (delete-char 1) - (when last-encoded - ;; There was a preceding quoted word. We need - ;; to include any separating whitespace in this - ;; word to avoid it getting lost. - (skip-chars-backward " \t") - ;; A space is needed between the encoded words. - (insert ? ) - (setq start (point) - end (1+ end))) - ;; Adjust the end position for the deleted quotes. - (rfc2047-encode start (- end 2)) - (setq last-encoded t))) ; record that it was encoded - ((eq ?. (char-syntax (char-after))) + (if (re-search-forward encodable-regexp end 'move) + ;; It needs encoding. Strip the quotes first, + ;; since encoded words can't occur in quotes. + (progn + (goto-char end) + (delete-backward-char 1) + (goto-char start) + (delete-char 1) + (when last-encoded + ;; There was a preceding quoted word. We need + ;; to include any separating whitespace in this + ;; word to avoid it getting lost. + (skip-chars-backward " \t") + ;; A space is needed between the encoded words. + (insert ? ) + (setq start (point) + end (1+ end))) + ;; Adjust the end position for the deleted quotes. + (rfc2047-encode start (- end 2)) + (setq last-encoded t)) ; record that it was encoded + (setq last-encoded nil))) + ((eq ?. csyntax) ;; Skip other delimiters, but record that they've ;; potentially separated quoted words. (forward-char) (setq last-encoded nil)) + ((eq ?\) csyntax) + (error "Unbalanced parentheses")) + ((eq ?\( csyntax) + ;; Look for the end of parentheses. + (forward-list) + ;; Encode text as an unstructured field. + (let ((rfc2047-encoding-type 'mime)) + (rfc2047-encode-region (1+ start) (1- (point)))) + (skip-chars-forward ")")) (t ; normal token/whitespace sequence ;; Find the end. - (forward-word 1) - (skip-chars-backward " \t") + ;; Skip one ASCII word, or encode continuous words + ;; in which all those contain non-ASCII characters. + (setq end nil) + (while (not (or end (eobp))) + (when (looking-at "[\000-\177]+") + (setq begin (point) + end (match-end 0)) + (when (progn + (while (and (or (re-search-forward + "[ \t\n]\\|\\Sw" end 'move) + (setq end nil)) + (eq ?\\ (char-syntax (char-before)))) + ;; Skip backslash-quoted characters. + (forward-char)) + end) + (setq end (match-beginning 0)) + (if rfc2047-encode-encoded-words + (progn + (goto-char begin) + (when (search-forward "=?" end 'move) + (goto-char (match-beginning 0)) + (setq end nil))) + (goto-char end)))) + ;; Where the value nil of `end' means there may be + ;; text to have to be encoded following the point. + ;; Otherwise, the point reached to the end of ASCII + ;; words separated by whitespace or a special char. + (unless end + (when (looking-at encodable-regexp) + (goto-char (setq begin (match-end 0))) + (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)") + (setq end (match-end 0)) + (progn + (while (re-search-forward + encodable-regexp end t)) + (< begin (point))) + (goto-char begin) + (or (not (re-search-forward "\\Sw" end t)) + (progn + (goto-char (match-beginning 0)) + nil))) + (goto-char end)) + (when (looking-at "[^ \t\n]+") + (setq end (match-end 0)) + (if (re-search-forward "\\Sw+" end t) + ;; There are special characters better + ;; to be encoded so that MTAs may parse + ;; them safely. + (cond ((= end (point))) + ((looking-at (concat "\\sw*\\(" + encodable-regexp + "\\)")) + (setq end nil)) + (t + (goto-char (1- (match-end 0))) + (unless (= (point) (match-beginning 0)) + ;; Separate encodable text and + ;; delimiter. + (insert " ")))) + (goto-char end) + (skip-chars-forward " \t\n") + (if (and (looking-at "[^ \t\n]+") + (string-match encodable-regexp + (match-string 0))) + (setq end nil) + (goto-char end))))))) + (skip-chars-backward " \t\n") (setq end (point)) - ;; Deal with encoding and leading space as for - ;; quoted words. (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - (when last-encoded - (goto-char start) - (skip-chars-backward " \t") - (insert ? ) - (setq start (point) - end (1+ end))) - (rfc2047-encode start end) - (setq last-encoded t))))) + (if (re-search-forward encodable-regexp end 'move) + (progn + (unless (memq (char-before start) '(nil ?\t ? )) + (if (progn + (goto-char start) + (skip-chars-backward "^ \t\n") + (and (looking-at "\\Sw+") + (= (match-end 0) start))) + ;; Also encode bogus delimiters. + (setq start (point)) + ;; Separate encodable text and delimiter. + (goto-char start) + (insert " ") + (setq start (1+ start) + end (1+ end)))) + (rfc2047-encode start end) + (setq last-encoded t)) + (setq last-encoded nil))))) (error - (error "Invalid data for rfc2047 encoding: %s" - (buffer-substring b e))))))) - (rfc2047-fold-region b (point)))) + (if (or debug-on-quit debug-on-error) + (signal (car err) (cdr err)) + (error "Invalid data for rfc2047 encoding: %s" + (mm-replace-in-string orig-text "[ \t\n]+" " ")))))))) + (rfc2047-fold-region b (point)) + (goto-char (point-max)))) (defun rfc2047-encode-string (string) "Encode words in STRING. By default, the string is treated as containing addresses (see `rfc2047-encoding-type')." - (with-temp-buffer + (mm-with-multibyte-buffer (insert string) (rfc2047-encode-region (point-min) (point-max)) (buffer-string))) +(defvar rfc2047-encode-max-chars 76 + "Maximum characters of each header line that contain encoded-words. +If it is nil, encoded-words will not be folded. Too small value may +cause an error. Don't change this for no particular reason.") + +(defun rfc2047-encode-1 (column string cs encoder start crest tail + &optional eword) + "Subroutine used by `rfc2047-encode'." + (cond ((string-equal string "") + (or eword "")) + ((not rfc2047-encode-max-chars) + (concat start + (funcall encoder (if cs + (mm-encode-coding-string string cs) + string)) + "?=")) + ((>= column rfc2047-encode-max-chars) + (when eword + (cond ((string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + ((string-match "(+\\'" eword) + ;; Break the line before the open parenthesis. + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0)))))) + (rfc2047-encode-1 (length crest) string cs encoder start " " tail + (concat eword "\n" crest))) + (t + (let ((index 0) + (limit (1- (length string))) + (prev "") + next len) + (while (and prev + (<= index limit)) + (setq next (concat start + (funcall encoder + (if cs + (mm-encode-coding-string + (substring string 0 (1+ index)) + cs) + (substring string 0 (1+ index)))) + "?=") + len (+ column (length next))) + (if (> len rfc2047-encode-max-chars) + (setq next prev + prev nil) + (if (or (< index limit) + (<= (+ len (or (string-match "\n" tail) + (length tail))) + rfc2047-encode-max-chars)) + (setq prev next + index (1+ index)) + (if (string-match "\\`)+" tail) + ;; Break the line after the close parenthesis. + (setq tail (concat (substring tail 0 (match-end 0)) + "\n " + (substring tail (match-end 0))) + prev next + index (1+ index)) + (setq next prev + prev nil))))) + (if (> index limit) + (concat eword next tail) + (if (= 0 index) + (if (and eword + (string-match "(+\\'" eword)) + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0))) + (setq eword (concat eword next))) + (setq crest " " + eword (concat eword next))) + (when (string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + (rfc2047-encode-1 (length crest) (substring string index) + cs encoder start " " tail + (concat eword "\n" crest))))))) + (defun rfc2047-encode (b e) "Encode the word(s) in the region B to E. -By default, the region is treated as containing addresses (see -`rfc2047-encoding-type')." - (let* ((mime-charset (mm-find-mime-charset-region b e)) - (cs (if (> (length mime-charset) 1) - ;; Fixme: Instead of this, try to break region into - ;; parts that can be encoded separately. - (error "Can't rfc2047-encode `%s'" - (buffer-substring b e)) - (setq mime-charset (car mime-charset)) - (mm-charset-to-coding-system mime-charset))) - ;; Fixme: Better, calculate the number of non-ASCII - ;; characters, at least for 8-bit charsets. - (encoding (or (cdr (assq mime-charset +Point moves to the end of the region." + (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii))) + cs encoding tail crest eword) + (cond ((> (length mime-charset) 1) + (error "Can't rfc2047-encode `%s'" + (buffer-substring-no-properties b e))) + ((= (length mime-charset) 1) + (setq mime-charset (car mime-charset) + cs (mm-charset-to-coding-system mime-charset)) + (unless (and (mm-multibyte-p) + (mm-coding-system-p cs)) + (setq cs nil)) + (save-restriction + (narrow-to-region b e) + (setq encoding + (or (cdr (assq mime-charset rfc2047-charset-encoding-alist)) ;; For the charsets that don't have a preferred ;; encoding, choose the one that's shorter. - (save-restriction - (narrow-to-region b e) - (if (eq (rfc2047-qp-or-base64) 'base64) - 'B - 'Q)))) - (start (concat - "=?" (downcase (symbol-name mime-charset)) "?" - (downcase (symbol-name encoding)) "?")) - (factor (case mime-charset - ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1) - ((big5 gb2312 euc-kr) 2) - (utf-8 4) - (t 8))) - (pre (- b (save-restriction - (widen) - (rfc2047-point-at-bol)))) - ;; encoded-words must not be longer than 75 characters, - ;; including charset, encoding etc. This leaves us with - ;; 75 - (length start) - 2 - 2 characters. The last 2 is for - ;; possible base64 padding. In the worst case (iso-2022-*) - ;; each character expands to 8 bytes which is expanded by a - ;; factor of 4/3 by base64 encoding. - (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0)))) - ;; Limit line length to 76 characters. - (length1 (max 1 (floor (- 76 (length start) 4 pre) - (* factor (/ 4.0 3.0))))) - (first t)) - (if mime-charset - (save-restriction - (narrow-to-region b e) - (when (eq encoding 'B) - ;; break into lines before encoding - (goto-char (point-min)) - (while (not (eobp)) - (if first - (progn - (goto-char (min (point-max) (+ length1 (point)))) - (setq first nil)) - (goto-char (min (point-max) (+ length (point))))) - (unless (eobp) - (insert ?\n))) - (setq first t)) - (if (and (mm-multibyte-p) - (mm-coding-system-p cs)) - (mm-encode-coding-region (point-min) (point-max) cs)) - (funcall (cdr (assq encoding rfc2047-encoding-function-alist)) - (point-min) (point-max)) - (goto-char (point-min)) - (while (not (eobp)) - (unless first - (insert ? )) - (setq first nil) - (insert start) - (end-of-line) - (insert "?=") - (forward-line 1)))))) + (if (eq (rfc2047-qp-or-base64) 'base64) + 'B + 'Q))) + (widen) + (goto-char e) + (skip-chars-forward "^ \t\n") + ;; `tail' may contain a close parenthesis. + (setq tail (buffer-substring-no-properties e (point))) + (goto-char b) + (setq b (point-marker) + e (set-marker (make-marker) e)) + (rfc2047-fold-region (rfc2047-point-at-bol) b) + (goto-char b) + (skip-chars-backward "^ \t\n") + (unless (= 0 (skip-chars-backward " \t")) + ;; `crest' may contain whitespace and an open parenthesis. + (setq crest (buffer-substring-no-properties (point) b))) + (setq eword (rfc2047-encode-1 + (- b (rfc2047-point-at-bol)) + (mm-replace-in-string + (buffer-substring-no-properties b e) + "\n\\([ \t]?\\)" "\\1") + cs + (or (cdr (assq encoding + rfc2047-encode-function-alist)) + 'identity) + (concat "=?" (downcase (symbol-name mime-charset)) + "?" (upcase (symbol-name encoding)) "?") + (or crest " ") + tail)) + (delete-region (if (eq (aref eword 0) ?\n) + (if (bolp) + ;; The line was folded before encoding. + (1- (point)) + (point)) + (goto-char b)) + (+ e (length tail))) + ;; `eword' contains `crest' and `tail'. + (insert eword) + (set-marker b nil) + (set-marker e nil) + (unless (or (/= 0 (length tail)) + (eobp) + (looking-at "[ \t\n)]")) + (insert " ")))) + (t + (goto-char e))))) (defun rfc2047-fold-field () "Fold the current header field." @@ -512,6 +678,7 @@ By default, the region is treated as containing addresses (see (goto-char (or break qword-break)) (setq break nil qword-break nil) + (skip-chars-backward " \t") (if (looking-at "[ \t]") (insert ?\n) (insert "\n ")) @@ -533,10 +700,8 @@ By default, the region is treated as containing addresses (see (forward-char 1)) ((memq (char-after) '(? ?\t)) (skip-chars-forward " \t") - (if first - ;; Don't break just after the header name. - (setq first nil) - (setq break (1- (point))))) + (unless first ;; Don't break just after the header name. + (setq break (point)))) ((not break) (if (not (looking-at "=\\?[^=]")) (if (eq (char-after) ?=) @@ -547,15 +712,17 @@ By default, the region is treated as containing addresses (see (setq qword-break (point))) (skip-chars-forward "^ \t\n\r"))) (t - (skip-chars-forward "^ \t\n\r")))) + (skip-chars-forward "^ \t\n\r"))) + (setq first nil)) (when (and (or break qword-break) (> (- (point) bol) 76)) (goto-char (or break qword-break)) (setq break nil qword-break nil) - (if (looking-at "[ \t]") - (insert ?\n) - (insert "\n ")) + (if (or (> 0 (skip-chars-backward " \t")) + (looking-at "[ \t]")) + (insert ?\n) + (insert "\n ")) (setq bol (1- (point))) ;; Don't break before the first non-LWSP characters. (skip-chars-forward " \t") @@ -590,48 +757,48 @@ By default, the region is treated as containing addresses (see (setq eol (rfc2047-point-at-eol)) (forward-line 1))))) -(defun rfc2047-b-encode-region (b e) - "Base64-encode the header contained in region B to E." - (save-restriction - (narrow-to-region (goto-char b) e) - (while (not (eobp)) - (base64-encode-region (point) (progn (end-of-line) (point)) t) - (if (and (bolp) (eolp)) - (delete-backward-char 1)) - (forward-line)))) +(defun rfc2047-b-encode-string (string) + "Base64-encode the header contained in STRING." + (base64-encode-string string t)) -(defun rfc2047-q-encode-region (b e) - "Quoted-printable-encode the header in region B to E." - (save-excursion - (save-restriction - (narrow-to-region (goto-char b) e) - (let ((bol (save-restriction - (widen) - (rfc2047-point-at-bol)))) - (quoted-printable-encode-region - b e nil - ;; = (\075), _ (\137), ? (\077) are used in the encoded word. - ;; Avoid using 8bit characters. - ;; This list excludes `especials' (see the RFC2047 syntax), - ;; meaning that some characters in non-structured fields will - ;; get encoded when they con't need to be. The following is - ;; what it used to be. -;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" -;;; "\010\012\014\040-\074\076\100-\136\140-\177") - "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") - (subst-char-in-region (point-min) (point-max) ? ?_) - ;; The size of QP encapsulation is about 20, so set limit to - ;; 56=76-20. - (unless (< (- (point-max) (point-min)) 56) - ;; Don't break if it could fit in one line. - ;; Let rfc2047-encode-region break it later. - (goto-char (1+ (point-min))) - (while (and (not (bobp)) (not (eobp))) - (goto-char (min (point-max) (+ 56 bol))) - (search-backward "=" (- (point) 2) t) - (unless (or (bobp) (eobp)) - (insert ?\n) - (setq bol (point))))))))) +(defun rfc2047-q-encode-string (string) + "Quoted-printable-encode the header in STRING." + (mm-with-unibyte-buffer + (insert string) + (quoted-printable-encode-region + (point-min) (point-max) nil + ;; = (\075), _ (\137), ? (\077) are used in the encoded word. + ;; Avoid using 8bit characters. + ;; This list excludes `especials' (see the RFC2047 syntax), + ;; meaning that some characters in non-structured fields will + ;; get encoded when they con't need to be. The following is + ;; what it used to be. + ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" + ;;; "\010\012\014\040-\074\076\100-\136\140-\177") + "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") + (subst-char-in-region (point-min) (point-max) ? ?_) + (buffer-string))) + +(defun rfc2047-encode-parameter (param value) + "Return and PARAM=VALUE string encoded in the RFC2047-like style. +This is a replacement for the `rfc2231-encode-string' function. + +When attaching files as MIME parts, we should use the RFC2231 encoding +to specify the file names containing non-ASCII characters. However, +many mail softwares don't support it in practice and recipients won't +be able to extract files with correct names. Instead, the RFC2047-like +encoding is acceptable generally. This function provides the very +RFC2047-like encoding, resigning to such a regrettable trend. To use +it, put the following line in your ~/.gnus.el file: + +\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +" + (let* ((rfc2047-encoding-type 'mime) + (rfc2047-encode-max-chars nil) + (string (rfc2047-encode-string value))) + (if (string-match (concat "[" ietf-drums-tspecials "]") string) + (format "%s=%S" param string) + (concat param "=" string)))) ;;; ;;; Functions for decoding RFC2047 messages @@ -639,8 +806,8 @@ By default, the region is treated as containing addresses (see (eval-and-compile (defconst rfc2047-encoded-word-regexp - "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\ -\\?\\([!->@-~ +]*\\)\\?=")) + "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\ +\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?=")) (defvar rfc2047-quote-decoded-words-containing-tspecials nil "If non-nil, quote decoded words containing special characters.") @@ -671,7 +838,7 @@ By default, the region is treated as containing addresses (see "\\(\n?[ \t]\\)+" "\\(" rfc2047-encoded-word-regexp "\\)")) nil t) - (delete-region (goto-char (match-end 1)) (match-beginning 6))) + (delete-region (goto-char (match-end 1)) (match-beginning 7))) ;; Decode the encoded words. (setq b (goto-char (point-min))) (while (re-search-forward rfc2047-encoded-word-regexp nil t) @@ -774,7 +941,20 @@ By default, the region is treated as containing addresses (see mail-parse-charset (not (eq mail-parse-charset 'us-ascii)) (not (eq mail-parse-charset 'gnus-decoded))) - (mm-decode-coding-string string mail-parse-charset) + ;; `decode-coding-string' in Emacs offers a third optional + ;; arg NOCOPY to avoid consing a new string if the decoding + ;; is "trivial". Unfortunately it currently doesn't + ;; consider anything else than a `nil' coding system + ;; trivial. + ;; `rfc2047-decode-string' is called multiple times for each + ;; article during summary buffer generation, and we really + ;; want to avoid unnecessary consing. So we bypass + ;; `decode-coding-string' if the string is purely ASCII. + (if (and (fboundp 'detect-coding-string) + ;; string is purely ASCII + (eq (detect-coding-string string t) 'undecided)) + string + (mm-decode-coding-string string mail-parse-charset)) (mm-string-as-multibyte string))))) (defun rfc2047-parse-and-decode (word) @@ -787,8 +967,8 @@ decodable." (condition-case nil (rfc2047-decode (match-string 1 word) - (upcase (match-string 2 word)) - (match-string 3 word)) + (string-to-char (match-string 3 word)) + (match-string 4 word)) (error word)) word))) ; un-decodable @@ -809,7 +989,7 @@ decodable." (defun rfc2047-decode (charset encoding string) "Decode STRING from the given MIME CHARSET in the given ENCODING. -Valid ENCODINGs are \"B\" and \"Q\". +Valid ENCODINGs are the characters \"B\" and \"Q\". If your Emacs implementation can't decode CHARSET, return nil." (if (stringp charset) (setq charset (intern (downcase charset)))) @@ -824,18 +1004,17 @@ If your Emacs implementation can't decode CHARSET, return nil." (memq 'gnus-unknown mail-parse-ignored-charsets)) (setq cs (mm-charset-to-coding-system mail-parse-charset))) (when cs - (when (and (eq cs 'ascii) - mail-parse-charset) - (setq cs mail-parse-charset)) + (when (eq cs 'ascii) + (setq cs (or mail-parse-charset 'raw-text))) (mm-decode-coding-string (cond - ((equal "B" encoding) + ((char-equal ?B encoding) (base64-decode-string (rfc2047-pad-base64 string))) - ((equal "Q" encoding) + ((char-equal ?Q encoding) (quoted-printable-decode-string - (mm-replace-chars-in-string string ?_ ? ))) - (t (error "Invalid encoding: %s" encoding))) + (mm-subst-char-in-string ?_ ? string t))) + (t (error "Invalid encoding: %c" encoding))) cs)))) (provide 'rfc2047) diff --git a/man/ChangeLog b/man/ChangeLog index 6da44c9a8e2..8efe3775953 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,12 @@ +2005-03-25 Katsumi Yamaoka + + * emacs-mime.texi (Display Customization): Markup fixes. + (rfc2047): Update. + +2005-03-23 Reiner Steib + + * gnus-faq.texi: Replaced with auto-generated version. + 2005-03-29 Richard M. Stallman * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info. 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. @item mm-enable-external @vindex mm-enable-external -Indicate whether external MIME handlers should be used. +Indicate whether external @acronym{MIME} handlers should be used. -If @code{t}, all defined external MIME handlers are used. If +If @code{t}, all defined external @acronym{MIME} handlers are used. If @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}). If it is the symbol @code{ask}, you are prompted before the external @acronym{MIME} handler is invoked. When you launch an attachment through mailcap (@pxref{mailcap}) an -attempt is made to use a safe viewer with the safest options--this isn't +attempt is made to use a safe viewer with the safest options---this isn't the case if you save it to disk and launch it in a different way (command line or double-clicking). Anyhow, if you want to be sure not 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 Quoted-Printable-like encoding) and @code{B} (base64). This alist specifies which charset should use which encoding. -@item rfc2047-encoding-function-alist -@vindex rfc2047-encoding-function-alist +@item rfc2047-encode-function-alist +@vindex rfc2047-encode-function-alist This is an alist of encoding / function pairs. The encodings are @code{Q}, @code{B} and @code{nil}. @@ -1336,6 +1336,11 @@ This is an alist of encoding / function pairs. The encodings are @vindex rfc2047-encoded-word-regexp When decoding words, this library looks for matches to this regexp. +@item rfc2047-encode-encoded-words +@vindex rfc2047-encode-encoded-words +The boolean variable specifies whether encoded words +(e.g. @samp{=?hello?=}) should be encoded again. + @end table Those were the variables, and these are this functions: @@ -1366,6 +1371,24 @@ Decode the encoded words in the region. @findex rfc2047-decode-string Decode a string and return the results. +@item rfc2047-encode-parameter +@findex rfc2047-encode-parameter +Encode a parameter in the RFC2047-like style. This is a replacement for +the @code{rfc2231-encode-string} function. @xref{rfc2231}. + +When attaching files as @acronym{MIME} parts, we should use the RFC2231 +encoding to specify the file names containing non-@acronym{ASCII} +characters. However, many mail softwares don't support it in practice +and recipients won't be able to extract files with correct names. +Instead, the RFC2047-like encoding is acceptable generally. This +function provides the very RFC2047-like encoding, resigning to such a +regrettable trend. To use it, put the following line in your +@file{~/.gnus.el} file: + +@lisp +(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +@end lisp + @end table 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 @@ -@c Insert "\input texinfo" at 1st line before texing this file alone. -@c -*-texinfo-*- -@c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +@c \input texinfo @c -*-texinfo-*- +@c Uncomment 1st line before texing this file alone. +@c %**start of header +@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +@c +@c Do not modify this file, it was generated from gnus-faq.xml, available from +@c . +@c @setfilename gnus-faq.info - -@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top +@settitle Frequently Asked Questions +@c %**end of header +@c @node Frequently Asked Questions -@comment node-name, next, previous, up - -@c @chapter Frequently Asked Questions @section Frequently Asked Questions -@cindex FAQ -@cindex Frequently Asked Questions - -@c - Uncomment @chapter, comment @section -@c - run (texinfo-every-node-update) -@c - revert it. @menu -* FAQ - Introduction:: About Gnus and this FAQ. -* FAQ 1 - Installation:: Installation of Gnus. -* FAQ 2 - Startup / Group buffer:: Start up questions and the first - buffer Gnus shows you. -* FAQ 3 - Getting messages:: Making Gnus read your mail and news. -* FAQ 4 - Reading messages:: How to efficiently read messages. -* FAQ 5 - Composing messages:: Composing mails or Usenet postings. -* FAQ 6 - Old messages:: Importing, archiving, searching - and deleting messages. -* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. -* FAQ 8 - Getting help:: When this FAQ isn't enough. -* FAQ 9 - Tuning Gnus:: How to make Gnus faster. -* FAQ - Glossary:: Terms used in the FAQ explained. +* FAQ - Changes:: +* FAQ - Introduction:: About Gnus and this FAQ. +* FAQ 1 - Installation FAQ:: Installation of Gnus. +* FAQ 2 - Startup / Group buffer:: Start up questions and the + first buffer Gnus shows you. +* FAQ 3 - Getting Messages:: Making Gnus read your mail + and news. +* FAQ 4 - Reading messages:: How to efficiently read + messages. +* FAQ 5 - Composing messages:: Composing mails or Usenet + postings. +* FAQ 6 - Old messages:: Importing, archiving, + searching and deleting messages. +* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while + offline. +* FAQ 8 - Getting help:: When this FAQ isn't enough. +* FAQ 9 - Tuning Gnus:: How to make Gnus faster. +* FAQ - Glossary:: Terms used in the FAQ + explained. @end menu - @subheading Abstract - This is the new Gnus Frequently Asked Questions list. If you have a -Web browser, the official hypertext version is at -@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from -@uref{http://sourceforge.net/projects/gnus/}. - +This is the new Gnus Frequently Asked Questions list. +If you have a Web browser, the official hypertext version is at +@uref{http://my.gnus.org/FAQ/}, +the Docbook source is available from +@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}. - Please submit features and suggestions to the - @email{faq-discuss@@my.gnus.org,FAQ discussion list}. - The list is protected against junk mail with - @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As - a subscriber, your submissions will automatically pass. You can - also subscribe to the list by sending a blank email to - @email{faq-discuss-subscribe@@my.gnus.org} - and - @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse - the archive, browse the archive}. - -@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions -@comment node-name, next, previous, up -@heading Introduction +Please submit features and suggestions to the +@email{faq-discuss@@my.gnus.org, FAQ discussion list}. +The list is protected against junk mail with +@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As +a subscriber, your submissions will automatically pass. You can +also subscribe to the list by sending a blank email to +@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org} +and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse +the archive}. + +@node FAQ - Changes +@subheading Changes + + + +@itemize @bullet + +@item +Updated FAQ to reflect release of Gnus 5.10 and start of +No Gnus development. +@end itemize + +@node FAQ - Introduction +@subheading Introduction This is the Gnus Frequently Asked Questions list. Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented - as a part of Emacs. It's been around in some form for almost a decade - now, and has been distributed as a standard part of Emacs for much of - that time. Gnus 5 is the latest (and greatest) incarnation. The - original version was called GNUS, and was written by Masanobu UMEDA. - When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and - decided to rewrite Gnus. +as a part of Emacs. It's been around in some form for almost a decade +now, and has been distributed as a standard part of Emacs for much of +that time. Gnus 5 is the latest (and greatest) incarnation. The +original version was called GNUS, and was written by Masanobu UMEDA. +When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and +decided to rewrite Gnus. - Its biggest strength is the fact that it is extremely - customizable. It is somewhat intimidating at first glance, but - most of the complexity can be ignored until you're ready to take - advantage of it. If you receive a reasonable volume of e-mail - (you're on various mailing lists), or you would like to read - high-volume mailing lists but cannot keep up with them, or read - high volume newsgroups or are just bored, then Gnus is what you - want. +Its biggest strength is the fact that it is extremely +customizable. It is somewhat intimidating at first glance, but +most of the complexity can be ignored until you're ready to take +advantage of it. If you receive a reasonable volume of e-mail +(you're on various mailing lists), or you would like to read +high-volume mailing lists but cannot keep up with them, or read +high volume newsgroups or are just bored, then Gnus is what you +want. - This FAQ was maintained by Justin Sheehy until March 2002. He - would like to thank Steve Baur and Per Abrahamsen for doing a wonderful - job with this FAQ before him. We would like to do the same - thanks, - Justin! - +This FAQ was maintained by Justin Sheehy until March 2002. He +would like to thank Steve Baur and Per Abrahamsen for doing a wonderful +job with this FAQ before him. We would like to do the same - thanks, +Justin! - If you have a Web browser, the official hypertext version is at:@* - @uref{http://my.gnus.org/FAQ/}. - This version is much nicer than the unofficial hypertext - versions that are archived at Utrecht, Oxford, Smart Pages, Ohio - State, and other FAQ archives. See the resources question below - if you want information on obtaining it in another format. - +If you have a Web browser, the official hypertext version is at: +@uref{http://my.gnus.org/FAQ/}. +This version is much nicer than the unofficial hypertext +versions that are archived at Utrecht, Oxford, Smart Pages, Ohio +State, and other FAQ archives. See the resources question below +if you want information on obtaining it in another format. - The information contained here was compiled with the assistance - of the Gnus development mailing list, and any errors or - misprints are the my.gnus.org team's fault, sorry. +The information contained here was compiled with the assistance +of the Gnus development mailing list, and any errors or +misprints are the my.gnus.org team's fault, sorry. - -@ifnottex -@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions -@end ifnottex -@subsection Installation +@node FAQ 1 - Installation FAQ +@subsection Installation FAQ @menu -* [1.1]:: What is the latest version of Gnus? -* [1.2]:: What's new in 5.10? -* [1.3]:: Where and how to get Gnus? -* [1.4]:: What to do with the tarball now? -* [1.5]:: Which version of Emacs do I need? -* [1.6]:: How do I run Gnus on both Emacs and XEmacs? +* [1.1]:: What is the latest version of Gnus? +* [1.2]:: What's new in 5.10? +* [1.3]:: Where and how to get Gnus? +* [1.4]:: What to do with the tarball now? +* [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what + are those? +* [1.6]:: Which version of Emacs do I need? +* [1.7]:: How do I run Gnus on both Emacs and XEmacs? @end menu - -@ifnottex -@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.1: +@node [1.1] +@subsubheading Question 1.1 What is the latest version of Gnus? -Answer: +@subsubheading Answer - Jingle please: Gnus 5.10 is released, get it while it's - hot! As well as the step in version number is rather - small, Gnus 5.10 has tons of new features which you - shouldn't miss, however if you are cautious, you might - prefer to stay with 5.8.8 respectively 5.9 (they are - basically the same) until some bugfix releases are out. - -@ifnottex -@node [1.2], [1.3], [1.1], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.2: +Jingle please: Gnus 5.10 is released, get it while it's +hot! As well as the step in version number is rather +small, Gnus 5.10 has tons of new features which you +shouldn't miss. The current release (5.10.6) should be at +least as stable as the latest release of the 5.8 series. + +@node [1.2] +@subsubheading Question 1.2 What's new in 5.10? -Answer: +@subsubheading Answer - First of all, you should have a look into the file - GNUS-NEWS in the toplevel directory of the Gnus tarball, - there the most important changes are listed. Here's a - short list of the changes I find especially - important/interesting: - +First of all, you should have a look into the file +GNUS-NEWS in the toplevel directory of the Gnus tarball, +there the most important changes are listed. Here's a +short list of the changes I find especially +important/interesting: - - -@itemize @bullet{} +@itemize @bullet @item - Major rewrite of the Gnus agent, Gnus agent is now - active by default. - +Major rewrite of the Gnus agent, Gnus agent is now +active by default. + @item - Many new article washing functions for dealing with - ugly formatted articles. - +Many new article washing functions for dealing with +ugly formatted articles. + @item - Anti Spam features. - +Anti Spam features. + @item - message-utils now included in Gnus. - +Message-utils now included in Gnus. + @item - New format specifiers for summary lines, e.g. %B for - a complex trn-style thread tree. - +New format specifiers for summary lines, e.g. %B for +a complex trn-style thread tree. @end itemize - -@ifnottex -@node [1.3], [1.4], [1.2], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.3: + +@node [1.3] +@subsubheading Question 1.3 Where and how to get Gnus? -Answer: +@subsubheading Answer - The latest released version of Gnus isn't included in - Emacs 21 and until now it also isn't available through the - package system of XEmacs 21.4, therefor you should get the - Gnus tarball from - @uref{http://www.gnus.org/dist/gnus.tar.gz} - or via anonymous FTP from - @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. - -@ifnottex -@node [1.4], [1.5], [1.3], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.4: +The latest released version of Gnus isn't included in +Emacs 21, therefor you should get the Gnus tarball from +@uref{http://www.gnus.org/dist/gnus.tar.gz} +or via anonymous FTP from +@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. +If you use XEmacs instead of Emacs you can use XEmacs' +package system instead. - What to do with the tarball now? - +@node [1.4] +@subsubheading Question 1.4 -Answer: +What to do with the tarball now? - Untar it via @samp{tar xvzf gnus.tar.gz} and do the common - @samp{./configure; make; make install} circle. - (under MS-Windows either get the Cygwin environment from - @uref{http://www.cygwin.com} - which allows you to do what's described above or unpack the - tarball with some packer (e.g. Winace from - @uref{http://www.winace.com}) - and use the batch-file make.bat included in the tarball to install - Gnus. If you don't want to (or aren't allowed to) install Gnus - system-wide, you can install it in your home directory and add the - following lines to your ~/.xemacs/init.el or ~/.emacs: - +@subsubheading Answer + +Untar it via @samp{tar xvzf gnus.tar.gz} and do the common +@samp{./configure; make; make install} circle. +(under MS-Windows either get the Cygwin environment from +@uref{http://www.cygwin.com} +which allows you to do what's described above or unpack the +tarball with some packer (e.g. Winace from +@uref{http://www.winace.com}) +and use the batch-file make.bat included in the tarball to install +Gnus.) If you don't want to (or aren't allowed to) install Gnus +system-wide, you can install it in your home directory and add the +following lines to your ~/.xemacs/init.el or ~/.emacs: @example (add-to-list 'load-path "/path/to/gnus/lisp") @@ -212,436 +205,395 @@ Answer: (add-to-list 'Info-directory-list "/path/to/gnus/texi/") (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) @end example - @noindent - Make sure that you don't have any Gnus related stuff - before this line, on MS Windows use something like - "C:/path/to/lisp" (yes, "/"). - -@ifnottex -@node [1.5], [1.6], [1.4], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.5: + +Make sure that you don't have any Gnus related stuff +before this line, on MS Windows use something like +"C:/path/to/lisp" (yes, "/"). + +@node [1.5] +@subsubheading Question 1.5 + +I sometimes read references to No Gnus and Oort Gnus, +what are those? + +@subsubheading Answer + +Oort Gnus was the name of the development version of +Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is +the name of the current development version which will +once become Gnus 5.12 or Gnus 6. (If you're wondering why +not 5.11, the odd version numbers are normally used for +the Gnus versions bundled with Emacs) + +@node [1.6] +@subsubheading Question 1.6 Which version of Emacs do I need? -Answer: +@subsubheading Answer - Gnus 5.10 requires an Emacs version that is greater - than or equal to Emacs 20.7 or XEmacs 21.1. - -@ifnottex -@node [1.6], , [1.5], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.6: +Gnus 5.10 requires an Emacs version that is greater +than or equal to Emacs 20.7 or XEmacs 21.1. The +development versions of Gnus (aka No Gnus) require Emacs +21 or XEmacs 21.4. + +@node [1.7] +@subsubheading Question 1.7 How do I run Gnus on both Emacs and XEmacs? -Answer: +@subsubheading Answer - You can't use the same copy of Gnus in both as the Lisp - files are byte-compiled to a format which is different - depending on which Emacs did the compilation. Get one copy - of Gnus for Emacs and one for XEmacs. - -@ifnottex -@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions -@end ifnottex +You can't use the same copy of Gnus in both as the Lisp +files are byte-compiled to a format which is different +depending on which Emacs did the compilation. Get one copy +of Gnus for Emacs and one for XEmacs. + +@node FAQ 2 - Startup / Group buffer @subsection Startup / Group buffer @menu -* [2.1]:: Every time I start Gnus I get a message - "Gnus auto-save file exists. Do you want to read it?", - what does this mean and how to prevent it? -* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? -* [2.3]:: How to change the format of the lines in Group buffer? -* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my - groups into categories so I can easier browse through them? -* [2.5]:: How to manually sort the groups in Group buffer? How to sort the - groups in a topic? +* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save + file exists. Do you want to read it?", what does this mean and + how to prevent it? +* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, + what's this? +* [2.3]:: How to change the format of the lines in Group buffer? +* [2.4]:: My group buffer becomes a bit crowded, is there a way to + sort my groups into categories so I can easier browse through + them? +* [2.5]:: How to manually sort the groups in Group buffer? How to + sort the groups in a topic? @end menu -@ifnottex -@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.1: +@node [2.1] +@subsubheading Question 2.1 - Every time I start Gnus I get a message "Gnus auto-save - file exists. Do you want to read it?", what does this mean - and how to prevent it? - +Every time I start Gnus I get a message "Gnus auto-save +file exists. Do you want to read it?", what does this mean +and how to prevent it? -Answer: +@subsubheading Answer - This message means that the last time you used Gnus, it - wasn't properly exited and therefor couldn't write its - informations to disk (e.g. which messages you read), you - are now asked if you want to restore those informations - from the auto-save file. - +This message means that the last time you used Gnus, it +wasn't properly exited and therefor couldn't write its +informations to disk (e.g. which messages you read), you +are now asked if you want to restore those informations +from the auto-save file. - To prevent this message make sure you exit Gnus - via @samp{q} in group buffer instead of - just killing Emacs. - -@ifnottex -@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question: 2.2 +To prevent this message make sure you exit Gnus +via @samp{q} in group buffer instead of +just killing Emacs. - Gnus doesn't remember which groups I'm subscribed to, - what's this? - +@node [2.2] +@subsubheading Question 2.2 -Answer: +Gnus doesn't remember which groups I'm subscribed to, +what's this? - You get the message described in the q/a pair above while - starting Gnus, right? It's an other symptom for the same - problem, so read the answer above. - -@ifnottex -@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.3: +@subsubheading Answer - How to change the format of the lines in Group buffer? - +You get the message described in the q/a pair above while +starting Gnus, right? It's an other symptom for the same +problem, so read the answer above. -Answer: +@node [2.3] +@subsubheading Question 2.3 - You've got to tweak the value of the variable - gnus-group-line-format. See the manual node "Group Line - Specification" for information on how to do this. An - example for this (guess from whose .gnus :-)): - +How to change the format of the lines in Group buffer? + +@subsubheading Answer + +You've got to tweak the value of the variable +gnus-group-line-format. See the manual node "Group Line +Specification" for information on how to do this. An +example for this (guess from whose .gnus :-)): @example - (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") - @end example - -@ifnottex -@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.4: +@noindent - My group buffer becomes a bit crowded, is there a way to - sort my groups into categories so I can easier browse - through them? - +@node [2.4] +@subsubheading Question 2.4 -Answer: +My group buffer becomes a bit crowded, is there a way to +sort my groups into categories so I can easier browse +through them? - Gnus offers the topic mode, it allows you to sort your - groups in, well, topics, e.g. all groups dealing with - Linux under the topic linux, all dealing with music under - the topic music and all dealing with scottish music under - the topic scottish which is a subtopic of music. - +@subsubheading Answer - To enter topic mode, just hit t while in Group buffer. Now - you can use @samp{T n} to create a topic - at point and @samp{T m} to move a group to - a specific topic. For more commands see the manual or the - menu. You might want to include the %P specifier at the - beginning of your gnus-group-line-format variable to have - the groups nicely indented. - -@ifnottex -@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.5: +Gnus offers the topic mode, it allows you to sort your +groups in, well, topics, e.g. all groups dealing with +Linux under the topic linux, all dealing with music under +the topic music and all dealing with scottish music under +the topic scottish which is a subtopic of music. - How to manually sort the groups in Group buffer? How to - sort the groups in a topic? - +To enter topic mode, just hit t while in Group buffer. Now +you can use @samp{T n} to create a topic +at point and @samp{T m} to move a group to +a specific topic. For more commands see the manual or the +menu. You might want to include the %P specifier at the +beginning of your gnus-group-line-format variable to have +the groups nicely indented. -Answer: +@node [2.5] +@subsubheading Question 2.5 - Move point over the group you want to move and - hit @samp{C-k}, now move point to the - place where you want the group to be and - hit @samp{C-y}. - -@ifnottex -@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions -@end ifnottex -@subsection Getting messages +How to manually sort the groups in Group buffer? How to +sort the groups in a topic? + +@subsubheading Answer + +Move point over the group you want to move and +hit @samp{C-k}, now move point to the +place where you want the group to be and +hit @samp{C-y}. + +@node FAQ 3 - Getting Messages +@subsection Getting Messages @menu -* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says - "nntp (news) open error", what to do? -* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. -* [3.3]:: My news server requires authentication, how to store user name - and password on disk? -* [3.4]:: Gnus seems to start up OK, but I can't find out how to - subscribe to a group. -* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? -* [3.6]:: I want Gnus to fetch news from several servers, is this possible? -* [3.7]:: And how about local spool files? -* [3.8]:: OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? -* [3.9]:: And what about IMAP? -* [3.10]:: At the office we use one of those MS Exchange servers, - can I use Gnus to read my mail from it? -* [3.11]:: Can I tell Gnus not to delete the mails on the server - it retrieves via POP3? +* [3.1]:: I just installed Gnus, started it via @samp{M-x gnus} + but it only says "nntp (news) open error", what to do? +* [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el + means. +* [3.3]:: My news server requires authentication, how to store user + name and password on disk? +* [3.4]:: Gnus seems to start up OK, but I can't find out how to + subscribe to a group. +* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed + to post on this server as well as I am, what's that? +* [3.6]:: I want Gnus to fetch news from several servers, is this + possible? +* [3.7]:: And how about local spool files? +* [3.8]:: OK, reading news works now, but I want to be able to read + my mail with Gnus, too. How to do it? +* [3.9]:: And what about IMAP? +* [3.10]:: At the office we use one of those MS Exchange servers, can + I use Gnus to read my mail from it? +* [3.11]:: Can I tell Gnus not to delete the mails on the server it + retrieves via POP3? @end menu -@ifnottex -@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.1: +@node [3.1] +@subsubheading Question 3.1 - I just installed Gnus, started it via - @samp{M-x gnus} - but it only says "nntp (news) open error", what to do? - +I just installed Gnus, started it via +@samp{M-x gnus} +but it only says "nntp (news) open error", what to do? -Answer: +@subsubheading Answer - You've got to tell Gnus where to fetch the news from. Read - the documentation for information on how to do this. As a - first start, put those lines in ~/.gnus: - +You've got to tell Gnus where to fetch the news from. Read +the documentation for information on how to do this. As a +first start, put those lines in ~/.gnus.el: @example (setq gnus-select-method '(nntp "news.yourprovider.net")) (setq user-mail-address "you@@yourprovider.net") (setq user-full-name "Your Name") @end example - -@ifnottex -@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.2: +@noindent - I'm working under Windows and have no idea what ~/.gnus means. - +@node [3.2] +@subsubheading Question 3.2 -Answer: +I'm working under Windows and have no idea what ~/.gnus.el means. - The ~/ means the home directory where Gnus and Emacs look for the -configuration files. However, you don't really need to know what this -means, it suffices that Emacs knows what it means :-) You can type -@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on -Windows), and Emacs will open the right file for you. (It will most -likely be new, and thus empty.) However, I'd discourage you from -doing so, since the directory Emacs chooses will most certainly not be -what you want, so let's do it the correct way. The first thing you've -got to do is to create a suitable directory (no blanks in directory -name please) e.g. @file{c:\myhome}. Then you must set the environment -variable HOME to this directory. To do this under Win9x or Me include -the line - +@subsubheading Answer + +The ~/ means the home directory where Gnus and Emacs look +for the configuration files. However, you don't really +need to know what this means, it suffices that Emacs knows +what it means :-) You can type +@samp{C-x C-f ~/.gnus.el RET } +(yes, with the forward slash, even on Windows), and +Emacs will open the right file for you. (It will most +likely be new, and thus empty.) +However, I'd discourage you from doing so, since the +directory Emacs chooses will most certainly not be what +you want, so let's do it the correct way. +The first thing you've got to do is to +create a suitable directory (no blanks in directory name +please) e.g. c:\myhome. Then you must set the environment +variable HOME to this directory. To do this under Win9x +or Me include the line @example - SET HOME=C:\myhome - @end example - @noindent - in your autoexec.bat and reboot. Under NT, 2000 and XP, - hit Winkey+Pause/Break to enter system options (if it - doesn't work, go to Control Panel -> System). There you'll - find the possibility to set environment variables, create - a new one with name HOME and value @file{c:\myhome}, a reboot is - not necessary. - - Now to create ~/.gnus, say - @samp{C-x C-f ~/.gnus RET C-x C-s}. - in Emacs. - -@ifnottex -@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.3: +in your autoexec.bat and reboot. Under NT, 2000 and XP, +hit Winkey+Pause/Break to enter system options (if it +doesn't work, go to Control Panel -> System). There you'll +find the possibility to set environment variables, create +a new one with name HOME and value C:\myhome, a reboot is +not necessary. - My news server requires authentication, how to store - user name and password on disk? - +Now to create ~/.gnus.el, say +@samp{C-x C-f ~/.gnus.el RET C-x C-s}. +in Emacs. -Answer: +@node [3.3] +@subsubheading Question 3.3 - Create a file ~/.authinfo which includes for each server a line like this - +My news server requires authentication, how to store +user name and password on disk? + +@subsubheading Answer + +Create a file ~/.authinfo which includes for each server a line like this @example machine news.yourprovider.net login YourUserName password YourPassword @end example - @noindent . - Make sure that the file isn't readable to others if you - work on a OS which is capable of doing so. (Under Unix - say - +Make sure that the file isn't readable to others if you +work on a OS which is capable of doing so. (Under Unix +say @example chmod 600 ~/.authinfo @end example - @noindent - in a shell.) - -@ifnottex -@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.4: - Gnus seems to start up OK, but I can't find out how to - subscribe to a group. - +in a shell.) -Answer: +@node [3.4] +@subsubheading Question 3.4 - If you know the name of the group say @samp{U - name.of.group RET} in group buffer (use the - tab-completion Luke). Otherwise hit ^ in group buffer, - this brings you to the server buffer. Now place point (the - cursor) over the server which carries the group you want, - hit @samp{RET}, move point to the group - you want to subscribe to and say @samp{u} - to subscribe to it. - -@ifnottex -@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.5: +Gnus seems to start up OK, but I can't find out how to +subscribe to a group. - Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? - +@subsubheading Answer -Answer: +If you know the name of the group say @samp{U +name.of.group RET} in group buffer (use the +tab-completion Luke). Otherwise hit ^ in group buffer, +this brings you to the server buffer. Now place point (the +cursor) over the server which carries the group you want, +hit @samp{RET}, move point to the group +you want to subscribe to and say @samp{u} +to subscribe to it. - Some providers allow restricted anonymous access and full - access only after authorization. To make Gnus send authinfo - to those servers append - +@node [3.5] +@subsubheading Question 3.5 + +Gnus doesn't show all groups / Gnus says I'm not allowed to +post on this server as well as I am, what's that? + +@subsubheading Answer + +Some providers allow restricted anonymous access and full +access only after authorization. To make Gnus send authinfo +to those servers append @example force yes @end example - - @noindent - to the line for those servers in ~/.authinfo. -@ifnottex -@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.6: +to the line for those servers in ~/.authinfo. - I want Gnus to fetch news from several servers, is this possible? - +@node [3.6] +@subsubheading Question 3.6 -Answer: +I want Gnus to fetch news from several servers, is this possible? - Of course. You can specify more sources for articles in the - variable gnus-secondary-select-methods. Add something like - this in ~/.gnus: - +@subsubheading Answer + +Of course. You can specify more sources for articles in the +variable gnus-secondary-select-methods. Add something like +this in ~/.gnus.el: @example -(add-to-list 'gnus-secondary-select-methods +(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net")) -(add-to-list 'gnus-secondary-select-methods - '(nntp "news.yourThirdProvider.net")) +(add-to-list 'gnus-secondary-select-methods + '(nntp "news.yourThirdProvider.net")) @end example - -@ifnottex -@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.7: +@noindent - And how about local spool files? - +@node [3.7] +@subsubheading Question 3.7 -Answer: +And how about local spool files? - No problem, this is just one more select method called - nnspool, so you want this: - +@subsubheading Answer + +No problem, this is just one more select method called +nnspool, so you want this: @example (add-to-list 'gnus-secondary-select-methods '(nnspool "")) @end example - @noindent - Or this if you don't want an NNTP Server as primary news source: - + +Or this if you don't want an NNTP Server as primary news source: @example (setq gnus-select-method '(nnspool "")) @end example - @noindent - Gnus will look for the spool file in /usr/spool/news, if you - want something different, change the line above to something like this: - + +Gnus will look for the spool file in /usr/spool/news, if you +want something different, change the line above to something like this: @example (add-to-list 'gnus-secondary-select-methods - '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) + '(nnspool "" + (nnspool-directory "/usr/local/myspoolddir"))) @end example - @noindent - This sets the spool directory for this server only. - You might have to specify more stuff like the program used - to post articles, see the Gnus manual on how to do this. - -@ifnottex -@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.8: - OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? - +This sets the spool directory for this server only. +You might have to specify more stuff like the program used +to post articles, see the Gnus manual on how to do this. -Answer: +@node [3.8] +@subsubheading Question 3.8 - That's a bit harder since there are many possible sources - for mail, many possible ways for storing mail and many - different ways for sending mail. The most common cases are - these: 1: You want to read your mail from a pop3 server and - send them directly to a SMTP Server 2: Some program like - fetchmail retrieves your mail and stores it on disk from - where Gnus shall read it. Outgoing mail is sent by - Sendmail, Postfix or some other MTA. Sometimes, you even - need a combination of the above cases. - +OK, reading news works now, but I want to be able to read my mail +with Gnus, too. How to do it? - However, the first thing to do is to tell Gnus in which way - it should store the mail, in Gnus terminology which back end - to use. Gnus supports many different back ends, the most - commonly used one is nnml. It stores every mail in one file - and is therefor quite fast. However you might prefer a one - file per group approach if your file system has problems with - many small files, the nnfolder back end is then probably the - choice for you. To use nnml add the following to ~/.gnus: - +@subsubheading Answer + +That's a bit harder since there are many possible sources +for mail, many possible ways for storing mail and many +different ways for sending mail. The most common cases are +these: 1: You want to read your mail from a pop3 server and +send them directly to a SMTP Server 2: Some program like +fetchmail retrieves your mail and stores it on disk from +where Gnus shall read it. Outgoing mail is sent by +Sendmail, Postfix or some other MTA. Sometimes, you even +need a combination of the above cases. + +However, the first thing to do is to tell Gnus in which way +it should store the mail, in Gnus terminology which back end +to use. Gnus supports many different back ends, the most +commonly used one is nnml. It stores every mail in one file +and is therefor quite fast. However you might prefer a one +file per group approach if your file system has problems with +many small files, the nnfolder back end is then probably the +choice for you. To use nnml add the following to ~/.gnus.el: @example (add-to-list 'gnus-secondary-select-methods '(nnml "")) @end example - @noindent - As you might have guessed, if you want nnfolder, it's - + +As you might have guessed, if you want nnfolder, it's @example (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) @end example - +@noindent - Now we need to tell Gnus, where to get it's mail from. If - it's a POP3 server, then you need something like this: - +Now we need to tell Gnus, where to get it's mail from. If +it's a POP3 server, then you need something like this: @example (eval-after-load "mail-source" @@ -649,75 +601,68 @@ Answer: :user "yourUserName" :password "yourPassword"))) @end example - @noindent - Make sure ~/.gnus isn't readable to others if you store - your password there. If you want to read your mail from a - traditional spool file on your local machine, it's - + +Make sure ~/.gnus.el isn't readable to others if you store +your password there. If you want to read your mail from a +traditional spool file on your local machine, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))) + '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) @end example - @noindent - If it's a Maildir, with one file per message as used by - postfix, Qmail and (optionally) fetchmail it's - + +If it's a Maildir, with one file per message as used by +postfix, Qmail and (optionally) fetchmail it's @example (eval-after-load "mail-source" '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" :subdirs ("cur" "new"))) @end example - @noindent - And finally if you want to read your mail from several files - in one directory, for example because procmail already split your - mail, it's - + +And finally if you want to read your mail from several files +in one directory, for example because procmail already split your +mail, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" - :suffix ".prcml")) + '(add-to-list 'mail-sources + '(directory :path "/path/to/procmail-dir/" + :suffix ".prcml"))) @end example - @noindent - Where :suffix ".prcml" tells Gnus only to use files with the - suffix .prcml. - - OK, now you only need to tell Gnus how to send mail. If you - want to send mail via sendmail (or whichever MTA is playing - the role of sendmail on your system), you don't need to do - anything. However, if you want to send your mail to an - SMTP Server you need the following in your ~/.gnus - +Where :suffix ".prcml" tells Gnus only to use files with the +suffix .prcml. + +OK, now you only need to tell Gnus how to send mail. If you +want to send mail via sendmail (or whichever MTA is playing +the role of sendmail on your system), you don't need to do +anything. However, if you want to send your mail to an +SMTP Server you need the following in your ~/.gnus.el @example (setq send-mail-function 'smtpmail-send-it) (setq message-send-mail-function 'smtpmail-send-it) (setq smtpmail-default-smtp-server "smtp.yourProvider.net") @end example - -@ifnottex -@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.9: +@noindent - And what about IMAP? - +@node [3.9] +@subsubheading Question 3.9 -Answer: +And what about IMAP? - There are two ways of using IMAP with Gnus. The first one is - to use IMAP like POP3, that means Gnus fetches the mail from - the IMAP server and stores it on disk. If you want to do - this (you don't really want to do this) add the following to - ~/.gnus - +@subsubheading Answer + +There are two ways of using IMAP with Gnus. The first one is +to use IMAP like POP3, that means Gnus fetches the mail from +the IMAP server and stores it on disk. If you want to do +this (you don't really want to do this) add the following to +~/.gnus.el @example (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" @@ -728,249 +673,215 @@ Answer: :mailbox "INBOX" :fetchflag "\\Seen")) @end example - @noindent - You might have to tweak the values for stream and/or - authentification, see the Gnus manual node "Mail Source - Specifiers" for possible values. - - If you want to use IMAP the way it's intended, you've got to - follow a different approach. You've got to add the nnimap - back end to your select method and give the information - about the server there. - +You might have to tweak the values for stream and/or +authentification, see the Gnus manual node "Mail Source +Specifiers" for possible values. + +If you want to use IMAP the way it's intended, you've got to +follow a different approach. You've got to add the nnimap +back end to your select method and give the information +about the server there. @example -(add-to-list - 'gnus-secondary-select-methods - '(nnimap "Give the baby a name" - (nnimap-address "imap.yourProvider.net") - (nnimap-port 143) - (nnimap-list-pattern "archive.*"))) +(add-to-list 'gnus-secondary-select-methods + '(nnimap "Give the baby a name" + (nnimap-address "imap.yourProvider.net") + (nnimap-port 143) + (nnimap-list-pattern "archive.*"))) @end example - @noindent - Again, you might have to specify how to authenticate to the - server if Gnus can't guess the correct way, see the Manual - Node "IMAP" for detailed information. - -@ifnottex -@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.10: - At the office we use one of those MS Exchange servers, can I use - Gnus to read my mail from it? - +Again, you might have to specify how to authenticate to the +server if Gnus can't guess the correct way, see the Manual +Node "IMAP" for detailed information. -Answer: +@node [3.10] +@subsubheading Question 3.10 - Offer your administrator a pair of new running shoes for - activating IMAP on the server and follow the instructions - above. - -@ifnottex -@node [3.11], , [3.10], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.11: +At the office we use one of those MS Exchange servers, can I use +Gnus to read my mail from it? - Can I tell Gnus not to delete the mails on the server it - retrieves via POP3? - +@subsubheading Answer -Answer: +Offer your administrator a pair of new running shoes for +activating IMAP on the server and follow the instructions +above. - First of all, that's not the way POP3 is intended to work, - if you have the possibility, you should use the IMAP - Protocol if you want your messages to stay on the - server. Nevertheless there might be situations where you - need the feature, but sadly Gnus itself has no predefined - functionality to do so. - +@node [3.11] +@subsubheading Question 3.11 - However this is Gnus county so there are possibilities to - achieve what you want. The easiest way is to get an external - program which retrieves copies of the mail and stores them - on disk, so Gnus can read it from there. On Unix systems you - could use e.g. fetchmail for this, on MS Windows you can use - Hamster, an excellent local news and mail server. - +Can I tell Gnus not to delete the mails on the server it +retrieves via POP3? - The other solution would be, to replace the method Gnus - uses to get mail from POP3 servers by one which is capable - of leaving the mail on the server. If you use XEmacs, get - the package mail-lib, it includes an enhanced pop3.el, - look in the file, there's documentation on how to tell - Gnus to use it and not to delete the retrieved mail. For - GNU Emacs look for the file epop3.el which can do the same - (If you know the home of this file, please send me an - e-mail). You can also tell Gnus to use an external program - (e.g. fetchmail) to fetch your mail, see the info node - "Mail Source Specifiers" in the Gnus manual on how to do - it. - +@subsubheading Answer -@ifnottex -@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions -@end ifnottex +First of all, that's not the way POP3 is intended to work, +if you have the possibility, you should use the IMAP +Protocol if you want your messages to stay on the +server. Nevertheless there might be situations where you +need the feature, but sadly Gnus itself has no predefined +functionality to do so. + +However this is Gnus county so there are possibilities to +achieve what you want. The easiest way is to get an external +program which retrieves copies of the mail and stores them +on disk, so Gnus can read it from there. On Unix systems you +could use e.g. fetchmail for this, on MS Windows you can use +Hamster, an excellent local news and mail server. + +The other solution would be, to replace the method Gnus +uses to get mail from POP3 servers by one which is capable +of leaving the mail on the server. If you use XEmacs, get +the package mail-lib, it includes an enhanced pop3.el, +look in the file, there's documentation on how to tell +Gnus to use it and not to delete the retrieved mail. For +GNU Emacs look for the file epop3.el which can do the same +(If you know the home of this file, please send me an +e-mail). You can also tell Gnus to use an external program +(e.g. fetchmail) to fetch your mail, see the info node +"Mail Source Specifiers" in the Gnus manual on how to do +it. + +@node FAQ 4 - Reading messages @subsection Reading messages @menu -* [4.1]:: When I enter a group, all read messages are gone. - How to view them again? -* [4.2]:: How to tell Gnus to show an important message every time - I enter a group, even when it's read? -* [4.3]:: How to view the headers of a message? -* [4.4]:: How to view the raw unformatted message? -* [4.5]:: How can I change the headers Gnus displays by default at the - top of the article buffer? -* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? -* [4.7]:: Can I use some other browser than w3 to render my HTML-mails? -* [4.8]:: Is there anything I can do to make poorly formatted mails - more readable? -* [4.9]:: Is there a way to automatically ignore posts by specific authors - or with specific words in the subject? And can I highlight more - interesting ones in some way? -* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set - other variables specific for some groups? -* [4.11]:: Can I highlight messages written by me and follow-ups to those? -* [4.12]:: The number of total messages in a group which Gnus displays in - group buffer is by far to high, especially in mail groups. - Is this a bug? -* [4.13]:: I don't like the layout of summary and article buffer, - how to change it? Perhaps even a three pane display? -* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? -* [4.15]:: How to split incoming mails in several groups? +* [4.1]:: When I enter a group, all read messages are gone. How to + view them again? +* [4.2]:: How to tell Gnus to show an important message every time I + enter a group, even when it's read? +* [4.3]:: How to view the headers of a message? +* [4.4]:: How to view the raw unformatted message? +* [4.5]:: How can I change the headers Gnus displays by default at + the top of the article buffer? +* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the + text part if it's available. How to do it? +* [4.7]:: Can I use some other browser than w3 to render my + HTML-mails? +* [4.8]:: Is there anything I can do to make poorly formatted mails + more readable? +* [4.9]:: Is there a way to automatically ignore posts by specific + authors or with specific words in the subject? And can I highlight + more interesting ones in some way? +* [4.10]:: How can I disable threading in some (e.g. mail-) groups, + or set other variables specific for some groups? +* [4.11]:: Can I highlight messages written by me and follow-ups to + those? +* [4.12]:: The number of total messages in a group which Gnus + displays in group buffer is by far to high, especially in mail + groups. Is this a bug? +* [4.13]:: I don't like the layout of summary and article buffer, how + to change it? Perhaps even a three pane display? +* [4.14]:: I don't like the way the Summary buffer looks, how to + tweak it? +* [4.15]:: How to split incoming mails in several groups? @end menu -@ifnottex -@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.1: +@node [4.1] +@subsubheading Question 4.1 - When I enter a group, all read messages are gone. How to view them again? - +When I enter a group, all read messages are gone. How to view them again? -Answer: +@subsubheading Answer - If you enter the group by saying - @samp{RET} - in group buffer with point over the group, only unread and ticked messages are loaded. Say - @samp{C-u RET} - instead to load all available messages. If you want only the e.g. 300 newest say - @samp{C-u 300 RET} - +If you enter the group by saying +@samp{RET} +in group buffer with point over the group, only unread and ticked messages are loaded. Say +@samp{C-u RET} +instead to load all available messages. If you want only the e.g. 300 newest say +@samp{C-u 300 RET} - Loading only unread messages can be annoying if you have threaded view enabled, say - +Loading only unread messages can be annoying if you have threaded view enabled, say @example (setq gnus-fetch-old-headers 'some) @end example - - @noindent - in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load - all articles (Warning: Both settings enlarge the amount of data which is - fetched when you enter a group and slow down the process of entering a group). +in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load +all articles (Warning: Both settings enlarge the amount of data which is +fetched when you enter a group and slow down the process of entering a group). - If you already use Gnus 5.10, you can say - @samp{/o N} - In summary buffer to load the last N messages, this feature is not available in 5.8.8 - +If you already use Gnus 5.10, you can say +@samp{/o N} +In summary buffer to load the last N messages, this feature is not available in 5.8.8 - If you don't want all old messages, but the parent of the message you're just reading, - you can say @samp{^}, if you want to retrieve the whole thread - the message you're just reading belongs to, @samp{A T} is your friend. - -@ifnottex -@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.2: +If you don't want all old messages, but the parent of the message you're just reading, +you can say @samp{^}, if you want to retrieve the whole thread +the message you're just reading belongs to, @samp{A T} is your friend. - How to tell Gnus to show an important message every time I - enter a group, even when it's read? - +@node [4.2] +@subsubheading Question 4.2 -Answer: +How to tell Gnus to show an important message every time I +enter a group, even when it's read? - You can tick important messages. To do this hit - @samp{u} while point is in summary buffer - over the message. When you want to remove the mark, hit - either @samp{d} (this deletes the tick - mark and set's unread mark) or @samp{M c} - (which deletes all marks for the message). - -@ifnottex -@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.3: +@subsubheading Answer - How to view the headers of a message? - +You can tick important messages. To do this hit +@samp{u} while point is in summary buffer +over the message. When you want to remove the mark, hit +either @samp{d} (this deletes the tick +mark and set's unread mark) or @samp{M c} +(which deletes all marks for the message). -Answer: +@node [4.3] +@subsubheading Question 4.3 - Say @samp{t} - to show all headers, one more - @samp{t} - hides them again. - -@ifnottex -@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.4: +How to view the headers of a message? - How to view the raw unformatted message? - +@subsubheading Answer -Answer: +Say @samp{t} +to show all headers, one more +@samp{t} +hides them again. - Say - @samp{C-u g} - to show the raw message - @samp{g} - returns to normal view. - -@ifnottex -@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.5: +@node [4.4] +@subsubheading Question 4.4 - How can I change the headers Gnus displays by default at - the top of the article buffer? - +How to view the raw unformatted message? -Answer: +@subsubheading Answer + +Say +@samp{C-u g} +to show the raw message +@samp{g} +returns to normal view. + +@node [4.5] +@subsubheading Question 4.5 + +How can I change the headers Gnus displays by default at +the top of the article buffer? + +@subsubheading Answer + +The variable gnus-visible-headers controls which headers +are shown, its value is a regular expression, header lines +which match it are shown. So if you want author, subject, +date, and if the header exists, Followup-To and MUA / NUA +say this in ~/.gnus.el: - The variable gnus-visible-headers controls which headers - are shown, its value is a regular expression, header lines - which match it are shown. So if you want author, subject, - date, and if the header exists, Followup-To and MUA / NUA - say this in ~/.gnus: - @example -(setq gnus-visible-headers - "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\ -\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") +(setq gnus-visible-headers + '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To" + "^User-Agent" "^X-Newsreader" "^X-Mailer")) @end example - -@ifnottex -@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.6: +@noindent - I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? - +@node [4.6] +@subsubheading Question 4.6 -Answer: +I'd like Gnus NOT to render HTML-mails but show me the +text part if it's available. How to do it? - Say - +@subsubheading Answer + +Say @example (eval-after-load "mm-decode" @@ -978,240 +889,206 @@ Answer: (add-to-list 'mm-discouraged-alternatives "text/html") (add-to-list 'mm-discouraged-alternatives "text/richtext"))) @end example - @noindent - in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add - + +in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add @example (setq mm-automatic-display (remove "text/html" mm-automatic-display)) @end example - @noindent - too. - -@ifnottex -@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.7: - Can I use some other browser than w3 to render my HTML-mails? - +too. -Answer: +@node [4.7] +@subsubheading Question 4.7 - Only if you use Gnus 5.10 or younger. In this case you've got the - choice between w3, w3m, links, lynx and html2text, which - one is used can be specified in the variable - mm-text-html-renderer, so if you want links to render your - mail say - +Can I use some other browser than w3 to render my HTML-mails? + +@subsubheading Answer + +Only if you use Gnus 5.10 or younger. In this case you've got the +choice between w3, w3m, links, lynx and html2text, which +one is used can be specified in the variable +mm-text-html-renderer, so if you want links to render your +mail say @example (setq mm-text-html-renderer 'links) @end example - -@ifnottex -@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.8: +@noindent - Is there anything I can do to make poorly formatted mails - more readable? - +@node [4.8] +@subsubheading Question 4.8 -Answer: +Is there anything I can do to make poorly formatted mails +more readable? - Gnus offers you several functions to "wash" incoming mail, - you can find them if you browse through the menu, item Article->Washing. The most - interesting ones are probably "Wrap long lines" ( - @samp{W w} - ), "Decode ROT13" ( - @samp{W r} - ) and "Outlook Deuglify" which repairs the dumb quoting used - by many users of Microsoft products ( - @samp{W Y f} gives you full deuglify. - See @samp{W Y C-h} or - have a look at the menus for other deuglifications). - Outlook deuglify is only available since Gnus 5.10. - -@ifnottex -@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.9: +@subsubheading Answer - Is there a way to automatically ignore posts by specific - authors or with specific words in the subject? And can I - highlight more interesting ones in some way? - +Gnus offers you several functions to "wash" incoming mail, you can +find them if you browse through the menu, item +Article->Washing. The most interesting ones are probably "Wrap +long lines" (@samp{W w}), "Decode ROT13" +(@samp{W r}) and "Outlook Deuglify" which repairs +the dumb quoting used by many users of Microsoft products +(@samp{W Y f} gives you full deuglify. +See @samp{W Y C-h} or have a look at the menus for +other deuglifications). Outlook deuglify is only available since +Gnus 5.10. -Answer: +@node [4.9] +@subsubheading Question 4.9 - You want Scoring. Scoring means, that you define rules - which assign each message an integer value. Depending on - the value the message is highlighted in summary buffer (if - it's high, say +2000) or automatically marked read (if the - value is low, say -800) or some other action happens. - +Is there a way to automatically ignore posts by specific +authors or with specific words in the subject? And can I +highlight more interesting ones in some way? - There are basically three ways of setting up rules which assign - the scoring-value to messages. The first and easiest way is to set - up rules based on the article you are just reading. Say you're - reading a message by a guy who always writes nonsense and you want - to ignore his messages in the future. Hit - @samp{L}, to set up a rule which lowers the score. - Now Gnus asks you which the criteria for lowering the Score shall - be. Hit @samp{?} twice to see all possibilities, - we want @samp{a} which means the author (the from - header). Now Gnus wants to know which kind of matching we want. - Hit either @samp{e} for an exact match or - @samp{s} for substring-match and delete afterwards - everything but the name to score down all authors with the given - name no matter which email address is used. Now you need to tell - Gnus when to apply the rule and how long it should last, hit e.g. - @samp{p} to apply the rule now and let it last - forever. If you want to raise the score instead of lowering it say - @samp{I} instead of @samp{L}. - +@subsubheading Answer - You can also set up rules by hand. To do this say @samp{V - f} in summary buffer. Then you are asked for the name - of the score file, it's name.of.group.SCORE for rules valid in - only one group or all.Score for rules valid in all groups. See the - Gnus manual for the exact syntax, basically it's one big list - whose elements are lists again. the first element of those lists - is the header to score on, then one more list with what to match, - which score to assign, when to expire the rule and how to do the - matching. If you find me very interesting, you could e.g. add the - following to your all.Score: - +You want Scoring. Scoring means, that you define rules +which assign each message an integer value. Depending on +the value the message is highlighted in summary buffer (if +it's high, say +2000) or automatically marked read (if the +value is low, say -800) or some other action happens. + +There are basically three ways of setting up rules which assign +the scoring-value to messages. The first and easiest way is to set +up rules based on the article you are just reading. Say you're +reading a message by a guy who always writes nonsense and you want +to ignore his messages in the future. Hit +@samp{L}, to set up a rule which lowers the score. +Now Gnus asks you which the criteria for lowering the Score shall +be. Hit @samp{?} twice to see all possibilities, +we want @samp{a} which means the author (the from +header). Now Gnus wants to know which kind of matching we want. +Hit either @samp{e} for an exact match or +@samp{s} for substring-match and delete afterwards +everything but the name to score down all authors with the given +name no matter which email address is used. Now you need to tell +Gnus when to apply the rule and how long it should last, hit e.g. +@samp{p} to apply the rule now and let it last +forever. If you want to raise the score instead of lowering it say +@samp{I} instead of @samp{L}. + +You can also set up rules by hand. To do this say @samp{V +f} in summary buffer. Then you are asked for the name +of the score file, it's name.of.group.SCORE for rules valid in +only one group or all.Score for rules valid in all groups. See the +Gnus manual for the exact syntax, basically it's one big list +whose elements are lists again. the first element of those lists +is the header to score on, then one more list with what to match, +which score to assign, when to expire the rule and how to do the +matching. If you find me very interesting, you could e.g. add the +following to your all.Score: @example (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) @end example - @noindent - This would add 999 to the score of messages written by me - and 500 to the score of messages which are a (possibly - indirect) answer to a message written by me. Of course - nobody with a sane mind would do this :-) - - The third alternative is adaptive scoring. This means Gnus - watches you and tries to find out what you find - interesting and what annoying and sets up rules - which reflect this. Adaptive scoring can be a huge help - when reading high traffic groups. If you want to activate - adaptive scoring say - +This would add 999 to the score of messages written by me +and 500 to the score of messages which are a (possibly +indirect) answer to a message written by me. Of course +nobody with a sane mind would do this :-) + +The third alternative is adaptive scoring. This means Gnus +watches you and tries to find out what you find +interesting and what annoying and sets up rules +which reflect this. Adaptive scoring can be a huge help +when reading high traffic groups. If you want to activate +adaptive scoring say @example (setq gnus-use-adaptive-scoring t) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.10: - How can I disable threading in some (e.g. mail-) groups, or - set other variables specific for some groups? - +in ~/.gnus.el. -Answer: +@node [4.10] +@subsubheading Question 4.10 - While in group buffer move point over the group and hit - @samp{G c}, this opens a buffer where you - can set options for the group. At the bottom of the buffer - you'll find an item that allows you to set variables - locally for the group. To disable threading enter - gnus-show-threads as name of variable and nil as - value. Hit button done at the top of the buffer when - you're ready. - -@ifnottex -@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.11: +How can I disable threading in some (e.g. mail-) groups, or +set other variables specific for some groups? - Can I highlight messages written by me and follow-ups to - those? - +@subsubheading Answer -Answer: +While in group buffer move point over the group and hit +@samp{G c}, this opens a buffer where you +can set options for the group. At the bottom of the buffer +you'll find an item that allows you to set variables +locally for the group. To disable threading enter +gnus-show-threads as name of variable and nil as +value. Hit button done at the top of the buffer when +you're ready. - Stop those "Can I ..." questions, the answer is always yes - in Gnus Country :-). It's a three step process: First we - make faces (specifications of how summary-line shall look - like) for those postings, then we'll give them some - special score and finally we'll tell Gnus to use the new - faces. You can find detailed instructions on how to do it on - @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org} - -@ifnottex -@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.12: +@node [4.11] +@subsubheading Question 4.11 - The number of total messages in a group which Gnus - displays in group buffer is by far to high, especially in - mail groups. Is this a bug? - +Can I highlight messages written by me and follow-ups to +those? -Answer: +@subsubheading Answer - No, that's a matter of design of Gnus, fixing this would - mean reimplementation of major parts of Gnus' - back ends. Gnus thinks "highest-article-number - - lowest-article-number = total-number-of-articles". This - works OK for Usenet groups, but if you delete and move - many messages in mail groups, this fails. To cure the - symptom, enter the group via @samp{C-u RET} - (this makes Gnus get all messages), then - hit @samp{M P b} to mark all messages and - then say @samp{B m name.of.group} to move - all messages to the group they have been in before, they - get new message numbers in this process and the count is - right again (until you delete and move your mail to other - groups again). - -@ifnottex -@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.13: +Stop those "Can I ..." questions, the answer is always yes +in Gnus Country :-). It's a three step process: First we +make faces (specifications of how summary-line shall look +like) for those postings, then we'll give them some +special score and finally we'll tell Gnus to use the new +faces. You can find detailed instructions on how to do it on +@uref{http://my.gnus.org/node/view/224, my.gnus.org} - I don't like the layout of summary and article buffer, how - to change it? Perhaps even a three pane display? - +@node [4.12] +@subsubheading Question 4.12 -Answer: +The number of total messages in a group which Gnus +displays in group buffer is by far to high, especially in +mail groups. Is this a bug? - You can control the windows configuration by calling the - function gnus-add-configuration. The syntax is a bit - complicated but explained very well in the manual node - "Window Layout". Some popular examples: - +@subsubheading Answer - Instead 25% summary 75% article buffer 35% summary and 65% - article (the 1.0 for article means "take the remaining - space"): - +No, that's a matter of design of Gnus, fixing this would +mean reimplementation of major parts of Gnus' +back ends. Gnus thinks "highest-article-number - +lowest-article-number = total-number-of-articles". This +works OK for Usenet groups, but if you delete and move +many messages in mail groups, this fails. To cure the +symptom, enter the group via @samp{C-u RET} +(this makes Gnus get all messages), then +hit @samp{M P b} to mark all messages and +then say @samp{B m name.of.group} to move +all messages to the group they have been in before, they +get new message numbers in this process and the count is +right again (until you delete and move your mail to other +groups again). + +@node [4.13] +@subsubheading Question 4.13 + +I don't like the layout of summary and article buffer, how +to change it? Perhaps even a three pane display? + +@subsubheading Answer + +You can control the windows configuration by calling the +function gnus-add-configuration. The syntax is a bit +complicated but explained very well in the manual node +"Window Layout". Some popular examples: + +Instead 25% summary 75% article buffer 35% summary and 65% +article (the 1.0 for article means "take the remaining +space"): @example -(gnus-add-configuration - '(article (vertical 1.0 - (summary .35 point) - (article 1.0)))) +(gnus-add-configuration + '(article (vertical 1.0 (summary .35 point) (article 1.0)))) @end example - +@noindent - A three pane layout, Group buffer on the left, summary - buffer top-right, article buffer bottom-right: - +A three pane layout, Group buffer on the left, summary +buffer top-right, article buffer bottom-right: @example (gnus-add-configuration @@ -1228,46 +1105,40 @@ Answer: (vertical 25 (group 1.0)) (vertical 1.0 - (summary 1.0 point))))) + (summary 1.0 point))))) @end example - -@ifnottex -@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.14: +@noindent - I don't like the way the Summary buffer looks, how to tweak it? - +@node [4.14] +@subsubheading Question 4.14 -Answer: +I don't like the way the Summary buffer looks, how to tweak it? - You've got to play around with the variable - gnus-summary-line-format. It's value is a string of - symbols which stand for things like author, date, subject - etc. A list of the available specifiers can be found in the - manual node "Summary Buffer Lines" and the often forgotten - node "Formatting Variables" and it's sub-nodes. There - you'll find useful things like positioning the cursor and - tabulators which allow you a summary in table form, but - sadly hard tabulators are broken in 5.8.8. - +@subsubheading Answer - Since 5.10, Gnus offers you some very nice new specifiers, - e.g. %B which draws a thread-tree and %&user-date which - gives you a date where the details are dependent of the - articles age. Here's an example which uses both: - +You've got to play around with the variable +gnus-summary-line-format. It's value is a string of +symbols which stand for things like author, date, subject +etc. A list of the available specifiers can be found in the +manual node "Summary Buffer Lines" and the often forgotten +node "Formatting Variables" and it's sub-nodes. There +you'll find useful things like positioning the cursor and +tabulators which allow you a summary in table form, but +sadly hard tabulators are broken in 5.8.8. + +Since 5.10, Gnus offers you some very nice new specifiers, +e.g. %B which draws a thread-tree and %&user-date which +gives you a date where the details are dependent of the +articles age. Here's an example which uses both: @example -(setq gnus-summary-line-format - ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") +(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") @end example - @noindent - resulting in: - -@smallexample +resulting in: + +@example :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 @@ -1280,54 +1151,48 @@ Answer: :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 :O \-> ... | 18 |Kai Grossjohann | 0:35 :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 -@end smallexample - -@ifnottex -@node [4.15], , [4.14], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.15: +@end example +@noindent - How to split incoming mails in several groups? - +@node [4.15] +@subsubheading Question 4.15 -Answer: +How to split incoming mails in several groups? - Gnus offers two possibilities for splitting mail, the easy - nnmail-split-methods and the more powerful Fancy Mail - Splitting. I'll only talk about the first one, refer to - the manual, node "Fancy Mail Splitting" for the latter. - +@subsubheading Answer - The value of nnmail-split-methods is a list, each element - is a list which stands for a splitting rule. Each rule has - the form "group where matching articles should go to", - "regular expression which has to be matched", the first - rule which matches wins. The last rule must always be a - general rule (regular expression .*) which denotes where - articles should go which don't match any other rule. If - the folder doesn't exist yet, it will be created as soon - as an article lands there. By default the mail will be - send to all groups whose rules match. If you - don't want that (you probably don't want), say - +Gnus offers two possibilities for splitting mail, the easy +nnmail-split-methods and the more powerful Fancy Mail +Splitting. I'll only talk about the first one, refer to +the manual, node "Fancy Mail Splitting" for the latter. + +The value of nnmail-split-methods is a list, each element +is a list which stands for a splitting rule. Each rule has +the form "group where matching articles should go to", +"regular expression which has to be matched", the first +rule which matches wins. The last rule must always be a +general rule (regular expression .*) which denotes where +articles should go which don't match any other rule. If +the folder doesn't exist yet, it will be created as soon +as an article lands there. By default the mail will be +send to all groups whose rules match. If you +don't want that (you probably don't want), say @example (setq nnmail-crosspost nil) @end example - @noindent - in ~/.gnus. - - An example might be better than thousand words, so here's - my nnmail-split-methods. Note that I send duplicates in a - special group and that the default group is spam, since I - filter all mails out which are from some list I'm - subscribed to or which are addressed directly to me - before. Those rules kill about 80% of the Spam which - reaches me (Email addresses are changed to prevent spammers - from using them): - +in ~/.gnus.el. + +An example might be better than thousand words, so here's +my nnmail-split-methods. Note that I send duplicates in a +special group and that the default group is spam, since I +filter all mails out which are from some list I'm +subscribed to or which are addressed directly to me +before. Those rules kill about 80% of the Spam which +reaches me (Email addresses are changed to prevent spammers +from using them): @example (setq nnmail-split-methods @@ -1336,133 +1201,114 @@ Answer: ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") - ("Hamster-src" - "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") + ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") ("Tagesschau" "^From: tagesschau $") ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") - ("EK" - "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") - ("Spam" - "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") - ("Spam" - "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") - ("Spam" - "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") + ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") + ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") + ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") + ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") - ("Spam" - "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") - ("Spam" - "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") + ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") + ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") ("Spam" "^Received: from link2buy.com") ("Spam" "^CC: .*azzrael@@t-online.bla") ("Spam" "^X-Mailer-Version: 1.50 BETA") ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") - ("Inbox" - "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") + ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") ("Spam" ""))) @end example - +@noindent -@ifnottex -@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions -@end ifnottex +@node FAQ 5 - Composing messages @subsection Composing messages @menu -* [5.1]:: What are the basic commands I need to know for sending mail and - postings? -* [5.2]:: How to enable automatic word-wrap when composing messages? -* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? -* [5.4]:: Can I set things like From, Signature etc group based on the - group I post too? -* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? -* [5.6]:: Can I set the dictionary based on the group I'm posting to? -* [5.7]:: Is there some kind of address-book, so I needn't remember all - those email addresses? -* [5.8]:: Sometimes I see little images at the top of article buffer. - What's that and how can I send one with my postings, too? -* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. - Can Gnus warn me, when I'm replying by mail in newsgroups? -* [5.10]:: How to tell Gnus not to generate a sender header? -* [5.11]:: I want Gnus to locally store copies of my send mail and news, - how to do it? -* [5.12]:: People tell me my Message-IDs are not correct, - why aren't they and how to fix it? +* [5.1]:: What are the basic commands I need to know for sending + mail and postings? +* [5.2]:: How to enable automatic word-wrap when composing messages? +* [5.3]:: How to set stuff like From, Organization, Reply-To, + signature...? +* [5.4]:: Can I set things like From, Signature etc group based on + the group I post too? +* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly + spell-checking? +* [5.6]:: Can I set the dictionary based on the group I'm posting + to? +* [5.7]:: Is there some kind of address-book, so I needn't remember + all those email addresses? +* [5.8]:: Sometimes I see little images at the top of article + buffer. What's that and how can I send one with my postings, too? +* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. + Can Gnus warn me, when I'm replying by mail in newsgroups? +* [5.10]:: How to tell Gnus not to generate a sender header? +* [5.11]:: I want Gnus to locally store copies of my send mail and + news, how to do it? +* [5.12]:: People tell me my Message-IDs are not correct, why aren't + they and how to fix it? @end menu -@ifnottex -@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.1: +@node [5.1] +@subsubheading Question 5.1 - What are the basic commands I need to know for sending mail and postings? - +What are the basic commands I need to know for sending mail and postings? -Answer: +@subsubheading Answer - To start composing a new mail hit @samp{m} - either in Group or Summary buffer, for a posting, it's - either @samp{a} in Group buffer and - filling the Newsgroups header manually - or @samp{a} in the Summary buffer of the - group where the posting shall be send to. Replying by mail - is - @samp{r} if you don't want to cite the - author, or import the cited text manually and - @samp{R} to cite the text of the original - message. For a follow up to a newsgroup, it's - @samp{f} and @samp{F} - (analog to @samp{r} and - @samp{R}). - +To start composing a new mail hit @samp{m} +either in Group or Summary buffer, for a posting, it's +either @samp{a} in Group buffer and +filling the Newsgroups header manually +or @samp{a} in the Summary buffer of the +group where the posting shall be send to. Replying by mail +is +@samp{r} if you don't want to cite the +author, or import the cited text manually and +@samp{R} to cite the text of the original +message. For a follow up to a newsgroup, it's +@samp{f} and @samp{F} +(analogously to @samp{r} and +@samp{R}). - Enter new headers above the line saying "--text follows - this line--", enter the text below the line. When ready - hit @samp{C-c C-c}, to send the message, - if you want to finish it later hit @samp{C-c - C-d} to save it in the drafts group, where you - can start editing it again by saying @samp{D - e}. - -@ifnottex -@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.2: +Enter new headers above the line saying "--text follows +this line--", enter the text below the line. When ready +hit @samp{C-c C-c}, to send the message, +if you want to finish it later hit @samp{C-c +C-d} to save it in the drafts group, where you +can start editing it again by saying @samp{D +e}. - How to enable automatic word-wrap when composing messages? - +@node [5.2] +@subsubheading Question 5.2 -Answer: +How to enable automatic word-wrap when composing messages? - Say - +@subsubheading Answer + +Say @example (add-hook 'message-mode-hook - (lambda () - (setq fill-column 72) - (turn-on-auto-fill))) + (lambda () + (setq fill-column 72) + (turn-on-auto-fill))) @end example - @noindent - in ~/.gnus. You can reformat a paragraph by hitting - @samp{M-q} (as usual) - -@ifnottex -@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.3: - How to set stuff like From, Organization, Reply-To, signature...? - +in ~/.gnus.el. You can reformat a paragraph by hitting +@samp{M-q} (as usual) -Answer: +@node [5.3] +@subsubheading Question 5.3 - There are other ways, but you should use posting styles - for this. (See below why). - This example should make the syntax clear: - +How to set stuff like From, Organization, Reply-To, signature...? + +@subsubheading Answer + +There are other ways, but you should use posting styles +for this. (See below why). +This example should make the syntax clear: @example (setq gnus-posting-styles @@ -1474,146 +1320,121 @@ Answer: ("X-SampleHeader" "foobar") (eval (setq some-variable "Foo bar"))))) @end example - @noindent - The ".*" means that this settings are the default ones - (see below), valid values for the first element of the - following lists are signature, signature-file, - organization, address, name or body. The attribute name - can also be a string. In that case, this will be used as - a header name, and the value will be inserted in the - headers of the article; if the value is `nil', the header - name will be removed. You can also say (eval (foo bar)), - then the function foo will be evaluated with argument bar - and the result will be thrown away. - -@ifnottex -@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.4: - Can I set things like From, Signature etc group based on the group I post too? - +The ".*" means that this settings are the default ones +(see below), valid values for the first element of the +following lists are signature, signature-file, +organization, address, name or body. The attribute name +can also be a string. In that case, this will be used as +a header name, and the value will be inserted in the +headers of the article; if the value is `nil', the header +name will be removed. You can also say (eval (foo bar)), +then the function foo will be evaluated with argument bar +and the result will be thrown away. -Answer: +@node [5.4] +@subsubheading Question 5.4 - That's the strength of posting styles. Before, we used ".*" - to set the default for all groups. You can use a regexp - like "^gmane" and the following settings are only applied - to postings you send to the gmane hierarchy, use - ".*binaries" instead and they will be applied to postings - send to groups containing the string binaries in their - name etc. - +Can I set things like From, Signature etc group based on the group I post too? - You can instead of specifying a regexp specify a function - which is evaluated, only if it returns true, the - corresponding settings take effect. Two interesting - candidates for this are message-news-p which returns t if - the current Group is a newsgroup and the corresponding - message-mail-p. - +@subsubheading Answer - Note that all forms that match are applied, that means in - the example below, when I post to - gmane.mail.spam.spamassassin.general, the settings under - ".*" are applied and the settings under message-news-p and - those under "^gmane" and those under - "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because - of this put general settings at the top and specific ones - at the bottom. - +That's the strength of posting styles. Before, we used ".*" +to set the default for all groups. You can use a regexp +like "^gmane" and the following settings are only applied +to postings you send to the gmane hierarchy, use +".*binaries" instead and they will be applied to postings +send to groups containing the string binaries in their +name etc. + +You can instead of specifying a regexp specify a function +which is evaluated, only if it returns true, the +corresponding settings take effect. Two interesting +candidates for this are message-news-p which returns t if +the current Group is a newsgroup and the corresponding +message-mail-p. + +Note that all forms that match are applied, that means in +the example below, when I post to +gmane.mail.spam.spamassassin.general, the settings under +".*" are applied and the settings under message-news-p and +those under "^gmane" and those under +"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because +of this put general settings at the top and specific ones +at the bottom. @example (setq gnus-posting-styles '((".*" ;;default (name "Frank Schmitt") (organization "Hamme net, kren mer och nimmi") - (signature-file "~/.signature")) + (signature-file "~/.signature") ) ((message-news-p) ;;Usenet news? (address "mySpamTrap@@Frank-Schmitt.bla") - ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")) + ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") ) ((message-mail-p) ;;mail? - (address "usedForMails@@Frank-Schmitt.bla")) + (address "usedForMails@@Frank-Schmitt.bla") ) ("^gmane" ;;this is mail, too in fact (address "usedForMails@@Frank-Schmitt.net") - ("Reply-To" nil)) + ("Reply-To" nil) ) ("^gmane.mail.spam.spamassassin.general$" (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) - (address "Azzrael@@rz-online.de")))) + (address "Azzrael@@rz-online.de")) )) @end example - -@ifnottex -@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.5: - - Is there a spell-checker? Perhaps even on-the-fly spell-checking? - - -Answer: - -You can use ispell.el to spell-check stuff in Emacs. So the first -thing to do is to make sure that you've got either -@itemize @bullet -@item -@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell} -or -@item -@uref{http://aspell.sourceforge.net/,aspell} -@end itemize @noindent -installed and in your Path. -Then you need -@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el} -and for on-the-fly spell-checking -@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}. -Ispell.el is shipped with Gnus Emacs and available through the Emacs -package system, flyspell.el is shipped with Emacs and part of XEmacs -text-modes package which is available through the package system, so -there should be no need to install them manually. - +@node [5.5] +@subsubheading Question 5.5 - Ispell.el assumes you use ispell, if you choose aspell say - +Is there a spell-checker? Perhaps even on-the-fly spell-checking? + +@subsubheading Answer + +You can use ispell.el to spell-check stuff in Emacs. So the +first thing to do is to make sure that you've got either +@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell} +or @uref{http://aspell.sourceforge.net/, aspell} +installed and in your Path. Then you need +@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el} +and for on-the-fly spell-checking +@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. +Ispell.el is shipped with Emacs and available through the XEmacs package system, +flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is +available through the package system, so there should be no need to install them +manually. + +Ispell.el assumes you use ispell, if you choose aspell say @example (setq ispell-program-name "aspell") @end example - - @noindent - in your Emacs configuration file. +in your Emacs configuration file. - If you want your outgoing messages to be spell-checked, say - +If you want your outgoing messages to be spell-checked, say @example (add-hook 'message-send-hook 'ispell-message) @end example - @noindent - In your ~/.gnus, if you prefer on-the-fly spell-checking say - + +In your ~/.gnus.el, if you prefer on-the-fly spell-checking say @example (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) @end example - -@ifnottex -@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.6: +@noindent - Can I set the dictionary based on the group I'm posting to? - +@node [5.6] +@subsubheading Question 5.6 -Answer: +Can I set the dictionary based on the group I'm posting to? - Yes, say something like - +@subsubheading Answer + +Yes, say something like @example (add-hook 'gnus-select-group-hook @@ -1625,55 +1446,47 @@ Answer: (t (ispell-change-dictionary "english"))))) @end example - - @noindent - in ~/.gnus. Change "^de\\." and "deutsch8" to something - that suits your needs. -@ifnottex -@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.7: +in ~/.gnus.el. Change "^de\\." and "deutsch8" to something +that suits your needs. - Is there some kind of address-book, so I needn't remember - all those email addresses? - +@node [5.7] +@subsubheading Question 5.7 -Answer: +Is there some kind of address-book, so I needn't remember +all those email addresses? - There's an very basic solution for this, mail aliases. - You can store your mail addresses in a ~/.mailrc file using a simple - alias syntax: - +@subsubheading Answer + +There's an very basic solution for this, mail aliases. +You can store your mail addresses in a ~/.mailrc file using a simple +alias syntax: @example alias al "Al " @end example - @noindent - Then typing your alias (followed by a space or punctuation - character) on a To: or Cc: line in the message buffer will - cause Gnus to insert the full address for you. See the - node "Mail Aliases" in Message (not Gnus) manual for - details. - - However, what you really want is the Insidious Big Brother - Database bbdb. Get it through the XEmacs package system or from - @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. - Now place the following in ~/.gnus, to activate bbdb for Gnus: - +Then typing your alias (followed by a space or punctuation +character) on a To: or Cc: line in the message buffer will +cause Gnus to insert the full address for you. See the +node "Mail Aliases" in Message (not Gnus) manual for +details. + +However, what you really want is the Insidious Big Brother +Database bbdb. Get it through the XEmacs package system or from +@uref{http://bbdb.sourceforge.net/, bbdb's homepage}. +Now place the following in ~/.gnus.el, to activate bbdb for Gnus: @example (require 'bbdb) (bbdb-initialize 'gnus 'message) @end example - @noindent - Now you probably want some general bbdb configuration, - place them in ~/.emacs: - + +Now you probably want some general bbdb configuration, +place them in ~/.emacs: @example (require 'bbdb) @@ -1689,56 +1502,50 @@ alias al "Al " ;;No popup-buffers (setq bbdb-use-pop-up nil) @end example - @noindent - Now you should be ready to go. Say @samp{M-x bbdb RET - RET} to open a bbdb buffer showing all - entries. Say @samp{c} to create a new - entry, @samp{b} to search your BBDB and - @samp{C-o} to add a new field to an - entry. If you want to add a sender to the BBDB you can - also just hit `:' on the posting in the summary buffer and - you are done. When you now compose a new mail, - hit @samp{TAB} to cycle through know - recipients. - -@ifnottex -@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.8: - Sometimes I see little images at the top of article - buffer. What's that and how can I send one with my - postings, too? - +Now you should be ready to go. Say @samp{M-x bbdb RET +RET} to open a bbdb buffer showing all +entries. Say @samp{c} to create a new +entry, @samp{b} to search your BBDB and +@samp{C-o} to add a new field to an +entry. If you want to add a sender to the BBDB you can +also just hit `:' on the posting in the summary buffer and +you are done. When you now compose a new mail, +hit @samp{TAB} to cycle through know +recipients. -Answer: +@node [5.8] +@subsubheading Question 5.8 - Those images are called X-Faces. They are 48*48 pixel b/w - pictures, encoded in a header line. If you want to include - one in your posts, you've got to convert some image to a - X-Face. So fire up some image manipulation program (say - Gimp), open the image you want to include, cut out the - relevant part, reduce color depth to 1 bit, resize to - 48*48 and save as bitmap. Now you should get the compface - package from - @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. - and create the actual X-face by saying - +Sometimes I see little images at the top of article +buffer. What's that and how can I send one with my +postings, too? + +@subsubheading Answer + +Those images are called X-Faces. They are 48*48 pixel b/w +pictures, encoded in a header line. If you want to include +one in your posts, you've got to convert some image to a +X-Face. So fire up some image manipulation program (say +Gimp), open the image you want to include, cut out the +relevant part, reduce color depth to 1 bit, resize to +48*48 and save as bitmap. Now you should get the compface +package from +@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}. +and create the actual X-face by saying @example -cat file.xbm | xbm2ikon |compface > file.face -cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted +cat file.xbm | xbm2ikon | compface > file.face +cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted @end example - @noindent -If you can't use compface, there's an online X-face converter at@* -@uref{http://www.dairiki.org/xface/}. If you use MS Windows, you -could also use the WinFace program from -@uref{http://www.xs4all.nl/~walterln/winface/}. -Now you only have to tell Gnus to include the X-face in your postings -by saying +If you can't use compface, there's an online X-face converter at +@uref{http://www.dairiki.org/xface/}. +If you use MS Windows, you could also use the WinFace program from +@uref{http://www.xs4all.nl/~walterln/winface/}. +Now you only have to tell Gnus to include the X-face in your postings by saying @example (setq message-default-headers @@ -1747,33 +1554,28 @@ by saying (insert-file-contents "~/.xemacs/xface") (buffer-string))) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.9: - Sometimes I accidentally hit r instead of f in - newsgroups. Can Gnus warn me, when I'm replying by mail in - newsgroups? - +in ~/.gnus.el. -Answer: +@node [5.9] +@subsubheading Question 5.9 - Put this in ~/.gnus: - +Sometimes I accidentally hit r instead of f in +newsgroups. Can Gnus warn me, when I'm replying by mail in +newsgroups? + +@subsubheading Answer + +Put this in ~/.gnus.el: @example (setq gnus-confirm-mail-reply-to-news t) @end example - @noindent - if you already use Gnus 5.10, if you still use 5.8.8 or - 5.9 try this instead: - + +if you already use Gnus 5.10, if you still use 5.8.8 or +5.9 try this instead: @example (eval-after-load "gnus-msg" @@ -1785,44 +1587,37 @@ Answer: (y-or-n-p "Really reply by mail to article author? ")) ad-do-it)))) @end example - -@ifnottex -@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.10: +@noindent - How to tell Gnus not to generate a sender header? - +@node [5.10] +@subsubheading Question 5.10 -Answer: +How to tell Gnus not to generate a sender header? - Since 5.10 Gnus doesn't generate a sender header by - default. For older Gnus' try this in ~/.gnus: - +@subsubheading Answer + +Since 5.10 Gnus doesn't generate a sender header by +default. For older Gnus' try this in ~/.gnus.el: @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - - -@ifnottex -@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.11: +@noindent - I want gnus to locally store copies of my send mail and - news, how to do it? - +@node [5.11] +@subsubheading Question 5.11 -Answer: +I want Gnus to locally store copies of my send mail and +news, how to do it? - You must set the variable gnus-message-archive-group to do - this. You can set it to a string giving the name of the - group where the copies shall go or like in the example - below use a function which is evaluated and which returns - the group to use. - +@subsubheading Answer + +You must set the variable gnus-message-archive-group to do +this. You can set it to a string giving the name of the +group where the copies shall go or like in the example +below use a function which is evaluated and which returns +the group to use. @example (setq gnus-message-archive-group @@ -1830,31 +1625,31 @@ Answer: "nnml:Send-News" "nnml:Send-Mail"))) @end example - - -@ifnottex -@node [5.12], , [5.11], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.12: +@noindent - People tell me my Message-IDs are not correct, why - aren't they and how to fix it? - +@node [5.12] +@subsubheading Question 5.12 -Answer: +People tell me my Message-IDs are not correct, why +aren't they and how to fix it? + +@subsubheading Answer + +The message-ID is an unique identifier for messages you +send. To make it unique, Gnus need to know which machine +name to put after the "@@". If the name of the machine +where Gnus is running isn't suitable (it probably isn't +at most private machines) you can tell Gnus what to use +by saying: - The message-ID is an unique identifier for messages you - send. To make it unique, Gnus need to know which machine - name to put after the "@@". If the name of the machine - where Gnus is running isn't suitable (it probably isn't - at most private machines) you can tell Gnus what to use - by saying @example (setq message-user-fqdn "yourmachine.yourdomain.tld") @end example @noindent - in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this -instead (works for newer versions a well): + +in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this +instead (works for newer versions a well): + @example (eval-after-load "message" '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! @@ -1865,110 +1660,97 @@ instead (works for newer versions a well): "Return user's fully qualified domain name." fqdn)))) @end example +@noindent - If you have no idea what to insert for - "yourmachine.yourdomain.tld", you've got several - choices. You can either ask your provider if he allows - you to use something like - yourUserName.userfqdn.provider.net, or you can use - somethingUnique.yourdomain.tld if you own the domain - yourdomain.tld, or you can register at a service which - gives private users a FQDN for free, e.g. - @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. - (Sorry but this website is in German, if you know of an - English one offering the same, drop me a note). - +If you have no idea what to insert for +"yourmachine.yourdomain.tld", you've got several +choices. You can either ask your provider if he allows +you to use something like +yourUserName.userfqdn.provider.net, or you can use +somethingUnique.yourdomain.tld if you own the domain +yourdomain.tld, or you can register at a service which +gives private users a FQDN for free, e.g. +@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. +(Sorry but this website is in German, if you know of an +English one offering the same, drop me a note). - Finally you can tell Gnus not to generate a Message-ID - for News at all (and letting the server do the job) by saying - +Finally you can tell Gnus not to generate a Message-ID +for News at all (and letting the server do the job) by saying @example (setq message-required-news-headers (remove' Message-ID message-required-news-headers)) @end example - @noindent - you can also tell Gnus not to generate Message-IDs for mail by saying - + +you can also tell Gnus not to generate Message-IDs for mail by saying @example (setq message-required-mail-headers (remove' Message-ID message-required-mail-headers)) @end example - @noindent - , however some mail servers don't generate proper - Message-IDs, too, so test if your Mail Server behaves - correctly by sending yourself a Mail and looking at the Message-ID. - -@ifnottex -@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions -@end ifnottex +, however some mail servers don't generate proper +Message-IDs, too, so test if your Mail Server behaves +correctly by sending yourself a Mail and looking at the Message-ID. + +@node FAQ 6 - Old messages @subsection Old messages @menu -* [6.1]:: How to import my old mail into Gnus? -* [6.2]:: How to archive interesting messages? -* [6.3]:: How to search for a specific message? -* [6.4]:: How to get rid of old unwanted mail? -* [6.5]:: I want that all read messages are expired (at least in some - groups). How to do it? -* [6.6]:: I don't want expiration to delete my mails but to move them - to another group. +* [6.1]:: How to import my old mail into Gnus? +* [6.2]:: How to archive interesting messages? +* [6.3]:: How to search for a specific message? +* [6.4]:: How to get rid of old unwanted mail? +* [6.5]:: I want that all read messages are expired (at least in some + groups). How to do it? +* [6.6]:: I don't want expiration to delete my mails but to move them + to another group. @end menu -@ifnottex -@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.1: +@node [6.1] +@subsubheading Question 6.1 - How to import my old mail into Gnus? - +How to import my old mail into Gnus? -Answer: +@subsubheading Answer - The easiest way is to tell your old mail program to - export the messages in mbox format. Most Unix mailers - are able to do this, if you come from the MS Windows - world, you may find tools at - @uref{http://mbx2mbox.sourceforge.net/}. - +The easiest way is to tell your old mail program to +export the messages in mbox format. Most Unix mailers +are able to do this, if you come from the MS Windows +world, you may find tools at +@uref{http://mbx2mbox.sourceforge.net/}. - Now you've got to import this mbox file into Gnus. To do - this, create a nndoc group based on the mbox file by - saying @samp{G f /path/file.mbox RET} in - Group buffer. You now have read-only access to your - mail. If you want to import the messages to your normal - Gnus mail groups hierarchy, enter the nndoc group you've - just created by saying @samp{C-u RET} - (thus making sure all messages are retrieved), mark all - messages by saying @samp{M P b} and - either copy them to the desired group by saying - @samp{B c name.of.group RET} or send them - through nnmail-split-methods (respool them) by saying - @samp{B r}. - -@ifnottex -@node [6.2], [6.3], [6.1], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.2: +Now you've got to import this mbox file into Gnus. To do +this, create a nndoc group based on the mbox file by +saying @samp{G f /path/file.mbox RET} in +Group buffer. You now have read-only access to your +mail. If you want to import the messages to your normal +Gnus mail groups hierarchy, enter the nndoc group you've +just created by saying @samp{C-u RET} +(thus making sure all messages are retrieved), mark all +messages by saying @samp{M P b} and +either copy them to the desired group by saying +@samp{B c name.of.group RET} or send them +through nnmail-split-methods (respool them) by saying +@samp{B r}. - How to archive interesting messages? - +@node [6.2] +@subsubheading Question 6.2 -Answer: +How to archive interesting messages? - If you stumble across an interesting message, say in - gnu.emacs.gnus and want to archive it there are several - solutions. The first and easiest is to save it to a file - by saying @samp{O f}. However, wouldn't - it be much more convenient to have more direct access to - the archived message from Gnus? If you say yes, put this - snippet by Frank Haun in - ~/.gnus: - +@subsubheading Answer + +If you stumble across an interesting message, say in +gnu.emacs.gnus and want to archive it there are several +solutions. The first and easiest is to save it to a file +by saying @samp{O f}. However, wouldn't +it be much more convenient to have more direct access to +the archived message from Gnus? If you say yes, put this +snippet by Frank Haun in +~/.gnus.el: @example (defun my-archive-article (&optional n) @@ -1987,624 +1769,531 @@ more then one article." (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) (gnus-summary-copy-article n archive-name))) @end example - @noindent - You can now say @samp{M-x - my-archive-article} in summary buffer to - archive the article under the cursor in a nnml - group. (Change nnml to your preferred back end) - - Of course you can also make sure the cache is enabled by saying - +You can now say @samp{M-x +my-archive-article} in summary buffer to +archive the article under the cursor in a nnml +group. (Change nnml to your preferred back end) + +Of course you can also make sure the cache is enabled by saying @example (setq gnus-use-cache t) @end example - @noindent - then you only have to set either the tick or the dormant - mark for articles you want to keep, setting the read - mark will remove them from cache. - -@ifnottex -@node [6.3], [6.4], [6.2], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.3: - How to search for a specific message? - +then you only have to set either the tick or the dormant +mark for articles you want to keep, setting the read +mark will remove them from cache. -Answer: +@node [6.3] +@subsubheading Question 6.3 - There are several ways for this, too. For a posting from - a Usenet group the easiest solution is probably to ask - @uref{http://groups.google.com,groups.google.com}, - if you found the posting there, tell Google to display - the raw message, look for the message-id, and say - @samp{M-^ the@@message.id RET} in a - summary buffer. - Since Gnus 5.10 there's also a Gnus interface for - groups.google.com which you can call with - @samp{G W}) in group buffer. - +How to search for a specific message? - Another idea which works for both mail and news groups - is to enter the group where the message you are - searching is and use the standard Emacs search - @samp{C-s}, it's smart enough to look at - articles in collapsed threads, too. If you want to - search bodies, too try @samp{M-s} - instead. Further on there are the - gnus-summary-limit-to-foo functions, which can help you, - too. - +@subsubheading Answer - Of course you can also use grep to search through your - local mail, but this is both slow for big archives and - inconvenient since you are not displaying the found mail - in Gnus. Here comes nnir into action. Nnir is a front end - to search engines like swish-e or swish++ and - others. You index your mail with one of those search - engines and with the help of nnir you can search trough - the indexed mail and generate a temporary group with all - messages which met your search criteria. If this sound - cool to you get nnir.el from the contrib directory of the Gnus - distribution or - @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain} - Instructions on how to use it are at the top of the file. - -@ifnottex -@node [6.4], [6.5], [6.3], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.4: +There are several ways for this, too. For a posting from +a Usenet group the easiest solution is probably to ask +@uref{http://groups.google.com, groups.google.com}, +if you found the posting there, tell Google to display +the raw message, look for the message-id, and say +@samp{M-^ the@@message.id RET} in a +summary buffer. +Since Gnus 5.10 there's also a Gnus interface for +groups.google.com which you can call with +@samp{G W}) in group buffer. - How to get rid of old unwanted mail? - +Another idea which works for both mail and news groups +is to enter the group where the message you are +searching is and use the standard Emacs search +@samp{C-s}, it's smart enough to look at +articles in collapsed threads, too. If you want to +search bodies, too try @samp{M-s} +instead. Further on there are the +gnus-summary-limit-to-foo functions, which can help you, +too. -Answer: +Of course you can also use grep to search through your +local mail, but this is both slow for big archives and +inconvenient since you are not displaying the found mail +in Gnus. Here comes nnir into action. Nnir is a front end +to search engines like swish-e or swish++ and +others. You index your mail with one of those search +engines and with the help of nnir you can search trough +the indexed mail and generate a temporary group with all +messages which met your search criteria. If this sound +cool to you get nnir.el from +@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} +or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. +Instructions on how to use it are at the top of the file. - You can of course just mark the mail you don't need - anymore by saying @samp{#} with point - over the mail and then say @samp{B DEL} - to get rid of them forever. You could also instead of - actually deleting them, send them to a junk-group by - saying @samp{B m nnml:trash-bin} which - you clear from time to time, but both are not the intended - way in Gnus. - +@node [6.4] +@subsubheading Question 6.4 - In Gnus, we let mail expire like news expires on a news - server. That means you tell Gnus the message is - expirable (you tell Gnus "I don't need this mail - anymore") by saying @samp{E} with point - over the mail in summary buffer. Now when you leave the - group, Gnus looks at all messages which you marked as - expirable before and if they are old enough (default is - older than a week) they are deleted. - -@ifnottex -@node [6.5], [6.6], [6.4], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.5: +How to get rid of old unwanted mail? - I want that all read messages are expired (at least in - some groups). How to do it? - +@subsubheading Answer -Answer: +You can of course just mark the mail you don't need +anymore by saying @samp{#} with point +over the mail and then say @samp{B DEL} +to get rid of them forever. You could also instead of +actually deleting them, send them to a junk-group by +saying @samp{B m nnml:trash-bin} which +you clear from time to time, but both are not the intended +way in Gnus. - If you want all read messages to be expired (e.g. in - mailing lists where there's an online archive), you've - got two choices: auto-expire and - total-expire. Auto-expire means, that every article - which has no marks set and is selected for reading is - marked as expirable, Gnus hits @samp{E} - for you every time you read a message. Total-expire - follows a slightly different approach, here all article - where the read mark is set are expirable. - +In Gnus, we let mail expire like news expires on a news +server. That means you tell Gnus the message is +expirable (you tell Gnus "I don't need this mail +anymore") by saying @samp{E} with point +over the mail in summary buffer. Now when you leave the +group, Gnus looks at all messages which you marked as +expirable before and if they are old enough (default is +older than a week) they are deleted. - To activate auto-expire, include auto-expire in the - Group parameters for the group. (Hit @samp{G - c} in summary buffer with point over the - group to change group parameters). For total-expire add - total-expire to the group-parameters. - +@node [6.5] +@subsubheading Question 6.5 - Which method you choose is merely a matter of taste: - Auto-expire is faster, but it doesn't play together with - Adaptive Scoring, so if you want to use this feature, - you should use total-expire. - +I want that all read messages are expired (at least in +some groups). How to do it? - If you want a message to be excluded from expiration in - a group where total or auto expire is active, set either - tick (hit @samp{u}) or dormant mark (hit - @samp{u}), when you use auto-expire, you - can also set the read mark (hit - @samp{d}). - -@ifnottex -@node [6.6], , [6.5], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.6: +@subsubheading Answer - I don't want expiration to delete my mails but to move them - to another group. - +If you want all read messages to be expired (e.g. in +mailing lists where there's an online archive), you've +got two choices: auto-expire and +total-expire. Auto-expire means, that every article +which has no marks set and is selected for reading is +marked as expirable, Gnus hits @samp{E} +for you every time you read a message. Total-expire +follows a slightly different approach, here all article +where the read mark is set are expirable. -Answer: +To activate auto-expire, include auto-expire in the +Group parameters for the group. (Hit @samp{G +c} in summary buffer with point over the +group to change group parameters). For total-expire add +total-expire to the group-parameters. - Say something like this in ~/.gnus: - +Which method you choose is merely a matter of taste: +Auto-expire is faster, but it doesn't play together with +Adaptive Scoring, so if you want to use this feature, +you should use total-expire. + +If you want a message to be excluded from expiration in +a group where total or auto expire is active, set either +tick (hit @samp{u}) or dormant mark (hit +@samp{u}), when you use auto-expire, you +can also set the read mark (hit +@samp{d}). + +@node [6.6] +@subsubheading Question 6.6 + +I don't want expiration to delete my mails but to move them +to another group. + +@subsubheading Answer + +Say something like this in ~/.gnus.el: @example (setq nnmail-expiry-target "nnml:expired") @end example - @noindent - (If you want to change the value of nnmail-expiry-target - on a per group basis see the question "How can I disable - threading in some (e.g. mail-) groups, or set other - variables specific for some groups?") - -@ifnottex -@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions -@end ifnottex +(If you want to change the value of nnmail-expiry-target +on a per group basis see the question "How can I disable +threading in some (e.g. mail-) groups, or set other +variables specific for some groups?") + +@node FAQ 7 - Gnus in a dial-up environment @subsection Gnus in a dial-up environment @menu -* [7.1]:: I don't have a permanent connection to the net, how can I - minimize the time I've got to be connected? -* [7.2]:: So what was this thing about the Agent? -* [7.3]:: I want to store article bodies on disk, too. How to do it? -* [7.4]:: How to tell Gnus not to try to send mails / postings while - I'm offline? +* [7.1]:: I don't have a permanent connection to the net, how can I + minimize the time I've got to be connected? +* [7.2]:: So what was this thing about the Agent? +* [7.3]:: I want to store article bodies on disk, too. How to do it? +* [7.4]:: How to tell Gnus not to try to send mails / postings while + I'm offline? @end menu +@node [7.1] +@subsubheading Question 7.1 -@ifnottex -@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.1: +I don't have a permanent connection to the net, how can +I minimize the time I've got to be connected? - I don't have a permanent connection to the net, how can - I minimize the time I've got to be connected? - +@subsubheading Answer -Answer: +You've got basically two options: Either you use the +Gnus Agent (see below) for this, or you can install +programs which fetch your news and mail to your local +disk and Gnus reads the stuff from your local +machine. - You've got basically two options: Either you use the - Gnus Agent (see below) for this, or you can install - programs which fetch your news and mail to your local - disk and Gnus reads the stuff from your local - machine. - +If you want to follow the second approach, you need a +program which fetches news and offers them to Gnus, a +program which does the same for mail and a program which +receives the mail you write from Gnus and sends them +when you're online. - If you want to follow the second approach, you need a - program which fetches news and offers them to Gnus, a - program which does the same for mail and a program which - receives the mail you write from Gnus and sends them - when you're online. - +Let's talk about Unix systems first: For the news part, +the easiest solution is a small nntp server like +@uref{http://www.leafnode.org/, Leafnode} or +@uref{http://infa.abo.fi/~patrik/sn/, sn}, +of course you can also install a full featured news +server like +@uref{http://www.isc.org/products/INN/, inn}. +Then you want to fetch your Mail, popular choices +are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail} +and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}. +You should tell those to write the mail to your disk and +Gnus to read it from there. Last but not least the mail +sending part: This can be done with every MTA like +@uref{http://www.sendmail.org/, sendmail}, +@uref{http://www.qmail.org/, postfix}, +@uref{http://www.exim.org/, exim} or +@uref{http://www.qmail.org/, qmail}. -Let's talk about Unix systems first: For the news part, the easiest -solution is a small nntp server like -@uref{http://www.leafnode.org/,Leafnode} or -@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also -install a full featured news server like -@uref{http://www.isc.org/products/INN/,inn}. +On windows boxes I'd vote for +@uref{http://www.tglsoft.de/, Hamster}, +it's a small freeware, open-source program which fetches +your mail and news from remote servers and offers them +to Gnus (or any other mail and/or news reader) via nntp +respectively POP3 or IMAP. It also includes a smtp +server for receiving mails from Gnus. -Then you want to fetch your Mail, popular choices are -@itemize @bullet -@item -@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and -@item -@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. -@end itemize -You should tell those to write the mail to your disk and Gnus to read -it from there. Last but not least the mail sending part: This can be -done with every MTA like @uref{http://www.sendmail.org/,sendmail}, -@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim} -or @uref{http://www.qmail.org/,qmail}. - +@node [7.2] +@subsubheading Question 7.2 - On windows boxes I'd vote for - @uref{http://www.tglsoft.de/,Hamster}, - it's a small freeware, open-source program which fetches - your mail and news from remote servers and offers them - to Gnus (or any other mail and/or news reader) via nntp - respectively POP3 or IMAP. It also includes a smtp - server for receiving mails from Gnus. - -@ifnottex -@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.2: +So what was this thing about the Agent? - So what was this thing about the Agent? - +@subsubheading Answer -Answer: - - The Gnus agent is part of Gnus, it allows you to fetch - mail and news and store them on disk for reading them - later when you're offline. It kind of mimics offline - newsreaders like e.g. Forte Agent. If you want to use - the Agent place the following in ~/.gnus if you are - still using 5.8.8 or 5.9 (it's the default since 5.10): - +The Gnus agent is part of Gnus, it allows you to fetch +mail and news and store them on disk for reading them +later when you're offline. It kind of mimics offline +newsreaders like e.g. Forte Agent. If you want to use +the Agent place the following in ~/.gnus.el if you are +still using 5.8.8 or 5.9 (it's the default since 5.10): @example (setq gnus-agent t) @end example - +@noindent - Now you've got to select the servers whose groups can be - stored locally. To do this, open the server buffer - (that is press @samp{^} while in the - group buffer). Now select a server by moving point to - the line naming that server. Finally, agentize the - server by typing @samp{J a}. If you - make a mistake, or change your mind, you can undo this - action by typing @samp{J r}. When - you're done, type 'q' to return to the group buffer. - Now the next time you enter a group on a agentized - server, the headers will be stored on disk and read from - there the next time you enter the group. - -@ifnottex -@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.3: +Now you've got to select the servers whose groups can be +stored locally. To do this, open the server buffer +(that is press @samp{^} while in the +group buffer). Now select a server by moving point to +the line naming that server. Finally, agentize the +server by typing @samp{J a}. If you +make a mistake, or change your mind, you can undo this +action by typing @samp{J r}. When +you're done, type 'q' to return to the group buffer. +Now the next time you enter a group on a agentized +server, the headers will be stored on disk and read from +there the next time you enter the group. - I want to store article bodies on disk, too. How to do it? - +@node [7.3] +@subsubheading Question 7.3 -Answer: +I want to store article bodies on disk, too. How to do it? - You can tell the agent to automatically fetch the bodies - of articles which fulfill certain predicates, this is - done in a special buffer which can be reached by - saying @samp{J c} in group - buffer. Please refer to the documentation for - information which predicates are possible and how - exactly to do it. - +@subsubheading Answer - Further on you can tell the agent manually which - articles to store on disk. There are two ways to do - this: Number one: In the summary buffer, process mark a - set of articles that shall be stored in the agent by - saying @samp{#} with point over the - article and then type @samp{J s}. The - other possibility is to set, again in the summary - buffer, downloadable (%) marks for the articles you - want by typing @samp{@@} with point over - the article and then typing @samp{J u}. - What's the difference? Well, process marks are erased as - soon as you exit the summary buffer while downloadable - marks are permanent. You can actually set downloadable - marks in several groups then use fetch session ('J s' in - the GROUP buffer) to fetch all of those articles. The - only downside is that fetch session also fetches all of - the headers for every selected group on an agentized - server. Depending on the volume of headers, the initial - fetch session could take hours. - -@ifnottex -@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.4: +You can tell the agent to automatically fetch the bodies +of articles which fulfill certain predicates, this is +done in a special buffer which can be reached by +saying @samp{J c} in group +buffer. Please refer to the documentation for +information which predicates are possible and how +exactly to do it. - How to tell Gnus not to try to send mails / postings - while I'm offline? - +Further on you can tell the agent manually which +articles to store on disk. There are two ways to do +this: Number one: In the summary buffer, process mark a +set of articles that shall be stored in the agent by +saying @samp{#} with point over the +article and then type @samp{J s}. The +other possibility is to set, again in the summary +buffer, downloadable (%) marks for the articles you +want by typing @samp{@@} with point over +the article and then typing @samp{J u}. +What's the difference? Well, process marks are erased as +soon as you exit the summary buffer while downloadable +marks are permanent. You can actually set downloadable +marks in several groups then use fetch session ('J s' in +the GROUP buffer) to fetch all of those articles. The +only downside is that fetch session also fetches all of +the headers for every selected group on an agentized +server. Depending on the volume of headers, the initial +fetch session could take hours. -Answer: +@node [7.4] +@subsubheading Question 7.4 - All you've got to do is to tell Gnus when you are online - (plugged) and when you are offline (unplugged), the rest - works automatically. You can toggle plugged/unplugged - state by saying @samp{J j} in group - buffer. To start Gnus unplugged say @samp{M-x - gnus-unplugged} instead of - @samp{M-x gnus}. Note that for this to - work, the agent must be active. - +How to tell Gnus not to try to send mails / postings +while I'm offline? -@ifnottex -@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions -@end ifnottex +@subsubheading Answer + +All you've got to do is to tell Gnus when you are online +(plugged) and when you are offline (unplugged), the rest +works automatically. You can toggle plugged/unplugged +state by saying @samp{J j} in group +buffer. To start Gnus unplugged say @samp{M-x +gnus-unplugged} instead of +@samp{M-x gnus}. Note that for this to +work, the agent must be active. + +@node FAQ 8 - Getting help @subsection Getting help @menu -* [8.1]:: How to find information and help inside Emacs? -* [8.2]:: I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? -* [8.3]:: Which websites should I know? -* [8.4]:: Which mailing lists and newsgroups are there? -* [8.5]:: Where to report bugs? -* [8.6]:: I need real-time help, where to find it? +* [8.1]:: How to find information and help inside Emacs? +* [8.2]:: I can't find anything in the Gnus manual about X (e.g. + attachments, PGP, MIME...), is it not documented? +* [8.3]:: Which websites should I know? +* [8.4]:: Which mailing lists and newsgroups are there? +* [8.5]:: Where to report bugs? +* [8.6]:: I need real-time help, where to find it? @end menu -@ifnottex -@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.1: +@node [8.1] +@subsubheading Question 8.1 - How to find information and help inside Emacs? - +How to find information and help inside Emacs? -Answer: +@subsubheading Answer - The first stop should be the Gnus manual (Say - @samp{C-h i d m Gnus RET} to start the - Gnus manual, then walk through the menus or do a - full-text search with @samp{s}). Then - there are the general Emacs help commands starting with - C-h, type @samp{C-h ? ?} to get a list - of all available help commands and their meaning. Finally - @samp{M-x apropos-command} lets you - search through all available functions and @samp{M-x - apropos} searches the bound variables. - -@ifnottex -@node [8.2], [8.3], [8.1], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.2: +The first stop should be the Gnus manual (Say +@samp{C-h i d m Gnus RET} to start the +Gnus manual, then walk through the menus or do a +full-text search with @samp{s}). Then +there are the general Emacs help commands starting with +C-h, type @samp{C-h ? ?} to get a list +of all available help commands and their meaning. Finally +@samp{M-x apropos-command} lets you +search through all available functions and @samp{M-x +apropos} searches the bound variables. - I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? - +@node [8.2] +@subsubheading Question 8.2 -Answer: +I can't find anything in the Gnus manual about X +(e.g. attachments, PGP, MIME...), is it not documented? - There's not only the Gnus manual but also the manuals - for message, emacs-mime, sieve and pgg. Those packages - are distributed with Gnus and used by Gnus but aren't - really part of core Gnus, so they are documented in - different info files, you should have a look in those - manuals, too. - -@ifnottex -@node [8.3], [8.4], [8.2], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.3: +@subsubheading Answer - Which websites should I know? - +There's not only the Gnus manual but also the manuals +for message, emacs-mime, sieve and pgg. Those packages +are distributed with Gnus and used by Gnus but aren't +really part of core Gnus, so they are documented in +different info files, you should have a look in those +manuals, too. -Answer: +@node [8.3] +@subsubheading Question 8.3 - The two most important ones are the - @uref{http://www.gnus.org,official Gnus website}. - and it's sister site - @uref{http://my.gnus.org,my.gnus.org (MGO)}, - hosting an archive of lisp snippets, howtos, a (not - really finished) tutorial and this FAQ. - +Which websites should I know? - Tell me about other sites which are interesting. - -@ifnottex -@node [8.4], [8.5], [8.3], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.4: +@subsubheading Answer - Which mailing lists and newsgroups are there? - +The two most important ones are the +@uref{http://www.gnus.org, official Gnus website}. +and it's sister site +@uref{http://my.gnus.org, my.gnus.org (MGO)}, +hosting an archive of lisp snippets, howtos, a (not +really finished) tutorial and this FAQ. -Answer: +Tell me about other sites which are interesting. - There's the newsgroup gnu.emacs.gnus (pull it from - e.g. news.gnus.org) which deals with general questions - and the ding mailing list (ding@@gnus.org) dealing with - development of Gnus. You can read the ding list via - NNTP, too under the name gnus.ding from news.gnus.org. - +@node [8.4] +@subsubheading Question 8.4 - If you want to stay in the big8, - news.software.newssreaders is also read by some Gnus - users (but chances for qualified help are much better in - the above groups) and if you speak German, there's - de.comm.software.gnus. - -@ifnottex -@node [8.5], [8.6], [8.4], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.5: +Which mailing lists and newsgroups are there? - Where to report bugs? - +@subsubheading Answer -Answer: +There's the newsgroup gnu.emacs.gnus (pull it from +e.g. news.gnus.org) which deals with general questions and the +ding mailing list (ding@@gnus.org) dealing with development of +Gnus. You can read the ding list via NNTP, too under the name +gmane.emacs.gnus.general from news.gmane.org. -Say @samp{M-x gnus-bug}, this will start a message to the -@email{bugs@@gnus.org,gnus bug mailing list} including information -about your environment which make it easier to help you. - -@ifnottex -@node [8.6], , [8.5], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.6: +If you want to stay in the big8, +news.software.newssreaders is also read by some Gnus +users (but chances for qualified help are much better in +the above groups) and if you speak German, there's +de.comm.software.gnus. - I need real-time help, where to find it? - +@node [8.5] +@subsubheading Question 8.5 -Answer: +Where to report bugs? - Point your IRC client to irc.my.gnus.org channel - #mygnus. Don't be afraid if people there speak German, - they are willing and capable of switching to - English when people from outside Germany enter. - +@subsubheading Answer -@ifnottex -@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions -@end ifnottex +Say @samp{M-x gnus-bug}, this will start +a message to the +@email{bugs@@gnus.org, gnus bug mailing list} +including information about your environment which make +it easier to help you. + +@node [8.6] +@subsubheading Question 8.6 + +I need real-time help, where to find it? + +@subsubheading Answer + +Point your IRC client to irc.my.gnus.org channel +#mygnus. Don't be afraid if people there speak German, +they are willing and capable of switching to +English when people from outside Germany enter. + +@node FAQ 9 - Tuning Gnus @subsection Tuning Gnus @menu -* [9.1]:: Starting Gnus is really slow, how to speed it up? -* [9.2]:: How to speed up the process of entering a group? -* [9.3]:: Sending mail becomes slower and slower, what's up? +* [9.1]:: Starting Gnus is really slow, how to speed it up? +* [9.2]:: How to speed up the process of entering a group? +* [9.3]:: Sending mail becomes slower and slower, what's up? @end menu -@ifnottex -@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.1: +@node [9.1] +@subsubheading Question 9.1 - Starting Gnus is really slow, how to speed it up? - +Starting Gnus is really slow, how to speed it up? -Answer: +@subsubheading Answer - The reason for this could be the way Gnus reads it's - active file, see the node "The Active File" in the Gnus - manual for things you might try to speed the process up. - An other idea would be to byte compile your ~/.gnus (say - @samp{M-x byte-compile-file RET ~/.gnus - RET} to do it). Finally, if you have require - statements in your .gnus, you could replace them with - eval-after-load, which loads the stuff not at startup - time, but when it's needed. Say you've got this in your - ~/.gnus: - +The reason for this could be the way Gnus reads it's +active file, see the node "The Active File" in the Gnus +manual for things you might try to speed the process up. +An other idea would be to byte compile your ~/.gnus.el (say +@samp{M-x byte-compile-file RET ~/.gnus.el +RET} to do it). Finally, if you have require +statements in your .gnus, you could replace them with +eval-after-load, which loads the stuff not at startup +time, but when it's needed. Say you've got this in your +~/.gnus.el: @example (require 'message) (add-to-list 'message-syntax-checks '(sender . disabled)) @end example - @noindent - then as soon as you start Gnus, message.el is loaded. If - you replace it with - + +then as soon as you start Gnus, message.el is loaded. If +you replace it with @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - @noindent - it's loaded when it's needed. - -@ifnottex -@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.2: - How to speed up the process of entering a group? - +it's loaded when it's needed. -Answer: +@node [9.2] +@subsubheading Question 9.2 - A speed killer is setting the variable - gnus-fetch-old-headers to anything different from nil, - so don't do this if speed is an issue. To speed up - building of summary say - +How to speed up the process of entering a group? + +@subsubheading Answer + +A speed killer is setting the variable +gnus-fetch-old-headers to anything different from nil, +so don't do this if speed is an issue. To speed up +building of summary say @example (gnus-compile) @end example - @noindent - at the bottom of your ~/.gnus, this will make gnus - byte-compile things like - gnus-summary-line-format. - then you could increase the value of gc-cons-threshold - by saying something like - + +at the bottom of your ~/.gnus.el, this will make gnus +byte-compile things like +gnus-summary-line-format. +then you could increase the value of gc-cons-threshold +by saying something like @example (setq gc-cons-threshold 3500000) @end example - @noindent - in ~/.emacs. If you don't care about width of CJK - characters or use Gnus 5.10 or younger together with a - recent GNU Emacs, you should say - + +in ~/.emacs. If you don't care about width of CJK +characters or use Gnus 5.10 or younger together with a +recent GNU Emacs, you should say @example -(setq gnus-use-correct-string-widths nil) +(setq gnus-use-correct-string-widths nil) @end example - - @noindent - in ~/.gnus (thanks to Jesper harder for the last - two suggestions). Finally if you are still using 5.8.8 - or 5.9 and experience speed problems with summary - buffer generation, you definitely should update to - 5.10 since there quite some work on improving it has - been done. -@ifnottex -@node [9.3], , [9.2], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.3: +in ~/.gnus.el (thanks to Jesper harder for the last +two suggestions). Finally if you are still using 5.8.8 +or 5.9 and experience speed problems with summary +buffer generation, you definitely should update to +5.10 since there quite some work on improving it has +been done. - Sending mail becomes slower and slower, what's up? - +@node [9.3] +@subsubheading Question 9.3 -Answer: +Sending mail becomes slower and slower, what's up? - The reason could be that you told Gnus to archive the - messages you wrote by setting - gnus-message-archive-group. Try to use a nnml group - instead of an archive group, this should bring you back - to normal speed. - +@subsubheading Answer -@ifnottex -@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions -@end ifnottex +The reason could be that you told Gnus to archive the +messages you wrote by setting +gnus-message-archive-group. Try to use a nnml group +instead of an archive group, this should bring you back +to normal speed. + +@node FAQ - Glossary @subsection Glossary @table @dfn -@item ~/.gnus - When the term ~/.gnus is used it just means your Gnus - configuration file. You might as well call it ~/.gnus.el or - specify another name. - +@item ~/.gnus.el +When the term ~/.gnus.el is used it just means your Gnus +configuration file. You might as well call it ~/.gnus or +specify another name. @item Back End - In Gnus terminology a back end is a virtual server, a layer - between core Gnus and the real NNTP-, POP3-, IMAP- or - whatever-server which offers Gnus a standardized interface - to functions like "get message", "get Headers" etc. - +In Gnus terminology a back end is a virtual server, a layer +between core Gnus and the real NNTP-, POP3-, IMAP- or +whatever-server which offers Gnus a standardized interface +to functions like "get message", "get Headers" etc. @item Emacs - When the term Emacs is used in this FAQ, it means either GNU - Emacs or XEmacs. - +When the term Emacs is used in this FAQ, it means either GNU +Emacs or XEmacs. @item Message - In this FAQ message means a either a mail or a posting to a - Usenet Newsgroup or to some other fancy back end, no matter - of which kind it is. - +In this FAQ message means a either a mail or a posting to a +Usenet Newsgroup or to some other fancy back end, no matter +of which kind it is. @item MUA - MUA is an acronym for Mail User Agent, it's the program you - use to read and write e-mails. - +MUA is an acronym for Mail User Agent, it's the program you +use to read and write e-mails. @item NUA - NUA is an acronym for News User Agent, it's the program you - use to read and write Usenet news. - +NUA is an acronym for News User Agent, it's the program you +use to read and write Usenet news. + @end table -@c @bye - @ignore - arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 +arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 @end ignore 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 @@ @copying This file documents Message, the Emacs message composition mode. -Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. @quotation From 4f5f7887b12a14966f5e4d410373b3fa95dc47a2 Mon Sep 17 00:00:00 2001 From: Nick Roberts Date: Wed, 30 Mar 2005 08:32:48 +0000 Subject: [PATCH 098/241] *** empty log message *** --- lisp/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e893d00b591..71385556b93 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-30 Nick Roberts + + * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position. + 2005-03-29 Kenichi Handa * language/thai.el ("Thai"): Set setup-function and exit-function From 30044d57a8babc03bb3368c4fb9e7146851ec2b1 Mon Sep 17 00:00:00 2001 From: Nick Roberts Date: Wed, 30 Mar 2005 08:33:43 +0000 Subject: [PATCH 099/241] (tooltip-gud-display): Use gud-overlay-arrow-position. --- lisp/tooltip.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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." (defcustom tooltip-gud-display '((eq (tooltip-event-buffer tooltip-gud-event) - (marker-buffer overlay-arrow-position))) + (marker-buffer gud-overlay-arrow-position))) "List of forms determining where GUD tooltips are displayed. Forms in the list are combined with AND. The default is to display From c33d06b01ac711cc9608d773c95c89efe89c58f9 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Wed, 30 Mar 2005 10:24:55 +0000 Subject: [PATCH 100/241] *** empty log message *** --- lisp/ChangeLog | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 71385556b93..721512dc01c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-03-30 Kim F. Storm + + * kmacro.el (kmacro-end-macro): Isearch may store this command + into the macro -- so ignore it when executing keyboard macro. + 2005-03-30 Nick Roberts * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position. @@ -26,7 +31,7 @@ 2005-03-29 Chong Yidong * longlines.el: New file. - + * simple.el (buffer-substring-filters): New variable. (filter-buffer-substring): New function. (kill-region, copy-region-as-kill): Use it. @@ -36,7 +41,7 @@ 2005-03-30 Nick Roberts - * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text. + * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text. (gud-filter-pending-text): Move in front of gdb. (gud-overlay-arrow-position): New variable. (gud-sentinel, gud-display-line): Use it in place of From e9691cca876ec0e9c6d96dbf70427e3fd699c090 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Wed, 30 Mar 2005 10:25:10 +0000 Subject: [PATCH 101/241] (kmacro-end-macro): Isearch may store this command into the macro -- so ignore it when executing keyboard macro. --- lisp/kmacro.el | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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, counting the definition just completed as the first repetition. An argument of zero means repeat until error." (interactive "P") - (end-kbd-macro arg #'kmacro-loop-setup-function) - (when (and last-kbd-macro (= (length last-kbd-macro) 0)) - (message "Ignore empty macro") - (kmacro-pop-ring))) + ;; Isearch may push the kmacro-end-macro key sequence onto the macro. + ;; Just ignore it when executing the macro. + (unless executing-kbd-macro + (end-kbd-macro arg #'kmacro-loop-setup-function) + (when (and last-kbd-macro (= (length last-kbd-macro) 0)) + (message "Ignore empty macro") + (kmacro-pop-ring)))) ;;;###autoload From a4060732e5225eaa2265e5618ecc413b14c5ab14 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Wed, 30 Mar 2005 11:33:41 +0000 Subject: [PATCH 102/241] *** empty log message *** --- etc/NEWS | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 8e85c86dde8..450d21486ef 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -107,9 +107,16 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types. * Changes in Emacs 22.1 -** In Thai language environment, such word-oriented commands as M-f, -M-b, M-d, M-DEL, M-t, and M-q are remapped to commands that recognize -Thai word segument. +** Improved Thai support. A new minor mode `thai-word-mode' (which is +automatically activated if you select Thai as a language +environment) changes key bindings of most word-oriented commands to +versions which recognize Thai words. Affected commands are + M-f (forward-word) + M-b (backward-word) + M-d (kill-word) + M-DEL (backward-kill-word) + M-t (transpose-words) + M-q (fill-paragraph) ** iso-acc.el is now obsolete. Use one of the latin input methods instead. From 388f6d91abf030cfd27e3ef96d332caac47e001c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 30 Mar 2005 11:56:45 +0000 Subject: [PATCH 103/241] *** empty log message *** --- man/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/man/ChangeLog b/man/ChangeLog index 8efe3775953..d808b9fe6d7 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,7 @@ +2005-03-30 Glenn Morris + + * programs.texi (Fortran Motion): Fix previous change. + 2005-03-25 Katsumi Yamaoka * emacs-mime.texi (Display Customization): Markup fixes. From ba0243c6345b45b81a4e7eff3b45cfb86ad97579 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 30 Mar 2005 11:57:10 +0000 Subject: [PATCH 104/241] (Fortran Motion): Fix previous change. --- man/programs.texi | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/man/programs.texi b/man/programs.texi index 09f65f272cc..98e60d0385c 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1878,24 +1878,22 @@ Move point backward to the previous code block moves backwards. @kindex C-M-n @r{(Fortran mode)} -@kindex C-M-n @r{(F90 mode)} @findex fortran-end-of-block @findex f90-end-of-block @item C-M-n -Move to the end of the current code block (@code{fortran-end-of-block}, -@code{f90-end-of-block}). With a numeric agument, move forward that -number of blocks. The mark is set before moving point. The F90 mode -version of this command checks for consistency of block types and labels -(if present), but it does not check the outermost block since that may -be incomplete. +Move to the end of the current code block +(@code{fortran-end-of-block}/@code{f90-end-of-block}). With a numeric +agument, move forward that number of blocks. The mark is set before +moving point. The F90 mode version of this command checks for +consistency of block types and labels (if present), but it does not +check the outermost block since that may be incomplete. @kindex C-M-p @r{(Fortran mode)} -@kindex C-M-p @r{(F90 mode)} @findex fortran-beginning-of-block @findex f90-beginning-of-block @item C-M-p Move to the start of the current code block -(@code{fortran-beginning-of-block}, @code{f90-beginning-of-block}). This +(@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This is like @code{fortran-end-of-block}, but moves backwards. @end table From ef943dbafe50f9e3ade231d5da47311aead345cc Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Wed, 30 Mar 2005 12:37:36 +0000 Subject: [PATCH 105/241] * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) (org-agenda-convert-date, org-agenda-goto-calendar): New commands. (org-diary-default-entry): New function. (org-get-entries-from-diary): Better parsing of diary entries (org-agenda-check-no-diary): New function. ("diary-lib"): Advice to function `add-to-diary-list', to allow linking to diary entries. (org-agenda-execute-calendar-command): New function (org-agenda): Improved visible section in window. And use `org-fit-agenda-window'. (org-fit-agenda-window): New option. (org-move-subtree-down): Better handling of empty lines at end of subtree. (org-cycle): Numeric prefix is interpreted now as show-subtree N levels up. (org-fontify-done-headline): New option. (org-headline-done-face): New face. (org-set-font-lock-defaults): Use `org-headline-done-face'. (org-table-copy-down): renamed from `org-table-copy-from-above'. When current field is non-empty, it is copied to next row. (org-table-copy-from-above): Fixed bug which made it impossible to copy fields containing only a single non-white character. --- lisp/ChangeLog | 27 +++ lisp/textmodes/org.el | 453 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 396 insertions(+), 84 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 721512dc01c..0f049936249 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,30 @@ +2005-03-30 Carsten Dominik + + * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) + (org-agenda-convert-date, org-agenda-goto-calendar): New commands. + (org-diary-default-entry): New function. + (org-get-entries-from-diary): Better parsing of diary entries + (org-agenda-check-no-diary): New function. + ("diary-lib"): Advice to function `add-to-diary-list', to allow + linking to diary entries. + (org-agenda-execute-calendar-command): New function + (org-agenda): Improved visible section in window. And + use `org-fit-agenda-window'. + (org-fit-agenda-window): New option. + (org-move-subtree-down): Better handling of empty lines + at end of subtree. + (org-cycle): Numeric prefix is interpreted now as show-subtree N + levels up. + (org-fontify-done-headline): New option. + (org-headline-done-face): New face. + (org-set-font-lock-defaults): Use `org-headline-done-face'. + (org-table-copy-down): renamed from + `org-table-copy-from-above'. When current field is non-empty, it + is copied to next row. + (org-table-copy-from-above): Fixed bug which made it + impossible to copy fields containing only a single non-white + character. + 2005-03-30 Kim F. Storm * kmacro.el (kmacro-end-macro): Isearch may store this command diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el index ab45434526a..86406d37475 100644 --- a/lisp/textmodes/org.el +++ b/lisp/textmodes/org.el @@ -1,14 +1,14 @@ ;; org.el --- Outline-based notes management and organizer ;; Carstens outline-mode for keeping track of everything. -;; Copyright (c) 2003, 2004, 2005 Free Software Foundation - +;; Copyright (c) 2004, 2005 Free Software Foundation +;; ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ -;; Version: 3.04 - +;; Version: 3.05 +;; ;; This file is part of GNU Emacs. - +;; ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) @@ -75,10 +75,18 @@ ;; ------------- ;; The documentation of Org-mode can be found in the TeXInfo file. ;; This distribution also contains a PDF version of it. At the homepage -;; of Org-mode, you can find and read online the same text as HTML. +;; of Org-mode, you can read online the same text online as HTML. ;; ;; Changes: ;; ------- +;; Version 3.05 +;; - Agenda entries from the diary are linked to the diary file, so +;; adding and editing diary entries can be done directly from the agenda. +;; - Many calendar/diary commands available directly from agenda. +;; - Field copying in tables with S-RET does increment. +;; - C-c C-x C-v extracts the visible part of the buffer for printing. +;; - Moving subtrees up and down preserves the whitespace at the tree end. +;; ;; Version 3.04 ;; - Table editor optimized to need fewer realignments, and to keep ;; table shape when typing in fields. @@ -213,7 +221,7 @@ ;;; Customization variables -(defvar org-version "3.04" +(defvar org-version "3.05" "The version number of the file org.el.") (defun org-version () (interactive) @@ -241,7 +249,13 @@ :group 'org) (defcustom org-startup-folded t - "Non-nil means, entering Org-mode will switch to OVERVIEW." + "Non-nil means, entering Org-mode will switch to OVERVIEW. +This can also be configured on a per-file basis by adding one of +the following lines anywhere in the buffer: + + #+STARTUP: fold + #+STARTUP: nofold +" :group 'org-startup :type 'boolean) @@ -255,7 +269,13 @@ uninteresting. Also tables look terrible when wrapped." (defcustom org-startup-with-deadline-check nil "Non-nil means, entering Org-mode will run the deadline check. This means, if you start editing an org file, you will get an -immediate reminder of any due deadlines." +immediate reminder of any due deadlines. +This can also be configured on a per-file basis by adding one of +the following lines anywhere in the buffer: + + #+STARTUP: dlcheck + #+STARTUP: nodlcheck +" :group 'org-startup :type 'boolean) @@ -534,6 +554,11 @@ When nil, cursor will remain in the current window." :group 'org-agenda :type 'boolean) +(defcustom org-fit-agenda-window t + "Non-nil means, change windo size of agenda to fit content." + :group 'org-agenda + :type 'boolean) + (defcustom org-agenda-show-all-dates t "Non-nil means, `org-agenda' shows every day in the selected range. 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 very good at guessing when a re-align will be necessary, but you can always force one with `C-c C-c'. -I you would like to use the optimized version in Org-mode, but the un-optimized +If you would like to use the optimized version in Org-mode, but the un-optimized version in OrgTbl-mode, see the variable `orgtbl-optimized'. 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 tags." :group 'org-table :type 'boolean) +(defcustom org-table-copy-increment t + "Non-nil means, increment when copying current field with \\[org-table-copy-down]." + :group 'org-table + :type 'boolean) + (defcustom org-table-tab-recognizes-table.el t "Non-nil means, TAB will automatically notice a table.el table. 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." "Face used for level 7 headlines." :group 'org-faces) -(defface org-level-8-face ;;font-lock-string-face +(defface org-level-8-face ;; font-lock-string-face '((((type tty) (class color)) (:foreground "green")) (((class color) (background light)) (:foreground "RosyBrown")) (((class color) (background dark)) (:foreground "LightSalmon")) @@ -1276,8 +1306,24 @@ Otherwise, the buffer will just be saved to a file and stay hidden." "Face for deadlines and TODO keyords." :group 'org-faces) -;; Inheritance does not work for xemacs, unfortunately. -;; We just copy the definitions and waste some space.... +(defcustom org-fontify-done-headline nil + "Non-nil means, change the face of a headline if it is marked DONE. +Normally, only the TODO/DONE keyword indicates the state of a headline. +When this is non-nil, the headline after the keyword is set to the +`org-headline-done-face' as an additional indication." + :group 'org-faces + :type 'boolean) + +(defface org-headline-done-face ;; font-lock-string-face + '((((type tty) (class color)) (:foreground "green")) + (((class color) (background light)) (:foreground "RosyBrown")) + (((class color) (background dark)) (:foreground "LightSalmon")) + (t (:italic t))) + "Face used to indicate that a headline is DONE. See also the variable +`org-fontify-done-headline'." + :group 'org-faces) + +;; Inheritance does not yet work for xemacs. So we just copy... (defface org-deadline-announce-face '((((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." )) (defvar org-n-levels (length org-level-faces)) - ;; Tell the compiler about dynamically scoped variables, ;; and variables from other packages (eval-when-compile (defvar zmacs-regions) + (defvar original-date) (defvar org-transient-mark-mode) (defvar org-old-auto-fill-inhibit-regexp) (defvar orgtbl-mode-menu) @@ -1521,8 +1567,11 @@ The following commands are available: (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>") '(1 'org-warning-face t)) '("^#.*" (0 'font-lock-comment-face t)) - (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") - '(1 'org-done-face t)) + (if org-fontify-done-headline + (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\(.*\\)\\>") + '(1 'org-done-face t) '(2 'org-headline-done-face t)) + (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") + '(1 'org-done-face t))) '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)" (1 'org-table-face t)) '("^[ \t]*\\(:.*\\)" (1 'org-table-face t))))) @@ -1563,7 +1612,7 @@ The following commands are available: (defvar org-cycle-global-status nil) (defvar org-cycle-subtree-status nil) (defun org-cycle (&optional arg) - "Visibility cycling for org-mode. + "Visibility cycling for Org-mode. - When this function is called with a prefix argument, rotate the entire buffer through 3 states (global cycling) @@ -1579,6 +1628,9 @@ The following commands are available: zoom in further. 3. SUBTREE: Show the entire subtree, including body text. +- When there is a numeric prefix, go ARG levels up and do a `show-subtree', + keeping cursor position. + - When point is not at the beginning of a headline, execute `indent-relative', like TAB normally does. See the option `org-cycle-emulate-tab' for details. @@ -1587,8 +1639,9 @@ The following commands are available: no headline in line 1, this function will act as if called with prefix arg." (interactive "P") - (if (and (bobp) (not (looking-at outline-regexp))) - ; special case: use global cycling + (if (or (and (bobp) (not (looking-at outline-regexp))) + (equal arg '(4))) + ;; special case: use global cycling (setq arg t)) (cond @@ -1600,7 +1653,7 @@ The following commands are available: (org-table-justify-field-maybe) (org-table-next-field)))) - (arg ;; Global cycling + ((eq arg t) ;; Global cycling (cond ((and (eq last-command this-command) @@ -1621,18 +1674,27 @@ The following commands are available: (if (bobp) (throw 'exit nil)))) (message "CONTENTS...done")) (setq org-cycle-global-status 'contents)) + ((and (eq last-command this-command) (eq org-cycle-global-status 'contents)) ;; We just showed the table of contents - now show everything (show-all) (message "SHOW ALL") (setq org-cycle-global-status 'all)) + (t ;; Default action: go to overview (hide-sublevels 1) (message "OVERVIEW") (setq org-cycle-global-status 'overview)))) + ((integerp arg) + ;; Show-subtree, ARG levels up from here. + (save-excursion + (org-back-to-heading) + (outline-up-heading arg) + (show-subtree))) + ((save-excursion (beginning-of-line 1) (looking-at outline-regexp)) ;; At a heading: rotate between three different views (org-back-to-heading) @@ -1970,7 +2032,7 @@ is changed at all." (save-excursion (outline-end-of-heading) (setq folded (org-invisible-p))) (outline-end-of-subtree)) - (if (equal (char-after) ?\n) (forward-char 1)) + (outline-next-heading) (setq end (point)) ;; Find insertion point, with error handling (goto-char beg) @@ -1982,7 +2044,10 @@ is changed at all." (if (> arg 0) ;; Moving forward - still need to move over subtree (progn (outline-end-of-subtree) - (if (equal (char-after) ?\n) (forward-char 1)))) + (outline-next-heading) + (if (not (or (looking-at (concat "^" outline-regexp)) + (bolp))) + (newline)))) (move-marker ins-point (point)) (setq txt (buffer-substring beg end)) (delete-region beg end) @@ -1993,7 +2058,7 @@ is changed at all." (defvar org-subtree-clip "" "Clipboard for cut and paste of subtrees. -This is actually only a cpoy of the kill, because we use the normal kill +This is actually only a copy of the kill, because we use the normal kill ring. We need it to check if the kill was created by `org-copy-subtree'.") (defvar org-subtree-clip-folded nil @@ -2906,6 +2971,14 @@ The following commands are available: (define-key org-agenda-mode-map "p" 'org-agenda-priority) (define-key org-agenda-mode-map "," 'org-agenda-priority) (define-key org-agenda-mode-map "i" 'org-agenda-diary-entry) +(define-key org-agenda-mode-map "c" 'org-agenda-goto-calendar) +(define-key org-agenda-mode-map "C" 'org-agenda-convert-date) +(define-key org-agenda-mode-map "m" 'org-agenda-phases-of-moon) +(define-key org-agenda-mode-map "M" 'org-agenda-phases-of-moon) +(define-key org-agenda-mode-map "s" 'org-agenda-sunrise-sunset) +(define-key org-agenda-mode-map "S" 'org-agenda-sunrise-sunset) +(define-key org-agenda-mode-map "h" 'org-agenda-holidays) +(define-key org-agenda-mode-map "H" 'org-agenda-holidays) (define-key org-agenda-mode-map "+" 'org-agenda-priority-up) (define-key org-agenda-mode-map "-" 'org-agenda-priority-down) (define-key org-agenda-mode-map [(right)] 'org-agenda-later) @@ -2951,6 +3024,12 @@ The following commands are available: :style toggle :selected org-agenda-include-diary :active t] "--" ["New Diary Entry" org-agenda-diary-entry t] + ("Calendar commands" + ["Goto calendar" org-agenda-goto-calendar t] + ["Phases of the Moon" org-agenda-phases-of-moon t] + ["Sunrise/Sunset" org-agenda-sunrise-sunset t] + ["Holidays" org-agenda-holidays t] + ["Convert" org-agenda-convert-date t]) "--" ["Quit" org-agenda-quit t] ["Exit and Release Buffers" org-agenda-exit t] @@ -3110,7 +3189,7 @@ NDAYS defaults to `org-agenda-ndays'." (d (- nt n1))) (- sd (+ (if (< d 0) 7 0) d))))) (day-numbers (list start)) - s e rtn rtnall file date d start-pos) + s e rtn rtnall file date d start-pos end-pos) (setq org-agenda-redo-command (list 'org-agenda include-all start-day ndays)) ;; Make the list of days @@ -3146,7 +3225,9 @@ NDAYS defaults to `org-agenda-ndays'." s (point)) (if (or (= d today) (and (not start-pos) (= d sd))) - (setq start-pos (point))) + (setq start-pos (point)) + (if (and start-pos (not end-pos)) + (setq end-pos (point)))) (setq files org-agenda-files rtnall nil) (while (setq file (pop files)) @@ -3173,6 +3254,17 @@ NDAYS defaults to `org-agenda-ndays'." (put-text-property s (1- (point)) 'day d)))) (goto-char (point-min)) (setq buffer-read-only t) + (if org-fit-agenda-window + (fit-window-to-buffer nil (/ (* (frame-height) 3) 4) + (/ (frame-height) 2))) + (unless (and (pos-visible-in-window-p (point-min)) + (pos-visible-in-window-p (point-max))) + (goto-char (1- (point-max))) + (recenter -1) + (if (not (pos-visible-in-window-p (or start-pos 1))) + (progn + (goto-char (or start-pos 1)) + (recenter 1)))) (goto-char (or start-pos 1)) (if (not org-select-agenda-window) (select-window win)) (message ""))) @@ -3285,10 +3377,10 @@ With prefix ARG, go back that many times `org-agenda-ndays'." "Set the mode name to indicate all the small mode seetings." (setq mode-name (concat "Org-Agenda" - (if (equal org-agenda-ndays 1) " Day" "") - (if (equal org-agenda-ndays 7) " Week" "") - (if org-agenda-follow-mode " Follow" "") - (if org-agenda-include-diary " Diary" ""))) + (if (equal org-agenda-ndays 1) " Day" "") + (if (equal org-agenda-ndays 7) " Week" "") + (if org-agenda-follow-mode " Follow" "") + (if org-agenda-include-diary " Diary" ""))) (force-mode-line-update)) (defun org-agenda-post-command-hook () @@ -3299,26 +3391,33 @@ With prefix ARG, go back that many times `org-agenda-ndays'." (defun org-get-entries-from-diary (date) "Get the (emacs calendar) diary entries for DATE." (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*") - (diary-display-hook '(sort-diary-entries fancy-diary-display)) + (diary-display-hook '(fancy-diary-display)) + (list-diary-entries-hook + (cons 'org-diary-default-entry list-diary-entries-hook)) entries - (disable-org-agenda t)) + (disable-org-diary t)) (save-excursion (save-window-excursion (list-diary-entries date 1))) (if (not (get-buffer fancy-diary-buffer)) (setq entries nil) (save-excursion - (set-buffer fancy-diary-buffer) + (switch-to-buffer fancy-diary-buffer) (setq buffer-read-only nil) (if (= (point-max) 1) ;; No entries (setq entries nil) - ;; Omit the date - (beginning-of-line 3) - (delete-region (point-min) (point)) + ;; Omit the date and other unnecessary stuff + (org-agenda-cleanup-fancy-diary) + ;; Add prefix to each line and extend the text properties + (goto-char (point-min)) (while (and (re-search-forward "^" nil t) (not (eobp))) - (replace-match " Diary: ")) - (setq entries (buffer-substring (point-min) (- (point-max) 1)))) + (replace-match " Diary: ") + (add-text-properties (point-at-bol) (point) + (text-properties-at (point)))) + (if (= (point-max) 1) + (setq entries nil) + (setq entries (buffer-substring (point-min) (- (point-max) 1))))) (set-buffer-modified-p nil) (kill-buffer fancy-diary-buffer))) (when entries @@ -3337,6 +3436,49 @@ With prefix ARG, go back that many times `org-agenda-ndays'." x) entries))))) +(defun org-agenda-cleanup-fancy-diary () + "Remove unwanted stuff in buffer created by fancy-diary-display. +This gets rid of the date, the underline under the date, and +the dummy entry installed by org-mode to ensure non-empty diary for each +date." + (goto-char (point-min)) + (if (looking-at ".*?:[ \t]*") + (progn + (replace-match "") + (re-search-forward "\n=+$" nil t) + (replace-match "") + (while (re-search-backward "^ +" nil t) (replace-match ""))) + (re-search-forward "\n=+$" nil t) + (delete-region (point-min) (min (point-max) (1+ (match-end 0))))) + (if (re-search-forward "^Org-mode dummy\n?" nil t) + (replace-match ""))) + +;; Advise the add-to-diary-list function to allow org to jump to +;; diary entires. Wrapped into eval-after-load to avoid loading +;; advice unnecessarily +(eval-after-load "diary-lib" + '(defadvice add-to-diary-list (before org-mark-diary-entry activate) + "Make the position visible." + (if (and (boundp 'disable-org-diary) ;; called from org-agenda + (stringp string) + (buffer-file-name)) + (add-text-properties + 0 (length string) + (list 'mouse-face 'highlight + 'keymap org-agenda-keymap + 'help-echo + (format + "mouse-2 or RET jump to diary file %s" + (abbreviate-file-name (buffer-file-name))) + 'org-agenda-diary-link t + 'org-marker (org-agenda-new-marker (point-at-bol))) + string)))) + +(defun org-diary-default-entry () + "Add a dummy entry to the diary. +Needed to avoid empty dates which mess up holiday display." + (add-to-diary-list original-date "Org-mode dummy" "")) + (defun org-add-file (&optional file) "Add current file to the list of files in variable `org-agenda-files'. 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." file rtn results) ;; If this is called during org-agenda, don't return any entries to ;; the calendar. Org Agenda will list these entries itself. - (if (boundp 'disable-org-agenda) (setq files nil)) + (if (boundp 'disable-org-diary) (setq files nil)) (while (setq file (pop files)) (setq rtn (apply 'org-agenda-get-day-entries file date args)) (setq results (append results rtn))) @@ -3864,7 +4006,6 @@ and by additional input from the age of a schedules or deadline entry." (let* ((pri (get-text-property (point-at-bol) 'priority))) (message "Priority is %d" (if pri pri -1000)))) - (defun org-agenda-goto () "Go to the Org-mode file which contains the item at point." (interactive) @@ -3875,10 +4016,11 @@ and by additional input from the age of a schedules or deadline entry." (switch-to-buffer-other-window buffer) (widen) (goto-char pos) - (org-show-hidden-entry) - (save-excursion - (and (outline-next-heading) - (org-flag-heading nil))))) ; show the next heading + (when (eq major-mode 'org-mode) + (org-show-hidden-entry) + (save-excursion + (and (outline-next-heading) + (org-flag-heading nil)))))) ; show the next heading (defun org-agenda-switch-to () "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." (delete-other-windows) (widen) (goto-char pos) - (org-show-hidden-entry) - (save-excursion - (and (outline-next-heading) - (org-flag-heading nil))))) ; show the next heading + (when (eq major-mode 'org-mode) + (org-show-hidden-entry) + (save-excursion + (and (outline-next-heading) + (org-flag-heading nil)))))) ; show the next heading (defun org-agenda-goto-mouse (ev) "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." (mouse-set-point ev) (org-agenda-show)) +(defun org-agenda-check-no-diary () + "Check if the entry is a diary link and abort if yes." + (if (get-text-property (point) 'org-agenda-diary-link) + (org-agenda-error))) + (defun org-agenda-error () (error "Command not allowed in this line.")) (defun org-agenda-todo () "Cycle TODO state of line at point, also in Org-mode file." (interactive) + (org-agenda-check-no-diary) (let* ((props (text-properties-at (point))) (col (current-column)) (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." (defun org-agenda-priority (&optional force-direction) "Set the priority of line at point, also in Org-mode file." (interactive) + (org-agenda-check-no-diary) (let* ((props (text-properties-at (point))) (col (current-column)) (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." (defun org-agenda-date-later (arg &optional what) "Change the date of this item to one day later." (interactive "p") + (org-agenda-check-no-diary) (let* ((marker (or (get-text-property (point) 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) @@ -4022,8 +4173,9 @@ and by additional input from the age of a schedules or deadline entry." (org-agenda-date-later (- arg) what)) (defun org-agenda-date-today (arg) - "Change the date of this item to one day later." + "Change the date of this item to today." (interactive "p") + (org-agenda-check-no-diary) (let* ((marker (or (get-text-property (point) 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) @@ -4084,7 +4236,91 @@ All the standard commands work: block, weekly etc" (get-text-property point 'day)))) (call-interactively cmd)) (fset 'calendar-cursor-to-date oldf))))) - + + +(defun org-agenda-execute-calendar-command (cmd) + "Execute a calendar command from the agenda, with the date associated to +the cursor position." + (require 'diary-lib) + (unless (get-text-property (point) 'day) + (error "Don't know which date to use for calendar command")) + (let* ((oldf (symbol-function 'calendar-cursor-to-date)) + (point (point)) + (mark (or (mark t) (point))) + (date (calendar-gregorian-from-absolute + (get-text-property point 'day))) + (displayed-day (extract-calendar-day date)) + (displayed-month (extract-calendar-month date)) + (displayed-year (extract-calendar-year date))) + (unwind-protect + (progn + (fset 'calendar-cursor-to-date + (lambda (&optional error) + (calendar-gregorian-from-absolute + (get-text-property point 'day)))) + (call-interactively cmd)) + (fset 'calendar-cursor-to-date oldf)))) + +(defun org-agenda-phases-of-moon () + "Display the phases of the moon for 3 month around cursor date." + (interactive) + (org-agenda-execute-calendar-command 'calendar-phases-of-moon)) + +(defun org-agenda-holidays () + "Display the holidays for 3 month around cursor date." + (interactive) + (org-agenda-execute-calendar-command 'list-calendar-holidays)) + +(defun org-agenda-sunrise-sunset (arg) + "Display sunrise and sunset for the cursor date. +Latitude and longitude can be specified with the variables +`calendar-latitude' and `calendar-longitude'. When called with prefix +argument, location will be prompted for." + (interactive "P") + (let ((calendar-longitude (if arg nil calendar-longitude)) + (calendar-latitude (if arg nil calendar-latitude)) + (calendar-location-name nil)) + (org-agenda-execute-calendar-command 'calendar-sunrise-sunset))) + +(defun org-agenda-goto-calendar () + "Open the Emacs calendar with the date at the cursor." + (interactive) + (let* ((day (or (get-text-property (point) 'day) + (error "Don't know which date to open in calendar"))) + (date (calendar-gregorian-from-absolute day))) + (calendar) + (calendar-goto-date date))) + +(defun org-agenda-convert-date () + (interactive) + (let ((day (get-text-property (point) 'day)) + date s) + (unless day + (error "Don't know which date to convert")) + (setq date (calendar-gregorian-from-absolute day)) + (require 'cal-julian) + (require 'cal-hebrew) + (require 'cal-islam) + (require 'cal-french) + (require 'cal-mayan) + (require 'cal-coptic) + (require 'cal-persia) + (require 'cal-china) + (setq s (concat + "Gregorian: " (calendar-date-string date) "\n" + "Julian: " (calendar-julian-date-string date) "\n" + "Astronomic: " (calendar-astro-date-string date) " (at noon UTC)\n" + "Hebrew: " (calendar-hebrew-date-string date) "\n" + "Islamic: " (calendar-islamic-date-string date) "\n" + "French: " (calendar-french-date-string date) "\n" + "Maya: " (calendar-mayan-date-string date) "\n" + "Coptic: " (calendar-coptic-date-string date) "\n" + "Persian: " (calendar-persian-date-string date) "\n" + "Chineese: " (calendar-chinese-date-string date) "\n")) + (with-output-to-temp-buffer "*Dates*" + (princ s)) + (fit-window-to-buffer (get-buffer-window "*Dates*")))) + ;;; Link Stuff (defun org-find-file-at-mouse (ev) @@ -5087,14 +5323,23 @@ Before doing so, re-align the table if necessary." (skip-chars-backward "^|\n\r") (if (looking-at " ") (forward-char 1))))) -(defun org-table-copy-from-above (n) - "Copy into the current column the nearest non-empty field from above. -With prefix argument N, take the Nth non-empty field." +(defun org-table-copy-down (n) + "Copy a field down in the current column. +If the field at the cursor is empty, copy into it the content of the nearest +non-empty field above. With argument N, use the Nth non-empty field. +If the current fields is not empty, it is copied down to the next row, and +the cursor is moved with it. Therefore, repeating this command causes the +column to be filled row-by-row. +If the variable `org-table-copy-increment' is non-nil and the field is an +integer, it will be incremented while copying." (interactive "p") - (let ((colpos (org-table-current-column)) - (beg (org-table-begin)) - txt) + (let* ((colpos (org-table-current-column)) + (field (org-table-get-field)) + (non-empty (string-match "[^ \t]" field)) + (beg (org-table-begin)) + txt) (org-table-check-inside-data-field) + (if non-empty (progn (org-table-next-row) (org-table-blank-field))) (if (save-excursion (setq txt (catch 'exit @@ -5103,10 +5348,13 @@ With prefix argument N, take the Nth non-empty field." beg t)) (org-table-goto-column colpos t) (if (and (looking-at - "|[ \t]*\\([^| \t][^|]*[^| \t]\\)[ \t]*|") + "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|") (= (setq n (1- n)) 0)) (throw 'exit (match-string 1))))))) (progn + (if (and org-table-copy-increment + (string-match "^[0-9]+$" txt)) + (setq txt (format "%d" (+ (string-to-int txt) 1)))) (insert txt) (org-table-align)) (error "No non-empty field found")))) @@ -6039,7 +6287,7 @@ table editor iin arbitrary modes.") ([(shift tab)] org-table-previous-field) ("\C-c\C-c" org-table-align) ([(return)] org-table-next-row) - ([(shift return)] org-table-copy-from-above) + ([(shift return)] org-table-copy-down) ([(meta return)] org-table-wrap-region) ("\C-c\C-q" org-table-wrap-region) ("\C-c?" org-table-current-column) @@ -6157,7 +6405,7 @@ a reduced column width." "--" ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] ["Copy field from above" - org-table-copy-from-above :active (org-at-table-p) :keys "S-RET"] + org-table-copy-down :active (org-at-table-p) :keys "S-RET"] "--" ("Column" ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-"] @@ -6678,7 +6926,57 @@ underlined headlines. The default is 3." (setq char (nth (- umax level) (reverse org-ascii-underline))) (if org-export-with-section-numbers (setq title (concat (org-section-number level) " " title))) - (insert title "\n" (make-string (length title) char) "\n")))) + (insert title "\n" (make-string (string-width title) char) "\n")))) + +(defun org-export-copy-visible (&optional arg) + "Copy the visible part of the buffer to another buffer, for printing. +Also removes the first line of the buffer it is specifies a mode, +and all options lines." + (interactive "P") + (let* ((filename (concat (file-name-sans-extension (buffer-file-name)) + ".txt")) + (buffer (find-file-noselect filename)) + (ore (concat + (org-make-options-regexp + '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO" "STARTUP" + "TITLE" "AUTHOR" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE")) + (if org-noutline-p "\\(\n\\|$\\)" ""))) + s e) + (save-excursion + (set-buffer buffer) + (erase-buffer) + (text-mode)) + (save-excursion + (setq s (goto-char (point-min))) + (while (not (= (point) (point-max))) + (goto-char (org-find-invisible)) + (append-to-buffer buffer s (point)) + (setq s (goto-char (org-find-visible))))) + (switch-to-buffer-other-window buffer) + (newline) + (goto-char (point-min)) + (if (looking-at ".*-\\*- mode:.*\n") + (replace-match "")) + (while (re-search-forward ore nil t) + (replace-match "")) + (goto-char (point-min)))) + +(defun org-find-visible () + (if (featurep 'noutline) + (let ((s (point))) + (while (and (not (= (point-max) (setq s (next-overlay-change s)))) + (get-char-property s 'invisible))) + s) + (skip-chars-forward "^\n") + (point))) +(defun org-find-invisible () + (if (featurep 'noutline) + (let ((s (point))) + (while (and (not (= (point-max) (setq s (next-overlay-change s)))) + (not (get-char-property s 'invisible)))) + s) + (skip-chars-forward "^\r") + (point))) ;; HTML @@ -7423,7 +7721,7 @@ When LEVEL is non-nil, increase section numbers on that level." (define-key org-mode-map [(shift tab)] 'org-shifttab) (define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) (define-key org-mode-map [(return)] 'org-return) -(define-key org-mode-map [(shift return)] 'org-table-copy-from-above) +(define-key org-mode-map [(shift return)] 'org-table-copy-down) (define-key org-mode-map [(meta return)] 'org-meta-return) (define-key org-mode-map [(control up)] 'org-move-line-up) (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." (define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region) (define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii) (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) +(define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible) +(define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible) +(define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml) +(define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml) (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) (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." ;; FIXME: Do we really need to save match data in these commands? ;; I would like to remove it in order to minimize impact. -;; Self-insert already does not preserve it. How much resources does this take??? +;; Self-insert already does not preserve it. How much resources used by this??? (defsubst org-table-p () (if (and (eq major-mode 'org-mode) font-lock-mode) @@ -7469,28 +7771,7 @@ overwritten, and the table is not marked as requiring realignment." ;; FIXME: ;; The following two functions might still be optimized to trigger -;; re-alignment less frequently. Right now they raise the flag each time -;; (through before-change-functions). Here is how this could be minimized: -;; Basically, check if the non-white field width before deletion is -;; equal to the column width. If yes, the delete should trigger a -;; re-align. I have not implemented this so far because it is not so -;; easy, requires grabbing the field etc. So it may finally have some -;; impact on typing performance which we don't want. - -;; The defsubst is only a draft, untested... - -;; Maybe it is not so important to get rid of realigns - maybe the most -;; important aspect is to keep the table look noce as long as possible, -;; which is already achieved... - -;(defsubst org-check-delete-triggers-realign () -; (let ((pos (point))) -; (skip-chars-backward "^|\n") -; (and (looking-at " *\\(.*?\\) *|") -; (= (nth (1- (org-table-current-column)) -; org-table-last-column-widths) -; (- (match-end 1) (match-beginning 1))) -; (setq org-table-may-need-update t)))) +;; re-alignment less frequently. (defun org-delete-backward-char (N) "Like `delete-backward-char', insert whitespace at field end in tables. @@ -7769,7 +8050,7 @@ the automatic table editor has been turned off." ["Next row" org-return (org-at-table-p)] "--" ["Blank field" org-table-blank-field (org-at-table-p)] - ["Copy field from above" org-table-copy-from-above (org-at-table-p)] + ["Copy field from above" org-table-copy-down (org-at-table-p)] "--" ("Column" ["Move column left" org-metaleft (org-at-table-p)] @@ -7807,8 +8088,10 @@ the automatic table editor has been turned off." "--" ("Export" ["ASCII" org-export-as-ascii t] + ["Extract visible text" org-export-copy-visible t] ["HTML" org-export-as-html t] ["HTML, and open" org-export-as-html-and-open t] + ["OPML" org-export-as-opml nil] "--" ["Option template" org-insert-export-options-template t] ["Toggle fixed width" org-toggle-fixed-width-section t]) @@ -8098,3 +8381,5 @@ When ENTRY is non-nil, show the entire entry." ;;; org.el ends here + + From 525f4f90f4bc5ecb480722d6ecfaaffd76400187 Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Wed, 30 Mar 2005 12:42:09 +0000 Subject: [PATCH 106/241] updated to org-mode version 3.05 --- man/org.texi | 107 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 24 deletions(-) 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 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 3.04 -@set DATE December 2004 +@set VERSION 3.05 +@set DATE April 2005 @dircategory Emacs @direntry @@ -34,7 +34,7 @@ @copying This manual is for Org-mode (version @value{VERSION}). -Copyright @copyright{} 2004 Free Software Foundation +Copyright @copyright{} 2004, 2005 Free Software Foundation @quotation 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 large files well structured. Visibility cycling and structure editing help to work with the tree. Tables are easily created with a built-in table editor. Org-mode supports ToDo items, deadlines, time stamps, -and scheduling. It dynamically compiles entries into an agenda. +and scheduling. It dynamically compiles entries into an agenda that +utilizes and smoothly integrates much of the Emacs calendar and diary. Plain text URL-like links connect to websites, emails, usenet messages, BBDB entries, and any files related to the projects. For 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 @r{@bullet{} as a full agenda and planner with deadlines and work scheduling} @end example -The Org-mode table editor can be used integrated into any major mode -by activating the minor Ortbl-mode. +The Org-mode table editor can be integrated into any major mode by +activating the minor Orgtbl-mode. There is a website for Org-mode which provides links to the newest version of Org-mode, as well as additional information, screen shots and example files. This page is located at @uref{http://www.astro.uva.nl/~dominik/Tools/org/}. - @page @node Installation, , Summary, Introduction @@ -352,6 +352,18 @@ Note that inside tables, @kbd{S-@key{TAB}} jumps to the previous field. Show all. @end table +When Emacs firsts visits a Org-mode file, the global state is set to +OVERVIEW, i.e. only the top level headlines are visible. This can be +configured through the variable @code{org-startup-folded}, or on a +per-file basis by adding one of the following lines anywhere in the +buffer: + +@example +#+STARTUP: fold +#+STARTUP: nofold +@end example + + @node Motion, Structure editing, Visibility cycling, Document Structure @section Motion @cindex motion, between headlines @@ -473,6 +485,17 @@ the match. Other commands are using this feature as well. For example @kbd{C-c C-v} creates a sparse TODO tree (@pxref{TODO basics}). +@kindex C-c C-x v +@cindex printing sparse trees +@cindex visible text, printing +To print a sparse tree, you can use the Emacs command +@code{ps-print-buffer-with-faces} which does not print invisible parts +of the document @footnote{this does not work under XEmacs, because +XEmacs uses selective display for outlining, not text properties}. +Or you can use the command @kbd{C-c C-x v} to copy the visible part of +the document to another file (extension @file{.txt}) which then can be +printed in any desired way. + @node TODO items, Tables, Document Structure, Top @chapter TODO items @cindex TODO items @@ -611,7 +634,7 @@ persons. @end lisp In this case, different keywords do not indicate a sequence, but -rather different levels. This changes the behavior of the command +rather different types. This changes the behavior of the command @kbd{C-c C-t} slightly. When used several times in succession, it will still cycle through all names. But when when you return to the 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 necessary. At the beginning or end of a line, @key{RET} still does NEWLINE, so it can be used to split a table. -@kindex S-@key{RET} -@item S-@key{RET} -Copy from first non-empty - field above current field. - @tsubheading{Column and row editing} @kindex M-@key{left} @kindex M-@key{right} @@ -796,7 +814,7 @@ Copy an rectangular region from a table to a special clipboard, and blank all fields in the rectangle. @kindex C-c C-h C-y @item C-c C-h C-y -Paste a rectangluar region into a table. +Paste a rectangular region into a table. The upper right corner ends up in the current field. All involved fields will be overwritten. If the rectangle does not fit into the present table, 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 the active region. The result is displayed in the echo area and can be inserted with @kbd{C-y}. +@kindex S-@key{RET} +@item S-@key{RET} +When current field is empty, copy from first non-empty field above. +When not empty, copy current field down to next row and move cursor +along with it. Depending on the variable +@code{org-table-copy-increment}, integer field values will be +incremented during copy. + @cindex formula, in tables @cindex calculations, in tables @kindex C-c = @@ -1063,7 +1089,7 @@ text has a headline, i.e. a first line that starts with a @samp{*}. If not, a headline is constructed from the current date and some additional data. If the variable @code{org-adapt-indentation} is non-nil, the entire text is also indented so that it starts in the -same column as the headline (after the asterixes). +same column as the headline (after the asterisks). @node Timestamps, Timeline and Agenda, Hyperlinks, Top @chapter Timestamps @@ -1404,11 +1430,12 @@ Sorting can be customized using the variable @node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda @section Commands in the agenda buffer -Entries in the agenda buffer are linked back to the org file. You are -not allowed to edit the agenda buffer itself, but commands are provided -to edit the org-files ``remotely'' from the agenda buffer. In this -way, all information is stored only once, and you don't risk that your -agenda and note files diverge. +Entries in the agenda buffer are linked back to the org file or diary +file where they originate. You are not allowed to edit the agenda +buffer itself, but commands are provided to show and jump to the +original entry location, and to edit the org-files ``remotely'' from +the agenda buffer. In this way, all information is stored only once, +and you don't risk that your agenda and note files diverge. Some commands can be executed with mouse clicks on agenda lines. For the other commands, the cursor needs to be in the desired line. Most @@ -1468,7 +1495,7 @@ S-@key{right}. Display the following @code{org-agenda-ndays} days. For example, if the display covers a week, switch to the following week. With prefix arg, go forward that many times @code{org-agenda-ndays} days. Not -available in timlines. +available in timelines. @kindex @key{left} @item @key{left} @@ -1536,6 +1563,29 @@ Insert a new entry into the diary. Prompts for the type of entry entry in the diary, just like @kbd{i d} etc. would do in the calendar. The date is taken from the cursor position. +@tsubheading{Calendar commands} +@kindex c +@item c +Open the Emacs calendar and move to the date at the agenda cursor. + +@kindex C +@item C +Convert the date at cursor into many other cultural and historic +calendars. + +@kindex M +@item M +Show the phases of the moon for three month around current date. + +@kindex S +@item S +Show sunrise and sunset times. The location must be set with calendar +variables, see documentation of the Emacs calendar. + +@kindex H +@item H +Show holidays for three month around the cursor date. + @tsubheading{Quit and Exit} @kindex q @item q @@ -1564,8 +1614,9 @@ Org-mode. It can be very useful to combine output from Org-mode with the diary. The interaction between Org-mode and diary works both ways: You can -list entries from the diary in the Org-mode agenda, or you can display -entries from the org agenda in the Emacs diary. +list entries from the diary in the Org-mode agenda, from which many +calendar and diary commands are directly accessible. Or you can +display entries from the org agenda in the Emacs diary. @menu * Diary to agenda:: Agenda incorporates the diary @@ -1584,7 +1635,15 @@ agenda, you only need to customize the variable @end lisp @noindent -@noindent After that, everything will happen automatically. +@noindent After that, everything will happen automatically. All diary +entries including holidays, anniversaries etc will be included in the +agenda buffer created by Org-mode. @key{SPC}, @key{TAB}, and +@key{RET} can be used from the agenda buffer to jump to the diary +file, in order to edit existing diary entries. Also the @kbd{i} +command to insert new entries for the current date works in the agenda +buffer, as well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to +display Sunrise/Sunset times, show lunar phases and to convert to +other calendars, respectively. @node Agenda to diary, , Diary to agenda, Calendar/Diary integration @subsection Including the agenda into the diary From 4fdb2a6c9d2b435b2dc531d8b6970adc61b075da Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 30 Mar 2005 15:12:19 +0000 Subject: [PATCH 107/241] *** empty log message *** --- lisp/ChangeLog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0f049936249..93703979279 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2005-03-30 Glenn Morris + + * filesets.el (filesets-menu-path, filesets-menu-before) + (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs. + (filesets-menu-cache-file): Use directory ~/.emacs.d. + (filesets-add-submenu): Delete and use add-submenu instead. + 2005-03-30 Carsten Dominik * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) From 204451b633c383743d4603148151e36df4f05de1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 30 Mar 2005 15:14:55 +0000 Subject: [PATCH 108/241] Update copyright. (filesets-menu-path, filesets-menu-before) (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs. (filesets-menu-cache-file): Use directory ~/.emacs.d. (filesets-add-submenu): Delete and use add-submenu instead. --- lisp/ChangeLog | 3 +++ lisp/filesets.el | 57 +++++++++++++++++++----------------------------- 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 93703979279..2c2a30d3159 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2005-03-30 Glenn Morris + * calendar/appt.el (appt-buffer-name): Make it a constant. + (appt-add): Doc fix. + * filesets.el (filesets-menu-path, filesets-menu-before) (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs. (filesets-menu-cache-file): Use directory ~/.emacs.d. diff --git a/lisp/filesets.el b/lisp/filesets.el index faba379db03..13ddfa5a84d 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el @@ -1,6 +1,6 @@ ;;; filesets.el --- handle group of files -;; Copyright (C) 2002 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2005 Free Software Foundation, Inc. ;; Author: Thomas Link ;; Maintainer: FSF @@ -304,31 +304,26 @@ key is supported." :type 'sexp :group 'filesets) -(if filesets-running-xemacs - (progn - (defcustom filesets-menu-path nil - "*The menu under which the filesets menu should be inserted. -XEmacs specific; see `add-submenu' for documentation." - :set (function filesets-set-default) - :type 'sexp - :group 'filesets) +(defcustom filesets-menu-path nil + "*The menu under which the filesets menu should be inserted. +See `add-submenu' for documentation." + :set (function filesets-set-default) + :type 'sexp + :group 'filesets) - (defcustom filesets-menu-before "File" - "*The name of a menu before which this menu should be added. -XEmacs specific; see `add-submenu' for documentation." - :set (function filesets-set-default) - :type 'sexp - :group 'filesets) +(defcustom filesets-menu-before "File" + "*The name of a menu before which this menu should be added. +See `add-submenu' for documentation." + :set (function filesets-set-default) + :type 'sexp + :group 'filesets) - (defcustom filesets-menu-in-menu nil - "*Use that instead of `current-menubar' as the menu to change. -XEmacs specific; see `add-submenu' for documentation." - :set (function filesets-set-default) - :type 'sexp - :group 'filesets)) - (defvar filesets-menu-path nil) - (defvar filesets-menu-before nil) - (defvar filesets-menu-in-menu nil)) +(defcustom filesets-menu-in-menu nil + "*Use that instead of `current-menubar' as the menu to change. +See `add-submenu' for documentation." + :set (function filesets-set-default) + :type 'sexp + :group 'filesets) (defcustom filesets-menu-shortcuts-flag t "*Non-nil means to prepend menus with hopefully unique shortcuts." @@ -351,7 +346,7 @@ XEmacs specific; see `add-submenu' for documentation." (defcustom filesets-menu-cache-file (if filesets-running-xemacs "~/.xemacs/filesets-cache.el" - "~/.filesets-cache.el") + "~/.emacs.d/filesets-cache.el") "*File to be used for saving the filesets menu between sessions. Set this to \"\", to disable caching of menus. Don't forget to check out `filesets-menu-ensure-use-cached'." @@ -1070,9 +1065,7 @@ defined in `filesets-ingroup-patterns'." ;;; Emacs compatibility (eval-and-compile (if filesets-running-xemacs - (progn - (fset 'filesets-error 'error) - (fset 'filesets-add-submenu 'add-submenu)) + (fset 'filesets-error 'error) (require 'easymenu) @@ -1080,12 +1073,6 @@ defined in `filesets-ingroup-patterns'." "`error' wrapper." (error (mapconcat 'identity args " "))) - ;; This should work for 21.1 Emacs - (defun filesets-add-submenu (menu-path submenu &optional - before in-menu) - "`easy-menu-define' wrapper." - (easy-menu-define - filesets-submenu global-map "Filesets menu" submenu)) )) (defun filesets-filter-dir-names (lst &optional negative) @@ -2339,7 +2326,7 @@ bottom up, set `filesets-submenus' to nil, first.)" (filesets-menu-cache-file-save-maybe))) (let ((cb (current-buffer))) (when (not (member cb filesets-updated-buffers)) - (filesets-add-submenu + (add-submenu filesets-menu-path `(,filesets-menu-name ("# Filesets" From 9080baba9141f2512981813264910a566fec436b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 30 Mar 2005 15:18:09 +0000 Subject: [PATCH 109/241] Update maintainer. (appt-buffer-name): Make it a constant. (appt-add): Doc fix. --- lisp/ChangeLog | 4 ++++ lisp/calendar/appt.el | 9 ++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2c2a30d3159..535c536b69e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2005-03-30 Glenn Morris + * calendar/cal-x.el (calendar-one-frame-setup) + (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t + rather than 'symbol for set-window-dedicated-p. + * calendar/appt.el (appt-buffer-name): Make it a constant. (appt-add): Doc fix. 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 @@ ;;; appt.el --- appointment notification functions -;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. ;; Author: Neil Mager -;; Maintainer: FSF +;; Maintainer: Glenn Morris ;; Keywords: calendar ;; This file is part of GNU Emacs. @@ -181,7 +181,7 @@ Only relevant if reminders are being displayed in a window." ;;; Internal variables below this point. -(defvar appt-buffer-name " *appt-buf*" +(defconst appt-buffer-name " *appt-buf*" "Name of the appointments buffer.") (defvar appt-time-msg-list nil @@ -486,9 +486,8 @@ Usually just deletes the appointment buffer." ;;;###autoload (defun appt-add (new-appt-time new-appt-msg) - "Add an appointment for the day at NEW-APPT-TIME and issue message NEW-APPT-MSG. + "Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG. The time should be in either 24 hour format or am/pm format." - (interactive "sTime (hh:mm[am/pm]): \nsMessage: ") (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" new-appt-time) From ed554ebd2f6a59d594af2afa50051b6c090ff6e8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 30 Mar 2005 15:18:52 +0000 Subject: [PATCH 110/241] Update copyright and maintainer. (calendar-one-frame-setup) (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t rather than 'symbol for set-window-dedicated-p. --- lisp/calendar/cal-x.el | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 @@ ;;; cal-x.el --- calendar windows in dedicated frames in X -;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1995, 2005 Free Software Foundation, Inc. ;; Author: Michael Kifer ;; Edward M. Reingold +;; Maintainer: Glenn Morris ;; Keywords: calendar ;; Human-Keywords: calendar, dedicated frames, X Window System @@ -88,7 +89,7 @@ This function requires a display capable of multiple frames, else (frame-parameters calendar-frame)))) (iconify-or-deiconify-frame)) (calendar-basic-setup arg) - (set-window-dedicated-p (selected-window) 'calendar) + (set-window-dedicated-p (selected-window) t) (set-window-dedicated-p (display-buffer (if (not (memq 'fancy-diary-display diary-display-hook)) @@ -96,7 +97,7 @@ This function requires a display capable of multiple frames, else (if (not (bufferp (get-buffer fancy-diary-buffer))) (make-fancy-diary-buffer)) fancy-diary-buffer)) - 'diary)))))) + t)))))) (defun calendar-only-one-frame-setup (&optional arg) "Start calendar and display it in a dedicated frame. @@ -117,7 +118,7 @@ This function requires a display capable of multiple frames, else (frame-parameters calendar-frame)))) (iconify-or-deiconify-frame)) (calendar-basic-setup arg) - (set-window-dedicated-p (selected-window) 'calendar)))))) + (set-window-dedicated-p (selected-window) t)))))) (defun calendar-two-frame-setup (&optional arg) "Start calendar and diary in separate, dedicated frames. @@ -139,7 +140,7 @@ This function requires a display capable of multiple frames, else (frame-parameters calendar-frame)))) (iconify-or-deiconify-frame)) (display-buffer calendar-buffer) - (set-window-dedicated-p (selected-window) 'calendar) + (set-window-dedicated-p (selected-window) t) (setq diary-frame (make-frame diary-frame-parameters)) (run-hooks 'calendar-after-frame-setup-hooks) (select-frame diary-frame) @@ -154,7 +155,7 @@ This function requires a display capable of multiple frames, else (if (not (bufferp (get-buffer fancy-diary-buffer))) (make-fancy-diary-buffer)) fancy-diary-buffer)) - 'diary))))) + t))))) ;; Formerly (get-file-buffer diary-file) was added to the list here, ;; but that isn't clean, and the value could even be nil. From 30439bfa93253a70d44bdc231e3f1e200e754dc3 Mon Sep 17 00:00:00 2001 From: Thien-Thi Nguyen Date: Wed, 30 Mar 2005 15:27:56 +0000 Subject: [PATCH 111/241] Add title line. --- etc/TUTORIAL | 1 + etc/TUTORIAL.bg | 1 + etc/TUTORIAL.cn | 1 + etc/TUTORIAL.cs | 1 + etc/TUTORIAL.de | 1 + etc/TUTORIAL.es | 1 + etc/TUTORIAL.fr | 1 + etc/TUTORIAL.it | 1 + etc/TUTORIAL.ja | 1 + etc/TUTORIAL.ko | 1 + etc/TUTORIAL.nl | 1 + etc/TUTORIAL.pl | 1 + etc/TUTORIAL.pt_BR | 1 + etc/TUTORIAL.ro | 1 + etc/TUTORIAL.ru | 1 + etc/TUTORIAL.sk | 1 + etc/TUTORIAL.sl | 1 + etc/TUTORIAL.sv | 1 + etc/TUTORIAL.th | 1 + etc/TUTORIAL.zh | 1 + 20 files changed, 20 insertions(+) diff --git a/etc/TUTORIAL b/etc/TUTORIAL index b5632ae707b..dd3b25bce3b 100644 --- a/etc/TUTORIAL +++ b/etc/TUTORIAL @@ -1,3 +1,4 @@ +Emacs Tutorial You are looking at the Emacs tutorial. See end for copying conditions. Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. 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 @@ +âúâåäåíèåòî íà Åìàêñ Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. 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 @@ +Emacs ¿ìËÙÖ¸ÄÏ ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 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 @@ +tutoriál k Emacsu Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci. Do èe¹tiny pøelo¾il Milan Zamazal . 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 @@ +Einführung in Emacs Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc. 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 @@ +tutorial de Emacs Usted esta viendo el tutorial de Emacs. Vea al final las condiciones de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software 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 @@ +Didacticiel d'Emacs Didacticiel d'Emacs. Voir la fin de ce document pour les conditions. Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc. 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 @@ +Esercitazione di Emacs Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc. Condizioni d'uso alla fine del file. 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 @@ +Emacs $BF~Lg%,%$%I$G$9(B $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 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 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 @@ +$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B $(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B $(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B. 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 @@ +Emacs-inleiding Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan. Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation 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 @@ +krótki samouczek Emacsa Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001 Free Software Foundation, Inc. Szczegó³y na koñcu pliku. 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 @@ +Tutorial do Emacs Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as condições. 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 @@ +tutorialului de Emacs Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*- Traducere din englezã de Tudor Hulubei . Mulþumiri Aidei Hulubei 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 @@ +ÕÞÅÂÎÉË Emacs ÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ. Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. 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 @@ +tútorial k Emacsu Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci. Do èe¹tiny prelo¾il Milan Zamazal , do slovenèiny Miroslav Va¹ko . 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 @@ +Prvo berilo za Emacs Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu. Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. 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 @@ +användarhandledningen till Emacs Detta är den Svenska användarhandledningen till Emacs. I slutet finns kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free 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 @@ +0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B ,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B. 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 @@ +Emacs §Ö³t«ü«n¡] ±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£­¶§À¦³Ãö½Æ»s±ø¥ó¡C Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. From c48d7fa0abfb0b7272c8f1077bc0e81e67ca08a2 Mon Sep 17 00:00:00 2001 From: Thien-Thi Nguyen Date: Wed, 30 Mar 2005 15:44:40 +0000 Subject: [PATCH 112/241] (help-with-tutorial): Delete title line. --- lisp/help-fns.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 4bf0a4775a0..9231f959c64 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -65,6 +65,8 @@ With ARG, you are asked to choose which language." (insert-file-contents (expand-file-name filename data-directory)) (hack-local-variables) (goto-char (point-min)) + ;; The first line conventionally contains the title. + (delete-region (point) (progn (forward-line 1) (point))) (search-forward "\n<<") (beginning-of-line) ;; Convert the <<...>> line to the proper [...] line, From 19577b0e2164405bf9674bc40c4ca0638a8ca2cb Mon Sep 17 00:00:00 2001 From: Thien-Thi Nguyen Date: Wed, 30 Mar 2005 15:46:12 +0000 Subject: [PATCH 113/241] *** empty log message *** --- etc/ChangeLog | 9 +++++++++ lisp/ChangeLog | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 4272d50cf2a..aaefbea4b09 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,12 @@ +2005-03-30 Thien-Thi Nguyen + + * TUTORIAL: Add title line. + * TUTORIAL.bg, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, + * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, + * TUTORIAL.ko, TUTORIAL.nl, TUTORIAL.pl, TUTORIAL.pt_BR, + * TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl + * TUTORIAL.sv, TUTORIAL.th, TUTORIAL.zh: Likewise. + 2005-03-29 Reiner Steib * gnus-refcard.tex, gnus-logo.eps: New files. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 535c536b69e..253f97c9904 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-30 Thien-Thi Nguyen + + * help-fns.el (help-with-tutorial): Delete title line. + 2005-03-30 Glenn Morris * calendar/cal-x.el (calendar-one-frame-setup) @@ -14,7 +18,7 @@ 2005-03-30 Carsten Dominik - * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) + * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) (org-agenda-convert-date, org-agenda-goto-calendar): New commands. (org-diary-default-entry): New function. (org-get-entries-from-diary): Better parsing of diary entries From 0a2bf0fadd9ea8d35dde06192a2dd2ecc8e523d9 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Wed, 30 Mar 2005 16:36:59 +0000 Subject: [PATCH 114/241] (calc-full-help): Remove email address. --- lisp/ChangeLog | 4 ++++ lisp/calc/calc-help.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 253f97c9904..51a8e3cdb13 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-30 Jay Belanger + + * calc/calc-help.el (calc-full-help): Remove email address. + 2005-03-30 Thien-Thi Nguyen * help-fns.el (help-with-tutorial): Delete title line. diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index 27571191a5a..46b8cec2ac6 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el @@ -411,7 +411,7 @@ C-w Describe how there is no warranty for Calc." (with-output-to-temp-buffer "*Help*" (princ (format "GNU Emacs Calculator version %s.\n" calc-version)) - (princ " By Dave Gillespie, daveg@synaptics.com.\n") + (princ " By Dave Gillespie.\n") (princ " Copyright (C) 2005 Free Software Foundation, Inc.\n\n") (princ "Type `h s' for a more detailed summary.\n") (princ "Or type `h i' to read the full Calc manual on-line.\n\n") From fffaba7760cc11b784c80f42d69229fc127a5070 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 30 Mar 2005 16:55:58 +0000 Subject: [PATCH 115/241] Update reference to "Calendrical Calculations" book; there's a new edition. --- lisp/ChangeLog | 20 ++++++++++++++++++++ lisp/calendar/cal-china.el | 4 ++-- lisp/calendar/cal-coptic.el | 4 ++-- lisp/calendar/cal-french.el | 4 ++-- lisp/calendar/cal-hebrew.el | 4 ++-- lisp/calendar/cal-islam.el | 4 ++-- lisp/calendar/cal-iso.el | 4 ++-- lisp/calendar/cal-julian.el | 4 ++-- lisp/calendar/cal-mayan.el | 4 ++-- lisp/calendar/cal-persia.el | 4 ++-- lisp/calendar/calendar.el | 8 ++++---- lisp/calendar/holidays.el | 4 ++-- lisp/calendar/lunar.el | 4 ++-- lisp/calendar/solar.el | 4 ++-- 14 files changed, 48 insertions(+), 28 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 51a8e3cdb13..c6dd55c8fe4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,23 @@ +2005-03-30 Paul Eggert + + * calendar/cal-china.el: Update reference to "Calendrical + Calculations" book; there's a new edition. + * calendar/cal-coptic.el: Likewise. + * calendar/cal-french.el: Likewise. + * calendar/cal-hebrew.el: Likewise. + * calendar/cal-islam.el: Likewise. + * calendar/cal-iso.el: Likewise. + * calendar/cal-julian.el: Likewise. + * calendar/cal-mayan.el: Likewise. + * calendar/cal-persia.el: Likewise. + * calendar/calendar.el: Likewise. + * calendar/holidays.el: Likewise. + * calendar/lunar.el: Likewise. + * calendar/solar.el: Likewise. + + * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing + white space from doc string. + 2005-03-30 Jay Belanger * calc/calc-help.el (calc-full-help): Remove email address. 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 @@ ;; The date of Chinese New Year is correct from 1644-2051. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; diary.el that deal with the Coptic and Ethiopic calendars. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; diary.el that deal with the French Revolutionary calendar. ;; Technical details of the French Revolutionary calendar can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997), and in +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001), and in ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by ;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and ;; 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 @@ ;; diary.el that deal with the Hebrew calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; diary.el that deal with the Islamic calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; diary.el that deal with the ISO calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; diary.el that deal with the Julian calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; Comments, improvements, and bug reports should be sent to Reingold. ;; Technical details of the Mayan calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997), and in +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001), and in ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' ;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), 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 @@ ;; diary.el that deal with the Persian calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index 89d32c4952b..5fc23a15cc9 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -75,13 +75,13 @@ ;; solar.el Sunrise/sunset, equinoxes/solstices ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; An earlier version of the technical details appeared in ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, ;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990), -;; pages 899-928. ``Calendrical Calculations, Part II: Three Historical +;; pages 899-928, and in ``Calendrical Calculations, Part II: Three Historical ;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen, ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), ;; pages 383-404. @@ -2763,7 +2763,7 @@ in `calendar-day-name-array'. These abbreviations may be used instead of the full names in the diary file. Do not include a trailing `.' in the strings specified in this variable, though you may use such in the diary file. If any element of this array -is nil, then the abbreviation will be constructed as the first +is nil, then the abbreviation will be constructed as the first `calendar-abbrev-length' characters of the corresponding full name.") (defvar calendar-month-name-array 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 @@ ;; in calendar.el. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; An earlier version of the technical details appeared in ;; ``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 @@ ;; person rewrite the code for the lunar calculations in this file! ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; 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 @@ ;; 1951--2050. For other years the times will be within +/- 1 minute. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science From 7ab4753e4932491f40cc8b6af63b6ed87bfa4519 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Wed, 30 Mar 2005 22:20:08 +0000 Subject: [PATCH 116/241] *** empty log message *** --- lisp/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6dd55c8fe4..0ff9aef089b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-31 Kim F. Storm + + * emulation/cua-base.el (cua-scroll-down): Add CUA property. + 2005-03-30 Paul Eggert * calendar/cal-china.el: Update reference to "Calendrical From ec503c284c7c59d1f0b57fccad0f8ebc89f82d05 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Wed, 30 Mar 2005 22:20:24 +0000 Subject: [PATCH 117/241] (cua-scroll-down): Add CUA property. --- lisp/emulation/cua-base.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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." (scroll-down arg) (beginning-of-buffer (goto-char (point-min))))))) -(put 'cua-scroll-up 'CUA 'move) +(put 'cua-scroll-down 'CUA 'move) ;;; Cursor indications From f34574c6d51766120439a80da418a2700309c798 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 30 Mar 2005 22:33:00 +0000 Subject: [PATCH 118/241] (search_embedded_absfilename): Fix last change. --- src/fileio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileio.c b/src/fileio.c index 58efa38c254..7e24c94783b 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2078,7 +2078,7 @@ search_embedded_absfilename (nm, endp) #if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) /* // at start of file name is meaningful in Apollo, WindowsNT and Cygwin systems. */ - && !(IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) + && !(IS_DIRECTORY_SEP (p[0]) && p - 1 == nm) #endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ ) { From 5ee2cf8a5a6e0166b6ec123764db2733caff60b8 Mon Sep 17 00:00:00 2001 From: Thien-Thi Nguyen Date: Wed, 30 Mar 2005 22:51:39 +0000 Subject: [PATCH 119/241] (help-with-tutorial): Revert last change. --- lisp/ChangeLog | 4 ++++ lisp/help-fns.el | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0ff9aef089b..157e03282c4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-03-31 Thien-Thi Nguyen + + * help-fns.el (help-with-tutorial): Revert last change. + 2005-03-31 Kim F. Storm * emulation/cua-base.el (cua-scroll-down): Add CUA property. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 9231f959c64..4bf0a4775a0 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -65,8 +65,6 @@ With ARG, you are asked to choose which language." (insert-file-contents (expand-file-name filename data-directory)) (hack-local-variables) (goto-char (point-min)) - ;; The first line conventionally contains the title. - (delete-region (point) (progn (forward-line 1) (point))) (search-forward "\n<<") (beginning-of-line) ;; Convert the <<...>> line to the proper [...] line, From ace4dad6d2edc4cb8b99637aeeda0cd3e0cb7e08 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 31 Mar 2005 00:24:57 +0000 Subject: [PATCH 120/241] shell-quote-argument, not comint-quote-filename --- lisp/ChangeLog | 12 +++++++++++- lisp/textmodes/tex-mode.el | 8 ++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 157e03282c4..f123732ed9e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2005-03-31 Karl Berry + + * textmodes/tex-mode.el (tex-compile): shell-quote-argument, + not comint-quote-filename. + +2005-03-31 Olive Lin (tiny change) + + * textmodes/tex-mode.el (tex-start-tex) shell-quote-argument, + not comint-quote-filename. + 2005-03-31 Thien-Thi Nguyen * help-fns.el (help-with-tutorial): Revert last change. @@ -157,7 +167,7 @@ * vc.el (vc-do-command): Use a pipe for async processes, so password prompts don't show up at places where the user can't reply. -2005-03-29 Olive Lin +2005-03-29 Olive Lin (tiny change) * textmodes/tex-mode.el (tex-send-command): shell-quote-argument on the file name we pass to the inferior shell. diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 285f25dec88..cc9ed23c6be 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el @@ -1887,8 +1887,8 @@ FILE is typically the output DVI or PDF file." (prog1 (file-name-directory (expand-file-name file)) (setq file (file-name-nondirectory file)))) (root (file-name-sans-extension file)) - (fspec (list (cons ?r (comint-quote-filename root)) - (cons ?f (comint-quote-filename file)))) + (fspec (list (cons ?r (shell-quote-argument root)) + (cons ?f (shell-quote-argument file)))) (default (tex-compile-default fspec))) (list default-directory (completing-read @@ -1909,14 +1909,14 @@ FILE is typically the output DVI or PDF file." (compile-command (if star (concat (substring command 0 star) - (comint-quote-filename file) + (shell-quote-argument file) (substring command (1+ star))) (concat command " " tex-start-options (if (< 0 (length tex-start-commands)) (concat (shell-quote-argument tex-start-commands) " ")) - (comint-quote-filename file))))) + (shell-quote-argument file))))) (tex-send-tex-command compile-command dir))) (defun tex-send-tex-command (cmd &optional dir) From 7c315e1cff9019c8af55921fab6f571e68b09623 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 31 Mar 2005 04:45:27 +0000 Subject: [PATCH 121/241] (fill-text-properties-at): New function. (fill-newline): Use fill-text-properties-at instead of text-properties-at. --- lisp/ChangeLog | 6 ++++++ lisp/textmodes/fill.el | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f123732ed9e..a0a670300dc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-03-31 Kenichi Handa + + * textmodes/fill.el (fill-text-properties-at): New function. + (fill-newline): Use fill-text-properties-at instead of + text-properties-at. + 2005-03-31 Karl Berry * textmodes/tex-mode.el (tex-compile): shell-quote-argument, 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." ;; Make sure we take SOMETHING after the fill prefix if any. (fill-find-break-point linebeg))))) +;; Like text-properties-at but don't include `composition' property. +(defun fill-text-properties-at (pos) + (let ((l (text-properties-at pos)) + prop-list) + (while l + (unless (eq (car l) 'composition) + (setq prop-list + (cons (car l) (cons (cadr l) prop-list)))) + (setq l (cddr l))) + prop-list)) + (defun fill-newline () ;; Replace whitespace here with one newline, then ;; indent to left margin. @@ -546,7 +557,7 @@ The break position will be always after LINEBEG and generally before point." (insert ?\n) ;; Give newline the properties of the space(s) it replaces (set-text-properties (1- (point)) (point) - (text-properties-at (point))) + (fill-text-properties-at (point))) (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?") (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|) (match-end 2)) From e5729c6cf66d54c620caed4949b6075d254d6b9d Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 31 Mar 2005 07:38:37 +0000 Subject: [PATCH 122/241] (thai-find-word-ends): Pay attention to the case that we reach the end of buffer. --- lisp/ChangeLog | 3 +++ lisp/language/thai-word.el | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a0a670300dc..de590d8833c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2005-03-31 Kenichi Handa + * language/thai-word.el (thai-find-word-ends): Pay attention to + the case that we reach the end of buffer. + * textmodes/fill.el (fill-text-properties-at): New function. (fill-newline): Use fill-text-properties-at instead of text-properties-at. diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el index 9c3ba81859e..2548a44ea80 100644 --- a/lisp/language/thai-word.el +++ b/lisp/language/thai-word.el @@ -10780,7 +10780,7 @@ the current word list." ;; character by character. (while this (setq pos (1+ pos) - char (char-after pos) + char (or (char-after pos) 0) category-set (char-category-set char)) ;; If the current sequence is recorded in `thai-word-table' ;; (i.e. (car THIS) is 1) and the following Thai character is From 34514f4824cf2ee59f622694fd9e49c5a7f20841 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 10:08:17 +0000 Subject: [PATCH 123/241] *** empty log message *** --- lisp/ChangeLog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index de590d8833c..50688318f93 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2005-03-31 Kim F. Storm + + * mouse.el (mouse-1-click-follows-link): Increase to 450 ms. + (mouse-fixup-help-message): New defun called by show_help_echo. + + * tooltip.el (tooltip-show-help-function): Don't rewrite mouse-2 + prefix in tooltip message. + 2005-03-31 Kenichi Handa * language/thai-word.el (thai-find-word-ends): Pay attention to From 5dbda518485a35ebf86dacc84fad357e55b53417 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 10:10:25 +0000 Subject: [PATCH 124/241] (mouse-1-click-follows-link): Increase to 450 ms. (mouse-fixup-help-message): New defun called by show_help_echo to fixup mouse-2 prefix in help messages when applicable. --- lisp/mouse.el | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lisp/mouse.el b/lisp/mouse.el index fdc99205780..a409efadeca 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -49,7 +49,7 @@ :version "22.1" :group 'mouse) -(defcustom mouse-1-click-follows-link 350 +(defcustom mouse-1-click-follows-link 450 "Non-nil means that clicking Mouse-1 on a link follows the link. With the default setting, an ordinary Mouse-1 click on a link @@ -837,6 +837,29 @@ at the same position." (funcall action pos)) (t action))))))) +(defun mouse-fixup-help-message (msg) + "Fix help message MSG for `mouse-1-click-follows-link'." + (let (mp pos) + (if (and mouse-1-click-follows-link + (stringp msg) + (save-match-data + (string-match "^mouse-2" msg)) + (setq mp (mouse-pixel-position)) + (consp (setq pos (cdr mp))) + (car pos) (>= (car pos) 0) + (cdr pos) (>= (cdr pos) 0) + (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp))) + (windowp (posn-window pos))) + (with-current-buffer (window-buffer (posn-window pos)) + (if (mouse-on-link-p pos) + (setq msg (concat + (cond + ((eq mouse-1-click-follows-link 'double) "double-") + ((and (integerp mouse-1-click-follows-link) + (< mouse-1-click-follows-link 0)) "Long ") + (t "")) + "mouse-1" (substring msg 7))))))) + msg) (defun mouse-drag-region-1 (start-event) (mouse-minibuffer-check start-event) @@ -886,6 +909,7 @@ at the same position." (track-mouse (while (progn (setq event (read-event)) + (setq mve (cons event (and (boundp 'mve) mve))) (or (mouse-movement-p event) (memq (car-safe event) '(switch-frame select-window)))) (if (memq (car-safe event) '(switch-frame select-window)) @@ -997,7 +1021,7 @@ at the same position." (= (window-start start-window) start-window-start))) (if (and on-link - (not end-point) + (or (not end-point) (= end-point start-point)) (consp event) (or remap-double-click (and From 86f0d417c40387dadcba585b37911c86c4a1c56c Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 10:10:39 +0000 Subject: [PATCH 125/241] (tooltip-show-help-function): Don't fixup message here. --- lisp/tooltip.el | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/lisp/tooltip.el b/lisp/tooltip.el index e6a85439166..59f82c12e31 100644 --- a/lisp/tooltip.el +++ b/lisp/tooltip.el @@ -469,27 +469,7 @@ This function must return nil if it doesn't handle EVENT." (defun tooltip-show-help-function (msg) "Function installed as `show-help-function'. MSG is either a help string to display, or nil to cancel the display." - (let ((previous-help tooltip-help-message) - mp pos) - (if (and mouse-1-click-follows-link - (stringp msg) - (save-match-data - (string-match "^mouse-2" msg)) - (setq mp (mouse-pixel-position)) - (consp (setq pos (cdr mp))) - (car pos) (>= (car pos) 0) - (cdr pos) (>= (cdr pos) 0) - (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp))) - (windowp (posn-window pos))) - (with-current-buffer (window-buffer (posn-window pos)) - (if (mouse-on-link-p pos) - (setq msg (concat - (cond - ((eq mouse-1-click-follows-link 'double) "double-") - ((and (integerp mouse-1-click-follows-link) - (< mouse-1-click-follows-link 0)) "Long ") - (t "")) - "mouse-1" (substring msg 7)))))) + (let ((previous-help tooltip-help-message)) (setq tooltip-help-message msg) (cond ((null msg) ;; Cancel display. This also cancels a delayed tip, if From f793f88572253947eff8d61d2ce28ffcee04ecb8 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 10:10:59 +0000 Subject: [PATCH 126/241] *** empty log message *** --- lisp/ChangeLog | 6 +++--- src/ChangeLog | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 50688318f93..dab079a1436 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,10 +1,10 @@ 2005-03-31 Kim F. Storm * mouse.el (mouse-1-click-follows-link): Increase to 450 ms. - (mouse-fixup-help-message): New defun called by show_help_echo. + (mouse-fixup-help-message): New defun called by show_help_echo + to fixup mouse-2 prefix in help messages when applicable. - * tooltip.el (tooltip-show-help-function): Don't rewrite mouse-2 - prefix in tooltip message. + * tooltip.el (tooltip-show-help-function): Don't fixup message here. 2005-03-31 Kenichi Handa diff --git a/src/ChangeLog b/src/ChangeLog index 55c11986e12..eec09dac664 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2005-03-31 Kim F. Storm + + * keyboard.c (Qmouse_fixup_help_message): New var. + (syms_of_keyboard): Intern and staticpro it. + (show_help_echo): Apply mouse-fixup-help-message to help string. + 2005-03-30 Kim F. Storm * xdisp.c (display_line): Allow multiple overlay arrows in window. From c22237f77ec94f5339311c1a3a7cb904b7c3f6ec Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 10:11:14 +0000 Subject: [PATCH 127/241] (Qmouse_fixup_help_message): New var. (syms_of_keyboard): Intern and staticpro it. (show_help_echo): Apply mouse-fixup-help-message to help string. --- src/keyboard.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/keyboard.c b/src/keyboard.c index f9b0a843de5..f1a131a6f4e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -523,6 +523,10 @@ Lisp_Object Qmake_frame_visible; Lisp_Object Qselect_window; Lisp_Object Qhelp_echo; +#ifdef HAVE_MOUSE +Lisp_Object Qmouse_fixup_help_message; +#endif + /* Symbols to denote kinds of events. */ Lisp_Object Qfunction_key; Lisp_Object Qmouse_click; @@ -2304,6 +2308,11 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo) return; } +#ifdef HAVE_MOUSE + if (!noninteractive && STRINGP (help)) + help = call1 (Qmouse_fixup_help_message, help); +#endif + if (STRINGP (help) || NILP (help)) { if (!NILP (Vshow_help_function)) @@ -10875,6 +10884,11 @@ syms_of_keyboard () Qmenu_bar = intern ("menu-bar"); staticpro (&Qmenu_bar); +#ifdef HAVE_MOUSE + Qmouse_fixup_help_message = intern ("mouse-fixup-help-message"); + staticpro (&Qmouse_fixup_help_message); +#endif + Qabove_handle = intern ("above-handle"); staticpro (&Qabove_handle); Qhandle = intern ("handle"); From bf762c986c83b78cac247e5c96293db707cce184 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 31 Mar 2005 11:20:58 +0000 Subject: [PATCH 128/241] *** empty log message *** --- src/ChangeLog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index eec09dac664..298445b7935 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2005-03-31 Kenichi Handa + + * coding.c (syms_of_coding): Fix previous change. + +2005-03-25 Kenichi Handa + + * coding.c (syms_of_coding): Suggest to use set-coding-category in + the docstring of coding-category-list. + 2005-03-31 Kim F. Storm * keyboard.c (Qmouse_fixup_help_message): New var. From 4220560759fac850b5501c9cf5b60e94baac5f06 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 31 Mar 2005 11:21:14 +0000 Subject: [PATCH 129/241] (Vcoding_category_list): Docstring fix. --- src/coding.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coding.c b/src/coding.c index 1cc75fdae16..4ae1a25e8f0 100644 --- a/src/coding.c +++ b/src/coding.c @@ -7825,7 +7825,7 @@ associated with each coding-category one by one in this order. When one algorithm agrees with a byte sequence of source text, the coding system bound to the corresponding coding-category is selected. -Don't modify this variable directly, but use `set-coding-category'. */); +Don't modify this variable directly, but use `set-coding-priority'. */); { int i; From fafbb99d577133c09d38ef2aa315a7b583c38079 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 31 Mar 2005 11:22:55 +0000 Subject: [PATCH 130/241] *** empty log message *** --- lisp/ChangeLog | 2 +- src/ChangeLog | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dab079a1436..b9779b18bfd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -6,7 +6,7 @@ * tooltip.el (tooltip-show-help-function): Don't fixup message here. -2005-03-31 Kenichi Handa +2005-03-31 Kenichi Handa * language/thai-word.el (thai-find-word-ends): Pay attention to the case that we reach the end of buffer. diff --git a/src/ChangeLog b/src/ChangeLog index 298445b7935..53469408d71 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,4 @@ -2005-03-31 Kenichi Handa +2005-03-31 Kenichi Handa * coding.c (syms_of_coding): Fix previous change. From 2a3a044ce6b81e261862c1bebb8ce560e344bb91 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Thu, 31 Mar 2005 14:49:09 +0000 Subject: [PATCH 131/241] (easy-mmode-define-global-mode, define-minor-mode): Call custom-current-group at load-time. --- lisp/emacs-lisp/easy-mmode.el | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index b6b91710ed4..da93190f2e9 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -1,6 +1,7 @@ ;;; easy-mmode.el --- easy definition for major and minor modes -;; Copyright (C) 1997,2000,01,02,03,2004 Free Software Foundation, Inc. +;; Copyright (C) 1997, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Georges Brun-Cottan ;; Maintainer: Stefan Monnier @@ -152,8 +153,8 @@ For example, you could write (unless group ;; We might as well provide a best-guess default group. (setq group - `(:group ',(or (custom-current-group) - (intern (replace-regexp-in-string + `(:group (or (custom-current-group) + ',(intern (replace-regexp-in-string "-mode\\'" "" mode-name)))))) `(progn @@ -278,8 +279,8 @@ KEYS is a list of CL-style keyword arguments: (unless group ;; We might as well provide a best-guess default group. (setq group - `(:group ',(or (custom-current-group) - (intern (replace-regexp-in-string + `(:group (or (custom-current-group) + ',(intern (replace-regexp-in-string "-mode\\'" "" (symbol-name mode))))))) `(progn From 66e181ad2ead63cec125aaf560b924857e35e04d Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Thu, 31 Mar 2005 14:54:46 +0000 Subject: [PATCH 132/241] (define-generic-mode): Add debug declaration. Add defcustom for the mode hook. (generic-mode-internal): Use run-mode-hooks. --- lisp/ChangeLog | 9 +++++++++ lisp/generic.el | 50 ++++++++++++++++++++++++++++++------------------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b9779b18bfd..cd2043e3f3a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2005-03-31 Lute Kamstra + + * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode) + (define-minor-mode): Call custom-current-group at load-time. + + * generic.el (define-generic-mode): Add debug declaration. + Add defcustom for the mode hook. + (generic-mode-internal): Use run-mode-hooks. + 2005-03-31 Kim F. Storm * mouse.el (mouse-1-click-follows-link): Increase to 450 ms. diff --git a/lisp/generic.el b/lisp/generic.el index e20f73688c7..22fc8b012f3 100644 --- a/lisp/generic.el +++ b/lisp/generic.el @@ -217,58 +217,70 @@ FUNCTION-LIST is a list of functions to call to do some additional setup. See the file generic-x.el for some examples of `define-generic-mode'." - (let* ((name-unquoted (if (eq (car-safe mode) 'quote) ; Backward compatibility. - (eval mode) - mode)) - (name-string (symbol-name name-unquoted)) + (declare (debug (sexp def-form def-form def-form form def-form &optional stringp))) + + ;; Backward compatibility. + (when (eq (car-safe mode) 'quote) + (setq mode (eval mode))) + (let* ((mode-name (symbol-name mode)) (pretty-name (capitalize (replace-regexp-in-string - "-mode\\'" "" name-string)))) + "-mode\\'" "" mode-name))) + (mode-hook (intern (concat mode-name "-hook")))) `(progn ;; Add a new entry. - (add-to-list 'generic-mode-list ,name-string) + (add-to-list 'generic-mode-list ,mode-name) ;; Add it to auto-mode-alist (dolist (re ,auto-mode-list) - (add-to-list 'auto-mode-alist (cons re ',name-unquoted))) + (add-to-list 'auto-mode-alist (cons re ',mode))) - (defun ,name-unquoted () + (defcustom ,mode-hook nil + ,(concat "Hook run when entering " pretty-name " mode.") + :type 'hook + :group (or (custom-current-group) + ',(intern (replace-regexp-in-string + "-mode\\'" "" mode-name)))) + + (defun ,mode () ,(or docstring (concat pretty-name " mode.\n" "This a generic mode defined with `define-generic-mode'.")) (interactive) - (generic-mode-internal ',name-unquoted ,comment-list ,keyword-list + (generic-mode-internal ',mode ,comment-list ,keyword-list ,font-lock-list ,function-list))))) ;;;###autoload -(defun generic-mode-internal (mode comments keywords font-lock-list funs) +(defun generic-mode-internal (mode comment-list keyword-list + font-lock-list function-list) "Go into the generic mode MODE." - (let* ((modename (symbol-name mode)) - (generic-mode-hooks (intern (concat modename "-hook"))) + (let* ((mode-name (symbol-name mode)) (pretty-name (capitalize (replace-regexp-in-string - "-mode\\'" "" modename)))) + "-mode\\'" "" mode-name))) + (mode-hook (intern (concat mode-name "-hook")))) (kill-all-local-variables) (setq major-mode mode mode-name pretty-name) - (generic-mode-set-comments comments) + (generic-mode-set-comments comment-list) ;; Font-lock functionality. ;; Font-lock-defaults is always set even if there are no keywords ;; or font-lock expressions, so comments can be highlighted. (setq generic-font-lock-keywords (append - (when keywords - (list (generic-make-keywords-list keywords font-lock-keyword-face))) + (when keyword-list + (list (generic-make-keywords-list keyword-list + font-lock-keyword-face))) font-lock-list)) (setq font-lock-defaults '(generic-font-lock-keywords nil)) ;; Call a list of functions - (mapcar 'funcall funs) + (mapcar 'funcall function-list) - (run-hooks generic-mode-hooks))) + (run-mode-hooks mode-hook))) ;;;###autoload (defun generic-mode (mode) @@ -392,7 +404,7 @@ This hook will be installed if the variable (defun generic-mode-ini-file-find-file-hook () "Hook function to enter Default-Generic mode automatically for INI files. -Done if the first few lines of a file in Fundamental mode look like an +Done if the first few lines of a file in Fundamental mode look like an INI file. This hook is NOT installed by default." (and (eq major-mode 'fundamental-mode) (save-excursion From 0b048d529834e0d3cb4ed9ee5702cbe8d529318e Mon Sep 17 00:00:00 2001 From: Marcelo Toledo Date: Thu, 31 Mar 2005 15:20:45 +0000 Subject: [PATCH 133/241] Tracking the confirmation of translators in admin/FOR-RELEASE for the new title of the tutorial that will also appear in the splash screen. Improvements and corrections in TUTORIAL.es and TUTORIAL.pt_BR. --- admin/ChangeLog | 6 ++++++ admin/FOR-RELEASE | 32 ++++++++++++++++++++++++++++++++ etc/TUTORIAL.es | 2 +- etc/TUTORIAL.pt_BR | 11 ++++++----- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/admin/ChangeLog b/admin/ChangeLog index efcd9b2d5e5..e21666cc514 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,9 @@ +2005-03-30 Marcelo Toledo + + * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The + first line of every tutorial must be "Emacs Tutorial" in the + repective language. + 2005-03-02 Miles Bader * quick-install-emacs: Only use the mkdir --verbose option if the diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 9ce510a6ee6..aebc2a9e6cb 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -245,6 +245,38 @@ lispref/tips.texi "Luc Teirlinck" Chong Yidong lispref/variables.texi "Luc Teirlinck" Chong Yidong lispref/windows.texi "Luc Teirlinck" Chong Yidong +** Check the Emacs Tutorial. + +The first line of every tutorial must be "Emacs Tutorial" in the +repective language. It is used as a title in the tutorial and also used +in the splash screen. After each file name, on the same line or the +following line, come the names of the people who have checked it. + +SECTION READERS +---------------------------------- +etc/TUTORIAL Marcelo Toledo +etc/TUTORIAL.bg +etc/TUTORIAL.cn +etc/TUTORIAL.cs +etc/TUTORIAL.de +etc/TUTORIAL.es Marcelo Toledo +etc/TUTORIAL.fr Jaco +etc/TUTORIAL.it Alfredo Finelli +etc/TUTORIAL.ja +etc/TUTORIAL.ko +etc/TUTORIAL.nl Pieter Schoenmakers +etc/TUTORIAL.pl +etc/TUTORIAL.pt_BR Marcelo Toledo +etc/TUTORIAL.ro +etc/TUTORIAL.ru +etc/TUTORIAL.sk +etc/TUTORIAL.sl +etc/TUTORIAL.sv +etc/TUTORIAL.th +etc/TUTORIAL.zh + + + Local variables: mode: outline diff --git a/etc/TUTORIAL.es b/etc/TUTORIAL.es index 939ad3c2a23..b0d721e1e2c 100644 --- a/etc/TUTORIAL.es +++ b/etc/TUTORIAL.es @@ -1,4 +1,4 @@ -tutorial de Emacs +Tutorial de Emacs Usted esta viendo el tutorial de Emacs. Vea al final las condiciones de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. diff --git a/etc/TUTORIAL.pt_BR b/etc/TUTORIAL.pt_BR index 6492c1ce3dd..ded253ba880 100644 --- a/etc/TUTORIAL.pt_BR +++ b/etc/TUTORIAL.pt_BR @@ -1,6 +1,7 @@ Tutorial do Emacs -Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as -condições. +Você está visualizando o Tutorial do Emacs. Veja no fim as condições +para cópia. +Copyright (c) 2004, 2005 Free Software Foundation. Os comandos do Emacs geralmente envolvem a tecla CONTROL (algumas vezes nomeada CTRL ou CTL) ou a tecla META (algumas vezes nomeada EDIT ou @@ -131,8 +132,8 @@ jeito na dire você pode observar a ação do M-f e M-b de varias lugares dentro e no meio de palavras. -Observe o paralelismo entre C-f e C-b em uma mão, e M-f e M-b na -outra. Muito freqüentemente os caracteres Meta são usados para operações +Observe o paralelismo entre C-f e C-b por um lado, e M-f e M-b por outro +lado. Muito freqüentemente os caracteres Meta são usados para operações relacionadas com as unidades definidas pela linguagem (palavras, sentenças, parágrafos), enquanto caracteres Control operam nas unidades básicas que são independente do que você está editando (caracteres, @@ -860,7 +861,7 @@ manual do Emacs para uma dica de como lhe dar com esse "recurso". Se você estiver no meio de uma pesquisa incremental e digitar , você percebera que o ultimo caractere da pesquisa será apagado e a -pesquisa voltara para o ultimo lugar da pesquisa. Por instancia, imagine +pesquisa voltara para o ultimo lugar da pesquisa. Por exemplo, imagine que você tenha digitado "c", para pesquisar a primeira ocorrência de "c". Agora se você digitar "u", o cursor ira mover para a primeira ocorrência de "cu". Agora digite . Isso ira apagar o "u" da From 64c66a6188dc0d08fae3aa25abe825b1914158e2 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 31 Mar 2005 18:59:34 +0000 Subject: [PATCH 134/241] (scheme-mode-syntax-table): Update syntax of | and # for two-character comment syntax. --- lisp/progmodes/scheme.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index d9ffea852d1..c82d60ffe5c 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -90,7 +90,7 @@ (modify-syntax-entry ?\] ")[ " st) (modify-syntax-entry ?{ "(} " st) (modify-syntax-entry ?} "){ " st) - (modify-syntax-entry ?\| " 23" st) + (modify-syntax-entry ?\| "\" 23b" table) ;; Other atom delimiters (modify-syntax-entry ?\( "() " st) @@ -103,7 +103,7 @@ ;; Special characters (modify-syntax-entry ?, "' " st) (modify-syntax-entry ?@ "' " st) - (modify-syntax-entry ?# "' 14" st) + (modify-syntax-entry ?# "' 14bn" table) (modify-syntax-entry ?\\ "\\ " st) st)) From a91877d296a01133f31690c9567f4381986a67f0 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 31 Mar 2005 18:59:50 +0000 Subject: [PATCH 135/241] Fix previous change. --- lisp/progmodes/scheme.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index c82d60ffe5c..c792b59ad87 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -90,7 +90,7 @@ (modify-syntax-entry ?\] ")[ " st) (modify-syntax-entry ?{ "(} " st) (modify-syntax-entry ?} "){ " st) - (modify-syntax-entry ?\| "\" 23b" table) + (modify-syntax-entry ?\| "\" 23b" st) ;; Other atom delimiters (modify-syntax-entry ?\( "() " st) @@ -103,7 +103,7 @@ ;; Special characters (modify-syntax-entry ?, "' " st) (modify-syntax-entry ?@ "' " st) - (modify-syntax-entry ?# "' 14bn" table) + (modify-syntax-entry ?# "' 14bn" st) (modify-syntax-entry ?\\ "\\ " st) st)) From d0e50224dd4f962d9956dc29bcbe6757021f2151 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 31 Mar 2005 20:14:03 +0000 Subject: [PATCH 136/241] * calendar.texi (Calendar Systems): Say that the Persian calendar implemented here is the arithmetical one championed by Birashk. --- man/ChangeLog | 7 ++++++- man/calendar.texi | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/man/ChangeLog b/man/ChangeLog index d808b9fe6d7..9027b90b4bc 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,8 @@ +2005-03-31 Paul Eggert + + * calendar.texi (Calendar Systems): Say that the Persian calendar + implemented here is the arithmetical one championed by Birashk. + 2005-03-30 Glenn Morris * programs.texi (Fortran Motion): Fix previous change. @@ -21,7 +26,7 @@ (Longlines): New node. (Auto Fill): Don't index "word wrap" here. (Filling): Add Longlines to menu. - + 2005-03-29 Richard M. Stallman * xresources.texi: Minor fixes. diff --git a/man/calendar.texi b/man/calendar.texi index 999c29dae06..723fa7ce3c4 100644 --- a/man/calendar.texi +++ b/man/calendar.texi @@ -691,6 +691,12 @@ Their calendar consists of twelve months of which the first six have 31 days, the next five have 30 days, and the last has 29 in ordinary years and 30 in leap years. Leap years occur in a complicated pattern every four or five years. +The calendar implemented here is the arithmetical Persian calendar +championed by Birashk, based on a 2,820-year cycle. It differs from +the astronomical Persian calendar, which is based on astronomical +events. As of this writing the first future discrepancy is projected +to occur on March 20, 2025. It is currently not clear what the +official calendar of Iran will be that far into the future. @cindex Chinese calendar The Chinese calendar is a complicated system of lunar months arranged From 39a27f952b3d1d7a08f4d747b0015e821c9ecc96 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 31 Mar 2005 21:16:54 +0000 Subject: [PATCH 137/241] (define-global-minor-mode): Renamed from easy-mmode-define-global-mode. (easy-mmode-define-global-mode): Alias for define-global-minor-mode. --- lisp/ChangeLog | 9 +++++++++ lisp/emacs-lisp/easy-mmode.el | 5 +++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cd2043e3f3a..0f142a5e255 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2005-03-31 Richard M. Stallman + + * emacs-lisp/easy-mmode.el (define-global-minor-mode): + Renamed from easy-mmode-define-global-mode. + (easy-mmode-define-global-mode): Alias for define-global-minor-mode. + + * progmodes/scheme.el (scheme-mode-syntax-table): Update + syntax of | and # for two-character comment syntax. + 2005-03-31 Lute Kamstra * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index da93190f2e9..a96b1741139 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -254,8 +254,9 @@ With zero or negative ARG turn mode off. ;;; ;;;###autoload -(defmacro easy-mmode-define-global-mode (global-mode mode turn-on - &rest keys) +(defalias 'easy-mmode-define-global-mode 'define-global-minor-mode) +;;;###autoload +(defmacro define-global-minor-mode (global-mode mode turn-on &rest keys) "Make GLOBAL-MODE out of the buffer-local minor MODE. TURN-ON is a function that will be called with no args in every buffer and that should try to turn MODE on if applicable for that buffer. From 1b39b4933b600887cca06781b6e7ac678480a5b4 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 31 Mar 2005 21:17:40 +0000 Subject: [PATCH 138/241] (make-autoload): Handle define-global-minor-mode. --- lisp/emacs-lisp/autoload.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el index 0a75a43827e..68d1287d98c 100644 --- a/lisp/emacs-lisp/autoload.el +++ b/lisp/emacs-lisp/autoload.el @@ -72,7 +72,7 @@ or macro definition or a defcustom)." (let ((car (car-safe form)) expand) (cond ;; For complex cases, try again on the macro-expansion. - ((and (memq car '(easy-mmode-define-global-mode + ((and (memq car '(easy-mmode-define-global-mode define-global-minor-mode easy-mmode-define-minor-mode define-minor-mode)) (setq expand (let ((load-file-name file)) (macroexpand form))) (eq (car expand) 'progn) From e134f4a869b2b8cb6e282b93c0594158098b043b Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 31 Mar 2005 21:19:34 +0000 Subject: [PATCH 139/241] *** empty log message *** --- etc/NEWS | 4 ++++ lisp/ChangeLog | 3 +++ 2 files changed, 7 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 450d21486ef..08792d1b940 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2729,6 +2729,10 @@ the command `undefined'. (In earlier Emacs versions, it used * Lisp Changes in Emacs 22.1 +--- +** easy-mmode-define-global-mode has been renamed to +define-global-minor-mode. The old name remains as an alias. + +++ ** The new function `filter-buffer-substring' extracts a buffer substring, passes it through a set of filter functions, and returns diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0f142a5e255..221682e7388 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2005-03-31 Richard M. Stallman + * emacs-lisp/autoload.el (make-autoload): + Handle define-global-minor-mode. + * emacs-lisp/easy-mmode.el (define-global-minor-mode): Renamed from easy-mmode-define-global-mode. (easy-mmode-define-global-mode): Alias for define-global-minor-mode. From 81f5c6a338ca8c62bca1f887573d12328c7d0a9a Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 22:22:29 +0000 Subject: [PATCH 140/241] *** empty log message *** --- lisp/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 221682e7388..f9c95723610 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-01 Kim F. Storm + + * ido.el (ido-file-internal): Fall back to non-ido command if + initial directory is on slow ftp (or tramp) host. + 2005-03-31 Richard M. Stallman * emacs-lisp/autoload.el (make-autoload): From 94da3cf11183e6ad3569140e666c4296c431f7e1 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Thu, 31 Mar 2005 22:22:45 +0000 Subject: [PATCH 141/241] (ido-file-internal): Fall back to non-ido command if initial directory is on slow ftp (or tramp) host. --- lisp/ido.el | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lisp/ido.el b/lisp/ido.el index 86a88d0d491..ddeecbb9b69 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -1935,19 +1935,21 @@ If INITIAL is non-nil, it specifies the initial input string." ;; Internal function for ido-find-file and friends (unless item (setq item 'file)) - (let* ((ido-current-directory (ido-expand-directory default)) - (ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory)) - (ido-directory-too-big (and (not ido-directory-nonreadable) - (ido-directory-too-big-p ido-current-directory))) - (ido-context-switch-command switch-cmd) - filename) + (let ((ido-current-directory (ido-expand-directory default)) + (ido-context-switch-command switch-cmd) + ido-directory-nonreadable ido-directory-too-big + filename) - (cond - ((or (not ido-mode) (ido-is-slow-ftp-host)) - (setq filename t - ido-exit 'fallback)) + (if (or (not ido-mode) (ido-is-slow-ftp-host)) + (setq filename t + ido-exit 'fallback) + (setq ido-directory-nonreadable + (ido-nonreadable-directory-p ido-current-directory) + ido-directory-too-big + (and (not ido-directory-nonreadable) + (ido-directory-too-big-p ido-current-directory)))) - ((and (eq item 'file) + (when (and (eq item 'file) (or ido-use-url-at-point ido-use-filename-at-point)) (let (fn d) (require 'ffap) @@ -1966,7 +1968,7 @@ If INITIAL is non-nil, it specifies the initial input string." (setq d (file-name-directory fn)) (file-directory-p d)) (setq ido-current-directory d) - (setq initial (file-name-nondirectory fn))))))) + (setq initial (file-name-nondirectory fn)))))) (let (ido-saved-vc-hb (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends)) From 6ca5360192fbe50abd5e43ba2ed28aa115af4d65 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 31 Mar 2005 22:43:13 +0000 Subject: [PATCH 142/241] Include ThreeD.h for XtNbeNiceToColormap. (x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it. Use XtNtopShadowPixel and XtNbottomShadowPixel. (x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't really work and that breaks with some versions of Xaw3d. --- src/ChangeLog | 14 +++++++++++++- src/xterm.c | 29 +++++------------------------ 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 53469408d71..258948bf5d3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,7 +1,19 @@ +2005-03-31 Stefan Monnier + + * xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap. + (x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it. + Use XtNtopShadowPixel and XtNbottomShadowPixel. + (x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't + really work and that breaks with some versions of Xaw3d. + 2005-03-31 Kenichi Handa * coding.c (syms_of_coding): Fix previous change. +2005-03-30 Stefan Monnier + + * fileio.c (search_embedded_absfilename): Fix last change. + 2005-03-25 Kenichi Handa * coding.c (syms_of_coding): Suggest to use set-coding-category in @@ -30,7 +42,7 @@ 2005-03-26 Lennart Borgman - * w32term.h (x_output): add focus_state. + * w32term.h (x_output): Add focus_state. * w32term.c (x_focus_changed, w32_detect_focus_change): New functions. (w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change. diff --git a/src/xterm.c b/src/xterm.c index 609ffefcbbe..fcc4c67743a 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -130,9 +130,7 @@ extern void _XEditResCheckMessages (); #ifdef HAVE_XAW3D #include #include -#define ARROW_SCROLLBAR -#define XAW_ARROW_SCROLLBARS -#include +#include #else /* !HAVE_XAW3D */ #include #include @@ -4547,6 +4545,7 @@ x_create_toolkit_scroll_bar (f, bar) f->output_data.x->scroll_bar_bottom_shadow_pixel = pixel; } +#ifdef XtNbeNiceToColormap /* Tell the toolkit about them. */ if (f->output_data.x->scroll_bar_top_shadow_pixel == -1 || f->output_data.x->scroll_bar_bottom_shadow_pixel == -1) @@ -4570,16 +4569,17 @@ x_create_toolkit_scroll_bar (f, bar) pixel = f->output_data.x->scroll_bar_top_shadow_pixel; if (pixel != -1) { - XtSetArg (av[ac], "topShadowPixel", pixel); + XtSetArg (av[ac], XtNtopShadowPixel, pixel); ++ac; } pixel = f->output_data.x->scroll_bar_bottom_shadow_pixel; if (pixel != -1) { - XtSetArg (av[ac], "bottomShadowPixel", pixel); + XtSetArg (av[ac], XtNbottomShadowPixel, pixel); ++ac; } } +#endif widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, f->output_data.x->edit_widget, av, ac); @@ -4725,30 +4725,11 @@ x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole) XawScrollbarSetThumb (widget, top, shown); else { -#ifdef HAVE_XAW3D - ScrollbarWidget sb = (ScrollbarWidget) widget; - int scroll_mode = 0; - - /* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */ - if (xaw3d_arrow_scroll) - { - /* Xaw3d stupidly ignores resize requests while dragging - so we have to make it believe it's not in dragging mode. */ - scroll_mode = sb->scrollbar.scroll_mode; - if (scroll_mode == 2) - sb->scrollbar.scroll_mode = 0; - } -#endif /* Try to make the scrolling a tad smoother. */ if (!xaw3d_pick_top) shown = min (shown, old_shown); XawScrollbarSetThumb (widget, top, shown); - -#ifdef HAVE_XAW3D - if (xaw3d_arrow_scroll && scroll_mode == 2) - sb->scrollbar.scroll_mode = scroll_mode; -#endif } } } From 7cbf93e061fa7b368f13bccf24f03b304e3c0bbf Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 31 Mar 2005 23:16:20 +0000 Subject: [PATCH 143/241] (define-generic-mode): Add indentation rule. --- lisp/generic.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/generic.el b/lisp/generic.el index 22fc8b012f3..b18042442f8 100644 --- a/lisp/generic.el +++ b/lisp/generic.el @@ -217,7 +217,9 @@ FUNCTION-LIST is a list of functions to call to do some additional setup. See the file generic-x.el for some examples of `define-generic-mode'." - (declare (debug (sexp def-form def-form def-form form def-form &optional stringp))) + (declare (debug (sexp def-form def-form def-form form def-form + &optional stringp)) + (indent 1)) ;; Backward compatibility. (when (eq (car-safe mode) 'quote) From 9b06ffa3dc182766ec67ee4fe06c2f7141602bc2 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 31 Mar 2005 23:17:51 +0000 Subject: [PATCH 144/241] Better adhere to coding conventions. --- lisp/url/vc-dav.el | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lisp/url/vc-dav.el b/lisp/url/vc-dav.el index e0e32f5da1a..3bf03165564 100644 --- a/lisp/url/vc-dav.el +++ b/lisp/url/vc-dav.el @@ -21,6 +21,11 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;;; Code: + (require 'url) (require 'url-dav) @@ -175,4 +180,5 @@ It should return a status of either 0 (no differences found), or (provide 'vc-dav) -;;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e +;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e +;;; vc-dav.el ends here From 6fa886202fdca940dd16e9f0b863347c4f565e8a Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 00:29:51 +0000 Subject: [PATCH 145/241] (Coding System Basics): Describe about rondtrip identity of coding systems. --- lispref/nonascii.texi | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lispref/nonascii.texi b/lispref/nonascii.texi index 70e77e0a837..91a47ea50f9 100644 --- a/lispref/nonascii.texi +++ b/lispref/nonascii.texi @@ -628,6 +628,28 @@ characters; for example, there are three coding systems for the Cyrillic conversion, but some of them leave the choice unspecified---to be chosen heuristically for each file, based on the data. +In general, a coding system doesn't guarantee a roundtrip identity, +i.e. decoding followed by encoding in the same coding system can +result in the different byte sequence. But there are several coding +systems that go guarantee that the result will be the same as what you +originally decoded. They are: + +@quotation +chinese-big5 chinese-iso-8bit cyrillic-iso-8bit emacs-mule +greek-iso-8bit hebrew-iso-8bit iso-latin-1 iso-latin-2 iso-latin-3 +iso-latin-4 iso-latin-5 iso-latin-8 iso-latin-9 iso-safe +japanese-iso-8bit japanese-shift-jis korean-iso-8bit raw-text +@end quotation + +Likewise, a coding systme doesn't guarantee the other way of roundtrip +identity, i.e. encoding buffer text into a coding system followed by +decoding again with the same coding system will produce the different +buffer text. For instance, when you encode Latin-2 characters by +@code{utf-8} and decode it back by the same coding system, you'll get +Unicode charactes (of charset @code{mule-unicode-0100-24ff}), and when +you encode Unicode characters by @code{iso-latin-2} and decode it back +by the same coding system, you'll get Latin-2 characters. + @cindex end of line conversion @dfn{End of line conversion} handles three different conventions used on various systems for representing end of line in files. The Unix From 4873755c5da5ab49700de06bf4f474a7fdc1d655 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 1 Apr 2005 00:31:25 +0000 Subject: [PATCH 146/241] First sentence should say just "Emacs tutorial". --- etc/TUTORIAL | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/etc/TUTORIAL b/etc/TUTORIAL index dd3b25bce3b..48fa02f93d9 100644 --- a/etc/TUTORIAL +++ b/etc/TUTORIAL @@ -1,5 +1,4 @@ -Emacs Tutorial -You are looking at the Emacs tutorial. See end for copying conditions. +Emacs tutorial. See end for copying conditions. Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. Emacs commands generally involve the CONTROL key (sometimes labeled From b80785d3d35ba40ee3496ceedcf6805ad9d807f2 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 01:05:05 +0000 Subject: [PATCH 147/241] (Vascii_upcase_table, Vascii_canon_table, Vascii_eqv_table): Extern them. --- src/lisp.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lisp.h b/src/lisp.h index c80d8a822cc..9f82288fdb0 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1861,7 +1861,8 @@ extern Lisp_Object case_temp2; NATNUMP (case_temp2)) \ ? XFASTINT (case_temp2) : case_temp1) -extern Lisp_Object Vascii_downcase_table; +extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table; +extern Lisp_Object Vascii_canon_table, Vascii_eqv_table; /* Number of bytes of structure consed since last GC. */ From f79609dc4ce7386f79a2b2f74e67c782622951cb Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 01:05:29 +0000 Subject: [PATCH 148/241] (set_case_table): If standard is nonzero, setup Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table. --- src/casetab.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/casetab.c b/src/casetab.c index 5ba025e2b5a..d7dcb420c83 100644 --- a/src/casetab.c +++ b/src/casetab.c @@ -162,7 +162,12 @@ set_case_table (table, standard) XCHAR_TABLE (canon)->extras[2] = eqv; if (standard) - Vascii_downcase_table = table; + { + Vascii_downcase_table = table; + Vascii_upcase_table = up; + Vascii_canon_table = canon; + Vascii_eqv_table = eqv; + } else { current_buffer->downcase_table = table; From 0190922fb49028aa5dc422378931a81ee59b5c9c Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 01:05:46 +0000 Subject: [PATCH 149/241] (looking_at_1): Use current_buffer->case_canon_table, not DOWNCASE_TABLE. (string_match_1): Likewise. (fast_c_string_match_ignore_case): Use Vascii_canon_table, not Vascii_downcase_table. (fast_string_match_ignore_case): Likewise. (search_buffer): Fix checking of boyer-moore usability. (boyer_moore): Calculate translate_prev_byte1/2/3 in advance. No need of tranlating characters in PAT. Fix calculation of simple_translate. --- src/search.c | 219 +++++++++++++++++++++++++++++---------------------- 1 file changed, 127 insertions(+), 92 deletions(-) diff --git a/src/search.c b/src/search.c index 7e990f2bfd7..d86a7cca7b2 100644 --- a/src/search.c +++ b/src/search.c @@ -293,7 +293,7 @@ looking_at_1 (string, posix) CHECK_STRING (string); bufp = compile_pattern (string, &search_regs, (!NILP (current_buffer->case_fold_search) - ? DOWNCASE_TABLE : Qnil), + ? current_buffer->case_canon_table : Qnil), posix, !NILP (current_buffer->enable_multibyte_characters)); @@ -399,7 +399,7 @@ string_match_1 (regexp, string, start, posix) bufp = compile_pattern (regexp, &search_regs, (!NILP (current_buffer->case_fold_search) - ? DOWNCASE_TABLE : Qnil), + ? current_buffer->case_canon_table : Qnil), posix, STRING_MULTIBYTE (string)); immediate_quit = 1; @@ -499,7 +499,7 @@ fast_c_string_match_ignore_case (regexp, string) regexp = string_make_unibyte (regexp); re_match_object = Qt; bufp = compile_pattern (regexp, 0, - Vascii_downcase_table, 0, + Vascii_canon_table, 0, 0); immediate_quit = 1; val = re_search (bufp, string, len, 0, len, 0); @@ -516,7 +516,7 @@ fast_string_match_ignore_case (regexp, string) int val; struct re_pattern_buffer *bufp; - bufp = compile_pattern (regexp, 0, Vascii_downcase_table, + bufp = compile_pattern (regexp, 0, Vascii_canon_table, 0, STRING_MULTIBYTE (string)); immediate_quit = 1; re_match_object = string; @@ -1175,7 +1175,9 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n, unsigned char *patbuf; int multibyte = !NILP (current_buffer->enable_multibyte_characters); unsigned char *base_pat = SDATA (string); - int charset_base = -1; + /* Set to nozero if we find a non-ASCII char that need + translation. */ + int charset_base = 0; int boyer_moore_ok = 1; /* MULTIBYTE says whether the text to be searched is multibyte. @@ -1221,9 +1223,17 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n, base_pat = raw_pattern; if (multibyte) { + /* Fill patbuf by translated characters in STRING while + checking if we can use boyer-moore search. If TRT is + non-nil, we can use boyer-moore search only if TRT can be + represented by the byte array of 256 elements. For that, + all non-ASCII case-equivalents of all case-senstive + characters in STRING must belong to the same charset and + row. */ + while (--len >= 0) { - unsigned char str[MAX_MULTIBYTE_LENGTH]; + unsigned char str_base[MAX_MULTIBYTE_LENGTH], *str; int c, translated, inverse; int in_charlen, charlen; @@ -1233,50 +1243,62 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n, if (RE && *base_pat == '\\') { len--; + raw_pattern_size--; len_byte--; base_pat++; } c = STRING_CHAR_AND_LENGTH (base_pat, len_byte, in_charlen); - /* Translate the character, if requested. */ - TRANSLATE (translated, trt, c); - /* If translation changed the byte-length, go back - to the original character. */ - charlen = CHAR_STRING (translated, str); - if (in_charlen != charlen) + if (NILP (trt)) { - translated = c; - charlen = CHAR_STRING (c, str); + str = base_pat; + charlen = in_charlen; } - - /* If we are searching for something strange, - an invalid multibyte code, don't use boyer-moore. */ - if (! ASCII_BYTE_P (translated) - && (charlen == 1 /* 8bit code */ - || charlen != in_charlen /* invalid multibyte code */ - )) - boyer_moore_ok = 0; - - TRANSLATE (inverse, inverse_trt, c); - - /* Did this char actually get translated? - Would any other char get translated into it? */ - if (translated != c || inverse != c) + else { - /* Keep track of which character set row - contains the characters that need translation. */ - int charset_base_code = c & ~CHAR_FIELD3_MASK; - int inverse_charset_base = inverse & ~CHAR_FIELD3_MASK; + /* Translate the character. */ + TRANSLATE (translated, trt, c); + charlen = CHAR_STRING (translated, str_base); + str = str_base; - if (charset_base_code != inverse_charset_base) - boyer_moore_ok = 0; - else if (charset_base == -1) - charset_base = charset_base_code; - else if (charset_base != charset_base_code) - /* If two different rows appear, needing translation, - then we cannot use boyer_moore search. */ - boyer_moore_ok = 0; + /* Check if C has any other case-equivalents. */ + TRANSLATE (inverse, inverse_trt, c); + /* If so, check if we can use boyer-moore. */ + if (c != inverse && boyer_moore_ok) + { + /* Check if all equivalents belong to the same + charset & row. Note that the check of C + itself is done by the last iteration. Note + also that we don't have to check ASCII + characters because boyer-moore search can + always handle their translation. */ + while (1) + { + if (! ASCII_BYTE_P (inverse)) + { + if (SINGLE_BYTE_CHAR_P (inverse)) + { + /* Boyer-moore search can't handle a + translation of an eight-bit + character. */ + boyer_moore_ok = 0; + break; + } + else if (charset_base == 0) + charset_base = inverse & ~CHAR_FIELD3_MASK; + else if ((inverse & ~CHAR_FIELD3_MASK) + != charset_base) + { + boyer_moore_ok = 0; + break; + } + } + if (c == inverse) + break; + TRANSLATE (inverse, inverse_trt, inverse); + } + } } /* Store this character into the translated pattern. */ @@ -1300,6 +1322,7 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n, if (RE && *base_pat == '\\') { len--; + raw_pattern_size--; base_pat++; } c = *base_pat++; @@ -1533,16 +1556,18 @@ simple_search (n, pat, len, len_byte, trt, pos, pos_byte, lim, lim_byte) return n; } -/* Do Boyer-Moore search N times for the string PAT, +/* Do Boyer-Moore search N times for the string BASE_PAT, whose length is LEN/LEN_BYTE, from buffer position POS/POS_BYTE until LIM/LIM_BYTE. DIRECTION says which direction we search in. TRT and INVERSE_TRT are translation tables. + Characters in PAT are already translated by TRT. - This kind of search works if all the characters in PAT that have - nontrivial translation are the same aside from the last byte. This - makes it possible to translate just the last byte of a character, - and do so after just a simple test of the context. + This kind of search works if all the characters in BASE_PAT that + have nontrivial translation are the same aside from the last byte. + This makes it possible to translate just the last byte of a + character, and do so after just a simple test of the context. + CHARSET_BASE is nonzero iff there is such a non-ASCII character. If that criterion is not satisfied, do not call this function. */ @@ -1569,8 +1594,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, int multibyte = ! NILP (current_buffer->enable_multibyte_characters); unsigned char simple_translate[0400]; - int translate_prev_byte = 0; - int translate_anteprev_byte = 0; + /* These are set to the preceding bytes of a byte to be translated + if charset_base is nonzero. As the maximum byte length of a + multibyte character is 4, we have to check at most three previous + bytes. */ + int translate_prev_byte1 = 0; + int translate_prev_byte2 = 0; + int translate_prev_byte3 = 0; #ifdef C_ALLOCA int BM_tab_space[0400]; @@ -1636,6 +1666,23 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, for (i = 0; i < 0400; i++) simple_translate[i] = i; + if (charset_base) + { + /* Setup translate_prev_byte1/2/3 from CHARSET_BASE. Only a + byte following them are the target of translation. */ + int sample_char = charset_base | 0x20; + unsigned char str[MAX_MULTIBYTE_LENGTH]; + int len = CHAR_STRING (sample_char, str); + + translate_prev_byte1 = str[len - 2]; + if (len > 2) + { + translate_prev_byte2 = str[len - 3]; + if (len > 3) + translate_prev_byte3 = str[len - 4]; + } + } + i = 0; while (i != infinity) { @@ -1645,57 +1692,37 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, i = infinity; if (! NILP (trt)) { - int ch; - int untranslated; - int this_translated = 1; + /* If the byte currently looking at is a head of a character + to check case-equivalents, set CH to that character. An + ASCII character and a non-ASCII character matching with + CHARSET_BASE are to be checked. */ + int ch = -1; - if (multibyte - /* Is *PTR the last byte of a character? */ - && (pat_end - ptr == 1 || CHAR_HEAD_P (ptr[1]))) + if (ASCII_BYTE_P (*ptr) || ! multibyte) + ch = *ptr; + else if (charset_base && CHAR_HEAD_P (*ptr)) { - unsigned char *charstart = ptr; - while (! CHAR_HEAD_P (*charstart)) - charstart--; - untranslated = STRING_CHAR (charstart, ptr - charstart + 1); - if (charset_base == (untranslated & ~CHAR_FIELD3_MASK)) - { - TRANSLATE (ch, trt, untranslated); - if (! CHAR_HEAD_P (*ptr)) - { - translate_prev_byte = ptr[-1]; - if (! CHAR_HEAD_P (translate_prev_byte)) - translate_anteprev_byte = ptr[-2]; - } - } - else - { - this_translated = 0; - ch = *ptr; - } - } - else if (!multibyte) - TRANSLATE (ch, trt, *ptr); - else - { - ch = *ptr; - this_translated = 0; + ch = STRING_CHAR (ptr, pat_end - ptr); + if (charset_base != (ch & ~CHAR_FIELD3_MASK)) + ch = -1; } - if (ch > 0400) - j = ((unsigned char) ch) | 0200; - else - j = (unsigned char) ch; - + j = *ptr; if (i == infinity) stride_for_teases = BM_tab[j]; BM_tab[j] = dirlen - i; /* A translation table is accompanied by its inverse -- see */ /* comment following downcase_table for details */ - if (this_translated) + if (ch >= 0) { int starting_ch = ch; - int starting_j = j; + int starting_j; + + if (ch > 0400) + starting_j = ((unsigned char) ch) | 0200; + else + starting_j = (unsigned char) ch; while (1) { TRANSLATE (ch, inverse_trt, ch); @@ -1821,9 +1848,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, || ((cursor == tail_end_ptr || CHAR_HEAD_P (cursor[1])) && (CHAR_HEAD_P (cursor[0]) - || (translate_prev_byte == cursor[-1] - && (CHAR_HEAD_P (translate_prev_byte) - || translate_anteprev_byte == cursor[-2]))))) + /* Check if this is the last byte of + a translable character. */ + || (translate_prev_byte1 == cursor[-1] + && (CHAR_HEAD_P (translate_prev_byte1) + || (translate_prev_byte2 == cursor[-2] + && (CHAR_HEAD_P (translate_prev_byte2) + || (translate_prev_byte3 == cursor[-3])))))))) ch = simple_translate[*cursor]; else ch = *cursor; @@ -1901,9 +1932,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, || ((ptr == tail_end_ptr || CHAR_HEAD_P (ptr[1])) && (CHAR_HEAD_P (ptr[0]) - || (translate_prev_byte == ptr[-1] - && (CHAR_HEAD_P (translate_prev_byte) - || translate_anteprev_byte == ptr[-2]))))) + /* Check if this is the last byte of a + translable character. */ + || (translate_prev_byte1 == ptr[-1] + && (CHAR_HEAD_P (translate_prev_byte1) + || (translate_prev_byte2 == ptr[-2] + && (CHAR_HEAD_P (translate_prev_byte2) + || translate_prev_byte3 == ptr[-3]))))))) ch = simple_translate[*ptr]; else ch = *ptr; From 41639988b2b9fc7cb071b2936c5822a7f8c8a741 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 01:12:22 +0000 Subject: [PATCH 150/241] *** empty log message *** --- lispref/ChangeLog | 5 +++++ src/ChangeLog | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 7f22ad2e485..0d11d7c0e9e 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,8 @@ +2005-04-01 Kenichi Handa + + * nonascii.texi (Coding System Basics): Describe about rondtrip + identity of coding systems. + 2005-03-29 Chong Yidong * text.texi (Buffer Contents): Add filter-buffer-substring and diff --git a/src/ChangeLog b/src/ChangeLog index 258948bf5d3..517a0a2b479 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,23 @@ +<<<<<<< ChangeLog +2005-04-01 Kenichi Handa + + * lisp.h (Vascii_upcase_table, Vascii_canon_table, + Vascii_eqv_table): Extern them. + + * casetab.c (set_case_table): If standard is nonzero, setup + Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table. + + * search.c (looking_at_1): Use current_buffer->case_canon_table, + not DOWNCASE_TABLE. + (string_match_1): Likewise. + (fast_c_string_match_ignore_case): Use Vascii_canon_table, not + Vascii_downcase_table. + (fast_string_match_ignore_case): Likewise. + (search_buffer): Fix checking of boyer-moore usability. + (boyer_moore): Calculate translate_prev_byte1/2/3 in advance. No + need of tranlating characters in PAT. Fix calculation of + simple_translate. + 2005-03-31 Stefan Monnier * xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap. From 946ce7853ac11fa31a0fe0304ab5e79a9dc41682 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 01:13:14 +0000 Subject: [PATCH 151/241] Enable the correct case setting for dotless-i and dotted-I. --- lisp/international/characters.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/international/characters.el b/lisp/international/characters.el index 727c9e6b9ff..77eb49807c0 100644 --- a/lisp/international/characters.el +++ b/lisp/international/characters.el @@ -884,8 +884,8 @@ (set-case-syntax-pair (decode-char 'ucs (1- c)) (decode-char 'ucs c) tbl)) (setq c (1+ c))) - ;;(set-downcase-syntax ?$,1 P(B ?i tbl) - ;;(set-upcase-syntax ?I ?$,1 Q(B tbl) + (set-downcase-syntax ?$,1 P(B ?i tbl) + (set-upcase-syntax ?I ?$,1 Q(B tbl) (set-case-syntax-pair ?$,1 R(B ?$,1 S(B tbl) (set-case-syntax-pair ?$,1 T(B ?$,1 U(B tbl) (set-case-syntax-pair ?$,1 V(B ?$,1 W(B tbl) From 9cf97f2680013b54e00d1f7f9b4ea187a85c8357 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 1 Apr 2005 01:30:38 +0000 Subject: [PATCH 152/241] *** empty log message *** --- lisp/ChangeLog | 5 +++++ src/ChangeLog | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f9c95723610..ff0c3894c5e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-01 Kenichi Handa + + * international/characters.el: Enable the correct case setting for + dotless-i and dotted-I. + 2005-04-01 Kim F. Storm * ido.el (ido-file-internal): Fall back to non-ido command if diff --git a/src/ChangeLog b/src/ChangeLog index 517a0a2b479..9518de3af8f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,3 @@ -<<<<<<< ChangeLog 2005-04-01 Kenichi Handa * lisp.h (Vascii_upcase_table, Vascii_canon_table, From c8de0427d0420ca86d3feafe19dee6bd9321fcf2 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Fri, 1 Apr 2005 01:44:36 +0000 Subject: [PATCH 153/241] *** empty log message *** --- admin/FOR-RELEASE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index aebc2a9e6cb..5eb08bfd4fa 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -1,8 +1,8 @@ Tasks needed before the next release. -* THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE +* TO BE DONE SHORTLY BEFORE RELEASE -`undo-ask-before-discard', currently set to t for debugging purposes +** `undo-ask-before-discard', currently set to t for debugging purposes has to be set to nil: when t, it can leak memory and cause other problems. * NEW FEATURES @@ -150,7 +150,7 @@ man/basic.texi "Luc Teirlinck" Chong Yidong man/buffers.texi "Luc Teirlinck" Chong Yidong man/building.texi "Ted Zlatanov" man/calendar.texi joakim@verona.se Chong Yidong -man/cmdargs.texi Chong Yidong +man/cmdargs.texi Chong Yidong "Luc Teirlinck" man/commands.texi "Luc Teirlinck" Chong Yidong man/custom.texi Chong Yidong man/dired.texi Chong Yidong joakim@verona.se From fa077d24af63f5d73d86aef510a95a93b7ada657 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Fri, 1 Apr 2005 01:46:30 +0000 Subject: [PATCH 154/241] Replace leading spaces by tabs and remove trailing whitespace. --- admin/ChangeLog | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/ChangeLog b/admin/ChangeLog index e21666cc514..03180eed6c8 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,8 +1,8 @@ 2005-03-30 Marcelo Toledo - * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The - first line of every tutorial must be "Emacs Tutorial" in the - repective language. + * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The + first line of every tutorial must be "Emacs Tutorial" in the + repective language. 2005-03-02 Miles Bader From 4b6bfab4b9d569191fa1bd9d7d2dc13a4210c401 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 1 Apr 2005 01:52:55 +0000 Subject: [PATCH 155/241] *** empty log message *** --- admin/FOR-RELEASE | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 5eb08bfd4fa..be39067b69d 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -23,6 +23,8 @@ See msg from rms to emacs-devel on 21 Dec. * FATAL ERRORS +** Make unexec handle memory mapping policy of the latest versions of Linux. + ** Investigate reported crashes in compact_small_strings. ** Investigate reported crashes related to using an @@ -31,6 +33,9 @@ invalid pointer from string_free_list. * LOSSAGE +** Fix ispell.el bug reported by Peter Dyballa +on 18 Feb to emacs-pretest-bug. + ** Clean up flymake.el to follow Emacs Lisp conventions. ** Fix up url-ldap.el. From 18cd5892322f24e1aa52cd92437571096262aae6 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Fri, 1 Apr 2005 02:03:50 +0000 Subject: [PATCH 156/241] *** empty log message *** --- admin/ChangeLog | 5 +++++ man/ChangeLog | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/admin/ChangeLog b/admin/ChangeLog index 03180eed6c8..ce6e3642800 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -4,6 +4,11 @@ first line of every tutorial must be "Emacs Tutorial" in the repective language. +2005-03-29 Luc Teirlinck + + * FOR-RELEASE (TO BE DONE SHORTLY BEFORE RELEASE): New section. + Add `undo-ask-before-discard' to it. + 2005-03-02 Miles Bader * quick-install-emacs: Only use the mkdir --verbose option if the diff --git a/man/ChangeLog b/man/ChangeLog index 9027b90b4bc..55e072bc9cc 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,10 @@ +2005-03-31 Luc Teirlinck + + * files.texi (Reverting): Move `auto-revert-check-vc-info' to + `VC Mode Line' and put in an xref to that node. + (VC Mode Line): Move `auto-revert-check-vc-info' here and clarify + its description. + 2005-03-31 Paul Eggert * calendar.texi (Calendar Systems): Say that the Persian calendar From ea98eb11f5549737255e90512969014777723f04 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Fri, 1 Apr 2005 02:06:49 +0000 Subject: [PATCH 157/241] (Reverting): Move `auto-revert-check-vc-info' to `VC Mode Line' and put in an xref to that node. (VC Mode Line): Move `auto-revert-check-vc-info' here and clarify its description. --- man/files.texi | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/man/files.texi b/man/files.texi index 7ed2baa0b93..a03bb2a64ea 100644 --- a/man/files.texi +++ b/man/files.texi @@ -940,14 +940,8 @@ Auto-Revert Tail mode, @kbd{M-x auto-revert-tail-mode}. for a changed file. Since checking a remote file is too slow, these modes do not check or revert remote files. -@vindex auto-revert-check-vc-info - Whenever Auto Revert mode reverts the buffer, it updates the version -control information, such as the version control number displayed in -the mode line. However, this information may not be properly updated -if the version control state changes outside of Emacs---for example, -if a new version is checked in from outside the current Emacs session. -If you set @code{auto-revert-check-vc-info} to @code{t}, Auto Revert -mode will update the version control status information periodically. +@xref{VC Mode Line}, for Auto Revert peculiarities in buffers that +visit files under version control. @node Auto Save @section Auto-Saving: Protection Against Disasters @@ -1375,6 +1369,18 @@ locking is not in use). @samp{:} indicates that the file is locked, or that it is modified. If the file is locked by some other user (for instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}. +@vindex auto-revert-check-vc-info + When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is +under version control, it updates the version control information in +the mode line. However, Auto Revert mode may not properly update this +information if the version control status changes without changes to +the work file, from outside the current Emacs session. If you set +@code{auto-revert-check-vc-info} to @code{t}, Auto Revert mode updates +the version control status information every +@code{auto-revert-interval} seconds, even if the work file itself is +unchanged. The resulting CPU usage depends on the version control +system, but is usually not excessive. + @node Basic VC Editing @subsection Basic Editing under Version Control From 5e9961be68adf22b0fe1190fe67fb79ddfa2de55 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Fri, 1 Apr 2005 04:48:39 +0000 Subject: [PATCH 158/241] (mode-require-final-newline): Make Custom correctly report a nil value and allow to set it to nil via Custom. Doc fix. --- lisp/ChangeLog | 6 ++++++ lisp/files.el | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff0c3894c5e..17c580e0efc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-03-31 Luc Teirlinck + + * files.el (mode-require-final-newline): Make Custom correctly + report a nil value and allow to set it to nil via Custom. + Doc fix. + 2005-04-01 Kenichi Handa * international/characters.el: Enable the correct case setting for diff --git a/lisp/files.el b/lisp/files.el index 15d6f794e16..eca86c52a79 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -291,7 +291,7 @@ from `mode-require-final-newline'." :group 'editing-basics) (defcustom mode-require-final-newline t - "*Whether to add a newline at the end of the file, in certain major modes. + "*Whether to add a newline at end of file, in certain major modes. Those modes set `require-final-newline' to this value when you enable them. They do so because they are used for files that are supposed to end in newlines, and the question is how to arrange that. @@ -299,10 +299,16 @@ to end in newlines, and the question is how to arrange that. A value of t means do this only when the file is about to be saved. A value of `visit' means do this right after the file is visited. A value of `visit-save' means do it at both of those times. -Any other non-nil value means ask user whether to add a newline, when saving." +Any other non-nil value means ask user whether to add a newline, when saving. +nil means don't add newlines. + +You will have to be careful if you set this to nil: you will have +to remember to manually add a final newline whenever you finish a +file that really needs one." :type '(choice (const :tag "When visiting" visit) (const :tag "When saving" t) (const :tag "When visiting or saving" visit-save) + (const :tag "Never" nil) (other :tag "Ask" ask)) :group 'editing-basics :version "22.1") From 21e9e795e47ea6064ddf74169bea7f4e7511762b Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Fri, 1 Apr 2005 13:12:30 +0000 Subject: [PATCH 159/241] (Change Log): add-change-log-entry uses add-log-mailing-address. --- man/ChangeLog | 5 +++++ man/maintaining.texi | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/man/ChangeLog b/man/ChangeLog index 55e072bc9cc..91f1b452fcb 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,8 @@ +2005-04-01 Lute Kamstra + + * maintaining.texi (Change Log): add-change-log-entry uses + add-log-mailing-address. + 2005-03-31 Luc Teirlinck * files.texi (Reverting): Move `auto-revert-check-vc-info' to diff --git a/man/maintaining.texi b/man/maintaining.texi index 231699a7d02..f8bc0de5992 100644 --- a/man/maintaining.texi +++ b/man/maintaining.texi @@ -1,5 +1,6 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2005 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Maintaining, Abbrevs, Building, Top @chapter Maintaining Programs @@ -8,8 +9,8 @@ @cindex program editing This chapter describes Emacs features for maintaining programs. The -version control features (@pxref{Version Control}) are also -particularly useful for this purpose. +version control features (@pxref{Version Control}) are also particularly +useful for this purpose. @menu * Change Log:: Maintaining a change history for your program. @@ -51,13 +52,13 @@ permitted provided the copyright notice and this notice are preserved. @noindent Of course, you should substitute the proper years and copyright holder. - A change log entry starts with a header line that contains the -current date, your name, and your email address (taken from the -variable @code{user-mail-address}). Aside from these header lines, -every line in the change log starts with a space or a tab. The bulk -of the entry consists of @dfn{items}, each of which starts with a line -starting with whitespace and a star. Here are two entries, both dated -in May 1993, each with two items: + A change log entry starts with a header line that contains the current +date, your name, and your email address (taken from the variable +@code{add-log-mailing-address}). Aside from these header lines, every +line in the change log starts with a space or a tab. The bulk of the +entry consists of @dfn{items}, each of which starts with a line starting +with whitespace and a star. Here are two entries, both dated in May +1993, each with two items: @iftex @medbreak From b75122e4bdff6eeff9365c7531190f20fb43e2b5 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 1 Apr 2005 15:42:23 +0000 Subject: [PATCH 160/241] *** empty log message *** --- admin/FOR-RELEASE | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index be39067b69d..0c9c0565ccd 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -252,26 +252,30 @@ lispref/windows.texi "Luc Teirlinck" Chong Yidong ** Check the Emacs Tutorial. -The first line of every tutorial must be "Emacs Tutorial" in the -repective language. It is used as a title in the tutorial and also used -in the splash screen. After each file name, on the same line or the -following line, come the names of the people who have checked it. +The first line of every tutorial must begin with a sentence saying +"Emacs Tutorial" in the respective language. This should be followed +by "See end for copying conditions", likewise in the respective +language. + +After each file name, on the same line or the following line, come the +names of the people who have checked it. + SECTION READERS ---------------------------------- -etc/TUTORIAL Marcelo Toledo +etc/TUTORIAL rms etc/TUTORIAL.bg etc/TUTORIAL.cn etc/TUTORIAL.cs etc/TUTORIAL.de -etc/TUTORIAL.es Marcelo Toledo -etc/TUTORIAL.fr Jaco -etc/TUTORIAL.it Alfredo Finelli +etc/TUTORIAL.es +etc/TUTORIAL.fr +etc/TUTORIAL.it etc/TUTORIAL.ja etc/TUTORIAL.ko -etc/TUTORIAL.nl Pieter Schoenmakers +etc/TUTORIAL.nl etc/TUTORIAL.pl -etc/TUTORIAL.pt_BR Marcelo Toledo +etc/TUTORIAL.pt_BR etc/TUTORIAL.ro etc/TUTORIAL.ru etc/TUTORIAL.sk From 04e777784e5bb69ef5c25b45973613b5171e8e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Spiegel?= Date: Fri, 1 Apr 2005 17:21:52 +0000 Subject: [PATCH 161/241] (vc-workfile-unchanged-p): Disable mtime check when we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann. --- lisp/vc-hooks.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el index 81a18eadd87..52b4659cec6 100644 --- a/lisp/vc-hooks.el +++ b/lisp/vc-hooks.el @@ -481,7 +481,9 @@ and does not employ any heuristic at all." "Return non-nil if FILE has not changed since the last checkout." (let ((checkout-time (vc-file-getprop file 'vc-checkout-time)) (lastmod (nth 5 (file-attributes file)))) - (if checkout-time + (if (and checkout-time + ;; Tramp and Ange-FTP return this when they don't know the time. + (not (equal lastmod '(0 0)))) (equal checkout-time lastmod) (let ((unchanged (vc-call workfile-unchanged-p file))) (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0)) From 2e2255f62fa0543baf7c22c3e9dcf3a2361da62e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Spiegel?= Date: Fri, 1 Apr 2005 17:33:55 +0000 Subject: [PATCH 162/241] # --- lisp/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 17c580e0efc..6f74b8d4c6a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-01 Andre Spiegel + + * vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when + we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann. + 2005-03-31 Luc Teirlinck * files.el (mode-require-final-newline): Make Custom correctly From 8f53f317b1727fb63d343be28c985d3b73c8299f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 1 Apr 2005 17:58:09 +0000 Subject: [PATCH 163/241] (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check): Use buffer-live-p. (cvs-mode-run): Don't call cvs-update-header here. (cvs-run-process): Call cvs-update-header. Use process properties for cvs-postprocess and cvs-buffer so that the sentinel can behave better if the temp buffer is killed. Use a pipe rather than a tty, to better handle unexpected prompts. (cvs-sentinel): Rewrite. Call cvs-update-header. --- lisp/pcvs.el | 105 +++++++++++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/lisp/pcvs.el b/lisp/pcvs.el index b00de07e50f..9ea0f311bed 100644 --- a/lisp/pcvs.el +++ b/lisp/pcvs.el @@ -358,7 +358,7 @@ from the current buffer." (dir default-directory) (buf (cond (name (cvs-get-buffer-create name)) - ((and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer)) + ((and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer)) cvs-temp-buffer) (t (set (make-local-variable 'cvs-temp-buffer) @@ -528,39 +528,49 @@ If non-nil, NEW means to create a new buffer no matter what." (files (nth 1 dir+files+rest)) (rest (nth 2 dir+files+rest))) - ;; setup the (current) process buffer - (set (make-local-variable 'cvs-postprocess) - (if (null rest) - ;; this is the last invocation - postprocess - ;; else, we have to register ourselves to be rerun on the rest - `(cvs-run-process ',args ',rest ',postprocess ',single-dir))) (add-hook 'kill-buffer-hook (lambda () (let ((proc (get-buffer-process (current-buffer)))) (when (processp proc) (set-process-filter proc nil) - (set-process-sentinel proc nil) - (delete-process proc)))) + ;; Abort postprocessing but leave the sentinel so it + ;; will update the list of running procs. + (process-put proc 'cvs-postprocess nil) + (interrupt-process proc)))) nil t) ;; create the new process and setup the procbuffer correspondingly - (let* ((args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery) + (let* ((msg (cvs-header-msg args fis)) + (args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery) (if cvs-cvsroot (list "-d" cvs-cvsroot)) args files)) ;; If process-connection-type is nil and the repository ;; is accessed via SSH, a bad interaction between libc, ;; CVS and SSH can lead to garbled output. - ;; It might be a glibc-specific problem (but it also happens + ;; It might be a glibc-specific problem (but it can also happens ;; under Mac OS X, it seems). - ;; Until the problem is cleared, we'll use a pty rather than - ;; a pipe. - ;; (process-connection-type nil) ; Use a pipe, not a pty. + ;; It seems that using a pty can help circumvent the problem, + ;; but at the cost of screwing up when the process thinks it + ;; can ask for user input (such as password or host-key + ;; confirmation). A better workaround is to set CVS_RSH to + ;; an appropriate script, or to use a later version of CVS. + (process-connection-type nil) ; Use a pipe, not a pty. (process ;; the process will be run in the selected dir (let ((default-directory (cvs-expand-dir-name dir))) (apply 'start-process "cvs" procbuf cvs-program args)))) + ;; setup the process. + (process-put process 'cvs-buffer cvs-buffer) + (with-current-buffer cvs-buffer (cvs-update-header msg 'add)) + (process-put process 'cvs-header msg) + (process-put + process 'cvs-postprocess + (if (null rest) + ;; this is the last invocation + postprocess + ;; else, we have to register ourselves to be rerun on the rest + `(cvs-run-process ',args ',rest ',postprocess ',single-dir))) (set-process-sentinel process 'cvs-sentinel) (set-process-filter process 'cvs-update-filter) (set-marker (process-mark process) (point-max)) @@ -636,33 +646,35 @@ If non-nil, NEW means to create a new buffer no matter what." This is responsible for parsing the output from the cvs update when it is finished." (when (memq (process-status proc) '(signal exit)) - (if (null (buffer-name (process-buffer proc))) - ;;(set-process-buffer proc nil) - (error "cvs' process buffer was killed") - (let* ((obuf (current-buffer)) - (procbuffer (process-buffer proc))) - (set-buffer (with-current-buffer procbuffer cvs-buffer)) - (setq cvs-mode-line-process (symbol-name (process-status proc))) - (force-mode-line-update) - (set-buffer procbuffer) - (let ((cvs-postproc cvs-postprocess)) - ;; Since the buffer and mode line will show that the - ;; process is dead, we can delete it now. Otherwise it - ;; will stay around until M-x list-processes. - (delete-process proc) - (setq cvs-postprocess nil) - ;; do the postprocessing like parsing and such - (save-excursion (eval cvs-postproc)) - ;; check whether something is left - (unless cvs-postprocess - ;; IIRC, we enable undo again once the process is finished - ;; for cases where the output was inserted in *vc-diff* or - ;; in a file-like buffer. -stef - (buffer-enable-undo) - (with-current-buffer cvs-buffer - (message "CVS process has completed in %s" (buffer-name))))) - ;; This might not even be necessary - (set-buffer obuf))))) + (let ((cvs-postproc (process-get proc 'postprocess)) + (cvs-buf (process-get proc 'cvs-buffer))) + ;; Since the buffer and mode line will show that the + ;; process is dead, we can delete it now. Otherwise it + ;; will stay around until M-x list-processes. + (process-put proc 'postprocess nil) + (delete-process proc) + ;; Don't do anything if the main buffer doesn't exist any more. + (when (buffer-live-p cvs-buf) + (with-current-buffer cvs-buf + (cvs-update-header (process-get proc 'cvs-header) nil) + (setq cvs-mode-line-process (symbol-name (process-status proc))) + (force-mode-line-update) + (when cvs-postproc + (if (null (buffer-live-p (process-buffer proc))) + ;;(set-process-buffer proc nil) + (error "cvs' process buffer was killed") + (with-current-buffer (process-buffer proc) + ;; do the postprocessing like parsing and such + (save-excursion (eval cvs-postproc)) + ;; check whether something is left + (unless (get-buffer-process (current-buffer)) + ;; IIRC, we enable undo again once the process is finished + ;; for cases where the output was inserted in *vc-diff* or + ;; in a file-like buffer. --Stef + (buffer-enable-undo) + (with-current-buffer cvs-buffer + (message "CVS process has completed in %s" + (buffer-name)))))))))))) (defun cvs-parse-process (dcd &optional subdir old-fis) "Parse the output of a cvs process. @@ -770,7 +782,7 @@ before calling the real function `" (symbol-name fun-1) "'.\n") (defun-cvs-mode cvs-mode-kill-process () "Kill the temporary buffer and associated process." (interactive) - (when (and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer)) + (when (and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer)) (let ((proc (get-buffer-process cvs-temp-buffer))) (when proc (delete-process proc))))) @@ -1133,7 +1145,7 @@ Full documentation is in the Texinfo file." (eq (ewoc-buffer cvs-cookies) buf) (setq check 'cvs-temp-buffer) (or (null cvs-temp-buffer) - (null (buffer-name cvs-temp-buffer)) + (null (buffer-live-p cvs-temp-buffer)) (and (eq (with-current-buffer cvs-temp-buffer cvs-buffer) buf) (equal (with-current-buffer cvs-temp-buffer default-directory) @@ -1822,11 +1834,6 @@ POSTPROC is a list of expressions to be evaluated at the very end (after ;; absence of `cvs update' output has a specific meaning. (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." "")))))) (push `(cvs-parse-process ',dont-change-disc nil ',old-fis) postproc))) - (let ((msg (cvs-header-msg args fis))) - (cvs-update-header msg 'add) - (push `(with-current-buffer cvs-buffer - (cvs-update-header ',msg nil)) - postproc)) (setq postproc (if (cdr postproc) (cons 'progn postproc) (car postproc))) (with-current-buffer buf (let ((inhibit-read-only t)) (erase-buffer)) From 5f0e7257a7ecce50cf8a6839b3bf9115925c999a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 1 Apr 2005 18:01:55 +0000 Subject: [PATCH 164/241] (cvs-sentinel): Fix last change. --- lisp/pcvs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/pcvs.el b/lisp/pcvs.el index 9ea0f311bed..7330960b93e 100644 --- a/lisp/pcvs.el +++ b/lisp/pcvs.el @@ -646,7 +646,7 @@ If non-nil, NEW means to create a new buffer no matter what." This is responsible for parsing the output from the cvs update when it is finished." (when (memq (process-status proc) '(signal exit)) - (let ((cvs-postproc (process-get proc 'postprocess)) + (let ((cvs-postproc (process-get proc 'cvs-postprocess)) (cvs-buf (process-get proc 'cvs-buffer))) ;; Since the buffer and mode line will show that the ;; process is dead, we can delete it now. Otherwise it From cecdd741d8103eddad52198b7eb46bf4967de8b7 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Fri, 1 Apr 2005 18:16:14 +0000 Subject: [PATCH 165/241] Fix title line. --- etc/TUTORIAL.nl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/etc/TUTORIAL.nl b/etc/TUTORIAL.nl index 905021095db..6b6a20a1bba 100644 --- a/etc/TUTORIAL.nl +++ b/etc/TUTORIAL.nl @@ -1,5 +1,4 @@ -Emacs-inleiding -Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan. +Emacs-inleiding. De kopieervoorwaarden staan onderaan. Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation De meeste Emacs-commando's gebruiken de CONTROL-toets (soms CTRL of CTL From 1d88af0416848585bd4eb22bb6cadb700615f04d Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Fri, 1 Apr 2005 18:18:25 +0000 Subject: [PATCH 166/241] *** empty log message *** --- admin/FOR-RELEASE | 4 ++-- etc/ChangeLog | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 0c9c0565ccd..129ae824914 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -221,7 +221,7 @@ lispref/frames.texi "Luc Teirlinck" Chong Yidong lispref/functions.texi "Luc Teirlinck" Chong Yidong lispref/hash.texi "Luc Teirlinck" Chong Yidong lispref/help.texi "Luc Teirlinck" Chong Yidong -lispref/hooks.texi +lispref/hooks.texi Lute Kamstra lispref/internals.texi "Luc Teirlinck" Chong Yidong lispref/intro.texi "Luc Teirlinck" lispref/keymaps.texi "Luc Teirlinck" Chong Yidong @@ -273,7 +273,7 @@ etc/TUTORIAL.fr etc/TUTORIAL.it etc/TUTORIAL.ja etc/TUTORIAL.ko -etc/TUTORIAL.nl +etc/TUTORIAL.nl Lute Kamstra etc/TUTORIAL.pl etc/TUTORIAL.pt_BR etc/TUTORIAL.ro diff --git a/etc/ChangeLog b/etc/ChangeLog index aaefbea4b09..f0aaa3e6186 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2005-04-01 Lute Kamstra + + * TUTORIAL.nl: Fix title line. + 2005-03-30 Thien-Thi Nguyen * TUTORIAL: Add title line. From 2015c054d972c75c0a579265c97c595887fa199b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Fri, 1 Apr 2005 18:42:19 +0000 Subject: [PATCH 167/241] * xlwmenu.c (string_width): (MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto. (display_menu_item, make_drawing_gcs, XlwMenuInitialize) (XlwMenuSetValues): Use font if fontSet is NULL, use only font for !HAVE_X_I18N. (xlwMenuResources): Add fontSet resource. --- lwlib/xlwmenu.c | 132 +++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 74 deletions(-) diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index 77b61d32e21..3fab2e80dbe 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -131,20 +131,16 @@ xlwMenuTranslations [] = /* FIXME: F10 should enter the menu, the first one in the menu-bar. */ -/* FIXME: HAVE_X_I18N does not work yet. */ -#undef HAVE_X_I18N - #define offset(field) XtOffset(XlwMenuWidget, field) static XtResource xlwMenuResources[] = { #ifdef HAVE_X_I18N - {XtNfont, XtCFont, XtRFontSet, sizeof(XFontSet), - offset(menu.font), XtRString, "XtDefaultFontSet"}, -#else + {XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet), + offset(menu.fontSet), XtRFontSet, NULL}, +#endif {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), offset(menu.font), XtRString, "XtDefaultFont"}, -#endif {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), offset(menu.foreground), XtRString, "XtDefaultForeground"}, {XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel), @@ -361,24 +357,31 @@ string_width (mw, s) XlwMenuWidget mw; char *s; { -#ifdef HAVE_X_I18N - XRectangle ink, logical; - XmbTextExtents (mw->menu.font, s, strlen (s), &ink, &logical); - return logical.width; -#else XCharStruct xcs; int drop; +#ifdef HAVE_X_I18N + XRectangle ink, logical; + if (mw->menu.fontSet) + { + XmbTextExtents (mw->menu.fontSet, s, strlen (s), &ink, &logical); + return logical.width; + } +#endif XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs); return xcs.width; -#endif + } #ifdef HAVE_X_I18N #define MENU_FONT_HEIGHT(mw) \ - ((mw)->menu.font_extents->max_logical_extent.height) + ((mw)->menu.fontSet != NULL \ + ? (mw)->menu.font_extents->max_logical_extent.height \ + : (mw)->menu.font->ascent + (mw)->menu.font->descent) #define MENU_FONT_ASCENT(mw) \ - (- (mw)->menu.font_extents->max_logical_extent.y) + ((mw)->menu.fontSet != NULL \ + ? - (mw)->menu.font_extents->max_logical_extent.y \ + : (mw)->menu.font->ascent) #else #define MENU_FONT_HEIGHT(mw) \ ((mw)->menu.font->ascent + (mw)->menu.font->descent) @@ -1053,10 +1056,14 @@ display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p, #ifdef HAVE_X_I18N - XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, -#else - XDrawString (XtDisplay (mw), ws->window, + if (mw->menu.fontSet) + XmbDrawString (XtDisplay (mw), ws->window, mw->menu.fontSet, + text_gc, x_offset, + y + v_spacing + shadow + font_ascent, + display_string, strlen (display_string)); + else #endif + XDrawString (XtDisplay (mw), ws->window, text_gc, x_offset, y + v_spacing + shadow + font_ascent, display_string, strlen (display_string)); @@ -1083,10 +1090,16 @@ display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p, else if (val->key) { #ifdef HAVE_X_I18N - XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, -#else - XDrawString (XtDisplay (mw), ws->window, + if (mw->menu.fontSet) + XmbDrawString (XtDisplay (mw), ws->window, + mw->menu.fontSet, + text_gc, + x + label_width + mw->menu.arrow_spacing, + y + v_spacing + shadow + font_ascent, + val->key, strlen (val->key)); + else #endif + XDrawString (XtDisplay (mw), ws->window, text_gc, x + label_width + mw->menu.arrow_spacing, y + v_spacing + shadow + font_ascent, @@ -1493,34 +1506,25 @@ make_drawing_gcs (mw) { XGCValues xgcv; float scale; + XtGCMask mask = GCForeground | GCBackground; -#ifndef HAVE_X_I18N +#ifdef HAVE_X_I18N + if (!mw->menu.fontSet) + { + xgcv.font = mw->menu.font->fid; + mask |= GCFont; + } +#else xgcv.font = mw->menu.font->fid; + mask |= GCFont; #endif xgcv.foreground = mw->menu.foreground; xgcv.background = mw->core.background_pixel; - mw->menu.foreground_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.foreground_gc = XtGetGC ((Widget)mw, mask, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->menu.button_foreground; - xgcv.background = mw->core.background_pixel; - mw->menu.button_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.button_gc = XtGetGC ((Widget)mw, mask, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.background = mw->core.background_pixel; #define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff)) @@ -1545,49 +1549,26 @@ make_drawing_gcs (mw) xgcv.foreground = mw->menu.foreground; xgcv.fill_style = FillStippled; xgcv.stipple = mw->menu.gray_pixmap; - mw->menu.disabled_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground + mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask | GCFillStyle | GCStipple, &xgcv); } else { /* Many colors available, use disabled pixel. */ xgcv.foreground = mw->menu.disabled_foreground; - mw->menu.disabled_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, &xgcv); + mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask, &xgcv); } -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->menu.button_foreground; xgcv.background = mw->core.background_pixel; xgcv.fill_style = FillStippled; xgcv.stipple = mw->menu.gray_pixmap; - mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground + mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, mask | GCFillStyle | GCStipple, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->core.background_pixel; xgcv.background = mw->menu.foreground; - mw->menu.background_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.background_gc = XtGetGC ((Widget)mw, mask, &xgcv); } static void @@ -1793,14 +1774,14 @@ XlwMenuInitialize (request, mw, args, num_args) gray_bitmap_width, gray_bitmap_height, (unsigned long)1, (unsigned long)0, 1); -#ifndef HAVE_X_I18N /* I don't understand why this ends up 0 sometimes, but it does. This kludge works around it. Can anyone find a real fix? -- rms. */ if (mw->menu.font == 0) mw->menu.font = xlwmenu_default_font; -#else - mw->menu.font_extents = XExtentsOfFontSet (mw->menu.font); +#ifdef HAVE_X_I18N + if (mw->menu.fontSet) + mw->menu.font_extents = XExtentsOfFontSet (mw->menu.fontSet); #endif make_drawing_gcs (mw); @@ -1969,7 +1950,10 @@ XlwMenuSetValues (current, request, new) if (newmw->core.background_pixel != oldmw->core.background_pixel || newmw->menu.foreground != oldmw->menu.foreground -#ifndef HAVE_X_I18N +#ifdef HAVE_X_I18N + || newmw->menu.fontSet != oldmw->menu.fontSet + || (newmw->menu.fontSet == NULL && newmw->menu.font != oldmw->menu.font) +#else || newmw->menu.font != oldmw->menu.font #endif ) @@ -1999,10 +1983,10 @@ XlwMenuSetValues (current, request, new) } #ifdef HAVE_X_I18N - if (newmw->menu.font != oldmw->menu.font) + if (newmw->menu.fontSet != oldmw->menu.fontSet && newmw->menu.fontSet != NULL) { redisplay = True; - newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.font); + newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.fontSet); } #endif From 37484540505b15f84f3eb33726df96450a1cc500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Fri, 1 Apr 2005 18:42:33 +0000 Subject: [PATCH 168/241] * xlwmenuP.h (_XlwMenu_part): Add fontSet resource. --- lwlib/xlwmenuP.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lwlib/xlwmenuP.h b/lwlib/xlwmenuP.h index 12cc1790d9d..ac908d34b74 100644 --- a/lwlib/xlwmenuP.h +++ b/lwlib/xlwmenuP.h @@ -24,9 +24,6 @@ Boston, MA 02111-1307, USA. */ #include "xlwmenu.h" #include -/* FIXME: HAVE_X_I18N does not work yet. */ -#undef HAVE_X_I18N - /* Elements in the stack arrays. */ typedef struct _window_state { @@ -47,11 +44,10 @@ typedef struct _XlwMenu_part { /* slots set by the resources */ #ifdef HAVE_X_I18N - XFontSet font; + XFontSet fontSet; XFontSetExtents *font_extents; -#else - XFontStruct* font; #endif + XFontStruct* font; Pixel foreground; Pixel disabled_foreground; Pixel button_foreground; From 52a9f3a0d69e700a7097156fa2112fba4f12d431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Fri, 1 Apr 2005 18:42:56 +0000 Subject: [PATCH 169/241] Reenable support for I18N to Lucid menus. * xlwmenuP.h (_XlwMenu_part): Add fontSet resource. * xlwmenu.c (string_width): (MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto. (display_menu_item, make_drawing_gcs, XlwMenuInitialize) (XlwMenuSetValues): Use font if fontSet is NULL, use only font for !HAVE_X_I18N. (xlwMenuResources): Add fontSet resource. --- lwlib/ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 7823673ec1b..d085f41ff77 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,16 @@ +2005-04-01 Jan Dj,Ad(Brv + + Reenable support for I18N to Lucid menus. + + * xlwmenuP.h (_XlwMenu_part): Add fontSet resource. + + * xlwmenu.c (string_width): + (MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto. + (display_menu_item, make_drawing_gcs, XlwMenuInitialize) + (XlwMenuSetValues): Use font if fontSet is NULL, use only + font for !HAVE_X_I18N. + (xlwMenuResources): Add fontSet resource. + 2005-03-22 Jan Dj,Ad(Brv * xlwmenuP.h: Temporary #undef HAVE_X_I18N until FontSet for UTF-8 From 392fe1b7258bfef56df6f32f83edef06adc1cc38 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 1 Apr 2005 19:00:53 +0000 Subject: [PATCH 170/241] *** empty log message *** --- lisp/ChangeLog | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6f74b8d4c6a..d3254eaa622 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,8 +1,23 @@ +2005-04-01 Stefan Monnier + + * pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check): + Use buffer-live-p. + (cvs-mode-run): Don't call cvs-update-header here. + (cvs-run-process): Call cvs-update-header. + Use process properties for cvs-postprocess and cvs-buffer so that + the sentinel can behave better if the temp buffer is killed. + Use a pipe rather than a tty, to better handle unexpected prompts. + (cvs-sentinel): Rewrite. Call cvs-update-header. + 2005-04-01 Andre Spiegel * vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann. +2005-03-31 Stefan Monnier + + * generic.el (define-generic-mode): Add indentation rule. + 2005-03-31 Luc Teirlinck * files.el (mode-require-final-newline): Make Custom correctly @@ -25,11 +40,11 @@ Handle define-global-minor-mode. * emacs-lisp/easy-mmode.el (define-global-minor-mode): - Renamed from easy-mmode-define-global-mode. + Rename from easy-mmode-define-global-mode. (easy-mmode-define-global-mode): Alias for define-global-minor-mode. - * progmodes/scheme.el (scheme-mode-syntax-table): Update - syntax of | and # for two-character comment syntax. + * progmodes/scheme.el (scheme-mode-syntax-table): + Update syntax of | and # for two-character comment syntax. 2005-03-31 Lute Kamstra @@ -122,13 +137,13 @@ * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) (org-agenda-convert-date, org-agenda-goto-calendar): New commands. (org-diary-default-entry): New function. - (org-get-entries-from-diary): Better parsing of diary entries + (org-get-entries-from-diary): Better parsing of diary entries. (org-agenda-check-no-diary): New function. ("diary-lib"): Advice to function `add-to-diary-list', to allow linking to diary entries. - (org-agenda-execute-calendar-command): New function - (org-agenda): Improved visible section in window. And - use `org-fit-agenda-window'. + (org-agenda-execute-calendar-command): New function. + (org-agenda): Improve visible section in window. + Use `org-fit-agenda-window'. (org-fit-agenda-window): New option. (org-move-subtree-down): Better handling of empty lines at end of subtree. @@ -137,12 +152,10 @@ (org-fontify-done-headline): New option. (org-headline-done-face): New face. (org-set-font-lock-defaults): Use `org-headline-done-face'. - (org-table-copy-down): renamed from - `org-table-copy-from-above'. When current field is non-empty, it - is copied to next row. - (org-table-copy-from-above): Fixed bug which made it - impossible to copy fields containing only a single non-white - character. + (org-table-copy-down): Rename from `org-table-copy-from-above'. + When current field is non-empty, it is copied to next row. + (org-table-copy-from-above): Fix bug which made it + impossible to copy fields containing only a single non-white character. 2005-03-30 Kim F. Storm From 60afc271ff91a4eef0b5a9a7dbfe41c7b5b4f07e Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 1 Apr 2005 21:43:47 +0000 Subject: [PATCH 171/241] calc.el (calc-settings-file, calc-language-alist): Make customizable. (calc-embedded-announce-formula, calc-embedded-open-formula) (calc-embedded-close-formula, calc-embedded-open-word) (calc-embedded-close-word, calc-embedded-open-plain) (calc-embedded-close-plain, calc-embedded-open-new-formula) (calc-embedded-close-new-formula, calc-embedded-open-mode) (calc-embedded-close-mode, calc-gnuplot-name, calc-gnuplot-plot-command) (calc-gnuplot-print-command): Move here from other files and make customizable. --- lisp/calc/calc.el | 116 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 639b6f31a68..3d78599ecc1 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -206,9 +206,121 @@ (require 'calc-macs) +(defgroup calc nil + "GNU Calc" + :prefix "calc-" + :tag "Calc") + ;;;###autoload -(defvar calc-settings-file (convert-standard-filename "~/.calc.el") - "*File in which to record permanent settings.") +(defcustom calc-settings-file + (convert-standard-filename "~/.calc.el") + "*File in which to record permanent settings." + :group 'calc + :type '(file)) + +(defcustom calc-language-alist + '((latex-mode . latex) + (tex-mode . tex) + (plain-tex-mode . tex) + (context-mode . tex) + (nroff-mode . eqn) + (pascal-mode . pascal) + (c-mode . c) + (c++-mode . c) + (fortran-mode . fortran) + (f90-mode . fortran)) + "*Alist of major modes with appropriate Calc languages." + :group 'calc + :type '(alist :key-type symbol :value-type symbol)) + +(defcustom calc-embedded-announce-formula + "%Embed\n\\(% .*\n\\)*" + "*A regular expression which is sure to be followed by a calc-embedded formula." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-open-formula + "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" + "*A regular expression for the opening delimiter of a formula used by calc-embedded." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-close-formula + "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n" + "*A regular expression for the closing delimiter of a formula used by calc-embedded." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-open-word + "^\\|[^-+0-9.eE]" + "*A regular expression for the opening delimiter of a formula used by calc-embedded-word." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-close-word + "$\\|[^-+0-9.eE]" + "*A regular expression for the closing delimiter of a formula used by calc-embedded-word." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-open-plain + "%%% " + "*A string which is the opening delimiter for a \"plain\" formula. +If calc-show-plain mode is enabled, this is inserted at the front of +each formula." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-close-plain + " %%%\n" + "*A string which is the closing delimiter for a \"plain\" formula. +See calc-embedded-open-plain." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-open-new-formula + "\n\n" + "*A string which is inserted at front of formula by calc-embedded-new-formula." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-close-new-formula + "\n\n" + "*A string which is inserted at end of formula by calc-embedded-new-formula." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-open-mode + "% " + "*A string which should precede calc-embedded mode annotations. +This is not required to be present for user-written mode annotations." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-close-mode + "\n" + "*A string which should follow calc-embedded mode annotations. +This is not required to be present for user-written mode annotations." + :group 'calc + :type '(string)) + +(defcustom calc-gnuplot-name + "gnuplot" + "*Name of GNUPLOT program, for calc-graph features." + :group 'calc + :type '(string)) + +(defcustom calc-gnuplot-plot-command + nil + "*Name of command for displaying GNUPLOT output; %s = file name to print." + :group 'calc + :type '(choice (string) (sexp))) + +(defcustom calc-gnuplot-print-command + "lp %s" + "*Name of command for printing GNUPLOT output; %s = file name to print." + :group 'calc + :type '(choice (string) (sexp))) (defvar calc-bug-address "belanger@truman.edu" "Address of the author of Calc, for use by `report-calc-bug'.") From 1f9d9bb9a2146e6de3aa0124e51ffa35a4d39dad Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 1 Apr 2005 21:44:21 +0000 Subject: [PATCH 172/241] calc-embed.el (calc-embedded-announce-formula, calc-embedded-open-formula) (calc-embedded-close-formula, calc-embedded-open-word) (calc-embedded-close-word, calc-embedded-open-plain) (calc-embedded-close-plain, calc-embedded-open-new-formula) (calc-embedded-close-new-formula, calc-embedded-open-mode) (calc-embedded-close-mode): Move definitions to calc.el. --- lisp/calc/calc-embed.el | 56 ++++++++++------------------------------- 1 file changed, 13 insertions(+), 43 deletions(-) diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el index 2d2f66b1ebf..4f45419c136 100644 --- a/lisp/calc/calc-embed.el +++ b/lisp/calc/calc-embed.el @@ -1,6 +1,6 @@ ;;; calc-embed.el --- embed Calc in a buffer -;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc. ;; Author: David Gillespie ;; Maintainer: Jay Belanger @@ -48,48 +48,18 @@ (defvar calc-embedded-some-active nil) (make-variable-buffer-local 'calc-embedded-some-active) -(defvar calc-embedded-open-formula "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" - "*A regular expression for the opening delimiter of a formula used by -calc-embedded.") - -(defvar calc-embedded-close-formula "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n" - "*A regular expression for the closing delimiter of a formula used by -calc-embedded.") - -(defvar calc-embedded-open-word "^\\|[^-+0-9.eE]" - "*A regular expression for the opening delimiter of a formula used by -calc-embedded-word.") - -(defvar calc-embedded-close-word "$\\|[^-+0-9.eE]" - "*A regular expression for the closing delimiter of a formula used by -calc-embedded-word.") - -(defvar calc-embedded-open-plain "%%% " - "*A string which is the opening delimiter for a \"plain\" formula. -If calc-show-plain mode is enabled, this is inserted at the front of -each formula.") - -(defvar calc-embedded-close-plain " %%%\n" - "*A string which is the closing delimiter for a \"plain\" formula. -See calc-embedded-open-plain.") - -(defvar calc-embedded-open-new-formula "\n\n" - "*A string which is inserted at front of formula by calc-embedded-new-formula.") - -(defvar calc-embedded-close-new-formula "\n\n" - "*A string which is inserted at end of formula by calc-embedded-new-formula.") - -(defvar calc-embedded-announce-formula "%Embed\n\\(% .*\n\\)*" - "*A regular expression which is sure to be followed by a calc-embedded formula." ) - -(defvar calc-embedded-open-mode "% " - "*A string which should precede calc-embedded mode annotations. -This is not required to be present for user-written mode annotations.") - -(defvar calc-embedded-close-mode "\n" - "*A string which should follow calc-embedded mode annotations. -This is not required to be present for user-written mode annotations.") - +;; The following variables are customizable and defined in calc.el. +(defvar calc-embedded-announce-formula) +(defvar calc-embedded-open-formula) +(defvar calc-embedded-close-formula) +(defvar calc-embedded-open-word) +(defvar calc-embedded-close-word) +(defvar calc-embedded-open-plain) +(defvar calc-embedded-close-plain) +(defvar calc-embedded-open-new-formula) +(defvar calc-embedded-close-new-formula) +(defvar calc-embedded-open-mode) +(defvar calc-embedded-close-mode) (defconst calc-embedded-mode-vars '(("precision" . calc-internal-prec) ("word-size" . calc-word-size) From fa1c95dfe5306ae11cd14a4bb6432b4105d3e1b3 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 1 Apr 2005 21:44:53 +0000 Subject: [PATCH 173/241] calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command, calc-gnuplot-print-command): Move definitions to calc.el. --- lisp/calc/calc-graph.el | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lisp/calc/calc-graph.el b/lisp/calc/calc-graph.el index 662de5db867..6a58a6215fa 100644 --- a/lisp/calc/calc-graph.el +++ b/lisp/calc/calc-graph.el @@ -1,6 +1,6 @@ ;;; calc-graph.el --- graph output functions for Calc -;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc. ;; Author: David Gillespie ;; Maintainer: Jay Belanger @@ -33,14 +33,10 @@ ;;; Graphics -(defvar calc-gnuplot-name "gnuplot" - "*Name of GNUPLOT program, for calc-graph features.") - -(defvar calc-gnuplot-plot-command nil - "*Name of command for displaying GNUPLOT output; %s = file name to print.") - -(defvar calc-gnuplot-print-command "lp %s" - "*Name of command for printing GNUPLOT output; %s = file name to print.") +;; The following three variables are customizable and defined in calc.el. +(defvar calc-gnuplot-name) +(defvar calc-gnuplot-plot-command) +(defvar calc-gnuplot-print-command) (defvar calc-gnuplot-tempfile "calc") From b154df16653812ee7dc1080dfd6c49b95d84fb8f Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 1 Apr 2005 21:45:36 +0000 Subject: [PATCH 174/241] (Troubleshooting Commands): Remove comment about installation. (Installation): Remove section. (Customizable Variables): New section. (Basic Embedded Mode, Customizing Embedded Mode, Graphics) (Graphical Devices): Add references to Customizable Variables. --- man/calc.texi | 263 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 197 insertions(+), 66 deletions(-) diff --git a/man/calc.texi b/man/calc.texi index 07c33206f28..087cdbe6457 100644 --- a/man/calc.texi +++ b/man/calc.texi @@ -165,7 +165,7 @@ longer Info tutorial.) * Embedded Mode:: Working with formulas embedded in a file. * Programming:: Calc as a programmable calculator. -* Installation:: Installing Calc as a part of GNU Emacs. +* Customizable Variables:: Customizable Variables. * Reporting Bugs:: How to report bugs and make suggestions. * Summary:: Summary of Calc commands and functions. @@ -10613,11 +10613,6 @@ If this happens, the easiest workaround is to type @kbd{M-# L} loaded right away. This will cause Emacs to take up a lot more memory than it would otherwise, but it's guaranteed to fix the problem. -If you seem to run into this problem no matter what you do, or if -even the @kbd{M-# L} command crashes, Calc may have been improperly -installed. @xref{Installation}, for details of the installation -process. - @node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands @subsection Recursion Depth @@ -12306,7 +12301,7 @@ if this file exists, and this file becomes the one that Calc will use in the future for commands like @kbd{m m}. The default settings file name is @file{~/.calc.el}. You can see the current file name by giving a blank response to the @kbd{m F} prompt. See also the -discussion of the @code{calc-settings-file} variable; @pxref{Installation}. +discussion of the @code{calc-settings-file} variable; @pxref{Customizable Variables}. If the file name you give is your user init file (typically @file{~/.emacs}), @kbd{m F} will not automatically load the new file. This @@ -29109,7 +29104,7 @@ of the @samp{*Gnuplot Commands*} buffer. @vindex calc-gnuplot-print-command @vindex calc-gnuplot-print-device @vindex calc-gnuplot-print-output -If you are installing Calc you may wish to configure the default and +You may wish to configure the default and printer devices and output files for the whole system. The relevant Lisp variables are @code{calc-gnuplot-default-device} and @code{-output}, and @code{calc-gnuplot-print-device} and @code{-output}. The output @@ -29122,7 +29117,8 @@ display or print the output of GNUPLOT, respectively. These may be @code{nil} if no command is necessary, or strings which can include @samp{%s} to signify the name of the file to be displayed or printed. Or, these variables may contain Lisp expressions which are evaluated -to display or print the output. +to display or print the output. These variables are customizable +(@pxref{Customizable Variables}). @kindex g x @pindex calc-graph-display @@ -29910,7 +29906,8 @@ Similarly, Calc will use @TeX{} language for @code{tex-mode}, @code{plain-tex-mode} and @code{context-mode}, C language for @code{c-mode} and @code{c++-mode}, FORTRAN language for @code{fortran-mode} and @code{f90-mode}, Pascal for @code{pascal-mode}, -and eqn for @code{nroff-mode}. These can be overridden with Calc's mode +and eqn for @code{nroff-mode} (@pxref{Customizable Variables}). +These can be overridden with Calc's mode changing commands (@pxref{Mode Settings in Embedded Mode}). If no suitable language is available, Calc will continue with its current language. @@ -30612,10 +30609,10 @@ for @code{Save} have no effect. @noindent You can modify Embedded mode's behavior by setting various Lisp -variables described here. Use @kbd{M-x set-variable} or -@kbd{M-x edit-options} to adjust a variable on the fly, or -put a suitable @code{setq} statement in your Calc init file (or -@file{~/.emacs}) to set a variable permanently. (Another possibility would +variables described here. These variables are customizable +(@pxref{Customizable Variables}), or you can use @kbd{M-x set-variable} +or @kbd{M-x edit-options} to adjust a variable on the fly. +(Another possibility would be to use a file-local variable annotation at the end of the file; @pxref{File Variables, , Local Variables in Files, emacs, the Emacs manual}.) @@ -30760,7 +30757,7 @@ is simply a newline, @code{"\n"}. If you change this, it is a good idea still to end with a newline so that mode annotations will appear on lines by themselves. -@node Programming, Installation, Embedded Mode, Top +@node Programming, Customizable Variables, Embedded Mode, Top @chapter Programming @noindent @@ -34610,70 +34607,204 @@ used the first time, your hook should add a variable to the list and also call @code{make-local-variable} itself. @end defvar -@node Installation, Reporting Bugs, Programming, Top -@appendix Installation +@node Customizable Variables, Reporting Bugs, Programming, Top +@appendix Customizable Variables -@noindent -As of Calc 2.02g, Calc is integrated with GNU Emacs, and thus requires -no separate installation of its Lisp files and this manual. +GNU Calc is controlled by many variables, most of which can be reset +from within Calc. Some variables are less involved with actual +calculation, and can be set outside of Calc using Emacs's +customization facilities. These variables are listed below. +Typing @kbd{M-x customize-variable RET @var{variable-name} RET} +will bring up a buffer in which the variable's value can be redefined. +Typing @kbd{M-x customize-group RET calc RET} will bring up a buffer which +contains all of Calc's customizable variables. (These variables can +also be reset by putting the appropriate lines in your .emacs file; +@xref{Init File, ,Init File, emacs, The GNU Emacs Manual}.) -@appendixsec The GNUPLOT Program +Some of the customizable variables are regular expressions. A regular +expression is basically a pattern that Calc can search for. +See @ref{Regexp Search,, Regular Expression Search, emacs, The GNU Emacs Manual} +to see how regular expressions work. -@noindent -Calc's graphing commands use the GNUPLOT program. If you have GNUPLOT -but you must type some command other than @file{gnuplot} to get it, -you should add a command to set the Lisp variable @code{calc-gnuplot-name} -to the appropriate file name. You may also need to change the variables -@code{calc-gnuplot-plot-command} and @code{calc-gnuplot-print-command} in -order to get correct displays and hardcopies, respectively, of your -plots. +@table @code -@ifinfo -@example +@item calc-settings-file -@end example -@end ifinfo - -@appendixsec Settings File - -@noindent @vindex calc-settings-file -Another variable you might want to set is @code{calc-settings-file}, -which holds the file name in which commands like @kbd{m m} and @kbd{Z P} -store ``permanent'' definitions. The default value for this variable -is @code{"~/.calc.el"}. If @code{calc-settings-file} is not your user -init file (typically @file{~/.emacs}) and if the variable -@code{calc-loaded-settings-file} is @code{nil}, then Calc will -automatically load your settings file (if it exists) the first time -Calc is invoked. +The variable @code{calc-settings-file} holds the file name in +which commands like @kbd{m m} and @kbd{Z P} store ``permanent'' +definitions. +If @code{calc-settings-file} is not your user init file (typically +@file{~/.emacs}) and if the variable @code{calc-loaded-settings-file} is +@code{nil}, then Calc will automatically load your settings file (if it +exists) the first time Calc is invoked. -@ifinfo +The default value for this variable is @code{"~/.calc.el"}. + +@item calc-gnuplot-name + +See @ref{Graphics}.@* +The variable @code{calc-gnuplot-name} should be the name of the +GNUPLOT program (a string). If you have GNUPLOT installed on your +system but Calc is unable to find it, you may need to set this +variable. (@pxref{Customizable Variables}) +You may also need to set some Lisp variables to show Calc how to run +GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} . The default value +of @code{calc-gnuplot-name} is @code{"gnuplot"}. + +@item calc-gnuplot-plot-command +@itemx calc-gnuplot-print-command + +See @ref{Devices, ,Graphical Devices}.@* +The variables @code{calc-gnuplot-plot-command} and +@code{calc-gnuplot-print-command} represent system commands to +display and print the output of GNUPLOT, respectively. These may be +@code{nil} if no command is necessary, or strings which can include +@samp{%s} to signify the name of the file to be displayed or printed. +Or, these variables may contain Lisp expressions which are evaluated +to display or print the output. + +The default value of @code{calc-gnuplot-plot-command} is @code{nil}, +and the default value of @code{calc-gnuplot-print-command} is +@code{"lp %s"}. + +@item calc-language-alist + +See @ref{Basic Embedded Mode}.@* +The variable @code{calc-language-alist} controls the languages that +Calc will associate with major modes. When Calc embedded mode is +enabled, it will try to use the current major mode to +determine what language should be used. (This can be overridden using +Calc's mode changing commands, @xref{Mode Settings in Embedded Mode}.) +The variable @code{calc-language-alist} consists of a list of pairs of +the form @code{(@var{KEY} . @var{VALUE})}; for example, +@code{(latex-mode . latex)} is one such pair. If Calc embedded is +activated in a buffer whose major mode is @var{KEY}, it will set itself +to use the language @var{VALUE}. + +The default value of @code{calc-language-alist} is @example - + ((latex-mode . latex) + (tex-mode . tex) + (plain-tex-mode . tex) + (context-mode . tex) + (nroff-mode . eqn) + (pascal-mode . pascal) + (c-mode . c) + (c++-mode . c) + (fortran-mode . fortran) + (f90-mode . fortran)) @end example -@end ifinfo -@appendixsec Testing the Installation -@noindent -To test your installation of Calc, start a new Emacs and type @kbd{M-# c} -to make sure the autoloads and key bindings work. Type @kbd{M-# i} -to make sure Calc can find its Info documentation. Press @kbd{q} to -exit the Info system and @kbd{M-# c} to re-enter the Calculator. -Type @kbd{20 S} to compute the sine of 20 degrees; this will test the -autoloading of the extensions modules. The result should be -0.342020143326. Finally, press @kbd{M-# c} again to make sure the -Calculator can exit. +@item calc-embedded-announce-formula -You may also wish to test the GNUPLOT interface; to plot a sine wave, -type @kbd{' [0 ..@: 360], sin(x) @key{RET} g f}. Type @kbd{g q} when you -are done viewing the plot. +See @ref{Customizing Embedded Mode}.@* +The variable @code{calc-embedded-announce-formula} helps determine +what formulas @kbd{M-# a} will activate in a buffer. It is a +regular expression, and when activating embedded formulas with +@kbd{M-# a}, it will tell Calc that what follows is a formula to be +activated. (Calc also uses other patterns to find formulas, such as +@samp{=>} and @samp{:=}.) -Calc is now ready to use. If you wish to go through the Calc Tutorial, -press @kbd{M-# t} to begin. -@example +The default pattern is @code{"%Embed\n\\(% .*\n\\)*"}, which checks +for @samp{%Embed} followed by any number of lines beginning with +@samp{%} and a space. -@end example -@node Reporting Bugs, Summary, Installation, Top +@item calc-embedded-open-formula +@itemx calc-embedded-close-formula + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-formula} and +@code{calc-embedded-open-formula} control the region that Calc will +activate as a formula when Embedded mode is entered with @kbd{M-# e}. +They are regular expressions; +Calc normally scans backward and forward in the buffer for the +nearest text matching these regular expressions to be the ``formula +delimiters''. + +The simplest delimiters are blank lines. Other delimiters that +Embedded mode understands by default are: +@enumerate +@item +The @TeX{} and La@TeX{} math delimiters @samp{$ $}, @samp{$$ $$}, +@samp{\[ \]}, and @samp{\( \)}; +@item +Lines beginning with @samp{\begin} and @samp{\end} (except matrix delimiters); +@item +Lines beginning with @samp{@@} (Texinfo delimiters). +@item +Lines beginning with @samp{.EQ} and @samp{.EN} (@dfn{eqn} delimiters); +@item +Lines containing a single @samp{%} or @samp{.\"} symbol and nothing else. +@end enumerate + +@item calc-embedded-open-word +@itemx calc-embedded-close-word + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-word} and +@code{calc-embedded-close-word} control the region that Calc will +activate when Embedded mode is entered with @kbd{M-# w}. They are +regular expressions. + +The default values of @code{calc-embedded-open-word} and +@code{calc-embedded-close-word} are @code{"^\\|[^-+0-9.eE]"} and +@code{"$\\|[^-+0-9.eE]"} respectively. + +@item calc-embedded-open-plain +@itemx calc-embedded-close-plain + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-plain} and +@code{calc-embedded-open-plain} are used to delimit ``plain'' +formulas. Note that these are actual strings, not regular +expressions, because Calc must be able to write these string into a +buffer as well as to recognize them. + +The default string for @code{calc-embedded-open-plain} is +@code{"%%% "}, note the trailing space. The default string for +@code{calc-embedded-close-plain} is @code{" %%%\n"}, without +the trailing newline here, the first line of a Big mode formula +that followed might be shifted over with respect to the other lines. + +@item calc-embedded-open-new-formula +@itemx calc-embedded-close-new-formula + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-new-formula} and +@code{calc-embedded-close-new-formula} are strings which are +inserted before and after a new formula when you type @kbd{M-# f}. + +The default value of @code{calc-embedded-open-new-formula} is +@code{"\n\n"}. If this string begins with a newline character and the +@kbd{M-# f} is typed at the beginning of a line, @kbd{M-# f} will skip +this first newline to avoid introducing unnecessary blank lines in the +file. The default value of @code{calc-embedded-close-new-formula} is +also @code{"\n\n"}. The final newline is omitted by @w{@kbd{M-# f}} +if typed at the end of a line. (It follows that if @kbd{M-# f} is +typed on a blank line, both a leading opening newline and a trailing +closing newline are omitted.) + +@item calc-embedded-open-mode +@itemx calc-embedded-close-mode + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-mode} and +@code{calc-embedded-close-mode} are strings which Calc will place before +and after any mode annotations that it inserts. Calc never scans for +these strings; Calc always looks for the annotation itself, so it is not +necessary to add them to user-written annotations. + +The default value of @code{calc-embedded-open-mode} is @code{"% "} +and the default value of @code{calc-embedded-close-mode} is +@code{"\n"}. +If you change the value of @code{calc-embedded-close-mode}, it is a good +idea still to end with a newline so that mode annotations will appear on +lines by themselves. + +@end table + +@node Reporting Bugs, Summary, Customizable Variables, Top @appendix Reporting Bugs @noindent From 1ee49a88dd20cda9baaaa5247c46c5356e485737 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 1 Apr 2005 21:51:14 +0000 Subject: [PATCH 175/241] *** empty log message *** --- lisp/ChangeLog | 24 ++++++++++++++++++++++++ man/ChangeLog | 9 +++++++++ 2 files changed, 33 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d3254eaa622..7836779618d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,27 @@ +2005-04-01 Jay Belanger + + * calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command) + (calc-gnuplot-print-command): Move definitions to calc.el. + + * calc/calc-embed.el (calc-embedded-announce-formula) + (calc-embedded-open-formula, calc-embedded-close-formula) + (calc-embedded-open-word, calc-embedded-close-word) + (calc-embedded-open-plain, calc-embedded-close-plain) + (calc-embedded-open-new-formula, calc-embedded-close-new-formula) + (calc-embedded-open-mode, calc-embedded-close-mode): + Move definitions to calc.el. + + * calc/calc.el (calc-settings-file, calc-language-alist): + Make customizable. + (calc-embedded-announce-formula, calc-embedded-open-formula) + (calc-embedded-close-formula, calc-embedded-open-word) + (calc-embedded-close-word, calc-embedded-open-plain) + (calc-embedded-close-plain, calc-embedded-open-new-formula) + (calc-embedded-close-new-formula, calc-embedded-open-mode) + (calc-embedded-close-mode, calc-gnuplot-name) + (calc-gnuplot-plot-command, calc-gnuplot-print-command): Move here + from other files and make customizable. + 2005-04-01 Stefan Monnier * pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check): diff --git a/man/ChangeLog b/man/ChangeLog index 91f1b452fcb..4a51f051431 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,12 @@ +2005-04-01 Jay Belanger + + * calc.texi (Troubleshooting Commands): Remove comment about + installation. + (Installation): Remove section. + (Customizable Variables): New section. + (Basic Embedded Mode, Customizing Embedded Mode, Graphics) + (Graphical Devices): Add references to Customizable Variables. + 2005-04-01 Lute Kamstra * maintaining.texi (Change Log): add-change-log-entry uses From 8b9182147e2e2430eb2a6189444e966c6e121f71 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 1 Apr 2005 22:08:47 +0000 Subject: [PATCH 176/241] (Coding System Basics): Clarify previous change. --- lispref/ChangeLog | 4 ++++ lispref/nonascii.texi | 25 ++++++++++++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 0d11d7c0e9e..8a34499507f 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,7 @@ +2005-04-01 Richard M. Stallman + + * nonascii.texi (Coding System Basics): Clarify previous change. + 2005-04-01 Kenichi Handa * nonascii.texi (Coding System Basics): Describe about rondtrip diff --git a/lispref/nonascii.texi b/lispref/nonascii.texi index 91a47ea50f9..4e38c300a61 100644 --- a/lispref/nonascii.texi +++ b/lispref/nonascii.texi @@ -628,11 +628,11 @@ characters; for example, there are three coding systems for the Cyrillic conversion, but some of them leave the choice unspecified---to be chosen heuristically for each file, based on the data. -In general, a coding system doesn't guarantee a roundtrip identity, -i.e. decoding followed by encoding in the same coding system can -result in the different byte sequence. But there are several coding -systems that go guarantee that the result will be the same as what you -originally decoded. They are: +In general, a coding system doesn't guarantee roundtrip identity: +decoding text then encoding the result in the same coding system can +produce a different byte sequence from the one you originally decoded. +However, the following coding systems do guarantee that the result +will be the same as what you originally decoded: @quotation chinese-big5 chinese-iso-8bit cyrillic-iso-8bit emacs-mule @@ -641,14 +641,13 @@ iso-latin-4 iso-latin-5 iso-latin-8 iso-latin-9 iso-safe japanese-iso-8bit japanese-shift-jis korean-iso-8bit raw-text @end quotation -Likewise, a coding systme doesn't guarantee the other way of roundtrip -identity, i.e. encoding buffer text into a coding system followed by -decoding again with the same coding system will produce the different -buffer text. For instance, when you encode Latin-2 characters by -@code{utf-8} and decode it back by the same coding system, you'll get -Unicode charactes (of charset @code{mule-unicode-0100-24ff}), and when -you encode Unicode characters by @code{iso-latin-2} and decode it back -by the same coding system, you'll get Latin-2 characters. +Encoding buffer text and then decoding the result can also fail to +reproduce the original text. For instance, when you encode Latin-2 +characters with @code{utf-8} and decode the result using the same +coding system, you'll get Unicode characters (of charset +@code{mule-unicode-0100-24ff}). When you encode Unicode characters +with @code{iso-latin-2} and decode them back with the same coding +system, you'll get Latin-2 characters. @cindex end of line conversion @dfn{End of line conversion} handles three different conventions used From 7c195b93027b72ddb1ab13a01e030dabb0f87991 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 1 Apr 2005 22:45:13 +0000 Subject: [PATCH 177/241] (Misc X): Explain horizontal scroll bars don't exist. --- man/cmdargs.texi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/man/cmdargs.texi b/man/cmdargs.texi index 38ac3301781..d49ffba6103 100644 --- a/man/cmdargs.texi +++ b/man/cmdargs.texi @@ -1196,8 +1196,9 @@ appear until you deiconify it. @opindex -hb @itemx --horizontal-scroll-bars @opindex --horizontal-scroll-bars -@cindex horizontal scroll bars, command-line argument -Enable horizontal scroll bars. +@c @cindex horizontal scroll bars, command-line argument +Enable horizontal scroll bars. Since horizontal scroll bars +are not yet implemented, this actually does nothing. @item -vb @opindex -vb From f290db1d56a4dd3ac18a9d6f2ff80791cb2b029d Mon Sep 17 00:00:00 2001 From: Marcelo Toledo Date: Sat, 2 Apr 2005 02:52:24 +0000 Subject: [PATCH 178/241] TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko, TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title line. TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in 2005-02-08T14:20:54Z!lute@gnu.org, Emacs is not transliterated to cyrillic anymore; fixes; by Ognyan Kulev , TUTORIAL.sv: Sync some other changes with the TUTORIAL version 2005-04-01T00:31:25Z!rms@gnu.org by Mats Lidell . Corrected admin/ChangeLog entry. Updated admin/FOR-RELEASE. --- admin/ChangeLog | 6 +- admin/FOR-RELEASE | 8 +- etc/ChangeLog | 16 +++ etc/TUTORIAL.bg | 301 ++++++++++++++++++++++----------------------- etc/TUTORIAL.cn | 2 +- etc/TUTORIAL.cs | 2 +- etc/TUTORIAL.de | 1 - etc/TUTORIAL.es | 3 +- etc/TUTORIAL.fr | 1 - etc/TUTORIAL.it | 1 - etc/TUTORIAL.ja | 2 +- etc/TUTORIAL.ko | 2 +- etc/TUTORIAL.pl | 3 +- etc/TUTORIAL.pt_BR | 4 +- etc/TUTORIAL.ro | 2 +- etc/TUTORIAL.ru | 2 +- etc/TUTORIAL.sk | 2 +- etc/TUTORIAL.sl | 1 - etc/TUTORIAL.sv | 6 +- etc/TUTORIAL.th | 2 +- etc/TUTORIAL.zh | 2 +- 21 files changed, 188 insertions(+), 181 deletions(-) diff --git a/admin/ChangeLog b/admin/ChangeLog index ce6e3642800..c3c65379a16 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,8 +1,10 @@ 2005-03-30 Marcelo Toledo * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The - first line of every tutorial must be "Emacs Tutorial" in the - repective language. + first line of every tutorial must begin with a sentence saying + "Emacs Tutorial" in the respective language. This should be + followed by "See end for copying conditions", likewise in the + respective language. 2005-03-29 Luc Teirlinck diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 129ae824914..bbd9868b7cc 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -264,23 +264,23 @@ names of the people who have checked it. SECTION READERS ---------------------------------- etc/TUTORIAL rms -etc/TUTORIAL.bg +etc/TUTORIAL.bg Ognyan Kulev etc/TUTORIAL.cn etc/TUTORIAL.cs etc/TUTORIAL.de -etc/TUTORIAL.es +etc/TUTORIAL.es Marcelo Toledo etc/TUTORIAL.fr etc/TUTORIAL.it etc/TUTORIAL.ja etc/TUTORIAL.ko etc/TUTORIAL.nl Lute Kamstra etc/TUTORIAL.pl -etc/TUTORIAL.pt_BR +etc/TUTORIAL.pt_BR Marcelo Toledo etc/TUTORIAL.ro etc/TUTORIAL.ru etc/TUTORIAL.sk etc/TUTORIAL.sl -etc/TUTORIAL.sv +etc/TUTORIAL.sv Mats Lidell etc/TUTORIAL.th etc/TUTORIAL.zh diff --git a/etc/ChangeLog b/etc/ChangeLog index f0aaa3e6186..d3474991f8d 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,19 @@ +2005-04-01 Marcelo Toledo + + * TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, + TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko, + TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru, + TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title + line. + + * TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in + 2005-02-08T14:20:54Z!lute@gnu.org, "Emacs" is not transliterated to cyrillic anymore; + Minor fixes; by Ognyan Kulev . + + * TUTORIAL.sv: Sync some other changes with the TUTORIAL version + 2005-04-01T00:31:25Z!rms@gnu.org by Mats Lidell . + + 2005-04-01 Lute Kamstra * TUTORIAL.nl: Fix title line. diff --git a/etc/TUTORIAL.bg b/etc/TUTORIAL.bg index ba32e814b91..239d3d58c19 100644 --- a/etc/TUTORIAL.bg +++ b/etc/TUTORIAL.bg @@ -1,8 +1,7 @@ -âúâåäåíèåòî íà Åìàêñ -Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. -Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. +Âúâåäåíèå â Emacs. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. +Copyright (c) 1985,1996,1998,2001,2002,2003,2005 Free Software Foundation. -Êîìàíäèòå íà Åìàêñ íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà +Êîìàíäèòå íà Emacs íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà îòáåëÿçâàí ñ CTRL èëè CTL) è META (ïîíÿêîãà îòáåëÿçâàí ñ EDIT èëè ALT). Âìåñòî äà ñå èçïèñâàò ñ ïúëíî èìå âñåêè ïúò, íèå ùå èçïîëçâàìå ñëåäíèòå ñúêðàùåíèÿ: @@ -16,7 +15,7 @@ ALT). êëàâèøà ESC è ñëåä òîâà âúâåäåòå <çíàê>. Íèå çàïèñâàìå , çà äà îòáåëåæèì êëàâèøà ESC. -Âàæíà áåëåæêà: â êðàÿ íà Åìàêñ ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c. +Âàæíà áåëåæêà: â êðàÿ íà Emacs ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c. Çíàöèòå ">>" îòëÿâî âè äàâàò óêàçàíèå äà èçïúëíèòå êîìàíäà. Íàïðèìåð: <> >> Ñåãà âúâåäåòå C-v (Ïîêàæè ñëåäâàùèÿ åêðàí), çà äà ñå ïðèäâèæèòå êúì @@ -94,7 +93,7 @@ Next ( Âñåêè ðåä îò òåêñò çàâúðøâà ñúñ çíàê çà íîâ ðåä, êîéòî ñëóæè çà îòäåëÿíåòî íà ðåäà îò ñëåäâàùèÿ ðåä. Ïîñëåäíèÿò ðåä âúâ âàøèÿ ôàéë -òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Åìàêñ íå èçèñêâà òàêúâ, +òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Emacs íå èçèñêâà òàêúâ, êîãàòî ïðî÷èòà ôàéëà). >> Îïèòàéòå C-b â íà÷àëîòî íà ðåä. Òîâà òðÿáâà äà âè ïðèäâèæè â êðàÿ @@ -110,7 +109,7 @@ C-f Êîãàòî ñå ïðèäâèæâàòå ñëåä ãîðíèÿ èëè äîëíèÿ êðàé íà åêðàíà, òåêñòúò îòâúä êðàÿ ñå èçìåñòâà êúì åêðàíà. Òîâà ñå íàðè÷à "ñêðîëèðàíå". Òî -ïîçâîëÿâà íà Åìàêñ äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà, +ïîçâîëÿâà íà Emacs äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà, áåç äà ãî èçêàðâà èçâúí åêðàíà. >> Îïèòàéòå ñå äà ïðèäâèæèòå êóðñîðà ñëåä äîëíèÿ êðàé íà åêðàíà ñ C-n @@ -193,7 +192,7 @@ Shift Âèå ìîæåòå ñúùî äà ñå ïðèäâèæâàòå ñ êëàâèøèòå-ñòðåëêè, àêî âàøèÿò òåðìèíàë èìà òàêèâà. Íèå ïðåïîðú÷âàìå äà íàó÷èòå C-b, C-f, C-n è C-p ïî òðè ïðè÷èíè. Ïúðâî, òå ðàáîòÿò íà âñè÷êè âèäîâå òåðìèíàëè. Âòîðî, -âåäíúæ ñëåä êàòî äîáèåòå ïðàêòèêà â èçïîëçâàíåòî íà Åìàêñ, ùå +âåäíúæ ñëåä êàòî äîáèåòå ïðàêòèêà â èçïîëçâàíåòî íà Emacs, ùå îòêðèåòå, ÷å âúâåæäàíåòî íà òåçè Control-çíàöè å ïî-áúðçî îò âúâåæäàíåòî íà êëàâèøèòå ñòðåëêè, çàùîòî íå òðÿáâà äà ïðåìåñòâàòå ðúêàòà ñè äàëå÷ îò îáëàñòòà íà êëàâèøèòå ñ áóêâè. Òðåòî, âåäíúæ ñëåä @@ -201,7 +200,7 @@ Shift ìîæåòå ñúùî òàêà ëåñíî äà íàó÷èòå ïî-íàïðåäíàëèòå êîìàíäè çà äâèæåíèå íà êóðñîðà. -Ïîâå÷åòî Åìàêñ êîìàíäè ïðèåìàò ÷èñëîâ àðãóìåíò; çà ïîâå÷åòî îò òÿõ òîé +Ïîâå÷åòî Emacs êîìàíäè ïðèåìàò ÷èñëîâ àðãóìåíò; çà ïîâå÷åòî îò òÿõ òîé ñëóæè êàòî áðîÿ÷ íà ïîâòîðåíèÿ. Íà÷èíúò, ïî êîéòî äàâàòå ÷èñëîâ áðîÿ÷, å ñ âúâåæäàíå íà C-u, ïîñëåäâàíî îò âúâåæäàíå íà öèôðèòå, è âñè÷êî òîâà ïðåäè âúâåæäàíå íà ñàìàòà êîìàíäà. Àêî èìàòå êëàâèø META @@ -233,7 +232,7 @@ C-v Àêî èçïîëçâàòå ãðàôè÷åí èíòåðôåéñ, êàòî X11 èëè MS-Windows, áè òðÿáâàëî äà èìà òúíêà ïðàâîúãúëíà îáëàñò, íàðå÷åíà ïëúçãà÷ (scroll -bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå +bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Emacs. Âèå ìîæåòå äà ñêðîëèðàòå òåêñòà, ùðàêàéêè ñ ìèøêàòà â ïëúçãà÷à. >> Îïèòàéòå äà íàòèñíåòå ñðåäíèÿ áóòîí íà âúðõà íà îñâåòåíàòà îáëàñò @@ -245,10 +244,10 @@ bar), íàãîðå è íàäîëó, êàòî äâèæèòå ìèøêàòà. -* ÊÎÃÀÒÎ ÅÌÀÊÑ Å ÁËÎÊÈÐÀË +* ÊÎÃÀÒÎ EMACS Å ÁËÎÊÈÐÀË ------------------------- -Àêî Åìàêñ ñïðå äà îòãîâàðÿ íà âàøèòå êîìàíäè, âèå ìîæåòå äà ãî ñïðåòå +Àêî Emacs ñïðå äà îòãîâàðÿ íà âàøèòå êîìàíäè, âèå ìîæåòå äà ãî ñïðåòå áåçîïàñíî, êàòî âúâåäåòå C-g. Ìîæå äà èçïîëçâàòå C-g, çà äà ñïðåòå êîìàíäà, êîÿòî ñå èçïúëíÿâà òâúðäå äúëãî. @@ -265,15 +264,15 @@ bar), * ÇÀÁÐÀÍÅÍÈ ÊÎÌÀÍÄÈ ------------------- -Íÿêîè êîìàíäè íà Åìàêñ ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè +Íÿêîè êîìàíäè íà Emacs ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè äà íå ìîãàò äà ãè óïîòðåáÿò ïî ïîãðåøêà. -Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Åìàêñ èçâåæäà ñúîáùåíèå, +Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Emacs èçâåæäà ñúîáùåíèå, êàçâàéêè êàêâà å áèëà êîìàíäàòà è ïèòàéêè âè äàëè èñêàòå äà ïðîäúëæèòå íàïðåä è äà èçïúëíèòå êîìàíäàòà. -Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå êëàâèøà èíòåðâàë -â îòãîâîð íà âúïðîñà. Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå +Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå (êëàâèøà +èíòåðâàë) â îòãîâîð íà âúïðîñà. Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå çàáðàíåíàòà êîìàíäà, îòãîâàðÿòå íà âúïðîñà ñ "n". >> Âúâåäåòå C-x C-l (êîÿòî å çàáðàíåíà êîìàíäà), è ñëåä òîâà âúâåäåòå @@ -283,7 +282,7 @@ bar), * ÏÐÎÇÎÐÖÈ ---------- -Åìàêñ ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé +Emacs ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé ñîáñòâåí òåêñò. Íèå ùå îáÿñíèì ïî-êúñíî êàê äà èçïîëçâàòå íÿêîëêî ïðîçîðåöà. Òî÷íî ñåãà íèå èñêàìå äà îáÿñíèì êàê äà ñå îòúðâåòå îò äîïúëíèòåëíè ïðîçîðöè è äà ñå âúðíåòå êúì îñíîâíîòî ðåäàêòèðàíå ñ åäèí @@ -313,13 +312,13 @@ bar), ---------------------- Àêî èñêàòå äà âìúêíåòå òåêñò, ïðîñòî ãî âúâåäåòå. Çíàöèòå, êîèòî -ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Åìàêñ êàòî +ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Emacs êàòî òåêñò è ñå âìúêâàò âåäíàãà. Âúâåäåòå (êëàâèøúò çà âðúùàíå â íà÷àëîòî íà ðåäà), çà äà âìúêíåòå çíàê çà íîâ ðåä. Ìîæå äà èçòðèåòå ïîñëåäíèÿ çíàê, êîéòî ñòå âúâåëè, ñ âúâåæäàíå íà . å êëàâèø îò êëàâèàòóðàòà -- ñúùèÿò, êîéòî -îáèêíîâåíî èçïîëçâàòå èçâúí Åìàêñ, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò +îáèêíîâåíî èçïîëçâàòå èçâúí Emacs, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò âàñ çíàê. Îáèêíîâåíî å ãîëÿì êëàâèø, íà íÿêîëêî ðåäà ðàçñòîÿíèå îò êëàâèøà , è îáèêíîâåíî å îòáåëÿçàí ñ "Delete", "Del" èëè "Backspace". @@ -359,24 +358,24 @@ bar), >> Âúâåäåòå , çà äà âìúêíåòå íàíîâî çíàêà çà íîâ ðåä, êîéòî èçòðèõòå. -Çàïîìíåòå, ÷å íà ïîâå÷åòî êîìàíäè íà Åìàêñ ìîæå äà áúäå çàäàäåí áðîÿ÷ +Çàïîìíåòå, ÷å íà ïîâå÷åòî êîìàíäè íà Emacs ìîæå äà áúäå çàäàäåí áðîÿ÷ íà ïîâòîðåíèÿòà; òîâà âêëþ÷âà âìúêâàíåòî íà òåêñòîâè çíàöè. Ïîâòàðÿíåòî íà òåêñòîâ çíàê ãî âìúêâà íÿêîëêî ïúòè. >> Îïèòàéòå òîâà ñåãà -- âúâåäåòå C-u 8 *, çà äà âìúêíåòå ********. -Ñåãà âèå ñòå íàó÷èëè íàé-îñíîâíèòå íà÷èíè çà âúâåæäàíå íà íåùî â Åìàêñ +Ñåãà âèå ñòå íàó÷èëè íàé-îñíîâíèòå íà÷èíè çà âúâåæäàíå íà íåùî â Emacs è ïîïðàâÿíå íà ãðåøêè. Ìîæåòå ñúùî òàêà äà èçòðèâàòå äóìè èëè ðåäîâå. Åòî îáîáùåíèå íà èçòðèâàùèòå äåéñòâèÿ: - èçòðèâàíå íà çíàêà òî÷íî ïðåäè êóðñîðà - C-d èçòðèâàíå íà çíàêà òî÷íî ñëåä êóðñîðà + Èçòðèâàíå íà çíàêà òî÷íî ïðåäè êóðñîðà + C-d Èçòðèâàíå íà çíàêà òî÷íî ñëåä êóðñîðà - M- èçòðèâàíå íà äóìàòà íåïîñðåäñòâåíî ïðåäè êóðñîðà - M-d èçòðèâàíå íà äóìàòà ñëåä êóðñîðà + M- Èçòðèâàíå íà äóìàòà íåïîñðåäñòâåíî ïðåäè êóðñîðà + M-d Èçòðèâàíå íà äóìàòà ñëåä êóðñîðà - C-k èçòðèâàíå îò ìÿñòîòî íà êóðñîðà äî êðàÿ íà ðåäà - M-k èçòðèâàíå äî êðàÿ íà òåêóùîòî èçðå÷åíèå + C-k Èçòðèâàíå îò ìÿñòîòî íà êóðñîðà äî êðàÿ íà ðåäà + M-k Èçòðèâàíå äî êðàÿ íà òåêóùîòî èçðå÷åíèå Çàáåëåæåòå, ÷å è C-d, ñðàâíåíè ñ M- è M-d, ðàçøèðÿâàò ïîäîáèåòî, çàïî÷íàòî îò C-f è M-f (äîáðå, íå å @@ -386,12 +385,12 @@ M-k Ìîæåòå ñúùî äà ïðåìàõíåòå âñÿêà ÷àñò îò áóôåðà ñ åäèí óíèâåðñàëåí íà÷èí. Ïðèäâèæåòå ñå äî åäèíèÿ êðàé íà ÷àñòòà è âúâåäåòå C-@ èëè -C-èíòåðâàë (êîåòî è äà å îò äâåòå). Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà -÷àñòòà è âúâåäåòå C-w. Òîâà ùå èçðåæå öåëèÿ òåêñò ìåæäó òåçè äâà -êðàÿ. +C- (êîåòî è äà å îò äâåòå). ( å êëàâèøúò èíòåðâàë.) +Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà ÷àñòòà è âúâåäåòå C-w. Òîâà ùå èçðåæå +öåëèÿ òåêñò ìåæäó òåçè äâà êðàÿ. >> Ïðèäâèæåòå êóðñîðà äî çíàêà "Ì" â íà÷àëîòî íà ïðåäèøíèÿ àáçàö. ->> Âúâåäåòå C-èíòåðâàë. Åìàêñ òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â +>> Âúâåäåòå C-. Emacs òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â äîëíèÿ êðàé íà åêðàíà. >> Ïðèäâèæåòå êóðñîðà äî áóêâàòà "ð" â "êðàé" íà âòîðèÿ ðåä îò àáçàöà. >> Âúâåäåòå C-w. Òîâà ùå èçðåæå òåêñòà, çàïî÷âàù îò "Ì" è çàâúðøâàù @@ -421,9 +420,9 @@ C-k Âðúùàíåòî îáðàòíî íà òåêñò ñå íàðè÷à "âìúêâàíå". (Ìèñëåòå çà íåãî êàòî çà èçâàæäàíå îáðàòíî, èëè äðúïâàíå îáðàòíî, íà òåêñò, êîéòî å áèë èçðÿçàí.) Ìîæåòå äà âìúêâàòå èçðÿçàíèÿ òåêñò èëè íà ñúùîòî ìÿñòî, -îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â áóôåðà, äàæå è â -ðàçëè÷åí ôàéë. Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî ïúòè; òîâà -ïðàâè íÿêîëêî êîïèÿ îò íåãî. +îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â ðåäàêòèðàíèÿ òåêñò, +äàæå è â ðàçëè÷åí ôàéë. Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî +ïúòè; òîâà ïðàâè íÿêîëêî êîïèÿ îò íåãî. Êîìàíäàòà çà âìúêâàíå å C-y. Òÿ âìúêâà íàíîâî ïîñëåäíèÿ èçðÿçàí òåêñò â òåêóùîòî ìÿñòî íà êóðñîðà. @@ -502,25 +501,25 @@ C_- --------- Çà äà íàïðàâèòå òåêñòà, êîéòî ðåäàêòèðàòå, ïîñòîÿíåí, òðÿáâà äà ãî -ñëîæèòå âúâ ôàéë.  ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Åìàêñ +ñëîæèòå âúâ ôàéë.  ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Emacs ïðèêëþ÷è. Çà äà ñëîæèòå âàøèÿ òåêñò âúâ ôàéë, òðÿáâà äà "íàìåðèòå" ôàéëà ïðåäè äà âúâåæäàòå òåêñò. (Òîâà ñúùî ñå íàðè÷à "ïîñåùàâàíå" íà ôàéëà.) -Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Åìàêñ.  +Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Emacs.  ìíîãî ñëó÷àè òîâà å êàòî äà ðåäàêòèðàòå ñàìèÿ ôàéë. Îáà÷å ïðîìåíèòå, -êîèòî ïðàâèòå, èçïîëçâàéêè Åìàêñ, íå îñòàâàò ïîñòîÿííè, äîêàòî íå +êîèòî ïðàâèòå, èçïîëçâàéêè Emacs, íå îñòàâàò ïîñòîÿííè, äîêàòî íå "çàïèøåòå" ôàéëà. Òîâà å òàêà, çà äà ñå ïðåäîòâðàòè îñòàâÿíåòî íà ïîëóïðîìåíåí ôàéë â ñèñòåìàòà, êîãàòî íå èñêàòå òîâà. Äîðè êîãàòî -çàïèñâàòå, Åìàêñ îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å +çàïèñâàòå, Emacs îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å ïî-êúñíî ðåøèòå, ÷å âàøèòå ïðîìåíè ñà áèëè ãðåøêà. Àêî ïîãëåäíåòå â äúíîòî íà åêðàíà, ùå âèäèòå ðåä, êîéòî çàïî÷âà è çàâúðøâà ñ òèðåòà è çàïî÷âà ñ "-R:-- TUTORIAL.bg" èëè íåùî ïîäîáíî. Òàçè ÷àñò îò åêðàíà ïîêàçâà èìåòî íà ôàéëà, êîéòî ñòå ïîñåòèëè. Òî÷íî ñåãà âèå ñòå ïîñåòèëè ôàéë, íàðå÷åí "TUTORIAL.bg", êîéòî å âàøåòî -ëè÷íî êîïèå-÷åðíîâà íà Åìàêñ âúâåäåíèåòî. Êîãàòî íàìåðèòå ôàéë â -Åìàêñ, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî. +ëè÷íî êîïèå-÷åðíîâà íà Emacs âúâåäåíèåòî. Êîãàòî íàìåðèòå ôàéë â +Emacs, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî. Îñîáåíîñò íà êîìàíäàòà çà íàìèðàíå íà ôàéë å, ÷å òðÿáâà äà êàæåòå èìåòî íà ôàéëà, êîéòî èñêàòå. Íèå ãî íàðè÷àìå "÷åòåíå íà àðãóìåíò îò @@ -529,10 +528,10 @@ C_- C-x C-f Íàìèðàíå íà ôàéë -Åìàêñ âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà. Èìåòî íà ôàéëà, êîåòî +Emacs âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà. Èìåòî íà ôàéëà, êîåòî íàïèøåòå, ñå ïîÿâÿâà â äúíîòî íà åêðàíà. Ðåäúò â äúíîòî íà åêðàíà ñå íàðè÷à ìèíèáóôåð, êîãàòî ñå èçïîëçâà çà òîçè âèä âõîä. Ìîæåòå äà -èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Åìàêñ, çà äà +èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Emacs, çà äà ðåäàêòèðàòå èìåòî íà ôàéëà. Êîãàòî âúâåæäàòå èìåòî íà ôàéëà (èëè êàêúâòî è äà å âõîä â @@ -553,12 +552,12 @@ C_- C-x C-s Çàïàçâàíå íà ôàéëà -Òîâà êîïèðà òåêñòà îò Åìàêñ âúâ ôàéëà. Ïúðâèÿ ïúò, êîãàòî òîâà ñå -íàïðàâè, Åìàêñ ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå +Òîâà êîïèðà òåêñòà îò Emacs âúâ ôàéëà. Ïúðâèÿ ïúò, êîãàòî òîâà ñå +íàïðàâè, Emacs ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå ñå èçãóáè. Íîâîòî èìå ñå ïîñòðîÿâà ñ äîáàâÿíå íà "~" â êðàÿ íà èìåòî íà íà÷àëíèÿ ôàéë. -Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Åìàêñ èçâåæäà èìåòî íà ôàéëà, êîéòî å +Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Emacs èçâåæäà èìåòî íà ôàéëà, êîéòî å áèë çàïèñàí. Òðÿáâà äà çàïèñâàòå äîñòàòú÷íî ÷åñòî, òàêà ÷å äà íå èçãóáèòå ìíîãî ðàáîòà, àêî ñèñòåìàòà ñå ñðèíå ïî íÿêàêâà ïðè÷èíà. @@ -566,19 +565,19 @@ C_- Òîâà òðÿáâà äà èçâåäå "Wrote ...TUTORIAL.bg" â äúíîòî íà åêðàíà. ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-x C-s ùå çàìðúçè åêðàíà è -âèå íÿìà äà âèæäàòå ïîâå÷å èçõîä îò Åìàêñ. Òîâà ïîêàçâà, ÷å åäíà +âèå íÿìà äà âèæäàòå ïîâå÷å èçõîä îò Emacs. Òîâà ïîêàçâà, ÷å åäíà "ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðè÷àíà "óïðàâëåíèå íà ïîòîêà" -(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà êúì Åìàêñ. Çà äà +(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà êúì Emacs. Çà äà ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî âêëþ÷âàíå íà ïîñòúïêîâî òúðñåíå" (Spontaneous Entry to Incremental -Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè +Search) â ðúêîâîäñòâîòî íà Emacs çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè "ñïîñîáíîñò". Ìîæå äà íàìåðèòå ñúùåñòâóâàù ôàéë, äà ãî ðàçãëåäàòå è äà ãî ðåäàêòèðàòå. Ìîæåòå ñúùî äà íàìåðèòå ôàéë, êîéòî íå ñúùåñòâóâà. Òîâà -å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Åìàêñ: íàìèðàòå ôàéëà, êîéòî +å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Emacs: íàìèðàòå ôàéëà, êîéòî ùå áúäå â íà÷àëîòî ïðàçåí, è òîãàâà çàïî÷âàòå âìúêâàíåòî íà òåêñòà çà -ôàéëà. Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Åìàêñ âñúùíîñò ùå +ôàéëà. Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Emacs âñúùíîñò ùå ñúçäàäå ôàéëà ñ òåêñòà, êîéòî ñòå âúâåëè. Îòòàì íàòàòúê ìîæå äà ñ÷èòàòå, ÷å ðåäàêòèðàòå âå÷å ñúùåñòâóâàù ôàéë. @@ -586,9 +585,9 @@ Search) * ÁÓÔÅÐÈ -------- -Àêî íàìåðèòå âòîðè ôàéë ñ C-x C-f, ïúðâèÿò ôàéë îñòàâà â Åìàêñ. +Àêî íàìåðèòå âòîðè ôàéë ñ C-x C-f, ïúðâèÿò ôàéë îñòàâà â Emacs. Ìîæåòå äà ïðåâêëþ÷èòå îáðàòíî êúì íåãî, êàòî ãî íàìåðèòå ïàê ñ C-x -C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ. +C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Emacs. >> Ñúçäàéòå ôàéë ñ èìå "foo", âúâåæäàéêè C-x C-f foo . Âìúêíåòå ìàëêî òåêñò, ðåäàêòèðàéòå ãî è çàïàçåòå "foo" ñ âúâåæäàíå @@ -596,16 +595,16 @@ C-f. Íàêðàÿ âúâåäåòå C-x C-f TUTORIAL.bg , çà äà ñå âúðíåòå îáðàòíî âúâ âúâåäåíèåòî. -Åìàêñ çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð". -Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Åìàêñ. Çà äà âèäèòå ñïèñúê íà -áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Åìàêñ, âúâåäåòå +Emacs çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð". +Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Emacs. Çà äà âèäèòå ñïèñúê íà +áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Emacs, âúâåäåòå C-x C-b Ïîêàçâàíå íà áóôåðèòå >> Îïèòàéòå C-x C-b ñåãà. Âèæòå êàê âñåêè áóôåð èìà èìå, à ïîíÿêîãà è èìå íà ôàéë çà ôàéëà, -÷èåòî ñúäúðæàíèå äúðæè. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö, +÷èåòî ñúäúðæàíèå äúðæè. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Emacs ïðîçîðåö, å âèíàãè ÷àñò îò íÿêàêúâ áóôåð. >> Âúâåäåòå C-x 1, çà äà ìàõíåòå ñïèñúêà ñ áóôåðèòå. @@ -627,13 +626,13 @@ C-f. Ñïèñúêúò ñ áóôåðèòå, êîéòî ïðàâèòå ñ C-x C-b, âèíàãè âè ïîêàçâà èìåòî íà âñåêè áóôåð. -ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö, å âèíàãè ÷àñò îò íÿêàêúâ +ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Emacs ïðîçîðåö, å âèíàãè ÷àñò îò íÿêàêúâ áóôåð. Íÿêîè áóôåðè íå ñúîòâåòñòâàò íà ôàéëîâå. Íàïðèìåð áóôåðúò, èìåíóâàí "*Buffer List*", íå ñúîòâåòñòâà íà ôàéë. Òîâà å áóôåðúò, êîéòî ñúäúðæà ñïèñúêà ñ áóôåðèòå, êîèòî ñòå íàïðàâèëè ñ C-x C-b. Áóôåðúò, èìåíóâàí "*Messages*", ñúùî íå ñúîòâåòñòâà íà ôàéë; òîé ñúäúðæà ñúîáùåíèÿòà, êîèòî ñå ïîÿâÿâàò â äúíîòî íà åêðàíà ïî âðåìå íà -Åìàêñ ñåñèÿòà. +Emacs ñåñèÿòà. >> Âúâåäåòå C-x b *Messages* , çà äà âèäèòå áóôåðà ñúñ ñúîáùåíèÿòà. Ñëåä òîâà âúâåäåòå C-x C-b TUTORIAL , çà äà @@ -641,7 +640,7 @@ C-f. Àêî íàïðàâèòå ïðîìåíè â òåêñòà íà åäèí ôàéë è òîãàâà íàìåðèòå äðóã ôàéë, òîâà íÿìà äà çàïèøå ïúðâèÿ ôàéë. Íåãîâèòå ïðîìåíè îñòàâàò âúòðå -â Åìàêñ, â áóôåðà íà ôàéëà. Ñúçäàâàíåòî èëè ðåäàêòèðàíåòî íà áóôåðà +â Emacs, â áóôåðà íà ôàéëà. Ñúçäàâàíåòî èëè ðåäàêòèðàíåòî íà áóôåðà íà âòîðèÿ ôàéë íÿìà åôåêò âúðõó áóôåðà íà ïúðâèÿ ôàéë. Òîâà å ìíîãî ïîëåçíî, íî ñúùî îçíà÷àâà, ÷å ñå íóæäàåòå îò óäîáåí íà÷èí äà çàïàçèòå áóôåðà íà ïúðâèÿ ôàéë. Ùå å íåóäîáíî äà ïðåâêëþ÷èòå îáðàòíî ñ C-x @@ -660,8 +659,8 @@ C-x s * ÐÀÇØÈÐßÂÀÍÅ ÍÀ ÍÀÁÎÐÀ ÊÎÌÀÍÄÈ ------------------------------- -Èìà ìíîãî, ìíîãî ïîâå÷å êîìàíäè íà Åìàêñ, îòêîëêîòî ìîãàò äà ñå ñëîæàò -íà âñè÷êè êîíòðîëíè è ìåòà çíàöè. Åìàêñ çàîáèêàëÿ òîâà ñ X (eXtended) +Èìà ìíîãî, ìíîãî ïîâå÷å êîìàíäè íà Emacs, îòêîëêîòî ìîãàò äà ñå ñëîæàò +íà âñè÷êè êîíòðîëíè è ìåòà çíàöè. Emacs çàîáèêàëÿ òîâà ñ X (eXtended) êîìàíäàòà. Òîâà ñòàâà ïî äâà íà÷èíà: C-x Çíàêîâî ðàçøèðÿâàíå. Ïîñëåäâàíî îò åäèí çíàê. @@ -669,49 +668,49 @@ C-x s èìå. Òåçè êîìàíäè ñà îáùî âçåòî ïîëåçíè, íî ïî-ìàëêî, îòêîëêîòî êîìàíäèòå, -êîèòî äîñåãà ñòå íàó÷èëè. Âå÷å âèäÿõòå äâå îò òÿõ: êîìàíäèòå âúðõó -ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà çàïàçâàíå (Save). -Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Åìàêñ ñåñèÿòà -- òîâà å êîìàíäàòà -C-x C-c. (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå âñè÷êè ïðîìåíè, êîèòî -ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè ïðîìåíåí ôàéë, ïðåäè -äà ïðåìàõíå Åìàêñ.) +êîèòî äîñåãà ñòå íàó÷èëè. Âå÷å âèäÿõòå íÿêîëêî îò òÿõ: íàïðèìåð +êîìàíäèòå âúðõó ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà +çàïàçâàíå (Save). Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Emacs ñåñèÿòà -- +òîâà å êîìàíäàòà C-x C-c. (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå +âñè÷êè ïðîìåíè, êîèòî ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè +ïðîìåíåí ôàéë, ïðåäè äà ïðåìàõíå Emacs.) -C-z å êîìàíäàòà çà èçëèçàíå îò Åìàêñ *âðåìåííî* -- òàêà ÷å äà ìîæåòå -äà ñå âúðíåòå êúì ñúùàòà Åìàêñ ñåñèÿ ïî-êúñíî. +C-z å êîìàíäàòà çà èçëèçàíå îò Emacs *âðåìåííî* -- òàêà ÷å äà ìîæåòå +äà ñå âúðíåòå êúì ñúùàòà Emacs ñåñèÿ ïî-êúñíî. -Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Åìàêñ, -ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Åìàêñ.  ïîâå÷åòî îáâèâêè -ìîæåòå äà ïðîäúëæèòå Åìàêñ ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs". +Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Emacs, +ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Emacs.  ïîâå÷åòî îáâèâêè +ìîæåòå äà ïðîäúëæèòå Emacs ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs". Íà ñèñòåìè, êîèòî íå ïîçâîëÿâàò èçîñòàâÿíå, C-z ñúçäàâà íîâà -ïîäîáâèâêà, êîÿòî âúðâè ïîä Åìàêñ, çà äà âè äàäå øàíñ äà ñòàðòèðàòå -äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Åìàêñ ñëåä òîâà; òîâà íå å èñòèíñêî -"èçëèçàíå" îò Åìàêñ.  òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å -îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Åìàêñ îò ïîäîáâèâêàòà. +ïîäîáâèâêà, êîÿòî âúðâè ïîä Emacs, çà äà âè äàäå øàíñ äà ñòàðòèðàòå +äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Emacs ñëåä òîâà; òîâà íå å èñòèíñêî +"èçëèçàíå" îò Emacs.  òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å +îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Emacs îò ïîäîáâèâêàòà. Ìîìåíòúò äà èçïîëçâàòå C-x C-c å, êîãàòî èñêàòå äà èçëåçåòå îò -ñèñòåìàòà. Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Åìàêñ å +ñèñòåìàòà. Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Emacs å èçâèêàí îò ïîùåíñêà ïðîãðàìà èëè äðóãè ñòðàíè÷íè ïðîãðàìè, òúé êàòî òå -ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Åìàêñ. Ïðè +ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Emacs. Ïðè îáèêíîâåíè îáñòîÿòåëñòâà, îáà÷å, àêî íå ñòå òðúãíàëè äà èçëèçàòå îò -ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Åìàêñ ñ C-z, âìåñòî äà èçëèçàòå îò -Åìàêñ. +ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Emacs ñ C-z, âìåñòî äà èçëèçàòå îò +Emacs. Èìà ìíîãî êîìàíäè C-x. Åòî ñïèñúê íà òåçè, êîèòî ñòå íàó÷èëè: - C-x C-f Íàìèðàíå íà ôàéë. - C-x C-s Çàïàçâàíå íà ôàéë. - C-x C-b Ñïèñúê íà áóôåðèòå. - C-x C-c Èçëèçàíå îò Åìàêñ. - C-x 1 Èçòðèâàíå íà âñè÷êè ïðîçîðöè îñâåí åäèí. - C-x u Îòìÿíà. + C-x C-f Íàìèðàíå íà ôàéë + C-x C-s Çàïàçâàíå íà ôàéë + C-x C-b Ñïèñúê íà áóôåðèòå + C-x C-c Èçëèçàíå îò Emacs + C-x 1 Èçòðèâàíå íà âñè÷êè ïðîçîðöè, îñâåí åäèí + C-x u Îòìÿíà Èìåíóâàíèòå ðàçøèðåíè êîìàíäè ñà êîìàíäè, êîèòî ñå èçïîëçâàò äàæå îùå ïî-ðÿäêî, èëè êîìàíäè, êîèòî ñå èçïîëçâàò ñàìî â îïðåäåëåíè ðåæèìè. Ïðèìåð å êîìàíäàòà replace-string, êîÿòî çàìåíÿ ãëîáàëíî åäèí íèç ñ -äðóã. Êîãàòî âúâåäåòå M-x, Åìàêñ âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ +äðóã. Êîãàòî âúâåäåòå M-x, Emacs âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ M-x è âèå òðÿáâà äà âúâåäåòå èìåòî íà êîìàíäàòà, â òîçè ñëó÷àé -"replace-string". Ïðîñòî âúâåäåòå "repl s" è Åìàêñ ùå çàâúðøè +"replace-string". Ïðîñòî âúâåäåòå "repl s" è Emacs ùå çàâúðøè èìåòî. ( å êëàâèøúò Tab, îáèêíîâåíî íàìèðàù ñå íàä êëàâèøà CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà êëàâèàòóðàòà.) Çàâúðøåòå èìåòî íà êîìàíäàòà ñ . @@ -735,11 +734,11 @@ CapsLock Êîãàòî ñòå íàïðàâèëè ïðîìåíè âúâ ôàéë, íî îùå íå ñòå ãî çàïàçèëè, òå ìîãàò äà áúäàò çàãóáåíè, àêî êîìïþòúðúò âíåçàïíî ñå èçêëþ÷è. Çà äà âè -ïðåäïàçè îò òàêèâà ñèòóàöèè, Åìàêñ ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî +ïðåäïàçè îò òàêèâà ñèòóàöèè, Emacs ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî çàïàçâàí" ôàéë çà âñåêè ôàéë, êîéòî ðåäàêòèðàòå. Èìåòî íà àâòîìàòè÷íî çàïàçâàíèÿ ôàéë èìà # â íà÷àëîòî è â êðàÿ; íàïðèìåð, àêî âàøèÿò ôàéë å ñ èìå "hello.c", èìåòî íà íåãîâèÿ àâòîìàòè÷íî çàïàçâàí ôàéë ùå áúäå -"#hello.c#". Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Åìàêñ +"#hello.c#". Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Emacs èçòðèâà íåãîâèÿ àâòîìàòè÷íî çàïèñâàí ôàéë. Àêî êîìïþòúðúò çàâèñíå, ìîæå äà âúçñòàíîâèòå âàøàòà àâòîìàòè÷íî @@ -753,7 +752,7 @@ M-x recover file. * ÅÕÎ ÎÁËÀÑÒÒÀ -------------- -Àêî Åìàêñ âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè +Àêî Emacs âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè ïîêàæå â äúíîòî íà åêðàíà, â îáëàñò, íàðè÷àíà "åõî îáëàñò". Åõî îáëàñòòà îáõâàùà ïîñëåäíèÿ ðåä îò åêðàíà. @@ -764,18 +763,18 @@ M-x recover file. Ðåäúò òî÷íî íàä åõî îáëàñòòà ñå íàðè÷à "ðåä íà ðåæèìà" (mode line). Òîé ïîêàçâà íåùî êàòî: --R:** TUTORIAL.bg (Fundamental)--L670--58%---------------- +-D:** TUTORIAL.bg 63% L749 (Fundamental)--------------------- -Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Åìàêñ è òåêñòà, +Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Emacs è òåêñòà, êîéòî ðåäàêòèðàòå. Âå÷å çíàåòå êàêâî îçíà÷àâà èìåòî íà ôàéëà -- òîâà å ôàéëúò, êîéòî ñòå -íàìåðèëè. -NN%-- ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà -îçíà÷àâà, ÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà. Àêî -íà÷àëîòî íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî ---00%--. Àêî êðàÿ íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî). -Àêî ãëåäàòå òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà -åêðàíà, ðåäúò íà ðåæèìà ùå èçâåäå --All--. +íàìåðèëè. NN% ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà îçíà÷àâà, +÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà. Àêî íà÷àëîòî íà ôàéëà +å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî --00%--. Àêî êðàÿò +íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî). Àêî ãëåäàòå +òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà åêðàíà, ðåäúò íà +ðåæèìà ùå èçâåäå --All--. Çíàêúò L è öèôðèòå ïîêàçâàò ìÿñòîòî ïî äðóã íà÷èí: òîâà å íîìåðúò íà òåêóùèÿ ðåä íà òî÷êàòà. @@ -789,7 +788,7 @@ M-x recover file. Fundamental (Îñíîâåí), êîéòî èçïîëçâàòå â ìîìåíòà. Òîâà å ïðèìåð çà "ãëàâåí ðåæèì" (major mode). -Åìàêñ èìà ìíîãî ãëàâíè ðåæèìè. Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà +Emacs èìà ìíîãî ãëàâíè ðåæèìè. Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà ðåäàêòèðàíå íà ðàçëè÷íè åçèöè è/èëè âèäîâå òåêñò, êàòî íàïðèìåð ðåæèì Ëèñï, ðåæèì Òåêñò è äðóãè. Âúâ âñåêè åäèí ìîìåíò îò âðåìå òî÷íî åäèí ãëàâåí ðåæèì å àêòèâåí è íåãîâîòî èìå ìîæå âèíàãè äà áúäå íàìåðåíî â @@ -808,7 +807,7 @@ Fundamental ( >> Âúâåäåòå M-x text mode. -Íå ñå áåçïîêîéòå, íèêîÿ îò Åìàêñ êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà +Íå ñå áåçïîêîéòå, íèêîÿ îò Emacs êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà ñå ïðîìåíè ïî íÿêàêúâ ñúùåñòâåí íà÷èí. Íî ìîæå äà çàáåëåæèòå, ÷å M-f è M-b ñåãà âúçïðèåìàò àïîñòðîôèòå (') êàòî ÷àñò îò äóìèòå. Ïðåäè òîâà, â îñíîâíèÿ ðåæèì (Fundamental), M-f è M-b ñå âúçïðèåìàõà êàòî @@ -837,7 +836,7 @@ m. Åäèí ãëàâåí ðåæèì, êîéòî å ìíîãî ïîëåçåí, îñîáåíî çà ðåäàêòèðàíå íà òåêñò íà åñòåñòâåí åçèê, å ðåæèìúò íà àâòîìàòè÷íî çàïúëâàíå (Auto Fill -mode). Êîãàòî òîçè ðåæèì å âêëþ÷åí, Åìàêñ àâòîìàòè÷íî ðàçäåëÿ ðåäà +mode). Êîãàòî òîçè ðåæèì å âêëþ÷åí, Emacs àâòîìàòè÷íî ðàçäåëÿ ðåäà ïðè ìÿñòîòî ìåæäó äóìèòå, êîãàòî âìúêâàòå òåêñò è íàïðàâèòå ðåä, êîéòî å òâúðäå äúëúã. @@ -857,7 +856,7 @@ auto fill mode. àðãóìåíò íà êîìàíäàòà. >> Âúâåäåòå C-x f ñ àðãóìåíò 20. (C-u 2 0 C-x f). - Ñåãà âúâåäåòå íÿêàêúâ òåêñò è âèæòå êàê Åìàêñ çàïúëâà ðåäîâåòå ñ ïî + Ñåãà âúâåäåòå íÿêàêúâ òåêñò è âèæòå êàê Emacs çàïúëâà ðåäîâåòå ñ ïî íå ïîâå÷å îò 20 çíàêà. Ïîñëå âúðíåòå îáðàòíî ãðàíèöàòà íà 70, èçïîëçâàéêè C-x f îòíîâî. @@ -872,12 +871,12 @@ auto fill mode. * ÒÚÐÑÅÍÅ --------- -Åìàêñ ìîæå äà èçâúðøâà òúðñåíèÿ íà íèçîâå (òîâà ñà ïîñëåäîâàòåëíîñòè +Emacs ìîæå äà èçâúðøâà òúðñåíèÿ íà íèçîâå (òîâà ñà ïîñëåäîâàòåëíîñòè îò çíàöè èëè äóìè) èëè íàïðåä â òåêñòà, èëè íàçàä â íåãî. Òúðñåíåòî íà íèç å ïðèäâèæâàùà êóðñîðà êîìàíäà; òÿ ïðåìåñòâà êóðñîðà íà ñëåäâàùîòî ìÿñòî, êúäåòî ñå ñðåùà íèçúò. -Êîìàíäàòà çà òúðñåíå íà Åìàêñ ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà +Êîìàíäàòà çà òúðñåíå íà Emacs ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà ïîâå÷åòî ðåäàêòîðè ïî òîâà, ÷å òÿ å "ïîñòúïêîâà". Òîâà îçíà÷àâà, ÷å òúðñåíåòî ñå èçâúðøâà îùå äîêàòî âúâåæäàòå òåêñòà, êîéòî òúðñèòå. @@ -885,7 +884,7 @@ auto fill mode. òúðñåíå íàçàä. ÍÎ ÏÎ×ÀÊÀÉÒÅ! Íå ãè ïðîáâàéòå ñåãà. Êîãàòî âúâåäåòå C-s, ùå çàáåëåæèòå, ÷å íèçúò "I-search" ñå ïîÿâÿâà -êàòî ïîäñêàçêà â åõî îáëàñòòà. Òîâà âè êàçâà, ÷å Åìàêñ å â òîâà, +êàòî ïîäñêàçêà â åõî îáëàñòòà. Òîâà âè êàçâà, ÷å Emacs å â òîâà, êîåòî ñå íàðè÷à ïîñòúïêîâî òúðñåíå, ÷àêàéêè âè äà âúâåæäàòå òåêñòà, êîéòî èñêàòå äà òúðñèòå. ïðèêëþ÷âà òúðñåíåòî. @@ -897,19 +896,19 @@ auto fill mode. >> Ñåãà âúâåäåòå òðè ïúòè è âèæòå êàê ñå ïðèäâèæâà êóðñîðà. >> Âúâåäåòå , çà äà ïðåêðàòèòå òúðñåíåòî. -Çàáåëÿçàõòå ëè êàêâî ñòàíà? Åìàêñ, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà +Çàáåëÿçàõòå ëè êàêâî ñòàíà? Emacs, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà äà íàìåðè ñëåäâàùîòî ñúâïàäåíèå íà íèçà, êîéòî ñå âúâåæäà. Çà äà îòèäåòå íà ñëåäâàùîòî ñúâïàäåíèå íà "òúðñíå", ïðîñòî îòíîâî âúâåäåòå -C-s. Àêî íÿìà òàêîâà ñúâïàäåíèå, Åìàêñ áèáèïâà è âè êàçâà, ÷å +C-s. Àêî íÿìà òàêîâà ñúâïàäåíèå, Emacs áèáèïâà è âè êàçâà, ÷å òúðñåíåòî å "ïðîâàëåíî" (failing). C-g ñúùî ïðåêðàòÿâà òúðñåíåòî. ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-s ùå çàìðàçè åêðàíà è âèå -íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Åìàêñ. Òîâà ïîêàçâà, ÷å +íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Emacs. Òîâà ïîêàçâà, ÷å "ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðå÷åíà "óïðàâëåíèå íà ïîòîêà" -(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Åìàêñ. Çà äà +(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Emacs. Çà äà ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî âêëþ÷âàíå íà ïîñòúïêîâîòî òúðñåíå" (Spontaneous Entry to Incremental -Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè +Search) â ðúêîâîäñòâîòî íà Emacs çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè "ñïîñîáíîñò". Àêî ñòå â ñðåäàòà íà ïîñòúïêîâî òúðñåíå è âúâåäåòå , ùå @@ -931,9 +930,9 @@ C-s * ÌÍÎÆÅÑÒÂÎ ÏÐÎÇÎÐÖÈ ----------------- +-------------------- -Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Åìàêñ å òàçè, ÷å ìîæå äà +Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Emacs å òàçè, ÷å ìîæå äà ãëåäàòå ïîâå÷å îò åäèí ïðîçîðåö íà åêðàíà â äàäåí ìîìåíò îò âðåìå. >> Ïðèäâèæåòå êóðñîðà äî òîçè ðåä è âúâåäåòå C-u 0 C-l (òîâà å @@ -944,7 +943,7 @@ C-s îñòàâà íà ïî-ãîðíèÿ ïðîçîðåö. >> Âúâåäåòå C-M-v, çà äà ñêðîëèðàòå äîëíèÿ ïðîçîðåö. (Àêî íÿìàòå - èñòèíñêè êëàâèø META, âúâåäåòå ESC C-v.) + èñòèíñêè êëàâèø META, âúâåäåòå C-v.) >> Âúâåäåòå C-x o ("o" îò "other" -- "äðóã"), çà äà ïðèäâèæèòå êóðñîðà â äîëíèÿ ïðîçîðåö. @@ -973,10 +972,10 @@ C-M-v ïúðâè", çàùîòî è äâàòà êëàâèøà äåéñòâàò, ìîäèôèöèðàéêè çíàêà, êîéòî ñòå âúâåëè. -Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå ESC âìåñòî òîâà, ðåäúò -èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå ESC, ïîñëåäâàí îò CONTROL-v, çàùîòî -CONTROL-ESC v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî ESC å ñîáñòâåí -çíàê, à íå ìîäèôèêàòîð. +Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå âìåñòî òîâà, ðåäúò +èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå , ïîñëåäâàí îò CONTROL-v, +çàùîòî CONTROL- v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî å +ñîáñòâåí çíàê, à íå ìîäèôèêàòîð. >> Âúâåäåòå C-x 1 (â ãîðíèÿ ïðîçîðåö), çà äà ìàõíåòå äîëíèÿ ïðîçîðåö. @@ -1009,13 +1008,13 @@ CONTROL-ESC v íà ãëàâíèÿ ðåæèì. Íàïðèìåð, ìîæå äà âèäèòå [(Fundamental)] âìåñòî (Fundamental). -Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå ESC ESC -ESC. Òîâà å îáùà êîìàíäà çà "èçëèçàíå". Ìîæå è äà ÿ èçïîëçâàòå çà -ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà äà ñå ìàõíåòå -îò ìèíèáóôåðà. +Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå + . Òîâà å îáùà êîìàíäà çà "èçëèçàíå". Ìîæå è äà ÿ +èçïîëçâàòå çà ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà +äà ñå ìàõíåòå îò ìèíèáóôåðà. ->> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå ESC ESC - ESC, çà äà èçëåçåòå. +>> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå + , çà äà èçëåçåòå. Íå ìîæåòå äà èçïîëçâàòå C-g, çà äà èçëåçåòå îò âëîæåíî íèâî íà ðåäàêòèðàíå. Òîâà å òàêà, çàùîòî C-g ñå èçïîëçâà çà ïðåêðàòÿâàíå íà @@ -1026,16 +1025,16 @@ ESC. ----------------------------------  òîâà âúâåäåíèå ñå îïèòàõìå äà îñèãóðèì äîñòàòú÷íî èíôîðìàöèÿ, çà äà -çàïî÷íåòå äà èçïîëçâàòå Åìàêñ. Èìà òîëêîâà ìíîãî îùå â Åìàêñ, ÷å íå å +çàïî÷íåòå äà èçïîëçâàòå Emacs. Èìà òîëêîâà ìíîãî îùå â Emacs, ÷å íå å âúçìîæíî òî äà áúäå îáÿñíåíî âñè÷êîòî òóê. Îáà÷å ìîæå äà ïîèñêàòå äà -íàó÷èòå ïîâå÷å çà Åìàêñ, òúé êàòî òîé ïðèòåæàâà îùå ìíîãî ïîëåçíè -ñïîñîáíîñòè. Åìàêñ èìà êîìàíäè çà ÷åòåíå íà äîêóìåíòàöèÿòà íà Åìàêñ +íàó÷èòå ïîâå÷å çà Emacs, òúé êàòî òîé ïðèòåæàâà îùå ìíîãî ïîëåçíè +ñïîñîáíîñòè. Emacs èìà êîìàíäè çà ÷åòåíå íà äîêóìåíòàöèÿòà íà Emacs êîìàíäèòå. Òåçè "ïîìîùíè" êîìàíäè âñè÷êè çàïî÷âàò ñúñ çíàêà CONTROL-h, êîéòî ñå íàðè÷à "çíàêúò çà ïîìîù". Çà äà èçïîëçâàòå âúçìîæíîñòèòå íà òàçè ïîìîù, âúâåäåòå çíàêà C-h è ñëåä òîâà çíàêà, êàçâàù êàêúâ âèä ïîìîù èñêàòå. Àêî ÍÀÈÑÒÈÍÀ ñòå ñå -èçãóáèëè, âúâåäåòå C-h ? è Åìàêñ ùå âè êàæå ñ êàêâî ìîæå äà âè +èçãóáèëè, âúâåäåòå C-h ? è Emacs ùå âè êàæå ñ êàêâî ìîæå äà âè ïîìîãíå. Àêî ñòå âúâåëè C-h è ðåøèòå, ÷å íå ñå íóæäàåòå îò ïîìîù, ïðîñòî âúâåäåòå C-g, çà äà ÿ ïðåêðàòèòå. @@ -1047,7 +1046,7 @@ CONTROL-h, Íàé-îñíîâíîòî ïîìîùíî ñðåäñòâî å C-h c. Âúâåäåòå C-h, çíàêà c è êîìàíäåí çíàê èëè ïîñëåäîâàòåëíîñò îò çíàöè, îáðàçóâàùè êîìàíäà; -òîãàâà Åìàêñ ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà. +òîãàâà Emacs ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà. >> Type C-h c C-p. @@ -1057,7 +1056,7 @@ CONTROL-h, (C-p èçïúëíÿâà êîìàíäàòà ïðåäèøåí-ðåä) Òîâà âè êàçâà "èìåòî íà ôóíêöèÿòà". Èìåíàòà íà ôóíêöèèòå ñå èçïîëçâàò -íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Åìàêñ. Íî òúé êàòî èìåíàòà +íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Emacs. Íî òúé êàòî èìåíàòà íà ôóíêöèèòå ñà èçáðàíè òàêà, ÷å äà ïîêàçâàò êàêâî ïðàâè êîìàíäàòà, òå ìîãàò äà ñëóæàò è çà ìíîãî êðàòêà äîêóìåíòàöèÿ -- äîñòàòú÷íà, çà äà âè ïðèïîìíè êîìàíäè, êîèòî âå÷å ñòå ó÷èëè. @@ -1071,7 +1070,7 @@ c. >> Âúâåäåòå C-h k C-p. Òîâà èçâåæäà äîêóìåíòàöèÿòà íà ôóíêöèÿòà, êàêòî è íåéíîòî èìå, â -îòäåëåí Åìàêñ ïðîçîðåö. Êîãàòî ÿ ïðî÷åòåòå, âúâåäåòå C-x 1, çà äà +îòäåëåí Emacs ïðîçîðåö. Êîãàòî ÿ ïðî÷åòåòå, âúâåäåòå C-x 1, çà äà ìàõíåòå ïîìîùíèÿ òåêñò. Íå å íóæíî äà ïðàâèòå òîâà òî÷íî ñåãà. Ìîæå äà ðåäàêòèðàòå, äîêàòî ñå îáðúùàòå êúì ïîìîùíèÿ òåêñò çà ñïðàâêà, è ñëåä òîâà äà âúâåäåòå C-x 1. @@ -1082,14 +1081,14 @@ c. ôóíêöèÿòà. >> Îïèòàéòå ñ âúâåæäàíå íà C-h f previous-line. - Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Åìàêñ çíàå çà ôóíêöèÿòà, + Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Emacs çíàå çà ôóíêöèÿòà, êîÿòî îñúùåñòâÿâà êîìàíäàòà C-p. Ïîäîáíà êîìàíäà, C-h v, èçâåæäà äîêóìåíòàöèÿòà íà ïðîìåíëèâèòå, êîèòî -ìîæå äà ïðîìåíÿòå, çà äà íàñòðîéâàòå ïîâåäåíèåòî íà Åìàêñ. Òðÿáâà äà -âúâåäåòå èìåòî íà ïðîìåíëèâàòà, êîãàòî Åìàêñ âè ïîäñêàæå òîâà. +ìîæå äà ïðîìåíÿòå, çà äà íàñòðîéâàòå ïîâåäåíèåòî íà Emacs. Òðÿáâà äà +âúâåäåòå èìåòî íà ïðîìåíëèâàòà, êîãàòî Emacs âè ïîäñêàæå òîâà. - C-h a Êîìàíäà Àïðîïîñ. Âúâåäåòå êëþ÷îâà äóìà è Åìàêñ ùå + C-h a Êîìàíäà Àïðîïîñ. Âúâåäåòå êëþ÷îâà äóìà è Emacs ùå ïîêàæå ñïèñúê íà âñè÷êè êîìàíäè, ÷èåòî èìå ñúäúðæà òàçè êëþ÷îâà äóìà. Òåçè êîìàíäè ìîãàò âñè÷êè äà áúäàò èçâèêàíè ÷ðåç META-x. Çà íÿêîè êîìàíäè êîìàíäàòà @@ -1112,18 +1111,18 @@ C-f, ñïåöèàëåí áóôåð, íàðè÷àí "*info*", êúäåòî ìîæå äà ÷åòåòå ðúêîâîäñòâàòà íà èíñòàëèðàíèòå âúâ âàøàòà ñèñòåìà ïàêåòè. Âúâåäåòå m emacs , çà äà - ÷åòåòå ðúêîâîäñòâîòî íà Åìàêñ. Àêî íèêîãà ïðåäè òîâà - íå ñòå èçïîëçâàëè Info, âúâåäåòå ? è Åìàêñ ùå âêëþ÷è + ÷åòåòå ðúêîâîäñòâîòî íà Emacs. Àêî íèêîãà ïðåäè òîâà + íå ñòå èçïîëçâàëè Info, âúâåäåòå ? è Emacs ùå âêëþ÷è âúâåäåíèå âúâ âúçìîæíîñòèòå íà ðåæèìà Èíôî. Âåäíúæ ñëåä êàòî ñòå ïðåìèíàëè òîâà âúâåäåíèå, òðÿáâà äà ñå - êîíñóëòèðàòå ñ Åìàêñ Èíôî ðúêîâîäñòâîòî êàòî âàøà + êîíñóëòèðàòå ñ Emacs Èíôî ðúêîâîäñòâîòî êàòî âàøà îñíîâíà äîêóìåíòàöèÿ. * ÎÙÅ ÂÚÇÌÎÆÍÎÑÒÈ ----------------- -Ìîæå äà íàó÷èòå ïîâå÷å çà Åìàêñ ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè +Ìîæå äà íàó÷èòå ïîâå÷å çà Emacs ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè êàòî êíèãà, èëè â Èíôî (èçïîëçâàéòå ìåíþòî ïîìîù (Help) èëè âúâåäåòå F10 h r). Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà äîâúðøâàíå (completion), êîåòî ñïåñòÿâà ïèñàíå, è dired, êîéòî @@ -1131,26 +1130,26 @@ F10 h r). Äîâúðøâàíåòî å íà÷èí äà èçáÿãâàòå íåíóæíî ïèñàíå. Íàïðèìåð, àêî èñêàòå äà ïðåâêëþ÷èòå êúì áóôåðà *Messages*, ìîæå äà âúâåäåòå C-x b -*M è Åìàêñ ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà, +*M è Emacs ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà, äîêîëêîòî ìîæå äà ñå îïðåäåëè îò òîâà, êîåòî ñòå âúâåëè. Äîâúðøâàíåòî -å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà "Äîâúðøâàíå" +å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Emacs â ñòðàíèöàòà "Äîâúðøâàíå" ("Completion"). Dired âè ïîçâîëÿâà äà ãëåäàòå ñïèñúêà îò ôàéëîâå â äèðåêòîðèÿ (è êàòî âúçìîæíîñò: íåéíèòå ïîääèðåêòîðèè), äà ñå ïðèäâèæâàòå â òîçè ñïèñúê, äà ïîñåùàâàòå, ïðåèìåíóâàòå, èçòðèâàòå è èçîáùî äåéñòâàòå âúðõó -ôàéëîâåòå. Dired å îïèñàí â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà +ôàéëîâåòå. Dired å îïèñàí â Èíôî-ðúêîâîäñòâîòî íà Emacs â ñòðàíèöàòà "Dired". -Ðúêîâîäñòâîòî íà Åìàêñ îïèñâà îùå ìíîãî äðóãè âúçìîæíîñòè íà +Ðúêîâîäñòâîòî íà Emacs îïèñâà îùå ìíîãî äðóãè âúçìîæíîñòè íà ðåäàêòîðà. * ÇÀÊËÞ×ÅÍÈÅ ------------ -Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Åìàêñ, èçïîëçâàéòå C-x C-c. -Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Åìàêñ +Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Emacs, èçïîëçâàéòå C-x C-c. +Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Emacs ïî-êúñíî, èçïîëçâàéòå C-z. Òîâà âúâåäåíèå å ïðåäâèäåíî äà áúäå ðàçáèðàåìî çà âñè÷êè íîâè @@ -1161,17 +1160,17 @@ Dired * ÊÎÏÈÐÀÍÅ ---------- -Òîâà âúâåäåíèå ïðîèçëèçà îò äúëãà ïîðåäèöà âúâåäåíèÿ â Åìàêñ, -çàïî÷âàéêè îò åäíî, íàïèñàíî îò Ñòþúðò Êðàêðàôò çà íà÷àëíèÿ Åìàêñ. +Òîâà âúâåäåíèå ïðîèçëèçà îò äúëãà ïîðåäèöà âúâåäåíèÿ â Emacs, +çàïî÷âàéêè îò åäíî, íàïèñàíî îò Ñòþúðò Êðàêðàôò çà íà÷àëíèÿ Emacs. -Òàçè âåðñèÿ íà âúâåäåíèåòî, êàêòî è ÃÍÓ Åìàêñ, å çàùèòåíà ñ àâòîðñêè +Òàçè âåðñèÿ íà âúâåäåíèåòî, êàêòî è GNU Emacs, å çàùèòåíà ñ àâòîðñêè ïðàâà è èäâà ñ ðàçðåøåíèå äà ðàçïðîñòðàíÿâàòå êîïèÿ ïðè ñëåäíèòå óñëîâèÿ: This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: -Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the @@ -1184,8 +1183,8 @@ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation under the above conditions, provided also that they carry prominent notices stating who last altered them. -Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Åìàêñ ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ. -Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà ÃÍÓ Åìàêñ íà +Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Emacs ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ. +Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà GNU Emacs íà ñâîè ïðèÿòåëè. Ïîìîãíåòå äà ñïðåì çàòâîðåíîñòòà íà ïðîãðàìèòå ("ïðèòåæàíèåòî"), êàòî èçïîëçâàìå, ïèøåì è ñïîäåëÿìå ñâîáîäåí ñîôòóåð! diff --git a/etc/TUTORIAL.cn b/etc/TUTORIAL.cn index e286d4f19c8..0ffc3eb38de 100644 --- a/etc/TUTORIAL.cn +++ b/etc/TUTORIAL.cn @@ -1,4 +1,4 @@ -Emacs ¿ìËÙÖ¸ÄÏ +Emacs ¿ìËÙÖ¸ÄÏ. ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. diff --git a/etc/TUTORIAL.cs b/etc/TUTORIAL.cs index bac3a3a228e..f8945b89e36 100644 --- a/etc/TUTORIAL.cs +++ b/etc/TUTORIAL.cs @@ -1,4 +1,4 @@ -tutoriál k Emacsu +tutoriál k Emacsu. Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci. Do èe¹tiny pøelo¾il Milan Zamazal . diff --git a/etc/TUTORIAL.de b/etc/TUTORIAL.de index 3f03d983651..a007fef752b 100644 --- a/etc/TUTORIAL.de +++ b/etc/TUTORIAL.de @@ -1,4 +1,3 @@ -Einführung in Emacs Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc. Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal diff --git a/etc/TUTORIAL.es b/etc/TUTORIAL.es index b0d721e1e2c..67e5cfb3dab 100644 --- a/etc/TUTORIAL.es +++ b/etc/TUTORIAL.es @@ -1,5 +1,4 @@ -Tutorial de Emacs -Usted esta viendo el tutorial de Emacs. Vea al final las condiciones +Tutorial de Emacs. Vea al final las condiciones de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. diff --git a/etc/TUTORIAL.fr b/etc/TUTORIAL.fr index 99bf4c00ff2..38853c608b9 100644 --- a/etc/TUTORIAL.fr +++ b/etc/TUTORIAL.fr @@ -1,4 +1,3 @@ -Didacticiel d'Emacs Didacticiel d'Emacs. Voir la fin de ce document pour les conditions. Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc. diff --git a/etc/TUTORIAL.it b/etc/TUTORIAL.it index 6611675b583..02a91045d0e 100644 --- a/etc/TUTORIAL.it +++ b/etc/TUTORIAL.it @@ -1,4 +1,3 @@ -Esercitazione di Emacs Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc. Condizioni d'uso alla fine del file. diff --git a/etc/TUTORIAL.ja b/etc/TUTORIAL.ja index 48d807f6ce0..f910ed6be40 100644 --- a/etc/TUTORIAL.ja +++ b/etc/TUTORIAL.ja @@ -1,4 +1,4 @@ -Emacs $BF~Lg%,%$%I$G$9(B +Emacs $BF~Lg%,%$%I$G$9(B. $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 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. diff --git a/etc/TUTORIAL.ko b/etc/TUTORIAL.ko index 5df936a998f..8e94db3c658 100644 --- a/etc/TUTORIAL.ko +++ b/etc/TUTORIAL.ko @@ -1,4 +1,4 @@ -$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B +$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B. $(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B $(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B. diff --git a/etc/TUTORIAL.pl b/etc/TUTORIAL.pl index 5b5b4d4eb8c..c3bcb8047c8 100644 --- a/etc/TUTORIAL.pl +++ b/etc/TUTORIAL.pl @@ -1,5 +1,4 @@ -krótki samouczek Emacsa -Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001 +krótki samouczek Emacsa. Copyright (c) 1985, 2001 Free Software Foundation, Inc. Szczegó³y na koñcu pliku. Polecenia Emacsa wymagaj± na ogó³ wci¶niêcia klawisza CONTROL (oznaczanego diff --git a/etc/TUTORIAL.pt_BR b/etc/TUTORIAL.pt_BR index ded253ba880..a7a50804ca0 100644 --- a/etc/TUTORIAL.pt_BR +++ b/etc/TUTORIAL.pt_BR @@ -1,6 +1,4 @@ -Tutorial do Emacs -Você está visualizando o Tutorial do Emacs. Veja no fim as condições -para cópia. +Tutorial do Emacs. Veja no fim as condições para cópia. Copyright (c) 2004, 2005 Free Software Foundation. Os comandos do Emacs geralmente envolvem a tecla CONTROL (algumas vezes diff --git a/etc/TUTORIAL.ro b/etc/TUTORIAL.ro index d4dde10f237..459d3726cee 100644 --- a/etc/TUTORIAL.ro +++ b/etc/TUTORIAL.ro @@ -1,4 +1,4 @@ -tutorialului de Emacs +tutorialului de Emacs. Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*- Traducere din englezã de Tudor Hulubei . Mulþumiri Aidei Hulubei pentru corecturi ºi sugestii. diff --git a/etc/TUTORIAL.ru b/etc/TUTORIAL.ru index 10b96e56076..83ab9f125ed 100644 --- a/etc/TUTORIAL.ru +++ b/etc/TUTORIAL.ru @@ -1,4 +1,4 @@ -ÕÞÅÂÎÉË Emacs +ÕÞÅÂÎÉË Emacs. ÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ. Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. diff --git a/etc/TUTORIAL.sk b/etc/TUTORIAL.sk index 58812197287..465a3805a62 100644 --- a/etc/TUTORIAL.sk +++ b/etc/TUTORIAL.sk @@ -1,4 +1,4 @@ -tútorial k Emacsu +tútorial k Emacsu. Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci. Do èe¹tiny prelo¾il Milan Zamazal , do slovenèiny Miroslav Va¹ko . diff --git a/etc/TUTORIAL.sl b/etc/TUTORIAL.sl index f1e64ec748d..263019643db 100644 --- a/etc/TUTORIAL.sl +++ b/etc/TUTORIAL.sl @@ -1,4 +1,3 @@ -Prvo berilo za Emacs Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu. Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. diff --git a/etc/TUTORIAL.sv b/etc/TUTORIAL.sv index 2f9bbe7ceab..bbda74380b2 100644 --- a/etc/TUTORIAL.sv +++ b/etc/TUTORIAL.sv @@ -1,7 +1,5 @@ -användarhandledningen till Emacs -Detta är den Svenska användarhandledningen till Emacs. I slutet finns -kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free -Software Foundation, Inc. +användarhandledningen till Emacs. I slutet finns kopieringsvillkoren. +Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation, Inc. Emacs-kommandon innebär ofta användning av kontrolltangenten (vanligen märkt CTRL eller CTL) eller META-tangenten (på vissa tangentbord märkt diff --git a/etc/TUTORIAL.th b/etc/TUTORIAL.th index 85280907c60..e1fb9d561e1 100644 --- a/etc/TUTORIAL.th +++ b/etc/TUTORIAL.th @@ -1,4 +1,4 @@ -0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B +0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B. ,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B. 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 f8d1d208252..6c3cd3bd2cd 100644 --- a/etc/TUTORIAL.zh +++ b/etc/TUTORIAL.zh @@ -1,4 +1,4 @@ -Emacs §Ö³t«ü«n¡] +Emacs §Ö³t«ü«n¡]. ±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£­¶§À¦³Ãö½Æ»s±ø¥ó¡C Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. From 07778743cf6c70fbef3699fb62768822cd4cf881 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Sat, 2 Apr 2005 09:08:01 +0000 Subject: [PATCH 179/241] Peter Dyballa confirms that his problem has been solved. --- admin/FOR-RELEASE | 3 --- 1 file changed, 3 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index bbd9868b7cc..ff6b4c7e73e 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -33,9 +33,6 @@ invalid pointer from string_free_list. * LOSSAGE -** Fix ispell.el bug reported by Peter Dyballa -on 18 Feb to emacs-pretest-bug. - ** Clean up flymake.el to follow Emacs Lisp conventions. ** Fix up url-ldap.el. From 2f2e23735660707d2fae26b2c596ebe1c45b69b8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 2 Apr 2005 11:32:18 +0000 Subject: [PATCH 180/241] (rmail-parse-url): Bugfix. Parse traditional mailbox specifications as well as URLs. (rmail-insert-inbox-text): Remove unused conditional branches. --- lisp/ChangeLog | 6 ++++++ lisp/mail/rmail.el | 49 +++++++++++++++++++--------------------------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7836779618d..feb47979405 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-04-02 Sergey Poznyakoff (tiny change) + + * mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional + mailbox specifications as well as URLs. + (rmail-insert-inbox-text): Remove unused conditional branches. + 2005-04-01 Jay Belanger * calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 559963589a1..de88b37d91e 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -1622,13 +1622,15 @@ a remote mailbox, PASSWORD is the password if it should be supplied as a separate argument to `movemail' or nil otherwise, GOT-PASSWORD is non-nil if the user has supplied the password interactively. " - (if (string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file) + (cond + ((string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file) (let (got-password supplied-password (proto (match-string 1 file)) (user (match-string 3 file)) (pass (match-string 5 file)) (host (substring file (or (match-end 2) (+ 3 (match-end 1)))))) + (if (not pass) (when rmail-remote-password-required (setq got-password (not (rmail-have-password))) @@ -1645,8 +1647,22 @@ is non-nil if the user has supplied the password interactively. (list file (or (string-equal proto "pop") (string-equal proto "imap")) supplied-password - got-password))) - (list file nil nil nil))) + got-password)))) + + ((string-match "^po:\\([^:]+\\)\\(:\\(.*\\)\\)?" file) + (let (got-password supplied-password + (proto "pop") + (user (match-string 1 file)) + (host (match-string 3 file))) + + (when rmail-remote-password-required + (setq got-password (not (rmail-have-password))) + (setq supplied-password (rmail-get-remote-password nil))) + + (list file "pop" supplied-password got-password))) + + (t + (list file nil nil nil)))) (defun rmail-insert-inbox-text (files renamep) ;; Detect a locked file now, so that we avoid moving mail @@ -1686,15 +1702,7 @@ is non-nil if the user has supplied the password interactively. (expand-file-name buffer-file-name)))) ;; Always use movemail to rename the file, ;; since there can be mailboxes in various directories. - (setq movemail t) -;;; ;; If getting from mail spool directory, -;;; ;; use movemail to move rather than just renaming, -;;; ;; so as to interlock with the mailer. -;;; (setq movemail (string= file -;;; (file-truename -;;; (concat rmail-spool-directory -;;; (file-name-nondirectory file))))) - (if (and movemail (not popmail)) + (if (not popmail) (progn ;; On some systems, /usr/spool/mail/foo is a directory ;; and the actual inbox is /usr/spool/mail/foo/foo. @@ -1716,23 +1724,6 @@ is non-nil if the user has supplied the password interactively. ((or (file-exists-p tofile) (and (not popmail) (not (file-exists-p file)))) nil) - ((and (not movemail) (not popmail)) - ;; Try copying. If that fails (perhaps no space) and - ;; we're allowed to blow away the inbox, rename instead. - (if rmail-preserve-inbox - (copy-file file tofile nil) - (condition-case nil - (copy-file file tofile nil) - (error - ;; Third arg is t so we can replace existing file TOFILE. - (rename-file file tofile t)))) - ;; Make the real inbox file empty. - ;; Leaving it deleted could cause lossage - ;; because mailers often won't create the file. - (if (not rmail-preserve-inbox) - (condition-case () - (write-region (point) (point) file) - (file-error nil)))) (t (with-temp-buffer (let ((errors (current-buffer))) From 1673df2e0d9f5c62211b6a9c89b6886ca288bde8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sat, 2 Apr 2005 12:05:38 +0000 Subject: [PATCH 181/241] * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling mallopt. * ralloc.c (r_alloc_init): Ditto. --- src/ChangeLog | 7 +++++++ src/alloc.c | 4 ++++ src/ralloc.c | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 9518de3af8f..ef635f206bd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2005-04-02 Jan Dj,Ad(Brv + + * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling + mallopt. + + * ralloc.c (r_alloc_init): Ditto. + 2005-04-01 Kenichi Handa * lisp.h (Vascii_upcase_table, Vascii_canon_table, diff --git a/src/alloc.c b/src/alloc.c index d529ab9927b..a907247d21c 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1933,14 +1933,18 @@ allocate_string_data (s, nchars, nbytes) mmap'ed data typically have an address towards the top of the address space, which won't fit into an EMACS_INT (at least on 32-bit systems with the current tagging scheme). --fx */ + BLOCK_INPUT; mallopt (M_MMAP_MAX, 0); + UNBLOCK_INPUT; #endif b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP); #ifdef DOUG_LEA_MALLOC /* Back to a reasonable maximum of mmap'ed areas. */ + BLOCK_INPUT; mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); + UNBLOCK_INPUT; #endif b->next_free = &b->first_data; diff --git a/src/ralloc.c b/src/ralloc.c index 75c25258a9d..e209db72673 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -1255,7 +1255,9 @@ r_alloc_init () #endif #ifdef DOUG_LEA_MALLOC - mallopt (M_TOP_PAD, 64 * 4096); + BLOCK_INPUT; + mallopt (M_TOP_PAD, 64 * 4096); + UNBLOCK_INPUT; #else #ifndef SYSTEM_MALLOC /* Give GNU malloc's morecore some hysteresis From a4766fd5e67e014c5a5ace2bab86810fc6212a51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sat, 2 Apr 2005 12:12:48 +0000 Subject: [PATCH 182/241] #include blockinput also --- src/ralloc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ralloc.c b/src/ralloc.c index e209db72673..fd0d62e1977 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */ #include #include "lisp.h" /* Needed for VALBITS. */ +#include "blockinput.h" #ifdef HAVE_UNISTD_H #include From 45dcacad9f8a39a86323b1e956a969283ffb7998 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 2 Apr 2005 18:29:29 +0000 Subject: [PATCH 183/241] Remove the old intro line that apparently was a longer version of "Emacs tutorial". --- etc/TUTORIAL.cn | 1 - etc/TUTORIAL.ja | 1 - etc/TUTORIAL.ru | 1 - etc/TUTORIAL.zh | 1 - 4 files changed, 4 deletions(-) diff --git a/etc/TUTORIAL.cn b/etc/TUTORIAL.cn index 0ffc3eb38de..1b30b6e909a 100644 --- a/etc/TUTORIAL.cn +++ b/etc/TUTORIAL.cn @@ -1,5 +1,4 @@ Emacs ¿ìËÙÖ¸ÄÏ. -ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Emacs Ö¸Áîͨ³£°üº¬ÓÐ CONTROL ¼ü£¨ÓÐʱºòÒÔ CTRL »ò CTL À´±êʾ£©»òÊÇ diff --git a/etc/TUTORIAL.ja b/etc/TUTORIAL.ja index f910ed6be40..3ca2afa7c41 100644 --- a/etc/TUTORIAL.ja +++ b/etc/TUTORIAL.ja @@ -1,5 +1,4 @@ Emacs $BF~Lg%,%$%I$G$9(B. -$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 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-! Date: Sat, 2 Apr 2005 18:30:07 +0000 Subject: [PATCH 184/241] Clean up line breaks. --- etc/ChangeLog | 8 ++++++++ etc/TUTORIAL.es | 5 ++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index d3474991f8d..8d7a9610321 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,11 @@ +2005-04-02 Richard M. Stallman + + * TUTORIAL.ja, TUTORIAL.cn, TUTORIAL.ru, TUTORIAL.zh: Remove the + old intro line that apparently was a longer version of "Emacs + tutorial". + + * TUTORIAL.es: Clean up line breaks. + 2005-04-01 Marcelo Toledo * TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, diff --git a/etc/TUTORIAL.es b/etc/TUTORIAL.es index 67e5cfb3dab..ed55cc5ca41 100644 --- a/etc/TUTORIAL.es +++ b/etc/TUTORIAL.es @@ -1,6 +1,5 @@ -Tutorial de Emacs. Vea al final las condiciones -de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software -Foundation. +Tutorial de Emacs. Vea al final las condiciones de copiado. +Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Generalmente los comandos de Emacs involucran la tecla CONTROL (algunas veces llamada CTRL O CTL) o la tecla meta (algunas veces From 2a0af9db2e83cadb5159875cb21d31ba1b54f89c Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sat, 2 Apr 2005 19:22:00 +0000 Subject: [PATCH 185/241] *** empty log message *** --- lisp/ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index feb47979405..34330b9c63e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-04-02 Luc Teirlinck + + * simple.el (visible-mode): Use explicit :group keyword. + This changes the group of `visible-mode-hook' from paren-blinking + to editing-basics. + 2005-04-02 Sergey Poznyakoff (tiny change) * mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional From ab77efd0e55c661ea8fd45df28f2a39d0c46fbd8 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sat, 2 Apr 2005 19:24:26 +0000 Subject: [PATCH 186/241] (visible-mode): Use explicit :group keyword. This changes the group of `visible-mode-hook' from paren-blinking to editing-basics. --- lisp/simple.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/simple.el b/lisp/simple.el index 753391dabe8..9f6359c5e3c 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -5238,6 +5238,7 @@ Enabling Visible mode makes all invisible text temporarily visible. Disabling Visible mode turns off that effect. Visible mode works by saving the value of `buffer-invisibility-spec' and setting it to nil." :lighter " Vis" + :group 'editing-basics (when (local-variable-p 'vis-mode-saved-buffer-invisibility-spec) (setq buffer-invisibility-spec vis-mode-saved-buffer-invisibility-spec) (kill-local-variable 'vis-mode-saved-buffer-invisibility-spec)) From aa945b597de91f6d780064b4a2a2df6c26ca1926 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sun, 3 Apr 2005 04:25:20 +0000 Subject: [PATCH 187/241] (Coding System Basics): Another cleanup. --- lispref/ChangeLog | 4 ++++ lispref/nonascii.texi | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 8a34499507f..3c3cc48a70d 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,7 @@ +2005-04-02 Richard M. Stallman + + * nonascii.texi (Coding System Basics): Another wording cleanup. + 2005-04-01 Richard M. Stallman * nonascii.texi (Coding System Basics): Clarify previous change. diff --git a/lispref/nonascii.texi b/lispref/nonascii.texi index 4e38c300a61..aaa23e90a48 100644 --- a/lispref/nonascii.texi +++ b/lispref/nonascii.texi @@ -628,11 +628,11 @@ characters; for example, there are three coding systems for the Cyrillic conversion, but some of them leave the choice unspecified---to be chosen heuristically for each file, based on the data. -In general, a coding system doesn't guarantee roundtrip identity: -decoding text then encoding the result in the same coding system can -produce a different byte sequence from the one you originally decoded. -However, the following coding systems do guarantee that the result -will be the same as what you originally decoded: + In general, a coding system doesn't guarantee roundtrip identity: +decoding a byte sequence using coding system, then encoding the +resulting text in the same coding system, can produce a different byte +sequence. However, the following coding systems do guarantee that the +byte sequence will be the same as what you originally decoded: @quotation chinese-big5 chinese-iso-8bit cyrillic-iso-8bit emacs-mule @@ -641,13 +641,13 @@ iso-latin-4 iso-latin-5 iso-latin-8 iso-latin-9 iso-safe japanese-iso-8bit japanese-shift-jis korean-iso-8bit raw-text @end quotation -Encoding buffer text and then decoding the result can also fail to -reproduce the original text. For instance, when you encode Latin-2 + Encoding buffer text and then decoding the result can also fail to +reproduce the original text. For instance, if you encode Latin-2 characters with @code{utf-8} and decode the result using the same coding system, you'll get Unicode characters (of charset -@code{mule-unicode-0100-24ff}). When you encode Unicode characters -with @code{iso-latin-2} and decode them back with the same coding -system, you'll get Latin-2 characters. +@code{mule-unicode-0100-24ff}). If you encode Unicode characters with +@code{iso-latin-2} and decode the result with the same coding system, +you'll get Latin-2 characters. @cindex end of line conversion @dfn{End of line conversion} handles three different conventions used From df16f4755b715f5164adc64c6a7bc6a8f9733987 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Sun, 3 Apr 2005 13:53:56 +0000 Subject: [PATCH 188/241] (Standard Hooks): Add some hooks. Add cross references and/or descriptions. Delete major mode hooks; mention them as a category instead. Rename or delete obsolete hooks. --- lispref/hooks.texi | 204 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 160 insertions(+), 44 deletions(-) diff --git a/lispref/hooks.texi b/lispref/hooks.texi index 1aa22b94686..ea7c6605796 100644 --- a/lispref/hooks.texi +++ b/lispref/hooks.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2004 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2004, 2005 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../info/hooks @node Standard Hooks, Index, Standard Keymaps, Top @@ -16,6 +16,11 @@ arguments and their values are completely ignored. The recommended way to put a new function on such a hook is to call @code{add-hook}. @xref{Hooks}, for more information about using hooks. +Every major mode defines a mode hook named +@samp{@var{modename}-mode-hook}. The major mode command runs this +normal hook with @code{run-mode-hooks} as the very last thing it does. +@xref{Mode Hooks}. Mode hooks are omitted in the list below. + The variables whose names end in @samp{-hooks} or @samp{-functions} are usually @dfn{abnormal hooks}; their values are lists of functions, but these functions are called in a special way (they are passed arguments, @@ -28,118 +33,229 @@ as their values. (In older Emacs versions, some of these variables had names ending in @samp{-hook} even though they were not normal hooks; however, we have renamed all of those.) -@c !!! need xref to where each hook is documented or else document it -@c by specifying what is expected, and when it is called relative to -@c mode initialization. +@c We need to xref to where each hook is documented or else document +@c it here. @table @code @item activate-mark-hook +@xref{The Mark}. + @item after-change-functions +@xref{Change Hooks}. + @item after-change-major-mode-hook +@xref{Mode Hooks}. + @item after-init-hook +@xref{Init File}. + @item after-insert-file-functions +@xref{Saving Properties}. + @item after-make-frame-functions +@xref{Creating Frames}. + @item after-revert-hook +@xref{Reverting}. + @item after-save-hook -@item apropos-mode-hook +@xref{Saving Buffers}. + @item auto-fill-function +@xref{Auto Filling}. + @item auto-save-hook +@xref{Auto-Saving}. + @item before-change-functions +@xref{Change Hooks}. + @item before-init-hook +@xref{Init File}. + @item before-make-frame-hook +@xref{Creating Frames}. + @item before-revert-hook +@xref{Reverting}. + @item before-save-hook +@xref{Saving Buffers}. + @item blink-paren-function +@xref{Blinking}. + @item buffer-access-fontify-functions -@item c-mode-hook +@xref{Lazy Properties}. + @item calendar-load-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item change-major-mode-hook -@item command-history-hook +@xref{Creating Buffer-Local}. + @item command-line-functions +@xref{Command-Line Arguments}. + @item comment-indent-function +@xref{Options for Comments,, Options Controlling Comments, emacs, the +GNU Emacs Manual}. + @item custom-define-hook +Hook called after defining each customize option. + @item deactivate-mark-hook +@xref{The Mark}. + @item desktop-after-read-hook +Normal hook run after a successful @code{desktop-read}. May be used +to show a buffer list. @xref{Saving Emacs Sessions,, Saving Emacs +Sessions, emacs, the GNU Emacs Manual}. + @item desktop-no-desktop-file-hook +Normal hook run when @code{desktop-read} can't find a desktop file. +May be used to show a dired buffer. @xref{Saving Emacs Sessions,, +Saving Emacs Sessions, emacs, the GNU Emacs Manual}. + @item desktop-save-hook +Normal hook run before the desktop is saved in a desktop file. This +is useful for truncating history lists, for example. @xref{Saving +Emacs Sessions,, Saving Emacs Sessions, emacs, the GNU Emacs Manual}. + @item diary-display-hook +@inforef{Fancy Diary Display,, emacs-xtra}. + @item diary-hook -@item dired-mode-hook +List of functions called after the display of the diary. Can be used +for appointment notification. + @item disabled-command-function +@xref{Disabling Commands}. + @item echo-area-clear-hook -@item edit-picture-hook -@item electric-buffer-menu-mode-hook -@item electric-command-history-hook -@item electric-help-mode-hook -@item emacs-lisp-mode-hook +@xref{The Echo Area}. + +@item emacs-startup-hook +@xref{Init File}. + @item find-file-hook +@xref{Visiting Functions}. + @item find-file-not-found-functions +@xref{Visiting Functions}. + @item first-change-hook -@item fortran-comment-hook -@item fortran-mode-hook -@item indent-mim-hook +@xref{Change Hooks}. + @item initial-calendar-window-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item kbd-macro-termination-hook +@xref{Keyboard Macros}. + @item kill-buffer-hook +@xref{Killing Buffers}. + @item kill-buffer-query-functions +@xref{Killing Buffers}. + @item kill-emacs-hook +@xref{Killing Emacs}. + @item kill-emacs-query-functions -@item LaTeX-mode-hook -@item ledit-mode-hook +@xref{Killing Emacs}. + @item lisp-indent-function -@item lisp-interaction-mode-hook -@item lisp-mode-hook + @item list-diary-entries-hook -@item mail-mode-hook +@inforef{Fancy Diary Display,, emacs-xtra}. + @item mail-setup-hook +@xref{Mail Mode Misc,, Mail Mode Miscellany, emacs, the GNU Emacs +Manual}. + @item mark-diary-entries-hook -@item medit-mode-hook +@inforef{Fancy Diary Display,, emacs-xtra}. + @item menu-bar-update-hook +@xref{Menu Bar}. + @item minibuffer-setup-hook +@xref{Minibuffer Misc}. + @item minibuffer-exit-hook +@xref{Minibuffer Misc}. + @item mouse-position-function -@item news-mode-hook -@item news-reply-mode-hook -@item news-setup-hook +@xref{Mouse Position}. + @item nongregorian-diary-listing-hook +@inforef{Hebrew/Islamic Entries,, emacs-xtra}. + @item nongregorian-diary-marking-hook -@item nroff-mode-hook -@item outline-mode-hook -@item plain-TeX-mode-hook +@inforef{Hebrew/Islamic Entries,, emacs-xtra}. + @item post-command-hook +@xref{Command Overview}. + @item pre-abbrev-expand-hook +@xref{Abbrev Expansion}. + @item pre-command-hook +@xref{Command Overview}. + @item print-diary-entries-hook -@item prolog-mode-hook -@item protect-innocence-hook +@inforef{Diary Customizing,, emacs-xtra}. + @item redisplay-end-trigger-functions -@item rmail-edit-mode-hook -@item rmail-mode-hook -@item rmail-summary-mode-hook -@item scheme-indent-hook -@item scheme-mode-hook -@item scribe-mode-hook -@item shell-mode-hook -@item shell-set-directory-error-hook +@xref{Window Hooks}. + +@item scheme-indent-function + @item suspend-hook +@xref{Suspending Emacs}. + @item suspend-resume-hook +@xref{Suspending Emacs}. + +@item temp-buffer-setup-hook +@xref{Temporary Displays}. + @item temp-buffer-show-function +@xref{Temporary Displays}. + +@item temp-buffer-show-hook +@xref{Temporary Displays}. + @item term-setup-hook -@item terminal-mode-hook -@item terminal-mode-break-hook -@item TeX-mode-hook -@item text-mode-hook +@xref{Terminal-Specific}. + @item today-visible-calendar-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item today-invisible-calendar-hook -@item vi-mode-hook -@item view-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item window-configuration-change-hook +@xref{Window Hooks}. + @item window-scroll-functions +@xref{Window Hooks}. + @item window-setup-hook +@xref{Window Systems}. + @item window-size-change-functions +@xref{Window Hooks}. + @item write-contents-functions +@xref{Saving Buffers}. + @item write-file-functions +@xref{Saving Buffers}. + @item write-region-annotate-functions +@xref{Saving Properties}. @end table @ignore From 8649a87bb44630b28246c4b2c9ce9ef964d06b21 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Sun, 3 Apr 2005 14:01:43 +0000 Subject: [PATCH 189/241] (desktop-no-desktop-file-hook, desktop-after-read-hook): Fix docstring. --- lisp/desktop.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/desktop.el b/lisp/desktop.el index 6ec81fcac70..ed663d375d5 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -1,6 +1,6 @@ ;;; desktop.el --- save partial status of Emacs when killed -;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001 +;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001, 2005 ;; Free Software Foundation, Inc. ;; Author: Morten Welinder @@ -158,14 +158,14 @@ If nil, just print error messages in the message buffer." (defcustom desktop-no-desktop-file-hook nil "Normal hook run when `desktop-read' can't find a desktop file. -May e.g. be used to show a dired buffer." +May be used to show a dired buffer." :type 'hook :group 'desktop :version "22.1") (defcustom desktop-after-read-hook nil "Normal hook run after a successful `desktop-read'. -May e.g. be used to show a buffer list." +May be used to show a buffer list." :type 'hook :group 'desktop :version "22.1") From 07e5fb9ebd4d44a87eb557f9526c6d817387928a Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Sun, 3 Apr 2005 14:02:32 +0000 Subject: [PATCH 190/241] *** empty log message *** --- lisp/ChangeLog | 5 +++++ lispref/ChangeLog | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 34330b9c63e..7ffe6124de0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-03 Lute Kamstra + + * desktop.el (desktop-no-desktop-file-hook) + (desktop-after-read-hook): Fix docstring. + 2005-04-02 Luc Teirlinck * simple.el (visible-mode): Use explicit :group keyword. diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 3c3cc48a70d..0f778a1591c 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,9 @@ +2005-04-03 Lute Kamstra + + * hooks.texi (Standard Hooks): Add some hooks. Add cross + references and/or descriptions. Delete major mode hooks; mention + them as a category instead. Rename or delete obsolete hooks. + 2005-04-02 Richard M. Stallman * nonascii.texi (Coding System Basics): Another wording cleanup. From ed8c6a24c2042ad5879f19945d142e7b459ddb04 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 3 Apr 2005 16:55:58 +0000 Subject: [PATCH 191/241] (filesets-set-default): Doc fix. --- lisp/filesets.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lisp/filesets.el b/lisp/filesets.el index 13ddfa5a84d..5a4dd7bda9a 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el @@ -250,8 +250,15 @@ key is supported." ; (customize-set-variable var val)) ; (filesets-build-menu)) +;; It seems this is a workaround for the XEmacs issue described in the +;; doc-string of filesets-menu-ensure-use-cached. Under Emacs this is +;; essentially just `set-default'. (defun filesets-set-default (sym val &optional init-flag) - "Set-default wrapper function used in conjunction with `defcustom'." + "Set-default wrapper function used in conjunction with `defcustom'. +If SYM is in the list `filesets-ignore-next-set-default', delete +it from that list, and return nil. Otherwise, set the value of +SYM to VAL and return t. If INIT-FLAG is non-nil, set with +`custom-initialize-set', otherwise with `set-default'." (let ((ignore-flag (member sym filesets-ignore-next-set-default))) (if ignore-flag (setq filesets-ignore-next-set-default From 6c381cbae4702b25d2b77227582fe686ba184b66 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 3 Apr 2005 17:02:10 +0000 Subject: [PATCH 192/241] *** empty log message *** --- lisp/ChangeLog | 4 ++++ man/ChangeLog | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7ffe6124de0..bb7a16d8052 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-04-03 Glenn Morris + + * filesets.el (filesets-set-default): Doc fix. + 2005-04-03 Lute Kamstra * desktop.el (desktop-no-desktop-file-hook) diff --git a/man/ChangeLog b/man/ChangeLog index 4a51f051431..de4400bd8ea 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,7 @@ +2005-04-03 Glenn Morris + + * calendar.texi (Diary): Mention shell utility `calendar'. + 2005-04-01 Jay Belanger * calc.texi (Troubleshooting Commands): Remove comment about From 742a24c3019dd29c1f02f94add3c88e8162417a9 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 3 Apr 2005 17:03:15 +0000 Subject: [PATCH 193/241] (Diary): Mention shell utility `calendar'. --- man/calendar.texi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/man/calendar.texi b/man/calendar.texi index 723fa7ce3c4..cf02377f1d9 100644 --- a/man/calendar.texi +++ b/man/calendar.texi @@ -942,7 +942,8 @@ date. The name of the diary file is specified by the variable @code{diary-file}; @file{~/diary} is the default. A sample diary file -is: +is (note that the file format is essentially the same as that used by +the external shell utility @samp{calendar}): @example 12/22/1988 Twentieth wedding anniversary!! From c85465f9a0436638d485d19f8227d14580270c08 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Sun, 3 Apr 2005 20:33:12 +0000 Subject: [PATCH 194/241] (define-generic-mode): Add argument to specify keywords for defcustom. (default-generic-mode): Specify :group. --- lisp/ChangeLog | 6 +++++- lisp/generic.el | 28 +++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bb7a16d8052..fe2032adb52 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,10 @@ 2005-04-03 Lute Kamstra + * generic.el (define-generic-mode): Add argument to specify + keywords for defcustom. + (default-generic-mode): Specify :group. + * desktop.el (desktop-no-desktop-file-hook) (desktop-after-read-hook): Fix docstring. @@ -2697,7 +2701,7 @@ * simple.el (eval-expression-print-format): Avoid warning about edebug-active. -2005-01-15 "James R. Van Zandt" (Tiny change) +2005-01-15 James R. Van Zandt (Tiny change) * progmodes/sh-script.el: Code copied from make-mode.el with small changes, diff --git a/lisp/generic.el b/lisp/generic.el index b18042442f8..e170d05e0f3 100644 --- a/lisp/generic.el +++ b/lisp/generic.el @@ -185,7 +185,8 @@ the regexp in `generic-find-file-regexp'. If the value is nil, ;;;###autoload (defmacro define-generic-mode (mode comment-list keyword-list font-lock-list auto-mode-list - function-list &optional docstring) + function-list &optional docstring + &rest custom-keyword-args) "Create a new generic mode MODE. MODE is the name of the command for the generic mode; it need not @@ -216,6 +217,11 @@ as soon as `define-generic-mode' is called. FUNCTION-LIST is a list of functions to call to do some additional setup. +The optional CUSTOM-KEYWORD-ARGS are pairs of keywords and +values. They will be passed to the generated `defcustom' form of +the mode hook variable MODE-hook. You can specify keyword +arguments without specifying a docstring. + See the file generic-x.el for some examples of `define-generic-mode'." (declare (debug (sexp def-form def-form def-form form def-form &optional stringp)) @@ -224,11 +230,25 @@ See the file generic-x.el for some examples of `define-generic-mode'." ;; Backward compatibility. (when (eq (car-safe mode) 'quote) (setq mode (eval mode))) + + (when (and docstring (not (stringp docstring))) + ;; DOCSTRING is not a string so we assume that it's actually the + ;; first keyword of CUSTOM-KEYWORD-ARGS. + (push docstring custom-keyword-args) + (setq docstring nil)) + (let* ((mode-name (symbol-name mode)) (pretty-name (capitalize (replace-regexp-in-string "-mode\\'" "" mode-name))) (mode-hook (intern (concat mode-name "-hook")))) + (unless (plist-get custom-keyword-args :group) + (setq custom-keyword-args + (plist-put custom-keyword-args + :group `(or (custom-current-group) + ',(intern (replace-regexp-in-string + "-mode\\'" "" mode-name)))))) + `(progn ;; Add a new entry. (add-to-list 'generic-mode-list ,mode-name) @@ -240,9 +260,7 @@ See the file generic-x.el for some examples of `define-generic-mode'." (defcustom ,mode-hook nil ,(concat "Hook run when entering " pretty-name " mode.") :type 'hook - :group (or (custom-current-group) - ',(intern (replace-regexp-in-string - "-mode\\'" "" mode-name)))) + ,@custom-keyword-args) (defun ,mode () ,(or docstring @@ -373,7 +391,7 @@ Some generic modes are defined in `generic-x.el'." imenu-case-fold-search t)) ;; This generic mode is always defined -(define-generic-mode default-generic-mode (list ?#) nil nil nil nil) +(define-generic-mode default-generic-mode (list ?#) nil nil nil nil :group 'generic) ;; A more general solution would allow us to enter generic-mode for ;; *any* comment character, but would require us to synthesize a new From 0c0a9c995ce3f99e0bfe7c25936fe825960cfadf Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Sun, 3 Apr 2005 20:52:46 +0000 Subject: [PATCH 195/241] Specify :group for all generic modes. --- lisp/ChangeLog | 2 + lisp/generic-x.el | 99 +++++++++++++++++++++++++++++++---------------- 2 files changed, 68 insertions(+), 33 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fe2032adb52..3a400ce3e8b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -8,6 +8,8 @@ keywords for defcustom. (default-generic-mode): Specify :group. + * generic-x.el: Specify :group for all generic modes. + * desktop.el (desktop-no-desktop-file-hook) (desktop-after-read-hook): Fix docstring. diff --git a/lisp/generic-x.el b/lisp/generic-x.el index d39edbb7ef6..019456aae6b 100644 --- a/lisp/generic-x.el +++ b/lisp/generic-x.el @@ -170,7 +170,8 @@ generic-x to enable the specified modes." '((nil "^\\([-A-Za-z0-9_]+\\)" 1) ("*Directories*" "^\\s-*]+\\)>" 1) ("*Locations*" "^\\s-*]+\\)>" 1)))))) - "Generic mode for Apache or HTTPD configuration files.")) + "Generic mode for Apache or HTTPD configuration files." + :group 'generic-x)) (when (memq 'apache-log-generic-mode generic-extras-enable-list) @@ -183,7 +184,8 @@ generic-x to enable the specified modes." (2 font-lock-variable-name-face))) '("access_log\\'") nil - "Mode for Apache log files")) + "Mode for Apache log files" + :group 'generic-x)) ;;; Samba (when (memq 'samba-generic-mode generic-extras-enable-list) @@ -197,7 +199,8 @@ generic-x to enable the specified modes." (2 font-lock-type-face))) '("smb\\.conf\\'") '(generic-bracket-support) - "Generic mode for Samba configuration files.")) + "Generic mode for Samba configuration files." + :group 'generic-x)) ;;; Fvwm ;; This is pretty basic. Also, modes for other window managers could @@ -222,7 +225,8 @@ generic-x to enable the specified modes." nil '("\\.fvwmrc\\'" "\\.fvwm2rc\\'") nil - "Generic mode for FVWM configuration files.")) + "Generic mode for FVWM configuration files." + :group 'generic-x)) ;;; X Resource ;; I'm pretty sure I've seen an actual mode to do this, but I don't @@ -235,7 +239,8 @@ generic-x to enable the specified modes." '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face)) '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'") nil - "Generic mode for X Resource configuration files.")) + "Generic mode for X Resource configuration files." + :group 'generic-x)) ;;; Hosts (when (memq 'hosts-generic-mode generic-extras-enable-list) @@ -246,7 +251,8 @@ generic-x to enable the specified modes." '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)) '("[hH][oO][sS][tT][sS]\\'") nil - "Generic mode for HOSTS files.")) + "Generic mode for HOSTS files." + :group 'generic-x)) ;;; Windows INF files (when (memq 'inf-generic-mode generic-extras-enable-list) @@ -257,7 +263,8 @@ generic-x to enable the specified modes." '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)) '("\\.[iI][nN][fF]\\'") '(generic-bracket-support) - "Generic mode for MS-Windows INF files.")) + "Generic mode for MS-Windows INF files." + :group 'generic-x)) ;;; Windows INI files ;; Should define escape character as well! @@ -277,7 +284,8 @@ generic-x to enable the specified modes." (setq imenu-generic-expression '((nil "^\\[\\(.*\\)\\]" 1) ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1)))))) - "Generic mode for MS-Windows INI files.")) + "Generic mode for MS-Windows INI files." + :group 'generic-x)) ;;; Windows REG files ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax! @@ -294,7 +302,8 @@ generic-x to enable the specified modes." (lambda () (setq imenu-generic-expression '((nil "^\\s-*\\(.*\\)\\s-*=" 1)))))) - "Generic mode for MS-Windows Registry files.")) + "Generic mode for MS-Windows Registry files." + :group 'generic-x)) ;;; DOS/Windows BAT files (when (memq 'bat-generic-mode generic-extras-enable-list) @@ -368,7 +377,8 @@ generic-x to enable the specified modes." "\\`[cC][oO][nN][fF][iI][gG]\\." "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\.") '(generic-bat-mode-setup-function) - "Generic mode for MS-Windows BAT files.") + "Generic mode for MS-Windows BAT files." + :group 'generic-x) (defvar bat-generic-mode-syntax-table nil "Syntax table in use in bat-generic-mode buffers.") @@ -446,7 +456,8 @@ generic-x to enable the specified modes." (lambda () (setq imenu-generic-expression '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))))) - "Mode for Mailagent rules files.")) + "Mode for Mailagent rules files." + :group 'generic-x)) ;; Solaris/Sys V prototype files (when (memq 'prototype-generic-mode generic-extras-enable-list) @@ -469,7 +480,8 @@ generic-x to enable the specified modes." (2 font-lock-variable-name-face))) '("prototype\\'") nil - "Mode for Sys V prototype files.")) + "Mode for Sys V prototype files." + :group 'generic-x)) ;; Solaris/Sys V pkginfo files (when (memq 'pkginfo-generic-mode generic-extras-enable-list) @@ -482,7 +494,8 @@ generic-x to enable the specified modes." (2 font-lock-variable-name-face))) '("pkginfo\\'") nil - "Mode for Sys V pkginfo files.")) + "Mode for Sys V pkginfo files." + :group 'generic-x)) ;; Javascript mode ;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU] @@ -559,7 +572,8 @@ generic-x to enable the specified modes." (setq imenu-generic-expression '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1) ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1)))))) - "Mode for JavaScript files.") + "Mode for JavaScript files." + :group 'generic-x) ;; VRML files (define-generic-mode vrml-generic-mode @@ -610,7 +624,8 @@ generic-x to enable the specified modes." ("*Definitions*" "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{" 1)))))) - "Generic Mode for VRML files.") + "Generic Mode for VRML files." + :group 'generic-x) ;; Java Manifests (define-generic-mode java-manifest-generic-mode @@ -629,7 +644,8 @@ generic-x to enable the specified modes." (2 font-lock-constant-face))) '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'") nil - "Mode for Java Manifest files") + "Mode for Java Manifest files" + :group 'generic-x) ;; Java properties files (define-generic-mode java-properties-generic-mode @@ -659,7 +675,8 @@ generic-x to enable the specified modes." (lambda () (setq imenu-generic-expression '((nil "^\\([^#! \t\n\r=:]+\\)" 1)))))) - "Mode for Java properties files.") + "Mode for Java properties files." + :group 'generic-x) ;; C shell alias definitions (when (memq 'alias-generic-mode generic-extras-enable-list) @@ -677,7 +694,8 @@ generic-x to enable the specified modes." (lambda () (setq imenu-generic-expression '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2)))))) - "Mode for C Shell alias files.")) + "Mode for C Shell alias files." + :group 'generic-x)) ;;; Windows RC files ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira) @@ -769,7 +787,8 @@ generic-x to enable the specified modes." (2 font-lock-variable-name-face nil t)))) '("\\.[rR][cC]$") nil - "Generic mode for MS-Windows Resource files.")) + "Generic mode for MS-Windows Resource files." + :group 'generic-x)) ;; InstallShield RUL files ;; Contributed by Alfred.Correira@Pervasive.Com @@ -1389,7 +1408,8 @@ generic-x to enable the specified modes." font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice? '("\\.[rR][uU][lL]$") '(generic-rul-mode-setup-function) - "Generic mode for InstallShield RUL files.") + "Generic mode for InstallShield RUL files." + :group 'generic-x) (define-skeleton rul-if "Insert an if statement." @@ -1437,7 +1457,8 @@ generic-x to enable the specified modes." (2 font-lock-variable-name-face))) '("\\.mailrc\\'") nil - "Mode for mailrc files.") + "Mode for mailrc files." + :group 'generic-x) ;; Inetd.conf (when (memq 'inetd-conf-generic-mode generic-extras-enable-list) @@ -1457,7 +1478,8 @@ generic-x to enable the specified modes." (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) + '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))) + :group 'generic-x)) ;; Services (when (memq 'etc-services-generic-mode generic-extras-enable-list) @@ -1475,7 +1497,8 @@ generic-x to enable the specified modes." (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) + '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))) + :group 'generic-x)) ;; Password and Group files (when (memq 'etc-passwd-generic-mode generic-extras-enable-list) @@ -1517,7 +1540,8 @@ generic-x to enable the specified modes." (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))))))) + '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))))) + :group 'generic-x)) ;; Fstab (when (memq 'etc-fstab-generic-mode generic-extras-enable-list) @@ -1567,7 +1591,8 @@ generic-x to enable the specified modes." (function (lambda () (setq imenu-generic-expression - '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) + '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))) + :group 'generic-x)) ;; From Jacques Duthen (eval-when-compile @@ -1609,7 +1634,8 @@ generic-x to enable the specified modes." nil ;; no auto-mode-alist ;; '(show-tabs-generic-mode-hook-fun) nil - "Generic mode to show tabs and trailing spaces") + "Generic mode to show tabs and trailing spaces" + :group 'generic-x) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; DNS modes @@ -1630,7 +1656,8 @@ generic-x to enable the specified modes." ;; List of additional automode-alist expressions '("/etc/named.boot\\'") ;; List of set up functions to call - nil) + nil + :group 'generic-x) (define-generic-mode named-database-generic-mode ;; List of comment characters @@ -1643,7 +1670,8 @@ generic-x to enable the specified modes." ;; List of additional automode-alist expressions nil ;; List of set up functions to call - nil) + nil + :group 'generic-x) (defvar named-database-time-string "%Y%m%d%H" "Timestring for named serial numbers.") @@ -1663,7 +1691,8 @@ generic-x to enable the specified modes." ;; List of additional automode-alist expressions '("/etc/resolv[e]?.conf\\'") ;; List of set up functions to call - nil) + nil + :group 'generic-x) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Modes for spice and common electrical engineering circuit netlist formats @@ -1705,7 +1734,8 @@ generic-x to enable the specified modes." (function (lambda() (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) - "Generic mode for SPICE circuit netlist files.") + "Generic mode for SPICE circuit netlist files." + :group 'generic-x) (define-generic-mode ibis-generic-mode '(?|) @@ -1714,7 +1744,8 @@ generic-x to enable the specified modes." ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face)) '("\\.[iI][bB][sS]\\'") '(generic-bracket-support) - "Generic mode for IBIS circuit netlist files.") + "Generic mode for IBIS circuit netlist files." + :group 'generic-x) (define-generic-mode astap-generic-mode nil @@ -1749,7 +1780,8 @@ generic-x to enable the specified modes." (function (lambda() (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) - "Generic mode for ASTAP circuit netlist files.") + "Generic mode for ASTAP circuit netlist files." + :group 'generic-x) (define-generic-mode etc-modules-conf-generic-mode ;; List of comment characters @@ -1791,7 +1823,8 @@ generic-x to enable the specified modes." ;; List of additional automode-alist expressions '("/etc/modules.conf" "/etc/conf.modules") ;; List of set up functions to call - nil) + nil + :group 'generic-x) (provide 'generic-x) From 59bb94103aa6a64da5edfe7aaba79fb9fcb1c1ee Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 3 Apr 2005 21:18:51 +0000 Subject: [PATCH 196/241] (cvs-checkout): Prompt for cvsroot as well. --- lisp/ChangeLog | 9 ++++++--- lisp/pcvs.el | 23 ++++++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3a400ce3e8b..6b390bdf0b3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-04-03 Stefan Monnier + + * pcvs.el (cvs-checkout): Prompt for cvsroot as well. + 2005-04-03 Glenn Morris * filesets.el (filesets-set-default): Doc fix. @@ -7,7 +11,7 @@ * generic.el (define-generic-mode): Add argument to specify keywords for defcustom. (default-generic-mode): Specify :group. - + * generic-x.el: Specify :group for all generic modes. * desktop.el (desktop-no-desktop-file-hook) @@ -7425,8 +7429,7 @@ 2004-09-21 Kenichi Handa - * descr-text.el (describe-char): Checking of quail activation - fixed. + * descr-text.el (describe-char): Checking of quail activation fixed. 2004-09-21 Jay Belanger diff --git a/lisp/pcvs.el b/lisp/pcvs.el index 7330960b93e..e7139d9cfba 100644 --- a/lisp/pcvs.el +++ b/lisp/pcvs.el @@ -918,23 +918,28 @@ This usually doesn't really work but is a handy initval in a prompt." ;;;; ;;;###autoload -(defun cvs-checkout (modules dir flags) +(defun cvs-checkout (modules dir flags &optional root) "Run a 'cvs checkout MODULES' in DIR. Feed the output to a *cvs* buffer, display it in the current window, and run `cvs-mode' on it. With a prefix argument, prompt for cvs FLAGS to use." (interactive - (list (cvs-string->strings (read-string "Module(s): " (cvs-get-module))) - (read-directory-name "CVS Checkout Directory: " - nil default-directory nil) - (cvs-add-branch-prefix - (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")))) + (let ((root (cvs-get-cvsroot))) + (if (or (null root) current-prefix-arg) + (setq root (read-string "CVS Root: "))) + (list (cvs-string->strings (read-string "Module(s): " (cvs-get-module))) + (read-directory-name "CVS Checkout Directory: " + nil default-directory nil) + (cvs-add-branch-prefix + (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")) + root))) (when (eq flags t) (setf flags (cvs-flags-query 'cvs-checkout-flags nil 'noquery))) - (cvs-cmd-do "checkout" (or dir default-directory) - (append flags modules) nil 'new - :noexist t)) + (let ((cvs-cvsroot root)) + (cvs-cmd-do "checkout" (or dir default-directory) + (append flags modules) nil 'new + :noexist t))) (defun-cvs-mode (cvs-mode-checkout . NOARGS) (dir) "Run cvs checkout against the current branch. From 4c5113c76b804c4fcd3935e0b2c4858cd503c194 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 3 Apr 2005 21:20:03 +0000 Subject: [PATCH 197/241] (tcl-set-font-lock-keywords): Use new \_< ops. --- lisp/ChangeLog | 2 ++ lisp/progmodes/tcl.el | 10 ++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6b390bdf0b3..9af0def37ec 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2005-04-03 Stefan Monnier + * progmodes/tcl.el (tcl-set-font-lock-keywords): Use new \_< ops. + * pcvs.el (cvs-checkout): Prompt for cvsroot as well. 2005-04-03 Glenn Morris diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el index 4dba6b61a56..24ae19b0ad4 100644 --- a/lisp/progmodes/tcl.el +++ b/lisp/progmodes/tcl.el @@ -1,6 +1,7 @@ ;;; tcl.el --- Tcl code editing commands for Emacs -;; Copyright (C) 1994,98,1999,2000,01,02,2003,2004 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Maintainer: FSF ;; Author: Tom Tromey @@ -469,10 +470,7 @@ Uses variables `tcl-proc-regexp' and `tcl-keyword-list'." ;; Keywords. Only recognized if surrounded by whitespace. ;; FIXME consider using "not word or symbol", not ;; "whitespace". - (cons (concat "\\(\\s-\\|^\\)" - ;; FIXME Use regexp-quote? - (regexp-opt tcl-keyword-list t) - "\\(\\s-\\|$\\)") + (cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>") 2)))) (if tcl-proc-regexp @@ -1507,5 +1505,5 @@ The first line is assumed to look like \"#!.../program ...\"." (provide 'tcl) -;;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d +;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d ;;; tcl.el ends here From 63d516ce90e226c6ab730e1441e8d175e121d37f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 3 Apr 2005 21:26:11 +0000 Subject: [PATCH 198/241] (bibtex-url): Use format to generate the url. (bibtex-generate-url-list): Update docstring accordingly. Put the complex example in the docstring. (bibtex-font-lock-url): Use pop. --- lisp/ChangeLog | 7 +++ lisp/textmodes/bibtex.el | 119 +++++++++++++++++++++------------------ 2 files changed, 72 insertions(+), 54 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9af0def37ec..3ad59c9ed07 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2005-04-03 Roland Winkler + + * textmodes/bibtex.el (bibtex-url): Use format to generate the url. + (bibtex-generate-url-list): Update docstring accordingly. Put the + complex example in the docstring. + (bibtex-font-lock-url): Use pop. + 2005-04-03 Stefan Monnier * progmodes/tcl.el (tcl-set-font-lock-keywords): Use new \_< ops. diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el index fc677b3de44..3e5b77d8baa 100644 --- a/lisp/textmodes/bibtex.el +++ b/lisp/textmodes/bibtex.el @@ -1,6 +1,6 @@ ;;; bibtex.el --- BibTeX mode for GNU Emacs -;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004 +;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Stefan Schoef @@ -784,41 +784,56 @@ Used by `bibtex-complete-crossref-cleanup' and `bibtex-copy-summary-as-kill'." (function :tag "Personalized function"))) (defcustom bibtex-generate-url-list - '((("url" . ".*:.*")) - ;; Example of a complex setup. - (("journal" . "\\<\\(PR[ABCDEL]?\\|RMP\\)\\>") - "http://link.aps.org/abstract/" - ("journal" ".*" downcase) - "/v" - ("volume" ".*" 0) - "/p" - ("pages" "\\`\\([0-9]+\\)" 1))) + '((("url" . ".*:.*"))) "List of schemes for generating the URL of a BibTeX entry. These schemes are used by `bibtex-url'. -Each scheme is of the form ((FIELD . REGEXP) STEP...). +Each scheme should have one of these forms: + + ((FIELD . REGEXP)) + ((FIELD . REGEXP) STEP...) + ((FIELD . REGEXP) STRING STEP...) FIELD is a field name as returned by `bibtex-parse-entry'. -REGEXP is matched against the text of FIELD. If the match succeeds, then -this scheme is used. If no STEPs are specified the matched text is used -as the URL, otherwise the URL is built by concatenating the STEPs. +REGEXP is matched against the text of FIELD. If the match succeeds, +then this scheme is used. If no STRING and STEPs are specified +the matched text is used as the URL, otherwise the URL is built +by evaluating STEPs. If no STRING is specified the STEPs must result +in strings which are concatenated. Otherwise the resulting objects +are passed through `format' using STRING as format control string. -A STEP can be a string or a list (FIELD REGEXP REPLACE) in which case -the text of FIELD is matched against REGEXP, and is replaced with REPLACE. -REPLACE can be a string, or a number (which selects the corresponding submatch) -or a function called with the field's text as argument and with the -`match-data' properly set. +A STEP is a list (FIELD REGEXP REPLACE). The text of FIELD +is matched against REGEXP, and is replaced with REPLACE. +REPLACE can be a string, or a number (which selects the corresponding +submatch), or a function called with the field's text as argument +and with the `match-data' properly set. -Case is always ignored. Always remove the field delimiters." +Case is always ignored. Always remove the field delimiters. + +The following is a complex example, see http://link.aps.org/linkfaq.html. + + (((\"journal\" . \"\\\\=<\\(PR[ABCDEL]?\\|RMP\\)\\\\=>\") + \"http://link.aps.org/abstract/%s/v%s/p%s\" + (\"journal\" \".*\" downcase) + (\"volume\" \".*\" 0) + (\"pages\" \"\\`[A-Z]?[0-9]+\" 0)))" :group 'bibtex :type '(repeat - (list :tag "Scheme" + (cons :tag "Scheme" (cons :tag "Matcher" :extra-offset 4 (string :tag "BibTeX field") (regexp :tag "Regexp")) - (repeat :tag "Steps to generate URL" :inline t - (choice - (string :tag "Literal text") + (choice + (const :tag "Take match as is" nil) + (cons :tag "Formatted" + (string :tag "Format control string") + (repeat :tag "Steps to generate URL" + (list (string :tag "BibTeX field") + (regexp :tag "Regexp") + (choice (string :tag "Replacement") + (integer :tag "Sub-match") + (function :tag "Filter"))))) + (repeat :tag "Concatenated" (list (string :tag "BibTeX field") (regexp :tag "Regexp") (choice (string :tag "Replacement") @@ -2662,11 +2677,10 @@ begins at the beginning of a line. We use this function for font-locking." (let ((lst bibtex-generate-url-list) url) (goto-char start) (while (and (not found) - (setq url (caar lst))) + (setq url (car (pop lst)))) (setq found (and (bibtex-string= field (car url)) (re-search-forward (cdr url) end t) - (>= (match-beginning 0) pnt)) - lst (cdr lst)))) + (>= (match-beginning 0) pnt))))) (goto-char end)) (if found (bibtex-button (match-beginning 0) (match-end 0) 'bibtex-url (match-beginning 0))) @@ -4283,39 +4297,36 @@ The URL is generated using the schemes defined in `bibtex-generate-url-list' ;; Always ignore case, (case-fold-search t) (lst bibtex-generate-url-list) - field url scheme) + field url scheme obj fmt) (while (setq scheme (pop lst)) (when (and (setq field (cdr (assoc-string (caar scheme) fields-alist t))) ;; Always remove field delimiters (progn (setq field (bibtex-remove-delimiters-string field)) (string-match (cdar scheme) field))) - (setq lst nil) - (if (null (cdr scheme)) - (setq url (match-string 0 field))) - (dolist (step (cdr scheme)) - (cond ((stringp step) - (setq url (concat url step))) - ((setq field (cdr (assoc-string (car step) fields-alist t))) - ;; Always remove field delimiters - (setq field (bibtex-remove-delimiters-string field)) - (if (string-match (nth 1 step) field) - (setq field (cond - ((functionp (nth 2 step)) - (funcall (nth 2 step) field)) - ((numberp (nth 2 step)) - (match-string (nth 2 step) field)) - (t - (replace-match (nth 2 step) t nil field)))) - ;; If the scheme is set up correctly, - ;; we should never reach this point - (error "Match failed: %s" field)) - (setq url (concat url field))) - ;; If the scheme is set up correctly, - ;; we should never reach this point - (t (error "Step failed: %s" step)))) - (message "%s" url) - (browse-url url))) + (setq lst nil + scheme (cdr scheme) + url (if (null scheme) (match-string 0 field) + (if (stringp (car scheme)) + (setq fmt (pop scheme))) + (dolist (step scheme) + ;; Always remove field delimiters + (setq field (bibtex-remove-delimiters-string + (cdr (assoc-string (car step) fields-alist t)))) + (if (string-match (nth 1 step) field) + (setq field (cond ((functionp (nth 2 step)) + (funcall (nth 2 step) field)) + ((numberp (nth 2 step)) + (match-string (nth 2 step) field)) + (t + (replace-match (nth 2 step) t nil field)))) + ;; If the scheme is set up correctly, + ;; we should never reach this point + (error "Match failed: %s" field)) + (push field obj)) + (if fmt (apply 'format fmt (nreverse obj)) + (apply 'concat (nreverse obj))))) + (browse-url (message "%s" url)))) (unless url (message "No URL known."))))) From 18242ac67926eb18a9e700a2e052bdba5dc278e8 Mon Sep 17 00:00:00 2001 From: Marcelo Toledo Date: Sun, 3 Apr 2005 21:40:07 +0000 Subject: [PATCH 199/241] Applied patch by Mats Lidell --- etc/TUTORIAL.sv | 210 ++++++++++++++++++++++++++++++------------------ 1 file changed, 134 insertions(+), 76 deletions(-) diff --git a/etc/TUTORIAL.sv b/etc/TUTORIAL.sv index bbda74380b2..e4a86cabada 100644 --- a/etc/TUTORIAL.sv +++ b/etc/TUTORIAL.sv @@ -1,5 +1,6 @@ -användarhandledningen till Emacs. I slutet finns kopieringsvillkoren. -Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation, Inc. +Emacs användarhandledning. I slutet finns kopieringsvillkoren. +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software +Foundation, Inc. Emacs-kommandon innebär ofta användning av kontrolltangenten (vanligen märkt CTRL eller CTL) eller META-tangenten (på vissa tangentbord märkt @@ -48,6 +49,10 @@ F Hitta markören igen och notera att det är samma text som står kring markören nu. +Du kan också använda PageUp och PageDn tangenterna, om din terminal +har dem, för att flytta en hel skärmbild åt gången, men du redigerar +effektivare om du använder C-v och M-v. + * GRUNDLÄGGANDE MARKÖRRÖRELSER ------------------------------ @@ -55,12 +60,10 @@ F Att flytta sig från skärmbild till skärmbild kan vara bra, men hur förflyttar man sig till en speciell plats på skärmen? -Det finns flera sätt att göra detta på. Det vanligaste är att använda -kommandona C-p, C-b, C-f och C-n. Vart och ett av dessa kommandon -flyttar markören en rad eller en kolumn i en bestämd riktning på -skärmen. Här visas dessa fyra kommandon och i vilken riktning de -flyttar markören: - +Det finns flera sätt att göra detta. Du kan använda piltangenterna, +men det är mer effektivt att ha händerna i standardläget och använda +kommandona C-p, C-b, C-f och C-n. Dessa tecken är likvärdiga med de +fyra piltangenterna. Så här: Föregående rad, C-p : @@ -74,11 +77,10 @@ flyttar mark och C-p. Använd sedan C-l för att centrera diagrammet på skärmbilden. -Detta är säkert lite enklare att förstå om du tänker på dessa -förkortningar: P för föregående (previous), N för nästa (next), B för -bakåt (backward) och F för framåt (forward). Detta är de grundläggande -kommandona för att flytta markören och du kommer säkert att använda -dem hela tiden, så det är en stor fördel om du lär dig dem nu. +Detta är enklare att komma ihåg om du tänker på dessa förkortningar: P +för föregående (previous), N för nästa (next), B för bakåt (backward) +och F för framåt (forward). Dessa är de grundläggande kommandona för +att flytta markören och du kommer att använda dem hela tiden. >> Gör några C-n så att du kommer ned till den här raden. @@ -308,17 +310,23 @@ texten. Tecken som du kan se, s sätts in direkt. Skriv (retur-tangenten) för att sätta in en radbrytning. -Du kan radera det sista tecknet du skrev genom att trycka . - är en tangent på tangentbordet, som kan vara märkt "Del". I -några fall fungerar också "backsteg" som men inte alltid! +Du kan radera det sista tecknet du skrev genom att trycka . + är en tangent på tangentbordet -- samma som du normalt +använder utanför Emacs för att ta bort det senaste tecknet du skrivit. +Det är vanligen en stor tangent några rader ovanför retur-tangenten, +och den är vanligtvis märkt "Delete, "Del" eller "Backspace". -Generellt raderar tecknet precis före den aktuella +Om den stora tangenten är märkt med "Backspace" så är det den du +använder för . Det kan finnas en annan tangent som är märkt +med "Delete" men det är inte . + +Generellt raderar tecknet precis före den aktuella markörspositionen. >> Gör detta nu: Skriv in några tecken och ta bort dem genom att - använda . Var inte rädd för att skriva i den här filen, du - kommer inte att kunna förändra originalet till vägledningen. Detta - är bara en lokal kopia. + använda . Var inte rädd för att skriva i den här filen, + du kommer inte att kunna förändra originalet till vägledningen. + Detta är bara en lokal kopia. När en rad blir för lång för att rymmas på en skärmbredd så fortsätter den på raden under. Ett bakstreck ("\") (eller om du kör under ett @@ -329,7 +337,7 @@ indikerar att raden forts fortsätt att skriva lite till. Du kommer då att se hur fortsättningstecknet ser ut. ->> Använd för att radera texten tills raden ryms på en +>> Använd för att radera texten tills raden ryms på en skärmbredd igen. Fortsättningstecknet kommer då att försvinna. Du kan radera radbrytning precis som andra tecken. Genom att radera @@ -337,7 +345,7 @@ radbrytningen mellan tv resultatet av denna sammanslagning blir för stor för att passa inom en skärmbredd, så kommer den att visas med ett fortsättningstecken. ->> Flytta markören till början av en rad och tryck . +>> Flytta markören till början av en rad och tryck . Detta kommer att klistra ihop raden med raden över. >> Tryck för att sätta in radbrytningen du tog bort. @@ -352,21 +360,21 @@ Du har nu l Emacs och att rätta fel. Du kan radera ord och rader också. Här är en översikt över kommandon för radering: - raderar tecknet som står precis före markören - C-d raderar tecknet som står precis under markören + Raderar tecknet som står precis före markören + C-d Raderar tecknet som står precis under markören - M- raderar ordet precis före markören - M-d raderar ordet precis efter markören + M- Raderar ordet precis före markören + M-d Raderar ordet precis efter markören - C-k raderar från markören till slutet av raden - M-k raderar till slutet av stycket + C-k Raderar från markören till slutet av raden + M-k Raderar till slutet av stycket -Lägg märke till att och C-d kontra M- och M-d följer -mönstret som började med C-f och M-f. ( är inte precis +Lägg märke till att och C-d kontra M- och M-d +följer mönstret som började med C-f och M-f. ( är inte precis ett kontrolltecken men låt oss inte bry oss om det.) C-k och M-k fungerar på samma sätt som C-e och M-e (nästan). -Du kan också ta bort vilken del som helst av bufferten med hjälp av +Du kan också ta bort vilken del som helst av texten med hjälp av följande allmänna metod. Flytta till ena änden av det område du vill ta bort och tryck C-@ eller C-mellanslag. Flytta till andra änden av området och tryck C-w. Detta tar bort all text mellan de två @@ -400,13 +408,13 @@ raderar s en repetition av kommandot. C-u 2 C-k raderar två rader samt de tomma raderna, medan C-k två gånger inte kommer att göra det. -Att sätta in borttagen text kallas att "återhämta" den (yanking). +Att sätta in borttagen text kallas att "återhämta" den (yanking). (Tänk på det som att du rycker, eller drar, tillbaka någon text som tagits bort.) Du kan antingen hämta tillbaka borttagen text till samma plats som där den blev borttagen, eller så kan du sätta in den på en -annan plats i bufferten eller till och med i en helt annan fil. Du kan -också hämta tillbaka den flera gånger så att du får flera lika -förekomster av den. +annan plats i texten du redigerar eller till och med i en helt annan +fil. Du kan också hämta tillbaka samma text flera gånger så att du får +flera lika förekomster av den. Kommandot för att hämta tillbaka text är C-y. Kommandot hämtar tillbaka den sist borttagna texten och placerar den där markören är. @@ -495,8 +503,8 @@ nytt namn, som backup, ifall du senare Om du tittar nästan längst ner på skärmbilden så kommer du se en rad som börjar och slutar med minustecken, och som innehåller texten -"--:-- TUTORIAL.se". Denna del av skärmbilden visar alltid namnet på -filen du besöker. Just nu är du inne i en fil som heter "TUTORIAL.se" +"--:-- TUTORIAL.sv". Denna del av skärmbilden visar alltid namnet på +filen du besöker. Just nu är du inne i en fil som heter "TUTORIAL.sv" och som är en personlig kopia av vägledningen till Emacs. Vilken fil du än är inne i så kommer filnamnet stå där. @@ -539,7 +547,7 @@ blev sparad. Du b systemet kraschar. >> Skriv C-x C-s för att spara en kopia av denna vägledning. - Detta skall leda till att "Wrote ...TUTORIAL.se" skrivs ut nederst + Detta skall leda till att "Wrote ...TUTORIAL.sv" skrivs ut nederst på skärmbilden. Observera: På vissa system leder C-x C-s till att skärmen låser @@ -568,7 +576,7 @@ den p >> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo . Skriv in lite text, redigera den och spara "foo" genom att använda - C-x C-s. Skriv till slut C-x C-f TUTORIAL.se för att komma + C-x C-s. Skriv till slut C-x C-f TUTORIAL.sv för att komma tillbaka till den här vägledningen. Emacs sparar texten för varje fil i ett objekt kallat "buffert". När @@ -580,13 +588,37 @@ du finner en ny fil skapas en ny buffert i Emacs. F >> Prova C-x C-b nu. Se hur varje buffert har ett namn och att de också kan ha namnet på -den fil som innehållet kommer från. En del buffertar är inte knutna -till någon fil, till exempel bufferten "*Buffer List*". Det är den -buffert som innehåller buffertlistan som skapades med C-x C-b. Vilken -text du än ser i ett Emacs-fönster så tillhör den alltid en buffert. +den fil som innehållet kommer från. Vilken text du än ser i ett +Emacs-fönster så tillhör den alltid en buffert. >> Skriv C-x 1 för att bli kvitt buffertlistan. +När du har flera buffertar så är bara en av dem "gällande" åt gången. +Det är den buffert du redigerar. Om du vill redigera en annan buffert +så måste du byta till den. Om du vill byta till en buffert som +motsvarar en fil kan du göra det genom att besöka den igen med C-x +C-f. Det finns dock ett enklare sätt: använd C-x b kommandot. I det +kommandot anger du buffertens namn. + +>> Skriv C-x b foo för att gå tillbaka till bufferten "foo" + som innehåller texten i filen "foo". Skriv sedan C-x b TUTORIAL.sv + för att komma tillbaka till den här handledningen. + +Mestadels är buffertens namn densamma som filens namn (utan +katalogdel.) Det är dock inte alltid så. Bufferlistan du skapar med +C-x C-b visar alltid namnen på varje buffert. + +All text du ser i ett Emacsfönster är alltid del av någon buffert. En +del buffertar är inte knutna till någon fil, till exempel bufferten +"*Buffer List*". Det är den buffert som innehåller buffertlistan som +skapades med C-x C-b. Bufferten "*Messages*" motsvarar inte heller +någon fil. Den innehåller de meddelanden som visas på den nedersta +raden i Emacs sessionen. + +>> Skriv C-x b *Messages* för att se meddelandebufferten. + Skriv sedan C-x b TUTORIAL.sv för att återgå till den här + handledningen. + Om du ändrar texten till en fil och sedan öppnar en ny fil, så kommer inte den första filen sparas. Förändringen ligger kvar i bufferten. Skapande och redigering av den nya filen påverkar inte den @@ -602,7 +634,7 @@ vill spara eller ej. >> Sätt in en rad med text och spara med C-x s Du skall nu få frågan om du önskar spara bufferten - TUTORIAL.se. Svara ja på frågan genom att trycka "y" (yes). + TUTORIAL.sv. Svara ja på frågan genom att trycka "y" (yes). * UTVIDGNING AV KOMMANDOMÄNGDEN @@ -617,9 +649,9 @@ META-tangenter. F kommandonamn. Detta är kommandon som är bra att ha men används mer sällan än de -kommandon du redan har lärt dig. Du har redan sett två av dem, C-x C-f -för finn, och C-x C-s för spara. Ett annat exempel är kommandot för -att avsluta Emacs som är C-x C-c. Var inte rädd för att förlora +kommandon du redan har lärt dig. Du har redan sett några av dem, C-x +C-f för finn, och C-x C-s för spara. Ett annat exempel är kommandot +för att avsluta Emacs som är C-x C-c. Var inte rädd för att förlora förändringar du har gjort. C-x C-c erbjuder dig att spara förändringar innan Emacs avslutas. @@ -645,12 +677,14 @@ ist Det finns många C-x kommandon. Här är en lista över de du har lärt dig hittills: - C-x C-f Finn fil. - C-x C-s Spara fil. - C-x C-b Lista buffertar. - C-x C-c Avsluta Emacs. - C-x 1 Ta bort alla utom ett fönster. - C-x u Ångra. + C-x C-f Finn fil + C-x C-s Spara fil + C-x s Spara några buffertar + C-x C-b Lista buffertar + C-x b Byt buffert + C-x C-c Avsluta Emacs + C-x 1 Ta bort alla utom ett fönster + C-x u Ångra Namngivna utvidgade kommandon är kommandon som används mycket sällan eller bara i vissa lägen. Ett exempel på ett sådant kommando är @@ -707,16 +741,16 @@ sk Raden precis över ekoområdet kallas "lägesrad" (mode line). Den ser ungefär ut så här: ---:** TUTORIAL (Fundamental)--L670--58%---------------- +--:** TUTORIAL 63% L749 (Fundamental)----------------------- Raden innehåller information om Emacs och texten du redigerar. -Du vet redan vad filnamnet betyder, det är den fil du har funnit. --NN%-- visar den aktuella positionen i texten, dvs. NN procent av -texten befinner sig över toppen av skärmbilden. Om toppen av filen är -i skärmbilden kommer det stå --Top-- istället för --00%-- och om -slutet av filen är i skärmbilden kommer det stå --Bot--. Om du ser på -en fil där hela texten passar in på en sida kommer det stå --All--. +Du vet redan vad filnamnet betyder, det är den fil du har funnit. NN% +visar den aktuella positionen i texten, dvs. NN procent av texten +befinner sig över toppen av skärmbilden. Om toppen av filen är i +skärmbilden kommer det stå "Top" istället för " 0%" och om slutet av +filen är i skärmbilden kommer det stå "Bot". Om du ser på en fil där +hela texten passar in på en sida kommer det stå "All". Bokstaven L följd av siffror anger positionen på ett annat sätt. Siffrorna visar vilken rad som markören befinner sig på. @@ -830,7 +864,7 @@ efter. avslutar s har du sökt efter ordet "markör" en gång. >> Skriv C-s en gång till för att söka efter nästa förekomst av ordet "markör". ->> Tryck nu på fyra gånger och se hur markören flyttar sig +>> Tryck nu på fyra gånger och se hur markören flyttar sig >> Tryck för att avsluta sökandet. Såg du vad som hände? Under inkrementell sökning försöker Emacs att gå @@ -846,12 +880,12 @@ den vidare till Emacs. F fall avsnittet "Spontaneous Entry to Incremental Search" i Emacs-manualen för råd om hur detta kan undvikas. -Om du är inne i en inkrementell sökning och trycker kommer du -lägga märke till att den sista bokstaven i söksträngen blir raderad +Om du är inne i en inkrementell sökning och trycker kommer +du lägga märke till att den sista bokstaven i söksträngen blir raderad och sökandet hoppar tillbaka till en tidigare förekomst. Om du till exempel skriver "m" för att söka efter den första förekomsten av "m", och sedan trycker "a" så kommer markören flytta sig till första -förekomsten av "ma". Tryck nu . Detta avlägsnar "a" från +förekomsten av "ma". Tryck nu . Detta avlägsnar "a" från söksträngen, och markören flyttar sig tillbaka till den första förekomsten av "m". @@ -879,7 +913,7 @@ sk det övre fönstret. >> Skriv C-M-v för att rulla det nedre fönstret. - (Om du inte har META-tangenten trycker du ESC C-v.) + (Om du inte har META-tangenten trycker du C-v.) >> Skriv C-x o (o för other) för att flytta markören till det nedre fönstret. @@ -909,10 +943,10 @@ som du trycker v. Det har ingen betydelse vilken av tangenterna KONTROLL och META som trycks först, för bägge fungerar så att de "modifierar" de andra tangenterna du trycker. -Om du inte har META-tangenten och använder ESC istället är -ordningsföljden viktig. Du måste trycka ESC följt av KONTROLL-v, -KONTROLL-ESC v fungerar inte. Det är för att ESC är ett tecken i sig -och inte en äkta "modifierare". +Om du inte har META-tangenten och använder istället är +ordningsföljden viktig. Du måste trycka följt av KONTROLL-v, +KONTROLL- v fungerar inte. Det är för att är ett tecken i +sig och inte en äkta "modifierare". >> Skriv C-x 1 i det övre fönstret för att bli kvitt det nedre fönstret. @@ -945,12 +979,12 @@ Ibland kan du hamna i n huvudläget i lägesraden. Till exempel kan det stå [(Fundamental)] istället för (Fundamental). -För att komma ur rekursiv redigering trycker du ESC ESC ESC. Detta är -ett generellt brytkommando. Du kan också använda det för att bli kvitt -extra fönster och för att komma ut ur minibufferten. +För att komma ur rekursiv redigering trycker du . +Detta är ett generellt brytkommando. Du kan också använda det för att +bli kvitt extra fönster och för att komma ut ur minibufferten. ->> Skriv M-x för att komma in i minibufferten. Skriv så ESC ESC ESC - för att komma ut. +>> Skriv M-x för att komma in i minibufferten. Skriv så + för att komma ut. Du kan inte använda C-g för att komma ut ur rekursiv redigering. Detta är för att C-g används för att avbryta kommandon och argument @@ -984,7 +1018,8 @@ Den mest grundl och en knappsekvens. Emacs ger då en beskrivning av kommandot. >> Skriv C-h c C-p. - Meddelandet skall då bli något i stil med + +Meddelandet skall då bli något i stil med: C-p runs the command previous-line @@ -1060,6 +1095,29 @@ oklart duger det inte att sitta och tycka synd om sig sj ett mail och klaga! +* MER FUNKTIONER +---------------- + +Du kan lära dig mer om Emacs genom att läsa dess manual, antingen i +bokform eller on-line i Info (använd Hjälp-menyn eller skriv F10 h r). +Två finesser som du kan komma att gilla speciellt är komplettering +(completion), som spar tangenttryckningar, och dired, som förenklar +filhantering. + +Komplettering är ett sätt att undvika onödiga tangenttryckningar. Till +exempel, om du vill byta till *Messages* bufferten, kan du du skriva +C-x b *M och Emacs kommer fylla i resten av buffertnamnet så +långt den kan räkna ut det från det du redan skrivit. Komplettering +finns beskrivet i Emacs-manualen i noden "Completion". + +Dired gör det möjligt att lista filer i en katalog (och även dess +subkataloger), flytta runt i listan, besöka, byta namn, ta bort och +operera på olika sätt på filerna. Dired finns beskrivet i Info i +Emacs-manualen i noden "Dired". + +Manualen beskriver även många andra Emacs funktioner. + + * KOPIERING ----------- @@ -1070,7 +1128,7 @@ Lidell This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: -Copyright (c) 1985, 1996 Free Software Foundation +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the From 2ba613a6aae7549399043fb350ef61710f792e57 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Sun, 3 Apr 2005 22:08:17 +0000 Subject: [PATCH 200/241] *** empty log message *** --- src/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index ef635f206bd..c996cdb5f8b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2005-04-04 Kim F. Storm + + * eval.c (Ffuncall): Always call CHECK_CONS_LIST on entry. + Call it again after autoload. + 2005-04-02 Jan Dj,Ad(Brv * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling From fff3ff9c18075000c0cf478fe76011769cdf027a Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Sun, 3 Apr 2005 22:08:58 +0000 Subject: [PATCH 201/241] (Ffuncall): Always call CHECK_CONS_LIST on entry. Call it again after autoload. --- src/eval.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/eval.c b/src/eval.c index bf4fec4f8a1..8700ca222ce 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2742,6 +2742,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */) if (debug_on_next_call) do_debug_on_call (Qlambda); + CHECK_CONS_LIST (); + retry: fun = args[0]; @@ -2750,9 +2752,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */) if (SUBRP (fun)) { - CHECK_CONS_LIST (); - - if (numargs < XSUBR (fun)->min_args + if (numargs < XSUBR (fun)->min_args || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs)) { XSETFASTINT (lisp_numargs, numargs); @@ -2844,6 +2844,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */) else if (EQ (funcar, Qautoload)) { do_autoload (fun, args[0]); + CHECK_CONS_LIST (); goto retry; } else From 4d5ddddce81222d58dcaa8840fe68c2fe4ecc7dc Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Sun, 3 Apr 2005 22:26:43 +0000 Subject: [PATCH 202/241] *** empty log message *** --- src/ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index c996cdb5f8b..34bf8b41b45 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,7 @@ 2005-04-04 Kim F. Storm + * alloc.c (Fgarbage_collect): Call CHECK_CONS_LIST before and after gc. + * eval.c (Ffuncall): Always call CHECK_CONS_LIST on entry. Call it again after autoload. From bbc012e0c3a0e91beecb09643956fa09979420ab Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Sun, 3 Apr 2005 22:27:05 +0000 Subject: [PATCH 203/241] (Fgarbage_collect): Call CHECK_CONS_LIST before and after gc. --- src/alloc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/alloc.c b/src/alloc.c index a907247d21c..f3af3940e15 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -4687,6 +4687,8 @@ returns nil, because real GC can't be done. */) if (pure_bytes_used_before_overflow) return Qnil; + CHECK_CONS_LIST (); + /* Don't keep undo information around forever. Do this early on, so it is no problem if the user quits. */ { @@ -4880,6 +4882,8 @@ returns nil, because real GC can't be done. */) UNBLOCK_INPUT; + CHECK_CONS_LIST (); + /* clear_marks (); */ gc_in_progress = 0; From e9fd21e8509ea235e8f914259760d876a06a2582 Mon Sep 17 00:00:00 2001 From: Marcelo Toledo Date: Sun, 3 Apr 2005 23:03:21 +0000 Subject: [PATCH 204/241] Fixed syntax highlighting in lisp/add-log.el. --- etc/ChangeLog | 9 ++++----- lisp/ChangeLog | 8 ++++++++ lisp/add-log.el | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 8d7a9610321..9302885ac3b 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -9,10 +9,10 @@ 2005-04-01 Marcelo Toledo * TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, - TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko, - TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru, - TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title - line. + * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko, + * TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru, + * TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title + line. * TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in 2005-02-08T14:20:54Z!lute@gnu.org, "Emacs" is not transliterated to cyrillic anymore; @@ -21,7 +21,6 @@ * TUTORIAL.sv: Sync some other changes with the TUTORIAL version 2005-04-01T00:31:25Z!rms@gnu.org by Mats Lidell . - 2005-04-01 Lute Kamstra * TUTORIAL.nl: Fix title line. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3ad59c9ed07..4996e0a33df 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2005-04-03 Marcelo Toledo + + * add-log.el (change-log-font-lock-keywords): The manual + describing a Change Log entry, says: (...) "Aside from these + header lines, every line in the change log starts with a space or + a tab.". The font-lock was not highlighting lines started with + spaces, added support for it. + 2005-04-03 Roland Winkler * textmodes/bibtex.el (bibtex-url): Use format to generate the url. diff --git a/lisp/add-log.el b/lisp/add-log.el index 7706a697755..8d4c741566f 100644 --- a/lisp/add-log.el +++ b/lisp/add-log.el @@ -225,7 +225,7 @@ Note: The search is conducted only within 10%, at the beginning of the file." (2 'change-log-email-face))) ;; ;; File names. - ("^\t\\* \\([^ ,:([\n]+\\)" + ("^\\(?: +\\|\t\\)\\* \\([^ ,:([\n]+\\)" (1 'change-log-file-face) ;; Possibly further names in a list: ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file-face)) From 745986d5f7820416fcf7317e6a42e1b690a0a696 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 4 Apr 2005 01:11:55 +0000 Subject: [PATCH 205/241] *** empty log message *** --- lisp/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4996e0a33df..4d48a1af302 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-03 Luc Teirlinck + + * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group (mouse). + Doc fix. + 2005-04-03 Marcelo Toledo * add-log.el (change-log-font-lock-keywords): The manual From e742657f9ffa21f86bfb930d82cc996ec2caa85e Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 4 Apr 2005 01:13:59 +0000 Subject: [PATCH 206/241] (xterm-mouse-mode): Add explicit Custom group (mouse). Doc fix. --- lisp/xt-mouse.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index 131f95db7d0..4f7e19623fe 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -155,8 +155,11 @@ "Toggle XTerm mouse mode. With prefix arg, turn XTerm mouse mode on iff arg is positive. -Turn it on to use emacs mouse commands, and off to use xterm mouse commands." - nil " Mouse" nil :global t +Turn it on to use Emacs mouse commands, and off to use xterm mouse commands. +This works in terminal emulators compatible with xterm. Only single clicks +are supported. When turned on, the normal xterm mouse functionality is still +available by holding down the SHIFT key while pressing the mouse button." + nil " Mouse" nil :global t :group 'mouse (if xterm-mouse-mode ;; Turn it on (unless window-system From 81fb9e8622096f5f4c14fa489fabdf1fd65ada29 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Mon, 4 Apr 2005 01:31:20 +0000 Subject: [PATCH 207/241] *** empty log message *** --- lisp/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4d48a1af302..fda8a87c3ef 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,6 @@ 2005-04-03 Luc Teirlinck - * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group (mouse). + * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group, mouse. Doc fix. 2005-04-03 Marcelo Toledo From 72ab3a72362d1589292a03b32ab98d59a6b9d8bc Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 4 Apr 2005 02:12:15 +0000 Subject: [PATCH 208/241] (ps-mule-show-warning): If the number of unprintable chars are more than a limit, print " and more..." at the tail. --- lisp/ps-mule.el | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el index e0e9268c3de..ba858959cc3 100644 --- a/lisp/ps-mule.el +++ b/lisp/ps-mule.el @@ -1402,6 +1402,7 @@ FONTTAG should be a string \"/h0\" or \"/h1\"." (defun ps-mule-show-warning (charsets from to header-footer-list) (let ((table (make-category-table)) (buf (current-buffer)) + (max-unprintable-chars 15) char-pos-list) (define-category ?u "Unprintable charset" table) (dolist (cs charsets) @@ -1409,19 +1410,22 @@ FONTTAG should be a string \"/h0\" or \"/h1\"." (with-category-table table (save-excursion (goto-char from) - (while (and (< (length char-pos-list) 20) + (while (and (<= (length char-pos-list) max-unprintable-chars) (re-search-forward "\\cu" to t)) - (push (cons (preceding-char) (1- (point))) char-pos-list)) - (setq char-pos-list (nreverse char-pos-list)))) + (push (cons (preceding-char) (1- (point))) char-pos-list)))) (with-output-to-temp-buffer "*Warning*" (with-current-buffer standard-output (when char-pos-list (let ((func #'(lambda (buf pos) (when (buffer-live-p buf) (pop-to-buffer buf) - (goto-char pos))))) + (goto-char pos)))) + (more nil)) + (if (>= (length char-pos-list) max-unprintable-chars) + (setq char-pos-list (cdr char-pos-list) + more t)) (insert "These characters in the buffer can't be printed:\n") - (dolist (elt char-pos-list) + (dolist (elt (nreverse char-pos-list)) (insert " ") (insert-text-button (string (car elt)) :type 'help-xref @@ -1430,8 +1434,10 @@ FONTTAG should be a string \"/h0\" or \"/h1\"." 'help-function func 'help-args (list buf (cdr elt))) (insert ",")) - ;; Delete the last comma. - (delete-char -1) + (if more + (insert " and more...") + ;; Delete the last comma. + (delete-char -1)) (insert "\nClick them to jump to the buffer position,\n" (substitute-command-keys "\ or \\[universal-argument] \\[what-cursor-position] will give information about them.\n")))) From 2f145e580c2de0afcab20657e97b1c9642e93a09 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Mon, 4 Apr 2005 03:56:45 +0000 Subject: [PATCH 209/241] (calc-language-alist): Add tags to customization type. --- lisp/calc/calc.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 3d78599ecc1..ceee013e493 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -231,7 +231,8 @@ (f90-mode . fortran)) "*Alist of major modes with appropriate Calc languages." :group 'calc - :type '(alist :key-type symbol :value-type symbol)) + :type '(alist :key-type (symbol :tag "Major mode") + :value-type (symbol :tag "Calc language"))) (defcustom calc-embedded-announce-formula "%Embed\n\\(% .*\n\\)*" From 5208b407a02a71db7c00218a73d35586ff1d4b81 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Mon, 4 Apr 2005 04:55:09 +0000 Subject: [PATCH 210/241] Change version number. (Customizable variables): Fix description of calc-language-alist. (Copying): Put in version 2 of GPL. --- man/calc.texi | 403 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 285 insertions(+), 118 deletions(-) diff --git a/man/calc.texi b/man/calc.texi index 087cdbe6457..0cd28e5bf8a 100644 --- a/man/calc.texi +++ b/man/calc.texi @@ -3,7 +3,7 @@ @c smallbook @setfilename ../info/calc @c [title] -@settitle GNU Emacs Calc 2.02g Manual +@settitle GNU Emacs Calc 2.1 Manual @setchapternewpage odd @comment %**end of header (This is for running Texinfo on a region.) @@ -108,7 +108,7 @@ Software Foundation raise funds for GNU development.'' @sp 6 @center @titlefont{Calc Manual} @sp 4 -@center GNU Emacs Calc Version 2.02g +@center GNU Emacs Calc Version 2.1 @c [volume] @sp 1 @center March 2005 @@ -180,11 +180,13 @@ longer Info tutorial.) @node Copying, Getting Started, Top, Top @unnumbered GNU GENERAL PUBLIC LICENSE -@center Version 1, February 1989 +@center Version 2, June 1991 + +@c This file is intended to be included in another file. @display -Copyright @copyright{} 1989 Free Software Foundation, Inc. -675 Mass Ave, Cambridge, MA 02139, USA +Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -192,30 +194,33 @@ of this license document, but changing it is not allowed. @unnumberedsec Preamble - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free -software---to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. +software---to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - For example, if you distribute copies of a such a program, whether + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. +source code. And you must show them these terms so they know their +rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, @@ -228,128 +233,216 @@ want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + The precise terms and conditions for copying, distribution and modification follow. @iftex -@unnumberedsec TERMS AND CONDITIONS +@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end iftex @ifinfo -@center TERMS AND CONDITIONS +@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end ifinfo -@enumerate +@enumerate 0 @item -This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -``Program'', below, refers to any such program or work, and a ``work based -on the Program'' means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as ``you''. +This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The ``Program'', below, +refers to any such program or work, and a ``work based on the Program'' +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term ``modification''.) Each licensee is addressed as ``you''. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. @item -You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. +You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. @item -You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: +You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: -@itemize @bullet +@enumerate a @item -cause the modified files to carry prominent notices stating that -you changed the files and the date of any change; and +You must cause the modified files to carry prominent notices +stating that you changed the files and the date of any change. @item -cause the whole of any work that you distribute or publish, that -in whole or in part contains the Program or any part thereof, either -with or without modifications, to be licensed at no charge to all -third parties under the terms of this General Public License (except -that you may choose to grant warranty protection to some or all -third parties, at your option). +You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. @item -If the modified program normally reads commands interactively when -run, you must cause it, when started running for such interactive use -in the simplest and most usual way, to print or display an -announcement including an appropriate copyright notice and a notice -that there is no warranty (or else, saying that you provide a -warranty) and that users may redistribute the program under these -conditions, and telling the user how to view a copy of this General -Public License. +If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) +@end enumerate + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. @item -You may charge a fee for the physical act of transferring a -copy, and you may at your option offer warranty protection in -exchange for a fee. -@end itemize +You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. +@enumerate a +@item +Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, @item -You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - -@itemize @bullet -@item -accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of -Paragraphs 1 and 2 above; or, +Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, @item -accompany it with a written offer, valid for at least three -years, to give any third party free (except for a nominal charge -for the cost of distribution) a complete machine-readable copy of the -corresponding source code, to be distributed under the terms of -Paragraphs 1 and 2 above; or, - -@item -accompany it with the information you received as to where the -corresponding source code may be obtained. (This alternative is +Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you -received the program in object code or executable form alone.) -@end itemize +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) +@end enumerate -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. @item -You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. +You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. @item -By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. +You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. @item Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +@item +If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +@item +If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. @item The Free Software Foundation may publish revised and/or new versions @@ -358,11 +451,11 @@ be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and ``any +specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software +this License, you may choose any version ever published by the Free Software Foundation. @item @@ -393,17 +486,91 @@ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT -LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES -SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE -WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN -ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. @end enumerate +@iftex +@heading END OF TERMS AND CONDITIONS +@end iftex +@ifinfo +@center END OF TERMS AND CONDITIONS +@end ifinfo + +@page +@unnumberedsec Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the ``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the program's name and a brief idea of what it does.} +Copyright (C) @var{yyyy} @var{name of author} + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + +@smallexample +Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. +@end smallexample + +The hypothetical commands @samp{show w} and @samp{show c} should show +the appropriate parts of the General Public License. Of course, the +commands you use may be called something other than @samp{show w} and +@samp{show c}; they could even be mouse-clicks or menu items---whatever +suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a ``copyright disclaimer'' for the program, if +necessary. Here is a sample; alter the names: + +@example +Yoyodyne, Inc., hereby disclaims all copyright interest in the program +`Gnomovision' (which makes passes at compilers) written by James Hacker. + +@var{signature of Ty Coon}, 1 April 1989 +Ty Coon, President of Vice +@end example + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + @node Getting Started, Tutorial, Copying, Top @chapter Getting Started @noindent @@ -34677,10 +34844,10 @@ enabled, it will try to use the current major mode to determine what language should be used. (This can be overridden using Calc's mode changing commands, @xref{Mode Settings in Embedded Mode}.) The variable @code{calc-language-alist} consists of a list of pairs of -the form @code{(@var{KEY} . @var{VALUE})}; for example, +the form @code{(@var{MAJOR-MODE} . @var{LANGUAGE})}; for example, @code{(latex-mode . latex)} is one such pair. If Calc embedded is -activated in a buffer whose major mode is @var{KEY}, it will set itself -to use the language @var{VALUE}. +activated in a buffer whose major mode is @var{MAJOR-MODE}, it will set itself +to use the language @var{LANGUAGE}. The default value of @code{calc-language-alist} is @example From 707f2b38c093e253a23d55c713e0e1423abe1b09 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Mon, 4 Apr 2005 05:04:44 +0000 Subject: [PATCH 211/241] Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-230 Merge from gnus--rel--5.10 Patches applied: * gnus--rel--5.10 (patch 53-55) - Merge from emacs--cvs-trunk--0 - Update from CVS 2005-04-03 Katsumi Yamaoka * lisp/gnus/gnus-sum.el (gnus-summary-make-menu-bar): Fix an "unrecognised menu descriptor" error. --- lisp/calendar/time-date.el | 4 ++-- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/gnus-sum.el | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el index a4acb8b9291..7160d26ef42 100644 --- a/lisp/calendar/time-date.el +++ b/lisp/calendar/time-date.el @@ -1,5 +1,5 @@ -;;; time-date.el --- date and time handling functions -;; Copyright (C) 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. +;;; time-date.el --- Date and time handling functions +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu Umeda diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index fe2fcab6643..b19598eb3ab 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2005-04-03 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-make-menu-bar): Fix an + "unrecognised menu descriptor" error. + 2005-03-25 Katsumi Yamaoka * message.el (message-resend): Bind rfc2047-encode-encoded-words. diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index ea8f7e063fe..8d6a5f951b5 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -2250,7 +2250,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ,@(if (featurep 'xemacs) '(t) '(:help "Generate and print a PostScript image"))]) ("Copy, move,... (Backend)" - ,@(if (featurep 'xemacs) '(t) + ,@(if (featurep 'xemacs) nil '(:help "Copying, moving, expiring articles...")) ["Respool article..." gnus-summary-respool-article t] ["Move article..." gnus-summary-move-article From 1151215a68f254d6f2c04593a4e92ffcb4a82fe4 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Mon, 4 Apr 2005 05:17:58 +0000 Subject: [PATCH 212/241] *** empty log message *** --- lisp/ChangeLog | 4 ++++ man/ChangeLog | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fda8a87c3ef..ff18f88a514 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-04-04 Jay Belanger + + * calc.el (calc-language-alist): Add tags to customization type. + 2005-04-03 Luc Teirlinck * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group, mouse. diff --git a/man/ChangeLog b/man/ChangeLog index de4400bd8ea..eddd1e97741 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,9 @@ +2005-04-04 Jay Belanger + + * calc.texi: Change Calc version number. + (Customizable variables): Fix description of calc-language-alist. + (Copying): Put in version 2 of GPL. + 2005-04-03 Glenn Morris * calendar.texi (Diary): Mention shell utility `calendar'. From c9541e2d305fab019ebfc41b19755978f6ad91af Mon Sep 17 00:00:00 2001 From: Thien-Thi Nguyen Date: Mon, 4 Apr 2005 07:35:10 +0000 Subject: [PATCH 213/241] Update text before first period. --- etc/TUTORIAL.ja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/TUTORIAL.ja b/etc/TUTORIAL.ja index 3ca2afa7c41..683a4f485c8 100644 --- a/etc/TUTORIAL.ja +++ b/etc/TUTORIAL.ja @@ -1,4 +1,4 @@ -Emacs $BF~Lg%,%$%I$G$9(B. +Emacs $BF~Lg%,%$%I(B. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-! Date: Mon, 4 Apr 2005 07:41:58 +0000 Subject: [PATCH 214/241] (fancy-splash-text): Shorten default text of "Emacs Tutorial" line. Also, if the current language env indicates an available tutorial file other than TUTORIAL, extract its title and append it to the line in parentheses. (fancy-splash-insert): If arg is a thunk, funcall it. --- lisp/startup.el | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lisp/startup.el b/lisp/startup.el index 49a5d88e75e..7be4faceb59 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1004,8 +1004,27 @@ If this is nil, no message will be displayed." using the mouse.\n\n" :face (variable-pitch :weight bold) "Important Help menu items:\n" - :face variable-pitch "\ -Emacs Tutorial\tLearn-by-doing tutorial for using Emacs efficiently + :face variable-pitch + (lambda () + (let* ((en "TUTORIAL") + (tut (or (get-language-info current-language-environment + 'tutorial) + en)) + (title (with-temp-buffer + (insert-file-contents + (expand-file-name tut data-directory) + nil 0 256) + (search-forward ".") + (buffer-substring (point-min) (1- (point)))))) + ;; If there is a specific tutorial for the current language + ;; environment and it is not English, append its title. + (concat + "Emacs Tutorial\tLearn how to use Emacs efficiently" + (if (string= en tut) + "" + (concat " (" title ")")) + "\n"))) + :face variable-pitch "\ Emacs FAQ\tFrequently asked questions and answers Read the Emacs Manual\tView the Emacs manual using Info \(Non)Warranty\tGNU Emacs comes with " @@ -1069,14 +1088,18 @@ Values less than 60 seconds are ignored." (defun fancy-splash-insert (&rest args) "Insert text into the current buffer, with faces. -Arguments from ARGS should be either strings or pairs `:face FACE', +Arguments from ARGS should be either strings, functions called +with no args that return a string, or pairs `:face FACE', where FACE is a valid face specification, as it can be used with `put-text-properties'." (let ((current-face nil)) (while args (if (eq (car args) :face) (setq args (cdr args) current-face (car args)) - (insert (propertize (car args) + (insert (propertize (let ((it (car args))) + (if (functionp it) + (funcall it) + it)) 'face current-face 'help-echo fancy-splash-help-echo))) (setq args (cdr args))))) From e3039e63cca43bc888b7ea0d93dac4e4006a8aa5 Mon Sep 17 00:00:00 2001 From: Thien-Thi Nguyen Date: Mon, 4 Apr 2005 07:43:43 +0000 Subject: [PATCH 215/241] *** empty log message *** --- etc/ChangeLog | 11 ++++++++--- lisp/ChangeLog | 8 ++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 9302885ac3b..71ec47c3d96 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,5 +1,10 @@ +2005-04-04 Thien-Thi Nguyen + + * TUTORIAL.ja: Update text before first period. + Reported by Kenichi Handa. + 2005-04-02 Richard M. Stallman - + * TUTORIAL.ja, TUTORIAL.cn, TUTORIAL.ru, TUTORIAL.zh: Remove the old intro line that apparently was a longer version of "Emacs tutorial". @@ -13,11 +18,11 @@ * TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru, * TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title line. - + * TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in 2005-02-08T14:20:54Z!lute@gnu.org, "Emacs" is not transliterated to cyrillic anymore; Minor fixes; by Ognyan Kulev . - + * TUTORIAL.sv: Sync some other changes with the TUTORIAL version 2005-04-01T00:31:25Z!rms@gnu.org by Mats Lidell . diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff18f88a514..aaab9b3e28a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2005-04-04 Thien-Thi Nguyen + + * startup.el (fancy-splash-text): Shorten default text of + "Emacs Tutorial" line. Also, if the current language env + indicates an available tutorial file other than TUTORIAL, + extract its title and append it to the line in parentheses. + (fancy-splash-insert): If arg is a thunk, funcall it. + 2005-04-04 Jay Belanger * calc.el (calc-language-alist): Add tags to customization type. From 171c707b6cf056348669d1906844c381f36e02d1 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:47:58 +0000 Subject: [PATCH 216/241] (change-log-font-lock-keywords): Names in parenthesized lists can contain spaces. --- lisp/ChangeLog | 5 +++++ lisp/add-log.el | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index aaab9b3e28a..9dd16ac705e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-04-04 Lute Kamstra + + * add-log.el (change-log-font-lock-keywords): Names in + parenthesized lists can contain spaces. + 2005-04-04 Thien-Thi Nguyen * startup.el (fancy-splash-text): Shorten default text of diff --git a/lisp/add-log.el b/lisp/add-log.el index 8d4c741566f..126e7ecbaa5 100644 --- a/lisp/add-log.el +++ b/lisp/add-log.el @@ -1,7 +1,7 @@ ;;; add-log.el --- change log maintenance commands for Emacs -;; Copyright (C) 1985, 86, 88, 93, 94, 97, 98, 2000, 03, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1988, 1993, 1994, 1997, 1998, 2000, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: tools @@ -230,15 +230,15 @@ Note: The search is conducted only within 10%, at the beginning of the file." ;; Possibly further names in a list: ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file-face)) ;; Possibly a parenthesized list of names: - ("\\= (\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" + ("\\= (\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list-face)) - ("\\=, *\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" + ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list-face))) ;; ;; Function or variable names. - ("^\t(\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" + ("^\t(\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" (1 'change-log-list-face) - ("\\=, *\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil + ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list-face))) ;; ;; Conditionals. From 834b5c1e637bca003aae48f75ab5f264e5107b7e Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:51:19 +0000 Subject: [PATCH 217/241] (auto-revert-mode): Specify :group. --- lisp/autorevert.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/autorevert.el b/lisp/autorevert.el index 361a11a67ea..36b5a6f5a37 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -1,6 +1,6 @@ ;;; autorevert.el --- revert buffers when files on disk change -;; Copyright (C) 1997, 1998, 1999, 2001, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2001, 2004, 2005 Free Software Foundation, Inc. ;; Author: Anders Lindgren ;; Keywords: convenience @@ -290,7 +290,7 @@ This is a minor mode that affects only the current buffer. Use `global-auto-revert-mode' to automatically revert all buffers. Use `auto-revert-tail-mode' if you know that the file will only grow without being changed in the part that is already in the buffer." - nil auto-revert-mode-text nil + :group 'auto-revert :lighter auto-revert-mode-text (if auto-revert-mode (if (not (memq (current-buffer) auto-revert-buffer-list)) (push (current-buffer) auto-revert-buffer-list)) From 62631b2cae942a4ff3be165301e8af64a3e197bb Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:53:15 +0000 Subject: [PATCH 218/241] (display-battery-mode): Specify :group. --- lisp/battery.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/battery.el b/lisp/battery.el index 69bd68bb0b9..42ceec0c90c 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -114,7 +114,7 @@ The text being displayed in the mode line is controlled by the variables `battery-mode-line-format' and `battery-status-function'. The mode line will be updated automatically every `battery-update-interval' seconds." - :global t + :global t :group 'battery (setq battery-mode-line-string "") (or global-mode-string (setq global-mode-string '(""))) (and battery-update-timer (cancel-timer battery-update-timer)) From cfc802279aef0c3587e289ad442acff08cb93480 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:54:58 +0000 Subject: [PATCH 219/241] (diff-minor-mode): Specify :group. --- lisp/diff-mode.el | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el index c945a6a7221..d69685ac86f 100644 --- a/lisp/diff-mode.el +++ b/lisp/diff-mode.el @@ -1,7 +1,7 @@ ;;; diff-mode.el --- a mode for viewing/editing context diffs -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Stefan Monnier ;; Keywords: convenience patch diff @@ -263,7 +263,7 @@ when editing big diffs)." (save-excursion (while (re-search-backward re start t) (replace-match "" t t))))))) - + (defvar diff-font-lock-keywords `(("^\\(@@ -[0-9,]+ \\+[0-9,]+ @@\\)\\(.*\\)$" ;unified @@ -484,7 +484,7 @@ If the OLD prefix arg is passed, tell the file NAME of the old file." (let ((fs (diff-hunk-file-names old))) (unless fs (error "No file name to look for")) (push (cons fs name) diff-remembered-files-alist))) - + (defun diff-hunk-file-names (&optional old) "Give the list of file names textually mentioned for the current hunk." (save-excursion @@ -952,7 +952,7 @@ a diff with \\[diff-reverse-direction]." (define-minor-mode diff-minor-mode "Minor mode for viewing/editing context diffs. \\{diff-minor-mode-map}" - nil " Diff" nil + :group 'diff-mode :lighter " Diff" ;; FIXME: setup font-lock ;; setup change hooks (if (not diff-update-on-the-fly) From 50aea0c0de7b819f8cce03a82bcf996655ec8666 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:56:36 +0000 Subject: [PATCH 220/241] (font-lock-mode): Specify :group. --- lisp/font-core.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/font-core.el b/lisp/font-core.el index ea1880baac7..5bf30d4d6c5 100644 --- a/lisp/font-core.el +++ b/lisp/font-core.el @@ -148,7 +148,7 @@ buffer local value for `font-lock-defaults', via its mode hook. The above is the default behavior of `font-lock-mode'; you may specify your own function which is called when `font-lock-mode' is toggled via `font-lock-function'. " - nil nil nil + :group 'font-lock ;; Don't turn on Font Lock mode if we don't have a display (we're running a ;; batch job) or if the buffer is invisible (the name starts with a space). (when (or noninteractive (eq (aref (buffer-name) 0) ?\ )) From b862cd15d072bab0e0adfcdbd1538234f7a976c4 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:57:54 +0000 Subject: [PATCH 221/241] (hl-line-mode): Specify :group. --- lisp/hl-line.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/hl-line.el b/lisp/hl-line.el index a3e786dd801..e553636674b 100644 --- a/lisp/hl-line.el +++ b/lisp/hl-line.el @@ -1,6 +1,6 @@ ;;; hl-line.el --- highlight the current line -;; Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. ;; Author: Dave Love ;; Maintainer: FSF @@ -113,7 +113,7 @@ When `hl-line-sticky-flag' is nil, Hl-Line mode highlights the line about point in the selected window only. In this case, it uses the function `hl-line-unhighlight' on `pre-command-hook' in addition to `hl-line-highlight' on `post-command-hook'." - nil nil nil + :group 'hl-line (if hl-line-mode (progn ;; In case `kill-all-local-variables' is called. From 6786cab27226019951ab4247097c98c5cf1c785a Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 08:59:38 +0000 Subject: [PATCH 222/241] (iimage): New customization group. (iimage-mode): Specify :group. --- lisp/iimage.el | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/iimage.el b/lisp/iimage.el index 9b183ebb01d..32f6aef9abd 100644 --- a/lisp/iimage.el +++ b/lisp/iimage.el @@ -1,6 +1,6 @@ ;;; iimage.el --- Inline image minor mode. -;; Copyright (C) 2004 Free Software Foundation +;; Copyright (C) 2004, 2005 Free Software Foundation ;; Author: KOSEKI Yoshinori ;; Maintainer: KOSEKI Yoshinori @@ -51,6 +51,11 @@ (eval-when-compile (require 'image-file)) +(defgroup iimage nil + "Support for inline images." + :version "22.1" + :group 'image) + (defconst iimage-version "1.1") (defvar iimage-mode nil) (defvar iimage-mode-map nil) @@ -137,7 +142,7 @@ With numeric ARG, display the images if and only if ARG is positive." ;;;###autoload (define-minor-mode iimage-mode "Toggle inline image minor mode." - nil " iImg" iimage-mode-map + :group 'iimage :lighter " iImg" :keymap iimage-mode-map (run-hooks 'iimage-mode-hook) (iimage-mode-buffer iimage-mode)) From baeabe078c8fcb52a12b920518c5a837bcfb76c4 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:02:15 +0000 Subject: [PATCH 223/241] Don't require easy-mmode. (master): New customization group. (master-mode): Specify :group. --- lisp/master.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lisp/master.el b/lisp/master.el index ce4144f087c..b9908e82b55 100644 --- a/lisp/master.el +++ b/lisp/master.el @@ -1,6 +1,6 @@ ;;; master.el --- make a buffer the master over another buffer -;; Copyright (C) 1999, 2000, 2001 Alexander Schroeder +;; Copyright (C) 1999, 2000, 2001, 2005 Alexander Schroeder ;; Author: Alex Schroeder ;; Maintainer: Alex Schroeder @@ -55,7 +55,10 @@ ;;; Code: -(require 'easy-mmode) +(defgroup master nil + "Support for master/slave relationships between buffers." + :version "22.1" + :group 'convenience) ;; Variables that don't need initialization. @@ -83,16 +86,13 @@ following commands: The slave buffer is stored in the buffer-local variable `master-of'. You can set this variable using `master-set-slave'. You can show yourself the value of `master-of' by calling `master-show-slave'." - ;; The initial value. - nil - ;; The indicator for the mode line. - nil - ;; The minor mode bindings. - '(("\C-c\C-n" . master-says-scroll-up) - ("\C-c\C-p" . master-says-scroll-down) - ("\C-c<" . master-says-beginning-of-buffer) - ("\C-c>" . master-says-end-of-buffer) - ("\C-c\C-l" . master-says-recenter))) + :group 'master + :keymap + '(("\C-c\C-n" . master-says-scroll-up) + ("\C-c\C-p" . master-says-scroll-down) + ("\C-c<" . master-says-beginning-of-buffer) + ("\C-c>" . master-says-end-of-buffer) + ("\C-c\C-l" . master-says-recenter))) ;; Initialize Master mode by setting a slave buffer. From 329ffac08929590391c413867fd622debb60b4ba Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:03:43 +0000 Subject: [PATCH 224/241] (msb-mode): Specify :group. --- lisp/msb.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/msb.el b/lisp/msb.el index 2ab7fe5491d..0bcdad314a6 100644 --- a/lisp/msb.el +++ b/lisp/msb.el @@ -1,7 +1,7 @@ ;;; msb.el --- customizable buffer-selection with multiple menus -;; Copyright (C) 1993, 94, 95, 97, 98, 99, 2000, 2001, 2003 -;; Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2003, +;; 2005 Free Software Foundation, Inc. ;; Author: Lars Lindberg ;; Maintainer: FSF @@ -1141,7 +1141,7 @@ variable `msb-menu-cond'." With arg, turn Msb mode on if and only if arg is positive. This mode overrides the binding(s) of `mouse-buffer-menu' to provide a different buffer menu using the function `msb'." - :global t + :global t :group 'msb (if msb-mode (progn (add-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers) From 28a1f13bb7c9d629c711ab56f444d1a7688f7987 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:05:09 +0000 Subject: [PATCH 225/241] (reveal-mode): Specify :group. --- lisp/reveal.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/reveal.el b/lisp/reveal.el index 787c4d20791..97411fc1669 100644 --- a/lisp/reveal.el +++ b/lisp/reveal.el @@ -175,6 +175,7 @@ Reveal mode renders invisible text around point visible again. Interactively, with no prefix argument, toggle the mode. With universal prefix ARG (or if ARG is nil) turn mode on. With zero or negative ARG turn mode off." + :group 'reveal :lighter (global-reveal-mode nil " Reveal") :keymap reveal-mode-map (if reveal-mode From 9066a01ada33913251f374cf78c3e7db21c35813 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:07:45 +0000 Subject: [PATCH 226/241] (next-error-follow-minor-mode): Specify :group. --- lisp/simple.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/simple.el b/lisp/simple.el index 9f6359c5e3c..36ac34b511e 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -302,7 +302,7 @@ select the source buffer." When turned on, cursor motion in the compilation, grep, occur or diff buffer causes automatic display of the corresponding source code location." - nil " Fol" nil + :group 'next-error :init-value " Fol" (if (not next-error-follow-minor-mode) (remove-hook 'post-command-hook 'next-error-follow-mode-post-command-hook t) (add-hook 'post-command-hook 'next-error-follow-mode-post-command-hook nil t) From c06dbb8f150b59d0536f61bbcd2c242e5dfde2a0 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:09:01 +0000 Subject: [PATCH 227/241] (smerge-mode): Specify :group. --- lisp/smerge-mode.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/smerge-mode.el b/lisp/smerge-mode.el index 35903dcf749..d6a93a935d6 100644 --- a/lisp/smerge-mode.el +++ b/lisp/smerge-mode.el @@ -1,6 +1,6 @@ ;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts -;; Copyright (C) 1999, 2000, 01, 03, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Stefan Monnier ;; Keywords: revision-control merge diff3 cvs conflict @@ -667,7 +667,7 @@ buffer names." (define-minor-mode smerge-mode "Minor mode to simplify editing output from the diff3 program. \\{smerge-mode-map}" - nil " SMerge" nil + :group 'smerge :lighter " SMerge" (when (and (boundp 'font-lock-mode) font-lock-mode) (set (make-local-variable 'font-lock-multiline) t) (save-excursion From 90f5a5a05efb79bbde9030c2ac7cc268b4803150 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:11:34 +0000 Subject: [PATCH 228/241] (eldoc-mode): Specify :group. --- lisp/emacs-lisp/eldoc.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index bc868759d92..f31dafb7b11 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el @@ -1,6 +1,7 @@ ;;; eldoc.el --- show function arglist or variable docstring in echo area -;; Copyright (C) 1996, 97, 98, 99, 2000, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003, 2005 +;; Free Software Foundation, Inc. ;; Author: Noah Friedman ;; Maintainer: friedman@splode.com @@ -150,7 +151,7 @@ If point is over a documented variable, print that variable's docstring instead. With prefix ARG, turn ElDoc mode on if and only if ARG is positive." - nil eldoc-minor-mode-string nil + :group 'eldoc :lighter eldoc-minor-mode-string (setq eldoc-last-message nil) (if eldoc-mode (progn From ca0f8d34ccc5762e5eb443a01898ea3ce4270889 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:13:04 +0000 Subject: [PATCH 229/241] (cua-mode): Specify :group. --- lisp/emulation/cua-base.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index 7b2ba5c6fb2..8852999db2d 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el @@ -1307,6 +1307,7 @@ highlight the region using `transient-mark-mode'), and typed text replaces the active selection. C-z, C-x, C-c, and C-v will undo, cut, copy, and paste (in addition to the normal emacs bindings)." :global t + :group 'cua :set-after '(cua-enable-modeline-indications cua-use-hyper-key) :require 'cua-base :link '(emacs-commentary-link "cua-base.el") From 64a2e5cab9c27a07343e2e0679f35259a11fa76d Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:15:05 +0000 Subject: [PATCH 230/241] (encoded-kbd-mode): Specify :group. --- lisp/international/encoded-kb.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/international/encoded-kb.el b/lisp/international/encoded-kb.el index aa6d35c340f..fdb35b34533 100644 --- a/lisp/international/encoded-kb.el +++ b/lisp/international/encoded-kb.el @@ -269,7 +269,7 @@ automatically. In Encoded-kbd mode, a text sent from keyboard is accepted as a multilingual text encoded in a coding system set by \\[set-keyboard-coding-system]." - :global t + :global t :group 'keyboard :group 'mule (if encoded-kbd-mode ;; We are turning on Encoded-kbd mode. From c92164e10167234a115668f0ed2014eb4abb854d Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:17:41 +0000 Subject: [PATCH 231/241] (thai-auto-composition-mode, thai-word-mode): Specify :group. --- lisp/language/thai-util.el | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el index 6c121c60db2..dea05a4c948 100644 --- a/lisp/language/thai-util.el +++ b/lisp/language/thai-util.el @@ -278,7 +278,7 @@ if necessary." (defun thai-compose-syllable (beg end &optional category-set string) (or category-set - (setq category-set + (setq category-set (char-category-set (if string (aref string beg) (char-after beg))))) (if (aref category-set ?c) ;; Starting with a consonant. We do relative composition. @@ -287,9 +287,9 @@ if necessary." (compose-region beg end)) ;; Vowel tone sequence. (if string - (compose-string string beg end (list (aref string beg) '(Bc . Bc) + (compose-string string beg end (list (aref string beg) '(Bc . Bc) (aref string (1+ beg)))) - (compose-region beg end (list (char-after beg) '(Bc . Bc) + (compose-region beg end (list (char-after beg) '(Bc . Bc) (char-after (1+ beg)))))) (- end beg)) @@ -347,7 +347,7 @@ The return value is number of composed characters." (if string (if (eq (string-match thai-composition-pattern string from) from) (thai-compose-syllable from (match-end 0) nil string)) - (if (save-excursion + (if (save-excursion (goto-char from) (and (looking-at thai-composition-pattern) (setq to (match-end 0)))) @@ -375,7 +375,7 @@ The return value is number of composed characters." ;;;###autoload (define-minor-mode thai-auto-composition-mode "Minor mode for automatically correct Thai character composition." - nil nil nil + :group 'mule (cond ((null thai-auto-composition-mode) (remove-hook 'after-change-functions 'thai-auto-composition)) (t @@ -397,7 +397,7 @@ The return value is number of composed characters." (define-minor-mode thai-word-mode "Minor mode to make word-oriented commands aware of Thai words. The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]." - :global t + :global t :group 'mule (cond (thai-word-mode ;; This enables linebreak between Thai characters. (modify-category-entry (make-char 'thai-tis620) ?|) From feb02f95635745e2d09d39ef5f2f7accc686c362 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:19:51 +0000 Subject: [PATCH 232/241] (sc-minor-mode): Specify :group. --- lisp/mail/supercite.el | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index 371bb90b9cf..6b769f53801 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -1866,10 +1866,11 @@ Note on function names in this list: all functions of the form (define-minor-mode sc-minor-mode "Supercite minor mode." - nil (" SC" (sc-auto-fill-region-p - (":f" (sc-fixup-whitespace-p "w")) - (sc-fixup-whitespace-p ":w"))) - `((,sc-mode-map-prefix . ,sc-mode-map))) + :group 'supercite + :lighter (" SC" (sc-auto-fill-region-p + (":f" (sc-fixup-whitespace-p "w")) + (sc-fixup-whitespace-p ":w"))) + :keymap `((,sc-mode-map-prefix . ,sc-mode-map))) ;;;###autoload (defun sc-cite-original () From 1f644ce330e3f7cc37f2536db89e258d26652010 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:21:06 +0000 Subject: [PATCH 233/241] (cwarn-mode): Specify :group. --- lisp/progmodes/cwarn.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/cwarn.el b/lisp/progmodes/cwarn.el index b16381cd2c7..9dfd4dd9e26 100644 --- a/lisp/progmodes/cwarn.el +++ b/lisp/progmodes/cwarn.el @@ -1,6 +1,6 @@ ;;; cwarn.el --- highlight suspicious C and C++ constructions -;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc. ;; Author: Anders Lindgren ;; Keywords: c, languages, faces @@ -193,7 +193,7 @@ be included in the variable `cwarn-configuration'. By default C and C++ modes are included. With ARG, turn CWarn mode on if and only if arg is positive." - nil cwarn-mode-text nil + :group 'cwarn :lighter cwarn-mode-text (cwarn-font-lock-keywords cwarn-mode) (if font-lock-mode (font-lock-fontify-buffer))) From d799c27880ad01225f12127ace5449a5ce77a3ee Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:22:59 +0000 Subject: [PATCH 234/241] (flymake-mode): Specify :group. --- lisp/progmodes/flymake.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 70150111a86..7067ddca21c 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -964,7 +964,7 @@ Convert it to flymake internal format." (if (consp file) (setq file (car file))) (if (consp line) (setq line (car line))) (if (consp col) (setq col (car col))) - + (when (not (functionp line)) (setq converted-list (cons (list regexp file line col) converted-list))))) converted-list)) @@ -1508,7 +1508,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if "Minor mode to do on-the-fly syntax checking. When called interactively, toggles the minor mode. With arg, turn Flymake mode on if and only if arg is positive." - :lighter flymake-mode-line + :group 'flymake :lighter flymake-mode-line (if flymake-mode (if (flymake-can-syntax-check-file (buffer-file-name)) (flymake-mode-on) From 3b614b814eb9be1a2ba421e1510aa7148ff5c28d Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:23:59 +0000 Subject: [PATCH 235/241] (glasses-mode): Specify :group. --- lisp/progmodes/glasses.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el index dea40b8db19..7aff14ec608 100644 --- a/lisp/progmodes/glasses.el +++ b/lisp/progmodes/glasses.el @@ -1,6 +1,6 @@ ;;; glasses.el --- make cantReadThis readable -;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc. ;; Author: Milan Zamazal ;; Maintainer: Milan Zamazal @@ -251,7 +251,7 @@ recognized according to the current value of the variable `glasses-separator'." "Minor mode for making identifiers likeThis readable. When this mode is active, it tries to add virtual separators (like underscores) at places they belong to." - nil " o^o" nil + :group 'glasses :lighter " o^o" (save-excursion (save-restriction (widen) From 0f06a4df3f53d3962b03c0c95a4d77193addb507 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:25:36 +0000 Subject: [PATCH 236/241] (hide-ifdef-mode): Specify :group. --- lisp/progmodes/hideif.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el index da6b6f772b6..23031c5bcda 100644 --- a/lisp/progmodes/hideif.el +++ b/lisp/progmodes/hideif.el @@ -1,6 +1,6 @@ ;;; hideif.el --- hides selected code within ifdef -;; Copyright (C) 1988,1994,2001, 2002 Free Software Foundation, Inc. +;; Copyright (C) 1988, 1994, 2001, 2002, 2005 Free Software Foundation, Inc. ;; Author: Daniel LaLiberte ;; Maintainer: FSF @@ -197,7 +197,7 @@ how the hiding is done: After `show-ifdefs', read-only status is restored to previous value. \\{hide-ifdef-mode-map}" - nil " Ifdef" nil + :group 'hide-ifdef :lighter " Ifdef" (if hide-ifdef-mode (progn ;; inherit global values From fb1668f9cf45bde1b361f3c0d74df2c5d89cb159 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:27:16 +0000 Subject: [PATCH 237/241] (enriched-mode): Specify :group. --- lisp/textmodes/enriched.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el index 71bb6cf137d..b1b5abc488f 100644 --- a/lisp/textmodes/enriched.el +++ b/lisp/textmodes/enriched.el @@ -1,6 +1,6 @@ ;;; enriched.el --- read and save files in text/enriched format -;; Copyright (c) 1994, 1995, 1996, 2002, 2004 Free Software Foundation, Inc. +;; Copyright (c) 1994, 1995, 1996, 2002, 2004, 2005 Free Software Foundation, Inc. ;; Author: Boris Goldowsky ;; Keywords: wp, faces @@ -183,7 +183,7 @@ etc/enriched.doc in the Emacs distribution directory. Commands: \\{enriched-mode-map}" - nil " Enriched" nil + :group 'enriched :lighter " Enriched" (cond ((null enriched-mode) ;; Turn mode off (setq buffer-file-format (delq 'text/enriched buffer-file-format)) From 6de274aa32896bb8197c4a73c5ee5419acb6a103 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:29:08 +0000 Subject: [PATCH 238/241] (refill-mode): Specify :group. --- lisp/textmodes/refill.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/textmodes/refill.el b/lisp/textmodes/refill.el index 9979f4a3e27..d5f3b19cc9c 100644 --- a/lisp/textmodes/refill.el +++ b/lisp/textmodes/refill.el @@ -221,7 +221,9 @@ With prefix arg, turn Refill mode on iff arg is positive. When Refill mode is on, the current paragraph will be formatted when changes are made within it. Self-inserting characters only cause refilling if they would cause auto-filling." - nil " Refill" '(("\177" . backward-delete-char-untabify)) + :group 'refill + :lighter " Refill" + :keymap '(("\177" . backward-delete-char-untabify)) ;; Remove old state if necessary (when refill-ignorable-overlay (delete-overlay refill-ignorable-overlay) From 6da6c2fe93eb7a79ebebce485d0d06f97122ad8f Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:30:37 +0000 Subject: [PATCH 239/241] (longlines-mode): Specify :group. --- lisp/longlines.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/longlines.el b/lisp/longlines.el index 8491a0b7960..ebfb7a660b0 100644 --- a/lisp/longlines.el +++ b/lisp/longlines.el @@ -101,7 +101,7 @@ wrapped whenever the buffer is changed. You can always call If `longlines-show-hard-newlines' is non-nil, hard newlines will be marked by a symbol." - nil " ll" nil + :group 'longlines :lighter " ll" (if longlines-mode ;; Turn on longlines mode (progn From 4ee48a9bfc8f55911eb1ba86d1b55bcf1a3b6e70 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:38:43 +0000 Subject: [PATCH 240/241] (url-handler-mode): Specify :group. --- lisp/url/url-handlers.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el index f90f21a3dbe..68bf0ec7ab5 100644 --- a/lisp/url/url-handlers.el +++ b/lisp/url/url-handlers.el @@ -1,6 +1,6 @@ ;;; url-handlers.el --- file-name-handler stuff for URL loading -;; Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc. +;; Copyright (c) 1996, 1997, 1998, 1999, 2004, 2005 Free Software Foundation, Inc. ;; Keywords: comm, data, processes, hypermedia @@ -106,7 +106,7 @@ particularly bad at this\).") ;;;###autoload (define-minor-mode url-handler-mode "Use URL to handle URL-like file names." - :global t + :global t :group 'url (if (not (boundp 'file-name-handler-alist)) ;; Can't be turned ON anyway. (setq url-handler-mode nil) From 8c6ef2ca34c444c1dea1f11b999b4b2ec16cdea3 Mon Sep 17 00:00:00 2001 From: Lute Kamstra Date: Mon, 4 Apr 2005 09:39:03 +0000 Subject: [PATCH 241/241] *** empty log message *** --- lisp/ChangeLog | 28 ++++++++++++++++++++++++++++ lisp/url/ChangeLog | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9dd16ac705e..d5a58deb7e4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,33 @@ 2005-04-04 Lute Kamstra + * autorevert.el (auto-revert-mode): Specify :group. + * battery.el (display-battery-mode): Specify :group. + * diff-mode.el (diff-minor-mode): Specify :group. + * font-core.el (font-lock-mode): Specify :group. + * hl-line.el (hl-line-mode): Specify :group. + * iimage.el (iimage): New customization group. + (iimage-mode): Specify :group. + * longlines.el (longlines-mode): Specify :group. + * master.el: Don't require easy-mmode. + (master): New customization group. + (master-mode): Specify :group. + * msb.el (msb-mode): Specify :group. + * reveal.el (reveal-mode): Specify :group. + * simple.el (next-error-follow-minor-mode): Specify :group. + * smerge-mode.el (smerge-mode): Specify :group. + * emacs-lisp/eldoc.el (eldoc-mode): Specify :group. + * emulation/cua-base.el (cua-mode): Specify :group. + * international/encoded-kb.el (encoded-kbd-mode): Specify :group. + * language/thai-util.el (thai-auto-composition-mode) + (thai-word-mode): Specify :group. + * mail/supercite.el (sc-minor-mode): Specify :group. + * progmodes/cwarn.el (cwarn-mode): Specify :group. + * progmodes/flymake.el (flymake-mode): Specify :group. + * progmodes/glasses.el (glasses-mode): Specify :group. + * progmodes/hideif.el (hide-ifdef-mode): Specify :group. + * textmodes/enriched.el (enriched-mode): Specify :group. + * textmodes/refill.el (refill-mode): Specify :group. + * add-log.el (change-log-font-lock-keywords): Names in parenthesized lists can contain spaces. diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 5a3bf23529c..82b7f64dc01 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,7 @@ +2005-04-04 Lute Kamstra + + * url-handlers.el (url-handler-mode): Specify :group. + 2005-02-26 James Cloos (tiny change) * url-history.el (url-have-visited-url): Don't barf if