]> code.delx.au - gnu-emacs/commitdiff
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-37
authorMiles Bader <miles@gnu.org>
Thu, 14 Apr 2005 05:03:52 +0000 (05:03 +0000)
committerMiles Bader <miles@gnu.org>
Thu, 14 Apr 2005 05:03:52 +0000 (05:03 +0000)
Merge from emacs--cvs-trunk--0

Patches applied:

 * emacs--cvs-trunk--0  (patch 241-257)

   - Update from CVS
   - Merge from gnus--rel--5.10

 * gnus--rel--5.10  (patch 59-65)

   - Update from CVS
   - Merge from emacs--cvs-trunk--0
   - (mm-string-to-multibyte): Use Gnus trunk definition.

85 files changed:
ChangeLog
admin/FOR-RELEASE
etc/ChangeLog
etc/NEWS
etc/TUTORIAL.sk
etc/compilation.txt
lisp/ChangeLog
lisp/Makefile.in
lisp/abbrev.el
lisp/arc-mode.el
lisp/bookmark.el
lisp/calc/calc-units.el
lisp/calendar/time-date.el
lisp/comint.el
lisp/cus-edit.el
lisp/custom.el
lisp/dired.el
lisp/dnd.el [new file with mode: 0644]
lisp/emacs-lisp/generic.el [moved from lisp/generic.el with 70% similarity]
lisp/emacs-lisp/map-ynp.el
lisp/emulation/cua-base.el
lisp/emulation/cua-rect.el
lisp/faces.el
lisp/files.el
lisp/generic-x.el
lisp/gnus/ChangeLog
lisp/gnus/gnus-agent.el
lisp/gnus/gnus-art.el
lisp/gnus/gnus-cache.el
lisp/gnus/gnus-group.el
lisp/gnus/gnus-spec.el
lisp/gnus/gnus-sum.el
lisp/gnus/message.el
lisp/gnus/mm-url.el
lisp/gnus/mm-util.el
lisp/gnus/nnimap.el
lisp/gnus/nnrss.el
lisp/gnus/qp.el
lisp/help.el
lisp/info.el
lisp/makefile.w32-in
lisp/progmodes/compile.el
lisp/progmodes/f90.el
lisp/progmodes/gdb-ui.el
lisp/progmodes/gud.el
lisp/progmodes/sh-script.el
lisp/progmodes/vhdl-mode.el
lisp/saveplace.el
lisp/simple.el
lisp/startup.el
lisp/term.el
lisp/term/mac-win.el
lisp/term/w32-win.el
lisp/term/xterm.el
lisp/textmodes/bibtex.el
lisp/url/url-ldap.el
lisp/wdired.el
lisp/whitespace.el
lisp/x-dnd.el
lisp/xt-mouse.el
lwlib/xlwmenuP.h
make-dist
man/ChangeLog
man/cc-mode.texi
man/cl.texi
man/cmdargs.texi
man/display.texi
man/frames.texi
man/gnus.texi
man/maintaining.texi
man/major.texi
man/rmail.texi
man/xresources.texi
src/ChangeLog
src/buffer.c
src/dispnew.c
src/emacs.c
src/fns.c
src/keyboard.c
src/keymap.c
src/lread.c
src/macterm.c
src/print.c
src/termhooks.h
src/window.c

index 93cdb3d787210ef3d5075afd48efdeb7b2ce5625..4d1a8fb9453090988ad7cda54f0bfd35811ace3b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-04-13  Lute Kamstra  <lute@gnu.org>
+
+       * make-dist: Don't use DONTCOMPILE from lisp/Makefile.in; check
+       for "no-byte-compile: t" in the file instead.
+
 2005-03-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * configure.in <Motif>: Don't let a special LessTif/Motif1.2 install
index 863f7ab72addf127795dd55a4972ea5d4b3f4cd1..0c1f4cf5f2f24c1d39d6aadc1a5f8991e7ba61cd 100644 (file)
@@ -20,6 +20,8 @@ See msg from rms to emacs-devel on 21 Dec.
 
 ** Enhance scroll-bar to handle tall line (similar to line-move).
 
+** Adapt mouse-sel-mode to mouse-1-click-follows-link.
+
 
 * FATAL ERRORS
 
@@ -35,8 +37,6 @@ invalid pointer from string_free_list.
 
 ** Clean up flymake.el to follow Emacs Lisp conventions.
 
-** Fix up url-ldap.el.
-
 * BUGS
 
 ** Ange-ftp should ignore irrelevant IPv6 errors:
@@ -179,7 +179,7 @@ man/m-x.texi        "Luc Teirlinck"  Chong Yidong
 man/picture.texi    Joakim Verona <joakim@verona.se>   Chong Yidong
 man/programs.texi   "Stephen Eglen"  Chong Yidong
 man/regs.texi       "Luc Teirlinck"   Chong Yidong
-man/rmail.texi      Chong Yidong
+man/rmail.texi      Chong Yidong      "Luc Teirlinck"
 man/screen.texi     "Luc Teirlinck"   Chong Yidong
 man/search.texi     "Luc Teirlinck"   Chong Yidong
 man/sending.texi    Chong Yidong      "Luc Teirlinck"
@@ -275,7 +275,7 @@ etc/TUTORIAL.pl
 etc/TUTORIAL.pt_BR       Marcelo Toledo
 etc/TUTORIAL.ro
 etc/TUTORIAL.ru
-etc/TUTORIAL.sk
+etc/TUTORIAL.sk          Pavel Janík <Pavel@Janik.cz>
 etc/TUTORIAL.sl          Primoz PETERLIN <primoz.peterlin@biofiz.mf.uni-lj.si>
 etc/TUTORIAL.sv          Mats Lidell <matsl@contactor.se>
 etc/TUTORIAL.th
index 2d28135ecfe4bb16a385bcc1d0761ed791e9f11b..ce3785eba8eff2353a82e6e49b6749c51b1b6ac4 100644 (file)
@@ -1,3 +1,24 @@
+2005-04-13  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * TUTORIAL.sk: Updated header.
+
+2005-04-12  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * NEWS: Mention cursorBlink resource.
+
+2005-04-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * NEWS: Mention dynamic change of keyboard-coding-system on Mac.
+
+2005-04-10  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * NEWS: Mention fontSet for Lucid menus.
+
+2005-04-10  Masatake YAMATO  <jet@gyve.org>
+
+       * compilation.txt (symbol): Added gcov-file 
+       gcov-bb-file gcov-never-called-line gcov-called-line .
+
 2005-04-08  Kenichi Handa  <handa@m17n.org>
 
        * TUTORIAL.ja: Updated header, contents synchronized with
index 02a956aded6058a8a04c8caa772d5fafeb6db410..a3407bca931ca4723971e548301b5a0b8b7718aa 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -182,6 +182,19 @@ types any more.  Add -DUSE_LISP_UNION_TYPE if you want union types.
 \f
 * Changes in Emacs 22.1
 
+** Xterm Mouse mode is now enabled by default in terminal emulators
+compatible with xterm.  This means that simple use of the mouse is
+now, by default, controlled by Emacs--basically, only non-modified
+single clicks are supported.  The normal xterm mouse functionality
+for such clicks is still available by holding down the SHIFT key
+when you press the mouse button.
+
+This is not without problems.  For instance, clicking with the mouse
+on the wrong place may produce unexpected results without warning.
+Put `(xterm-mouse-mode 0)' in your .emacs, or disable the option
+`xterm-mouse-mode' through Custom, if you prefer all mouse clicks to
+be handled by the terminal emulator.
+
 ** 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
@@ -427,11 +440,16 @@ the next/previous matching line found by M-x occur.
 ** Telnet now prompts you for a port number with C-u M-x telnet.
 
 +++
-** New command line option -Q or --bare-bones.
+** New command line option -Q or --quick.
 
 This is like using -q --no-site-file, but in addition it also disables
-the menu-bar, the tool-bar, the scroll-bars, tool tips, the blinking
-cursor, and the fancy startup screen.
+the fancy startup screen.
+
++++
+** New command line option -D or --basic-display.
+
+Disables the menu-bar, the tool-bar, the scroll-bars, tool tips, and
+the blinking cursor.
 
 +++
 ** New command line option -nbc or --no-blinking-cursor disables
@@ -1037,6 +1055,9 @@ speed up Emacs with slow networking to the X server.
 If the configure option `--without-xim' was used to turn off use of
 XIM by default, the X resource useXIM can be used to turn it on.
 
++++
+** The X resource cursorBlink can be used to turn off cursor blinking.
+
 +++
 ** `undo-only' does an undo which does not redo any previous undo.
 
@@ -1280,6 +1301,11 @@ amount of text shown any more (only a crude approximation of it).
 ** The pop up menus for Lucid now stay up if you do a fast click and can
 be navigated with the arrow keys (like Gtk+, Mac and W32).
 
++++
+** The Lucid menus can display multilingual text in your locale.  You have
+to explicitly specify a fontSet resource for this to work, for example
+`-xrm "Emacs*fontSet:  -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*"'.
+
 ---
 ** Dialogs for Lucid/Athena and Lesstif/Motif now pops down when pressing
 ESC, like they do for Gtk+, Mac and W32.
@@ -2516,6 +2542,11 @@ temporary overlay showing in the course of an isearch operation.
 ** New command `recode-region' decodes the region again by a specified
 coding system.
 
+** On Mac OS, the value of the variable `keyboard-coding-system' is
+now dynamically changed according to the current keyboard script.  The
+variable `mac-keyboard-text-encoding' and the constants
+`kTextEncodingMacRoman', `kTextEncodingISOLatin1', and
+`kTextEncodingISOLatin2' are obsolete.
 \f
 * New modes and packages in Emacs 22.1
 
index 465a3805a623ca0806f802ecdde318b8ba8c047d..47f104ffa77055619ff407b37685441f3b75ae25 100644 (file)
@@ -1,5 +1,5 @@
-tútorial k Emacsu.
-Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci.
+Tútorial k Emacsu. Podmienky pozri na konci.
+Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation.
 Do Ã¨e¹tiny prelo¾il Milan Zamazal <pdm@zamazal.org>, do slovenèiny Miroslav
 Va¹ko <zemiak@zoznam.sk>.
 
index c1a20ad3025027427a4f107443804467d051ed55..42e62af9dffb4a504df69b6753b129e9ced56064 100644 (file)
@@ -341,6 +341,32 @@ strcmp: variable # of args. llib-lc(359)  ::  /usr/src/foo/foo.c(8)
 bloofle defined( /users/wolfgang/foo.c(4) ), but never used
 
 
+* GCOV (test coverage program)
+
+symbol: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line 
+
+        -:    0:Source:foo.c
+        -:    0:Object:foo.bb
+        -:    1:/* $ gcc -fprofile-arcs -ftest-coverage foo.c 
+        -:    2:   $ ./a.out
+        -:    3:   $ gcov foo.c
+        -:    4:   LANG=C gcov foo.c
+        -:    5:   62.50% of 8 lines executed in file foo.c
+        -:    6:   Creating foo.c.gcov.*/
+        -:    7:int
+        -:    8:main(int argc, char ** argv)
+        1:    9:{
+        1:   10:  int r;
+        1:   11:  if (argc == 1)
+        1:   12:    r = 1;
+    #####:   13:  else if (argc == 2)
+    #####:   14:    r = 2;
+        -:   15:  else 
+    #####:   16:    r = 0;
+        1:   17:  return r;
+        -:   18:} 
+
+
 * Directory tracking
 
 Directories are matched via `compilation-directory-matcher'.  Files which are
index 14c80f2f58cbf113b381484c888acbbdffc5879a..adf67c9ff80b10e7544c2ecfb0b585bb073e1508 100644 (file)
@@ -1,3 +1,304 @@
+2005-04-13  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * startup.el (command-line): Handle `xterm-mouse-mode' before
+       reading init file.
+
+       * xt-mouse.el (xterm-mouse-mode): Adapt to above change.
+
+2005-04-13  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+       * progmodes/sh-script.el (sh-here-document-word): Make it a
+       defcustom.  Doc fix.
+       (sh-add): Bash uses $(( )) for arithmetic.
+       (sh-while-getopts) <sh>: Set OPTIND back to 1 at end.
+       (sh-maybe-here-document): Remove quotes and leading whitespace
+       from heredoc word when closing.  Indent heredoc with tabs if word
+       starts with "-".
+
+2005-04-13  Richard M. Stallman  <rms@gnu.org>
+
+       * simple.el (undo): Fix previous change.
+
+       * custom.el (defface): Doc fix.
+
+2005-04-13  Lute Kamstra  <lute@gnu.org>
+
+       * Makefile.in (DONTCOMPILE): Remove list.
+       (compile, compile-always): Don't use DONTCOMPILE.
+       (update-authors): Load the library in which batch-update-authors
+       is defined.
+       * makefile.w32-in (DONTCOMPILE): Remove list.
+       (compile, compile-always): Fix comments.
+       (update-authors): Load the library in which batch-update-authors
+       is defined.
+
+       * generic-x.el (generic-mode-ini-file-find-file-hook):
+       Rename to ini-generic-mode-find-file-hook.
+       Keep generic-mode-ini-file-find-file-hook as an alias.
+       (ini-generic-mode-find-file-hook): Rename from
+       generic-mode-ini-file-find-file-hook.  Fix docstring.
+       (ini-generic-mode): Docstring change.
+       (bat-generic-mode-run-as-comint): Silence the byte compiler.
+
+       * help.el (describe-key-briefly): UNTRANSLATED can be nil when
+       called from lisp.
+
+       * generic.el: Move to the emacs-lisp subdir.
+
+2005-04-12  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * term/xterm.el (function-key-map): Add mappings for A-, C-, S-
+       and C-S- function and cursor motion keys.
+
+2005-04-12  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * startup.el (command-line): Enable Xterm Mouse mode by default.
+       * xt-mouse.el (xterm-mouse-mode): Provide correct standard value
+       for Custom.  No longer show "Mouse" in mode line when enabled.
+       Doc fix.
+
+2005-04-12  Kim F. Storm  <storm@cua.dk>
+
+       * emulation/cua-base.el (cua-rectangle-face)
+       (cua-rectangle-noselect-face): Define face attributes here.
+
+       * emulation/cua-rect.el (cua--init-rectangles): Remove face setup.
+
+2005-04-12  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * startup.el (command-line): Turn off blinking cursor if
+       cursorBlink in resources is off or false.
+
+2005-04-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * term/mac-win.el (dnd): Require dnd.
+       (mac-drag-n-drop): Call dnd-handle-one-url.
+       (kTextEncodingMacRoman, kTextEncodingISOLatin1)
+       (kTextEncodingISOLatin2): Remove constants.
+       (mac-script-code-coding-systems): New constant.
+       (mac-handle-language-change): New function.
+       (special-event-map): Bind it to `language-change' event.
+       (mac-centraleurroman, mac-cyrillic): New coding systems.
+       (mac-font-encoder-list, ccl-encode-mac-centraleurroman-font)
+       (ccl-encode-mac-cyrillic-font): Rename mac-centraleurroman-encoder
+       and mac-cyrillic-encoder to encode-mac-centraleurroman and
+       encode-mac-cyrillic, respectively.
+
+2005-04-12  Nick Roberts  <nickrob@snap.net.nz>
+
+       * progmodes/gud.el, progmodes/gdb-ui.el (gdb-assembler-mode):
+       Don't set overlay-arrow-string to "=>" as this is done
+       globally in C now.
+
+2005-04-12  Lute Kamstra  <lute@gnu.org>
+
+       * generic-x.el (rc-generic-mode, rul-generic-mode): Fix
+       auto-mode-alist entries.
+       (etc-fstab-generic-mode): Tweak fontification.
+
+       * generic.el (generic-make-keywords-list): Fix docstring.
+       (generic-mode-internal): Simplify generic-font-lock-keywords.
+
+2005-04-11  Rajesh Vaidheeswarran  <rv@gnu.org>
+
+       * whitespace.el (whitespace-buffer-leading,
+       whitespace-buffer-trailing): Revert the incorrect test
+       inversion. However, fix the highlight area for the leading and
+       trailing whitespaces to show space.
+
+2005-04-11  Rajesh Vaidheeswarran  <rv@gnu.org>
+
+       * whitespace.el (whitespace-version): Bump to 3.5
+
+       (whitespace-buffer-leading, whitespace-buffer-trailing): Invert
+       sense of the test to highlight the whitespace.
+
+2005-04-12  Nick Roberts  <nickrob@snap.net.nz>
+
+       * progmodes/gud.el (gud-display-line): GUD uses its own
+       overlay arrow now so don't set overlay-arrow-string.
+       (gud-pdb-command-name): Revert back to "pdb" (2004-04-26).
+
+2005-04-11  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * term.el (term-ansi-current-bold, term-ansi-current-underline)
+       (term-ansi-current-reverse, term-ansi-current-invisible)
+       (term-ansi-face-already-done): Change to boolean.
+       (term-reset-terminal, term-handle-colors-array): Handle the above
+       vars accordingly.
+       (term-buffer-vertical-motion): Rename from buffer-vertical-motion.
+       (term-emulate-terminal): Use the new name.
+
+       * faces.el (secondary-selection): Use yellow1, not yellow.
+       (trailing-whitespace): Use red1, not red.
+
+2005-04-11  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * dired.el (dired-mode): Use dnd-* instead of x-dnd-*
+       (dired-dnd-handle-local-file): Call dnd-get-local-file-name.
+       (dired-dnd-handle-file): Call dnd-get-local-file-uri
+
+       * cus-edit.el (dnd): New group.
+
+       * term/w32-win.el (dnd): Require dnd
+       (w32-drag-n-drop): Call dnd-handle-one-url.
+
+       * x-dnd.el: Require dnd.
+       (x-dnd-handle-uri-list, x-dnd-handle-file-name): Call
+       dnd-handle-one-url.
+       (x-dnd-types-alist, x-dnd-insert-utf8-text)
+       (x-dnd-insert-utf16-text, x-dnd-insert-ctext): Change x-dnd-insert-text
+       to dnd-insert-text.
+       (x-dnd-protocol-alist, x-dnd-open-file-other-window)
+       (x-dnd-handle-one-url, x-dnd-get-local-file-uri)
+       (x-dnd-get-local-file-name,  x-dnd-open-local-file)
+       (x-dnd-open-file, x-dnd-insert-text): Moved to dnd.el (without x-).
+
+       * dnd.el (dnd-protocol-alist): New file with generic DND functions.
+
+2005-04-11  JUAN-LEON Lahoz Garcia  <juanleon1@gmail.com>
+
+       * wdired.el: Doc fixes.
+       (wdired-confirm-overwrite): Rename from wdired-is-ok-overwrite.
+       (wdired-use-dired-vertical-movement): Rename from
+       wdired-always-move-to-filename-beginning.
+       (wdired-mode-map): Use `ignore' instead of `wdired-newline'.
+       (wdired-change-to-wdired-mode): Change mode name.
+       (wdired-newline): Delete.
+
+2005-04-11  Richard M. Stallman  <rms@gnu.org>
+
+       * whitespace.el (whitespace-highlight-the-space):
+       Don't call whitespace-unhighlight-the-space here.
+
+       * simple.el (undo): Record t in undo-equiv-table
+       for the redo record made by an undo-in-region.
+
+2005-04-12  Nick Roberts  <nickrob@snap.net.nz>
+
+       * progmodes/gdb-ui.el (gdb-display-inferior-io-buffer)
+       (gdb-frame-inferior-io-buffer): New Functions to control
+       display of separate IO buffer.
+       (menu): Add them to menu-bar.
+       (gdb-display-buffer): Check for buffer another frame.
+       Protect GUD buffer.
+       (gdb-setup-windows): Create IO buffer if not already there.
+       (gdb-memory-mode): Remove purecopy noops.
+
+2005-04-11  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+       * progmodes/f90.el (f90-electric-insert): Add optional prefix arg,
+       and pass to self-insert-command.
+
+2005-04-11  Lute Kamstra  <lute@gnu.org>
+
+       * generic.el: Commentary section cleanup.
+       (generic): Delete.
+       (generic-use-find-file-hook, generic-lines-to-scan)
+       (generic-find-file-regexp, generic-ignore-files-regexp)
+       (default-generic-mode, generic-mode-find-file-hook)
+       (generic-mode-ini-file-find-file-hook): Move to generic-x.el.
+       * generic-x.el (generic-x): Docstring fix.  Put it in the data group.
+       (generic-use-find-file-hook, generic-lines-to-scan)
+       (generic-find-file-regexp, generic-ignore-files-regexp)
+       (default-generic-mode, generic-mode-find-file-hook)
+       (generic-mode-ini-file-find-file-hook): Move from generic.el.
+
+2005-04-10  Karl Fogel  <kfogel@red-bean.com>
+
+       * bookmark.el (bookmark-write-file): Catch errors writing file.
+       This is the same change as saveplace.el at 2005-04-10T23:32:00Z!rms@gnu.org.
+
+2005-04-10  Richard M. Stallman  <rms@gnu.org>
+
+       * startup.el (fancy-splash-tail): Update copyright year.
+       (command-line): Split part of -Q into -D.
+       (emacs-basic-display): New defvar.
+       (fancy-splash-text): Correct name of menu item.
+
+       * saveplace.el (save-place-alist-to-file): Catch errors writing file.
+
+       * info.el (Info-fontify-node): Handle fontification of multiple * Menu
+       lines in one node.
+
+       * comint.el (comint-send-input): New arg ARTIFICIAL.
+       Callers in this file changed.
+
+       * abbrev.el (define-abbrevs): Read system abbrevs properly.
+
+       * emacs-lisp/map-ynp.el (map-y-or-n-p): Clarify RET/q in help message.
+
+2005-04-10  Chong Yidong  <cyd@stupidchicken.com>
+
+       * url/url-ldap.el (url-ldap): Add docstring.  Fix call to
+       `ldap-search-internal'.
+
+2005-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * files.el (set-auto-mode-1): Use line-end-position.
+
+       * international/latin-1.el:
+       * international/latin-2.el:
+       * international/latin-3.el:
+       * international/latin-4.el:
+       * international/latin-5.el:
+       * international/latin-8.el:
+       * international/latin-9.el: Give punctuation syntax to NBSP.
+
+       * textmodes/bibtex.el (bibtex-autokey-titleword-ignore)
+       (bibtex-reference-key, bibtex-autokey-demangle-name, bibtex-mode):
+       Use char-classes to accept non-ascii letters, accepted in some recent
+       bibtex implementations.
+
+2005-04-10  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * custom.el (custom-set-minor-mode): Any non-nil value for the
+       variable should enable the mode when set through Custom.
+
+2005-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * progmodes/vhdl-mode.el (vhdl-mode-map-init): Don't override default
+       TAB binding so tab-always-indent is obeyed.
+       (vhdl-minibuffer-local-map): Move initialization into declaration.
+       (vhdl-mode-abbrev-table-init): Mark the abbrevs as `system'.
+       (vhdl-run-when-idle, vhdl-create-mode-menu, vhdl-character-to-event)
+       (vhdl-hooked-abbrev): Avoid test for XEmacs.
+       (vhdl-current-line): Use line-beginning-position.
+       (vhdl-doc-variable, vhdl-doc-mode): Call help-setup-xref before
+       with-output-to-temp-buffer, so the current position can be recorded.
+
+2005-04-10  Masatake YAMATO  <jet@gyve.org>
+
+       * progmodes/compile.el (compilation-error-regexp-alist-alist):
+       Add regexp for gcov.
+
+2005-04-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * calendar/time-date.el (time-to-seconds, seconds-to-time)
+       (days-to-time, time-subtract, time-add): Don't use the #xhhhh
+       syntax which Emacs 20 doesn't support.
+
+2005-04-09  Richard M. Stallman  <rms@gnu.org>
+
+       * help.el (describe-key-briefly, describe-key): Replace
+       strings as event types with "(any string)".
+
+2005-04-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * arc-mode.el (archive-mode-map): Move initialization into
+       the declaration.  Override *all* bindings of `undo'.
+       (archive-lemacs): Remove, use (featurep 'xemacs) instead.
+
+2005-04-09  Jay Belanger  <belanger@truman.edu>
+
+       * calc/calc-units.el (math-standard-units): Redefine Watt hour as W*hr.
+
+2005-04-09  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * term/xterm.el (xterm-rgb-convert-to-16bit): Simplify.
+       (xterm-register-default-colors): Update color values computation
+       to match xterm-200.
+
 2005-04-09  Kenichi Handa  <handa@m17n.org>
 
        * international/code-pages.el (iso-latin-7): Fix the map.
index 3906ebcc23fcea39762c892128866262b84e83b0..cedcbd37a132c65d3c2418da05ba9be0252f43f8 100644 (file)
@@ -1,5 +1,5 @@
 # Maintenance productions for the Lisp directory
-# Copyright (C) 2000, 01, 03, 2004  Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -39,90 +39,6 @@ lisptagsfiles1 = $(lisp)/[a-zA-Z]*.el
 lisptagsfiles2 = $(lisp)/[a-zA-Z]*/[a-zA-Z]*.el
 ETAGS = ../lib-src/etags
 
-# Files which should not be compiled.  If you change the name `DONTCOMPILE'
-# to something different, you'll have to change make-dist as well, and
-# modify the lists in $lisp and $shortlisp on src/Makefile.in.
-#
-# - emacs-lisp/cl-specs.el:  only contains `def-edebug-spec's so there's
-#   no point compiling it, although it doesn't hurt.
-
-DONTCOMPILE = \
-       $(lisp)/charprop.el \
-       $(lisp)/cus-load.el \
-       $(lisp)/emacs-lisp/cl-specs.el \
-       $(lisp)/eshell/esh-maint.el \
-       $(lisp)/eshell/esh-groups.el \
-       $(lisp)/finder-inf.el \
-       $(lisp)/forms-d2.el \
-       $(lisp)/forms-pass.el \
-       $(lisp)/generic-x.el \
-       $(lisp)/international/latin1-disp.el \
-       $(lisp)/international/mule-conf.el \
-       $(lisp)/international/uni-bidi.el \
-       $(lisp)/international/uni-category.el \
-       $(lisp)/international/uni-combining.el \
-       $(lisp)/international/uni-comment.el \
-       $(lisp)/international/uni-decimal.el \
-       $(lisp)/international/uni-decomposition.el \
-       $(lisp)/international/uni-digit.el \
-       $(lisp)/international/uni-lowercase.el \
-       $(lisp)/international/uni-mirrored.el \
-       $(lisp)/international/uni-name.el \
-       $(lisp)/international/uni-numeric.el \
-       $(lisp)/international/uni-old-name.el \
-       $(lisp)/international/uni-titlecase.el \
-       $(lisp)/international/uni-uppercase.el \
-       $(lisp)/language/czech.el \
-       $(lisp)/language/devanagari.el \
-       $(lisp)/language/malayalam.el \
-       $(lisp)/language/tamil.el \
-       $(lisp)/language/kannada.el \
-       $(lisp)/language/english.el \
-       $(lisp)/language/greek.el \
-       $(lisp)/language/hebrew.el \
-       $(lisp)/language/japanese.el \
-       $(lisp)/language/korean.el \
-       $(lisp)/language/lao.el \
-       $(lisp)/language/misc-lang.el \
-       $(lisp)/language/romanian.el \
-       $(lisp)/language/slovak.el \
-       $(lisp)/language/thai.el \
-       $(lisp)/language/utf-8-lang.el \
-       $(lisp)/language/georgian.el \
-       $(lisp)/language/vietnamese.el \
-       $(lisp)/language/cyrillic.el \
-       $(lisp)/language/chinese.el \
-       $(lisp)/language/indian.el \
-       $(lisp)/loaddefs.el \
-       $(lisp)/ldefs-boot.el \
-       $(lisp)/loadup.el \
-       $(lisp)/mail/blessmail.el \
-       $(lisp)/patcomp.el \
-       $(lisp)/paths.el \
-       $(lisp)/play/bruce.el \
-       $(lisp)/subdirs.el \
-       $(lisp)/term/internal.el \
-       $(lisp)/term/AT386.el  \
-       $(lisp)/term/apollo.el \
-       $(lisp)/term/bobcat.el \
-       $(lisp)/term/iris-ansi.el \
-       $(lisp)/term/keyswap.el \
-       $(lisp)/term/linux.el \
-       $(lisp)/term/lk201.el \
-       $(lisp)/term/news.el \
-       $(lisp)/term/vt102.el \
-       $(lisp)/term/vt125.el \
-       $(lisp)/term/vt200.el \
-       $(lisp)/term/vt201.el \
-       $(lisp)/term/vt220.el \
-       $(lisp)/term/vt240.el \
-       $(lisp)/term/vt300.el \
-       $(lisp)/term/vt320.el \
-       $(lisp)/term/vt400.el \
-       $(lisp)/term/vt420.el \
-       $(lisp)/term/wyse50.el \
-       $(lisp)/version.el
-
 # Elisp files auto-generated.
 AUTOGENEL = loaddefs.el \
        cus-load.el \
@@ -205,7 +121,7 @@ updates: update-subdirs autoloads finder-data custom-deps
 # Update the AUTHORS file.
 
 update-authors:
-       $(emacs) -f batch-update-authors $(srcdir)/AUTHORS $(srcdir)
+       $(emacs) -l authors -f batch-update-authors $(srcdir)/AUTHORS $(srcdir)
 
 TAGS: $(lisptagsfiles1) $(lisptagsfiles2)
        els=`echo $(lisptagsfiles1) $(lisptagsfiles2) | sed -e "s,$(lisp)/loaddefs[^ ]*,," -e "s,$(lisp)/ldefs-boot[^ ]*,,"`; \
@@ -220,31 +136,23 @@ TAGS-LISP: $(lisptagsfiles1) $(lisptagsfiles2)
 .el.elc: $(lisp)/subdirs.el
        -$(emacs) -f batch-byte-compile $<
 
-$(DONTCOMPILE:.el=.elc):
-       -rm -f $@
-
-# Compile all Lisp files, except those from DONTCOMPILE,
-# but don't recompile those that are up to date.
+# Compile all Lisp files, but don't recompile those that are up to
+# date.  Some files don't actually get compiled because they set the
+# local variable no-byte-compile.
 
-# All .elc files are made writable
-# before compilation in case we checked out read-only (CVS option -r).
-# Files MUST be compiled one by one.  If we compile several files in a
-# row we can't make sure that the compilation environment is clean.
-# We also set the load-path of the Emacs used for compilation to the
-# current directory and its subdirectories, to make sure require's and
-# load's in the files being compiled find the right files.
-
-# NOTE about DONTCOMPILE: in the `echo <foo> | sort | uniq -u' we pass
-# $(DONTCOMPILE) twice.  This is in case one of the files in DONTCOMPILE
-# is absent.  -stef
+# All .elc files are made writable before compilation in case we
+# checked out read-only (CVS option -r).  Files MUST be compiled one by
+# one.  If we compile several files in a row we can't make sure that
+# the compilation environment is clean.  We also set the load-path of
+# the Emacs used for compilation to the current directory and its
+# subdirectories, to make sure require's and load's in the files being
+# compiled find the right files.
 
 compile: $(lisp)/subdirs.el doit
        find $(lisp) -name "*.elc" -print | xargs chmod +w >/dev/null 2>&1; \
        wd=$(lisp); $(setwins); \
-       elpat=`echo $$wins | tr '       ' '\012\012' | \
+       els=`echo $$wins | tr ' \011' '\012\012' | \
                sed -e 's|\(.\)$$|\1/|' -e 's|^\./||' -e 's|$$|*.el|'`; \
-       els=`echo $$elpat $(DONTCOMPILE) $(DONTCOMPILE) $(COMPILE_FIRST) | \
-               tr '     ' '\012\012' | sort | uniq -u`; \
        for el in $(COMPILE_FIRST) $$els; do \
          if test -f $$el; \
          then \
@@ -253,17 +161,17 @@ compile: $(lisp)/subdirs.el doit
          fi \
        done
 
-# Compile all Lisp files, except those from DONTCOMPILE.  This
-# is like `compile' but compiles files unconditionally.
+# Compile all Lisp files.  This is like `compile' but compiles files
+# unconditionally.  Some files don't actually get compiled because they
+# set the local variable no-byte-compile.
+
 compile-always: $(lisp)/subdirs.el doit
        # `|| true' prevents old Bash versions from getting confused
        # by an error.
        find $(lisp) -name "*.elc" -print | xargs chmod +w >/dev/null 2>&1 || true; \
        wd=$(lisp); $(setwins); \
-       elpat=`echo $$wins | tr '       ' '\012\012' | \
+       els=`echo $$wins | tr ' \011' '\012\012' | \
                sed -e 's|\(.\)$$|\1/|' -e 's|^\./||' -e 's|$$|*.el|'`; \
-       els=`echo $$elpat $(DONTCOMPILE) $(DONTCOMPILE) $(COMPILE_FIRST) | \
-               tr '     ' '\012\012' | sort | uniq -u`; \
        for el in $(COMPILE_FIRST) $$els; do \
          if test -f $$el; \
          then \
index 3580c136948c8db345806c4237647be202a81f7d..aa4249d014ee0f07db4092383a0c026860268be0 100644 (file)
@@ -172,15 +172,18 @@ the ones defined from the buffer now."
    (while (and (not (eobp)) (re-search-forward "^(" nil t))
      (let* ((buf (current-buffer))
            (table (read buf))
-           abbrevs name hook exp count)
+           abbrevs name hook exp count sys)
        (forward-line 1)
        (while (progn (forward-line 1)
                     (not (eolp)))
-        (setq name (read buf) count (read buf) exp (read buf))
+        (setq name (read buf) count (read buf))
+        (if (equal count '(sys))
+            (setq sys t count (read buf)))
+        (setq exp (read buf))
         (skip-chars-backward " \t\n\f")
         (setq hook (if (not (eolp)) (read buf)))
         (skip-chars-backward " \t\n\f")
-        (setq abbrevs (cons (list name exp hook count) abbrevs)))
+        (setq abbrevs (cons (list name exp hook count sys) abbrevs)))
        (define-abbrev-table table abbrevs)))))
 
 (defun read-abbrev-file (&optional file quietly)
index 6c20cf411650e33f99afe87bfdcd960b3ba86cc5..cc8db1e7417ac6c897b2ff916e6726758564f5c8 100644 (file)
@@ -1,6 +1,6 @@
 ;;; arc-mode.el --- simple editing of archives
 
-;; Copyright (C) 1995, 1997, 1998, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 1998, 2003, 2005 Free Software Foundation, Inc.
 
 ;; Author: Morten Welinder <terra@gnu.org>
 ;; Keywords: archives msdog editing major-mode
@@ -330,7 +330,111 @@ Archive and member name will be added."
 (defvar archive-proper-file-start nil "Position of real archive's start.")
 (defvar archive-read-only nil "Non-nil if the archive is read-only on disk.")
 (defvar archive-local-name nil "Name of local copy of remote archive.")
-(defvar archive-mode-map nil "Local keymap for archive mode listings.")
+(defvar archive-mode-map
+  (let ((map (make-keymap)))
+    (suppress-keymap map)
+    (define-key map " " 'archive-next-line)
+    (define-key map "a" 'archive-alternate-display)
+    ;;(define-key map "c" 'archive-copy)
+    (define-key map "d" 'archive-flag-deleted)
+    (define-key map "\C-d" 'archive-flag-deleted)
+    (define-key map "e" 'archive-extract)
+    (define-key map "f" 'archive-extract)
+    (define-key map "\C-m" 'archive-extract)
+    (define-key map "g" 'revert-buffer)
+    (define-key map "h" 'describe-mode)
+    (define-key map "m" 'archive-mark)
+    (define-key map "n" 'archive-next-line)
+    (define-key map "\C-n" 'archive-next-line)
+    (define-key map [down] 'archive-next-line)
+    (define-key map "o" 'archive-extract-other-window)
+    (define-key map "p" 'archive-previous-line)
+    (define-key map "q" 'quit-window)
+    (define-key map "\C-p" 'archive-previous-line)
+    (define-key map [up] 'archive-previous-line)
+    (define-key map "r" 'archive-rename-entry)
+    (define-key map "u" 'archive-unflag)
+    (define-key map "\M-\C-?" 'archive-unmark-all-files)
+    (define-key map "v" 'archive-view)
+    (define-key map "x" 'archive-expunge)
+    (define-key map "\177" 'archive-unflag-backwards)
+    (define-key map "E" 'archive-extract-other-window)
+    (define-key map "M" 'archive-chmod-entry)
+    (define-key map "G" 'archive-chgrp-entry)
+    (define-key map "O" 'archive-chown-entry)
+
+    (if (fboundp 'command-remapping)
+        (progn
+          (define-key map [remap advertised-undo] 'archive-undo)
+          (define-key map [remap undo] 'archive-undo))
+      (substitute-key-definition 'advertised-undo 'archive-undo map global-map)
+      (substitute-key-definition 'undo 'archive-undo map global-map))
+
+    (define-key map
+      (if (featurep 'xemacs) 'button2 [mouse-2]) 'archive-mouse-extract)
+
+    (if (featurep 'xemacs)
+        ()                             ; out of luck
+
+      (define-key map [menu-bar immediate]
+        (cons "Immediate" (make-sparse-keymap "Immediate")))
+      (define-key map [menu-bar immediate alternate]
+        '(menu-item "Alternate Display" archive-alternate-display
+          :enable (boundp (archive-name "alternate-display"))
+          :help "Toggle alternate file info display"))
+      (define-key map [menu-bar immediate view]
+        '(menu-item "View This File" archive-view
+          :help "Display file at cursor in View Mode"))
+      (define-key map [menu-bar immediate display]
+        '(menu-item "Display in Other Window" archive-display-other-window
+          :help "Display file at cursor in another window"))
+      (define-key map [menu-bar immediate find-file-other-window]
+        '(menu-item "Find in Other Window" archive-extract-other-window
+          :help "Edit file at cursor in another window"))
+      (define-key map [menu-bar immediate find-file]
+        '(menu-item "Find This File" archive-extract
+          :help "Extract file at cursor and edit it"))
+
+      (define-key map [menu-bar mark]
+        (cons "Mark" (make-sparse-keymap "Mark")))
+      (define-key map [menu-bar mark unmark-all]
+        '(menu-item "Unmark All" archive-unmark-all-files
+          :help "Unmark all marked files"))
+      (define-key map [menu-bar mark deletion]
+        '(menu-item "Flag" archive-flag-deleted
+          :help "Flag file at cursor for deletion"))
+      (define-key map [menu-bar mark unmark]
+        '(menu-item "Unflag" archive-unflag
+          :help "Unmark file at cursor"))
+      (define-key map [menu-bar mark mark]
+        '(menu-item "Mark" archive-mark
+          :help "Mark file at cursor"))
+
+      (define-key map [menu-bar operate]
+        (cons "Operate" (make-sparse-keymap "Operate")))
+      (define-key map [menu-bar operate chown]
+        '(menu-item "Change Owner..." archive-chown-entry
+          :enable (fboundp (archive-name "chown-entry"))
+          :help "Change owner of marked files"))
+      (define-key map [menu-bar operate chgrp]
+        '(menu-item "Change Group..." archive-chgrp-entry
+          :enable (fboundp (archive-name "chgrp-entry"))
+          :help "Change group ownership of marked files"))
+      (define-key map [menu-bar operate chmod]
+        '(menu-item "Change Mode..." archive-chmod-entry
+          :enable (fboundp (archive-name "chmod-entry"))
+          :help "Change mode (permissions) of marked files"))
+      (define-key map [menu-bar operate rename]
+        '(menu-item "Rename to..." archive-rename-entry
+          :enable (fboundp (archive-name "rename-entry"))
+          :help "Rename marked files"))
+      ;;(define-key map [menu-bar operate copy]
+      ;;  '(menu-item "Copy to..." archive-copy))
+      (define-key map [menu-bar operate expunge]
+        '(menu-item "Expunge Marked Files" archive-expunge
+          :help "Delete all flagged files from archive"))
+      map))
+  "Local keymap for archive mode listings.")
 (defvar archive-file-name-indent nil "Column where file names start.")
 
 (defvar archive-remote nil "Non-nil if the archive is outside file system.")
@@ -362,9 +466,6 @@ Each descriptor is a vector of the form
  [EXT-FILE-NAME INT-FILE-NAME CASE-FIDDLED MODE ...]")
 (make-variable-buffer-local 'archive-files)
 
-(defvar archive-lemacs
-  (string-match "\\(Lucid\\|Xemacs\\)" emacs-version)
-  "*Non-nil when running under under Lucid Emacs or Xemacs.")
 ;; -------------------------------------------------------------------------
 ;; Section: Support functions.
 
@@ -609,116 +710,9 @@ archive.
 ;; -------------------------------------------------------------------------
 ;; Section: Key maps
 
-(if archive-mode-map nil
-  (setq archive-mode-map (make-keymap))
-  (suppress-keymap archive-mode-map)
-  (define-key archive-mode-map " " 'archive-next-line)
-  (define-key archive-mode-map "a" 'archive-alternate-display)
-  ;;(define-key archive-mode-map "c" 'archive-copy)
-  (define-key archive-mode-map "d" 'archive-flag-deleted)
-  (define-key archive-mode-map "\C-d" 'archive-flag-deleted)
-  (define-key archive-mode-map "e" 'archive-extract)
-  (define-key archive-mode-map "f" 'archive-extract)
-  (define-key archive-mode-map "\C-m" 'archive-extract)
-  (define-key archive-mode-map "g" 'revert-buffer)
-  (define-key archive-mode-map "h" 'describe-mode)
-  (define-key archive-mode-map "m" 'archive-mark)
-  (define-key archive-mode-map "n" 'archive-next-line)
-  (define-key archive-mode-map "\C-n" 'archive-next-line)
-  (define-key archive-mode-map [down] 'archive-next-line)
-  (define-key archive-mode-map "o" 'archive-extract-other-window)
-  (define-key archive-mode-map "p" 'archive-previous-line)
-  (define-key archive-mode-map "q" 'quit-window)
-  (define-key archive-mode-map "\C-p" 'archive-previous-line)
-  (define-key archive-mode-map [up] 'archive-previous-line)
-  (define-key archive-mode-map "r" 'archive-rename-entry)
-  (define-key archive-mode-map "u" 'archive-unflag)
-  (define-key archive-mode-map "\M-\C-?" 'archive-unmark-all-files)
-  (define-key archive-mode-map "v" 'archive-view)
-  (define-key archive-mode-map "x" 'archive-expunge)
-  (define-key archive-mode-map "\177" 'archive-unflag-backwards)
-  (define-key archive-mode-map "E" 'archive-extract-other-window)
-  (define-key archive-mode-map "M" 'archive-chmod-entry)
-  (define-key archive-mode-map "G" 'archive-chgrp-entry)
-  (define-key archive-mode-map "O" 'archive-chown-entry)
-
-  (if archive-lemacs
-      (progn
-       ;; Not a nice "solution" but it'll have to do
-       (define-key archive-mode-map "\C-xu" 'archive-undo)
-       (define-key archive-mode-map "\C-_" 'archive-undo))
-    (define-key archive-mode-map [remap advertised-undo] 'archive-undo)
-    (define-key archive-mode-map [remap undo] 'archive-undo))
-
-  (define-key archive-mode-map
-    (if archive-lemacs 'button2 [mouse-2]) 'archive-mouse-extract)
-
-  (if archive-lemacs
-      ()                               ; out of luck
-
-    (define-key archive-mode-map [menu-bar immediate]
-      (cons "Immediate" (make-sparse-keymap "Immediate")))
-    (define-key archive-mode-map [menu-bar immediate alternate]
-      '(menu-item "Alternate Display" archive-alternate-display
-                 :enable (boundp (archive-name "alternate-display"))
-                 :help "Toggle alternate file info display"))
-    (define-key archive-mode-map [menu-bar immediate view]
-      '(menu-item "View This File" archive-view
-                 :help "Display file at cursor in View Mode"))
-    (define-key archive-mode-map [menu-bar immediate display]
-      '(menu-item "Display in Other Window" archive-display-other-window
-                 :help "Display file at cursor in another window"))
-    (define-key archive-mode-map [menu-bar immediate find-file-other-window]
-      '(menu-item "Find in Other Window" archive-extract-other-window
-                 :help "Edit file at cursor in another window"))
-    (define-key archive-mode-map [menu-bar immediate find-file]
-      '(menu-item "Find This File" archive-extract
-                 :help "Extract file at cursor and edit it"))
-
-    (define-key archive-mode-map [menu-bar mark]
-      (cons "Mark" (make-sparse-keymap "Mark")))
-    (define-key archive-mode-map [menu-bar mark unmark-all]
-      '(menu-item "Unmark All" archive-unmark-all-files
-                 :help "Unmark all marked files"))
-    (define-key archive-mode-map [menu-bar mark deletion]
-      '(menu-item "Flag" archive-flag-deleted
-                 :help "Flag file at cursor for deletion"))
-    (define-key archive-mode-map [menu-bar mark unmark]
-      '(menu-item "Unflag" archive-unflag
-                 :help "Unmark file at cursor"))
-    (define-key archive-mode-map [menu-bar mark mark]
-      '(menu-item "Mark" archive-mark
-                 :help "Mark file at cursor"))
-
-    (define-key archive-mode-map [menu-bar operate]
-      (cons "Operate" (make-sparse-keymap "Operate")))
-    (define-key archive-mode-map [menu-bar operate chown]
-      '(menu-item "Change Owner..." archive-chown-entry
-                 :enable (fboundp (archive-name "chown-entry"))
-                 :help "Change owner of marked files"))
-    (define-key archive-mode-map [menu-bar operate chgrp]
-      '(menu-item "Change Group..." archive-chgrp-entry
-                 :enable (fboundp (archive-name "chgrp-entry"))
-                 :help "Change group ownership of marked files"))
-    (define-key archive-mode-map [menu-bar operate chmod]
-      '(menu-item "Change Mode..." archive-chmod-entry
-                 :enable (fboundp (archive-name "chmod-entry"))
-                 :help "Change mode (permissions) of marked files"))
-    (define-key archive-mode-map [menu-bar operate rename]
-      '(menu-item "Rename to..." archive-rename-entry
-                 :enable (fboundp (archive-name "rename-entry"))
-                 :help "Rename marked files"))
-    ;;(define-key archive-mode-map [menu-bar operate copy]
-    ;;  '(menu-item "Copy to..." archive-copy))
-    (define-key archive-mode-map [menu-bar operate expunge]
-      '(menu-item "Expunge Marked Files" archive-expunge
-                 :help "Delete all flagged files from archive"))
-  ))
-
-(let* ((item1 '(archive-subfile-mode " Archive"))
-       (items (list item1)))
+(let ((item1 '(archive-subfile-mode " Archive")))
   (or (member item1 minor-mode-alist)
-      (setq minor-mode-alist (append items minor-mode-alist))))
+      (setq minor-mode-alist (cons item1 minor-mode-alist))))
 ;; -------------------------------------------------------------------------
 (defun archive-find-type ()
   (widen)
@@ -784,7 +778,7 @@ when parsing the archive."
        ;; Using `concat' here copies the text also, so we can add
        ;; properties without problems.
        (let ((text (concat (aref fil 0) "\n")))
-         (if archive-lemacs
+         (if (featurep 'xemacs)
              ()                        ; out of luck
            (add-text-properties
             (aref fil 1) (aref fil 2)
@@ -1825,5 +1819,5 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
 
 (provide 'arc-mode)
 
-;;; arch-tag: e5966a01-35ec-4f27-8095-a043a79b457b
+;; arch-tag: e5966a01-35ec-4f27-8095-a043a79b457b
 ;;; arc-mode.el ends here
index 869896b087aa46ece26184add6fb1e5b01098792..0696f929584aa0b0efbae5ab244c026c4cb63b80 100644 (file)
@@ -1355,7 +1355,9 @@ for a file, defaulting to the file defined by variable
                ((eq 'nospecial bookmark-version-control) version-control)
                (t
                 t))))
-         (write-file file)
+          (condition-case nil
+              (write-file file)
+            (file-error (message "Can't write %s" file)))
          (kill-buffer (current-buffer))
          (if (>= baud-rate 9600)
              (message "Saving bookmarks to file %s...done" file)))))))
index 4b3c284ddada39879e5f7c52325e87026d2b4aba..6c694bc5ba8db1af0a2cd6299d5cc1beb8961eac 100644 (file)
@@ -1,6 +1,6 @@
 ;;; calc-units.el --- unit conversion 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 <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
     ( men     "100/invcm"           "Inverse energy in meters" )
     ( Hzen    "h Hz"                "Energy in Hertz")
     ( Ken     "k K"                 "Energy in Kelvins")
-    ( Wh      "W h"                 "Watt hour")
+    ( Wh      "W hr"                 "Watt hour")
     ( Ws      "W s"                 "Watt second")
 
     ;; Power
index 7160d26ef420c43a497ba4bafa8e7946866db0bf..ddeb33b411aea1b01dece24885a3047dd19b51c8 100644 (file)
@@ -1,5 +1,6 @@
 ;;; time-date.el --- Date and time handling functions
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu Umeda <umerin@mse.kyutech.ac.jp>
@@ -112,15 +113,15 @@ and type 3 is the list (HIGH LOW MICRO)."
   "Convert time value TIME to a floating point number.
 You can use `float-time' instead."
   (with-decoded-time-value ((high low micro time))
-    (+ (* 1.0 high #x10000)
+    (+ (* 1.0 high 65536)
        low
        (/ micro 1000000.0))))
 
 ;;;###autoload
 (defun seconds-to-time (seconds)
   "Convert SECONDS (a floating point number) to a time value."
-  (list (floor seconds #x10000)
-       (floor (mod seconds #x10000))
+  (list (floor seconds 65536)
+       (floor (mod seconds 65536))
        (floor (* (- seconds (ffloor seconds)) 1000000))))
 
 ;;;###autoload
@@ -138,10 +139,10 @@ You can use `float-time' instead."
 (defun days-to-time (days)
   "Convert DAYS into a time value."
   (let* ((seconds (* 1.0 days 60 60 24))
-        (high (condition-case nil (floor (/ seconds #x10000))
+        (high (condition-case nil (floor (/ seconds 65536))
                 (range-error most-positive-fixnum))))
-    (list high (condition-case nil (floor (- seconds (* 1.0 high #x10000)))
-                (range-error #xffff)))))
+    (list high (condition-case nil (floor (- seconds (* 1.0 high 65536)))
+                (range-error 65535)))))
 
 ;;;###autoload
 (defun time-since (time)
@@ -170,7 +171,7 @@ Return the difference in the format of a time value."
            micro (+ micro 1000000)))
     (when (< low 0)
       (setq high (1- high)
-           low (+ low #x10000)))
+           low (+ low 65536)))
     (encode-time-value high low micro type)))
 
 ;;;###autoload
@@ -185,9 +186,9 @@ Return the difference in the format of a time value."
     (when (>= micro 1000000)
       (setq low (1+ low)
            micro (- micro 1000000)))
-    (when (>= low #x10000)
+    (when (>= low 65536)
       (setq high (1+ high)
-           low (- low #x10000)))
+           low (- low 65536)))
     (encode-time-value high low micro type)))
 
 ;;;###autoload
index f3f98b0500ffc93ac578448c20bcdeb36356936f..fe0987e2076de25991009fa2b9c5c9e7f43da351 100644 (file)
@@ -1388,14 +1388,15 @@ Ignore duplicates if `comint-input-ignoredups' is non-nil."
                                  cmd))))
       (ring-insert comint-input-ring cmd)))
 
-(defun comint-send-input (&optional no-newline)
+(defun comint-send-input (&optional no-newline artificial)
   "Send input to process.
 After the process output mark, sends all text from the process mark to
 point as input to the process.  Before the process output mark, calls
 value of variable `comint-get-old-input' to retrieve old input, copies
-it to the process mark, and sends it.  A terminal newline is also
-inserted into the buffer and sent to the process unless NO-NEWLINE is
-non-nil.
+it to the process mark, and sends it.
+
+This command also sends and inserts a final newline, unless
+NO-NEWLINE is non-nil.
 
 Any history reference may be expanded depending on the value of the variable
 `comint-input-autoexpand'.  The list of function names contained in the value
@@ -1409,6 +1410,8 @@ end of line before sending the input.
 After the input has been sent, if `comint-process-echoes' is non-nil,
 then `comint-send-input' waits to see if the process outputs a string
 matching the input, and if so, deletes that part of the output.
+If ARTIFICIAL is non-nil, it inhibits such deletion.
+Callers sending input not from the user should use ARTIFICIAL = t.
 
 The values of `comint-get-old-input', `comint-input-filter-functions', and
 `comint-input-filter' are chosen according to the command interpreter running
@@ -1513,7 +1516,7 @@ Similarly for Soar, Scheme, etc."
            (funcall comint-input-sender proc input))
 
          ;; Optionally delete echoed input (after checking it).
-         (when comint-process-echoes
+         (when (and comint-process-echoes (not artificial))
            (let ((echo-len (- comint-last-input-end
                               comint-last-input-start)))
              ;; Wait for all input to be echoed:
@@ -2088,7 +2091,7 @@ Useful if you accidentally suspend the top-level process."
 This means mark it as if it had been sent as input, without sending it."
   (let ((comint-input-sender 'ignore)
        (comint-input-filter-functions nil))
-    (comint-send-input t))
+    (comint-send-input t t))
   (end-of-line)
   (let ((pos (point))
        (marker (process-mark (get-buffer-process (current-buffer)))))
@@ -2115,7 +2118,7 @@ Sends an EOF only if point is at the end of the buffer and there is no input."
 (defun comint-send-eof ()
   "Send an EOF to the current buffer's process."
   (interactive)
-  (comint-send-input t)
+  (comint-send-input t t)
   (process-send-eof))
 
 
index 8d440be9b392a375019fc80b43840887becbc5cc..93b310fdb172d6181d2d0d1e94126387936ddb90 100644 (file)
   "Input from the menus."
   :group 'environment)
 
+(defgroup dnd nil
+  "Handling data from drag and drop."
+  :group 'environment)
+
 (defgroup auto-save nil
   "Preventing accidential loss of data."
   :group 'files)
index 77b54a109c5395389b448d0ef32770f274e1e1bc..f3cbd1404e91bc2e7bae19af17c47fc9c387ef20 100644 (file)
@@ -287,9 +287,18 @@ The following KEYWORDs are defined:
 
 SPEC should be an alist of the form ((DISPLAY ATTS)...).
 
-The first element of SPEC where the DISPLAY matches the frame
-is the one that takes effect in that frame.  The ATTRs in this
-element take effect; the other elements are ignored, on that frame.
+In the first element, DISPLAY can be :default.  The ATTS in that
+element then act as defaults for all the following elements.
+
+Aside from that, DISPLAY specifies conditions to match some or
+all frames.  For each frame, the first element of SPEC where the
+DISPLAY conditions are satisfied is the one that applies to that
+frame.  The ATTRs in this element take effect, and the following
+elements are ignored, on that frame.
+
+In the last element, DISPLAY can be t.  That element applies to a
+frame if none of the previous elements (except the :default if
+any) did.
 
 ATTS is a list of face attributes followed by their values:
   (ATTR VALUE ATTR VALUE...)
@@ -298,11 +307,12 @@ The possible attributes are `:family', `:width', `:height', `:weight',
 `:slant', `:underline', `:overline', `:strike-through', `:box',
 `:foreground', `:background', `:stipple', `:inverse-video', and `:inherit'.
 
-DISPLAY can either be the symbol t, which will match all frames, or an
-alist of elements of the form \(REQ ITEM...).  For the DISPLAY to match a
-FRAME, each of these elements must be satisfied, meaning that the
-REQ property of the frame must match one of the corresponding ITEMs.
-These are the defined REQ values:
+DISPLAY can be `:default' (only in the first element), the symbol
+t (only in the last element) to match all frames, or an alist of
+conditions of the form \(REQ ITEM...).  For such an alist to
+match a frame, each of the conditions must be satisfied, meaning
+that the REQ property of the frame must match one of the
+corresponding ITEMs.  These are the defined REQ values:
 
 `type' (the value of `window-system')
   Under X, in addition to the values `window-system' can take,
@@ -841,8 +851,8 @@ but if `custom-local-buffer' is non-nil,
 this sets the local binding in that buffer instead."
   (if custom-local-buffer
       (with-current-buffer custom-local-buffer
-       (funcall variable (or value 0)))
-    (funcall variable (or value 0))))
+       (funcall variable (if value 1 0)))
+    (funcall variable (if value 1 0))))
 
 (defun custom-quote (sexp)
   "Quote SEXP iff it is not self quoting."
index d709b9f89e8ef2772bd9f27f50f06f0c280fcff2..474b4f3d9b551f96252c3bef25a4f3e1c90087a5 100644 (file)
@@ -1523,15 +1523,13 @@ Keybindings:
   (setq dired-switches-alist nil)
   (dired-sort-other dired-actual-switches t)
   (run-mode-hooks 'dired-mode-hook)
-  (when (featurep 'x-dnd)
-    (make-variable-buffer-local 'x-dnd-test-function)
-    (make-variable-buffer-local 'x-dnd-protocol-alist)
-    (setq x-dnd-test-function 'dired-dnd-test-function)
-    (setq x-dnd-protocol-alist
+  (when (featurep 'dnd)
+    (make-variable-buffer-local 'dnd-protocol-alist)
+    (setq dnd-protocol-alist
          (append '(("^file:///" . dired-dnd-handle-local-file)
                    ("^file://"  . dired-dnd-handle-file)
                    ("^file:"    . dired-dnd-handle-local-file))
-                 x-dnd-protocol-alist))))
+                 dnd-protocol-alist))))
 \f
 ;; Idiosyncratic dired commands that don't deal with marks.
 
@@ -3136,18 +3134,6 @@ Anything else means ask for each directory."
                 (const :tag "Copy directories without asking" always))
   :group 'dired)
 
-(defun dired-dnd-test-function (window action types)
-  "The test function for drag and drop into dired buffers.
-WINDOW is where the mouse is when this function is called.  It may be a frame
-if the mouse is over the menu bar, scroll bar or tool bar.
-ACTION is the suggested action from the source, and TYPES are the
-types the drop data can have.  This function only accepts drops with
-types in `x-dnd-known-types'.  It returns the action suggested by the source."
-  (let ((type (x-dnd-choose-type types)))
-    (if type
-       (cons action type)
-      nil)))
-
 (defun dired-dnd-popup-notice ()
   (x-popup-dialog
    t
@@ -3176,7 +3162,7 @@ types in `x-dnd-known-types'.  It returns the action suggested by the source."
 URI is the file to handle, ACTION is one of copy, move, link or ask.
 Ask means pop up a menu for the user to select one of copy, move or link."
   (require 'dired-aux)
-  (let* ((from (x-dnd-get-local-file-name uri t))
+  (let* ((from (dnd-get-local-file-name uri t))
         (to (if from (concat (dired-current-directory)
                           (file-name-nondirectory from))
               nil)))
@@ -3214,7 +3200,7 @@ Ask means pop up a menu for the user to select one of copy, move or link."
 URI is the file to handle.  If the hostname in the URI isn't local, do nothing.
 ACTION is one of copy, move, link or ask.
 Ask means pop up a menu for the user to select one of copy, move or link."
-  (let ((local-file (x-dnd-get-local-file-uri uri)))
+  (let ((local-file (dnd-get-local-file-uri uri)))
     (if local-file (dired-dnd-handle-local-file local-file action)
       nil)))
 \f
diff --git a/lisp/dnd.el b/lisp/dnd.el
new file mode 100644 (file)
index 0000000..b6d4d49
--- /dev/null
@@ -0,0 +1,192 @@
+;;; dnd.el --- drag and drop support.
+
+;; Copyright (C) 2005
+;;  Free Software Foundation, Inc.
+
+;; Author: Jan Dj\e,Ad\e(Brv <jan.h.d@swipnet.se>
+;; Maintainer: FSF
+;; Keywords: window, drag, drop
+
+;; 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:
+
+;; This file provides the generic handling of the drop part only.
+;; Different DND backends (X11, W32, etc.) that handle the platform
+;; specific DND parts call the functions here to do final delivery of
+;; a drop.
+
+;;; Code:
+
+;;; Customizable variables
+
+
+(defcustom dnd-protocol-alist
+  '(
+    ("^file:///" . dnd-open-local-file)        ; XDND format.
+    ("^file://"  . dnd-open-file)      ; URL with host
+    ("^file:"    . dnd-open-local-file)        ; Old KDE, Motif, Sun
+    )
+
+  "The functions to call for different protocols when a drop is made.
+This variable is used by `dnd-handle-one-url' and `dnd-handle-file-name'.
+The list contains of (REGEXP . FUNCTION) pairs.
+The functions shall take two arguments, URL, which is the URL dropped and
+ACTION which is the action to be performed for the drop (move, copy, link,
+private or ask).
+If no match is found here, and the value of `browse-url-browser-function'
+is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
+If no match is found, the URL is inserted as text by calling `dnd-insert-text'.
+The function shall return the action done (move, copy, link or private)
+if some action was made, or nil if the URL is ignored."
+  :version "22.1"
+  :type 'alist
+  :group 'dnd)
+
+
+
+(defcustom dnd-open-file-other-window nil
+  "If non-nil, always use find-file-other-window to open dropped files."
+  :version "22.1"
+  :type 'boolean
+  :group 'dnd)
+
+
+;; Functions
+
+(defun dnd-handle-one-url (window action arg)
+  "Handle one dropped url by calling the appropriate handler.
+The handler is first located by looking at `dnd-protocol-alist'.
+If no match is found here, and the value of `browse-url-browser-function'
+is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
+If no match is found, just call `dnd-insert-text'.
+WINDOW is where the drop happend, ACTION is the action for the drop,
+ARG is the URL that has been dropped.
+Returns ACTION."
+  (require 'browse-url)
+  (let* ((uri (replace-regexp-in-string
+              "%[A-Z0-9][A-Z0-9]"
+              (lambda (arg)
+                (format "%c" (string-to-number (substring arg 1) 16)))
+              arg))
+        ret)
+    (or
+     (catch 'done
+       (dolist (bf dnd-protocol-alist)
+        (when (string-match (car bf) uri)
+          (setq ret (funcall (cdr bf) uri action))
+          (throw 'done t)))
+       nil)
+     (when (not (functionp browse-url-browser-function))
+       (catch 'done
+        (dolist (bf browse-url-browser-function)
+          (when (string-match (car bf) uri)
+            (setq ret 'private)
+            (funcall (cdr bf) uri action)
+            (throw 'done t)))
+        nil))
+     (progn
+       (dnd-insert-text window action uri)
+       (setq ret 'private)))
+    ret))
+
+
+(defun dnd-get-local-file-uri (uri)
+  "Return an uri converted to file:/// syntax if uri is a local file.
+Return nil if URI is not a local file."
+
+  ;; The hostname may be our hostname, in that case, convert to a local
+  ;; file.  Otherwise return nil.  TODO:  How about an IP-address as hostname?
+  (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri)
+                     (downcase (match-string 1 uri))))
+       (system-name-no-dot
+        (downcase (if (string-match "^[^\\.]+" system-name)
+                      (match-string 0 system-name)
+                    system-name))))
+    (when (and hostname
+            (or (string-equal "localhost" hostname)
+                (string-equal (downcase system-name) hostname)
+                (string-equal system-name-no-dot hostname)))
+       (concat "file://" (substring uri (+ 7 (length hostname)))))))
+
+(defun dnd-get-local-file-name (uri &optional must-exist)
+  "Return file name converted from file:/// or file: syntax.
+URI is the uri for the file.  If MUST-EXIST is given and non-nil,
+only return non-nil if the file exists.
+Return nil if URI is not a local file."
+  (let ((f (cond ((string-match "^file:///" uri)       ; XDND format.
+                 (substring uri (1- (match-end 0))))
+                ((string-match "^file:" uri)           ; Old KDE, Motif, Sun
+                 (substring uri (match-end 0))))))
+    (when (and f must-exist)
+      (let* ((decoded-f (decode-coding-string
+                        f
+                        (or file-name-coding-system
+                            default-file-name-coding-system)))
+            (try-f (if (file-readable-p decoded-f) decoded-f f)))
+       (when (file-readable-p try-f) try-f)))))
+
+
+(defun dnd-open-local-file (uri action)
+  "Open a local file.
+The file is opened in the current window, or a new window if
+`dnd-open-file-other-window' is set.  URI is the url for the file,
+and must have the format file:file-name or file:///file-name.
+The last / in file:/// is part of the file name.  ACTION is ignored."
+
+  (let* ((f (dnd-get-local-file-name uri t)))
+    (if (and f (file-readable-p f))
+       (progn
+         (if dnd-open-file-other-window
+             (find-file-other-window f)
+           (find-file f))
+         'private)
+      (error "Can not read %s" uri))))
+
+(defun dnd-open-file (uri action)
+  "Open a local or remote file.
+The file is opened in the current window, or a new window if
+`dnd-open-file-other-window' is set.  URI is the url for the file,
+and must have the format file://hostname/file-name.  ACTION is ignored.
+The last / in file://hostname/ is part of the file name."
+
+  ;; The hostname may be our hostname, in that case, convert to a local
+  ;; file.  Otherwise return nil.
+  (let ((local-file (dnd-get-local-file-uri uri)))
+    (if local-file (dnd-open-local-file local-file action)
+      (error "Remote files not supported"))))
+
+
+(defun dnd-insert-text (window action text)
+  "Insert text at point or push to the kill ring if buffer is read only.
+TEXT is the text as a string, WINDOW is the window where the drop happened."
+  (if (or buffer-read-only
+         (not (windowp window)))
+      (progn
+       (kill-new text)
+       (message
+        (substitute-command-keys
+         "The dropped text can be accessed with \\[yank]")))
+    (insert text))
+  action)
+
+
+(provide 'dnd)
+
+;; arch-tag: 0472f6a5-2e8f-4304-9e44-1a0877c771b7
+;;; dnd.el ends here
similarity index 70%
rename from lisp/generic.el
rename to lisp/emacs-lisp/generic.el
index 314a40ea80c9cbf25dff3837951a216911de726a..6851faeddd64a2a1b265e9b38edb042b60e2c596 100644 (file)
 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
-;; Purpose:
-
-;; Meta-mode to create simple major modes
-;; with basic comment and font-lock support
-
 ;;; Commentary:
 
 ;; INTRODUCTION:
-
-;; Generic-mode is a meta-mode which can be used to define small modes
+;;
+;; The macro `define-generic-mode' can be used to define small modes
 ;; which provide basic comment and font-lock support.  These modes are
 ;; intended for the many configuration files and such which are too
 ;; small for a "real" mode, but still have a regular syntax, comment
 ;; more than this, or you find yourself writing extensive customizations,
 ;; perhaps you should be writing a major mode instead!
 ;;
-;; LOCAL VARIABLES:
-;;
-;; To put a file into generic mode using local variables, use a line
-;; like this in a Local Variables block:
+;; EXAMPLE:
 ;;
-;;   mode: default-generic
-;;
-;; Do NOT use "mode: generic"!
-;; See also "AUTOMATICALLY ENTERING GENERIC MODE" below.
-;;
-;; DEFINING NEW GENERIC MODES:
-;;
-;; Use the `define-generic-mode' function to define new modes.
-;; For example:
+;; You can use `define-generic-mode' like this:
 ;;
 ;;   (define-generic-mode 'foo-generic-mode
 ;;     (list ?%)
 ;;     (list "\\.FOO\\'")
 ;;     (list 'foo-setup-function))
 ;;
-;; defines a new generic-mode `foo-generic-mode', which has '%' as a
+;; to define a new generic-mode `foo-generic-mode', which has '%' as a
 ;; comment character, and "keyword" as a keyword.  When files which
 ;; end in '.FOO' are loaded, Emacs will go into foo-generic-mode and
 ;; call foo-setup-function.  You can also use the function
 ;; `foo-generic-mode' (which is interactive) to put a buffer into
 ;; foo-generic-mode.
 ;;
-;; AUTOMATICALLY ENTERING GENERIC MODE:
-;;
-;; Generic-mode provides a hook which automatically puts a file into
-;; default-generic-mode if the first few lines of a file in
-;; fundamental mode start with a hash comment character.  To disable
-;; this functionality, set the variable `generic-use-find-file-hook'
-;; to nil BEFORE loading generic-mode.  See the variables
-;; `generic-lines-to-scan' and `generic-find-file-regexp' for
-;; customization options.
-;;
 ;; GOTCHAS:
 ;;
 ;; Be careful that your font-lock definitions are correct.  Getting
 ;; them wrong can cause Emacs to continually attempt to fontify! This
 ;; problem is not specific to generic-mode.
-;;
 
 ;; Credit for suggestions, brainstorming, help with debugging:
 ;;   ACorreir@pervasive-sw.com (Alfred Correira)
 ;; Extensive cleanup by:
 ;;   Stefan Monnier (monnier+gnu/emacs@flint.cs.yale.edu)
-;;
+
 ;;; Code:
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Do not add entries to this list directly; use `define-generic-mode'
 instead (which see).")
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Customization Variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defgroup generic nil
-  "Define simple major modes with comment and font-lock support."
-  :prefix "generic-"
-  :group 'extensions)
-
-(defcustom generic-use-find-file-hook t
-  "*If non-nil, add a hook to enter `default-generic-mode' automatically.
-This is done if the first few lines of a file in fundamental mode
-start with a hash comment character."
-  :group 'generic
-  :type  'boolean)
-
-(defcustom generic-lines-to-scan 3
-  "*Number of lines that `generic-mode-find-file-hook' looks at.
-Relevant when deciding whether to enter Default-Generic mode automatically.
-This variable should be set to a small positive number."
-  :group 'generic
-  :type  'integer)
-
-(defcustom generic-find-file-regexp "^#"
-  "*Regular expression used by `generic-mode-find-file-hook'.
-Files in fundamental mode whose first few lines contain a match
-for this regexp, should be put into Default-Generic mode instead.
-The number of lines tested for the matches is specified by the
-value of the variable `generic-lines-to-scan', which see."
-  :group 'generic
-  :type  'regexp)
-
-(defcustom generic-ignore-files-regexp "[Tt][Aa][Gg][Ss]\\'"
-  "*Regular expression used by `generic-mode-find-file-hook'.
-Files whose names match this regular expression should not be put
-into Default-Generic mode, even if they have lines which match
-the regexp in `generic-find-file-regexp'.  If the value is nil,
-`generic-mode-find-file-hook' does not check the file names."
-  :group 'generic
-  :type  '(choice (const :tag "Don't check file names" nil) regexp))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Functions
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -290,12 +222,10 @@ See the file generic-x.el for some examples of `define-generic-mode'."
     ;; 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 keyword-list
-            (list (generic-make-keywords-list keyword-list
-                                              font-lock-keyword-face)))
-          font-lock-list))
+    (setq generic-font-lock-keywords font-lock-list)
+    (when keyword-list
+      (push (concat "\\_<" (regexp-opt keyword-list t) "\\_>")
+           generic-font-lock-keywords))
     (setq font-lock-defaults '(generic-font-lock-keywords nil))
 
     ;; Call a list of functions
@@ -391,60 +321,20 @@ Some generic modes are defined in `generic-x.el'."
        '((nil "^\\[\\(.*\\)\\]" 1))
         imenu-case-fold-search t))
 
-;; This generic mode is always defined
-(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
-;; generic-mode on the fly. I think this gives us most of what we
-;; want.
-(defun generic-mode-find-file-hook ()
-  "Hook function to enter Default-Generic mode automatically.
-
-Done if the first few lines of a file in Fundamental mode start
-with a match for the regexp in `generic-find-file-regexp', unless
-the file's name matches the regexp which is the value of the
-variable `generic-ignore-files-regexp'.
-
-This hook will be installed if the variable
-`generic-use-find-file-hook' is non-nil.  The variable
-`generic-lines-to-scan' determines the number of lines to look at."
-  (when (and (eq major-mode 'fundamental-mode)
-            (or (null generic-ignore-files-regexp)
-                (not (string-match
-                      generic-ignore-files-regexp
-                      (file-name-sans-versions buffer-file-name)))))
-    (save-excursion
-      (goto-char (point-min))
-      (when (re-search-forward generic-find-file-regexp
-                              (save-excursion
-                                (forward-line generic-lines-to-scan)
-                                (point)) t)
-       (goto-char (point-min))
-       (default-generic-mode)))))
-
-(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
-INI file.  This hook is NOT installed by default."
-  (and (eq major-mode 'fundamental-mode)
-       (save-excursion
-        (goto-char (point-min))
-        (and (looking-at "^\\s-*\\[.*\\]")
-             (ini-generic-mode)))))
-
-(and generic-use-find-file-hook
-    (add-hook 'find-file-hook 'generic-mode-find-file-hook))
-
 ;;;###autoload
-(defun generic-make-keywords-list (keywords-list face &optional prefix suffix)
-  "Return a regular expression matching the specified KEYWORDS-LIST.
-The regexp is highlighted with FACE."
-  (unless (listp keywords-list)
+(defun generic-make-keywords-list (keyword-list face &optional prefix suffix)
+  "Return a `font-lock-keywords' construct that highlights KEYWORD-LIST.
+KEYWORD-LIST is a list of keyword strings that should be
+highlighted with face FACE.  This function calculates a regular
+expression that matches these keywords and concatenates it with
+PREFIX and SUFFIX.  Then it returns a construct based on this
+regular expression that can be used as an element of
+`font-lock-keywords'."
+  (unless (listp keyword-list)
     (error "Keywords argument must be a list of strings"))
   (list (concat prefix "\\_<"
                ;; Use an optimized regexp.
-               (regexp-opt keywords-list t)
+               (regexp-opt keyword-list t)
                "\\_>" suffix)
        1
        face))
index 1f493e746feec9c530b1d168dce8342d3e3995b3..2eb53a86038226fac4de522b1e4ce58d6e1ebdee 100644 (file)
@@ -200,10 +200,10 @@ Returns the number of actions taken."
                               (concat
                                (format "Type SPC or `y' to %s the current %s;
 DEL or `n' to skip the current %s;
-RET or `q' to exit (skip all remaining %s);
-C-g to quit (cancel the operation);
+RET or `q' to give up on the %s (skip all remaining %s);
+C-g to quit (cancel the whole command);
 ! to %s all remaining %s;\n"
-                                       action object object objects action
+                                       action object object action objects action
                                        objects)
                                (mapconcat (function
                                            (lambda (elt)
index 8852999db2dacd8cd2d47489e431fbd3c3de830b..d267afc741dc54a539803d01947114241b727400 100644 (file)
@@ -384,11 +384,15 @@ and after the region marked by the rectangle to search."
   :type 'boolean
   :group 'cua)
 
-(defface cua-rectangle-face 'nil
+(defface cua-rectangle-face
+  '((default :inherit region)
+    (((class color)) :foreground "white" :background "maroon"))
   "*Font used by CUA for highlighting the rectangle."
   :group 'cua)
 
-(defface cua-rectangle-noselect-face 'nil
+(defface cua-rectangle-noselect-face
+  '((default :inherit region)
+    (((class color)) :foreground "white" :background "dimgray"))
   "*Font used by CUA for highlighting the non-selected rectangle lines."
   :group 'cua)
 
@@ -400,10 +404,9 @@ and after the region marked by the rectangle to search."
   :type 'boolean
   :group 'cua)
 
-(defface cua-global-mark-face '((((class color))
-                                :foreground "black"
-                                :background "yellow")
-                               (t :bold t))
+(defface cua-global-mark-face
+  '((((class color)) :foreground "black" :background "yellow")
+    (t :bold t))
   "*Font used by CUA for highlighting the global mark."
   :group 'cua)
 
index bfb51694db446b888e974ccb60a7753719279ba8..5c24c2dc36f4325c740a33c888e4e510191f923d 100644 (file)
@@ -1402,16 +1402,6 @@ With prefix arg, indent to that column."
   (cua--M/H-key cua--rectangle-keymap key cmd))
 
 (defun cua--init-rectangles ()
-  (unless (face-background 'cua-rectangle-face)
-    (copy-face 'region 'cua-rectangle-face)
-    (set-face-background 'cua-rectangle-face "maroon")
-    (set-face-foreground 'cua-rectangle-face "white"))
-
-  (unless (face-background 'cua-rectangle-noselect-face)
-    (copy-face 'region 'cua-rectangle-noselect-face)
-    (set-face-background 'cua-rectangle-noselect-face "dimgray")
-    (set-face-foreground 'cua-rectangle-noselect-face "white"))
-
   (unless (eq cua-use-hyper-key 'only)
     (define-key cua--rectangle-keymap [(shift return)] 'cua-clear-rectangle-mark)
     (define-key cua--region-keymap    [(shift return)] 'cua-toggle-rectangle-mark))
index 5907ae08bed10e690fdb901553bdc17c901d419a..3b620927d109064519415dd35b1d1d87e62ddedc 100644 (file)
@@ -2016,7 +2016,7 @@ Note: Other faces cannot inherit from the cursor face."
 
 (defface secondary-selection
   '((((class color) (min-colors 88) (background light))
-     :background "yellow")
+     :background "yellow1")
     (((class color) (min-colors 88) (background dark))
      :background "SkyBlue4")
     (((class color) (min-colors 16) (background light))
@@ -2042,9 +2042,9 @@ Note: Other faces cannot inherit from the cursor face."
 
 (defface trailing-whitespace
   '((((class color) (background light))
-     :background "red")
+     :background "red1")
     (((class color) (background dark))
-     :background "red")
+     :background "red1")
     (t :inverse-video t))
   "Basic face for highlighting trailing whitespace."
   :version "21.1"
index eca86c52a794cbdc23330a9d3dbd402b7ded9e1e..d5e98672d27a50d348fde2e14fe94ab0d57800ef 100644 (file)
@@ -2113,22 +2113,19 @@ Otherwise, return nil; point may be changed."
         (setq temp (cdr temp)))
        (not temp))
 
-     (search-forward "-*-" (save-excursion
-                            ;; If the file begins with "#!"
-                            ;; (exec interpreter magic), look
-                            ;; for mode frobs in the first two
-                            ;; lines.  You cannot necessarily
-                            ;; put them in the first line of
-                            ;; such a file without screwing up
-                            ;; the interpreter invocation.
-                            (end-of-line (and (looking-at "^#!") 2))
-                            (point)) t)
+     (search-forward "-*-" (line-end-position
+                            ;; If the file begins with "#!"
+                            ;; (exec interpreter magic), look
+                            ;; for mode frobs in the first two
+                            ;; lines.  You cannot necessarily
+                            ;; put them in the first line of
+                            ;; such a file without screwing up
+                            ;; the interpreter invocation.
+                            (and (looking-at "^#!") 2)) t)
      (progn
        (skip-chars-forward " \t")
        (setq beg (point))
-       (search-forward "-*-"
-                      (save-excursion (end-of-line) (point))
-                      t))
+       (search-forward "-*-" (line-end-position) t))
      (progn
        (forward-char -3)
        (skip-chars-backward " \t")
index 9191c39e553d1ed4f5156281382365f811c7881d..a13103edb3d701eefb6dac6e4f5fc8607ae72750 100644 (file)
 ;; You can also send in new modes; if the file types a reasonably common,
 ;; we would like to install them.
 ;;
+;; DEFAULT GENERIC MODE:
+;;
+;; This file provides a hook which automatically puts a file into
+;; `default-generic-mode' if the first few lines of a file in
+;; fundamental mode start with a hash comment character.  To disable
+;; this functionality, set the variable `generic-use-find-file-hook'
+;; to nil BEFORE loading generic-x.  See the variables
+;; `generic-lines-to-scan' and `generic-find-file-regexp' for
+;; customization options.
+;;
 ;; PROBLEMS WHEN USED WITH FOLDING MODE:
 ;;
 ;; [The following relates to the obsolete selective-display technique.
 (require 'font-lock)
 
 (defgroup generic-x nil
-  "Extra modes for generic mode."
+  "A collection of generic modes."
   :prefix "generic-"
-  :group 'generic
+  :group 'data
   :version "20.3")
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Default-Generic mode
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defcustom generic-use-find-file-hook t
+  "*If non-nil, add a hook to enter `default-generic-mode' automatically.
+This is done if the first few lines of a file in fundamental mode
+start with a hash comment character."
+  :group 'generic-x
+  :type  'boolean)
+
+(defcustom generic-lines-to-scan 3
+  "*Number of lines that `generic-mode-find-file-hook' looks at.
+Relevant when deciding whether to enter Default-Generic mode automatically.
+This variable should be set to a small positive number."
+  :group 'generic-x
+  :type  'integer)
+
+(defcustom generic-find-file-regexp "^#"
+  "*Regular expression used by `generic-mode-find-file-hook'.
+Files in fundamental mode whose first few lines contain a match
+for this regexp, should be put into Default-Generic mode instead.
+The number of lines tested for the matches is specified by the
+value of the variable `generic-lines-to-scan', which see."
+  :group 'generic-x
+  :type  'regexp)
+
+(defcustom generic-ignore-files-regexp "[Tt][Aa][Gg][Ss]\\'"
+  "*Regular expression used by `generic-mode-find-file-hook'.
+Files whose names match this regular expression should not be put
+into Default-Generic mode, even if they have lines which match
+the regexp in `generic-find-file-regexp'.  If the value is nil,
+`generic-mode-find-file-hook' does not check the file names."
+  :group 'generic-x
+  :type  '(choice (const :tag "Don't check file names" nil) regexp))
+
+;; This generic mode is always defined
+(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
+;; generic-mode on the fly. I think this gives us most of what we
+;; want.
+(defun generic-mode-find-file-hook ()
+  "Hook function to enter Default-Generic mode automatically.
+
+Done if the first few lines of a file in Fundamental mode start
+with a match for the regexp in `generic-find-file-regexp', unless
+the file's name matches the regexp which is the value of the
+variable `generic-ignore-files-regexp'.
+
+This hook will be installed if the variable
+`generic-use-find-file-hook' is non-nil.  The variable
+`generic-lines-to-scan' determines the number of lines to look at."
+  (when (and (eq major-mode 'fundamental-mode)
+            (or (null generic-ignore-files-regexp)
+                (not (string-match
+                      generic-ignore-files-regexp
+                      (file-name-sans-versions buffer-file-name)))))
+    (save-excursion
+      (goto-char (point-min))
+      (when (re-search-forward generic-find-file-regexp
+                              (save-excursion
+                                (forward-line generic-lines-to-scan)
+                                (point)) t)
+       (goto-char (point-min))
+       (default-generic-mode)))))
+
+(and generic-use-find-file-hook
+    (add-hook 'find-file-hook 'generic-mode-find-file-hook))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Other Generic modes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 (defcustom generic-extras-enable-list nil
   "*List of generic modes to enable by default.
 Each entry in the list should be a symbol.  The variables
@@ -150,10 +235,6 @@ generic-x to enable the specified modes."
                     etc-fstab-generic-mode)
                   generic-extras-enable-list)))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Generic-modes
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 ;;; Apache
 (when (memq 'apache-conf-generic-mode generic-extras-enable-list)
 
@@ -284,8 +365,21 @@ generic-x to enable the specified modes."
       (setq imenu-generic-expression
            '((nil "^\\[\\(.*\\)\\]" 1)
              ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1))))))
-  "Generic mode for MS-Windows INI files."
-  :group 'generic-x))
+  "Generic mode for MS-Windows INI files.
+You can use `ini-generic-mode-find-file-hook' to enter this mode
+automatically for INI files whose names do not end in \".ini\"."
+  :group 'generic-x)
+
+(defun ini-generic-mode-find-file-hook ()
+  "Hook function to enter Ini-Generic mode automatically for INI files.
+Done if the first few lines of a file in Fundamental mode look
+like an INI file.  You can add this hook to `find-file-hook'."
+  (and (eq major-mode 'fundamental-mode)
+       (save-excursion
+        (goto-char (point-min))
+        (and (looking-at "^\\s-*\\[.*\\]")
+             (ini-generic-mode)))))
+(defalias 'generic-mode-ini-file-find-file-hook 'ini-generic-mode-find-file-hook))
 
 ;;; Windows REG files
 ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
@@ -396,6 +490,7 @@ generic-x to enable the specified modes."
     (compile
      (concat (w32-shell-name) " -c " (buffer-file-name)))))
 
+(eval-when-compile (require 'comint))
 (defun bat-generic-mode-run-as-comint ()
   "Run the current BAT file in a comint buffer."
   (interactive)
@@ -785,7 +880,7 @@ generic-x to enable the specified modes."
      '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
        (1 font-lock-constant-face)
        (2 font-lock-variable-name-face nil t))))
-    '("\\.[rR][cC]$")
+    '("\\.[rR][cC]\\'")
     nil
     "Generic mode for MS-Windows Resource files."
     :group 'generic-x))
@@ -1406,7 +1501,7 @@ generic-x to enable the specified modes."
      (generic-make-keywords-list
       installshield-funarg-constants-list
       font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice?
-  '("\\.[rR][uU][lL]$")
+  '("\\.[rR][uU][lL]\\'")
   '(generic-rul-mode-setup-function)
   "Generic mode for InstallShield RUL files."
   :group 'generic-x)
@@ -1584,8 +1679,8 @@ generic-x to enable the specified modes."
     "auto"
     "ignore")
   '(("^\\([/-A-Za-z0-9_]+\\)\\s-+\\([/-A-Za-z0-9_]+\\)"
-     (1 font-lock-type-face)
-     (2 font-lock-variable-name-face)))
+     (1 font-lock-type-face t)
+     (2 font-lock-variable-name-face t)))
   '("/etc/[v]*fstab\\'")
   (list
    (function
@@ -1667,7 +1762,7 @@ generic-x to enable the specified modes."
   ;; List of additional font-lock-expressions
   '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)
     ("^\\([.A-Za-z0-9]+\\)"                 1 font-lock-variable-name-face))
-  ;; List of additional automode-alist expressions
+  ;; List of additional auto-mode-alist expressions
   nil
   ;; List of set up functions to call
   nil
@@ -1688,7 +1783,7 @@ generic-x to enable the specified modes."
   '("nameserver" "domain" "search" "sortlist" "options")
   ;; List of additional font-lock-expressions
   nil
-  ;; List of additional automode-alist expressions
+  ;; List of additional auto-mode-alist expressions
   '("/etc/resolv[e]?.conf\\'")
   ;; List of set up functions to call
   nil
index d8e1065c610a17ea966ba53b482895001d67bf75..2ec1e0bc62e5b4d785b1000280f4d1842070c0ad 100644 (file)
@@ -1,3 +1,160 @@
+2005-04-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-mime-inline-part): Use mm-string-to-multibyte.
+       * qp.el (quoted-printable-encode-region): Use mm-string-to-multibyte.
+
+2005-04-13  Miles Bader  <miles@gnu.org>
+
+       * mm-util.el (mm-string-to-multibyte): Use Gnus trunk definition.
+
+2005-04-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnrss.el (nnrss-node-text): Replace CRLFs (which might be
+       contained in text because xml.el decodes entities) with LFs.
+
+2005-04-11  Lute Kamstra  <lute@gnu.org>
+
+       * message.el (message-make-date): Handle byte-compiler warnings
+       differently.
+       * nnimap.el (nnimap-date-days-ago): Ditto.
+
+2005-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * mm-util.el (mm-string-to-multibyte): New function.
+       (mm-detect-coding-region): Typo.
+
+2005-04-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-read-summary-keys): Fix misplaced parens.
+
+2005-04-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-util.el (mm-coding-system-p): Don't return binary for the nil
+       argument in XEmacs.
+
+       * nnrss.el (nnrss-compatible-encoding-alist): New variable.
+       (nnrss-request-group): Decode group name first.
+       (nnrss-request-article): Make a text/plain article if mml-to-mime
+       failed.
+       (nnrss-get-encoding): Return a compatible encoding according to
+       nnrss-compatible-encoding-alist.
+       (nnrss-opml-export): Use dolist.
+       (nnrss-find-el): Use consp instead of listp.
+       (nnrss-order-hrefs): Use dolist.
+
+2005-04-06  Arne J\e,Ax\e(Brgensen  <arne@arnested.dk>
+
+       * nnrss.el (nnrss-verbose): Remove.
+       (nnrss-request-group): Use `nnheader-message' instead.
+
+2005-04-06  Mark Plaksin  <happy@usg.edu>  (tiny change)
+
+       * nnrss.el (nnrss-verbose): New variable.
+       (nnrss-request-group): Make it say nnrss is requesting a group.
+
+2005-04-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-agent.el (gnus-agent-group-path): Decode group name.
+       (gnus-agent-group-pathname): Ditto.
+
+       * gnus-cache.el (gnus-cache-file-name): Decode group name.
+
+       * gnus-group.el (gnus-group-line-format-alist): Use decoded group
+       name for only %g and %c.
+       (gnus-group-insert-group-line): Bind gnus-tmp-decoded-group
+       instead of gnus-tmp-group to decoded group name.
+       (gnus-group-make-group): Decode group name.
+       (gnus-group-delete-group): Ditto.
+       (gnus-group-make-rss-group): Exclude `/'s from group names;
+       register the group data after opening the nnrss group; unify
+       non-ASCII group names; encode group name.
+       (gnus-group-catchup-current): Decode group name.
+       (gnus-group-expire-articles-1): Ditto.
+       (gnus-group-set-current-level): Ditto.
+       (gnus-group-kill-group): Ditto.
+
+       * gnus-spec.el (gnus-update-format-specifications): Flush the
+       group format spec cache if it doesn't support decoded group names.
+
+       * mm-url.el (mm-url-predefined-programs): Add --silent arg to curl.
+
+       * nnrss.el: Require rfc2047 and mml.
+       (nnrss-file-coding-system): New variable.
+       (nnrss-format-string): Redefine it as an inline function.
+       (nnrss-decode-group-name): New function.
+       (nnrss-string-as-multibyte): Remove.
+       (nnrss-retrieve-headers): Decode group name; don't use
+       nnrss-format-string.
+       (nnrss-request-group): Decode group name.
+       (nnrss-request-article): Decode group name; allow a Message-ID as
+       well as an article number; don't use nnrss-format-string; encode a
+       Message-ID string which may contain non-ASCII characters; use
+       mml-to-mime to compose a MIME article; use search-forward instead
+       of re-search-forward.
+       (nnrss-request-expire-articles): Decode group name.
+       (nnrss-request-delete-group): Delete entries in nnrss-group-alist
+       as well; decode group name.
+       (nnrss-get-encoding): Fix regexp.
+       (nnrss-fetch): Clarify error message.
+       (nnrss-read-server-data): Use insert-file-contents instead of load;
+       bind file-name-coding-system; use multibyte buffer.
+       (nnrss-save-server-data): Insert newline; bind
+       coding-system-for-write to the value of nnrss-file-coding-system;
+       bind file-name-coding-system; add coding cookie.
+       (nnrss-read-group-data): Use insert-file-contents instead of load;
+       bind file-name-coding-system; use multibyte buffer.
+       (nnrss-save-group-data): Bind coding-system-for-write to the
+       value of nnrss-file-coding-system; bind file-name-coding-system.
+       (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string;
+       make it work with non-ASCII text.
+       (nnrss-opml-export): Use mm-set-buffer-file-coding-system instead
+       of set-buffer-file-coding-system.
+       (nnrss-find-el): Check carefully whether there's a list of string
+       which old xml.el may return rather than a string; make it work
+       with old xml.el as well.
+
+2005-04-06  Tsuyoshi AKIHO  <akiho@kawachi.zaq.ne.jp>
+
+       * gnus-sum.el (gnus-summary-walk-group-buffer): Decode group name.
+
+       * nnrss.el (nnrss-get-encoding): New function.
+       (nnrss-fetch): Use unibyte buffer initially; bind
+       coding-system-for-read while performing mm-url-insert; remove ^Ms;
+       decode contents according to the encoding attribute.
+       (nnrss-save-group-data): Add coding cookie.
+       (nnrss-mime-encode-string): New function.
+       (nnrss-check-group): Use it to encode subject and author.
+
+2005-04-06  Maciek Pasternacki  <maciekp@japhy.fnord.org>  (tiny change)
+
+       * nnrss.el (nnrss-fetch): Signal an error if w3-parse-buffer also
+       failed.
+
+2005-04-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el (mm-subst-char-in-string): Support inplace.
+
+       * nnrss.el: Pedantic docstring and whitespace fixes (courtesy of
+       checkdoc.el).
+       (nnrss-request-article): Cleanup.
+       (nnrss-request-delete-group): Use nnrss-make-filename.
+       (nnrss-read-server-data): Use nnrss-make-filename; use load.
+       (nnrss-save-server-data): Use nnrss-make-filename; use gnus-prin1.
+       (nnrss-read-group-data): Fix off-by-one error.  From Joakim Verona
+       <joakim@verona.se>; hash on description if link is missing; use
+       nnrss-make-filename; use load.
+       (nnrss-save-group-data): Use nnrss-make-filename; use gnus-prin1.
+       (nnrss-make-filename): New function.
+       (nnrss-close): New function.
+       (nnrss-check-group): Hash on description if link is missing.
+       (nnrss-get-namespace-prefix): Use string= to compare strings!
+       Reported by David D. Smith <davidsmith@acm.org>.
+       (nnrss-opml-export): Turn on sgml-mode.
+
+2005-04-06  Mark A. Hershberger  <mah@everybody.org>
+
+       * nnrss.el (nnrss-opml-import, nnrss-opml-export): New functions.
+
 2005-04-04  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * message.el (message-make-date): Add defvars in order to silence
 
 2004-11-26  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * lpath.el: Remove bbdb-create-internal, bbdb-records,
-       spam-BBDB-register-routine and spam-enter-ham-BBDB.
-
        * nnrss.el (nnrss-string-as-multibyte): Redefine it as a macro in
        order to silence the byte compiler.
 
index 9a02f5b38aa80d1c28f874df6e55db99d2ed23af..4236c7958fb8a1a07573a0b666fc9f268753e171 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-agent.el --- unplugged support for Gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -1371,7 +1371,7 @@ downloaded into the agent."
         (nnheader-translate-file-chars
          (nnheader-replace-duplicate-chars-in-string
           (nnheader-replace-chars-in-string
-           (gnus-group-real-name group)
+           (gnus-group-real-name (gnus-group-decoded-name group))
            ?/ ?_)
           ?. ?_)))
   (if (or nnmail-use-long-file-names
@@ -1387,8 +1387,10 @@ downloaded into the agent."
   ;; unplugged.  The agent must, therefore, use the same directory
   ;; while plugged.
   (let ((gnus-command-method (or gnus-command-method
-                                 (gnus-find-method-for-group group))))
-    (nnmail-group-pathname (gnus-group-real-name group) (gnus-agent-directory))))
+                                (gnus-find-method-for-group group))))
+    (nnmail-group-pathname (gnus-group-real-name
+                           (gnus-group-decoded-name group))
+                          (gnus-agent-directory))))
 
 (defun gnus-agent-get-function (method)
   (if (gnus-online method)
index 9d09e58fd3160eae2014646525d68a152f62f7fd..30ac3c6ccd8cf32eaf2215aa5d8971b6f9c948a7 100644 (file)
@@ -4358,21 +4358,16 @@ are decompressed."
                    (mm-read-coding-system "Charset: "))))
         (t
          (if (mm-handle-undisplayer handle)
-             (mm-remove-part handle))
-         (setq contents
-               (if (fboundp 'string-to-multibyte)
-                   (string-to-multibyte contents)
-                 (mapconcat
-                  (lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
-                  contents "")))))
+             (mm-remove-part handle))))
        (forward-line 2)
-       (mm-insert-inline handle
-                         (if (and charset
-                                  (setq charset (mm-charset-to-coding-system
-                                                 charset))
-                                  (not (eq charset 'ascii)))
-                             (mm-decode-coding-string contents charset)
-                           contents))
+       (mm-insert-inline
+        handle
+        (if (and charset
+                 (setq charset (mm-charset-to-coding-system
+                                charset))
+                 (not (eq charset 'ascii)))
+            (mm-decode-coding-string contents charset)
+          (mm-string-to-multibyte contents)))
        (goto-char b)))))
 
 (defun gnus-mime-view-part-as-charset (&optional handle arg)
@@ -5309,7 +5304,7 @@ not have a face in `gnus-article-boring-faces'."
              (when (eq win (selected-window))
                (setq new-sum-point (point)
                      new-sum-start (window-start win)
-                     new-sum-hscroll (window-hscroll win))
+                     new-sum-hscroll (window-hscroll win)))
              (when (eq in-buffer (current-buffer))
                (setq selected (gnus-summary-select-article))
                (set-buffer obuf)
@@ -5325,7 +5320,7 @@ not have a face in `gnus-article-boring-faces'."
                           new-sum-point)
                  (set-window-point win new-sum-point)
                  (set-window-start win new-sum-start)
-                 (set-window-hscroll win new-sum-hscroll)))))
+                 (set-window-hscroll win new-sum-hscroll))))
          (set-window-configuration owin)
          (ding))))))
 
index 8f2b491f5a4a49319e13ddc6373e1cf260fb8cbf..657ade9816762cf2ba02941a14fe407e8f27fd2e 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-cache.el --- cache interface for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;;        Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -421,6 +421,7 @@ Returns the list of articles removed."
       (and (not unread) (not ticked) (not dormant) (memq 'read class))))
 
 (defun gnus-cache-file-name (group article)
+  (setq group (gnus-group-decoded-name group))
   (expand-file-name
    (if (stringp article) article (int-to-string article))
    (file-name-as-directory
index 6d38626998c367c354c2a478dc17b73457c85863..30b7fe68dd13e78101cf88c63c99327fb2b79f7d 100644 (file)
@@ -482,9 +482,15 @@ simple manner.")
     (?T (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))) ?d)
     (?i (+ (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked)))
           (gnus-range-length (cdr (assq 'tick gnus-tmp-marked)))) ?d)
-    (?g gnus-tmp-group ?s)
+    (?g (if (boundp 'gnus-tmp-decoded-group)
+           gnus-tmp-decoded-group
+         gnus-tmp-group)
+       ?s)
     (?G gnus-tmp-qualified-group ?s)
-    (?c (gnus-short-group-name gnus-tmp-group) ?s)
+    (?c (gnus-short-group-name (if (boundp 'gnus-tmp-decoded-group)
+                                  gnus-tmp-decoded-group
+                                gnus-tmp-group))
+       ?s)
     (?C gnus-tmp-comment ?s)
     (?D gnus-tmp-newsgroup-description ?s)
     (?o gnus-tmp-moderated ?c)
@@ -1441,8 +1447,8 @@ if it is a string, only list groups matching REGEXP."
      (point)
      (prog1 (1+ (point))
        ;; Insert the text.
-       (let ((gnus-tmp-group (gnus-group-name-decode
-                             gnus-tmp-group group-name-charset)))
+       (let ((gnus-tmp-decoded-group (gnus-group-name-decode
+                                     gnus-tmp-group group-name-charset)))
         (eval gnus-group-line-format-spec)))
      `(gnus-group ,(gnus-intern-safe gnus-tmp-group gnus-active-hashtb)
                  gnus-unread ,(if (numberp number)
@@ -2244,7 +2250,7 @@ ADDRESS."
         (nname (if method (gnus-group-prefixed-name name meth) name))
         backend info)
     (when (gnus-gethash nname gnus-newsrc-hashtb)
-      (error "Group %s already exists" nname))
+      (error "Group %s already exists" (gnus-group-decoded-name nname)))
     ;; Subscribe to the new group.
     (gnus-group-change-level
      (setq info (list t nname gnus-level-default-subscribed nil nil meth))
@@ -2305,20 +2311,21 @@ be removed from the server, even when it's empty."
   (unless (gnus-check-backend-function 'request-delete-group group)
     (error "This back end does not support group deletion"))
   (prog1
-      (if (and (not no-prompt)
-              (not (gnus-yes-or-no-p
-                    (format
-                     "Do you really want to delete %s%s? "
-                     group (if force " and all its contents" "")))))
-         ()                            ; Whew!
-       (gnus-message 6 "Deleting group %s..." group)
-       (if (not (gnus-request-delete-group group force))
-           (gnus-error 3 "Couldn't delete group %s" group)
-         (gnus-message 6 "Deleting group %s...done" group)
-         (gnus-group-goto-group group)
-         (gnus-group-kill-group 1 t)
-         (gnus-sethash group nil gnus-active-hashtb)
-         t))
+      (let ((group-decoded (gnus-group-decoded-name group)))
+       (if (and (not no-prompt)
+                (not (gnus-yes-or-no-p
+                      (format
+                       "Do you really want to delete %s%s? "
+                       group-decoded (if force " and all its contents" "")))))
+           ()                          ; Whew!
+         (gnus-message 6 "Deleting group %s..." group-decoded)
+         (if (not (gnus-request-delete-group group force))
+             (gnus-error 3 "Couldn't delete group %s" group-decoded)
+           (gnus-message 6 "Deleting group %s...done" group-decoded)
+           (gnus-group-goto-group group)
+           (gnus-group-kill-group 1 t)
+           (gnus-sethash group nil gnus-active-hashtb)
+           t)))
     (gnus-group-position-point)))
 
 (defun gnus-group-rename-group (group new-name)
@@ -2588,16 +2595,26 @@ If there is, use Gnus to create an nnrss group"
       (setq url (read-from-minibuffer "URL to Search for RSS: ")))
   (let ((feedinfo (nnrss-discover-feed url)))
     (if feedinfo
-       (let ((title (read-from-minibuffer "Title: "
-                                          (cdr (assoc 'title
-                                                      feedinfo))))
+       (let ((title (gnus-newsgroup-savable-name
+                     (read-from-minibuffer "Title: "
+                                           (gnus-newsgroup-savable-name
+                                            (or (cdr (assoc 'title
+                                                            feedinfo))
+                                                "")))))
              (desc  (read-from-minibuffer "Description: "
                                           (cdr (assoc 'description
                                                       feedinfo))))
-             (href (cdr (assoc 'href feedinfo))))
-         (push (list title href desc)
-               nnrss-group-alist)
-         (gnus-group-make-group title '(nnrss ""))
+             (href (cdr (assoc 'href feedinfo)))
+             (encodable (mm-coding-system-p 'utf-8)))
+         (when encodable
+           ;; Unify non-ASCII text.
+           (setq title (mm-decode-coding-string
+                        (mm-encode-coding-string title 'utf-8) 'utf-8)))
+         (gnus-group-make-group (if encodable
+                                    (mm-encode-coding-string title 'utf-8)
+                                  title)
+                                '(nnrss ""))
+         (push (list title href desc) nnrss-group-alist)
          (nnrss-save-server-data nil))
       (error "No feeds found for %s" url))))
 
@@ -3101,7 +3118,7 @@ up is returned."
                   "Do you really want to mark all articles in %s as read? "
                 "Mark all unread articles in %s as read? ")
               (if (= (length groups) 1)
-                  (car groups)
+                  (gnus-group-decoded-name (car groups))
                 (format "these %d groups" (length groups)))))))
        n
       (while (setq group (pop groups))
@@ -3179,7 +3196,8 @@ Uses the process/prefix convention."
 
 (defun gnus-group-expire-articles-1 (group)
   (when (gnus-check-backend-function 'request-expire-articles group)
-    (gnus-message 6 "Expiring articles in %s..." group)
+    (gnus-message 6 "Expiring articles in %s..."
+                 (gnus-group-decoded-name group))
     (let* ((info (gnus-get-info group))
           (expirable (if (gnus-group-total-expirable-p group)
                          (cons nil (gnus-list-of-read-articles group))
@@ -3204,7 +3222,8 @@ Uses the process/prefix convention."
            (gnus-request-expire-articles
             (gnus-uncompress-sequence (cdr expirable)) group))))
        (gnus-close-group group))
-      (gnus-message 6 "Expiring articles in %s...done" group)
+      (gnus-message 6 "Expiring articles in %s...done"
+                   (gnus-group-decoded-name group))
       ;; Return the list of un-expired articles.
       (cdr expirable))))
 
@@ -3243,7 +3262,8 @@ Uses the process/prefix convention."
     (while (setq group (pop groups))
       (gnus-group-remove-mark group)
       (gnus-message 6 "Changed level of %s from %d to %d"
-                   group (or (gnus-group-group-level) gnus-level-killed)
+                   (gnus-group-decoded-name group)
+                   (or (gnus-group-group-level) gnus-level-killed)
                    level)
       (gnus-group-change-level
        group level (or (gnus-group-group-level) gnus-level-killed))
@@ -3392,7 +3412,7 @@ of groups killed."
                  gnus-list-of-killed-groups))
          (gnus-group-change-level
           (if entry entry group) gnus-level-killed (if entry nil level))
-         (message "Killed group %s" group))
+         (message "Killed group %s" (gnus-group-decoded-name group)))
       ;; If there are lots and lots of groups to be killed, we use
       ;; this thing instead.
       (dolist (group (nreverse groups))
index ff924139672dc58a518d129175fae2ad2756ca1c..ef1c43167f51c226ba1e636aae824a09e63eebfb 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-spec.el --- format spec functions for Gnus
-;; 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.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -196,6 +196,13 @@ Return a list of updated types."
            (not (equal emacs-version
                        (cdr (assq 'version gnus-format-specs)))))
     (setq gnus-format-specs nil))
+  ;; Flush the group format spec cache if it doesn't support decoded
+  ;; group names.
+  (when (memq 'group types)
+    (let ((spec (assq 'group gnus-format-specs)))
+      (unless (string-match " gnus-tmp-decoded-group[ )]"
+                           (gnus-prin1-to-string (nth 2 spec)))
+       (setq gnus-format-specs (delq spec gnus-format-specs)))))
 
   ;; Go through all the formats and see whether they need updating.
   (let (new-format entry type val updated)
index 8d6a5f951b5a708687b603b00b9a57677a8a396f..17cb1ea2a6b52345e548a7fa3f6a2db63ac6f94c 100644 (file)
@@ -7254,11 +7254,12 @@ If BACKWARD, the previous article is selected instead of the next."
             (if (and group
                      (not (gnus-ephemeral-group-p gnus-newsgroup-name)))
                 (format " (Type %s for %s [%s])"
-                        (single-key-description cmd) group
+                        (single-key-description cmd)
+                        (gnus-group-decoded-name group)
                         (car (gnus-gethash group gnus-newsrc-hashtb)))
               (format " (Type %s to exit %s)"
                       (single-key-description cmd)
-                      gnus-newsgroup-name))))
+                      (gnus-group-decoded-name gnus-newsgroup-name)))))
       ;; Confirm auto selection.
       (setq key (car (setq keve (gnus-read-event-char prompt)))
            ended t)
index 4613bef6af75dee32c106e1faf0f7ce640b26def..b743417f4f20a5692c1f5f1f759afe1c0366cfc0 100644 (file)
@@ -4564,12 +4564,11 @@ Otherwise, generate and save a value for `canlock-password' first."
        (when (re-search-forward ",+$" nil t)
          (replace-match "" t t))))))
 
+(eval-when-compile (require 'parse-time))
 (defun message-make-date (&optional now)
   "Make a valid data header.
 If NOW, use that time instead."
   (require 'parse-time)
-  (defvar parse-time-weekdays)
-  (defvar parse-time-months)
   (let* ((now (or now (current-time)))
         (zone (nth 8 (decode-time now)))
         (sign "+"))
index a66c03908eb652b9aede83038f099adbc55b47bd..ff7608e4a242fd42d15cef714baf6b687023d5b9 100644 (file)
@@ -59,7 +59,7 @@
   '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-")
     (w3m  "w3m" "-dump_source")
     (lynx "lynx" "-source")
-    (curl "curl")))
+    (curl "curl" "--silent")))
 
 (defcustom mm-url-program
   (cond
index 2a689221f7eca4f611c458b7cb4e2b1d4bbec854..7cb3201f76f8e86425b3050f0a5d25c5aeb6d8be 100644 (file)
                    mm-mime-mule-charset-alist)
            nil t))))
      (subst-char-in-string
-      . (lambda (from to string) ;; stolen (and renamed) from nnheader.el
-         "Replace characters in STRING from FROM to TO."
-         (let ((string (substring string 0)) ;Copy string.
+      . (lambda (from to string &optional inplace)
+         ;; stolen (and renamed) from nnheader.el
+         "Replace characters in STRING from FROM to TO.
+         Unless optional argument INPLACE is non-nil, return a new string."
+         (let ((string (if inplace string (copy-sequence string)))
                (len (length string))
                (idx 0))
            ;; Replace all occurrences of FROM with TO.
            string)))
      (string-as-unibyte . identity)
      (string-make-unibyte . identity)
+     ;; string-as-multibyte often doesn't really do what you think it does.
+     ;; Example:
+     ;;    (aref (string-as-multibyte "\201") 0) -> 129 (aka ?\201)
+     ;;    (aref (string-as-multibyte "\300") 0) -> 192 (aka ?\300)
+     ;;    (aref (string-as-multibyte "\300\201") 0) -> 192 (aka ?\300)
+     ;;    (aref (string-as-multibyte "\300\201") 1) -> 129 (aka ?\201)
+     ;; but
+     ;;    (aref (string-as-multibyte "\201\300") 0) -> 2240
+     ;;    (aref (string-as-multibyte "\201\300") 1) -> <error>
+     ;; Better use string-to-multibyte or encode-coding-string.
+     ;; If you really need string-as-multibyte somewhere it's usually
+     ;; because you're using the internal emacs-mule representation (maybe
+     ;; because you're using string-as-unibyte somewhere), which is
+     ;; generally a problem in itself.
+     ;; Here is an approximate equivalence table to help think about it:
+     ;; (string-as-multibyte s)   ~= (decode-coding-string s 'emacs-mule)
+     ;; (string-to-multibyte s)   ~= (decode-coding-string s 'binary)
+     ;; (string-make-multibyte s) ~= (decode-coding-string s locale-coding-system)
      (string-as-multibyte . identity)
+     (string-to-multibyte
+      . (lambda (string)
+         "Return a multibyte string with the same individual chars as string."
+         (mapconcat
+          (lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
+          string "")))
      (multibyte-string-p . ignore)
      ;; It is not a MIME function, but some MIME functions use it.
      (make-temp-file . (lambda (prefix &optional dir-flag)
@@ -153,7 +179,7 @@ In XEmacs, also return non-nil if CS is a coding system object.
 If CS is available, return CS itself in Emacs, and return a coding
 system object in XEmacs."
   (if (fboundp 'find-coding-system)
-      (find-coding-system cs)
+      (and cs (find-coding-system cs))
     (if (fboundp 'coding-system-p)
        (when (coding-system-p cs)
          cs)
@@ -878,7 +904,7 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
     (defun mm-detect-coding-region (start end)
       "Like `detect-coding-region' except returning the best one."
       (let ((coding-systems
-            (detect-coding-region (point) (point-max))))
+            (detect-coding-region start end)))
        (or (car-safe coding-systems)
            coding-systems)))
   (defun mm-detect-coding-region (start end)
@@ -902,5 +928,5 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
 
 (provide 'mm-util)
 
-;;; arch-tag: 94dc5388-825d-4fd1-bfa5-2100aa351238
+;; arch-tag: 94dc5388-825d-4fd1-bfa5-2100aa351238
 ;;; mm-util.el ends here
index d7cec7a864f420ff91bb8b60324095c100db42b6..31d96cdd37594c2c7a24c4f789e3afd1e3361753 100644 (file)
@@ -1386,10 +1386,10 @@ function is generally only called when Gnus is shutting down."
        (list (- ms 1) (+ (expt 2 16) ls))
       (list ms ls))))
 
+(eval-when-compile (require 'parse-time))
 (defun nnimap-date-days-ago (daysago)
   "Return date, in format \"3-Aug-1998\", for DAYSAGO days ago."
   (require 'parse-time)
-  (defvar parse-time-months)
   (let* ((time (nnimap-time-substract (current-time) (days-to-time daysago)))
         (date (format-time-string
                (format "%%d-%s-%%Y"
index 6ff2b46722e00d17e6be980a670feb26374de0fb..04bebec79a6b9e087f498f35498f73b18ab0ce98 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnrss.el --- interfacing with RSS
-;; Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: RSS
 (require 'time-date)
 (require 'rfc2231)
 (require 'mm-url)
+(require 'rfc2047)
+(require 'mml)
 (eval-when-compile
   (ignore-errors
-    (require 'xml)))
+   (require 'xml)))
 (eval '(require 'xml))
 
 (nnoo-declare nnrss)
@@ -75,20 +77,32 @@ To use the description in headers, put this name into `nnmail-extra-headers'.")
 (defvar nnrss-content-function nil
   "A function which is called in `nnrss-request-article'.
 The arguments are (ENTRY GROUP ARTICLE).
-ENTRY is the record of the current headline. GROUP is the group name.
+ENTRY is the record of the current headline.  GROUP is the group name.
 ARTICLE is the article number of the current headline.")
 
+(defvar nnrss-file-coding-system mm-universal-coding-system
+  "Coding system used when reading and writing files.")
+
+(defvar nnrss-compatible-encoding-alist '((iso-8859-1 . windows-1252))
+  "Alist of encodings and those supersets.
+The cdr of each element is used to decode data if it is available when
+the car is what the data specify as the encoding. Or, the car is used
+for decoding when the cdr that the data specify is not available.")
+
 (nnoo-define-basics nnrss)
 
 ;;; Interface functions
 
-(eval-when-compile
-  (defmacro nnrss-string-as-multibyte (string)
-    (if (featurep 'xemacs)
-       string
-      `(string-as-multibyte ,string))))
+(defsubst nnrss-format-string (string)
+  (gnus-replace-in-string string " *\n *" " "))
+
+(defun nnrss-decode-group-name (group)
+  (if (and group (mm-coding-system-p 'utf-8))
+      (setq group (mm-decode-coding-string group 'utf-8))
+    group))
 
 (deffoo nnrss-retrieve-headers (articles &optional group server fetch-old)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
   (let (e)
     (save-excursion
@@ -97,21 +111,26 @@ ARTICLE is the article number of the current headline.")
       (dolist (article articles)
        (if (setq e (assq article nnrss-group-data))
            (insert (number-to-string (car e)) "\t" ;; number
-                   (if (nth 3 e)
-                       (nnrss-format-string (nth 3 e)) "")
-                   "\t" ;; subject
-                   (if (nth 4 e)
-                       (nnrss-format-string (nth 4 e))
-                     "(nobody)")
-                   "\t" ;;from
+                   ;; subject
+                   (or (nth 3 e) "")
+                   "\t"
+                   ;; from
+                   (or (nth 4 e) "(nobody)")
+                   "\t"
+                   ;; date
                    (or (nth 5 e) "")
-                   "\t" ;; date
+                   "\t"
+                   ;; id
                    (format "<%d@%s.nnrss>" (car e) group)
-                   "\t" ;; id
-                   "\t" ;; refs
-                   "-1" "\t" ;; chars
-                   "-1" "\t" ;; lines
-                   "" "\t" ;; Xref
+                   "\t"
+                   ;; refs
+                   "\t"
+                   ;; chars
+                   "-1" "\t"
+                   ;; lines
+                   "-1" "\t"
+                   ;; Xref
+                   "" "\t"
                    (if (and (nth 6 e)
                             (memq nnrss-description-field
                                   nnmail-extra-headers))
@@ -132,69 +151,102 @@ ARTICLE is the article number of the current headline.")
   'nov)
 
 (deffoo nnrss-request-group (group &optional server dont-check)
+  (setq group (nnrss-decode-group-name group))
+  (nnheader-message 6 "nnrss: Requesting %s..." group)
   (nnrss-possibly-change-group group server)
-  (if dont-check
-      t
-    (nnrss-check-group group server)
-    (nnheader-report 'nnrss "Opened group %s" group)
-    (nnheader-insert
-     "211 %d %d %d %s\n" nnrss-group-max nnrss-group-min nnrss-group-max
-     (prin1-to-string group)
-     t)))
+  (prog1
+      (if dont-check
+         t
+       (nnrss-check-group group server)
+       (nnheader-report 'nnrss "Opened group %s" group)
+       (nnheader-insert
+        "211 %d %d %d %s\n" nnrss-group-max nnrss-group-min nnrss-group-max
+        (prin1-to-string group)
+        t))
+    (nnheader-message 6 "nnrss: Requesting %s...done" group)))
 
 (deffoo nnrss-close-group (group &optional server)
   t)
 
 (deffoo nnrss-request-article (article &optional group server buffer)
+  (setq group (nnrss-decode-group-name group))
+  (when (stringp article)
+    (setq article (if (string-match "\\`<\\([0-9]+\\)@" article)
+                     (string-to-number (match-string 1 article))
+                   0)))
   (nnrss-possibly-change-group group server)
   (let ((e (assq article nnrss-group-data))
-       (boundary "=-=-=-=-=-=-=-=-=-")
        (nntp-server-buffer (or buffer nntp-server-buffer))
        post err)
     (when e
-      (catch 'error
-       (with-current-buffer nntp-server-buffer
-         (erase-buffer)
-         (goto-char (point-min))
-         (insert "Mime-Version: 1.0\nContent-Type: multipart/alternative; boundary=\"" boundary "\"\n")
-         (if group
-             (insert "Newsgroups: " group "\n"))
-         (if (nth 3 e)
-             (insert "Subject: " (nnrss-format-string (nth 3 e)) "\n"))
-         (if (nth 4 e)
-             (insert "From: " (nnrss-format-string (nth 4 e)) "\n"))
-         (if (nth 5 e)
-             (insert "Date: " (nnrss-format-string (nth 5 e)) "\n"))
-         (insert "Message-ID: " (format "<%d@%s.nnrss>" (car e) group) "\n")
-         (insert "\n")
-         (let ((text (if (nth 6 e)
-                         (nnrss-string-as-multibyte (nth 6 e))))
-               (link (if (nth 2 e)
-                         (nth 2 e))))
-           (insert "\n\n--" boundary "\nContent-Type: text/plain\n\n")
-           (let ((point (point)))
-             (if text
-                 (progn (insert text)
-                        (goto-char point)
-                        (while (re-search-forward "\n" nil t)
-                          (replace-match " "))
-                        (goto-char (point-max))
-                        (insert "\n\n")))
-             (if link
-                 (insert link)))
-           (insert "\n\n--" boundary "\nContent-Type: text/html\n\n")
-           (let ((point (point)))
-             (if text
-                 (progn (insert "<html><head></head><body>\n" text "\n</body></html>")
-                        (goto-char point)
-                        (while (re-search-forward "\n" nil t)
-                          (replace-match " "))
-                        (goto-char (point-max))
-                        (insert "\n\n")))
-             (if link
-                 (insert "<p><a href=\"" link "\">link</a></p>\n"))))
-         (if nnrss-content-function
-             (funcall nnrss-content-function e group article)))))
+      (with-current-buffer nntp-server-buffer
+       (erase-buffer)
+       (if group
+           (insert "Newsgroups: " group "\n"))
+       (if (nth 3 e)
+           (insert "Subject: " (nth 3 e) "\n"))
+       (if (nth 4 e)
+           (insert "From: " (nth 4 e) "\n"))
+       (if (nth 5 e)
+           (insert "Date: " (nnrss-format-string (nth 5 e)) "\n"))
+       (let ((header (buffer-string))
+             (text (if (nth 6 e)
+                       (mapconcat 'identity
+                                  (delete "" (split-string (nth 6 e) "\n+"))
+                                  " ")))
+             (link (nth 2 e))
+             ;; Enable encoding of Newsgroups header in XEmacs.
+             (default-enable-multibyte-characters t)
+             (rfc2047-header-encoding-alist
+              (if (mm-coding-system-p 'utf-8)
+                  (cons '("Newsgroups" . utf-8)
+                        rfc2047-header-encoding-alist)
+                rfc2047-header-encoding-alist))
+             rfc2047-encode-encoded-words body)
+         (when (or text link)
+           (insert "\n")
+           (insert "<#multipart type=alternative>\n"
+                   "<#part type=\"text/plain\">\n")
+           (setq body (point))
+           (if text
+               (progn
+                 (insert text "\n")
+                 (when link
+                   (insert "\n" link "\n")))
+             (when link
+               (insert link "\n")))
+           (setq body (buffer-substring body (point)))
+           (insert "<#/part>\n"
+                   "<#part type=\"text/html\">\n"
+                   "<html><head></head><body>\n")
+           (when text
+             (insert text "\n"))
+           (when link
+             (insert "<p><a href=\"" link "\">link</a></p>\n"))
+           (insert "</body></html>\n"
+                   "<#/part>\n"
+                   "<#/multipart>\n"))
+         (condition-case nil
+             (mml-to-mime)
+           (error
+            (erase-buffer)
+            (insert header
+                    "Content-Type: text/plain; charset=gnus-decoded\n"
+                    "Content-Transfer-Encoding: 8bit\n\n"
+                    body)
+            (nnheader-message
+             3 "Warning - there might be invalid characters"))))
+       (goto-char (point-min))
+       (search-forward "\n\n")
+       (forward-line -1)
+       (insert (format "Message-ID: <%d@%s.nnrss>\n"
+                       (car e)
+                       (let ((rfc2047-encoding-type 'mime)
+                             rfc2047-encode-max-chars)
+                         (rfc2047-encode-string
+                          (gnus-replace-in-string group "[\t\n ]+" "_")))))
+       (when nnrss-content-function
+         (funcall nnrss-content-function e group article))))
     (cond
      (err
       (nnheader-report 'nnrss err))
@@ -217,6 +269,7 @@ ARTICLE is the article number of the current headline.")
 
 (deffoo nnrss-request-expire-articles
     (articles group &optional server force)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
   (let (e days not-expirable changed)
     (dolist (art articles)
@@ -234,18 +287,18 @@ ARTICLE is the article number of the current headline.")
     not-expirable))
 
 (deffoo nnrss-request-delete-group (group &optional force server)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
+  (let (elem)
+    ;; There may be two or more entries in `nnrss-group-alist' since
+    ;; this function didn't delete them formerly.
+    (while (setq elem (assoc group nnrss-group-alist))
+      (setq nnrss-group-alist (delq elem nnrss-group-alist))))
   (setq nnrss-server-data
        (delq (assoc group nnrss-server-data) nnrss-server-data))
   (nnrss-save-server-data server)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat group (and server
-                                  (not (equal server ""))
-                                  "-")
-                       server ".el")) nnrss-directory)))
-    (ignore-errors
-      (delete-file file)))
+  (ignore-errors
+   (delete-file (nnrss-make-filename group server)))
   t)
 
 (deffoo nnrss-request-list-newsgroups (&optional server)
@@ -262,34 +315,67 @@ ARTICLE is the article number of the current headline.")
 
 ;;; Internal functions
 (eval-when-compile (defun xml-rpc-method-call (&rest args)))
+
+(defun nnrss-get-encoding ()
+  "Return an encoding attribute specified in the current xml contents.
+If `nnrss-compatible-encoding-alist' specifies the compatible encoding,
+it is used instead.  If the xml contents doesn't specify the encoding,
+return `utf-8' which is the default encoding for xml if it is available,
+otherwise return nil."
+  (goto-char (point-min))
+  (if (re-search-forward
+       "<\\?[^>]*encoding=\\(\"\\([^\">]+\\)\"\\|'\\([^'>]+\\)'\\)"
+       nil t)
+      (let ((encoding (intern (downcase (or (match-string 2)
+                                           (match-string 3))))))
+       (or
+        (mm-coding-system-p (cdr (assq encoding
+                                       nnrss-compatible-encoding-alist)))
+        (mm-coding-system-p encoding)
+        (mm-coding-system-p (car (rassq encoding
+                                        nnrss-compatible-encoding-alist)))))
+    (mm-coding-system-p 'utf-8)))
+
 (defun nnrss-fetch (url &optional local)
-  "Fetch the url and put it in a the expected lisp structure."
-  (with-temp-buffer
-  ;some CVS versions of url.el need this to close the connection quickly
-    (let* (xmlform htmlform)
+  "Fetch URL and put it in a the expected Lisp structure."
+  (mm-with-unibyte-buffer
+    ;;some CVS versions of url.el need this to close the connection quickly
+    (let (cs xmlform htmlform)
       ;; bit o' work necessary for w3 pre-cvs and post-cvs
       (if local
          (let ((coding-system-for-read 'binary))
            (insert-file-contents url))
-       (mm-url-insert url))
-
-;; Because xml-parse-region can't deal with anything that isn't
-;; xml and w3-parse-buffer can't deal with some xml, we have to
-;; parse with xml-parse-region first and, if that fails, parse
-;; with w3-parse-buffer.  Yuck.  Eventually, someone should find out
-;; why w3-parse-buffer fails to parse some well-formed xml and
-;; fix it.
-
-    (condition-case err
-       (setq xmlform (xml-parse-region (point-min) (point-max)))
-      (error (if (fboundp 'w3-parse-buffer)
-                (setq htmlform (caddar (w3-parse-buffer
-                                        (current-buffer))))
-              (message "nnrss: Not valid XML and w3 parse not available (%s)"
-                       url))))
-    (if htmlform
-       htmlform
-      xmlform))))
+       ;; FIXME: shouldn't binding `coding-system-for-read' be moved
+       ;; to `mm-url-insert'?
+       (let ((coding-system-for-read 'binary))
+         (mm-url-insert url)))
+      (nnheader-remove-cr-followed-by-lf)
+      ;; Decode text according to the encoding attribute.
+      (when (setq cs (nnrss-get-encoding))
+       (mm-decode-coding-region (point-min) (point-max) cs)
+       (mm-enable-multibyte))
+      (goto-char (point-min))
+
+      ;; Because xml-parse-region can't deal with anything that isn't
+      ;; xml and w3-parse-buffer can't deal with some xml, we have to
+      ;; parse with xml-parse-region first and, if that fails, parse
+      ;; with w3-parse-buffer.  Yuck.  Eventually, someone should find out
+      ;; why w3-parse-buffer fails to parse some well-formed xml and
+      ;; fix it.
+
+      (condition-case err1
+         (setq xmlform (xml-parse-region (point-min) (point-max)))
+       (error
+        (condition-case err2
+            (setq htmlform (caddar (w3-parse-buffer
+                                    (current-buffer))))
+          (error
+           (message "\
+nnrss: %s: Not valid XML %s and w3-parse doesn't work %s"
+                    url err1 err2)))))
+      (if htmlform
+         htmlform
+       xmlform))))
 
 (defun nnrss-possibly-change-group (&optional group server)
   (when (and server
@@ -302,9 +388,9 @@ ARTICLE is the article number of the current headline.")
 (defvar nnrss-extra-categories '(nnrss-snarf-moreover-categories))
 
 (defun nnrss-generate-active ()
-  (if (y-or-n-p "fetch extra categories? ")
-      (dolist (func nnrss-extra-categories)
-       (funcall func)))
+  (when (y-or-n-p "Fetch extra categories? ")
+    (dolist (func nnrss-extra-categories)
+      (funcall func)))
   (save-excursion
     (set-buffer nntp-server-buffer)
     (erase-buffer)
@@ -318,41 +404,26 @@ ARTICLE is the article number of the current headline.")
 
 (defun nnrss-read-server-data (server)
   (setq nnrss-server-data nil)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat "nnrss" (and server
-                                    (not (equal server ""))
-                                    "-")
-                       server
-                       ".el"))
-              nnrss-directory)))
+  (let ((file (nnrss-make-filename "nnrss" server)))
     (when (file-exists-p file)
-      (with-temp-buffer
-       (let ((coding-system-for-read 'binary)
-             emacs-lisp-mode-hook)
+      ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
+      ;; file names.  So, we use `insert-file-contents' instead.
+      (mm-with-multibyte-buffer
+       (let ((coding-system-for-read nnrss-file-coding-system)
+             (file-name-coding-system nnmail-pathname-coding-system))
          (insert-file-contents file)
-         (emacs-lisp-mode)
-         (goto-char (point-min))
-         (eval-buffer))))))
+         (eval-region (point-min) (point-max)))))))
 
 (defun nnrss-save-server-data (server)
   (gnus-make-directory nnrss-directory)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat "nnrss" (and server
-                                    (not (equal server ""))
-                                    "-")
-                       server ".el"))
-              nnrss-directory)))
-    (let ((coding-system-for-write 'binary)
-         print-level print-length)
-      (with-temp-file file
-       (insert "(setq nnrss-group-alist '"
-               (prin1-to-string nnrss-group-alist)
-               ")\n")
-       (insert "(setq nnrss-server-data '"
-               (prin1-to-string nnrss-server-data)
-               ")\n")))))
+  (let ((coding-system-for-write nnrss-file-coding-system)
+       (file-name-coding-system nnmail-pathname-coding-system))
+    (with-temp-file (nnrss-make-filename "nnrss" server)
+      (insert (format ";; -*- coding: %s; -*-\n"
+                     nnrss-file-coding-system))
+      (gnus-prin1 `(setq nnrss-group-alist ',nnrss-group-alist))
+      (insert "\n")
+      (gnus-prin1 `(setq nnrss-server-data ',nnrss-server-data)))))
 
 (defun nnrss-read-group-data (group server)
   (setq nnrss-group-data nil)
@@ -360,43 +431,50 @@ ARTICLE is the article number of the current headline.")
   (let ((pair (assoc group nnrss-server-data)))
     (setq nnrss-group-max (or (cadr pair) 0))
     (setq nnrss-group-min (+ nnrss-group-max 1)))
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat group (and server
-                                  (not (equal server ""))
-                                  "-")
-                       server ".el"))
-              nnrss-directory)))
+  (let ((file (nnrss-make-filename group server)))
     (when (file-exists-p file)
-      (with-temp-buffer
-       (let ((coding-system-for-read 'binary)
-             emacs-lisp-mode-hook)
+      ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
+      ;; file names.  So, we use `insert-file-contents' instead.
+      (mm-with-multibyte-buffer
+       (let ((coding-system-for-read nnrss-file-coding-system)
+             (file-name-coding-system nnmail-pathname-coding-system))
          (insert-file-contents file)
-         (emacs-lisp-mode)
-         (goto-char (point-min))
-         (eval-buffer)))
+         (eval-region (point-min) (point-max))))
       (dolist (e nnrss-group-data)
-       (gnus-sethash (nth 2 e) e nnrss-group-hashtb)
-       (if (and (car e) (> nnrss-group-min (car e)))
-           (setq nnrss-group-min (car e)))
-       (if (and (car e) (< nnrss-group-max (car e)))
-           (setq nnrss-group-max (car e)))))))
+       (gnus-sethash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb)
+       (when (and (car e) (> nnrss-group-min (car e)))
+         (setq nnrss-group-min (car e)))
+       (when (and (car e) (< nnrss-group-max (car e)))
+         (setq nnrss-group-max (car e)))))))
 
 (defun nnrss-save-group-data (group server)
   (gnus-make-directory nnrss-directory)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat group (and server
-                                  (not (equal server ""))
-                                  "-")
-                       server ".el"))
-              nnrss-directory)))
-    (let ((coding-system-for-write 'binary)
-         print-level print-length)
-      (with-temp-file file
-       (insert "(setq nnrss-group-data '"
-               (prin1-to-string nnrss-group-data)
-               ")\n")))))
+  (let ((coding-system-for-write nnrss-file-coding-system)
+       (file-name-coding-system nnmail-pathname-coding-system))
+    (with-temp-file (nnrss-make-filename group server)
+      (insert (format ";; -*- coding: %s; -*-\n"
+                     nnrss-file-coding-system))
+      (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data)))))
+
+(defun nnrss-make-filename (name server)
+  (expand-file-name
+   (nnrss-translate-file-chars
+    (concat name
+           (and server
+                (not (equal server ""))
+                "-")
+           server
+           ".el"))
+   nnrss-directory))
+
+(gnus-add-shutdown 'nnrss-close 'gnus)
+
+(defun nnrss-close ()
+  "Clear internal nnrss variables."
+  (setq nnrss-group-data nil
+       nnrss-server-data nil
+       nnrss-group-hashtb nil
+       nnrss-group-alist nil))
 
 ;;; URL interface
 
@@ -407,15 +485,36 @@ ARTICLE is the article number of the current headline.")
   (mm-with-unibyte-current-buffer
     (mm-url-insert url)))
 
-(defun nnrss-decode-entities-unibyte-string (string)
+(defun nnrss-decode-entities-string (string)
   (if string
-      (mm-with-unibyte-buffer
+      (mm-with-multibyte-buffer
        (insert string)
        (mm-url-decode-entities-nbsp)
        (buffer-string))))
 
 (defalias 'nnrss-insert 'nnrss-insert-w3)
 
+(defun nnrss-mime-encode-string (string)
+  (mm-with-multibyte-buffer
+    (insert string)
+    (mm-url-decode-entities-nbsp)
+    (goto-char (point-min))
+    (while (re-search-forward "[\t\n ]+" nil t)
+      (replace-match " "))
+    (goto-char (point-min))
+    (skip-chars-forward " ")
+    (delete-region (point-min) (point))
+    (goto-char (point-max))
+    (skip-chars-forward " ")
+    (delete-region (point) (point-max))
+    (let ((rfc2047-encoding-type 'mime)
+         rfc2047-encode-max-chars)
+      (rfc2047-encode-region (point-min) (point-max)))
+    (goto-char (point-min))
+    (while (search-forward "\n" nil t)
+      (delete-backward-char 1))
+    (buffer-string)))
+
 ;;; Snarf functions
 
 (defun nnrss-check-group (group server)
@@ -431,11 +530,11 @@ ARTICLE is the article number of the current headline.")
                    (second (assoc group nnrss-group-alist))))
       (unless url
        (setq url
-             (cdr
-              (assoc 'href
-                     (nnrss-discover-feed
-                      (read-string
-                       (format "URL to search for %s: " group) "http://")))))
+             (cdr
+              (assoc 'href
+                     (nnrss-discover-feed
+                      (read-string
+                       (format "URL to search for %s: " group) "http://")))))
        (let ((pair (assoc group nnrss-server-data)))
          (if pair
              (setcdr (cdr pair) (list url))
@@ -451,12 +550,16 @@ ARTICLE is the article number of the current headline.")
          content-ns (nnrss-get-namespace-prefix xml "http://purl.org/rss/1.0/modules/content/"))
     (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml)))
       (when (and (listp item)
-                (eq (intern (concat rss-ns "item")) (car item))
-                (setq url (nnrss-decode-entities-unibyte-string
-                           (nnrss-node-text rss-ns 'link (cddr item))))
-                (not (gnus-gethash url nnrss-group-hashtb)))
+                (string= (concat rss-ns "item") (car item))
+                (if (setq url (nnrss-decode-entities-string
+                               (nnrss-node-text rss-ns 'link (cddr item))))
+                    (not (gnus-gethash url nnrss-group-hashtb))
+                  (setq extra (or (nnrss-node-text content-ns 'encoded item)
+                                  (nnrss-node-text rss-ns 'description item)))
+                  (not (gnus-gethash extra nnrss-group-hashtb))))
        (setq subject (nnrss-node-text rss-ns 'title item))
-       (setq extra (or (nnrss-node-text content-ns 'encoded item)
+       (setq extra (or extra
+                       (nnrss-node-text content-ns 'encoded item)
                        (nnrss-node-text rss-ns 'description item)))
        (setq author (or (nnrss-node-text rss-ns 'author item)
                         (nnrss-node-text dc-ns 'creator item)
@@ -469,13 +572,14 @@ ARTICLE is the article number of the current headline.")
          (incf nnrss-group-max)
          (current-time)
          url
-         (and subject (nnrss-decode-entities-unibyte-string subject))
-         (and author (nnrss-decode-entities-unibyte-string author))
+         (and subject (nnrss-mime-encode-string subject))
+         (and author (nnrss-mime-encode-string author))
          date
-         (and extra (nnrss-decode-entities-unibyte-string extra)))
+         (and extra (nnrss-decode-entities-string extra)))
         nnrss-group-data)
-       (gnus-sethash url (car nnrss-group-data) nnrss-group-hashtb)
-       (setq changed t)))
+       (gnus-sethash (or url extra) t nnrss-group-hashtb)
+       (setq changed t))
+      (setq extra nil))
     (when changed
       (nnrss-save-group-data group server)
       (let ((pair (assoc group nnrss-server-data)))
@@ -484,6 +588,45 @@ ARTICLE is the article number of the current headline.")
          (push (list group nnrss-group-max) nnrss-server-data)))
       (nnrss-save-server-data server))))
 
+(defun nnrss-opml-import (opml-file)
+  "OPML subscriptions import.
+Read the file and attempt to subscribe to each Feed in the file."
+  (interactive "fImport file: ")
+  (mapcar
+   (lambda (node) (gnus-group-make-rss-group
+                  (cdr (assq 'xmlUrl (cadr node)))))
+   (nnrss-find-el 'outline
+                 (progn
+                   (find-file opml-file)
+                   (xml-parse-region (point-min)
+                                     (point-max))))))
+
+(defun nnrss-opml-export ()
+  "OPML subscription export.
+Export subscriptions to a buffer in OPML Format."
+  (interactive)
+  (with-current-buffer (get-buffer-create "*OPML Export*")
+    (mm-set-buffer-file-coding-system 'utf-8)
+    (insert "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+           "<!-- OPML generated by Emacs Gnus' nnrss.el -->\n"
+           "<opml version=\"1.1\">\n"
+           "  <head>\n"
+           "    <title>mySubscriptions</title>\n"
+           "    <dateCreated>" (format-time-string "%a, %d %b %Y %T %z")
+           "</dateCreated>\n"
+           "    <ownerEmail>" user-mail-address "</ownerEmail>\n"
+           "    <ownerName>" (user-full-name) "</ownerName>\n"
+           "  </head>\n"
+           "  <body>\n")
+    (dolist (sub nnrss-group-alist)
+      (insert "    <outline text=\"" (car sub)
+             "\" xmlUrl=\"" (cadr sub) "\"/>\n"))
+    (insert "  </body>\n"
+           "</opml>\n"))
+  (pop-to-buffer "*OPML Export*")
+  (when (fboundp 'sgml-mode)
+    (sgml-mode)))
+
 (defun nnrss-generate-download-script ()
   "Generate a download script in the current buffer.
 It is useful when `(setq nnrss-use-local t)'."
@@ -530,17 +673,17 @@ It is useful when `(setq nnrss-use-local t)'."
     (if changed
        (nnrss-save-server-data ""))))
 
-(defun nnrss-format-string (string)
-  (gnus-replace-in-string (nnrss-string-as-multibyte string) " *\n *" " "))
-
 (defun nnrss-node-text (namespace local-name element)
   (let* ((node (assq (intern (concat namespace (symbol-name local-name)))
                     element))
         (text (if (and node (listp node))
                   (nnrss-node-just-text node)
                 node))
-        (cleaned-text (if text (gnus-replace-in-string
-                                text "^[\000-\037\177]+\\|^ +\\| +$" ""))))
+        (cleaned-text (if text
+                          (gnus-replace-in-string
+                           (gnus-replace-in-string
+                            text "^[\000-\037\177]+\\|^ +\\| +$" "")
+                           "\r\n" "\n"))))
     (if (string-equal "" cleaned-text)
        nil
       cleaned-text)))
@@ -551,56 +694,59 @@ It is useful when `(setq nnrss-use-local t)'."
     node))
 
 (defun nnrss-find-el (tag data &optional found-list)
-  "Find the all matching elements in the data.  Careful with this on
-large documents!"
-  (if (listp data)
-      (mapcar (lambda (bit)
-               (if (car-safe bit)
-                   (progn (if (equal tag (car bit))
-                              (setq found-list
-                                    (append found-list
-                                            (list bit))))
-                          (if (and (listp (car-safe (caddr bit)))
-                                   (not (stringp (caddr bit))))
-                              (setq found-list
-                                    (append found-list
-                                            (nnrss-find-el
-                                             tag (caddr bit))))
-                            (setq found-list
-                                  (append found-list
-                                          (nnrss-find-el
-                                           tag (cddr bit))))))))
-               data))
+  "Find the all matching elements in the data.
+Careful with this on large documents!"
+  (when (consp data)
+    (dolist (bit data)
+      (when (car-safe bit)
+       (when (equal tag (car bit))
+         ;; Old xml.el may return a list of string.
+         (when (and (consp (caddr bit))
+                    (stringp (caaddr bit)))
+           (setcar (cddr bit) (caaddr bit)))
+         (setq found-list
+               (append found-list
+                       (list bit))))
+       (if (and (consp (car-safe (caddr bit)))
+                (not (stringp (caddr bit))))
+           (setq found-list
+                 (append found-list
+                         (nnrss-find-el
+                          tag (caddr bit))))
+         (setq found-list
+               (append found-list
+                       (nnrss-find-el
+                        tag (cddr bit))))))))
   found-list)
 
 (defun nnrss-rsslink-p (el)
   "Test if the element we are handed is an RSS autodiscovery link."
   (and (eq (car-safe el) 'link)
        (string-equal (cdr (assoc 'rel (cadr el))) "alternate")
-       (or (string-equal (cdr (assoc 'type (cadr el))) 
+       (or (string-equal (cdr (assoc 'type (cadr el)))
                         "application/rss+xml")
           (string-equal (cdr (assoc 'type (cadr el))) "text/xml"))))
 
 (defun nnrss-get-rsslinks (data)
   "Extract the <link> elements that are links to RSS from the parsed data."
-  (delq nil (mapcar 
+  (delq nil (mapcar
             (lambda (el)
               (if (nnrss-rsslink-p el) el))
             (nnrss-find-el 'link data))))
 
 (defun nnrss-extract-hrefs (data)
-  "Recursively extract hrefs from a page's source.  DATA should be
-the output of xml-parse-region or w3-parse-buffer."
+  "Recursively extract hrefs from a page's source.
+DATA should be the output of `xml-parse-region' or
+`w3-parse-buffer'."
   (mapcar (lambda (ahref)
            (cdr (assoc 'href (cadr ahref))))
          (nnrss-find-el 'a data)))
 
-(defmacro nnrss-match-macro (base-uri item 
-                                          onsite-list offsite-list)
+(defmacro nnrss-match-macro (base-uri item onsite-list offsite-list)
   `(cond ((or (string-match (concat "^" ,base-uri) ,item)
-              (not (string-match "://" ,item)))
-          (setq ,onsite-list (append ,onsite-list (list ,item))))
-         (t (setq ,offsite-list (append ,offsite-list (list ,item))))))
+             (not (string-match "://" ,item)))
+         (setq ,onsite-list (append ,onsite-list (list ,item))))
+        (t (setq ,offsite-list (append ,offsite-list (list ,item))))))
 
 (defun nnrss-order-hrefs (base-uri hrefs)
   "Given a list of hrefs, sort them using the following priorities:
@@ -615,29 +761,28 @@ whether they are `offsite' or `onsite'."
   (let (rss-onsite-end  rdf-onsite-end  xml-onsite-end
        rss-onsite-in   rdf-onsite-in   xml-onsite-in
        rss-offsite-end rdf-offsite-end xml-offsite-end
-       rss-offsite-in rdf-offsite-in xml-offsite-in)
-    (mapcar (lambda (href)
-             (if (not (null href))
-             (cond ((string-match "\\.rss$" href)
-                    (nnrss-match-macro
-                     base-uri href rss-onsite-end rss-offsite-end))
-                   ((string-match "\\.rdf$" href)
-                    (nnrss-match-macro 
-                     base-uri href rdf-onsite-end rdf-offsite-end))
-                   ((string-match "\\.xml$" href)
-                    (nnrss-match-macro
-                     base-uri href xml-onsite-end xml-offsite-end))
-                   ((string-match "rss" href)
-                    (nnrss-match-macro
-                     base-uri href rss-onsite-in rss-offsite-in))
-                   ((string-match "rdf" href)
-                    (nnrss-match-macro
-                     base-uri href rdf-onsite-in rdf-offsite-in))
-                   ((string-match "xml" href)
-                    (nnrss-match-macro
-                     base-uri href xml-onsite-in xml-offsite-in)))))
-           hrefs)
-    (append 
+       rss-offsite-in  rdf-offsite-in  xml-offsite-in)
+    (dolist (href hrefs)
+      (cond ((null href))
+           ((string-match "\\.rss$" href)
+            (nnrss-match-macro
+             base-uri href rss-onsite-end rss-offsite-end))
+           ((string-match "\\.rdf$" href)
+            (nnrss-match-macro
+             base-uri href rdf-onsite-end rdf-offsite-end))
+           ((string-match "\\.xml$" href)
+            (nnrss-match-macro
+             base-uri href xml-onsite-end xml-offsite-end))
+           ((string-match "rss" href)
+            (nnrss-match-macro
+             base-uri href rss-onsite-in rss-offsite-in))
+           ((string-match "rdf" href)
+            (nnrss-match-macro
+             base-uri href rdf-onsite-in rdf-offsite-in))
+           ((string-match "xml" href)
+            (nnrss-match-macro
+             base-uri href xml-onsite-in xml-offsite-in))))
+    (append
      rss-onsite-end  rdf-onsite-end  xml-onsite-end
      rss-onsite-in   rdf-onsite-in   xml-onsite-in
      rss-offsite-end rdf-offsite-end xml-offsite-end
@@ -670,23 +815,23 @@ whether they are `offsite' or `onsite'."
 ;;       - offsite links containing any of the above
          (let* ((base-uri (progn (string-match ".*://[^/]+/?" url)
                                  (match-string 0 url)))
-                (hrefs (nnrss-order-hrefs 
+                (hrefs (nnrss-order-hrefs
                         base-uri (nnrss-extract-hrefs parsed-page)))
                 (rss-link nil))
-         (while (and (eq rss-link nil) (not (eq hrefs nil)))
-           (let ((href-data (nnrss-fetch (car hrefs))))
-             (if (nnrss-rss-p href-data)
-                 (let* ((rss-ns (nnrss-get-namespace-prefix href-data "http://purl.org/rss/1.0/")))
-                   (setq rss-link (nnrss-rss-title-description
-                                   rss-ns href-data (car hrefs))))
-               (setq hrefs (cdr hrefs)))))
-         (if rss-link rss-link
+           (while (and (eq rss-link nil) (not (eq hrefs nil)))
+             (let ((href-data (nnrss-fetch (car hrefs))))
+               (if (nnrss-rss-p href-data)
+                   (let* ((rss-ns (nnrss-get-namespace-prefix href-data "http://purl.org/rss/1.0/")))
+                     (setq rss-link (nnrss-rss-title-description
+                                     rss-ns href-data (car hrefs))))
+                 (setq hrefs (cdr hrefs)))))
+           (if rss-link rss-link
 
 ;;    4. check syndic8
-           (nnrss-find-rss-via-syndic8 url))))))))
+             (nnrss-find-rss-via-syndic8 url))))))))
 
 (defun nnrss-find-rss-via-syndic8 (url)
-  "query syndic8 for the rss feeds it has for the url."
+  "Query syndic8 for the rss feeds it has for URL."
   (if (not (locate-library "xml-rpc"))
       (progn
        (message "XML-RPC is not available... not checking Syndic8.")
@@ -697,22 +842,22 @@ whether they are `offsite' or `onsite'."
                   'syndic8.FindSites
                   url)))
       (when feedid
-       (let* ((feedinfo (xml-rpc-method-call 
+       (let* ((feedinfo (xml-rpc-method-call
                          "http://www.syndic8.com/xmlrpc.php"
                          'syndic8.GetFeedInfo
                          feedid))
               (urllist
-               (delq nil 
+               (delq nil
                      (mapcar
                       (lambda (listinfo)
-                        (if (string-equal 
+                        (if (string-equal
                              (cdr (assoc "status" listinfo))
                              "Syndicated")
                             (cons
                              (cdr (assoc "sitename" listinfo))
                              (list
                               (cons 'title
-                                    (cdr (assoc 
+                                    (cdr (assoc
                                           "sitename" listinfo)))
                               (cons 'href
                                     (cdr (assoc
@@ -721,20 +866,20 @@ whether they are `offsite' or `onsite'."
          (if (not (> (length urllist) 1))
              (cdar urllist)
            (let ((completion-ignore-case t)
-                 (selection 
+                 (selection
                   (mapcar (lambda (listinfo)
-                            (cons (cdr (assoc "sitename" listinfo)) 
-                                  (string-to-int 
+                            (cons (cdr (assoc "sitename" listinfo))
+                                  (string-to-int
                                    (cdr (assoc "feedid" listinfo)))))
                           feedinfo)))
-             (cdr (assoc 
+             (cdr (assoc
                    (completing-read
                     "Multiple feeds found.  Select one: "
                     selection nil t) urllist)))))))))
 
 (defun nnrss-rss-p (data)
-  "Test if data is an RSS feed.  Simply ensures that the first
-element is rss or rdf."
+  "Test if DATA is an RSS feed.
+Simply ensures that the first element is rss or rdf."
   (or (eq (caar data) 'rss)
       (eq (caar data) 'rdf:RDF)))
 
@@ -755,13 +900,13 @@ element is rss or rdf."
 that gives the URI for which you want to retrieve the namespace
 prefix), return the prefix."
   (let* ((prefix (car (rassoc uri (cadar el))))
-        (nslist (if prefix 
+        (nslist (if prefix
                     (split-string (symbol-name prefix) ":")))
         (ns (cond ((eq (length nslist) 1) ; no prefix given
                    "")
                   ((eq (length nslist) 2) ; extract prefix
                    (cadr nslist)))))
-    (if (and ns (not (eq ns "")))
+    (if (and ns (not (string= ns "")))
        (concat ns ":")
       ns)))
 
index 67ee8883f0859a47d9bf885ef95381f1d4f49480..5cb294089351f9e9cf731c62059742bdd8c1cc95 100644 (file)
@@ -100,15 +100,10 @@ You should probably avoid non-ASCII characters in this arg.
 If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and
 encode lines starting with \"From\"."
   (interactive "r")
-  (save-excursion
-    (goto-char from)
-    (if (fboundp 'string-to-multibyte) ; Emacs 23
-       (if (re-search-forward (string-to-multibyte "[^\x0-\x7f\x80-\xff]")
-                              to t)
-           ;; Fixme: This is somewhat misleading.
-           (error "Multibyte character in QP encoding region"))
-      (if (re-search-forward (mm-string-as-multibyte "[^\0-\377]") to t)
-         (error "Multibyte character in QP encoding region"))))
+  (goto-char from)
+  (if (re-search-forward (mm-string-to-multibyte "[^\x0-\x7f\x80-\xff]")
+                        to t)
+      (error "Multibyte character in QP encoding region"))
   (unless class
     ;; Avoid using 8bit characters. = is \075.
     ;; Equivalent to "^\000-\007\013\015-\037\200-\377="
index aeffaf732a56c12236108ef69251393282449dcd..e65982623c1e8efd18d58d4918254e242ce7b368 100644 (file)
@@ -586,7 +586,16 @@ the last key hit are used."
       ;; Ok, now look up the key and name the command.
       (let ((defn (or (string-key-binding key)
                      (key-binding key)))
-           (key-desc (help-key-description key untranslated)))
+           key-desc)
+       ;; Don't bother user with strings from (e.g.) the select-paste menu.
+       (if (stringp (aref key (1- (length key))))
+           (aset key (1- (length key)) "(any string)"))
+       (if (and (> (length untranslated) 0)
+                (stringp (aref untranslated (1- (length untranslated)))))
+           (aset untranslated (1- (length untranslated))
+                 "(any string)"))
+       ;; Now describe the key, perhaps as changed.
+       (setq key-desc (help-key-description key untranslated))
        (if (or (null defn) (integerp defn) (equal defn 'undefined))
            (princ (format "%s is undefined" key-desc))
          (princ (format (if (windowp window)
@@ -595,7 +604,6 @@ the last key hit are used."
                         key-desc
                         (if (symbolp defn) defn (prin1-to-string defn)))))))))
 
-
 (defun describe-key (key &optional untranslated up-event)
   "Display documentation of the function invoked by KEY.
 KEY should be a key sequence--when calling from a program,
@@ -623,6 +631,12 @@ the last key hit are used."
        (if (or (null defn) (integerp defn) (equal defn 'undefined))
            (message "%s is undefined" (help-key-description key untranslated))
          (help-setup-xref (list #'describe-function defn) (interactive-p))
+         ;; Don't bother user with strings from (e.g.) the select-paste menu.
+         (if (stringp (aref key (1- (length key))))
+             (aset key (1- (length key)) "(any string)"))
+         (if (stringp (aref untranslated (1- (length untranslated))))
+             (aset untranslated (1- (length untranslated))
+                   "(any string)"))
          (with-output-to-temp-buffer (help-buffer)
            (princ (help-key-description key untranslated))
            (if (windowp window)
index 81494a167bb194a57a99bc384704ee6beb708b59..3ded620cb7aed169b472011db37278e700dd5203 100644 (file)
@@ -3799,77 +3799,78 @@ Preserve text properties."
         (let ((n 0)
               cont)
           (while (re-search-forward
-                  (concat "^\\* +\\(" Info-menu-entry-name-re "\\)\\(:"
-                          Info-node-spec-re "\\([ \t]*\\)\\)")
+                  (concat "^\\* Menu:\\|\\(?:^\\* +\\(" Info-menu-entry-name-re "\\)\\(:"
+                          Info-node-spec-re "\\([ \t]*\\)\\)\\)")
                   nil t)
-            (when not-fontified-p
-              (setq n (1+ n))
-              (if (and (<= n 9) (zerop (% n 3))) ; visual aids to help with 1-9 keys
-                  (put-text-property (match-beginning 0)
-                                     (1+ (match-beginning 0))
-                                     'font-lock-face 'info-menu-5)))
-            (when not-fontified-p
-              (add-text-properties
-               (match-beginning 1) (match-end 1)
-               (list
-                'help-echo (if (and (match-end 3)
-                                    (not (equal (match-string 3) "")))
-                               (concat "mouse-2: go to " (match-string 3))
-                             "mouse-2: go to this node")
-                'mouse-face 'highlight)))
-            (when (or not-fontified-p fontify-visited-p)
-              (add-text-properties
-               (match-beginning 1) (match-end 1)
-               (list
-                'font-lock-face
-                ;; Display visited menu items in a different face
-                (if (and Info-fontify-visited-nodes
-                         (save-match-data
-                           (let ((node (if (equal (match-string 3) "")
-                                           (match-string 1)
-                                         (match-string 3)))
-                                 (file (file-name-nondirectory Info-current-file))
-                                 (hl Info-history-list)
-                                 res)
-                             (if (string-match "(\\([^)]+\\))\\([^)]*\\)" node)
-                                 (setq file (file-name-nondirectory
-                                             (match-string 1 node))
-                                       node (if (equal (match-string 2 node) "")
-                                                "Top"
-                                              (match-string 2 node))))
-                             (while hl
-                               (if (and (string-equal node (nth 1 (car hl)))
-                                        (string-equal file
-                                                      (file-name-nondirectory
-                                                       (nth 0 (car hl)))))
-                                   (setq res (car hl) hl nil)
-                                 (setq hl (cdr hl))))
-                             res))) 'info-xref-visited 'info-xref))))
-            (when (and not-fontified-p (memq Info-hide-note-references '(t hide)))
-              (put-text-property (match-beginning 2) (1- (match-end 6))
-                                 'invisible t)
-              ;; Unhide the file name in parens
-              (if (and (match-end 4) (not (eq (char-after (match-end 4)) ?.)))
-                  (remove-text-properties (match-beginning 4) (match-end 4)
-                                          '(invisible t)))
-              ;; We need a stretchable space like :align-to but with
-              ;; a minimum value.
-              (put-text-property (1- (match-end 6)) (match-end 6) 'display
-                                 (if (>= 22 (- (match-end 1)
-                                               (match-beginning 0)))
-                                     '(space :align-to 24)
-                                   '(space :width 2)))
-              (setq cont (looking-at "."))
-              (while (and (= (forward-line 1) 0)
-                          (looking-at "\\([ \t]+\\)[^*\n]"))
-                (put-text-property (match-beginning 1) (1- (match-end 1))
-                                   'invisible t)
-                (put-text-property (1- (match-end 1)) (match-end 1)
-                                   'display
-                                   (if cont
-                                       '(space :align-to 26)
-                                     '(space :align-to 24)))
-                (setq cont t))))))
+           (when (match-beginning 1)
+             (when not-fontified-p
+               (setq n (1+ n))
+               (if (and (<= n 9) (zerop (% n 3))) ; visual aids to help with 1-9 keys
+                   (put-text-property (match-beginning 0)
+                                      (1+ (match-beginning 0))
+                                      'font-lock-face 'info-menu-5)))
+             (when not-fontified-p
+               (add-text-properties
+                (match-beginning 1) (match-end 1)
+                (list
+                 'help-echo (if (and (match-end 3)
+                                     (not (equal (match-string 3) "")))
+                                (concat "mouse-2: go to " (match-string 3))
+                              "mouse-2: go to this node")
+                 'mouse-face 'highlight)))
+             (when (or not-fontified-p fontify-visited-p)
+               (add-text-properties
+                (match-beginning 1) (match-end 1)
+                (list
+                 'font-lock-face
+                 ;; Display visited menu items in a different face
+                 (if (and Info-fontify-visited-nodes
+                          (save-match-data
+                            (let ((node (if (equal (match-string 3) "")
+                                            (match-string 1)
+                                          (match-string 3)))
+                                  (file (file-name-nondirectory Info-current-file))
+                                  (hl Info-history-list)
+                                  res)
+                              (if (string-match "(\\([^)]+\\))\\([^)]*\\)" node)
+                                  (setq file (file-name-nondirectory
+                                              (match-string 1 node))
+                                        node (if (equal (match-string 2 node) "")
+                                                 "Top"
+                                               (match-string 2 node))))
+                              (while hl
+                                (if (and (string-equal node (nth 1 (car hl)))
+                                         (string-equal file
+                                                       (file-name-nondirectory
+                                                        (nth 0 (car hl)))))
+                                    (setq res (car hl) hl nil)
+                                  (setq hl (cdr hl))))
+                              res))) 'info-xref-visited 'info-xref))))
+             (when (and not-fontified-p (memq Info-hide-note-references '(t hide)))
+               (put-text-property (match-beginning 2) (1- (match-end 6))
+                                  'invisible t)
+               ;; Unhide the file name in parens
+               (if (and (match-end 4) (not (eq (char-after (match-end 4)) ?.)))
+                   (remove-text-properties (match-beginning 4) (match-end 4)
+                                           '(invisible t)))
+               ;; We need a stretchable space like :align-to but with
+               ;; a minimum value.
+               (put-text-property (1- (match-end 6)) (match-end 6) 'display
+                                  (if (>= 22 (- (match-end 1)
+                                                (match-beginning 0)))
+                                      '(space :align-to 24)
+                                    '(space :width 2)))
+               (setq cont (looking-at "."))
+               (while (and (= (forward-line 1) 0)
+                           (looking-at "\\([ \t]+\\)[^*\n]"))
+                 (put-text-property (match-beginning 1) (1- (match-end 1))
+                                    'invisible t)
+                 (put-text-property (1- (match-end 1)) (match-end 1)
+                                    'display
+                                    (if cont
+                                        '(space :align-to 26)
+                                      '(space :align-to 24)))
+                 (setq cont t)))))))
 
       ;; Fontify menu headers
       ;; Add the face `info-menu-header' to any header before a menu entry
index c0d5b4c76836da25e81dc32fa4fdc38b2c41e341..ce2af0d1bfee5fdae5ca73e3192b0355300c0cab 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- Makefile -*- for GNU Emacs on the Microsoft W32 API.
-#  Copyright (c) 2000,2001,2004 Free Software Foundation, Inc.
+#  Copyright (c) 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
@@ -49,75 +49,6 @@ lisptagsfiles1 = $(lisp)/*.el
 lisptagsfiles2 = $(lisp)/*/*.el
 ETAGS = "../lib-src/$(BLD)/etags"
 
-# Files which should not be compiled.  If you change the name `DONTCOMPILE'
-# to something different, you'll have to change make-dist as well, and
-# modify the lists in $lisp and $shortlisp on src/Makefile.in.
-#
-# - emacs-lisp/cl-specs.el:  only contains `def-edebug-spec's so there's
-#   no point compiling it, although it doesn't hurt.
-
-DONTCOMPILE = \
-       $(lisp)/cus-load.el \
-       $(lisp)/emacs-lisp/cl-specs.el \
-       $(lisp)/eshell/esh-maint.el \
-       $(lisp)/eshell/esh-groups.el \
-       $(lisp)/finder-inf.el \
-       $(lisp)/forms-d2.el \
-       $(lisp)/forms-pass.el \
-       $(lisp)/generic-x.el \
-       $(lisp)/international/latin1-disp.el \
-       $(lisp)/international/mule-conf.el \
-       $(lisp)/language/czech.el \
-       $(lisp)/language/devanagari.el \
-       $(lisp)/language/kannada.el \
-       $(lisp)/language/malayalam.el \
-       $(lisp)/language/tamil.el \
-       $(lisp)/language/english.el \
-       $(lisp)/language/greek.el \
-       $(lisp)/language/hebrew.el \
-       $(lisp)/language/japanese.el \
-       $(lisp)/language/korean.el \
-       $(lisp)/language/lao.el \
-       $(lisp)/language/misc-lang.el \
-       $(lisp)/language/romanian.el \
-       $(lisp)/language/slovak.el \
-       $(lisp)/language/thai.el \
-       $(lisp)/language/utf-8-lang.el \
-       $(lisp)/language/georgian.el \
-       $(lisp)/language/vietnamese.el \
-       $(lisp)/language/cyrillic.el \
-       $(lisp)/language/chinese.el \
-       $(lisp)/language/indian.el \
-       $(lisp)/loaddefs.el \
-       $(lisp)/ldefs-boot.el \
-       $(lisp)/loadup.el \
-       $(lisp)/mail/blessmail.el \
-       $(lisp)/patcomp.el \
-       $(lisp)/paths.el \
-       $(lisp)/play/bruce.el \
-       $(lisp)/subdirs.el \
-       $(lisp)/term/internal.el \
-       $(lisp)/term/AT386.el  \
-       $(lisp)/term/apollo.el \
-       $(lisp)/term/bobcat.el \
-       $(lisp)/term/iris-ansi.el \
-       $(lisp)/term/keyswap.el \
-       $(lisp)/term/linux.el \
-       $(lisp)/term/lk201.el \
-       $(lisp)/term/news.el \
-       $(lisp)/term/vt102.el \
-       $(lisp)/term/vt125.el \
-       $(lisp)/term/vt200.el \
-       $(lisp)/term/vt201.el \
-       $(lisp)/term/vt220.el \
-       $(lisp)/term/vt240.el \
-       $(lisp)/term/vt300.el \
-       $(lisp)/term/vt320.el \
-       $(lisp)/term/vt400.el \
-       $(lisp)/term/vt420.el \
-       $(lisp)/term/wyse50.el \
-       $(lisp)/version.el
-
 # Files to compile before others during a bootstrap.  This is done to
 # speed up the bootstrap process.  The CC files are compiled first
 # because CC mode tweaks the compilation process, and requiring
@@ -252,7 +183,7 @@ updates: update-subdirs autoloads finder-data custom-deps
 # Update the AUTHORS file.
 
 update-authors:
-       $(emacs) -f batch-update-authors $(srcdir)/AUTHORS $(srcdir)
+       $(emacs) -l authors -f batch-update-authors $(srcdir)/AUTHORS $(srcdir)
 
 TAGS: $(lisptagsfiles1) $(lisptagsfiles2)
        $(ETAGS) $(lisptagsfiles1) $(lisptagsfiles2)
@@ -265,19 +196,17 @@ TAGS-LISP: $(lisptagsfiles1) $(lisptagsfiles2)
 .el.elc:
        -$(emacs) -f batch-byte-compile $<
 
-$(DONTCOMPILE:.el=.elc):
-       -$(DEL) $@
+# Compile all Lisp files, but don't recompile those that are up to
+# date.  Some files don't actually get compiled because they set the
+# local variable no-byte-compile.
 
-# Compile all Lisp files, except those from DONTCOMPILE,
-# but don't recompile those that are up to date.
-
-# All .elc files are made writable
-# before compilation in case we checked out read-only (CVS option -r).
-# Files MUST be compiled one by one.  If we compile several files in a
-# row we can't make sure that the compilation environment is clean.
-# We also set the load-path of the Emacs used for compilation to the
-# current directory and its subdirectories, to make sure require's and
-# load's in the files being compiled find the right files.
+# All .elc files are made writable before compilation in case we
+# checked out read-only (CVS option -r).  Files MUST be compiled one by
+# one.  If we compile several files in a row we can't make sure that
+# the compilation environment is clean.  We also set the load-path of
+# the Emacs used for compilation to the current directory and its
+# subdirectories, to make sure require's and load's in the files being
+# compiled find the right files.
 
 # Need separate version for sh and native cmd.exe
 compile: subdirs.el compile-$(SHELLTYPE) doit
@@ -305,8 +234,10 @@ compile-SH:
          done; \
        done
 
-# Compile all Lisp files, except those from DONTCOMPILE.  This
-# is like `compile' but compiles files unconditionally.
+# Compile all Lisp files.  This is like `compile' but compiles files
+# unconditionally.  Some files don't actually get compiled because they
+# set the local variable no-byte-compile.
+
 compile-always: subdirs.el compile-always-$(SHELLTYPE) doit
 
 compile-always-CMD:
index 6df76e21472e0bd7afdc677fa23fb305a764c647..129a01f54989a42ff92c73e09c3eacbbeb4aa5f7 100644 (file)
@@ -280,7 +280,18 @@ File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = \\([0-9]+\\)\\)?"
 
     (4bsd
      "\\(?:^\\|::  \\|\\S ( \\)\\(/[^ \n\t()]+\\)(\\([0-9]+\\))\
-\\(?:: \\(warning:\\)?\\|$\\| ),\\)" 1 2 nil (3)))
+\\(?:: \\(warning:\\)?\\|$\\| ),\\)" 1 2 nil (3))
+
+    (gcov-file
+     "^ +-:    \\(0\\):Source:\\(.+\\)$" 2 1 nil 0)    
+    (gcov-bb-file
+     "^ +-:    \\(0\\):Object:\\(?:.+\\)$" nil 1 nil 0)    
+    (gcov-never-called-line
+     "^ +\\(#####\\): +\\([0-9]+\\):.+$" nil 2 nil 2 nil 
+     (1 compilation-error-face))
+    (gcov-called-line
+     "^ +[-0-9]+: +\\([1-9]\\|[0-9]\\{2,\\}\\):.*$" nil 1 nil 0)
+)
   "Alist of values for `compilation-error-regexp-alist'.")
 
 (defcustom compilation-error-regexp-alist
@@ -1846,6 +1857,9 @@ FILE should be (ABSOLUTE-FILENAME) or (RELATIVE-FILENAME . DIRNAME)."
          ;; don't use a marker.  --Stef
          (if (> pos (point-min)) (copy-marker (1- pos)) pos))))
 
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.gcov\\'" . compilation-mode))
+
 (provide 'compile)
 
 ;; arch-tag: 12465727-7382-4f72-b234-79855a00dd8c
index 4c8b847b7cd7f0ae59a87f61301376b4c63bff27..14363e4dccf4e330bab2116f72133aecd3be47ae 100644 (file)
@@ -1055,10 +1055,10 @@ block[ \t]*data\\)\\>")
       (f90-change-keywords f90-auto-keyword-case
                            (line-beginning-position) (line-end-position))))
 \f
-(defun f90-electric-insert ()
+(defun f90-electric-insert (&optional arg)
   "Change keyword case and auto-fill line as operators are inserted."
-  (interactive)
-  (self-insert-command 1)
+  (interactive "*p")
+  (self-insert-command arg)
   (if auto-fill-function (f90-do-auto-fill) ; also updates line
     (f90-update-line)))
 
index 3e4796436f106a47b761db6d6ed087f22a8fdb04..95920ff9f02efcb7ac01681d95490487d9c35e3f 100644 (file)
@@ -79,7 +79,7 @@
 (defvar gdb-overlay-arrow-position nil)
 (defvar gdb-server-prefix nil)
 (defvar gdb-flush-pending-output nil)
-(defvar gdb-location-list nil "List of directories for source files.")
+(defvar gdb-location-list nil "Alist of breakpoint numbers and full filenames.")
 (defvar gdb-find-file-unhook nil)
 
 (defvar gdb-buffer-type nil
@@ -258,6 +258,7 @@ detailed description of this mode.
     'gdb-mouse-set-clear-breakpoint)
   (define-key gud-minor-mode-map [left-margin mouse-3]
     'gdb-mouse-toggle-breakpoint)
+;  Currently only works in margin.
 ;  (define-key gud-minor-mode-map [left-fringe mouse-3]
 ;    'gdb-mouse-toggle-breakpoint)
 
@@ -606,6 +607,21 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
          (gdb-get-target-string)
          "*"))
 
+(defun gdb-display-inferior-io-buffer ()
+  "Display IO of inferior in a separate window."
+  (interactive)
+  (if gdb-use-inferior-io-buffer
+      (gdb-display-buffer
+       (gdb-get-create-buffer 'gdb-inferior-io))))
+
+(defun gdb-frame-inferior-io-buffer ()
+  "Display IO of inferior in a new frame."
+  (interactive)
+  (if gdb-use-inferior-io-buffer
+      (let ((special-display-regexps (append special-display-regexps '(".*")))
+           (special-display-frame-alist gdb-frame-parameters))
+       (display-buffer (gdb-get-create-buffer 'gdb-inferior-io)))))
+
 (defvar gdb-inferior-io-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-c\C-c" 'gdb-inferior-io-interrupt)
@@ -1372,9 +1388,9 @@ static char *magick[] = {
              (file  (match-string 2))
              (line  (match-string 3)))
          (save-selected-window
-           (let* ((buf (find-file-noselect (if (file-exists-p file)
-                                               file
-                                             (cdr (assoc bptno gdb-location-list)))))
+           (let* ((buf (find-file-noselect
+                        (if (file-exists-p file) file
+                          (cdr (assoc bptno gdb-location-list)))))
                   (window (display-buffer buf)))
              (with-current-buffer buf
                (goto-line (string-to-number line))
@@ -1810,26 +1826,26 @@ corresponding to the mode line clicked."
           "Read address: "
           (propertize gdb-memory-address
                       'face font-lock-warning-face
-                      'help-echo (purecopy "mouse-1: Set memory address")
-                      'local-map (purecopy (gdb-make-header-line-mouse-map
-                                            'mouse-1
-                                            #'gdb-memory-set-address)))
+                      'help-echo "mouse-1: Set memory address"
+                      'local-map (gdb-make-header-line-mouse-map
+                                  'mouse-1
+                                  #'gdb-memory-set-address))
           "  Repeat Count: "
           (propertize (number-to-string gdb-memory-repeat-count)
                       'face font-lock-warning-face
-                      'help-echo (purecopy "mouse-1: Set repeat count")
-                      'local-map (purecopy (gdb-make-header-line-mouse-map
-                                            'mouse-1
-                                            #'gdb-memory-set-repeat-count)))
+                      'help-echo "mouse-1: Set repeat count"
+                      'local-map (gdb-make-header-line-mouse-map
+                                  'mouse-1
+                                  #'gdb-memory-set-repeat-count))
           "  Display Format: "
           (propertize gdb-memory-format
                       'face font-lock-warning-face
-                      'help-echo (purecopy "mouse-3: Select display format")
+                      'help-echo "mouse-3: Select display format"
                       'local-map gdb-memory-format-keymap)
           "  Unit Size: "
           (propertize gdb-memory-unit
                       'face font-lock-warning-face
-                      'help-echo (purecopy "mouse-3: Select unit size")
+                      'help-echo "mouse-3: Select unit size"
                       'local-map gdb-memory-unit-keymap))))
   (run-mode-hooks 'gdb-memory-mode-hook)
   'gdb-invalidate-memory)
@@ -1936,11 +1952,12 @@ corresponding to the mode line clicked."
   (let ((answer (get-buffer-window buf 0))
        (must-split nil))
     (if answer
-       (display-buffer buf)            ;Raise the frame if necessary.
+       (display-buffer buf nil 0)      ;Raise the frame if necessary.
       ;; The buffer is not yet displayed.
       (pop-to-buffer gud-comint-buffer)        ;Select the right frame.
       (let ((window (get-lru-window)))
-       (if window
+       (if (and window
+           (not (eq window (get-buffer-window gud-comint-buffer))))
            (progn
              (set-window-buffer window buf)
              (setq answer window))
@@ -1965,6 +1982,9 @@ corresponding to the mode line clicked."
   (define-key menu [memory] '("Memory" . gdb-display-memory-buffer))
   (define-key menu [assembler] '("Machine" . gdb-display-assembler-buffer))
   (define-key menu [registers] '("Registers" . gdb-display-registers-buffer))
+  (define-key menu [inferior]
+    '(menu-item "Inferior IO" gdb-display-inferior-io-buffer
+               :enable gdb-use-inferior-io-buffer))
   (define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
   (define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
   (define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer)))
@@ -1977,6 +1997,9 @@ corresponding to the mode line clicked."
   (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer))
   (define-key menu [assembler] '("Machine" . gdb-frame-assembler-buffer))
   (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer))
+  (define-key menu [inferior]
+    '(menu-item "Inferior IO" gdb-frame-inferior-io-buffer
+               :enable gdb-use-inferior-io-buffer))
   (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
   (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer))
   (define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer)))
@@ -1985,11 +2008,21 @@ corresponding to the mode line clicked."
   (define-key gud-menu-map [ui]
     `(menu-item "GDB-UI" ,menu :visible (eq gud-minor-mode 'gdba)))
   (define-key menu [gdb-restore-windows]
-    '("Restore Window Layout" . gdb-restore-windows))
+  '(menu-item "Restore Window Layout" gdb-restore-windows
+             :help "Restore standard layout for debug session."))
   (define-key menu [gdb-many-windows]
-    (menu-bar-make-toggle gdb-many-windows gdb-many-windows
-     "Display Other Windows" "Many windows %s"
-     "Toggle display of locals, stack and breakpoint information")))
+  '(menu-item "Display Other Windows" gdb-many-windows
+             :help "Toggle display of locals, stack and breakpoint information"
+             :button (:toggle . gdb-many-windows)))
+  (define-key menu [gdb-use-inferior-io]
+    (menu-bar-make-toggle toggle-gdb-use-inferior-io-buffer
+                         gdb-use-inferior-io-buffer
+     "Separate inferior IO" "Use separate IO %s"
+     "Toggle separate IO for inferior.")))
+
+(defadvice toggle-gdb-use-inferior-io-buffer (after gdb-kill-io-buffer activate)
+  (unless gdb-use-inferior-io-buffer
+    (kill-buffer (gdb-inferior-io-name))))
 
 (defun gdb-frame-gdb-buffer ()
   "Display GUD buffer in a new frame."
@@ -2038,7 +2071,8 @@ corresponding to the mode line clicked."
   (when gdb-use-inferior-io-buffer
     (split-window-horizontally)
     (other-window 1)
-    (gdb-set-window-buffer (gdb-inferior-io-name)))
+    (gdb-set-window-buffer
+     (gdb-get-create-buffer 'gdb-inferior-io)))
   (other-window 1)
   (gdb-set-window-buffer (gdb-stack-buffer-name))
   (split-window-horizontally)
@@ -2337,7 +2371,6 @@ BUFFER nil or omitted means use the current buffer."
   (setq mode-name "Machine")
   (setq gdb-overlay-arrow-position nil)
   (add-to-list 'overlay-arrow-variable-list 'gdb-overlay-arrow-position)
-  (put 'gdb-overlay-arrow-position 'overlay-arrow-string "=>")
   (setq fringes-outside-margins t)
   (setq buffer-read-only t)
   (use-local-map gdb-assembler-mode-map)
index 1f9284db9cb4e7fa5a6625fb5f19ff628227f559..03447068d91508284e9571da2dbc82e247956ed8 100644 (file)
@@ -1417,7 +1417,7 @@ and source-file directory for your debugger."
 
     output))
 
-(defcustom gud-pdb-command-name "pydb"
+(defcustom gud-pdb-command-name "pdb"
   "File name for executing the Python debugger.
 This should be an executable on your path, or an absolute file name."
   :type 'string
@@ -2518,7 +2518,6 @@ It is saved for when this flag is not set.")
 
 (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)
@@ -2614,7 +2613,6 @@ Obeying it means displaying in another window the specified file and line."
              (widen)
              (goto-line line)
              (setq pos (point))
-             (setq overlay-arrow-string "=>")
              (or gud-overlay-arrow-position
                  (setq gud-overlay-arrow-position (make-marker)))
              (set-marker gud-overlay-arrow-position (point) (current-buffer)))
index 2fc917c89c6393c3933323739a0f8ff0d0b2dc53..2bd9a2718821fc59afbbe0f8cedfb7cb74fee6bf 100644 (file)
@@ -555,14 +555,24 @@ The actual command ends at the end of the first \\(grouping\\)."
 
 
 
-(defvar sh-here-document-word "EOF"
+(defcustom sh-here-document-word "EOF"
   "Word to delimit here documents.
-If the first character of this string is \"-\", this character will
-be removed from the string when it is used to close the here document.
-This convention is used by the Bash shell, for example, to indicate
-that leading tabs inside the here document should be ignored.
-Note that Emacs currently has no support for indenting inside here
-documents - you must insert literal tabs by hand.")
+If the first character of this string is \"-\", this is taken as
+part of the redirection operator, rather than part of the
+word (that is, \"<<-\" instead of \"<<\").  This is a feature
+used by some shells (for example Bash) to indicate that leading
+tabs inside the here document should be ignored.  In this case,
+Emacs indents the initial body and end of the here document with
+tabs, to the same level as the start (note that apart from this
+there is no support for indentation of here documents).  This
+will only work correctly if `sh-basic-offset' is a multiple of
+`tab-width'.
+
+Any quote characters or leading whitespace in the word are
+removed when closing the here document."
+  :type 'string
+  :group 'sh-script)
+
 
 (defvar sh-test
   '((sh "[  ]" . 3)
@@ -3247,7 +3257,7 @@ t means to return a list of all possible completions of STRING.
    (let ((sh-add-buffer (current-buffer)))
      (list (completing-read "Variable: " 'sh-add-completer)
           (prefix-numeric-value current-prefix-arg))))
-  (insert (sh-feature '((bash . "$[ ")
+  (insert (sh-feature '((bash . "$(( ")
                        (ksh88 . "$(( ")
                        (posix . "$(( ")
                        (rc . "`{expr $")
@@ -3256,7 +3266,7 @@ t means to return a list of all possible completions of STRING.
          (sh-remember-variable var)
          (if (< delta 0) " - " " + ")
          (number-to-string (abs delta))
-         (sh-feature '((bash . " ]")
+         (sh-feature '((bash . " ))")
                        (ksh88 . " ))")
                        (posix . " ))")
                        (rc . "}")
@@ -3482,7 +3492,8 @@ option followed by a colon `:' if the option accepts an argument."
       "esac" >
       \n "done"
       > \n
-      "shift " (sh-add "OPTIND" -1) \n))
+      "shift " (sh-add "OPTIND" -1) \n
+      "OPTIND=1" \n))
 
 
 
@@ -3500,7 +3511,6 @@ option followed by a colon `:' if the option accepts an argument."
             (match-string 1))))))
 
 
-
 (defun sh-maybe-here-document (arg)
   "Insert self.  Without prefix, following unquoted `<' inserts here document.
 The document is bounded by `sh-here-document-word'."
@@ -3511,18 +3521,21 @@ The document is bounded by `sh-here-document-word'."
       (save-excursion
        (backward-char 2)
        (sh-quoted-p))
-      (progn
+      (let ((tabs (if (string-match "\\`-" sh-here-document-word)
+                      (make-string (/ (current-indentation) tab-width) ?\t)
+                    ""))
+            (delim (replace-regexp-in-string "['\"]" ""
+                                            sh-here-document-word)))
        (insert sh-here-document-word)
        (or (eolp) (looking-at "[ \t]") (insert ? ))
        (end-of-line 1)
        (while
            (sh-quoted-p)
          (end-of-line 2))
-       (newline)
+       (insert ?\n tabs)
        (save-excursion
-          (insert ?\n (substring
-                       sh-here-document-word
-                       (if (string-match "^-" sh-here-document-word) 1 0)))))))
+          (insert ?\n tabs (replace-regexp-in-string
+                            "\\`-?[ \t]*" "" delim))))))
 
 \f
 ;; various other commands
@@ -3574,7 +3587,7 @@ With an argument, deletes the backslashes.
 
 This function does not modify the last line of the region if the region ends
 right at the start of the following line; it does not modify blank lines
-at the start of the region.  So you can put the region around an entire 
+at the start of the region.  So you can put the region around an entire
 shell command and conveniently use this command."
   (interactive "r\nP")
   (save-excursion
index 914c6725cc77e7a6509293d2c871b7259078dc7b..9f0e63e80a680509e901eb44b74cbd4d7b321451 100644 (file)
@@ -2039,7 +2039,7 @@ Ignore byte-compiler warnings you might see."
 
 (defun vhdl-run-when-idle (secs repeat function)
   "Wait until idle, then run FUNCTION."
-  (if vhdl-xemacs
+  (if (fboundp 'start-itimer)
       (start-itimer "vhdl-mode" function secs repeat t)
 ;    (run-with-idle-timer secs repeat function)))
     ;; explicitely activate timer (necessary when Emacs is already idle)
@@ -2679,7 +2679,9 @@ STRING are replaced by `-' and substrings are converted to lower case."
   (define-key vhdl-mode-map " "            'vhdl-electric-space)
   (if vhdl-intelligent-tab
       (define-key vhdl-mode-map "\t"       'vhdl-electric-tab)
-    (define-key vhdl-mode-map "\t"         'indent-according-to-mode))
+    ;; The default binding of TAB already calls `indent-according-to-mode'.
+    ;; (define-key vhdl-mode-map "\t"         'indent-according-to-mode)
+    )
   (define-key vhdl-mode-map "\r"           'vhdl-electric-return)
   (define-key vhdl-mode-map "-"            'vhdl-electric-dash)
   (define-key vhdl-mode-map "["            'vhdl-electric-open-bracket)
@@ -2696,12 +2698,14 @@ STRING are replaced by `-' and substrings are converted to lower case."
 
 ;; define special minibuffer keymap for enabling word completion in minibuffer
 ;; (useful in template generator prompts)
-(defvar vhdl-minibuffer-local-map (copy-keymap minibuffer-local-map)
+(defvar vhdl-minibuffer-local-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map minibuffer-local-map)
+    (when vhdl-word-completion-in-minibuffer
+      (define-key map "\t" 'vhdl-minibuffer-tab))
+    map)
   "Keymap for minibuffer used in VHDL Mode.")
 
-(when vhdl-word-completion-in-minibuffer
-  (define-key vhdl-minibuffer-local-map "\t" 'vhdl-minibuffer-tab))
-
 ;; set up electric character functions to work with
 ;; `delete-selection-mode' (Emacs) and `pending-delete-mode' (XEmacs)
 (mapcar
@@ -2792,134 +2796,134 @@ STRING are replaced by `-' and substrings are converted to lower case."
      (when (memq 'vhdl vhdl-electric-keywords)
        ;; VHDL'93 keywords
        '(
-        ("--"            "" vhdl-template-display-comment-hook 0)
-        ("abs"           "" vhdl-template-default-hook 0)
-        ("access"        "" vhdl-template-default-hook 0)
-        ("after"         "" vhdl-template-default-hook 0)
-        ("alias"         "" vhdl-template-alias-hook 0)
-        ("all"           "" vhdl-template-default-hook 0)
-        ("and"           "" vhdl-template-default-hook 0)
-        ("arch"          "" vhdl-template-architecture-hook 0)
-        ("architecture"  "" vhdl-template-architecture-hook 0)
-        ("array"         "" vhdl-template-default-hook 0)
-        ("assert"        "" vhdl-template-assert-hook 0)
-        ("attr"          "" vhdl-template-attribute-hook 0)
-        ("attribute"     "" vhdl-template-attribute-hook 0)
-        ("begin"         "" vhdl-template-default-indent-hook 0)
-        ("block"         "" vhdl-template-block-hook 0)
-        ("body"          "" vhdl-template-default-hook 0)
-        ("buffer"        "" vhdl-template-default-hook 0)
-        ("bus"           "" vhdl-template-default-hook 0)
-        ("case"          "" vhdl-template-case-hook 0)
-        ("comp"          "" vhdl-template-component-hook 0)
-        ("component"     "" vhdl-template-component-hook 0)
-        ("cond"          "" vhdl-template-conditional-signal-asst-hook 0)
-        ("conditional"   "" vhdl-template-conditional-signal-asst-hook 0)
-        ("conf"          "" vhdl-template-configuration-hook 0)
-        ("configuration" "" vhdl-template-configuration-hook 0)
-        ("cons"          "" vhdl-template-constant-hook 0)
-        ("constant"      "" vhdl-template-constant-hook 0)
-        ("disconnect"    "" vhdl-template-disconnect-hook 0)
-        ("downto"        "" vhdl-template-default-hook 0)
-        ("else"          "" vhdl-template-else-hook 0)
-        ("elseif"        "" vhdl-template-elsif-hook 0)
-        ("elsif"         "" vhdl-template-elsif-hook 0)
-        ("end"           "" vhdl-template-default-indent-hook 0)
-        ("entity"        "" vhdl-template-entity-hook 0)
-        ("exit"          "" vhdl-template-exit-hook 0)
-        ("file"          "" vhdl-template-file-hook 0)
-        ("for"           "" vhdl-template-for-hook 0)
-        ("func"          "" vhdl-template-function-hook 0)
-        ("function"      "" vhdl-template-function-hook 0)
-        ("generic"       "" vhdl-template-generic-hook 0)
-        ("group"         "" vhdl-template-group-hook 0)
-        ("guarded"       "" vhdl-template-default-hook 0)
-        ("if"            "" vhdl-template-if-hook 0)
-        ("impure"        "" vhdl-template-default-hook 0)
-        ("in"            "" vhdl-template-default-hook 0)
-        ("inertial"      "" vhdl-template-default-hook 0)
-        ("inout"         "" vhdl-template-default-hook 0)
-        ("inst"          "" vhdl-template-instance-hook 0)
-        ("instance"      "" vhdl-template-instance-hook 0)
-        ("is"            "" vhdl-template-default-hook 0)
-        ("label"         "" vhdl-template-default-hook 0)
-        ("library"       "" vhdl-template-library-hook 0)
-        ("linkage"       "" vhdl-template-default-hook 0)
-        ("literal"       "" vhdl-template-default-hook 0)
-        ("loop"          "" vhdl-template-bare-loop-hook 0)
-        ("map"           "" vhdl-template-map-hook 0)
-        ("mod"           "" vhdl-template-default-hook 0)
-        ("nand"          "" vhdl-template-default-hook 0)
-        ("new"           "" vhdl-template-default-hook 0)
-        ("next"          "" vhdl-template-next-hook 0)
-        ("nor"           "" vhdl-template-default-hook 0)
-        ("not"           "" vhdl-template-default-hook 0)
-        ("null"          "" vhdl-template-default-hook 0)
-        ("of"            "" vhdl-template-default-hook 0)
-        ("on"            "" vhdl-template-default-hook 0)
-        ("open"          "" vhdl-template-default-hook 0)
-        ("or"            "" vhdl-template-default-hook 0)
-        ("others"        "" vhdl-template-others-hook 0)
-        ("out"           "" vhdl-template-default-hook 0)
-        ("pack"          "" vhdl-template-package-hook 0)
-        ("package"       "" vhdl-template-package-hook 0)
-        ("port"          "" vhdl-template-port-hook 0)
-        ("postponed"     "" vhdl-template-default-hook 0)
-        ("procedure"     "" vhdl-template-procedure-hook 0)
-        ("process"       "" vhdl-template-process-hook 0)
-        ("pure"          "" vhdl-template-default-hook 0)
-        ("range"         "" vhdl-template-default-hook 0)
-        ("record"        "" vhdl-template-default-hook 0)
-        ("register"      "" vhdl-template-default-hook 0)
-        ("reject"        "" vhdl-template-default-hook 0)
-        ("rem"           "" vhdl-template-default-hook 0)
-        ("report"        "" vhdl-template-report-hook 0)
-        ("return"        "" vhdl-template-return-hook 0)
-        ("rol"           "" vhdl-template-default-hook 0)
-        ("ror"           "" vhdl-template-default-hook 0)
-        ("select"        "" vhdl-template-selected-signal-asst-hook 0)
-        ("severity"      "" vhdl-template-default-hook 0)
-        ("shared"        "" vhdl-template-default-hook 0)
-        ("sig"           "" vhdl-template-signal-hook 0)
-        ("signal"        "" vhdl-template-signal-hook 0)
-        ("sla"           "" vhdl-template-default-hook 0)
-        ("sll"           "" vhdl-template-default-hook 0)
-        ("sra"           "" vhdl-template-default-hook 0)
-        ("srl"           "" vhdl-template-default-hook 0)
-        ("subtype"       "" vhdl-template-subtype-hook 0)
-        ("then"          "" vhdl-template-default-hook 0)
-        ("to"            "" vhdl-template-default-hook 0)
-        ("transport"     "" vhdl-template-default-hook 0)
-        ("type"          "" vhdl-template-type-hook 0)
-        ("unaffected"    "" vhdl-template-default-hook 0)
-        ("units"         "" vhdl-template-default-hook 0)
-        ("until"         "" vhdl-template-default-hook 0)
-        ("use"           "" vhdl-template-use-hook 0)
-        ("var"           "" vhdl-template-variable-hook 0)
-        ("variable"      "" vhdl-template-variable-hook 0)
-        ("wait"          "" vhdl-template-wait-hook 0)
-        ("when"          "" vhdl-template-when-hook 0)
-        ("while"         "" vhdl-template-while-loop-hook 0)
-        ("with"          "" vhdl-template-with-hook 0)
-        ("xnor"          "" vhdl-template-default-hook 0)
-        ("xor"           "" vhdl-template-default-hook 0)
+        ("--"            "" vhdl-template-display-comment-hook 0 t)
+        ("abs"           "" vhdl-template-default-hook 0 t)
+        ("access"        "" vhdl-template-default-hook 0 t)
+        ("after"         "" vhdl-template-default-hook 0 t)
+        ("alias"         "" vhdl-template-alias-hook 0 t)
+        ("all"           "" vhdl-template-default-hook 0 t)
+        ("and"           "" vhdl-template-default-hook 0 t)
+        ("arch"          "" vhdl-template-architecture-hook 0 t)
+        ("architecture"  "" vhdl-template-architecture-hook 0 t)
+        ("array"         "" vhdl-template-default-hook 0 t)
+        ("assert"        "" vhdl-template-assert-hook 0 t)
+        ("attr"          "" vhdl-template-attribute-hook 0 t)
+        ("attribute"     "" vhdl-template-attribute-hook 0 t)
+        ("begin"         "" vhdl-template-default-indent-hook 0 t)
+        ("block"         "" vhdl-template-block-hook 0 t)
+        ("body"          "" vhdl-template-default-hook 0 t)
+        ("buffer"        "" vhdl-template-default-hook 0 t)
+        ("bus"           "" vhdl-template-default-hook 0 t)
+        ("case"          "" vhdl-template-case-hook 0 t)
+        ("comp"          "" vhdl-template-component-hook 0 t)
+        ("component"     "" vhdl-template-component-hook 0 t)
+        ("cond"          "" vhdl-template-conditional-signal-asst-hook 0 t)
+        ("conditional"   "" vhdl-template-conditional-signal-asst-hook 0 t)
+        ("conf"          "" vhdl-template-configuration-hook 0 t)
+        ("configuration" "" vhdl-template-configuration-hook 0 t)
+        ("cons"          "" vhdl-template-constant-hook 0 t)
+        ("constant"      "" vhdl-template-constant-hook 0 t)
+        ("disconnect"    "" vhdl-template-disconnect-hook 0 t)
+        ("downto"        "" vhdl-template-default-hook 0 t)
+        ("else"          "" vhdl-template-else-hook 0 t)
+        ("elseif"        "" vhdl-template-elsif-hook 0 t)
+        ("elsif"         "" vhdl-template-elsif-hook 0 t)
+        ("end"           "" vhdl-template-default-indent-hook 0 t)
+        ("entity"        "" vhdl-template-entity-hook 0 t)
+        ("exit"          "" vhdl-template-exit-hook 0 t)
+        ("file"          "" vhdl-template-file-hook 0 t)
+        ("for"           "" vhdl-template-for-hook 0 t)
+        ("func"          "" vhdl-template-function-hook 0 t)
+        ("function"      "" vhdl-template-function-hook 0 t)
+        ("generic"       "" vhdl-template-generic-hook 0 t)
+        ("group"         "" vhdl-template-group-hook 0 t)
+        ("guarded"       "" vhdl-template-default-hook 0 t)
+        ("if"            "" vhdl-template-if-hook 0 t)
+        ("impure"        "" vhdl-template-default-hook 0 t)
+        ("in"            "" vhdl-template-default-hook 0 t)
+        ("inertial"      "" vhdl-template-default-hook 0 t)
+        ("inout"         "" vhdl-template-default-hook 0 t)
+        ("inst"          "" vhdl-template-instance-hook 0 t)
+        ("instance"      "" vhdl-template-instance-hook 0 t)
+        ("is"            "" vhdl-template-default-hook 0 t)
+        ("label"         "" vhdl-template-default-hook 0 t)
+        ("library"       "" vhdl-template-library-hook 0 t)
+        ("linkage"       "" vhdl-template-default-hook 0 t)
+        ("literal"       "" vhdl-template-default-hook 0 t)
+        ("loop"          "" vhdl-template-bare-loop-hook 0 t)
+        ("map"           "" vhdl-template-map-hook 0 t)
+        ("mod"           "" vhdl-template-default-hook 0 t)
+        ("nand"          "" vhdl-template-default-hook 0 t)
+        ("new"           "" vhdl-template-default-hook 0 t)
+        ("next"          "" vhdl-template-next-hook 0 t)
+        ("nor"           "" vhdl-template-default-hook 0 t)
+        ("not"           "" vhdl-template-default-hook 0 t)
+        ("null"          "" vhdl-template-default-hook 0 t)
+        ("of"            "" vhdl-template-default-hook 0 t)
+        ("on"            "" vhdl-template-default-hook 0 t)
+        ("open"          "" vhdl-template-default-hook 0 t)
+        ("or"            "" vhdl-template-default-hook 0 t)
+        ("others"        "" vhdl-template-others-hook 0 t)
+        ("out"           "" vhdl-template-default-hook 0 t)
+        ("pack"          "" vhdl-template-package-hook 0 t)
+        ("package"       "" vhdl-template-package-hook 0 t)
+        ("port"          "" vhdl-template-port-hook 0 t)
+        ("postponed"     "" vhdl-template-default-hook 0 t)
+        ("procedure"     "" vhdl-template-procedure-hook 0 t)
+        ("process"       "" vhdl-template-process-hook 0 t)
+        ("pure"          "" vhdl-template-default-hook 0 t)
+        ("range"         "" vhdl-template-default-hook 0 t)
+        ("record"        "" vhdl-template-default-hook 0 t)
+        ("register"      "" vhdl-template-default-hook 0 t)
+        ("reject"        "" vhdl-template-default-hook 0 t)
+        ("rem"           "" vhdl-template-default-hook 0 t)
+        ("report"        "" vhdl-template-report-hook 0 t)
+        ("return"        "" vhdl-template-return-hook 0 t)
+        ("rol"           "" vhdl-template-default-hook 0 t)
+        ("ror"           "" vhdl-template-default-hook 0 t)
+        ("select"        "" vhdl-template-selected-signal-asst-hook 0 t)
+        ("severity"      "" vhdl-template-default-hook 0 t)
+        ("shared"        "" vhdl-template-default-hook 0 t)
+        ("sig"           "" vhdl-template-signal-hook 0 t)
+        ("signal"        "" vhdl-template-signal-hook 0 t)
+        ("sla"           "" vhdl-template-default-hook 0 t)
+        ("sll"           "" vhdl-template-default-hook 0 t)
+        ("sra"           "" vhdl-template-default-hook 0 t)
+        ("srl"           "" vhdl-template-default-hook 0 t)
+        ("subtype"       "" vhdl-template-subtype-hook 0 t)
+        ("then"          "" vhdl-template-default-hook 0 t)
+        ("to"            "" vhdl-template-default-hook 0 t)
+        ("transport"     "" vhdl-template-default-hook 0 t)
+        ("type"          "" vhdl-template-type-hook 0 t)
+        ("unaffected"    "" vhdl-template-default-hook 0 t)
+        ("units"         "" vhdl-template-default-hook 0 t)
+        ("until"         "" vhdl-template-default-hook 0 t)
+        ("use"           "" vhdl-template-use-hook 0 t)
+        ("var"           "" vhdl-template-variable-hook 0 t)
+        ("variable"      "" vhdl-template-variable-hook 0 t)
+        ("wait"          "" vhdl-template-wait-hook 0 t)
+        ("when"          "" vhdl-template-when-hook 0 t)
+        ("while"         "" vhdl-template-while-loop-hook 0 t)
+        ("with"          "" vhdl-template-with-hook 0 t)
+        ("xnor"          "" vhdl-template-default-hook 0 t)
+        ("xor"           "" vhdl-template-default-hook 0 t)
         ))
      ;; VHDL-AMS keywords
      (when (and (memq 'vhdl vhdl-electric-keywords) (vhdl-standard-p 'ams))
        '(
-        ("across"     "" vhdl-template-default-hook 0)
-        ("break"      "" vhdl-template-break-hook 0)
-        ("limit"      "" vhdl-template-limit-hook 0)
-        ("nature"     "" vhdl-template-nature-hook 0)
-        ("noise"      "" vhdl-template-default-hook 0)
-        ("procedural" "" vhdl-template-procedural-hook 0)
-        ("quantity"   "" vhdl-template-quantity-hook 0)
-        ("reference"  "" vhdl-template-default-hook 0)
-        ("spectrum"   "" vhdl-template-default-hook 0)
-        ("subnature"  "" vhdl-template-subnature-hook 0)
-        ("terminal"   "" vhdl-template-terminal-hook 0)
-        ("through"    "" vhdl-template-default-hook 0)
-        ("tolerance"  "" vhdl-template-default-hook 0)
+        ("across"     "" vhdl-template-default-hook 0 t)
+        ("break"      "" vhdl-template-break-hook 0 t)
+        ("limit"      "" vhdl-template-limit-hook 0 t)
+        ("nature"     "" vhdl-template-nature-hook 0 t)
+        ("noise"      "" vhdl-template-default-hook 0 t)
+        ("procedural" "" vhdl-template-procedural-hook 0 t)
+        ("quantity"   "" vhdl-template-quantity-hook 0 t)
+        ("reference"  "" vhdl-template-default-hook 0 t)
+        ("spectrum"   "" vhdl-template-default-hook 0 t)
+        ("subnature"  "" vhdl-template-subnature-hook 0 t)
+        ("terminal"   "" vhdl-template-terminal-hook 0 t)
+        ("through"    "" vhdl-template-default-hook 0 t)
+        ("tolerance"  "" vhdl-template-default-hook 0 t)
         ))
      ;; user model keywords
      (when (memq 'user vhdl-electric-keywords)
@@ -2931,7 +2935,7 @@ STRING are replaced by `-' and substrings are converted to lower case."
             (setq abbrev-list
                   (cons (list keyword ""
                               (vhdl-function-name
-                               "vhdl-model" (nth 0 (car alist)) "hook") 0)
+                               "vhdl-model" (nth 0 (car alist)) "hook") 0 t)
                         abbrev-list)))
           (setq alist (cdr alist)))
         abbrev-list)))))
@@ -3746,7 +3750,8 @@ STRING are replaced by `-' and substrings are converted to lower case."
      ("Highlight"
       ["Highlighting On/Off..."
        (customize-option
-       (if vhdl-xemacs 'font-lock-auto-fontify 'global-font-lock-mode)) t]
+       (if (fboundp 'global-font-lock-mode)
+           'global-font-lock-mode 'font-lock-auto-fontify)) t]
       ["Highlight Keywords"
        (progn (customize-set-variable 'vhdl-highlight-keywords
                                      (not vhdl-highlight-keywords))
@@ -7854,7 +7859,7 @@ Used for undoing after template abortion.")
 ;; correct different behavior of function `unread-command-events' in XEmacs
 (defun vhdl-character-to-event (arg))
 (defalias 'vhdl-character-to-event
-  (if vhdl-xemacs 'character-to-event 'identity))
+  (if (fboundp 'character-to-event) 'character-to-event 'identity))
 
 (defun vhdl-work-library ()
   "Return the working library name of the current project or \"work\" if no
@@ -10399,7 +10404,7 @@ but not if inside a comment or quote)."
          (when (stringp caught) (message caught)))
        (when (= invoke-char ?-) (setq abbrev-start-location (point)))
        ;; delete CR which is still in event queue
-       (if vhdl-xemacs
+       (if (fboundp 'enqueue-eval-event)
            (enqueue-eval-event 'delete-char -1)
          (setq unread-command-events   ; push back a delete char
                (list (vhdl-character-to-event ?\177))))))))
@@ -11923,9 +11928,7 @@ options vhdl-upper-case-{keywords,types,attributes,enum-values}."
   "Return the line number of the line containing point."
   (save-restriction
     (widen)
-    (save-excursion
-      (beginning-of-line)
-      (1+ (count-lines 1 (point))))))
+    (1+ (count-lines (point-min) (line-beginning-position)))))
 
 (defun vhdl-line-kill-entire (&optional arg)
   "Delete entire line."
@@ -16559,26 +16562,24 @@ to visually support naming conventions.")
 (defun vhdl-doc-variable (variable)
   "Display VARIABLE's documentation in *Help* buffer."
   (interactive)
-  (with-output-to-temp-buffer "*Help*"
+  (unless vhdl-xemacs
+    (help-setup-xref (list #'vhdl-doc-variable variable) (interactive-p)))
+  (with-output-to-temp-buffer (if (fboundp 'help-buffer) (help-buffer) "*Help*")
     (princ (documentation-property variable 'variable-documentation))
-    (unless vhdl-xemacs
-      (help-setup-xref (list #'vhdl-doc-variable variable) (interactive-p)))
-    (save-excursion
-      (set-buffer standard-output)
+    (with-current-buffer standard-output
       (help-mode))
     (print-help-return-message)))
 
 (defun vhdl-doc-mode ()
   "Display VHDL Mode documentation in *Help* buffer."
   (interactive)
-  (with-output-to-temp-buffer "*Help*"
+  (unless vhdl-xemacs
+    (help-setup-xref (list #'vhdl-doc-mode) (interactive-p)))
+  (with-output-to-temp-buffer (if (fboundp 'help-buffer) (help-buffer) "*Help*")
     (princ mode-name)
     (princ " mode:\n")
     (princ (documentation 'vhdl-mode))
-    (unless vhdl-xemacs
-      (help-setup-xref (list #'vhdl-doc-mode) (interactive-p)))
-    (save-excursion
-      (set-buffer standard-output)
+    (with-current-buffer standard-output
       (help-mode))
     (print-help-return-message)))
 
@@ -16587,5 +16588,5 @@ to visually support naming conventions.")
 
 (provide 'vhdl-mode)
 
-;;; arch-tag: 780d7073-9b5d-4c6c-b0d8-26b28783aba3
+;; arch-tag: 780d7073-9b5d-4c6c-b0d8-26b28783aba3
 ;;; vhdl-mode.el ends here
index e536e3c323718203bbdb75d339e5cafa9813bf8a..cb61c8383b503d8038acd975d0087c53030b84d0 100644 (file)
@@ -220,7 +220,9 @@ may have changed\) back to `save-place-alist'."
               ((eq 'nospecial save-place-version-control) version-control)
               (t
                t))))
-        (write-file file)
+       (condition-case nil
+           (write-file file)
+         (file-error (message "Can't write %s" file)))
         (kill-buffer (current-buffer))
         (message "Saving places to %s...done" file)))))
 
index a57c63b499d4e39a8ba075ef5432fccb0ab6b8ba..93c12423bb43cb17c48ab006226b92124051bc16 100644 (file)
@@ -1279,7 +1279,9 @@ Return 0 if current buffer is not a mini-buffer."
 (defalias 'advertised-undo 'undo)
 
 (defconst undo-equiv-table (make-hash-table :test 'eq :weakness t)
-  "Table mapping redo records to the corresponding undo one.")
+  "Table mapping redo records to the corresponding undo one.
+A redo record for undo-in-region maps to t.
+A redo record for ordinary undo maps to the following (earlier) undo.")
 
 (defvar undo-in-region nil
   "Non-nil if `pending-undo-list' is not just a tail of `buffer-undo-list'.")
@@ -1339,7 +1341,7 @@ as an argument limits undo to changes within the current region."
          (message (if undo-in-region
                       (if equiv "Redo in region!" "Undo in region!")
                     (if equiv "Redo!" "Undo!"))))
-      (when (and equiv undo-no-redo)
+      (when (and (consp equiv) undo-no-redo)
        ;; The equiv entry might point to another redo record if we have done
        ;; undo-redo-undo-redo-... so skip to the very last equiv.
        (while (let ((next (gethash equiv undo-equiv-table)))
@@ -1350,10 +1352,13 @@ as an argument limits undo to changes within the current region."
         (prefix-numeric-value arg)
        1))
     ;; Record the fact that the just-generated undo records come from an
-    ;; undo operation, so we can skip them later on.
+    ;; undo operation--that is, they are redo records.
+    ;; In the ordinary case (not within a region), map the redo
+    ;; record to the following undos.
     ;; I don't know how to do that in the undo-in-region case.
-    (unless undo-in-region
-      (puthash buffer-undo-list pending-undo-list undo-equiv-table))
+    (puthash buffer-undo-list
+            (if undo-in-region t pending-undo-list)
+            undo-equiv-table)
     ;; Don't specify a position in the undo record for the undo command.
     ;; Instead, undoing this should move point to where the change is.
     (let ((tail buffer-undo-list)
index 682c7342656708098a13cfd16df225d2c79fae62..f6069639e3a84ace18a422a206ccac1006995002 100644 (file)
@@ -277,6 +277,8 @@ from being initialized."
 
 (defvar emacs-quick-startup nil)
 
+(defvar emacs-basic-display nil)
+
 (defvar init-file-debug nil)
 
 (defvar init-file-had-error nil)
@@ -677,11 +679,13 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
                (setq argval nil
                       argi orig-argi)))))
        (cond
-        ((member argi '("-Q" "-bare-bones"))
+        ((member argi '("-Q" "-quick"))
          (setq init-file-user nil
                site-run-file nil
-               no-blinking-cursor t
-               emacs-quick-startup t)
+               emacs-quick-startup t))
+        ((member argi '("-D" "-basic-display"))
+         (setq no-blinking-cursor t
+               emacs-basic-display t)
          (push '(vertical-scroll-bars . nil) initial-frame-alist))
         ((member argi '("-q" "-no-init-file"))
          (setq init-file-user nil))
@@ -710,20 +714,29 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
     (and command-line-args
          (setcdr command-line-args args)))
 
-  ;; Under X Windows, this creates the X frame and deletes the terminal frame.
+  ;; Under X Window, this creates the X frame and deletes the terminal frame.
   (when (fboundp 'frame-initialize)
     (frame-initialize))
 
+  ;; Turn off blinking cursor if so specified in X resources.  This is here
+  ;; only because all other settings of no-blinking-cursor is here.
+  (unless (or noninteractive
+             emacs-basic-display
+             (and (memq window-system '(x w32 mac))
+                  (not (member (x-get-resource "cursorBlink" "CursorBlink")
+                               '("off" "false")))))
+    (setq no-blinking-cursor t))
+
   ;; If frame was created with a menu bar, set menu-bar-mode on.
   (unless (or noninteractive
-             emacs-quick-startup
+             emacs-basic-display
               (and (memq window-system '(x w32))
                    (<= (frame-parameter nil 'menu-bar-lines) 0)))
     (menu-bar-mode 1))
 
   ;; If frame was created with a tool bar, switch tool-bar-mode on.
   (unless (or noninteractive
-             emacs-quick-startup
+             emacs-basic-display
               (not (display-graphic-p))
               (<= (frame-parameter nil 'tool-bar-lines) 0))
     (tool-bar-mode 1))
@@ -734,11 +747,21 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
   (custom-reevaluate-setting 'normal-erase-is-backspace)
 
   (unless (or noninteractive
-             emacs-quick-startup
+             emacs-basic-display
               (not (display-graphic-p))
               (not (fboundp 'x-show-tip)))
     (tooltip-mode 1))
 
+  ;; If you change the code below, you need to also change the
+  ;; corresponding code in the xterm-mouse-mode defcustom.  The two need
+  ;; to be equivalent under all conditions, or Custom will get confused.
+  (unless (or noninteractive
+             window-system)
+    (let ((term (getenv "TERM")))
+      (and term
+          (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)" term)
+          (xterm-mouse-mode 1))))
+
   ;; Register default TTY colors for the case the terminal hasn't a
   ;; terminal init file.
   (unless (memq window-system '(x w32))
@@ -1041,7 +1064,7 @@ using the mouse.\n\n"
           "Useful File menu items:\n"
           :face variable-pitch "\
 Exit Emacs\t(Or type Control-x followed by Control-c)
-Recover Session\tRecover files you were editing before a crash
+Recover Crashed Session\tRecover files you were editing before a crash
 
 
 
@@ -1168,7 +1191,7 @@ where FACE is a valid face specification, as it can be used with
                         (emacs-version)
                         "\n"
                         :face '(variable-pitch :height 0.5)
-                        "Copyright (C) 2004 Free Software Foundation, Inc.")
+                        "Copyright (C) 2005 Free Software Foundation, Inc.")
     (and auto-save-list-file-prefix
         ;; Don't signal an error if the
         ;; directory for auto-save-list files
index aff894cab685fb5186dcde6702a7ee7ac47b01fd..8cfc11f3dba36ac1e28d6029cf2ed813a9b016bb 100644 (file)
@@ -684,14 +684,13 @@ Buffer local variable.")
 (defvar term-ansi-at-save-user nil)
 (defvar term-ansi-at-save-pwd nil)
 (defvar term-ansi-at-save-anon nil)
-(defvar term-ansi-current-bold 0)
+(defvar term-ansi-current-bold nil)
 (defvar term-ansi-current-color 0)
-(defvar term-ansi-face-already-done 0)
+(defvar term-ansi-face-already-done nil)
 (defvar term-ansi-current-bg-color 0)
-(defvar term-ansi-current-underline 0)
-(defvar term-ansi-current-highlight 0)
-(defvar term-ansi-current-reverse 0)
-(defvar term-ansi-current-invisible 0)
+(defvar term-ansi-current-underline nil)
+(defvar term-ansi-current-reverse nil)
+(defvar term-ansi-current-invisible nil)
 
 ;;; Four should be enough, if you want more, just add. -mm
 (defvar term-terminal-more-parameters 0)
@@ -732,8 +731,7 @@ is buffer-local.")
      [ "Enable paging" term-pager-toggle (not term-pager-count)]
      [ "Disable paging" term-pager-toggle term-pager-count])))
 
-(if term-mode-map
-    nil
+(unless term-mode-map
   (setq term-mode-map (make-sparse-keymap))
   (define-key term-mode-map "\ep" 'term-previous-input)
   (define-key term-mode-map "\en" 'term-next-input)
@@ -1060,7 +1058,6 @@ Entry to this mode runs the hooks on `term-mode-hook'."
   (make-local-variable 'term-ansi-face-already-done)
   (make-local-variable 'term-ansi-current-bg-color)
   (make-local-variable 'term-ansi-current-underline)
-  (make-local-variable 'term-ansi-current-highlight)
   (make-local-variable 'term-ansi-current-reverse)
   (make-local-variable 'term-ansi-current-invisible)
 
@@ -2507,14 +2504,14 @@ See `term-prompt-regexp'."
 (defun term-horizontal-column ()
   (- (term-current-column) (term-start-line-column)))
 
-;; Calls either vertical-motion or buffer-vertical-motion
+;; Calls either vertical-motion or term-buffer-vertical-motion
 (defmacro term-vertical-motion (count)
   (list 'funcall 'term-vertical-motion count))
 
 ;; An emulation of vertical-motion that is independent of having a window.
 ;; Instead, it uses the term-width variable as the logical window width.
 
-(defun buffer-vertical-motion (count)
+(defun term-buffer-vertical-motion (count)
   (cond ((= count 0)
         (move-to-column (* term-width (/ (current-column) term-width)))
         0)
@@ -2699,7 +2696,7 @@ See `term-prompt-regexp'."
              (setq term-vertical-motion (symbol-function 'vertical-motion))
              (term-check-size proc))
          (setq term-vertical-motion
-               (symbol-function 'buffer-vertical-motion)))
+               (symbol-function 'term-buffer-vertical-motion)))
 
        (setq save-marker (copy-marker (process-mark proc)))
 
@@ -3039,12 +3036,12 @@ See `term-prompt-regexp'."
   (setq term-current-column 1)
   (setq term-insert-mode nil)
   (setq term-current-face nil)
-  (setq term-ansi-current-underline 0)
-  (setq term-ansi-current-bold 0)
-  (setq term-ansi-current-reverse 0)
+  (setq term-ansi-current-underline nil)
+  (setq term-ansi-current-bold nil)
+  (setq term-ansi-current-reverse nil)
   (setq term-ansi-current-color 0)
-  (setq term-ansi-current-invisible 0)
-  (setq term-ansi-face-already-done 0)
+  (setq term-ansi-current-invisible nil)
+  (setq term-ansi-face-already-done nil)
   (setq term-ansi-current-bg-color 0))
 
 ;;; New function to deal with ansi colorized output, as you can see you can
@@ -3055,32 +3052,32 @@ See `term-prompt-regexp'."
 
 ;;; Bold  (terminfo: bold)
    ((eq parameter 1)
-    (setq term-ansi-current-bold 1))
+    (setq term-ansi-current-bold t))
 
 ;;; Underline
    ((eq parameter 4)
-    (setq term-ansi-current-underline 1))
+    (setq term-ansi-current-underline t))
 
 ;;; Blink (unsupported by Emacs), will be translated to bold.
 ;;; This may change in the future though.
    ((eq parameter 5)
-    (setq term-ansi-current-bold 1))
+    (setq term-ansi-current-bold t))
 
 ;;; Reverse
    ((eq parameter 7)
-    (setq term-ansi-current-reverse 1))
+    (setq term-ansi-current-reverse t))
 
 ;;; Invisible
    ((eq parameter 8)
-    (setq term-ansi-current-invisible 1))
+    (setq term-ansi-current-invisible t))
 
 ;;; Reset underline (i.e. terminfo rmul)
    ((eq parameter 24)
-    (setq term-ansi-current-underline 0))
+    (setq term-ansi-current-underline nil))
 
 ;;; Reset reverse (i.e. terminfo rmso)
    ((eq parameter 27)
-    (setq term-ansi-current-reverse 0))
+    (setq term-ansi-current-reverse nil))
 
 ;;; Foreground
    ((and (>= parameter 30) (<= parameter 37))
@@ -3101,12 +3098,12 @@ See `term-prompt-regexp'."
 ;;; 0 (Reset) or unknown (reset anyway)
    (t
     (setq term-current-face nil)
-    (setq term-ansi-current-underline 0)
-    (setq term-ansi-current-bold 0)
-    (setq term-ansi-current-reverse 0)
+    (setq term-ansi-current-underline nil)
+    (setq term-ansi-current-bold nil)
+    (setq term-ansi-current-reverse nil)
     (setq term-ansi-current-color 0)
-    (setq term-ansi-current-invisible 0)
-    (setq term-ansi-face-already-done 1)
+    (setq term-ansi-current-invisible nil)
+    (setq term-ansi-face-already-done t)
     (setq term-ansi-current-bg-color 0)))
 
 ;      (message "Debug: U-%d R-%d B-%d I-%d D-%d F-%d B-%d"
@@ -3119,9 +3116,9 @@ See `term-prompt-regexp'."
 ;                 term-ansi-current-bg-color)
 
 
-  (if (= term-ansi-face-already-done 0)
-      (if (= term-ansi-current-reverse 1)
-         (if (= term-ansi-current-invisible 1)
+  (unless term-ansi-face-already-done
+      (if term-ansi-current-reverse
+         (if term-ansi-current-invisible
              (setq term-current-face
                    (if (= term-ansi-current-color 0)
                        (list :background
@@ -3143,13 +3140,13 @@ See `term-prompt-regexp'."
                        (if (= term-ansi-current-bg-color 0)
                            (face-background 'default)
                        (elt ansi-term-color-vector term-ansi-current-bg-color))))
-           (if (= term-ansi-current-bold 1)
+           (when term-ansi-current-bold
                (setq term-current-face
                      (append '(:weight bold) term-current-face)))
-           (if (= term-ansi-current-underline 1)
+           (when term-ansi-current-underline
                (setq term-current-face
                      (append '(:underline t) term-current-face))))
-       (if (= term-ansi-current-invisible 1)
+       (if term-ansi-current-invisible
            (setq term-current-face
                  (if (= term-ansi-current-bg-color 0)
                      (list :background
@@ -3167,15 +3164,15 @@ See `term-prompt-regexp'."
                      (elt ansi-term-color-vector term-ansi-current-color)
                      :background
                      (elt ansi-term-color-vector term-ansi-current-bg-color)))
-         (if (= term-ansi-current-bold 1)
+         (when term-ansi-current-bold
              (setq term-current-face
                    (append '(:weight bold) term-current-face)))
-         (if (= term-ansi-current-underline 1)
+         (when term-ansi-current-underline
              (setq term-current-face
                    (append '(:underline t) term-current-face))))))
 
 ;;;    (message "Debug %S" term-current-face)
-  (setq term-ansi-face-already-done 0))
+  (setq term-ansi-face-already-done nil))
 
 
 ;;; Handle a character assuming (eq terminal-state 2) -
index 4a59560b06650fbae5c73681f941aeb81e360c79..1dea51aa7c0f05690117d66f1a380036a64b4b4e 100644 (file)
@@ -77,7 +77,7 @@
 ;;(require 'select)
 (require 'menu-bar)
 (require 'fontset)
-(require 'x-dnd)
+(require 'dnd)
 
 (defvar x-invocation-args)
 
@@ -1085,13 +1085,29 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
 (put 'escape 'ascii-character ?\e)
 
 \f
-;;;; Keysyms
-
-;; Define constant values to be set to mac-keyboard-text-encoding
-(defconst kTextEncodingMacRoman 0)
-(defconst kTextEncodingISOLatin1 513 "0x201")
-(defconst kTextEncodingISOLatin2 514 "0x202")
-
+;;;; Keyboard layout/language change events
+(defconst mac-script-code-coding-systems
+  '((0 . mac-roman)                    ; smRoman
+    (1 . japanese-shift-jis)           ; smJapanese
+    (2 . chinese-big5)                 ; smTradChinese
+    (3 . korean-iso-8bit)              ; smKorean
+    (7 . mac-cyrillic)                 ; smCyrillic
+    (25 . chinese-iso-8bit)            ; smSimpChinese
+    (29 . mac-centraleurroman)         ; smCentralEuroRoman
+    )
+  "Alist of Mac script codes vs Emacs coding systems.")
+
+;;;; Keyboard layout/language change events
+(defun mac-handle-language-change (event)
+  (interactive "e")
+  (let ((coding-system
+        (cdr (assq (car (cadr event)) mac-script-code-coding-systems))))
+    (set-keyboard-coding-system (or coding-system 'mac-roman))
+    ;; MacJapanese maps reverse solidus to ?\x80.
+    (if (eq coding-system 'japanese-shift-jis)
+       (define-key key-translation-map [?\x80] "\\"))))
+
+(define-key special-event-map [language-change] 'mac-handle-language-change)
 \f
 ;;;; Selections and cut buffers
 
@@ -1249,8 +1265,8 @@ Switch to a buffer editing the last file dropped."
                      (if (and (> start 0) (> end 0))
                          (progn (set-mark start)
                                 (goto-char end)))))
-               (x-dnd-handle-one-url window 'private
-                                     (concat "file:" file-name))))
+               (dnd-handle-one-url window 'private
+                                   (concat "file:" file-name))))
            (car (cdr (cdr event)))))
   (raise-frame))
 
index 4646e54b4a04ad6aeb47dc0978a1fc9ea601f2e1..af914d4a8914a4135ff484e016e4ac21ad3e5440 100644 (file)
@@ -76,7 +76,7 @@
 (require 'faces)
 (require 'select)
 (require 'menu-bar)
-(require 'x-dnd)
+(require 'dnd)
 (require 'code-pages)
 
 ;; Conditional on new-fontset so bootstrapping works on non-GUI compiles
@@ -109,8 +109,8 @@ Switch to a buffer editing the last file dropped."
       (if (and (> x 0) (> y 0))
          (set-frame-selected-window nil window))
       (mapcar (lambda (file-name) 
-               (x-dnd-handle-one-url window 'private 
-                                     (concat "file:" file-name)))
+               (dnd-handle-one-url window 'private 
+                                   (concat "file:" file-name)))
                (car (cdr (cdr event)))))
   (raise-frame)))
 
index 44688e82b6d3084ec1a47635c672dfb1321157c6..23a25dee8273d79ee100c1aec82e581900ce1324 100644 (file)
   (define-key map "\e[24~" [f12])
   (define-key map "\e[29~" [print])
 
+  (define-key map "\e[11;2~" [S-f1])
+  (define-key map "\e[12;2~" [S-f2])
+  (define-key map "\e[13;2~" [S-f3])
+  (define-key map "\e[14;2~" [S-f4])
+  (define-key map "\e[15;2~" [S-f5])
+  (define-key map "\e[17;2~" [S-f6])
+  (define-key map "\e[18;2~" [S-f7])
+  (define-key map "\e[19;2~" [S-f8])
+  (define-key map "\e[20;2~" [S-f9])
+  (define-key map "\e[21;2~" [S-f10])
+  (define-key map "\e[23;2~" [S-f11])
+  (define-key map "\e[24;2~" [S-f12])
+
+  (define-key map "\e[11;5~" [C-f1])
+  (define-key map "\e[12;5~" [C-f2])
+  (define-key map "\e[13;5~" [C-f3])
+  (define-key map "\e[14;5~" [C-f4])
+  (define-key map "\e[15;5~" [C-f5])
+  (define-key map "\e[17;5~" [C-f6])
+  (define-key map "\e[18;5~" [C-f7])
+  (define-key map "\e[19;5~" [C-f8])
+  (define-key map "\e[20;5~" [C-f9])
+  (define-key map "\e[21;5~" [C-f10])
+  (define-key map "\e[23;5~" [C-f11])
+  (define-key map "\e[24;5~" [C-f12])
+
+  (define-key map "\e[11;6~" [C-S-f1])
+  (define-key map "\e[12;6~" [C-S-f2])
+  (define-key map "\e[13;6~" [C-S-f3])
+  (define-key map "\e[14;6~" [C-S-f4])
+  (define-key map "\e[15;6~" [C-S-f5])
+  (define-key map "\e[17;6~" [C-S-f6])
+  (define-key map "\e[18;6~" [C-S-f7])
+  (define-key map "\e[19;6~" [C-S-f8])
+  (define-key map "\e[20;6~" [C-S-f9])
+  (define-key map "\e[21;6~" [C-S-f10])
+  (define-key map "\e[23;6~" [C-S-f11])
+  (define-key map "\e[24;6~" [C-S-f12])
+
+  (define-key map "\e[11;3~" [A-f1])
+  (define-key map "\e[12;3~" [A-f2])
+  (define-key map "\e[13;3~" [A-f3])
+  (define-key map "\e[14;3~" [A-f4])
+  (define-key map "\e[15;3~" [A-f5])
+  (define-key map "\e[17;3~" [A-f6])
+  (define-key map "\e[18;3~" [A-f7])
+  (define-key map "\e[19;3~" [A-f8])
+  (define-key map "\e[20;3~" [A-f9])
+  (define-key map "\e[21;3~" [A-f10])
+  (define-key map "\e[23;3~" [A-f11])
+  (define-key map "\e[24;3~" [A-f12])
+
   (define-key map "\e[1;2A" [S-up])
   (define-key map "\e[1;2B" [S-down])
   (define-key map "\e[1;2C" [S-right])
   (define-key map "\e[1;2D" [S-left])
+  (define-key map "\e[1;2F" [S-end])
+  (define-key map "\e[1;2H" [S-home])
 
   (define-key map "\e[1;5A" [C-up])
   (define-key map "\e[1;5B" [C-down])
   (define-key map "\e[1;5C" [C-right])
   (define-key map "\e[1;5D" [C-left])
+  (define-key map "\e[1;5F" [C-end])
+  (define-key map "\e[1;5H" [C-home])
+
+  (define-key map "\e[1;6A" [C-S-up])
+  (define-key map "\e[1;6B" [C-S-down])
+  (define-key map "\e[1;6C" [C-S-right])
+  (define-key map "\e[1;6D" [C-S-left])
+  (define-key map "\e[1;6F" [C-S-end])
+  (define-key map "\e[1;6H" [C-S-home])
+
+  (define-key map "\e[1;3A" [A-up])
+  (define-key map "\e[1;3B" [A-down])
+  (define-key map "\e[1;3C" [A-right])
+  (define-key map "\e[1;3D" [A-left])
+  (define-key map "\e[1;3F" [A-end])
+  (define-key map "\e[1;3H" [A-home])
 
   (define-key map "\e[2;2~" [S-insert])
   (define-key map "\e[3;2~" [S-delete])
   (define-key map "\e[5;5~" [C-prior])
   (define-key map "\e[6;5~" [C-next])
 
+  (define-key map "\e[2;6~" [C-S-insert])
+  (define-key map "\e[3;6~" [C-S-delete])
+  (define-key map "\e[5;6~" [C-S-prior])
+  (define-key map "\e[6;6~" [C-S-next])
+
+  (define-key map "\e[2;3~" [A-insert])
+  (define-key map "\e[3;3~" [A-delete])
+  (define-key map "\e[5;3~" [A-prior])
+  (define-key map "\e[6;3~" [A-next])
+
   (define-key map "\eOA" [up])
   (define-key map "\eOB" [down])
   (define-key map "\eOC" [right])
 
 (defun xterm-rgb-convert-to-16bit (prim)
   "Convert an 8-bit primary color value PRIM to a corresponding 16-bit value."
-  (min 65535 (round (* (/ prim 255.0) 65535.0))))
+  (logior prim (lsh prim 8)))
 
 (defun xterm-register-default-colors ()
   "Register the default set of colors for xterm or compatible emulator.
@@ -160,9 +240,10 @@ versions of xterm."
            (tty-color-define (format "color-%d" (- 256 ncolors))
                              (- 256 ncolors)
                              (mapcar 'xterm-rgb-convert-to-16bit
-                                     (list (round (* r 42.5))
-                                           (round (* g 42.5))
-                                           (round (* b 42.5)))))
+                                     (list (if (zerop r) 0 (+ (* r 40) 55))
+                                           (if (zerop g) 0 (+ (* g 40) 55))
+                                           (if (zerop b) 0 (+ (* b 40) 55)))))
+
            (setq b (1+ b))
            (if (> b 5)
                (setq g (1+ g)
@@ -200,7 +281,7 @@ versions of xterm."
        ;; Now the 8 gray colors
        (while (> ncolors 0)
          (setq color (xterm-rgb-convert-to-16bit
-                      (round
+                      (floor
                        (if (= ncolors 8)
                            46.36363636
                          (+ (* (- 8 ncolors) 23.18181818) 69.54545454)))))
index 3e5b77d8baa60c973a4ab9a8ebdea21ffb8509af..69a456f1d70c7fc7d1d99d6672d4326ff1b8d844 100644 (file)
@@ -652,7 +652,7 @@ See `bibtex-generate-autokey' for details."
 
 (defcustom bibtex-autokey-titleword-ignore
   '("A" "An" "On" "The" "Eine?" "Der" "Die" "Das"
-    "[^A-Z].*" ".*[^A-Z0-9].*")
+    "[^[:upper:]].*" ".*[^[:upper:]0-9].*")
   "Determines words from the title that are not to be used in the key.
 Each item of the list is a regexp.  If a word of the title matches a
 regexp from that list, it is not included in the title part of the key.
@@ -1078,10 +1078,10 @@ The CDRs of the elements are t for header keys and nil for crossref keys.")
 (defconst bibtex-entry-type (concat "@" bibtex-field-name)
   "Regexp matching the type part of a BibTeX entry.")
 
-(defconst bibtex-reference-key "[][a-zA-Z0-9.:;?!`'/*@+|()<>&_^$-]+"
+(defconst bibtex-reference-key "[][[:alnum:].:;?!`'/*@+|()<>&_^$-]+"
   "Regexp matching the reference key part of a BibTeX entry.")
 
-(defconst bibtex-field-const "[][a-zA-Z0-9.:;?!`'/*@+=|<>&_^$-]+"
+(defconst bibtex-field-const "[][[:alnum:].:;?!`'/*@+=|<>&_^$-]+"
   "Regexp matching a BibTeX field constant.")
 
 (defconst bibtex-entry-head
@@ -2103,7 +2103,7 @@ and `bibtex-autokey-names-stretch'."
 (defun bibtex-autokey-demangle-name (fullname)
   "Get the last part from a well-formed FULLNAME and perform abbreviations."
   (let* (case-fold-search
-         (name (cond ((string-match "\\([A-Z][^, ]*\\)[^,]*," fullname)
+         (name (cond ((string-match "\\([[:upper:]][^, ]*\\)[^,]*," fullname)
                       ;; Name is of the form "von Last, First" or
                       ;; "von Last, Jr, First"
                       ;; --> Take the first capital part before the comma
@@ -2112,7 +2112,7 @@ and `bibtex-autokey-names-stretch'."
                       ;; Strange name: we have a comma, but nothing capital
                       ;; So we accept even lowercase names
                       (match-string 1 fullname))
-                     ((string-match "\\(\\<[a-z][^ ]* +\\)+\\([A-Z][^ ]*\\)"
+                     ((string-match "\\(\\<[[:lower:]][^ ]* +\\)+\\([[:upper:]][^ ]*\\)"
                                     fullname)
                       ;; name is of the form "First von Last", "von Last",
                       ;; "First von von Last", or "d'Last"
@@ -2796,7 +2796,7 @@ if that value is non-nil.
   (set (make-local-variable 'comment-start-skip)
        (concat (regexp-quote bibtex-comment-start) "\\>[ \t]*"))
   (set (make-local-variable 'comment-column) 0)
-  (set (make-local-variable 'defun-prompt-regexp) "^[ \t]*@[a-zA-Z0-9]+[ \t]*")
+  (set (make-local-variable 'defun-prompt-regexp) "^[ \t]*@[[:alnum:]]+[ \t]*")
   (set (make-local-variable 'outline-regexp) "[ \t]*@")
   (set (make-local-variable 'fill-paragraph-function) 'bibtex-fill-field)
   (set (make-local-variable 'fill-prefix) (make-string (+ bibtex-entry-offset
@@ -2825,7 +2825,7 @@ if that value is non-nil.
   ;; XEmacs needs easy-menu-add, Emacs does not care
   (easy-menu-add bibtex-edit-menu)
   (easy-menu-add bibtex-entry-menu)
-  (run-hooks 'bibtex-mode-hook))
+  (run-mode-hooks 'bibtex-mode-hook))
 
 (defun bibtex-field-list (entry-type)
   "Return list of allowed fields for entry ENTRY-TYPE.
index 24a3ade4922ef1215a828b4ee19518ca4c4b9464..55f36a4155fc709ad531b275299b1d09653f5fc8 100644 (file)
@@ -1,5 +1,5 @@
 ;;; url-ldap.el --- LDAP Uniform Resource Locator retrieval code
-;; Copyright (c) 1998 - 1999, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
   (format "<img alt='JPEG Photo' src='data:image/jpeg;base64,%s'>"
          (url-hexify-string (base64-encode-string data))))
 
-;; FIXME: This needs sorting out for the Emacs LDAP functions, specifically
-;; calls of ldap-open, ldap-close, ldap-search-internal
 ;;;###autoload
 (defun url-ldap (url)
+  "Perform an LDAP search specified by URL.
+The return value is a buffer displaying the search results in HTML.
+URL can be a URL string, or a URL vector of the type returned by
+`url-generic-parse-url'."
+  (if (stringp url)
+      (setq url (url-generic-parse-url (url-unhex-string url)))
+    (if (not (vectorp url))
+        (error "Argument is not a valid URL")))
   (save-excursion
     (set-buffer (generate-new-buffer " *url-ldap*"))
     (setq url-current-object url)
             (scope nil)
             (filter nil)
             (extensions nil)
-            (connection nil)
-            (results nil)
-            (extract-dn (and (fboundp 'function-max-args)
-                             (= (function-max-args 'ldap-search-internal) 7))))
+            (results nil))
 
        ;; Get rid of leading /
        (if (string-match "^/" data)
              scope (intern (url-unhex-string (or scope "base")))
              filter (url-unhex-string (or filter "(objectClass=*)")))
 
-       (if (not (memq scope '(base one tree)))
+       (if (not (memq scope '(base one sub)))
            (error "Malformed LDAP URL: Unknown scope: %S" scope))
 
        ;; Convert to the internal LDAP support scoping names.
                                   (assoc "!bindname" extensions))))
     
        ;; Now, let's actually do something with it.
-       (setq connection (ldap-open host (if binddn (list 'binddn binddn)))
-             results (if extract-dn
-                         (ldap-search-internal connection filter base-object scope attributes nil t)
-                       (ldap-search-internal connection filter base-object scope attributes nil)))
-                     
-       (ldap-close connection)
+       (setq results (cdr (ldap-search-internal
+                      (list 'host (concat host ":" (number-to-string port))
+                            'base base-object
+                            'attributes attributes
+                            'scope scope
+                            'filter filter
+                            'binddn binddn))))
+
        (insert "<html>\n"
                " <head>\n"
                "  <title>LDAP Search Results</title>\n"
        (mapc (lambda (obj)
                (insert "  <hr>\n"
                        "  <table border=1>\n")
-               (if extract-dn
-                   (insert "   <tr><th colspan=2>" (car obj) "</th></tr>\n"))
                (mapc (lambda (attr)
                        (if (= (length (cdr attr)) 1)
                            ;; single match, easy
                                             "<br>\n")
                                  "</td>"
                                  "   </tr>\n")))
-                     (if extract-dn (cdr obj) obj))
+                      obj)
                (insert "  </table>\n"))
              results)
 
index 4b37bc3365967853b0b76eff084e29f91271cdb5..3941fd681df561bb0316e32442b7920f28070a8f 100644 (file)
@@ -31,8 +31,8 @@
 ;;
 ;; Have you ever wished to use C-x r t (string-rectangle), M-%
 ;; (query-replace), M-c (capitalize-word), etc. to change the name of
-;; the files in a "dired" buffer? Now you can do this. All the power
-;; of emacs commands are available to renaming files!
+;; the files in a "dired" buffer? Now you can do this.  All the power
+;; of Emacs commands are available to renaming files!
 ;; 
 ;; This package provides a function that makes the filenames of a a
 ;; dired buffer editable, by changing the buffer mode (which inhibits
@@ -40,7 +40,7 @@
 ;; one or more files and directories, and when you press C-c C-c, the
 ;; renaming takes effect and you are back to dired mode.
 ;;
-;; Another things you can do with wdired:
+;; Another things you can do with WDired:
 ;;
 ;; - To move files to another directory (by typing their path,
 ;;   absolute or relative, as a part of the new filename).
 ;;
 ;; - To change the permission bits of the filenames (in systems with a
 ;;   working unix-alike `dired-chmod-program'). See and customize the
-;;   variable `wdired-allow-to-change-permissions'. To change a single
+;;   variable `wdired-allow-to-change-permissions'.  To change a single
 ;;   char (toggling between its two more usual values) you can press
-;;   the space bar over it or left-click the mouse. To set any char to
+;;   the space bar over it or left-click the mouse.  To set any char to
 ;;   an specific value (this includes the SUID, SGID and STI bits) you
-;;   can use the key labeled as the letter you want. Please note that
+;;   can use the key labeled as the letter you want.  Please note that
 ;;   permissions of the links cannot be changed in that way, because
 ;;   the change would affect to their targets, and this would not be
 ;;   WYSIWYG :-).
 ;;
 ;; - To mark files for deletion, by deleting their whole filename.
-;;
-;; I do not have a URL to hang wdired, but you can use the one below
-;; to find the latest version:
-;;
-;; http://groups.google.com/groups?as_ugroup=gnu.emacs.sources&as_q=wdired
 
 ;;; Installation:
 
 ;; (require 'wdired)
 ;; (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
 ;;
-;; This is recommended way for faster emacs startup time and lower
-;; memory consumption, but remind to add these lines before dired.el
-;; gets loaded (i.e., near the beginning of your .emacs file):
+;; This is the recommended way for faster Emacs startup time and lower
+;; memory consumption:
 ;;
 ;; (autoload 'wdired-change-to-wdired-mode "wdired")
-;; (add-hook 'dired-load-hook
+;; (eval-after-load "dired"
 ;;           '(lambda ()
 ;;              (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
 ;;              (define-key dired-mode-map
 ;;                [menu-bar immediate wdired-change-to-wdired-mode]
 ;;                '("Edit File Names" . wdired-change-to-wdired-mode))))
 ;;
-;;
-;; Type "M-x customize-group RET wdired" if you want make changes to
-;; the default behavior.
+;; Type "M-x customize-group RET wdired" if you want to make changes
+;; to the default behavior.
 
 ;;; Usage:
 
 
 ;;; Change Log:
 
-;; From 1.9 to 1.91
-;;
-;; - Fixed a bug (introduced in 1.9) so now files can be marked for
-;;   deletion again, by deleting their whole filename.
-
-;; From 1.8 to 1.9
-;;
-;; - Another alternative way of editing permissions allowed, see
-;;   `wdired-allow-to-change-permissions' for details.
-;;
-;; - Now wdired doesn't rely on regexp so much. As a consequence of
-;;   this, you can add newlines to filenames and symlinks targets
-;;   (although this is not very usual, IMHO). Please note that dired
-;;   (at least in Emacs 21.1 and previous) does not work very well
-;;   with filenames with newlines in them, so RET is deactivated in
-;;   wdired mode. But you can activate it if you want.
-;;
-;; - Now `upcase-word' `capitalize-word' and `downcase-word' are not
-;;   advised to work better with wdired mode, but the keys bound to
-;;   them use wdired versions of those commands.
-;;
-;; - Now "undo" actions are not inherited from wdired mode when
-;;   changing to dired mode.
-;;
-;; - Code and documentation cleanups.
-;;
-;; - Fixed a bug that was making wdired to fail on users with
-;;   `dired-backup-overwrite' set to t.
-;;
-;; - C-c C-[ now abort changes.
-
-;; From 1.7 to 1.8
-;;
-;; - Now permission (access-control) bits of the files can be changed.
-;;   Please see the commentary section and the custom variable
-;;   `wdired-allow-to-change-permissions' for details.
-;;
-;; - Added another possible value for the variable
-;;   `wdired-always-move-to-filename-beginning', useful to change
-;;   permission bits of several files without the cursor jumping to
-;;   filenames when changing lines.
-
-;; From 0.1 to 1.7
-
-;; - I've moved the list of changes to another file, because it was
-;;   huge. Ask me for it or search older versions in google.
-
-;;; TODO:
-
-;; - Make it to work in XEmacs. Any volunteer?
+;; Google is your friend (previous versions with complete changelogs
+;; were posted to gnu.emacs.sources)
 
 ;;; Code:
 
-(defvar dired-backup-overwrite) ; Only in emacs 20.x this is a custom var
+(defvar dired-backup-overwrite) ; Only in Emacs 20.x this is a custom var
 (eval-when-compile
   (set (make-local-variable 'byte-compile-dynamic) t))
 
   :group 'dired)
 
 (defcustom wdired-use-interactive-rename nil
-  "*If t, confirmation is required before actually rename the files.
-Confirmation is required also for overwriting files.  If nil, no
-confirmation is required for change the file names, and the variable
-`wdired-is-ok-overwrite' is used to see if it is ok to overwrite files
-without asking."
+  "*If non-nil, WDired requires confirmation before actually renaming files.
+If nil, WDired doesn't require confirmation to change the file names,
+and the variable `wdired-confirm-overwrite' controls whether it is ok
+to overwrite files without asking."
   :type 'boolean
   :group 'wdired)
 
-(defcustom wdired-is-ok-overwrite nil
-  "*If non-nil the renames can overwrite files without asking. 
-This variable is used only if `wdired-use-interactive-rename' is nil."
+(defcustom wdired-confirm-overwrite t
+  "*If nil the renames can overwrite files without asking. 
+This variable has no effect at all if `wdired-use-interactive-rename'
+is not nil."
   :type 'boolean
   :group 'wdired)
 
-(defcustom wdired-always-move-to-filename-beginning nil
-  "*If t the \"up\" and \"down\" movement is done as in dired mode.
+(defcustom wdired-use-dired-vertical-movement nil
+  "*If t, the \"up\" and \"down\" movement works as in Dired mode.
 That is, always move the point to the beginning of the filename at line.
 
 If `sometimes, only move to the beginning of filename if the point is
@@ -199,20 +144,20 @@ If nil, \"up\" and \"down\" movement is done as in any other buffer."
   :group 'wdired)
 
 (defcustom wdired-allow-to-redirect-links t
-  "*If non-nil, the target of the symbolic links can be changed also.
+  "*If non-nil, the target of the symbolic links are editable.
 In systems without symbolic links support, this variable has no effect
 at all."
   :type 'boolean
   :group 'wdired)
 
 (defcustom wdired-allow-to-change-permissions nil
-  "*If non-nil, the permissions bits of the files can be changed also.
+  "*If non-nil, the permissions bits of the files are editable.
 
 If t, to change a single bit, put the cursor over it and press the
 space bar, or left click over it.  You can also hit the letter you want
 to set: if this value is allowed, the character in the buffer will be
 changed.  Anyway, the point is advanced one position, so, for example,
-you can keep the \"x\" key pressed to give execution permissions to
+you can keep the <x> key pressed to give execution permissions to
 everybody to that file.
 
 If `advanced, the bits are freely editable.  You can use
@@ -220,7 +165,7 @@ If `advanced, the bits are freely editable.  You can use
 newlines), but if you want your changes to be useful, you better put a
 intelligible value.
 
-Anyway, the real change of the permissions is done with the external
+Anyway, the real change of the permissions is done by the external
 program `dired-chmod-program', which must exist."
   :type '(choice (const :tag "Not allowed" nil)
                  (const :tag "Toggle/set bits" t)
@@ -233,9 +178,9 @@ program `dired-chmod-program', which must exist."
     (define-key map "\C-c\C-c" 'wdired-finish-edit)
     (define-key map "\C-c\C-k" 'wdired-abort-changes)
     (define-key map "\C-c\C-[" 'wdired-abort-changes)
-    (define-key map "\C-m"     'wdired-newline)
-    (define-key map "\C-j"     'wdired-newline)
-    (define-key map "\C-o"     'wdired-newline)
+    (define-key map "\C-m"     'ignore)
+    (define-key map "\C-j"     'ignore)
+    (define-key map "\C-o"     'ignore)
     (define-key map [up]       'wdired-previous-line)
     (define-key map "\C-p"     'wdired-previous-line)
     (define-key map [down]     'wdired-next-line)
@@ -261,7 +206,7 @@ program `dired-chmod-program', which must exist."
     map))
 
 (defvar wdired-mode-hook nil
-  "Hook run when changing to wdired mode.")
+  "Hooks run when changing to WDired mode.")
 
 ;; Local variables (put here to avoid compilation gripes)
 (defvar wdired-col-perm) ;; Column where the permission bits start
@@ -271,15 +216,15 @@ program `dired-chmod-program', which must exist."
 (defun wdired-mode ()
   "\\<wdired-mode-map>File Names Editing mode.
 
-Press \\[wdired-finish-edit] to make the changes to take effect and
-exit.  To abort the edit, use \\[wdired-abort-changes].
+Press \\[wdired-finish-edit] to make the changes to take effect
+and exit.  To abort the edit, use \\[wdired-abort-changes].
 
-In this mode you can edit the names of the files, the target of the
-links and the permission bits of the files.  You can `customize-group'
-wdired.
+In this mode you can edit the names of the files, the target of
+the links and the permission bits of the files.  You can use
+\\[customize-group] RET wdired to customize WDired behavior.
 
-Editing things out of the filenames, or adding or deleting lines is
-not allowed, because the rest of the buffer is read-only."
+The only editable texts in a WDired buffer are filenames,
+symbolic link targets, and filenames permission."
   (interactive)
   (error "This mode can be enabled only by `wdired-change-to-wdired-mode'"))
 (put 'wdired-mode 'mode-class 'special)
@@ -288,8 +233,10 @@ not allowed, because the rest of the buffer is read-only."
 ;;;###autoload
 (defun wdired-change-to-wdired-mode ()
   "Put a dired buffer in a mode in which filenames are editable.
-In this mode the names of the files can be changed, and after
-typing C-c C-c the files and directories in disk are renamed.
+\\<wdired-mode-map>
+This mode allows the user to change the names of the files, and after
+typing \\[wdired-finish-edit] Emacs renames the files and directories
+in disk.
 
 See `wdired-mode'."
   (interactive)
@@ -302,7 +249,7 @@ See `wdired-mode'."
   (dired-unadvertise default-directory)
   (add-hook 'kill-buffer-hook 'wdired-check-kill-buffer nil t)
   (setq major-mode 'wdired-mode)
-  (setq mode-name "Edit filenames")
+  (setq mode-name "Editable Dired")
   (setq revert-buffer-function 'wdired-revert)
   ;; I temp disable undo for performance: since I'm going to clear the
   ;; undo list, it can save more than a 9% of time with big
@@ -359,7 +306,7 @@ or \\[wdired-abort-changes] to abort changes")))
 (defun wdired-get-filename (&optional no-dir old)
   "Return the filename at line.
 Similar to `dired-get-filename' but it doesn't rely on regexps.  It
-relies on wdired buffer's properties.  Optional arg NO-DIR with value
+relies on WDired buffer's properties.  Optional arg NO-DIR with value
 non-nil means don't include directory.  Optional arg OLD with value
 non-nil means return old filename."
   ;; FIXME: Use dired-get-filename's new properties.
@@ -411,7 +358,7 @@ non-nil means return old filename."
   "Actually rename files based on your editing in the Dired buffer."
   (interactive)
   (wdired-change-to-dired-mode)
-  (let ((overwrite (or wdired-is-ok-overwrite 1))
+  (let ((overwrite (or (not wdired-confirm-overwrite) 1))
        (changes nil)
        (files-deleted nil)
        (errors 0)
@@ -510,12 +457,13 @@ non-nil means return old filename."
        (forward-line)))))
 
 (defun wdired-customize ()
-  "Customize wdired options."
+  "Customize WDired options."
   (interactive)
   (customize-apropos "wdired" 'groups))
 
 (defun wdired-revert (&optional arg noconfirm)
-  "Discard changes in the buffer and update the changes in the disk."
+  "Discard changes in the buffer and update it based on changes on disk.
+Optional arguments are ignored."
   (wdired-change-to-dired-mode)
   (revert-buffer)
   (wdired-change-to-wdired-mode))
@@ -529,12 +477,12 @@ non-nil means return old filename."
 
 (defun wdired-next-line (arg)
   "Move down lines then position at filename or the current column.
-See `wdired-always-move-to-filename-beginning'.  Optional prefix ARG
+See `wdired-use-dired-vertical-movement'.  Optional prefix ARG
 says how many lines to move; default is one line."
   (interactive "p")
   (next-line arg)
-  (if (or (eq wdired-always-move-to-filename-beginning t)
-         (and wdired-always-move-to-filename-beginning
+  (if (or (eq wdired-use-dired-vertical-movement t)
+         (and wdired-use-dired-vertical-movement
               (< (current-column)
                  (save-excursion (dired-move-to-filename)
                                  (current-column)))))
@@ -542,22 +490,17 @@ says how many lines to move; default is one line."
 
 (defun wdired-previous-line (arg)
   "Move up lines then position at filename or the current column.
-See `wdired-always-move-to-filename-beginning'.  Optional prefix ARG
+See `wdired-use-dired-vertical-movement'.  Optional prefix ARG
 says how many lines to move; default is one line."
   (interactive "p")
   (previous-line arg)
-  (if (or (eq wdired-always-move-to-filename-beginning t)
-         (and wdired-always-move-to-filename-beginning
+  (if (or (eq wdired-use-dired-vertical-movement t)
+         (and wdired-use-dired-vertical-movement
               (< (current-column)
                  (save-excursion (dired-move-to-filename)
                                  (current-column)))))
       (dired-move-to-filename)))
 
-;; dired doesn't works well with newlines, so ...
-(defun wdired-newline ()
-  "Do nothing."
-  (interactive))
-
 ;; Put the needed properties to allow the user to change links' targets
 (defun wdired-preprocess-symlinks ()
   (let ((inhibit-read-only t))
@@ -634,19 +577,19 @@ If OLD, return the old target.  If MOVE, move point before it."
               (setq arg 0))))))))
 
 (defun wdired-downcase-word (arg)
-  "Wdired version of `downcase-word'.
+  "WDired version of `downcase-word'.
 Like original function but it skips read-only words."
   (interactive "p")
   (wdired-xcase-word 'downcase-word arg))
 
 (defun wdired-upcase-word (arg)
-  "Wdired version of `upcase-word'.
+  "WDired version of `upcase-word'.
 Like original function but it skips read-only words."
   (interactive "p")
   (wdired-xcase-word 'upcase-word arg))
 
 (defun wdired-capitalize-word (arg)
-  "Wdired version of `capitalize-word'.
+  "WDired version of `capitalize-word'.
 Like original function but it skips read-only words."
   (interactive "p")
   (wdired-xcase-word 'capitalize-word arg))
index 4406a0615ee9ff4ea13cd1cf0f655c7931827844..c0d9280a4415e6efa66df36683aaf89932c1b2f9 100644 (file)
@@ -86,7 +86,7 @@
 
 ;;; Code:
 
-(defvar whitespace-version "3.4" "Version of the whitespace library.")
+(defvar whitespace-version "3.5" "Version of the whitespace library.")
 
 (defvar whitespace-all-buffer-files nil
   "An associated list of buffers and files checked for whitespace cleanliness.
@@ -599,7 +599,7 @@ whitespace problems."
       (setq pmax (point))
       (if (equal pmin pmax)
          (progn
-           (whitespace-highlight-the-space pmin pmax)
+           (whitespace-highlight-the-space pmin (1+ pmax))
            t)
        nil))))
 
@@ -637,7 +637,7 @@ whitespace problems."
            (setq pmax (point))
            (if (equal pmin pmax)
                (progn
-                 (whitespace-highlight-the-space pmin pmax)
+                 (whitespace-highlight-the-space (- pmin 1) pmax)
                  t)
              nil))
        nil))))
@@ -733,12 +733,11 @@ Also with whitespaces whose testing has been turned off."
   "Highlight the current line, unhighlighting a previously jumped to line."
   (if whitespace-display-spaces-in-color
       (let ((ol (whitespace-make-overlay b e)))
-       (whitespace-unhighlight-the-space)
        (push ol whitespace-highlighted-space)
        (whitespace-overlay-put ol 'face 'whitespace-highlight-face))))
 ;;  (add-hook 'pre-command-hook 'whitespace-unhighlight-the-space))
 
-(defun whitespace-unhighlight-the-space ()
+(defun whitespace-unhighlight-the-space()
   "Unhighlight the currently highlight line."
   (if (and whitespace-display-spaces-in-color whitespace-highlighted-space)
       (progn
index ef7cc1ccc734275cceaafd6b22894a7866a13dcc..78a41d546253ca0cbecd6c0b08a50e51b40e162d 100644 (file)
@@ -31,9 +31,9 @@
 
 ;;; Code:
 
-;;; Customizable variables
-
+(require 'dnd)
 
+;;; Customizable variables
 (defcustom x-dnd-test-function 'x-dnd-default-test-function
   "The function drag and drop uses to determine if to accept or reject a drop.
 The function takes three arguments, WINDOW ACTION and TYPES.
@@ -51,28 +51,6 @@ The default value for this variable is `x-dnd-default-test-function'."
   :type 'symbol
   :group 'x)
 
-(defcustom x-dnd-protocol-alist
-  '(
-    ("^file:///" . x-dnd-open-local-file)      ; XDND format.
-    ("^file://"  . x-dnd-open-file)            ; URL with host
-    ("^file:"    . x-dnd-open-local-file)      ; Old KDE, Motif, Sun
-    )
-
-  "The functions to call for different protocols when a drop is made.
-This variable is used by `x-dnd-handle-uri-list', `x-dnd-handle-file-name'
-and `x-dnd-handle-moz-url'.  The list contains of (REGEXP . FUNCTION) pairs.
-The functions shall take two arguments, URL, which is the URL dropped and
-ACTION which is the action to be performed for the drop (move, copy, link,
-private or ask).
-If no match is found here, and the value of `browse-url-browser-function'
-is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
-Insertion of text is not handeled by these functions, see `x-dnd-types-alist'
-for that.
-The function shall return the action done (move, copy, link or private)
-if some action was made, or nil if the URL is ignored."
-  :version "22.1"
-  :type 'alist
-  :group 'x)
 
 
 (defcustom x-dnd-types-alist
@@ -85,10 +63,10 @@ if some action was made, or nil if the URL is ignored."
     ("text/plain;charset=UTF-8" . x-dnd-insert-utf8-text)
     ("text/plain;charset=utf-8" . x-dnd-insert-utf8-text)
     ("text/unicode" . x-dnd-insert-utf16-text)
-    ("text/plain" . x-dnd-insert-text)
+    ("text/plain" . dnd-insert-text)
     ("COMPOUND_TEXT" . x-dnd-insert-ctext)
-    ("STRING" . x-dnd-insert-text)
-    ("TEXT"   . x-dnd-insert-text)
+    ("STRING" . dnd-insert-text)
+    ("TEXT"   . dnd-insert-text)
     )
   "Which function to call to handle a drop of that type.
 If the type for the drop is not present, or the function is nil,
@@ -102,12 +80,6 @@ is successful, nil if not."
   :type 'alist
   :group 'x)
 
-(defcustom x-dnd-open-file-other-window nil
-  "If non-nil, always use find-file-other-window to open dropped files."
-  :version "22.1"
-  :type 'boolean
-  :group 'x)
-
 (defcustom x-dnd-known-types
   '("text/uri-list"
     "text/x-moz-url"
@@ -235,109 +207,6 @@ EXTRA-DATA is data needed for a specific protocol."
     (setcdr (x-dnd-get-state-cons-for-frame window) current-state)))
 
 
-(defun x-dnd-handle-one-url (window action arg)
-  "Handle one dropped url by calling the appropriate handler.
-The handler is first localted by looking at `x-dnd-protocol-alist'.
-If no match is found here, and the value of `browse-url-browser-function'
-is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
-If no match is found, just call `x-dnd-insert-text'.
-WINDOW is where the drop happend, ACTION is the action for the drop,
-ARG is the URL that has been dropped.
-Returns ACTION."
-  (require 'browse-url)
-  (let* ((uri (replace-regexp-in-string
-              "%[A-Z0-9][A-Z0-9]"
-              (lambda (arg)
-                (format "%c" (string-to-number (substring arg 1) 16)))
-              arg))
-        ret)
-    (or
-     (catch 'done
-       (dolist (bf x-dnd-protocol-alist)
-        (when (string-match (car bf) uri)
-          (setq ret (funcall (cdr bf) uri action))
-          (throw 'done t)))
-       nil)
-     (when (not (functionp browse-url-browser-function))
-       (catch 'done
-        (dolist (bf browse-url-browser-function)
-          (when (string-match (car bf) uri)
-            (setq ret 'private)
-            (funcall (cdr bf) uri action)
-            (throw 'done t)))
-        nil))
-     (progn
-       (x-dnd-insert-text window action uri)
-       (setq ret 'private)))
-    ret))
-
-
-(defun x-dnd-get-local-file-uri (uri)
-  "Return an uri converted to file:/// syntax if uri is a local file.
-Return nil if URI is not a local file."
-
-  ;; The hostname may be our hostname, in that case, convert to a local
-  ;; file.  Otherwise return nil.  TODO:  How about an IP-address as hostname?
-  (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri)
-                     (downcase (match-string 1 uri))))
-       (system-name-no-dot
-        (downcase (if (string-match "^[^\\.]+" system-name)
-                      (match-string 0 system-name)
-                    system-name))))
-    (when (and hostname
-            (or (string-equal "localhost" hostname)
-                (string-equal (downcase system-name) hostname)
-                (string-equal system-name-no-dot hostname)))
-       (concat "file://" (substring uri (+ 7 (length hostname)))))))
-
-(defun x-dnd-get-local-file-name (uri &optional must-exist)
-  "Return file name converted from file:/// or file: syntax.
-URI is the uri for the file.  If MUST-EXIST is given and non-nil,
-only return non-nil if the file exists.
-Return nil if URI is not a local file."
-  (let ((f (cond ((string-match "^file:///" uri)       ; XDND format.
-                 (substring uri (1- (match-end 0))))
-                ((string-match "^file:" uri)           ; Old KDE, Motif, Sun
-                 (substring uri (match-end 0))))))
-    (when (and f must-exist)
-      (let* ((decoded-f (decode-coding-string
-                        f
-                        (or file-name-coding-system
-                            default-file-name-coding-system)))
-            (try-f (if (file-readable-p decoded-f) decoded-f f)))
-       (when (file-readable-p try-f) try-f)))))
-
-
-(defun x-dnd-open-local-file (uri action)
-  "Open a local file.
-The file is opened in the current window, or a new window if
-`x-dnd-open-file-other-window' is set.  URI is the url for the file,
-and must have the format file:file-name or file:///file-name.
-The last / in file:/// is part of the file name.  ACTION is ignored."
-
-  (let* ((f (x-dnd-get-local-file-name uri t)))
-    (if (and f (file-readable-p f))
-       (progn
-         (if x-dnd-open-file-other-window
-             (find-file-other-window f)
-           (find-file f))
-         'private)
-      (error "Can not read %s" uri))))
-
-(defun x-dnd-open-file (uri action)
-  "Open a local or remote file.
-The file is opened in the current window, or a new window if
-`x-dnd-open-file-other-window' is set.  URI is the url for the file,
-and must have the format file://hostname/file-name.  ACTION is ignored.
-The last / in file://hostname/ is part of the file name."
-
-  ;; The hostname may be our hostname, in that case, convert to a local
-  ;; file.  Otherwise return nil.
-  (let ((local-file (x-dnd-get-local-file-uri uri)))
-    (if local-file (x-dnd-open-local-file local-file action)
-      (error "Remote files not supported"))))
-
-
 (defun x-dnd-handle-moz-url (window action data)
   "Handle one item of type text/x-moz-url.
 WINDOW is the window where the drop happened.  ACTION is ignored.
@@ -359,49 +228,36 @@ DATA is encoded in utf-16.  Decode the URL and call `x-dnd-handle-uri-list'."
 (defun x-dnd-insert-utf8-text (window action text)
   "Decode the UTF-8 text and insert it at point.
 TEXT is the text as a string, WINDOW is the window where the drop happened."
-  (x-dnd-insert-text window action (decode-coding-string text 'utf-8)))
+  (dnd-insert-text window action (decode-coding-string text 'utf-8)))
 
 (defun x-dnd-insert-utf16-text (window action text)
   "Decode the UTF-16 text and insert it at point.
 TEXT is the text as a string, WINDOW is the window where the drop happened."
   ;; See comment in x-dnd-handle-moz-url about coding.
   (let ((coding (if (eq (byteorder) ?B) 'utf-16be 'utf-16le)))
-    (x-dnd-insert-text window action (decode-coding-string text coding))))
+    (dnd-insert-text window action (decode-coding-string text coding))))
 
 (defun x-dnd-insert-ctext (window action text)
   "Decode the compound text and insert it at point.
 TEXT is the text as a string, WINDOW is the window where the drop happened."
-  (x-dnd-insert-text window action
-                    (decode-coding-string text
-                                          'compound-text-with-extensions)))
-
-(defun x-dnd-insert-text (window action text)
-  "Insert text at point or push to the kill ring if buffer is read only.
-TEXT is the text as a string, WINDOW is the window where the drop happened."
-  (if (or buffer-read-only
-         (not (windowp window)))
-      (progn
-       (kill-new text)
-       (message
-        (substitute-command-keys
-         "The dropped text can be accessed with \\[yank]")))
-    (insert text))
-  action)
+  (dnd-insert-text window action
+                  (decode-coding-string text
+                                        'compound-text-with-extensions)))
 
 (defun x-dnd-handle-uri-list (window action string)
-  "Split an uri-list into separate URIs and call `x-dnd-handle-one-url'.
+  "Split an uri-list into separate URIs and call `dnd-handle-one-url'.
 WINDOW is the window where the drop happened.
 STRING is the uri-list as a string.  The URIs are separated by \r\n."
   (let ((uri-list (split-string string "[\0\r\n]" t))
        retval)
     (dolist (bf uri-list)
       ;; If one URL is handeled, treat as if the whole drop succeeded.
-      (let ((did-action (x-dnd-handle-one-url window action bf)))
+      (let ((did-action (dnd-handle-one-url window action bf)))
        (when did-action (setq retval did-action))))
     retval))
 
 (defun x-dnd-handle-file-name (window action string)
-  "Prepend file:// to file names and call `x-dnd-handle-one-url'.
+  "Prepend file:// to file names and call `dnd-handle-one-url'.
 WINDOW is the window where the drop happened.
 STRING is the file names as a string, separated by nulls."
   (let ((uri-list (split-string string "[\0\r\n]" t))
@@ -409,7 +265,7 @@ STRING is the file names as a string, separated by nulls."
     (dolist (bf uri-list)
       ;; If one URL is handeled, treat as if the whole drop succeeded.
       (let* ((file-uri (concat "file://" bf))
-            (did-action (x-dnd-handle-one-url window action file-uri)))
+            (did-action (dnd-handle-one-url window action file-uri)))
        (when did-action (setq retval did-action))))
     retval))
 
@@ -455,10 +311,10 @@ nil if not."
       (if (and (windowp w) (window-live-p w))
          ;; If dropping in a window, open files in that window rather
          ;; than in a new widow.
-         (let ((x-dnd-open-file-other-window nil))
+         (let ((dnd-open-file-other-window nil))
            (goto-char (posn-point (event-start event)))
            (funcall handler window action data))
-       (let ((x-dnd-open-file-other-window t))  ;; Dropping on non-window.
+       (let ((dnd-open-file-other-window t))  ;; Dropping on non-window.
          (select-frame frame)
          (funcall handler window action data))))))
 
@@ -880,7 +736,6 @@ FORMAT is 32 (not used).  MESSAGE is the data part of an XClientMessageEvent."
 
 ;;;
 
-
 (provide 'x-dnd)
 
 ;;; arch-tag: b621fb7e-50da-4323-850b-5fc71ae64621
index 4f7e19623fe1356f76f6c89c5d74099186b46b19..62710e752a71b44a9d9e83053fd9150fb67f2db0 100644 (file)
 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.
-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
+This works in terminal emulators compatible with xterm.  It only
+works for simple uses of the mouse.  Basically, only non-modified
+single clicks are supported.  When turned on, the normal xterm
+mouse functionality for such clicks is still available by holding
+down the SHIFT key while pressing the mouse button."
+  :global t :group 'mouse
+   ;; If you change the code below, you also need to change the
+   ;; corresponding code in startup.el.
+  :init-value (unless (or noninteractive
+                         window-system)
+               (let ((term (getenv "TERM")))
+                 (and term
+                      (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)"
+                                    term)
+                      t)))
   (if xterm-mouse-mode
       ;; Turn it on
       (unless window-system
index ac908d34b7492eb0f0bb1853a90b07df6e6ad415..695535e104952fb7ab342d163a3101c7cdc0aa3b 100644 (file)
@@ -1,5 +1,5 @@
 /* Internals of a lightweight menubar widget.
-   Copyright (C) 1999, 2000, 2002, 2004  Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2002, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
index 8cfc41ccd25e5d1e74e01fa519631a0dec2f41c4..a72f498ffef858ea471a349f9ec679fa19043f7b 100755 (executable)
--- a/make-dist
+++ b/make-dist
@@ -6,7 +6,8 @@
 #### be distributed.  This means that if you add a file with an odd name,
 #### you should make sure that this script will include it.
 
-# Copyright (C) 1995, 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1995, 1997, 1998, 2000, 2001, 2002, 2005 
+#   Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -195,21 +196,17 @@ then
   rm -f /tmp/el /tmp/elc
 
   ### Check for .el files with no corresponding .elc file.
-  (cd lisp; ls -1 [a-z]*.el [a-z]*/[a-z]*.el ; \
-   cd ../leim; ls -1 [a-z]*/[a-z]*.el) > /tmp/el
-  (cd lisp; ls -1 [a-z]*.elc [a-z]*/[a-z]*.elc; \
-   cd ../leim; ls -1 [a-z]*/[a-z]*.elc) | sed 's/\.elc$/.el/' > /tmp/elc
+  ls -1 lisp/[a-z]*.el lisp/[a-z]*/[a-z]*.el \
+       leim/[a-z]*/[a-z]*.el > /tmp/el
+  ls -1 lisp/[a-z]*.elc lisp/[a-z]*/[a-z]*.elc \
+       leim/[a-z]*/[a-z]*.elc | sed 's/\.elc$/.el/' > /tmp/elc
   losers="`comm -23 /tmp/el /tmp/elc`"
   bogosities=
   for file in $losers; do
-    file1=`echo $file | sed -e "s|.*/||"`
-    if ! sed -n -e "/^DONTCOMPILE/,/[^\\]\$/p" lisp/Makefile.in |
-        grep -q "[     ]$file1\($\| \)"; then
+    if ! grep -q "no-byte-compile: t" $file; then
       case $file in
        site-init.el | site-load.el | site-start.el | default.el)
          ;;
-       term/*)
-         ;;
        *)
          bogosities="$file $bogosities"
          ;;
index f91aba65fedda5c31301f8db37e6a5fc7eea3621..c6578dbc107e867e9900878b40b55b8c82661e38 100644 (file)
@@ -1,3 +1,60 @@
+2005-04-13  Lute Kamstra  <lute@gnu.org>
+
+       * cc-mode.texi: Prevent creating an unnecessary empty cc-mode.ss file.
+
+2005-04-12  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * frames.texi (XTerm Mouse): Xterm Mouse mode is now enabled by
+       default.
+
+2005-04-12  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * xresources.texi (Table of Resources): Add cursorBlink.
+
+2005-04-11  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * rmail.texi (Rmail Summary Edit): Explain numeric arguments to
+       `d', `C-d' and `u'.
+
+2005-04-11  Richard M. Stallman  <rms@gnu.org>
+
+       * cmdargs.texi (Initial Options): -Q is now --quick, and does less.
+       (Misc X): Add -D, --basic-display.
+
+       * maintaining.texi (Change Log): Correct the description of
+       the example.
+
+       * major.texi (Choosing Modes): Document magic-mode-alist.
+
+2005-04-10  Thien-Thi Nguyen  <ttn@gnu.org>
+
+       * cl.texi (Porting Common Lisp): Fix typo.
+
+2005-04-10  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * rmail.texi (Rmail Basics): Clarify description of `q' and `b'.
+       (Rmail Deletion): `C-d' in RMAIL buffer does not accept a numeric
+       argument.
+       (Rmail Inbox): Give full name of `rmail-primary-inbox-list'.
+       (Rmail Output): Clarify which statements apply to `o', `C-o' and
+       `w', respectively.
+       (Rmail Labels): Mention `l'.
+       (Rmail Attributes): Correct pxref.  Mention `stored' attribute.
+       (Rmail Summary Edit): Describe `j' and RET.
+
+2005-04-10  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * xresources.texi (Lucid Resources): Added fonSet resource.
+
+2005-04-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (RSS): Addition.
+
+2005-04-09  Luc Teirlinck  <teirllm@auburn.edu>
+
+       * display.texi (Useless Whitespace): `indicate-unused-lines' is
+       now called `indicate-empty-lines'.
+
 2005-04-06  Kim F. Storm  <storm@cua.dk>
 
        * cmdargs.texi (Initial Options): Add --bare-bones alias for -Q.
 
        * calendar.texi (Diary): Mention shell utility `calendar'.
 
+2005-04-01  Richard M. Stallman  <rms@gnu.org>
+
+       * cmdargs.texi (Misc X): Explain horizontal scroll bars don't exist.
+
 2005-04-01  Jay Belanger  <belanger@truman.edu>
 
        * calc.texi (Troubleshooting Commands): Remove comment about
 
 2005-01-15  Sergey Poznyakoff  <gray@Mirddin.farlep.net>
 
-       * man/rmail.texi (Movemail): Explain differences
+       * rmail.texi (Movemail): Explain differences
        between standard and mailutils versions of movemail.
        Describe command line and configuration options introduced
        with the latter.
index a0016aab12160b15dd3e45c6d995de2127c6053e..6ac86e986a90728c05abc7fa33e10bde85b581e4 100644 (file)
@@ -55,7 +55,9 @@
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 @comment Define an index for syntactic symbols.
+@ifnottex
 @defindex ss
+@end ifnottex
 
 @comment Combine key, syntactic symbol and concept indices into one.
 @syncodeindex ss cp
index 6c52a16b7332ba2251390584fee0106f42803b00..c150e0d2b4d2b3cdae203cde86528f58c3cf1f9e 100644 (file)
@@ -5144,7 +5144,7 @@ difficult to port large Common Lisp applications to Emacs.  For
 one, some of the features in this package are not fully compliant
 with ANSI or Steele; @pxref{Common Lisp Compatibility}.  But there
 are also quite a few features that this package does not provide
-at all.  Here are some major omissions that you will want watch out
+at all.  Here are some major omissions that you will want to watch out
 for when bringing Common Lisp code into Emacs.
 
 @itemize @bullet
index 8e84978c517bf031d263b7af04bdae0f6e459055..e47a66bcf91a7149f8bc716037fb1404a703133f 100644 (file)
@@ -268,12 +268,10 @@ option and @samp{-Q} are the only options that block it.
 
 @item -Q
 @opindex -Q
-@itemx --bare-bones
-@opindex --bare-bones
-Start emacs with minimum customizations and window decorations.
-This is like using @samp{-q} and @samp{--no-site-file}, but in
-addition it also disables the menu-bar, the tool-bar, the scroll-bars,
-tool tips, the blinking cursor, and the fancy startup screen.
+@itemx --quick
+@opindex --quick
+Start emacs with minimum customizations.  This is like using @samp{-q}
+and @samp{--no-site-file}, but also disables the startup screen.
 
 @item --no-splash
 @opindex --no-splash
@@ -1222,6 +1220,14 @@ Specify @var{pixels} as additional space to put between lines, in pixels.
 @opindex --no-blinking-cursor
 @cindex blinking cursor disable, command-line argument
 Disable the blinking cursor on graphical terminals.
+
+@item -D
+@opindex -D
+@itemx --basic-display
+@opindex --basic-display
+Disable the menu-bar, the tool-bar, the scroll-bars, and tool tips,
+and turn off the blinking cursor.  This can be useful for making a
+test case that simplifies debugging of display problems.
 @end table
 
   The @samp{--xrm} option (@pxref{Resources}) specifies additional
index 01b0291e5e866dee794b4d6b5f531e04c3495d60..c1b0c540fb5b021a4f3260938bbc89ff57fc19e7 100644 (file)
@@ -679,7 +679,7 @@ accessible portion (@pxref{Narrowing}), type @kbd{M-x
 delete-trailing-whitespace @key{RET}}.  (This command does not remove
 the form-feed characters.)
 
-@vindex indicate-unused-lines
+@vindex indicate-empty-lines
 @vindex default-indicate-empty-lines
 @cindex unused lines
 @cindex fringes, and unused line indication
@@ -690,9 +690,9 @@ lines at the end of the buffer then stand out because they do not have
 this image in the fringe.
 
   To enable this feature, set the buffer-local variable
-@code{indicate-unused-lines} to a non-@code{nil} value.  The default
+@code{indicate-empty-lines} to a non-@code{nil} value.  The default
 value of this variable is controlled by the variable
-@code{default-indicate-unused-lines}; by setting that variable, you
+@code{default-indicate-empty-lines}; by setting that variable, you
 can enable or disable this feature for all new buffers.  (This feature
 currently doesn't work on character terminals.)
 
index d09fdca85d7882058c4b525bb89d9f5b1cf83f79..c38497271a53179ff9ac294c45f7aa6327d48653 100644 (file)
@@ -1055,10 +1055,15 @@ when the frame is selected.
 
 Some terminal emulators under X support mouse clicks in the terminal
 window.  In a terminal emulator which is compatible with @code{xterm},
-you can use @kbd{M-x xterm-mouse-mode} to enable simple use of the
-mouse---only single clicks are supported.  The normal @code{xterm} mouse
-functionality is still available by holding down the @kbd{SHIFT} key
-when you press the mouse button.
+simple use of the mouse is, by default, controlled by Emacs---basically,
+only non-modified single clicks are supported.  The normal
+@code{xterm} mouse functionality for such clicks is still available by
+holding down the @kbd{SHIFT} key when you press the mouse button.
+
+Put @code{(xterm-mouse-mode 0)} in your @file{.emacs}, or disable the
+option @code{xterm-mouse-mode} through the @samp{Customize} interface
+(@pxref{Easy Customization}), if you prefer all mouse clicks to be
+handled by the terminal emulator.
 
 @ignore
    arch-tag: 7dcf3a31-a43b-45d4-a900-445b10d77e49
index c670da11b2230aaa9ed3764ed34c8200dbc8ccb9..6345cc2a18b034f100bf8b181836daadcc07b864 100644 (file)
@@ -15873,14 +15873,45 @@ changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}).
 @acronym{RSS} has a quite regular and nice interface, and it's
 possible to get the information Gnus needs to keep groups updated.
 
+Note: you had better use Emacs which supports the @code{utf-8} coding
+system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII}
+text by default.  It is also used by default for non-@acronym{ASCII}
+group names.
+
 @kindex G R (Summary)
-Use @kbd{G R} from the summary buffer to subscribe to a feed---you
-will be prompted for the location of the feed.
+Use @kbd{G R} from the summary buffer to subscribe to a feed---you will
+be prompted for the location, the title and the description of the feed.
+The title, which allows any characters, will be used for the group name
+and the name of the group data file.  The description can be omitted.
 
 An easy way to get started with @code{nnrss} is to say something like
 the following in the group buffer: @kbd{B nnrss RET RET y}, then
 subscribe to groups.
 
+The @code{nnrss} back end saves the group data file in
+@code{nnrss-directory} (see below) for each @code{nnrss} group.  File
+names containing non-@acronym{ASCII} characters will be encoded by the
+coding system specified with the @code{nnmail-pathname-coding-system}
+variable.  If it is @code{nil}, in Emacs the coding system defaults to
+the value of @code{default-file-name-coding-system}.  If you are using
+XEmacs and want to use non-@acronym{ASCII} group names, you should set
+the value for the @code{nnmail-pathname-coding-system} variable properly.
+
+@cindex OPML
+You can also use the following commands to import and export your
+subscriptions from a file in @acronym{OPML} format (Outline Processor
+Markup Language).
+
+@defun nnrss-opml-import file
+Prompt for an @acronym{OPML} file, and subscribe to each feed in the
+file.
+@end defun
+
+@defun nnrss-opml-export
+Write your current @acronym{RSS} subscriptions to a buffer in
+@acronym{OPML} format.
+@end defun
+
 The following @code{nnrss} variables can be altered:
 
 @table @code
@@ -15889,6 +15920,13 @@ The following @code{nnrss} variables can be altered:
 The directory where @code{nnrss} stores its files.  The default is
 @file{~/News/rss/}.
 
+@item nnrss-file-coding-system
+@vindex nnrss-file-coding-system
+The coding system used when reading and writing the @code{nnrss} groups
+data files.  The default is the value of
+@code{mm-universal-coding-system} (which defaults to @code{emacs-mule}
+in Emacs or @code{escape-quoted} in XEmacs).
+
 @item nnrss-use-local
 @vindex nnrss-use-local
 @findex nnrss-generate-download-script
index f8bc0de59924198cb9d38c0f45552ee23decacd2..347a15d3c95b970a9e5f3f22d5ca9011e6dd16f3 100644 (file)
@@ -58,7 +58,7 @@ date, your name, and your email address (taken from the variable
 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:
+1993, with two items and one item respectively.
 
 @iftex
 @medbreak
@@ -79,10 +79,10 @@ with whitespace and a star.  Here are two entries, both dated in May
 @end smallexample
 
   One entry can describe several changes; each change should have its
-own item.  Normally there should be a blank line between items.  When
-items are related (parts of the same change, in different places), group
-them by leaving no blank line between them.  The second entry above
-contains two items grouped in this way.
+own item, or its own line in an item.  Normally there should be a
+blank line between items.  When items are related (parts of the same
+change, in different places), group them by leaving no blank line
+between them.
 
   @kbd{C-x 4 a} visits the change log file and creates a new entry
 unless the most recent entry is for today's date and your name.  It
@@ -92,8 +92,8 @@ changed.
 
 @vindex add-log-keep-changes-together
   When the variable @code{add-log-keep-changes-together} is
-non-@code{nil}, @kbd{C-x 4 a} adds to any existing entry for the file
-rather than starting a new entry.
+non-@code{nil}, @kbd{C-x 4 a} adds to any existing item for the file
+rather than starting a new item.
 
 @vindex change-log-version-info-enabled
 @vindex change-log-version-number-regexp-list
index fa44b87303167dd1f15d357894babb23b53331ac..28f0ff0f32f52c5cc2cd5a46e83db9e2de9b866a 100644 (file)
@@ -98,6 +98,21 @@ the element has the form @code{(@var{regexp} @var{mode-function}
 @var{mode-function}, Emacs discards the suffix that matched
 @var{regexp} and searches the list again for another match.
 
+@vindex magic-mode-alist
+  Sometimes the major mode is determined from the way the file's text
+begins.  The variable @code{magic-mode-alist} controls this.  Its value
+is a list of elements of this form:
+
+@example
+(@var{regexp} . @var{mode-function})
+@end example
+
+@noindent
+This looks like an element of @code{auto-mode-alist}, but it doesn't work
+the same: this @var{regexp} is matched against the text at the start
+of the buffer, not against the file name.  @code{magic-mode-alist}
+takes priority over @code{auto-mode-alist}.
+
   You can specify the major mode to use for editing a certain file by
 special text in the first nonblank line of the file.  The
 mode name should appear in this line both preceded and followed by
index 5f5d63de14cc7a86dd68a1cf40967e553b3e3c7d..091d1e60b745139578459e9b86f37e73d5c95367 100644 (file)
@@ -84,14 +84,16 @@ file after merging new mail from an inbox file (@pxref{Rmail Inbox}).
 @findex rmail-quit
 @kindex b @r{(Rmail)}
 @findex rmail-bury
-  You can exit Rmail with @kbd{q} (@code{rmail-quit}); this expunges and
-saves the Rmail file and then switches to another buffer.  But there is
-no need to ``exit'' formally.  If you switch from Rmail to editing in
-other buffers, and never happen to switch back, you have exited.  (The
-Rmail command @kbd{b}, @code{rmail-bury}, does this for you.)  Just make
-sure to save the Rmail file eventually (like any other file you have
-changed).  @kbd{C-x s} is a good enough way to do this
-(@pxref{Saving}).
+  You can exit Rmail with @kbd{q} (@code{rmail-quit}); this expunges
+and saves the Rmail file, then buries the Rmail buffer as well as its
+summary buffer, if present (@pxref{Rmail Summary}).  But there is no
+need to ``exit'' formally.  If you switch from Rmail to editing in
+other buffers, and never happen to switch back, you have exited.  Just
+make sure to save the Rmail file eventually (like any other file you
+have changed).  @kbd{C-x s} is a good enough way to do this
+(@pxref{Saving}).  The Rmail command @kbd{b}, @code{rmail-bury},
+buries the Rmail buffer and its summary buffer without expunging and
+saving the Rmail file.
 
 @node Rmail Scrolling
 @section Scrolling Within a Message
@@ -255,8 +257,8 @@ current message and select another message.  @kbd{d}
 messages already deleted, while @kbd{C-d} (@code{rmail-delete-backward})
 moves to the previous nondeleted message.  If there is no nondeleted
 message to move to in the specified direction, the message that was just
-deleted remains current.  A numeric argument to either command reverses
-the direction of motion after deletion.
+deleted remains current.  @kbd{d} with a numeric argument is
+equivalent to @kbd{C-d}.
 
 @vindex rmail-delete-message-hook
   Whenever Rmail deletes a message, it runs the hook
@@ -317,7 +319,7 @@ means to use the default inbox.  The default inbox is
 or @file{/usr/mail/@var{username}}, depending on your operating system.
 
   To see what the default is on your system, use @kbd{C-h v
-rmail-primary-inbox @key{RET}}.  You can specify the inbox file(s) for
+rmail-primary-inbox-list @key{RET}}.  You can specify the inbox file(s) for
 any Rmail file with the command @code{set-rmail-inbox-list}; see
 @ref{Rmail Files}.
 
@@ -508,13 +510,14 @@ second says which files in that directory to offer (all those that match
 the regular expression).
 
 @vindex rmail-delete-after-output
-  Copying a message gives the original copy of the message the
-@samp{filed} attribute, so that @samp{filed} appears in the mode line
-when such a message is current.  If you like to keep just a single copy
-of every mail message, set the variable @code{rmail-delete-after-output}
-to @code{t}; then the @kbd{o} and @kbd{C-o} commands delete the original
-message after copying it.  (You can undelete the original afterward if
-you wish.)
+  Copying a message with @kbd{o} or @kbd{C-o} gives the original copy
+of the message the @samp{filed} attribute, so that @samp{filed}
+appears in the mode line when such a message is current.  @kbd{w}
+gives it the @samp{stored} attribute.  If you like to keep just a
+single copy of every mail message, set the variable
+@code{rmail-delete-after-output} to @code{t}; then the @kbd{o},
+@kbd{C-o} and @kbd{w} commands delete the original message after
+copying it.  (You can undelete the original afterward if you wish.)
 
   Copying messages into files in system inbox format uses the header
 fields that are displayed in Rmail at the time.  Thus, if you use the
@@ -567,7 +570,8 @@ Move to the next message that has one of the labels @var{labels}
 @item C-M-p @var{labels} @key{RET}
 Move to the previous message that has one of the labels @var{labels}
 (@code{rmail-previous-labeled-message}).
-@item C-M-l @var{labels} @key{RET}
+@item l @var{labels} @key{RET}
+@itemx C-M-l @var{labels} @key{RET}
 Make a summary of all messages containing any of the labels @var{labels}
 (@code{rmail-summary-by-labels}).
 @end table
@@ -626,7 +630,9 @@ Means the message is deleted.  Assigned by deletion commands and
 removed by undeletion commands (@pxref{Rmail Deletion}).
 @item filed
 Means the message has been copied to some other file.  Assigned by the
-file output commands (@pxref{Rmail Files}).
+@kbd{o} and @kbd{C-o} file output commands (@pxref{Rmail Output}).
+@item stored
+Assigned by the @kbd{w} file output command (@pxref{Rmail Output}).
 @item answered
 Means you have mailed an answer to the message.  Assigned by the @kbd{r}
 command (@code{rmail-reply}).  @xref{Rmail Reply}.
@@ -885,10 +891,13 @@ message is selected in the Rmail buffer.
 
   Almost all Rmail commands work in the summary buffer as well as in the
 Rmail buffer.  Thus, @kbd{d} in the summary buffer deletes the current
-message, @kbd{u} undeletes, and @kbd{x} expunges.  @kbd{o} and @kbd{C-o}
-output the current message to a file; @kbd{r} starts a reply to it.  You
-can scroll the current message while remaining in the summary buffer
-using @key{SPC} and @key{DEL}.
+message, @kbd{u} undeletes, and @kbd{x} expunges.  (However, in the
+summary buffer, a numeric argument to @kbd{d}, @kbd{C-d} and @kbd{u}
+serves as a repeat count.  A negative argument reverses the meaning of
+@kbd{d} and @kbd{C-d}.)  @kbd{o} and @kbd{C-o} output the current
+message to a file; @kbd{r} starts a reply to it.  You can scroll the
+current message while remaining in the summary buffer using @key{SPC}
+and @key{DEL}.
 
   The Rmail commands to move between messages also work in the summary
 buffer, but with a twist: they move through the set of messages included
@@ -912,6 +921,12 @@ Move to previous line and select its message.
 Move to the last line, and select its message.
 @item <
 Move to the first line, and select its message.
+@item j
+@itemx @key{RET}
+Select the message on the current line (ensuring that the RMAIL buffer
+appears on the screen).  With argument @var{n}, select message number
+@var{n} and move to its line in the summary buffer; this signals an
+error if the message is not listed in the summary buffer.
 @item M-s @var{pattern} @key{RET}
 Search through messages for @var{pattern} starting with the current
 message; select the message found, and move point in the summary buffer
@@ -1263,7 +1278,7 @@ specifies the remote user name to use, @var{pass} may be used to
 specify the user password, @var{host-or-file-name} is the name or IP
 address of the remote mail server to connect to; e.g.,
 @code{pop://smith:guessme@@remote.server.net}.
+
 @item imap
 A remote mailbox to be accessed via IMAP4 protocol.  @var{User}
 specifies the remote user name to use, @var{pass} may be used to
@@ -1287,7 +1302,7 @@ absolute file name of the @code{movemail} executable.  If it is
 @code{nil}, Rmail searches for @code{movemail} in the directories
 listed in @code{rmail-movemail-search-path} and @code{exec-path}, then
 in @code{exec-directory}.
-  
+
 @node Remote Mailboxes
 @section Retrieving Mail from Remote Mailboxes
 @pindex movemail
@@ -1317,11 +1332,11 @@ Additionally, you may specify the password in the mailbox @acronym{URL}:
 @samp{pop://@var{username}:@var{password}@@@var{hostname}}.  In this
 case, @var{password} takes preference over the one set by
 @code{rmail-remote-password}.  This is especially useful if you have
-several remote mailboxes with different passwords. 
+several remote mailboxes with different passwords.
 
   For backward compatibility Rmail also supports two alternative ways
 of specifying remote POP mailboxes.  Specifying inbox name in the form
-@samp{po:@var{username}:@var{hostname}} is equivalent to 
+@samp{po:@var{username}:@var{hostname}} is equivalent to
 @samp{pop://@var{username}@@@var{hostname}}.  Alternatively, you may set
 a ``file name'' of @samp{po:@var{username}} in the inbox list of an
 Rmail file.  @code{Movemail} will handle such a name by opening a
@@ -1333,7 +1348,7 @@ will in this case specify the machine to look for the server on.
 supported only by the @code{mailutils movemail}.  To specify an IMAP
 mailbox in the inbox list, use the following mailbox @acronym{URL}:
 @samp{imap://@var{username}[:@var{password}]@@@var{hostname}}.  The
-@var{password} part is optional, as descrbed above.
+@var{password} part is optional, as described above.
 
 @vindex rmail-remote-password
 @vindex rmail-remote-password-required
@@ -1343,10 +1358,10 @@ mailbox in the inbox list, use the following mailbox @acronym{URL}:
 following algorithm to retrieve it:
 
 @enumerate
-@item 
+@item
 If the @var{password} is present in mailbox URL (see above), it is
 used.
-@item 
+@item
 If the variable @code{rmail-remote-password} is non-@code{nil}, its
 value is used.
 @item
index aaf7262d060d3b6e7e1c2e11d5fbfa7f7fa338b3..b5090afd26044356b24440b6a43ef1708909524f 100644 (file)
@@ -175,6 +175,10 @@ Width in pixels of the external border.
 @item @code{cursorColor} (class @code{Foreground})
 Color name for text cursor (point).
 
+@item @code{cursorBlink} (class @code{CursorBlink})
+Specifies whether to make the cursor blink. The default is @samp{on}.  Use
+@samp{off} or @samp{false} to turn cursor blinking off.
+
 @item @code{font} (class @code{Font})
 Font name for text (or fontset name, @pxref{Fontsets}).
 
@@ -392,6 +396,19 @@ For dialog boxes, use @samp{dialog} instead of @samp{menu}:
 Emacs.dialog*.font:    8x16
 @end example
 
+@noindent
+The Lucid menus can display multilingual text in your locale.  For more 
+information about fontsets see the man page for XCreateFontSet.  To enable
+multilingual menu text you specify a fontSet resource instead of the font
+resource.  If both font and fontSet resources are specified, the fontSet
+resource is used.  To specify
+@samp{-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*} for both the popup and
+menu bar menus, write this:
+
+@example
+Emacs*fontSet:  -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*
+@end example
+
 @noindent
 Experience shows that on some systems you may need to add
 @samp{shell.}@: before the @samp{pane.menubar} or @samp{menu*}.  On
@@ -402,6 +419,8 @@ some other systems, you must not add @samp{shell.}.
 @table @code
 @item font
 Font for menu item text.
+@item fontSet
+Fontset for menu item text.
 @item foreground
 Color of the foreground.
 @item background
index 170838bef49be97e00e5351a9aa4f702d699b08c..5847c35f37a89ec85d7ceb2bc1e51fef4b414c94 100644 (file)
@@ -1,3 +1,52 @@
+2005-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * window.c (Fset_window_configuration): Be careful when you choose
+       among several possible points for the new_current_buffer.
+
+2005-04-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * keyboard.c (poll_for_input) [SYNC_INPUT]: Don't call
+       poll_for_input_1.  Set interrupt_input_pending to 1 instead.
+       (Qlanguage_change) [MAC_OS]: New variable.
+       (syms_of_keyboard) [MAC_OS]: Intern and staticpro it.
+       (kbd_buffer_get_event) [MAC_OS]: Make event for LANGUAGE_CHANGE_EVENT.
+
+       * macterm.c (mac_keyboard_text_encoding)
+       (current_mac_keyboard_text_encoding): Remove variables.
+       (XTread_socket): Store language-change event if keyboard script
+       change is detected.  Don't convert input to
+       `mac_keyboard_text_encoding'.
+       (syms_of_macterm): Delete DEFVAR_INT for mac-keyboard-text-encoding.
+
+       * termhooks.h (enum event_kind) [MAC_OS]:
+       Add LANGUAGE_CHANGE_EVENT.
+
+2005-04-10  Richard M. Stallman  <rms@gnu.org>
+
+       * emacs.c (standard_args): Rename --bare-bones to --quick.
+       Add -D aka --basic-display.
+
+       * buffer.c (Fmake_indirect_buffer): Clear out some local variables.
+
+2005-04-09  Richard M. Stallman  <rms@gnu.org>
+
+       * keymap.c (where_is_internal): Convert a string used as event type
+       into "(any string)".
+
+       * lread.c (Vloads_in_progress): Not static.
+
+       * fns.c (Vloads_in_progress): Add extern.
+       (Frequire): Don't do LOADHIST_ATTACH if Vloads_in_progress is nil.
+
+2005-04-09  Thien-Thi Nguyen  <ttn@surf.glug.org>
+
+       * dispnew.c (mirror_line_dance): Avoid crash if W2 is null.
+
+2005-04-09  Lute Kamstra  <lute@gnu.org>
+
+       * print.c (PRINTPREPARE): Check if the marker PRINTCHARFUN is
+       within the accessible part of the buffer.
+
 2005-04-09  Kim F. Storm  <storm@cua.dk>
 
        * lread.c (readevalloop): Add args START and END as region in
@@ -22,8 +71,8 @@
        * mac.c (cfdate_to_lisp): Add `const' for variable `epoch_gdate'.
        (Fmac_get_preference): Doc fix.
 
-       * macfns.c (Fx_create_frame, x_create_tip_frame): Add
-       "fontset-mac" to fallback font/fontsets.
+       * macfns.c (Fx_create_frame, x_create_tip_frame):
+       Add "fontset-mac" to fallback font/fontsets.
 
 2005-04-04  Kim F. Storm  <storm@cua.dk>
 
@@ -41,8 +90,8 @@
 
 2005-04-01  Kenichi Handa  <handa@m17n.org>
 
-       * lisp.h (Vascii_upcase_table, Vascii_canon_table,
-       Vascii_eqv_table): Extern them.
+       * 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.
        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
+       (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  <monnier@iro.umontreal.ca>
index dcda7bc80ab8fa947f92962e7493603dbf325900..d24deb0a9a175b44c10ab070bc2c6429b71bb57e 100644 (file)
@@ -631,7 +631,21 @@ CLONE nil means the indirect buffer's state is reset to default values.  */)
       XMARKER (b->zv_marker)->insertion_type = 1;
     }
   else
-    clone_per_buffer_values (b->base_buffer, b);
+    {
+      struct buffer *old_b = current_buffer;
+
+      clone_per_buffer_values (b->base_buffer, b);
+      b->filename = Qnil;
+      b->file_truename = Qnil;
+      b->display_count = make_number (0);
+      b->backed_up = Qnil;
+      b->auto_save_file_name = Qnil;
+      set_buffer_internal_1 (b);
+      Fset (intern ("buffer-save-without-query"), Qnil);
+      Fset (intern ("buffer-file-number"), Qnil);
+      Fset (intern ("buffer-stale-function"), Qnil);
+      set_buffer_internal_1 (old_b);
+    }
 
   return buf;
 }
@@ -932,7 +946,7 @@ is the default binding of variable. */)
 }
 
 /* Return an alist of the Lisp-level buffer-local bindings of
-   buffer BUF.  That is, do't include  the variables maintained
+   buffer BUF.  That is, don't include the variables maintained
    in special slots in the buffer object.  */
 
 static Lisp_Object
index 7283747047c936503001cf2b7c9ad726337ce5d0..cdd7f694ceb56e513cb7a517486e31c100fd57bb 100644 (file)
@@ -3151,14 +3151,20 @@ mirror_line_dance (w, unchanged_at_top, nlines, copy_from, retained_p)
                  int m2_from;
 
                  w2 = frame_row_to_window (root, frame_from);
-                 m2 = w2->current_matrix;
-                 m2_from = frame_from - m2->matrix_y;
-                 copy_row_except_pointers (m->rows + window_to,
-                                           m2->rows + m2_from);
-
-                 /* If frame line is empty, window line is empty, too.  */
-                 if (!retained_p[copy_from[i]])
-                   m->rows[window_to].enabled_p = 0;
+                 /* ttn@surf.glug.org: when enabling menu bar using `emacs
+                    -nw', FROM_FRAME sometimes has no associated window.
+                    This check avoids a segfault if W2 is null.  */
+                 if (w2)
+                   {
+                     m2 = w2->current_matrix;
+                     m2_from = frame_from - m2->matrix_y;
+                     copy_row_except_pointers (m->rows + window_to,
+                                               m2->rows + m2_from);
+
+                     /* If frame line is empty, window line is empty, too.  */
+                     if (!retained_p[copy_from[i]])
+                       m->rows[window_to].enabled_p = 0;
+                   }
                  sync_p = 1;
                }
              else if (from_inside_window_p)
index 1ddde867d0b806b25ae144aa3ee08d715fce0dae..79c0654d3798a10f11233265de38b97c28f6d07f 100644 (file)
@@ -1814,8 +1814,8 @@ struct standard_args standard_args[] =
   { "-d", "--display", 60, 1 },
   { "-display", 0, 60, 1 },
   /* Now for the options handled in startup.el.  */
-  { "-Q", "--bare-bones", 55, 0 },
-  { "-bare-bones", 0, 55, 0 },
+  { "-Q", "--quick", 55, 0 },
+  { "-quick", 0, 55, 0 },
   { "-q", "--no-init-file", 50, 0 },
   { "-no-init-file", 0, 50, 0 },
   { "-no-site-file", "--no-site-file", 40, 0 },
@@ -1826,6 +1826,8 @@ struct standard_args standard_args[] =
   { "-i", "--icon-type", 15, 0 },
   { "-itype", 0, 15, 0 },
   { "-iconic", "--iconic", 15, 0 },
+  { "-D", "--basic-display", 12, 0},
+  { "--basic-display", 0, 12, 0},
   { "-bg", "--background-color", 10, 1 },
   { "-background", 0, 10, 1 },
   { "-fg", "--foreground-color", 10, 1 },
index 52e258a35905ddd50c697bef08401d3f1cf25aa3..6f59b85665cc3c242421095e0b7c03b525ff0ab3 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -1,6 +1,6 @@
 /* Random utility Lisp functions.
-   Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 98, 99, 2000, 2001, 02, 03, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
+     2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -66,6 +66,7 @@ int use_file_dialog;
 extern int minibuffer_auto_raise;
 extern Lisp_Object minibuf_window;
 extern Lisp_Object Vlocale_coding_system;
+extern Lisp_Object Vloads_in_progress;
 
 Lisp_Object Qstring_lessp, Qprovide, Qrequire;
 Lisp_Object Qyes_or_no_p_history;
@@ -2907,9 +2908,15 @@ The normal messages at start and end of loading FILENAME are suppressed.  */)
   CHECK_SYMBOL (feature);
 
   /* Record the presence of `require' in this file
-     even if the feature specified is already loaded.  */
-  LOADHIST_ATTACH (Fcons (Qrequire, feature));
-
+     even if the feature specified is already loaded.
+     But not more than once in any file,
+     and not when we aren't loading a file.  */
+  if (! NILP (Vloads_in_progress))
+    {
+      tem = Fcons (Qrequire, feature);
+      if (NILP (Fmember (tem, Vcurrent_load_list)))
+       LOADHIST_ATTACH (tem);
+    }
   tem = Fmemq (feature, Vfeatures);
 
   if (NILP (tem))
index bd3e27c0f1a4b9bcc72a2713293784d3f150f644..ab8c8907c007f6506705afb1a91dec229ca9ad90 100644 (file)
@@ -530,7 +530,7 @@ Lisp_Object Qmouse_fixup_help_message;
 /* Symbols to denote kinds of events.  */
 Lisp_Object Qfunction_key;
 Lisp_Object Qmouse_click;
-#ifdef WINDOWSNT
+#if defined (WINDOWSNT) || defined (MAC_OS)
 Lisp_Object Qlanguage_change;
 #endif
 Lisp_Object Qdrag_n_drop;
@@ -2115,7 +2115,11 @@ poll_for_input (timer)
      struct atimer *timer;
 {
   if (poll_suppress_count == 0)
+#ifdef SYNC_INPUT
+    interrupt_input_pending = 1;
+#else
     poll_for_input_1 ();
+#endif
 }
 
 #endif /* POLL_FOR_INPUT */
@@ -2258,12 +2262,16 @@ make_ctrl_char (c)
   return c;
 }
 
-/* Display help echo in the echo area.
+/* Display the help-echo property of the character after the mouse pointer.
+   Either show it in the echo area, or call show-help-function to display
+   it by other means (maybe in a tooltip).
+
+   If HELP is nil, that means clear the previous help echo.
 
-   HELP a string means display that string, HELP nil means clear the
-   help echo.  If HELP is a function, call it with OBJECT and POS as
-   arguments; the function should return a help string or nil for
-   none.  For all other types of HELP evaluate it to obtain a string.
+   If HELP is a string, display that string.  If HELP is a function,
+   call it with OBJECT and POS as arguments; the function should
+   return a help string or nil for none.  For all other types of HELP,
+   evaluate it to obtain a string.
 
    WINDOW is the window in which the help was generated, if any.
    It is nil if not in a window.
@@ -4027,11 +4035,16 @@ kbd_buffer_get_event (kbp, used_mouse_menu)
            x_activate_menubar (XFRAME (event->frame_or_window));
        }
 #endif
-#ifdef WINDOWSNT
+#if defined (WINDOWSNT) || defined (MAC_OS)
       else if (event->kind == LANGUAGE_CHANGE_EVENT)
        {
+#ifdef MAC_OS
+         /* Make an event (language-change (KEY_SCRIPT)).  */
+         obj = Fcons (make_number (event->code), Qnil);
+#else
          /* Make an event (language-change (FRAME CHARSET LCID)).  */
          obj = Fcons (event->frame_or_window, Qnil);
+#endif
          obj = Fcons (Qlanguage_change, Fcons (obj, Qnil));
          kbd_fetch_ptr = event + 1;
        }
@@ -10835,7 +10848,7 @@ syms_of_keyboard ()
   staticpro (&Qfunction_key);
   Qmouse_click = intern ("mouse-click");
   staticpro (&Qmouse_click);
-#ifdef WINDOWSNT
+#if defined (WINDOWSNT) || defined (MAC_OS)
   Qlanguage_change = intern ("language-change");
   staticpro (&Qlanguage_change);
 #endif
index 3aaecf1a5d7476253d88474afb22501a16f62834..3484186404a5b1f2a00e48606f9d21d7d6b56e58 100644 (file)
@@ -739,7 +739,9 @@ usage: (map-keymap FUNCTION KEYMAP)  */)
    remove that.  Also remove a menu help string as second element.
 
    If AUTOLOAD is nonzero, load autoloadable keymaps
-   that are referred to with indirection.  */
+   that are referred to with indirection.
+
+   This can GC because menu_item_eval_property calls Feval.  */
 
 Lisp_Object
 get_keyelt (object, autoload)
@@ -2543,6 +2545,19 @@ where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
                continue;
 
            record_sequence:
+             /* Don't annoy user with strings from a menu such as
+                Select Paste.  Change them all to "(any string)",
+                so that there seems to be only one menu item
+                to report. */
+             if (! NILP (sequence))
+               {
+                 Lisp_Object tem;
+                 tem = Faref (sequence, make_number (XVECTOR (sequence)->size - 1));
+                 if (STRINGP (tem))
+                   Faset (sequence, make_number (XVECTOR (sequence)->size - 1),
+                          build_string ("(any string)"));
+               }
+
              /* It is a true unshadowed match.  Record it, unless it's already
                 been seen (as could happen when inheriting keymaps).  */
              if (NILP (Fmember (sequence, found)))
@@ -2750,7 +2765,7 @@ where_is_internal_2 (args, key, binding)
 }
 
 
-/* This function cannot GC.  */
+/* This function can GC because get_keyelt can.  */
 
 static Lisp_Object
 where_is_internal_1 (binding, key, definition, noindirect, this, last,
index 9b0b5b90ec6ae698fea6a98ebc531e0483591e83..7fe626fa07c51b2057ed01a06f7d9e8095477a35 100644 (file)
@@ -203,7 +203,7 @@ static int new_backquote_flag;
 /* A list of file names for files being loaded in Fload.  Used to
    check for recursive loads.  */
 
-static Lisp_Object Vloads_in_progress;
+Lisp_Object Vloads_in_progress;
 
 /* Non-zero means load dangerous compiled Lisp files.  */
 
index 9434cb9a5a24ff2771c402e625b22b837d416ce0..614158309dd459edee9a755ba32aeacd440976da 100644 (file)
@@ -7172,11 +7172,6 @@ Lisp_Object Vmac_pass_command_to_system;
 Lisp_Object Vmac_pass_control_to_system;
 #endif
 
-/* convert input from Mac keyboard (assumed to be in Mac Roman coding)
-   to this text encoding */
-int mac_keyboard_text_encoding;
-int current_mac_keyboard_text_encoding = kTextEncodingMacRoman;
-
 /* Set in term/mac-win.el to indicate that event loop can now generate
    drag and drop events.  */
 Lisp_Object Qmac_ready_for_drag_n_drop;
@@ -8990,6 +8985,23 @@ XTread_socket (sd, expected, hold_quit)
                break;
              }
 #endif
+           {
+             static SInt16 last_key_script = -1;
+             SInt16 current_key_script = GetScriptManagerVariable (smKeyScript);
+
+             if (last_key_script != current_key_script)
+               {
+                 struct input_event event;
+                 
+                 EVENT_INIT (event);
+                 event.kind = LANGUAGE_CHANGE_EVENT;
+                 event.arg = Qnil;
+                 event.code = current_key_script;
+                 kbd_buffer_store_event (&event);
+                 count++;
+               }
+             last_key_script = current_key_script;
+           }
 
            ObscureCursor ();
 
@@ -9042,70 +9054,6 @@ XTread_socket (sd, expected, hold_quit)
              }
          }
 
-         /* If variable mac-convert-keyboard-input-to-latin-1 is
-            non-nil, convert non-ASCII characters typed at the Mac
-            keyboard (presumed to be in the Mac Roman encoding) to
-            iso-latin-1 encoding before they are passed to Emacs.
-            This enables the Mac keyboard to be used to enter
-            non-ASCII iso-latin-1 characters directly.  */
-         if (mac_keyboard_text_encoding != kTextEncodingMacRoman
-             && inev.kind == ASCII_KEYSTROKE_EVENT && inev.code >= 128)
-           {
-             static TECObjectRef converter = NULL;
-             OSStatus the_err = noErr;
-             OSStatus convert_status = noErr;
-
-             if (converter ==  NULL)
-               {
-                 the_err = TECCreateConverter (&converter,
-                                               kTextEncodingMacRoman,
-                                               mac_keyboard_text_encoding);
-                 current_mac_keyboard_text_encoding
-                   = mac_keyboard_text_encoding;
-               }
-             else if (mac_keyboard_text_encoding
-                      != current_mac_keyboard_text_encoding)
-               {
-                 /* Free the converter for the current encoding
-                    before creating a new one.  */
-                 TECDisposeConverter (converter);
-                 the_err = TECCreateConverter (&converter,
-                                               kTextEncodingMacRoman,
-                                               mac_keyboard_text_encoding);
-                 current_mac_keyboard_text_encoding
-                   = mac_keyboard_text_encoding;
-               }
-
-             if (the_err == noErr)
-               {
-                 unsigned char ch = inev.code;
-                 ByteCount actual_input_length, actual_output_length;
-                 unsigned char outbuf[32];
-
-                 convert_status = TECConvertText (converter, &ch, 1,
-                                                  &actual_input_length,
-                                                  outbuf, 1,
-                                                  &actual_output_length);
-                 if (convert_status == noErr
-                     && actual_input_length == 1
-                     && actual_output_length == 1)
-                   inev.code = *outbuf;
-
-                 /* Reset internal states of the converter object.
-                    If it fails, create another one. */
-                 convert_status = TECFlushText (converter, outbuf,
-                                                sizeof (outbuf),
-                                                &actual_output_length);
-                 if (convert_status != noErr)
-                   {
-                     TECDisposeConverter (converter);
-                     TECCreateConverter (&converter,
-                                         kTextEncodingMacRoman,
-                                         mac_keyboard_text_encoding);
-                   }
-               }
-           }
-
 #if USE_CARBON_EVENTS
          inev.modifiers = mac_event_to_emacs_modifiers (eventRef);
 #else
@@ -9918,21 +9866,6 @@ Toolbox for processing before Emacs sees it.  */);
 The text will be rendered using Core Graphics text rendering which
 may anti-alias the text.  */);
   Vmac_use_core_graphics = Qnil;
-
-  DEFVAR_INT ("mac-keyboard-text-encoding", &mac_keyboard_text_encoding,
-    doc: /* One of the Text Encoding Base constant values defined in the
-Basic Text Constants section of Inside Macintosh - Text Encoding
-Conversion Manager.  Its value determines the encoding characters
-typed at the Mac keyboard (presumed to be in the MacRoman encoding)
-will convert into.  E.g., if it is set to kTextEncodingMacRoman (0),
-its default value, no conversion takes place.  If it is set to
-kTextEncodingISOLatin1 (0x201) or kTextEncodingISOLatin2 (0x202),
-characters typed on Mac keyboard are first converted into the
-ISO Latin-1 or ISO Latin-2 encoding, respectively before being
-passed to Emacs.  Together with Emacs's set-keyboard-coding-system
-command, this enables the Mac keyboard to be used to enter non-ASCII
-characters directly.  */);
-  mac_keyboard_text_encoding = kTextEncodingMacRoman;
 }
 
 /* arch-tag: f2259165-4454-4c04-a029-a133c8af7b5b
index 3a21ef295608f78187e83e4fa9c56ee426b54acc..145287707ebeea574b046e3481f14c0c32016680 100644 (file)
@@ -1,6 +1,6 @@
 /* Lisp object printing and output streams.
-   Copyright (C) 1985, 86, 88, 93, 94, 95, 97, 98, 1999, 2000, 01, 03, 2004
-       Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999,
+     2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -212,13 +212,17 @@ void print_interval ();
      }                                                                 \
    if (MARKERP (printcharfun))                                         \
      {                                                                 \
-       if (!(XMARKER (original)->buffer))                              \
+       EMACS_INT marker_pos;                                           \
+       if (!(XMARKER (printcharfun)->buffer))                          \
          error ("Marker does not point anywhere");                     \
-       if (XMARKER (original)->buffer != current_buffer)               \
-         set_buffer_internal (XMARKER (original)->buffer);             \
+       if (XMARKER (printcharfun)->buffer != current_buffer)           \
+         set_buffer_internal (XMARKER (printcharfun)->buffer);         \
+       marker_pos = marker_position (printcharfun);                    \
+       if (marker_pos < BEGV || marker_pos > ZV)                       \
+        error ("Marker is outside the accessible part of the buffer"); \
        old_point = PT;                                                 \
        old_point_byte = PT_BYTE;                                       \
-       SET_PT_BOTH (marker_position (printcharfun),                    \
+       SET_PT_BOTH (marker_pos,                                                \
                    marker_byte_position (printcharfun));               \
        start_point = PT;                                               \
        start_point_byte = PT_BYTE;                                     \
index 83721f659122aabdb33661316d4bbe5c14f114b3..3e39e64417375e8be6857c51f3283a59e16f13be 100644 (file)
@@ -252,10 +252,11 @@ enum event_kind
                                   the wheel event occurred in.
                                   .timestamp gives a timestamp (in
                                   milliseconds) for the event.  */
-#ifdef WINDOWSNT
-  LANGUAGE_CHANGE_EVENT,       /* A LANGUAGE_CHANGE_EVENT is generated
-                                  on WINDOWSNT when the keyboard layout
-                                  or input language is changed by the
+#if defined (WINDOWSNT) || defined (MAC_OS)
+  LANGUAGE_CHANGE_EVENT,       /* A LANGUAGE_CHANGE_EVENT is
+                                  generated on WINDOWSNT or Mac OS
+                                  when the keyboard layout or input
+                                  language is changed by the
                                   user.  */
 #endif
   SCROLL_BAR_CLICK_EVENT,      /* .code gives the number of the mouse button
index be0f47da8d4d3457a2d02f8989f2221fb0a02de9..ec69c5b9aa5773c2ad6bc533e2a92a5905f84d5f 100644 (file)
@@ -1,7 +1,7 @@
 /* Window creation, deletion and examination for GNU Emacs.
    Does not include redisplay.
-   Copyright (C) 1985,86,87, 1993,94,95,96,97,98, 2000,01,02,03,04
-   Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
+     2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -3171,6 +3171,9 @@ selects the buffer of the selected window before each command.  */)
   if (EQ (window, selected_window))
     return window;
 
+  /* Store the current buffer's actual point into the
+     old selected window.  It belongs to that window,
+     and when the window is not selected, must be in the window.  */
   if (!NILP (selected_window))
     {
       ow = XWINDOW (selected_window);
@@ -5591,7 +5594,20 @@ the return value is nil.  Otherwise the value is t.  */)
       if (XBUFFER (new_current_buffer) == current_buffer)
        old_point = PT;
       else
-       old_point = BUF_PT (XBUFFER (new_current_buffer));
+       /* BUF_PT (XBUFFER (new_current_buffer)) gives us the position of
+          point in new_current_buffer as of the last time this buffer was
+          used.  This can be non-deterministic since it can be changed by
+          things like jit-lock by mere temporary selection of some random
+          window that happens to show this buffer.
+          So if possible we want this arbitrary choice of "which point" to
+          be the one from the to-be-selected-window so as to prevent this
+          window's cursor from being copied from another window.  */
+       if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer)
+           /* If current_window = selected_window, its point is in BUF_PT.  */
+           && !EQ (selected_window, data->current_window))
+         old_point = XMARKER (XWINDOW (data->current_window)->pointm)->charpos;
+       else
+         old_point = BUF_PT (XBUFFER (new_current_buffer));
     }
 
   frame = XWINDOW (SAVED_WINDOW_N (saved_windows, 0)->window)->frame;
@@ -5636,8 +5652,9 @@ the return value is nil.  Otherwise the value is t.  */)
 #endif
 #endif
 
-      /* "Swap out" point from the selected window
-        into its buffer.  We do this now, before
+      /* "Swap out" point from the selected window's buffer
+        into the window itself.  (Normally the pointm of the selected
+        window holds garbage.)  We do this now, before
         restoring the window contents, and prevent it from
         being done later on when we select a new window.  */
       if (! NILP (XWINDOW (selected_window)->buffer))
@@ -5787,10 +5804,11 @@ the return value is nil.  Otherwise the value is t.  */)
       FRAME_ROOT_WINDOW (f) = data->root_window;
       /* Prevent "swapping out point" in the old selected window
         using the buffer that has been restored into it.
-        Use the point value from the beginning of this function
-        since unshow_buffer (called from delete_all_subwindows)
-        could have altered it.  */
+        We already swapped out point that from that window's old buffer.  */
       selected_window = Qnil;
+
+      /* Arrange *not* to restore point in the buffer that was
+        current when the window configuration was saved.  */
       if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer))
        set_marker_restricted (XWINDOW (data->current_window)->pointm,
                               make_number (old_point),