diff options
| author | Miles Bader | 2004-07-11 22:08:06 +0000 |
|---|---|---|
| committer | Miles Bader | 2004-07-11 22:08:06 +0000 |
| commit | 89f3c0c9fda25756ee311a6d0467a97bac203eb5 (patch) | |
| tree | be9d2244f2ba1e7ecd4d680e92e5fdffca58ab03 | |
| parent | 094194de121c8b93c7b183182cb0853ec54fe1aa (diff) | |
| parent | da38045d0a9949d46814683391e094a3612b6b41 (diff) | |
| download | emacs-89f3c0c9fda25756ee311a6d0467a97bac203eb5.tar.gz emacs-89f3c0c9fda25756ee311a6d0467a97bac203eb5.zip | |
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-23
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-442
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-444
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-445
Tweak permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-446
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-450
Update from CVS
| -rw-r--r-- | etc/ChangeLog | 4 | ||||
| -rw-r--r-- | etc/NEWS | 17 | ||||
| -rw-r--r-- | lisp/ChangeLog | 76 | ||||
| -rw-r--r-- | lisp/ediff-mult.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/re-builder.el | 3 | ||||
| -rw-r--r-- | lisp/files.el | 7 | ||||
| -rw-r--r-- | lisp/mouse.el | 3 | ||||
| -rw-r--r-- | lisp/printing.el | 218 | ||||
| -rw-r--r-- | lisp/progmodes/cperl-mode.el | 2 | ||||
| -rw-r--r-- | lisp/replace.el | 3 | ||||
| -rw-r--r-- | lisp/simple.el | 3 | ||||
| -rw-r--r-- | lisp/term/mac-win.el | 13 | ||||
| -rw-r--r-- | lisp/wid-edit.el | 2 | ||||
| -rw-r--r-- | lisp/window.el | 41 | ||||
| -rw-r--r-- | lisp/xml.el | 400 | ||||
| -rw-r--r-- | lispref/ChangeLog | 21 | ||||
| -rw-r--r-- | lispref/frames.texi | 21 | ||||
| -rw-r--r-- | lispref/os.texi | 213 | ||||
| -rw-r--r-- | src/ChangeLog | 25 | ||||
| -rw-r--r-- | src/buffer.c | 14 | ||||
| -rw-r--r-- | src/editfns.c | 59 | ||||
| -rw-r--r-- | src/fns.c | 4 | ||||
| -rw-r--r-- | src/keyboard.c | 12 | ||||
| -rw-r--r-- | src/window.c | 31 |
24 files changed, 822 insertions, 372 deletions
diff --git a/etc/ChangeLog b/etc/ChangeLog index 356946001bd..d9c0c2816f0 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2004-07-08 David Kastrup <dak@gnu.org> | ||
| 2 | |||
| 3 | * NEWS (Lisp changes in 21.4): document (match-data t) change. | ||
| 4 | |||
| 1 | 2002-06-26 Eli Zaretskii <eliz@is.elta.co.il> | 5 | 2002-06-26 Eli Zaretskii <eliz@is.elta.co.il> |
| 2 | 6 | ||
| 3 | * FOR-RELEASE: Moved to the admin directory. | 7 | * FOR-RELEASE: Moved to the admin directory. |
| @@ -2246,7 +2246,7 @@ mode-lines in inverse-video. | |||
| 2246 | ** New package benchmark.el contains simple support for convenient | 2246 | ** New package benchmark.el contains simple support for convenient |
| 2247 | timing measurements of code (including the garbage collection component). | 2247 | timing measurements of code (including the garbage collection component). |
| 2248 | 2248 | ||
| 2249 | ** The new Lisp library fringe.el controls the apperance of fringes. | 2249 | ** The new Lisp library fringe.el controls the appearance of fringes. |
| 2250 | 2250 | ||
| 2251 | ** `cfengine-mode' is a major mode for editing GNU Cfengine | 2251 | ** `cfengine-mode' is a major mode for editing GNU Cfengine |
| 2252 | configuration files. | 2252 | configuration files. |
| @@ -2254,7 +2254,10 @@ configuration files. | |||
| 2254 | * Lisp Changes in Emacs 21.4 | 2254 | * Lisp Changes in Emacs 21.4 |
| 2255 | 2255 | ||
| 2256 | ** If a command sets transient-mark-mode to `only', that | 2256 | ** If a command sets transient-mark-mode to `only', that |
| 2257 | enables Transient Mark mode for the following command, only. | 2257 | enables Transient Mark mode for the following command only. |
| 2258 | During that following command, the value of transient-mark-mode | ||
| 2259 | is `identity'. If it is still `identity' at the end of the command, | ||
| 2260 | it changes to nil. | ||
| 2258 | 2261 | ||
| 2259 | +++ | 2262 | +++ |
| 2260 | ** Cleaner way to enter key sequences. | 2263 | ** Cleaner way to enter key sequences. |
| @@ -3027,6 +3030,11 @@ variable is used by read-file-name-internal to filter the completion list. | |||
| 3027 | ** The new variable `read-file-name-function' can be used by lisp code | 3030 | ** The new variable `read-file-name-function' can be used by lisp code |
| 3028 | to override the internal read-file-name function. | 3031 | to override the internal read-file-name function. |
| 3029 | 3032 | ||
| 3033 | |||
| 3034 | ** The new variable `read-file-name-completion-ignore-case' specifies | ||
| 3035 | whether completion ignores case when reading a file name with the | ||
| 3036 | `read-file-name' function. | ||
| 3037 | |||
| 3030 | +++ | 3038 | +++ |
| 3031 | ** The new function `read-directory-name' can be used instead of | 3039 | ** The new function `read-directory-name' can be used instead of |
| 3032 | `read-file-name' to read a directory name; when used, completion | 3040 | `read-file-name' to read a directory name; when used, completion |
| @@ -3634,6 +3642,11 @@ it in that buffer. | |||
| 3634 | properties from surrounding text. | 3642 | properties from surrounding text. |
| 3635 | 3643 | ||
| 3636 | +++ | 3644 | +++ |
| 3645 | ** `(match-data t)' will append the buffer as a final element of the | ||
| 3646 | match data if the last match was on a buffer. `set-match-data' will | ||
| 3647 | accept this for restoring the match state. | ||
| 3648 | |||
| 3649 | +++ | ||
| 3637 | ** New function `buffer-local-value'. | 3650 | ** New function `buffer-local-value'. |
| 3638 | 3651 | ||
| 3639 | This function returns the buffer-local binding of VARIABLE (a symbol) | 3652 | This function returns the buffer-local binding of VARIABLE (a symbol) |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 92552debee2..68fe5246458 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,79 @@ | |||
| 1 | 2004-07-10 Luc Teirlinck <teirllm@auburn.edu> | ||
| 2 | |||
| 3 | * files.el (switch-to-buffer-other-window): Doc fix. | ||
| 4 | |||
| 5 | * window.el (save-selected-window, one-window-p) | ||
| 6 | (split-window-keep-point, split-window-vertically) | ||
| 7 | (split-window-horizontally): Doc fixes. | ||
| 8 | |||
| 9 | 2004-07-10 Vinicius Jose Latorre <viniciusjl@ig.com.br> | ||
| 10 | |||
| 11 | * printing.el: Doc fix. Now it uses call-process instead of | ||
| 12 | shell-command for low command execution. | ||
| 13 | (pr-version): New version number (6.8). | ||
| 14 | (pr-shell-file-name): Option removed. | ||
| 15 | (pr-shell-command): Fun removed. | ||
| 16 | (pr-call-process): New fun. Replace pr-shell-command. | ||
| 17 | (pr-standard-path, pr-remove-nil-from-list): New funs. | ||
| 18 | (zmacs-region-stays, current-mouse-event, current-menubar): New var. | ||
| 19 | (pr-ps-file-preview, pr-ps-file-using-ghostscript, pr-ps-file-print) | ||
| 20 | (pr-setup, pr-ps-set-printer, pr-txt-set-printer) | ||
| 21 | (pr-ps-utility-process, pr-txt-print): Code fix. | ||
| 22 | |||
| 23 | 2004-07-10 Stephan Stahl <stahl@eos.franken.de> (tiny change) | ||
| 24 | |||
| 25 | * ediff-mult.el (ediff-meta-truncate-filenames): Change type to | ||
| 26 | boolean. | ||
| 27 | |||
| 28 | 2004-07-09 Lars Hansen <larsh@math.ku.dk> | ||
| 29 | |||
| 30 | * wid-edit.el (widget-field-buffer): Doc fix. | ||
| 31 | |||
| 32 | 2004-07-09 John Paul Wallington <jpw@gnu.org> | ||
| 33 | |||
| 34 | * emacs-lisp/re-builder.el (reb-update-overlays): Distinguish | ||
| 35 | between one and several matches in message. | ||
| 36 | |||
| 37 | 2004-07-09 Richard M. Stallman <rms@gnu.org> | ||
| 38 | |||
| 39 | * mouse.el (mouse-set-region-1): If transient-mark-mode | ||
| 40 | is `identity', change it to `only'. | ||
| 41 | |||
| 42 | * simple.el (current-word): Doc fix. | ||
| 43 | |||
| 44 | 2004-07-09 Mark A. Hershberger <mah@everybody.org> | ||
| 45 | |||
| 46 | * progmodes/cperl-mode.el (cperl-mode): Adapt defun-prompt-regexp | ||
| 47 | so that it is more understanding of whitespace. | ||
| 48 | |||
| 49 | * xml.el (xml-maybe-do-ns, xml-parse-tag): Produce elements in the | ||
| 50 | form | ||
| 51 | (("ns" . "element") (attr-list) children) instead of | ||
| 52 | ((:ns . "element") (attr-list) children) in order to reduce the | ||
| 53 | number of symbols used. | ||
| 54 | (xml-skip-dtd): Change to use xml-parse-dtd but set | ||
| 55 | xml-validating-parsing to nil. | ||
| 56 | (xml-parse-dtd): Parse entity deleclarations in DOCTYPEs. | ||
| 57 | (xml-substitute-entity): Remove in favor of new entity substitution. | ||
| 58 | (xml-substitute-special): Rewrite in to substitute complex | ||
| 59 | entities from DOCTYPE declarations. | ||
| 60 | (xml-parse-fragment): Parse fragments from entity deleclarations. | ||
| 61 | (xml-parse-region, xml-parse-tag, xml-parse-attlist) | ||
| 62 | (xml-parse-dtd, xml-substitute-special): Make validity checks | ||
| 63 | conditioned on xml-validating-parser. Add "Not Well Formed" to | ||
| 64 | error messages about well-formedness. | ||
| 65 | |||
| 66 | 2004-07-08 Steven Tamm <steventamm@mac.com> | ||
| 67 | |||
| 68 | * term/mac-win.el (mac-scroll-ignore-events, mac-scroll-down) | ||
| 69 | (mac-scroll-down-line, mac-scroll-up, mac-scroll-up-line): | ||
| 70 | Do not treat double clicks and triple clicks specially in the | ||
| 71 | scroll bar (preventing strange repositioning problems) | ||
| 72 | |||
| 73 | 2004-07-06 Stefan <monnier@iro.umontreal.ca> | ||
| 74 | |||
| 75 | * replace.el (query-replace-regexp-eval): Fix last change. | ||
| 76 | |||
| 1 | 2004-07-05 Stefan <monnier@iro.umontreal.ca> | 77 | 2004-07-05 Stefan <monnier@iro.umontreal.ca> |
| 2 | 78 | ||
| 3 | * replace.el (query-replace-descr): New fun. | 79 | * replace.el (query-replace-descr): New fun. |
diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el index f5eff1eb49d..cf6edc2d129 100644 --- a/lisp/ediff-mult.el +++ b/lisp/ediff-mult.el | |||
| @@ -200,7 +200,7 @@ Should be a sexp. For instance (car ediff-filtering-regexp-history) or nil." | |||
| 200 | (defcustom ediff-meta-truncate-filenames t | 200 | (defcustom ediff-meta-truncate-filenames t |
| 201 | "*If non-nil, truncate long file names in the session group buffers. | 201 | "*If non-nil, truncate long file names in the session group buffers. |
| 202 | This can be toggled with `ediff-toggle-filename-truncation'." | 202 | This can be toggled with `ediff-toggle-filename-truncation'." |
| 203 | :type 'hook | 203 | :type 'boolean |
| 204 | :group 'ediff-mult) | 204 | :group 'ediff-mult) |
| 205 | (defcustom ediff-registry-setup-hook nil | 205 | (defcustom ediff-registry-setup-hook nil |
| 206 | "*Hooks run just after the registry control panel is set up." | 206 | "*Hooks run just after the registry control panel is set up." |
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el index 83d3649006e..c6112c4a105 100644 --- a/lisp/emacs-lisp/re-builder.el +++ b/lisp/emacs-lisp/re-builder.el | |||
| @@ -670,9 +670,10 @@ If SUBEXP is non-nil mark only the corresponding sub-expressions." | |||
| 670 | (overlay-put overlay 'priority i))) | 670 | (overlay-put overlay 'priority i))) |
| 671 | (setq i (1+ i)))))) | 671 | (setq i (1+ i)))))) |
| 672 | (let ((count (if subexp submatches matches))) | 672 | (let ((count (if subexp submatches matches))) |
| 673 | (message"%s %smatch(es)%s" | 673 | (message"%s %smatch%s%s" |
| 674 | (if (= 0 count) "No" (int-to-string count)) | 674 | (if (= 0 count) "No" (int-to-string count)) |
| 675 | (if subexp "subexpression " "") | 675 | (if subexp "subexpression " "") |
| 676 | (if (= 1 count) "" "es") | ||
| 676 | (if (and reb-auto-match-limit | 677 | (if (and reb-auto-match-limit |
| 677 | (= reb-auto-match-limit count)) | 678 | (= reb-auto-match-limit count)) |
| 678 | " (limit reached)" ""))) | 679 | " (limit reached)" ""))) |
diff --git a/lisp/files.el b/lisp/files.el index 1d500379925..30f318fbf69 100644 --- a/lisp/files.el +++ b/lisp/files.el | |||
| @@ -869,8 +869,15 @@ use with M-x." | |||
| 869 | 869 | ||
| 870 | (defun switch-to-buffer-other-window (buffer &optional norecord) | 870 | (defun switch-to-buffer-other-window (buffer &optional norecord) |
| 871 | "Select buffer BUFFER in another window. | 871 | "Select buffer BUFFER in another window. |
| 872 | If BUFFER does not identify an existing buffer, then this function | ||
| 873 | creates a buffer with that name. | ||
| 874 | |||
| 875 | When called from Lisp, BUFFER can be a buffer, a string \(a buffer name), | ||
| 876 | or nil. If BUFFER is nil, then this function chooses a buffer | ||
| 877 | using `other-buffer'. | ||
| 872 | Optional second arg NORECORD non-nil means | 878 | Optional second arg NORECORD non-nil means |
| 873 | do not put this buffer at the front of the list of recently selected ones. | 879 | do not put this buffer at the front of the list of recently selected ones. |
| 880 | This function returns the buffer it switched to. | ||
| 874 | 881 | ||
| 875 | This uses the function `display-buffer' as a subroutine; see its | 882 | This uses the function `display-buffer' as a subroutine; see its |
| 876 | documentation for additional customization information." | 883 | documentation for additional customization information." |
diff --git a/lisp/mouse.el b/lisp/mouse.el index 7f9d080478a..b73967b99dc 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el | |||
| @@ -625,7 +625,8 @@ This should be bound to a mouse drag event." | |||
| 625 | 625 | ||
| 626 | (defun mouse-set-region-1 () | 626 | (defun mouse-set-region-1 () |
| 627 | ;; Set transient-mark-mode for a little while. | 627 | ;; Set transient-mark-mode for a little while. |
| 628 | (setq transient-mark-mode (or transient-mark-mode 'only)) | 628 | (if (memq transient-mark-mode '(nil identity)) |
| 629 | (setq transient-mark-mode 'only)) | ||
| 629 | (setq mouse-last-region-beg (region-beginning)) | 630 | (setq mouse-last-region-beg (region-beginning)) |
| 630 | (setq mouse-last-region-end (region-end)) | 631 | (setq mouse-last-region-end (region-end)) |
| 631 | (setq mouse-last-region-tick (buffer-modified-tick))) | 632 | (setq mouse-last-region-tick (buffer-modified-tick))) |
diff --git a/lisp/printing.el b/lisp/printing.el index 57dd0691f99..351d6b64e85 100644 --- a/lisp/printing.el +++ b/lisp/printing.el | |||
| @@ -3,18 +3,18 @@ | |||
| 3 | ;; Copyright (C) 2000, 2001, 2002, 2003, 2004 | 3 | ;; Copyright (C) 2000, 2001, 2002, 2003, 2004 |
| 4 | ;; Free Software Foundation, Inc. | 4 | ;; Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Vinicius Jose Latorre <vinicius@cpqd.com.br> | 6 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Maintainer: Vinicius Jose Latorre <vinicius@cpqd.com.br> | 7 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 8 | ;; Time-stamp: <2004/04/05 23:41:49 vinicius> | 8 | ;; Time-stamp: <2004/07/10 18:48:24 vinicius> |
| 9 | ;; Keywords: wp, print, PostScript | 9 | ;; Keywords: wp, print, PostScript |
| 10 | ;; Version: 6.7.4 | 10 | ;; Version: 6.8 |
| 11 | ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ | 11 | ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ |
| 12 | 12 | ||
| 13 | (defconst pr-version "6.7.4" | 13 | (defconst pr-version "6.8" |
| 14 | "printing.el, v 6.7.4 <2004/03/31 vinicius> | 14 | "printing.el, v 6.8 <2004/07/10 vinicius> |
| 15 | 15 | ||
| 16 | Please send all bug fixes and enhancements to | 16 | Please send all bug fixes and enhancements to |
| 17 | Vinicius Jose Latorre <vinicius@cpqd.com.br> | 17 | Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 18 | ") | 18 | ") |
| 19 | 19 | ||
| 20 | ;; This file is part of GNU Emacs. | 20 | ;; This file is part of GNU Emacs. |
| @@ -40,10 +40,23 @@ Please send all bug fixes and enhancements to | |||
| 40 | ;; Introduction | 40 | ;; Introduction |
| 41 | ;; ------------ | 41 | ;; ------------ |
| 42 | ;; | 42 | ;; |
| 43 | ;; This package provides some printing utilities that includes | 43 | ;; This package provides an user interface to some printing utilities that |
| 44 | ;; previewing/printing a PostScript file, printing a text file and | 44 | ;; includes previewing/printing a PostScript file, printing a text file and |
| 45 | ;; previewing/printing some major modes (like mh-folder-mode, | 45 | ;; previewing/printing some major modes (like mh-folder-mode, |
| 46 | ;; rmail-summary-mode, gnus-summary-mode, etc). | 46 | ;; rmail-summary-mode, gnus-summary-mode, etc). It also includes a |
| 47 | ;; PostScript/text printer database. | ||
| 48 | ;; | ||
| 49 | ;; Indeed, there are two user interfaces: | ||
| 50 | ;; | ||
| 51 | ;; * one is via menubar: | ||
| 52 | ;; When `printing' is loaded, the menubar is modified to use `printing' | ||
| 53 | ;; menu instead of the print options in menubar. | ||
| 54 | ;; This is the default user interface. | ||
| 55 | ;; | ||
| 56 | ;; * other is via buffer interface: | ||
| 57 | ;; It is an option of `printing' menu, but it can be binded into another | ||
| 58 | ;; key, so user can activate the buffer interface directly without using | ||
| 59 | ;; a menu. See `pr-interface' command. | ||
| 47 | ;; | 60 | ;; |
| 48 | ;; `printing' was inspired on: | 61 | ;; `printing' was inspired on: |
| 49 | ;; | 62 | ;; |
| @@ -172,7 +185,7 @@ Please send all bug fixes and enhancements to | |||
| 172 | ;; Tips | 185 | ;; Tips |
| 173 | ;; ---- | 186 | ;; ---- |
| 174 | ;; | 187 | ;; |
| 175 | ;; 1. If your have a local printer, that is, a printer which is connected | 188 | ;; 1. If you have a local printer, that is, a printer which is connected |
| 176 | ;; directly to your computer, don't forget to connect the printer to your | 189 | ;; directly to your computer, don't forget to connect the printer to your |
| 177 | ;; computer before printing. | 190 | ;; computer before printing. |
| 178 | ;; | 191 | ;; |
| @@ -187,16 +200,26 @@ Please send all bug fixes and enhancements to | |||
| 187 | ;; another buffer and, then, print the file or the new static buffer. | 200 | ;; another buffer and, then, print the file or the new static buffer. |
| 188 | ;; An example of dynamic buffer is the *Messages* buffer. | 201 | ;; An example of dynamic buffer is the *Messages* buffer. |
| 189 | ;; | 202 | ;; |
| 190 | ;; 4. When running Emacs on Windows with cygwin, check if the | 203 | ;; 4. When running Emacs on Windows (with or without cygwin), check if your |
| 191 | ;; `pr-shell-file-name' variable is set to the proper shell. This shell | 204 | ;; printer is a text printer or not by typing in a DOS window: |
| 192 | ;; will execute the commands to preview/print the buffer, file or directory. | 205 | ;; |
| 193 | ;; Also check the setting of `pr-path-style' variable. | 206 | ;; print /D:\\host\printer somefile.txt |
| 194 | ;; Probably, you should use: | 207 | ;; |
| 208 | ;; Where, `host' is the machine where your printer is directly connected, | ||
| 209 | ;; `printer' is the printer name and `somefile.txt' is a text file. | ||
| 195 | ;; | 210 | ;; |
| 196 | ;; (setq pr-shell-file-name "bash") | 211 | ;; If the printer `\\host\printer' doesn't print the content of |
| 197 | ;; (setq pr-path-style 'unix) | 212 | ;; `somefile.txt' or, instead, it returns the following message: |
| 198 | ;; | 213 | ;; |
| 199 | ;; And use / instead of \ when specifying a directory. | 214 | ;; PostScript Error Handler |
| 215 | ;; Offending Command = CCC | ||
| 216 | ;; Stack = | ||
| 217 | ;; | ||
| 218 | ;; Where `CCC' is whatever is at the beginning of the text to be printed. | ||
| 219 | ;; | ||
| 220 | ;; Therefore, the printer `\\host\printer' is not a text printer, but a | ||
| 221 | ;; PostScript printer. So, please, don't include this printer in | ||
| 222 | ;; `pr-txt-printer-alist' (which see). | ||
| 200 | ;; | 223 | ;; |
| 201 | ;; | 224 | ;; |
| 202 | ;; Using `printing' | 225 | ;; Using `printing' |
| @@ -479,9 +502,6 @@ Please send all bug fixes and enhancements to | |||
| 479 | ;; `pr-buffer-verbose' Non-nil means to be verbose when editing a | 502 | ;; `pr-buffer-verbose' Non-nil means to be verbose when editing a |
| 480 | ;; field in interface buffer. | 503 | ;; field in interface buffer. |
| 481 | ;; | 504 | ;; |
| 482 | ;; `pr-shell-file-name' Specify file name to load inferior shells | ||
| 483 | ;; from. | ||
| 484 | ;; | ||
| 485 | ;; To set the above options you may: | 505 | ;; To set the above options you may: |
| 486 | ;; | 506 | ;; |
| 487 | ;; a) insert the code in your ~/.emacs, like: | 507 | ;; a) insert the code in your ~/.emacs, like: |
| @@ -912,8 +932,8 @@ Please send all bug fixes and enhancements to | |||
| 912 | (require 'ps-print) | 932 | (require 'ps-print) |
| 913 | 933 | ||
| 914 | 934 | ||
| 915 | (and (string< ps-print-version "6.5.7") | 935 | (and (string< ps-print-version "6.6.4") |
| 916 | (error "`printing' requires `ps-print' package version 6.5.7 or later.")) | 936 | (error "`printing' requires `ps-print' package version 6.6.4 or later.")) |
| 917 | 937 | ||
| 918 | 938 | ||
| 919 | (eval-and-compile | 939 | (eval-and-compile |
| @@ -1064,6 +1084,15 @@ Valid values are: | |||
| 1064 | path)) | 1084 | path)) |
| 1065 | 1085 | ||
| 1066 | 1086 | ||
| 1087 | (defun pr-standard-path (path) | ||
| 1088 | "Ensure the proper directory separator depending on the OS. | ||
| 1089 | That is, if Emacs is running on DOS/Windows, ensure dos/windows-style directory | ||
| 1090 | separator; otherwise, ensure unix-style directory separator." | ||
| 1091 | (if (or pr-cygwin-system ps-windows-system) | ||
| 1092 | (subst-char-in-string ?/ ?\\ path) | ||
| 1093 | (subst-char-in-string ?\\ ?/ path))) | ||
| 1094 | |||
| 1095 | |||
| 1067 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 1096 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 1068 | ;; User Interface (II) | 1097 | ;; User Interface (II) |
| 1069 | 1098 | ||
| @@ -2314,16 +2343,6 @@ It's used by `pr-interface'." | |||
| 2314 | :group 'printing) | 2343 | :group 'printing) |
| 2315 | 2344 | ||
| 2316 | 2345 | ||
| 2317 | (defcustom pr-shell-file-name | ||
| 2318 | (if (and (not pr-cygwin-system) | ||
| 2319 | ps-windows-system) | ||
| 2320 | "cmdproxy.exe" | ||
| 2321 | shell-file-name) | ||
| 2322 | "*Specify file name to load inferior shells from." | ||
| 2323 | :type 'string | ||
| 2324 | :group 'printing) | ||
| 2325 | |||
| 2326 | |||
| 2327 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 2346 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 2328 | ;; Internal Variables | 2347 | ;; Internal Variables |
| 2329 | 2348 | ||
| @@ -2410,6 +2429,7 @@ See `pr-ps-printer-alist'.") | |||
| 2410 | (and pr-auto-region transient-mark-mode mark-active))) | 2429 | (and pr-auto-region transient-mark-mode mark-active))) |
| 2411 | 2430 | ||
| 2412 | ((eq ps-print-emacs-type 'xemacs) ; XEmacs | 2431 | ((eq ps-print-emacs-type 'xemacs) ; XEmacs |
| 2432 | (defvar zmacs-region-stays nil) ; to avoid compilation gripes | ||
| 2413 | (defsubst pr-region-active-p () | 2433 | (defsubst pr-region-active-p () |
| 2414 | (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))))) | 2434 | (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))))) |
| 2415 | 2435 | ||
| @@ -3792,9 +3812,7 @@ image in a file with that name." | |||
| 3792 | "Preview PostScript file FILENAME." | 3812 | "Preview PostScript file FILENAME." |
| 3793 | (interactive (list (pr-ps-infile-preprint "Preview "))) | 3813 | (interactive (list (pr-ps-infile-preprint "Preview "))) |
| 3794 | (and (stringp filename) (file-exists-p filename) | 3814 | (and (stringp filename) (file-exists-p filename) |
| 3795 | (let ((shell-file-name pr-shell-file-name)) | 3815 | (pr-call-process pr-gv-command filename))) |
| 3796 | (start-process-shell-command "PREVIEW" "*Messages*" | ||
| 3797 | (pr-command pr-gv-command) filename)))) | ||
| 3798 | 3816 | ||
| 3799 | 3817 | ||
| 3800 | ;;;###autoload | 3818 | ;;;###autoload |
| @@ -3815,12 +3833,13 @@ image in a file with that name." | |||
| 3815 | (let* ((file (pr-expand-file-name filename)) | 3833 | (let* ((file (pr-expand-file-name filename)) |
| 3816 | (tempfile (pr-dosify-path (make-temp-name file)))) | 3834 | (tempfile (pr-dosify-path (make-temp-name file)))) |
| 3817 | ;; gs use | 3835 | ;; gs use |
| 3818 | (pr-shell-command | 3836 | (pr-call-process pr-gs-command |
| 3819 | (concat (pr-command pr-gs-command) | 3837 | (format "-sDEVICE=%s" pr-gs-device) |
| 3820 | " -sDEVICE=" pr-gs-device | 3838 | (format "-r%d" pr-gs-resolution) |
| 3821 | " -r" (int-to-string pr-gs-resolution) | 3839 | (pr-switches-string pr-gs-switches "pr-gs-switches") |
| 3822 | " " (pr-switches-string pr-gs-switches "pr-gs-switches") | 3840 | (format "-sOutputFile=\"%s\"" tempfile) |
| 3823 | " -sOutputFile=" tempfile " " file " -c quit")) | 3841 | file |
| 3842 | "-c quit") | ||
| 3824 | ;; printing | 3843 | ;; printing |
| 3825 | (pr-ps-file-print tempfile) | 3844 | (pr-ps-file-print tempfile) |
| 3826 | ;; deleting | 3845 | ;; deleting |
| @@ -3841,16 +3860,16 @@ image in a file with that name." | |||
| 3841 | (erase-buffer) | 3860 | (erase-buffer) |
| 3842 | (insert-file-contents-literally file)) | 3861 | (insert-file-contents-literally file)) |
| 3843 | (pr-despool-print)) | 3862 | (pr-despool-print)) |
| 3844 | (pr-shell-command | 3863 | (apply 'pr-call-process |
| 3845 | (concat (pr-command pr-ps-command) " " | 3864 | pr-ps-command |
| 3846 | (pr-switches-string pr-ps-switches "pr-gs-switches") " " | 3865 | (pr-switches-string pr-ps-switches "pr-gs-switches") |
| 3847 | (if (string-match "cp" pr-ps-command) | 3866 | (if (string-match "cp" pr-ps-command) |
| 3848 | ;; for "cp" (cmd in out) | 3867 | ;; for "cp" (cmd in out) |
| 3849 | (concat "\"" file "\" " | 3868 | (list file |
| 3850 | pr-ps-printer-switch pr-ps-printer) | 3869 | (concat pr-ps-printer-switch pr-ps-printer)) |
| 3851 | ;; else, for others (cmd out in) | 3870 | ;; else, for others (cmd out in) |
| 3852 | (concat pr-ps-printer-switch pr-ps-printer | 3871 | (list (concat pr-ps-printer-switch pr-ps-printer) |
| 3853 | " \"" file "\"")))))))) | 3872 | file))))))) |
| 3854 | 3873 | ||
| 3855 | 3874 | ||
| 3856 | ;;;###autoload | 3875 | ;;;###autoload |
| @@ -4252,9 +4271,22 @@ Or choose the menu option Printing/Show Settings/printing." | |||
| 4252 | #'ps-print-quote | 4271 | #'ps-print-quote |
| 4253 | (list | 4272 | (list |
| 4254 | (concat "\n;;; printing.el version " pr-version "\n") | 4273 | (concat "\n;;; printing.el version " pr-version "\n") |
| 4255 | '(19 . pr-shell-file-name) | 4274 | ";; internal vars" |
| 4256 | '(19 . pr-path-style) | 4275 | (ps-comment-string "pr-txt-command " pr-txt-command) |
| 4257 | '(19 . pr-path-alist) | 4276 | (ps-comment-string "pr-txt-switches " |
| 4277 | (pr-switches-string pr-txt-switches "pr-txt-switches")) | ||
| 4278 | (ps-comment-string "pr-txt-printer " pr-txt-printer) | ||
| 4279 | (ps-comment-string "pr-ps-command " pr-ps-command) | ||
| 4280 | (ps-comment-string "pr-ps-switches " | ||
| 4281 | (pr-switches-string pr-ps-switches "pr-ps-switches")) | ||
| 4282 | (ps-comment-string "pr-ps-printer-switch" pr-ps-printer-switch) | ||
| 4283 | (ps-comment-string "pr-ps-printer " pr-ps-printer) | ||
| 4284 | (ps-comment-string "pr-cygwin-system " pr-cygwin-system) | ||
| 4285 | (ps-comment-string "ps-windows-system " ps-windows-system) | ||
| 4286 | (ps-comment-string "ps-lp-system " ps-lp-system) | ||
| 4287 | nil | ||
| 4288 | '(14 . pr-path-style) | ||
| 4289 | '(14 . pr-path-alist) | ||
| 4258 | nil | 4290 | nil |
| 4259 | '(21 . pr-txt-name) | 4291 | '(21 . pr-txt-name) |
| 4260 | '(21 . pr-txt-printer-alist) | 4292 | '(21 . pr-txt-printer-alist) |
| @@ -4570,6 +4602,7 @@ See `pr-visible-entry-alist'.") | |||
| 4570 | (cond | 4602 | (cond |
| 4571 | ((eq ps-print-emacs-type 'xemacs) | 4603 | ((eq ps-print-emacs-type 'xemacs) |
| 4572 | ;; XEmacs | 4604 | ;; XEmacs |
| 4605 | (defvar current-mouse-event nil) ; to avoid compilation gripes | ||
| 4573 | (defun pr-menu-position (entry index horizontal) | 4606 | (defun pr-menu-position (entry index horizontal) |
| 4574 | (pr-x-make-event | 4607 | (pr-x-make-event |
| 4575 | 'button-release | 4608 | 'button-release |
| @@ -4633,6 +4666,7 @@ See `pr-visible-entry-alist'.") | |||
| 4633 | 4666 | ||
| 4634 | ((eq ps-print-emacs-type 'xemacs) | 4667 | ((eq ps-print-emacs-type 'xemacs) |
| 4635 | ;; XEmacs | 4668 | ;; XEmacs |
| 4669 | (defvar current-menubar nil) ; to avoid compilation gripes | ||
| 4636 | (defun pr-menu-lookup (path) | 4670 | (defun pr-menu-lookup (path) |
| 4637 | (car (pr-x-find-menu-item current-menubar (cons "Printing" path)))) | 4671 | (car (pr-x-find-menu-item current-menubar (cons "Printing" path)))) |
| 4638 | 4672 | ||
| @@ -4973,7 +5007,7 @@ non-nil." | |||
| 4973 | pr-ps-command (pr-dosify-path (nth 0 ps)) | 5007 | pr-ps-command (pr-dosify-path (nth 0 ps)) |
| 4974 | pr-ps-switches (nth 1 ps) | 5008 | pr-ps-switches (nth 1 ps) |
| 4975 | pr-ps-printer-switch (nth 2 ps) | 5009 | pr-ps-printer-switch (nth 2 ps) |
| 4976 | pr-ps-printer (pr-dosify-path (nth 3 ps))) | 5010 | pr-ps-printer (nth 3 ps)) |
| 4977 | (or (stringp pr-ps-command) | 5011 | (or (stringp pr-ps-command) |
| 4978 | (setq pr-ps-command | 5012 | (setq pr-ps-command |
| 4979 | (cond (ps-windows-system "print") | 5013 | (cond (ps-windows-system "print") |
| @@ -4998,7 +5032,7 @@ non-nil." | |||
| 4998 | (setq pr-txt-name value | 5032 | (setq pr-txt-name value |
| 4999 | pr-txt-command (pr-dosify-path (nth 0 txt)) | 5033 | pr-txt-command (pr-dosify-path (nth 0 txt)) |
| 5000 | pr-txt-switches (nth 1 txt) | 5034 | pr-txt-switches (nth 1 txt) |
| 5001 | pr-txt-printer (pr-dosify-path (nth 2 txt)))) | 5035 | pr-txt-printer (nth 2 txt))) |
| 5002 | (or (stringp pr-txt-command) | 5036 | (or (stringp pr-txt-command) |
| 5003 | (setq pr-txt-command | 5037 | (setq pr-txt-command |
| 5004 | (cond (ps-windows-system "print") | 5038 | (cond (ps-windows-system "print") |
| @@ -5211,32 +5245,54 @@ non-nil." | |||
| 5211 | (let (item) | 5245 | (let (item) |
| 5212 | (and (stringp infile) (file-exists-p infile) | 5246 | (and (stringp infile) (file-exists-p infile) |
| 5213 | (setq item (cdr (assq pr-ps-utility pr-ps-utility-alist))) | 5247 | (setq item (cdr (assq pr-ps-utility pr-ps-utility-alist))) |
| 5214 | (pr-shell-command | 5248 | (pr-call-process (nth 0 item) |
| 5215 | (concat (pr-command (nth 0 item)) " " | 5249 | (pr-switches-string (nth 1 item) |
| 5216 | (pr-switches-string (nth 1 item) | 5250 | "pr-ps-utility-alist entry") |
| 5217 | "pr-ps-utility-alist entry") | 5251 | (pr-switches-string (nth 8 item) |
| 5218 | " " | 5252 | "pr-ps-utility-alist entry") |
| 5219 | (pr-switches-string (nth 8 item) | 5253 | (and (nth 2 item) |
| 5220 | "pr-ps-utility-alist entry") | 5254 | (format (nth 2 item) ps-paper-type)) |
| 5221 | " " | 5255 | (format (nth 3 item) n-up) |
| 5222 | (and (nth 2 item) | 5256 | (and pr-file-landscape (nth 4 item)) |
| 5223 | (format (nth 2 item) ps-paper-type)) | 5257 | (and pr-file-duplex (nth 5 item)) |
| 5224 | " " (format (nth 3 item) n-up) " " | 5258 | (and pr-file-tumble (nth 6 item)) |
| 5225 | (and pr-file-landscape (nth 4 item)) " " | 5259 | (pr-expand-file-name infile) |
| 5226 | (and pr-file-duplex (nth 5 item)) " " | 5260 | (nth 7 item) |
| 5227 | (and pr-file-tumble (nth 6 item)) | 5261 | (pr-expand-file-name outfile))))) |
| 5228 | " \"" (pr-expand-file-name infile) "\" " | 5262 | |
| 5229 | (nth 7 item) | 5263 | |
| 5230 | " \"" (pr-expand-file-name outfile) "\""))))) | 5264 | (defun pr-remove-nil-from-list (lst) |
| 5231 | 5265 | (while (and lst (null (car lst))) | |
| 5232 | 5266 | (setq lst (cdr lst))) | |
| 5233 | (defun pr-shell-command (command) | 5267 | (let ((b lst) |
| 5234 | (let ((shell-file-name pr-shell-file-name)) | 5268 | (l (cdr lst))) |
| 5235 | (shell-command command))) | 5269 | (while l |
| 5270 | (if (car l) | ||
| 5271 | (setq b l | ||
| 5272 | l (cdr l)) | ||
| 5273 | (setq l (cdr l)) | ||
| 5274 | (setcdr b l)))) | ||
| 5275 | lst) | ||
| 5276 | |||
| 5277 | |||
| 5278 | (defun pr-call-process (command &rest args) | ||
| 5279 | (let ((buffer (get-buffer-create "*Printing Command Output*")) | ||
| 5280 | (cmd (pr-command command)) | ||
| 5281 | status) | ||
| 5282 | (setq args (pr-remove-nil-from-list args)) | ||
| 5283 | (save-excursion | ||
| 5284 | (set-buffer buffer) | ||
| 5285 | (goto-char (point-max)) | ||
| 5286 | (insert (format "%s %S\n" cmd args))) | ||
| 5287 | (setq status (apply 'call-process cmd nil buffer nil args)) | ||
| 5288 | (save-excursion | ||
| 5289 | (set-buffer buffer) | ||
| 5290 | (goto-char (point-max)) | ||
| 5291 | (insert (format "Exit status: %s\n" status))))) | ||
| 5236 | 5292 | ||
| 5237 | 5293 | ||
| 5238 | (defun pr-txt-print (from to) | 5294 | (defun pr-txt-print (from to) |
| 5239 | (let ((lpr-command (pr-command pr-txt-command)) | 5295 | (let ((lpr-command (pr-standard-path (pr-command pr-txt-command))) |
| 5240 | (lpr-switches (pr-switches pr-txt-switches "pr-txt-switches")) | 5296 | (lpr-switches (pr-switches pr-txt-switches "pr-txt-switches")) |
| 5241 | (printer-name pr-txt-printer)) | 5297 | (printer-name pr-txt-printer)) |
| 5242 | (lpr-region from to))) | 5298 | (lpr-region from to))) |
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index c651e06b899..e679a48d642 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el | |||
| @@ -1472,7 +1472,7 @@ or as help on variables `cperl-tips', `cperl-problems', | |||
| 1472 | (make-local-variable 'comment-start-skip) | 1472 | (make-local-variable 'comment-start-skip) |
| 1473 | (setq comment-start-skip "#+ *") | 1473 | (setq comment-start-skip "#+ *") |
| 1474 | (make-local-variable 'defun-prompt-regexp) | 1474 | (make-local-variable 'defun-prompt-regexp) |
| 1475 | (setq defun-prompt-regexp "^[ \t]*sub[ \t]+\\([^ \t\n{(;]+\\)\\([ \t]*([^()]*)[ \t]*\\)?[ \t]*") | 1475 | (setq defun-prompt-regexp "^[ \t]*sub[ \t\n]+\\([^ \t\n{(;]+\\)\\([ \t\n]*([^()]*)[ \t\n]*\\)?[ \t\n]*)") |
| 1476 | (make-local-variable 'comment-indent-function) | 1476 | (make-local-variable 'comment-indent-function) |
| 1477 | (setq comment-indent-function 'cperl-comment-indent) | 1477 | (setq comment-indent-function 'cperl-comment-indent) |
| 1478 | (make-local-variable 'parse-sexp-ignore-comments) | 1478 | (make-local-variable 'parse-sexp-ignore-comments) |
diff --git a/lisp/replace.el b/lisp/replace.el index a7c8b859402..60c28d6c48a 100644 --- a/lisp/replace.el +++ b/lisp/replace.el | |||
| @@ -287,6 +287,7 @@ Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace | |||
| 287 | only matches that are surrounded by word boundaries. | 287 | only matches that are surrounded by word boundaries. |
| 288 | Fourth and fifth arg START and END specify the region to operate on." | 288 | Fourth and fifth arg START and END specify the region to operate on." |
| 289 | (interactive | 289 | (interactive |
| 290 | (progn | ||
| 290 | (barf-if-buffer-read-only) | 291 | (barf-if-buffer-read-only) |
| 291 | (let* ((from | 292 | (let* ((from |
| 292 | ;; Let-bind the history var to disable the "foo -> bar" default. | 293 | ;; Let-bind the history var to disable the "foo -> bar" default. |
| @@ -305,7 +306,7 @@ Fourth and fifth arg START and END specify the region to operate on." | |||
| 305 | (if (and transient-mark-mode mark-active) | 306 | (if (and transient-mark-mode mark-active) |
| 306 | (region-beginning)) | 307 | (region-beginning)) |
| 307 | (if (and transient-mark-mode mark-active) | 308 | (if (and transient-mark-mode mark-active) |
| 308 | (region-end))))) | 309 | (region-end)))))) |
| 309 | (perform-replace regexp (cons 'replace-eval-replacement to-expr) | 310 | (perform-replace regexp (cons 'replace-eval-replacement to-expr) |
| 310 | t 'literal delimited nil nil start end)) | 311 | t 'literal delimited nil nil start end)) |
| 311 | 312 | ||
diff --git a/lisp/simple.el b/lisp/simple.el index 8da9e8028f0..c45437fb123 100644 --- a/lisp/simple.el +++ b/lisp/simple.el | |||
| @@ -3364,7 +3364,8 @@ With argument, do this that many times." | |||
| 3364 | "Return the symbol or word that point is on (or a nearby one) as a string. | 3364 | "Return the symbol or word that point is on (or a nearby one) as a string. |
| 3365 | The return value includes no text properties. | 3365 | The return value includes no text properties. |
| 3366 | If optional arg STRICT is non-nil, return nil unless point is within | 3366 | If optional arg STRICT is non-nil, return nil unless point is within |
| 3367 | or adjacent to a symbol or word. | 3367 | or adjacent to a symbol or word. In all cases the value can be nil |
| 3368 | if there is no word nearby. | ||
| 3368 | The function, belying its name, normally finds a symbol. | 3369 | The function, belying its name, normally finds a symbol. |
| 3369 | If optional arg REALLY-WORD is non-nil, it finds just a word." | 3370 | If optional arg REALLY-WORD is non-nil, it finds just a word." |
| 3370 | (save-excursion | 3371 | (save-excursion |
diff --git a/lisp/term/mac-win.el b/lisp/term/mac-win.el index 1220c046cb7..15e813c53d3 100644 --- a/lisp/term/mac-win.el +++ b/lisp/term/mac-win.el | |||
| @@ -68,24 +68,29 @@ | |||
| 68 | (goto-char (window-start window)) | 68 | (goto-char (window-start window)) |
| 69 | (mac-scroll-up-line))))) | 69 | (mac-scroll-up-line))))) |
| 70 | 70 | ||
| 71 | (defun mac-scroll-ignore-events () | ||
| 72 | ;; Ignore confusing non-mouse events | ||
| 73 | (while (not (memq (car-safe (read-event)) | ||
| 74 | '(mouse-1 double-mouse-1 triple-mouse-1))) nil)) | ||
| 75 | |||
| 71 | (defun mac-scroll-down () | 76 | (defun mac-scroll-down () |
| 72 | (track-mouse | 77 | (track-mouse |
| 73 | (while (not (eq (car-safe (read-event)) 'mouse-1)) nil) | 78 | (mac-scroll-ignore-events) |
| 74 | (scroll-down))) | 79 | (scroll-down))) |
| 75 | 80 | ||
| 76 | (defun mac-scroll-down-line () | 81 | (defun mac-scroll-down-line () |
| 77 | (track-mouse | 82 | (track-mouse |
| 78 | (while (not (eq (car-safe (read-event)) 'mouse-1)) nil) | 83 | (mac-scroll-ignore-events) |
| 79 | (scroll-down 1))) | 84 | (scroll-down 1))) |
| 80 | 85 | ||
| 81 | (defun mac-scroll-up () | 86 | (defun mac-scroll-up () |
| 82 | (track-mouse | 87 | (track-mouse |
| 83 | (while (not (eq (car-safe (read-event)) 'mouse-1)) nil) | 88 | (mac-scroll-ignore-events) |
| 84 | (scroll-up))) | 89 | (scroll-up))) |
| 85 | 90 | ||
| 86 | (defun mac-scroll-up-line () | 91 | (defun mac-scroll-up-line () |
| 87 | (track-mouse | 92 | (track-mouse |
| 88 | (while (not (eq (car-safe (read-event)) 'mouse-1)) nil) | 93 | (mac-scroll-ignore-events) |
| 89 | (scroll-up 1))) | 94 | (scroll-up 1))) |
| 90 | 95 | ||
| 91 | (defun xw-defined-colors (&optional frame) | 96 | (defun xw-defined-colors (&optional frame) |
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index e6ce5ae71db..bdbe607317d 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el | |||
| @@ -1144,7 +1144,7 @@ When not inside a field, move to the previous button or field." | |||
| 1144 | field))) | 1144 | field))) |
| 1145 | 1145 | ||
| 1146 | (defun widget-field-buffer (widget) | 1146 | (defun widget-field-buffer (widget) |
| 1147 | "Return the start of WIDGET's editing field." | 1147 | "Return the buffer of WIDGET's editing field." |
| 1148 | (let ((overlay (widget-get widget :field-overlay))) | 1148 | (let ((overlay (widget-get widget :field-overlay))) |
| 1149 | (cond ((overlayp overlay) | 1149 | (cond ((overlayp overlay) |
| 1150 | (overlay-buffer overlay)) | 1150 | (overlay-buffer overlay)) |
diff --git a/lisp/window.el b/lisp/window.el index 188b3acf311..96bfc8b5581 100644 --- a/lisp/window.el +++ b/lisp/window.el | |||
| @@ -34,7 +34,8 @@ | |||
| 34 | Also restore the selected window of each frame as it was at the start | 34 | Also restore the selected window of each frame as it was at the start |
| 35 | of this construct. | 35 | of this construct. |
| 36 | However, if a window has become dead, don't get an error, | 36 | However, if a window has become dead, don't get an error, |
| 37 | just refrain from reselecting it." | 37 | just refrain from reselecting it. |
| 38 | Return the value of the last form in BODY." | ||
| 38 | `(let ((save-selected-window-window (selected-window)) | 39 | `(let ((save-selected-window-window (selected-window)) |
| 39 | ;; It is necessary to save all of these, because calling | 40 | ;; It is necessary to save all of these, because calling |
| 40 | ;; select-window changes frame-selected-window for whatever | 41 | ;; select-window changes frame-selected-window for whatever |
| @@ -63,15 +64,17 @@ This does not include the mode line (if any) or the header line (if any)." | |||
| 63 | (if header-line-format 1 0)))))) | 64 | (if header-line-format 1 0)))))) |
| 64 | 65 | ||
| 65 | (defun one-window-p (&optional nomini all-frames) | 66 | (defun one-window-p (&optional nomini all-frames) |
| 66 | "Return non-nil if the selected window is the only window (in its frame). | 67 | "Return non-nil if the selected window is the only window. |
| 67 | Optional arg NOMINI non-nil means don't count the minibuffer | 68 | Optional arg NOMINI non-nil means don't count the minibuffer |
| 68 | even if it is active. | 69 | even if it is active. Otherwise, the minibuffer is counted |
| 70 | when it is active. | ||
| 69 | 71 | ||
| 70 | The optional arg ALL-FRAMES t means count windows on all frames. | 72 | The optional arg ALL-FRAMES t means count windows on all frames. |
| 71 | If it is `visible', count windows on all visible frames. | 73 | If it is `visible', count windows on all visible frames. |
| 72 | ALL-FRAMES nil or omitted means count only the selected frame, | 74 | ALL-FRAMES nil or omitted means count only the selected frame, |
| 73 | plus the minibuffer it uses (which may be on another frame). | 75 | plus the minibuffer it uses (which may be on another frame). |
| 74 | If ALL-FRAMES is neither nil nor t, count only the selected frame." | 76 | ALL-FRAMES 0 means count all windows in all visible or iconified frames. |
| 77 | If ALL-FRAMES is anything else, count only the selected frame." | ||
| 75 | (let ((base-window (selected-window))) | 78 | (let ((base-window (selected-window))) |
| 76 | (if (and nomini (eq base-window (minibuffer-window))) | 79 | (if (and nomini (eq base-window (minibuffer-window))) |
| 77 | (setq base-window (next-window base-window))) | 80 | (setq base-window (next-window base-window))) |
| @@ -87,7 +90,7 @@ bars (top, bottom, or nil)." | |||
| 87 | (let ((vert (nth 2 (window-scroll-bars window))) | 90 | (let ((vert (nth 2 (window-scroll-bars window))) |
| 88 | (hor nil)) | 91 | (hor nil)) |
| 89 | (when (or (eq vert t) (eq hor t)) | 92 | (when (or (eq vert t) (eq hor t)) |
| 90 | (let ((fcsb (frame-current-scroll-bars | 93 | (let ((fcsb (frame-current-scroll-bars |
| 91 | (window-frame (or window (selected-window)))))) | 94 | (window-frame (or window (selected-window)))))) |
| 92 | (if (eq vert t) | 95 | (if (eq vert t) |
| 93 | (setq vert (car fcsb))) | 96 | (setq vert (car fcsb))) |
| @@ -268,29 +271,38 @@ If WINDOW is nil or omitted, it defaults to the currently selected window." | |||
| 268 | 271 | ||
| 269 | ;; I think this should be the default; I think people will prefer it--rms. | 272 | ;; I think this should be the default; I think people will prefer it--rms. |
| 270 | (defcustom split-window-keep-point t | 273 | (defcustom split-window-keep-point t |
| 271 | "*If non-nil, split windows keeps the original point in both children. | 274 | "*If non-nil, \\[split-window-vertically] keeps the original point \ |
| 275 | in both children. | ||
| 272 | This is often more convenient for editing. | 276 | This is often more convenient for editing. |
| 273 | If nil, adjust point in each of the two windows to minimize redisplay. | 277 | If nil, adjust point in each of the two windows to minimize redisplay. |
| 274 | This is convenient on slow terminals, but point can move strangely." | 278 | This is convenient on slow terminals, but point can move strangely. |
| 279 | |||
| 280 | This option applies only to `split-window-vertically' and | ||
| 281 | functions that call it. `split-window' always keeps the original | ||
| 282 | point in both children," | ||
| 275 | :type 'boolean | 283 | :type 'boolean |
| 276 | :group 'windows) | 284 | :group 'windows) |
| 277 | 285 | ||
| 278 | (defun split-window-vertically (&optional arg) | 286 | (defun split-window-vertically (&optional arg) |
| 279 | "Split current window into two windows, one above the other. | 287 | "Split current window into two windows, one above the other. |
| 280 | The uppermost window gets ARG lines and the other gets the rest. | 288 | The uppermost window gets ARG lines and the other gets the rest. |
| 281 | Negative arg means select the size of the lowermost window instead. | 289 | Negative ARG means select the size of the lowermost window instead. |
| 282 | With no argument, split equally or close to it. | 290 | With no argument, split equally or close to it. |
| 283 | Both windows display the same buffer now current. | 291 | Both windows display the same buffer now current. |
| 284 | 292 | ||
| 285 | If the variable `split-window-keep-point' is non-nil, both new windows | 293 | If the variable `split-window-keep-point' is non-nil, both new windows |
| 286 | will get the same value of point as the current window. This is often | 294 | will get the same value of point as the current window. This is often |
| 287 | more convenient for editing. | 295 | more convenient for editing. The upper window is the selected window. |
| 288 | 296 | ||
| 289 | Otherwise, we chose window starts so as to minimize the amount of | 297 | Otherwise, we choose window starts so as to minimize the amount of |
| 290 | redisplay; this is convenient on slow terminals. The new selected | 298 | redisplay; this is convenient on slow terminals. The new selected |
| 291 | window is the one that the current value of point appears in. The | 299 | window is the one that the current value of point appears in. The |
| 292 | value of point can change if the text around point is hidden by the | 300 | value of point can change if the text around point is hidden by the |
| 293 | new mode line." | 301 | new mode line. |
| 302 | |||
| 303 | Regardless of the value of `split-window-keep-point', the upper | ||
| 304 | window is the original one and the return value is the new, lower | ||
| 305 | window." | ||
| 294 | (interactive "P") | 306 | (interactive "P") |
| 295 | (let ((old-w (selected-window)) | 307 | (let ((old-w (selected-window)) |
| 296 | (old-point (point)) | 308 | (old-point (point)) |
| @@ -338,10 +350,13 @@ new mode line." | |||
| 338 | (defun split-window-horizontally (&optional arg) | 350 | (defun split-window-horizontally (&optional arg) |
| 339 | "Split current window into two windows side by side. | 351 | "Split current window into two windows side by side. |
| 340 | This window becomes the leftmost of the two, and gets ARG columns. | 352 | This window becomes the leftmost of the two, and gets ARG columns. |
| 341 | Negative arg means select the size of the rightmost window instead. | 353 | Negative ARG means select the size of the rightmost window instead. |
| 342 | The argument includes the width of the window's scroll bar; if there | 354 | The argument includes the width of the window's scroll bar; if there |
| 343 | are no scroll bars, it includes the width of the divider column | 355 | are no scroll bars, it includes the width of the divider column |
| 344 | to the window's right, if any. No arg means split equally." | 356 | to the window's right, if any. No ARG means split equally. |
| 357 | |||
| 358 | The original, leftmost window remains selected. | ||
| 359 | The return value is the new, rightmost window." | ||
| 345 | (interactive "P") | 360 | (interactive "P") |
| 346 | (let ((old-w (selected-window)) | 361 | (let ((old-w (selected-window)) |
| 347 | (size (and arg (prefix-numeric-value arg)))) | 362 | (size (and arg (prefix-numeric-value arg)))) |
diff --git a/lisp/xml.el b/lisp/xml.el index 03ef6346c70..993ef59b276 100644 --- a/lisp/xml.el +++ b/lisp/xml.el | |||
| @@ -84,6 +84,20 @@ | |||
| 84 | ;;** | 84 | ;;** |
| 85 | ;;******************************************************************* | 85 | ;;******************************************************************* |
| 86 | 86 | ||
| 87 | (defvar xml-entity-alist | ||
| 88 | '(("lt" . "<") | ||
| 89 | ("gt" . ">") | ||
| 90 | ("apos" . "'") | ||
| 91 | ("quot" . "\"") | ||
| 92 | ("amp" . "&")) | ||
| 93 | "The defined entities. Entities are added to this when the DTD is parsed.") | ||
| 94 | |||
| 95 | (defvar xml-sub-parser nil | ||
| 96 | "Dynamically set this to a non-nil value if you want to parse an XML fragment.") | ||
| 97 | |||
| 98 | (defvar xml-validating-parser nil | ||
| 99 | "Set to non-nil to get validity checking.") | ||
| 100 | |||
| 87 | (defsubst xml-node-name (node) | 101 | (defsubst xml-node-name (node) |
| 88 | "Return the tag associated with NODE. | 102 | "Return the tag associated with NODE. |
| 89 | Without namespace-aware parsing, the tag is a symbol. | 103 | Without namespace-aware parsing, the tag is a symbol. |
| @@ -164,6 +178,48 @@ If PARSE-NS is non-nil, then QNAMES are expanded." | |||
| 164 | (kill-buffer (current-buffer))) | 178 | (kill-buffer (current-buffer))) |
| 165 | xml))) | 179 | xml))) |
| 166 | 180 | ||
| 181 | |||
| 182 | (let* ((start-chars (concat ":[:alpha:]_")) | ||
| 183 | (name-chars (concat "-[:digit:]." start-chars)) | ||
| 184 | ;;[3] S ::= (#x20 | #x9 | #xD | #xA)+ | ||
| 185 | (whitespace "[ \t\n\r]")) | ||
| 186 | ;;[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | ||
| 187 | ;; | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | ||
| 188 | ;; | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | ||
| 189 | ;; | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] | ||
| 190 | (defvar xml-name-start-char-re (concat "[" start-chars "]")) | ||
| 191 | ;;[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] | ||
| 192 | (defvar xml-name-char-re (concat "[" name-chars "]")) | ||
| 193 | ;;[5] Name ::= NameStartChar (NameChar)* | ||
| 194 | (defvar xml-name-re (concat xml-name-start-char-re xml-name-char-re "*")) | ||
| 195 | ;;[6] Names ::= Name (#x20 Name)* | ||
| 196 | (defvar xml-names-re (concat xml-name-re "\\(?: " xml-name-re "\\)*")) | ||
| 197 | ;;[7] Nmtoken ::= (NameChar)+ | ||
| 198 | (defvar xml-nmtoken-re (concat xml-name-char-re "+")) | ||
| 199 | ;;[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)* | ||
| 200 | (defvar xml-nmtokens-re (concat xml-nmtoken-re "\\(?: " xml-name-re "\\)*")) | ||
| 201 | ;;[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' | ||
| 202 | (defvar xml-char-ref-re "\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)") | ||
| 203 | ;;[68] EntityRef ::= '&' Name ';' | ||
| 204 | (defvar xml-entity-ref (concat "&" xml-name-re ";")) | ||
| 205 | ;;[69] PEReference ::= '%' Name ';' | ||
| 206 | (defvar xml-pe-reference-re (concat "%" xml-name-re ";")) | ||
| 207 | ;;[67] Reference ::= EntityRef | CharRef | ||
| 208 | (defvar xml-reference-re (concat "\\(?:" xml-entity-ref "\\|" xml-char-ref-re "\\)")) | ||
| 209 | ;;[9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | ||
| 210 | ;; | "'" ([^%&'] | PEReference | Reference)* "'" | ||
| 211 | (defvar xml-entity-value-re (concat "\\(?:\"\\(?:[^%&\"]\\|" xml-pe-reference-re | ||
| 212 | "\\|" xml-reference-re "\\)*\"\\|'\\(?:[^%&']\\|" | ||
| 213 | xml-pe-reference-re "\\|" xml-reference-re "\\)*'\\)"))) | ||
| 214 | ;;[75] ExternalID ::= 'SYSTEM' S SystemLiteral | ||
| 215 | ;; | 'PUBLIC' S PubidLiteral S SystemLiteral | ||
| 216 | ;;[76] NDataDecl ::= S 'NDATA' S | ||
| 217 | ;;[73] EntityDef ::= EntityValue| (ExternalID NDataDecl?) | ||
| 218 | ;;[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' | ||
| 219 | ;;[74] PEDef ::= EntityValue | ExternalID | ||
| 220 | ;;[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>' | ||
| 221 | ;;[70] EntityDecl ::= GEDecl | PEDecl | ||
| 222 | |||
| 167 | ;; Note that this is setup so that we can do whitespace-skipping with | 223 | ;; Note that this is setup so that we can do whitespace-skipping with |
| 168 | ;; `(skip-syntax-forward " ")', inter alia. Previously this was slow | 224 | ;; `(skip-syntax-forward " ")', inter alia. Previously this was slow |
| 169 | ;; compared with `re-search-forward', but that has been fixed. Also | 225 | ;; compared with `re-search-forward', but that has been fixed. Also |
| @@ -229,9 +285,9 @@ If PARSE-NS is non-nil, then QNAMES are expanded." | |||
| 229 | (progn | 285 | (progn |
| 230 | (forward-char -1) | 286 | (forward-char -1) |
| 231 | (setq result (xml-parse-tag parse-dtd parse-ns)) | 287 | (setq result (xml-parse-tag parse-dtd parse-ns)) |
| 232 | (if (and xml result) | 288 | (if (and xml result (not xml-sub-parser)) |
| 233 | ;; translation of rule [1] of XML specifications | 289 | ;; translation of rule [1] of XML specifications |
| 234 | (error "XML files can have only one toplevel tag") | 290 | (error "XML: (Not Well-Formed) Only one root tag allowed") |
| 235 | (cond | 291 | (cond |
| 236 | ((null result)) | 292 | ((null result)) |
| 237 | ((and (listp (car result)) | 293 | ((and (listp (car result)) |
| @@ -265,10 +321,24 @@ specify that the name shouldn't be given a namespace." | |||
| 265 | ;; matching cons in xml-ns. In which case we | 321 | ;; matching cons in xml-ns. In which case we |
| 266 | (ns (or (cdr (assoc (if special "xmlns" prefix) | 322 | (ns (or (cdr (assoc (if special "xmlns" prefix) |
| 267 | xml-ns)) | 323 | xml-ns)) |
| 268 | :))) | 324 | ""))) |
| 269 | (cons ns (if special "" lname))) | 325 | (cons ns (if special "" lname))) |
| 270 | (intern name))) | 326 | (intern name))) |
| 271 | 327 | ||
| 328 | (defun xml-parse-fragment (&optional parse-dtd parse-ns) | ||
| 329 | "Parse xml-like fragments." | ||
| 330 | (let ((xml-sub-parser t) | ||
| 331 | children) | ||
| 332 | (while (not (eobp)) | ||
| 333 | (let ((bit (xml-parse-tag | ||
| 334 | parse-dtd parse-ns))) | ||
| 335 | (if children | ||
| 336 | (setq children (append (list bit) children)) | ||
| 337 | (if (stringp bit) | ||
| 338 | (setq children (list bit)) | ||
| 339 | (setq children bit))))) | ||
| 340 | (reverse children))) | ||
| 341 | |||
| 272 | (defun xml-parse-tag (&optional parse-dtd parse-ns) | 342 | (defun xml-parse-tag (&optional parse-dtd parse-ns) |
| 273 | "Parse the tag at point. | 343 | "Parse the tag at point. |
| 274 | If PARSE-DTD is non-nil, the DTD of the document, if any, is parsed and | 344 | If PARSE-DTD is non-nil, the DTD of the document, if any, is parsed and |
| @@ -278,16 +348,17 @@ Returns one of: | |||
| 278 | - a list : the matching node | 348 | - a list : the matching node |
| 279 | - nil : the point is not looking at a tag. | 349 | - nil : the point is not looking at a tag. |
| 280 | - a pair : the first element is the DTD, the second is the node." | 350 | - a pair : the first element is the DTD, the second is the node." |
| 281 | (let ((xml-ns (if (consp parse-ns) | 351 | (let ((xml-validating-parser (or parse-dtd xml-validating-parser)) |
| 352 | (xml-ns (if (consp parse-ns) | ||
| 282 | parse-ns | 353 | parse-ns |
| 283 | (if parse-ns | 354 | (if parse-ns |
| 284 | (list | 355 | (list |
| 285 | ;; Default for empty prefix is no namespace | 356 | ;; Default for empty prefix is no namespace |
| 286 | (cons "" :) | 357 | (cons "" "") |
| 287 | ;; "xml" namespace | 358 | ;; "xml" namespace |
| 288 | (cons "xml" :http://www.w3.org/XML/1998/namespace) | 359 | (cons "xml" "http://www.w3.org/XML/1998/namespace") |
| 289 | ;; We need to seed the xmlns namespace | 360 | ;; We need to seed the xmlns namespace |
| 290 | (cons "xmlns" :http://www.w3.org/2000/xmlns/)))))) | 361 | (cons "xmlns" "http://www.w3.org/2000/xmlns/")))))) |
| 291 | (cond | 362 | (cond |
| 292 | ;; Processing instructions (like the <?xml version="1.0"?> tag at the | 363 | ;; Processing instructions (like the <?xml version="1.0"?> tag at the |
| 293 | ;; beginning of a document). | 364 | ;; beginning of a document). |
| @@ -299,18 +370,15 @@ Returns one of: | |||
| 299 | ((looking-at "<!\\[CDATA\\[") | 370 | ((looking-at "<!\\[CDATA\\[") |
| 300 | (let ((pos (match-end 0))) | 371 | (let ((pos (match-end 0))) |
| 301 | (unless (search-forward "]]>" nil t) | 372 | (unless (search-forward "]]>" nil t) |
| 302 | (error "CDATA section does not end anywhere in the document")) | 373 | (error "XML: (Not Well Formed) CDATA section does not end anywhere in the document")) |
| 303 | (buffer-substring pos (match-beginning 0)))) | 374 | (buffer-substring pos (match-beginning 0)))) |
| 304 | ;; DTD for the document | 375 | ;; DTD for the document |
| 305 | ((looking-at "<!DOCTYPE") | 376 | ((looking-at "<!DOCTYPE") |
| 306 | (let (dtd) | 377 | (let ((dtd (xml-parse-dtd parse-ns))) |
| 307 | (if parse-dtd | 378 | (skip-syntax-forward " ") |
| 308 | (setq dtd (xml-parse-dtd)) | 379 | (if xml-validating-parser |
| 309 | (xml-skip-dtd)) | 380 | (cons dtd (xml-parse-tag nil xml-ns)) |
| 310 | (skip-syntax-forward " ") | 381 | (xml-parse-tag nil xml-ns)))) |
| 311 | (if dtd | ||
| 312 | (cons dtd (xml-parse-tag nil xml-ns)) | ||
| 313 | (xml-parse-tag nil xml-ns)))) | ||
| 314 | ;; skip comments | 382 | ;; skip comments |
| 315 | ((looking-at "<!--") | 383 | ((looking-at "<!--") |
| 316 | (search-forward "-->") | 384 | (search-forward "-->") |
| @@ -332,65 +400,76 @@ Returns one of: | |||
| 332 | (when (consp xml-ns) | 400 | (when (consp xml-ns) |
| 333 | (dolist (attr attrs) | 401 | (dolist (attr attrs) |
| 334 | (when (and (consp (car attr)) | 402 | (when (and (consp (car attr)) |
| 335 | (eq :http://www.w3.org/2000/xmlns/ | 403 | (equal "http://www.w3.org/2000/xmlns/" |
| 336 | (caar attr))) | 404 | (caar attr))) |
| 337 | (push (cons (cdar attr) (intern (concat ":" (cdr attr)))) | 405 | (push (cons (cdar attr) (cdr attr)) |
| 338 | xml-ns)))) | 406 | xml-ns)))) |
| 339 | 407 | ||
| 340 | (setq children (list attrs (xml-maybe-do-ns node-name "" xml-ns))) | 408 | (setq children (list attrs (xml-maybe-do-ns node-name "" xml-ns))) |
| 341 | 409 | ||
| 342 | ;; is this an empty element ? | 410 | ;; is this an empty element ? |
| 343 | (if (looking-at "/>") | 411 | (if (looking-at "/>") |
| 344 | (progn | ||
| 345 | (forward-char 2) | ||
| 346 | (nreverse children)) | ||
| 347 | |||
| 348 | ;; is this a valid start tag ? | ||
| 349 | (if (eq (char-after) ?>) | ||
| 350 | (progn | 412 | (progn |
| 351 | (forward-char 1) | 413 | (forward-char 2) |
| 352 | ;; Now check that we have the right end-tag. Note that this | ||
| 353 | ;; one might contain spaces after the tag name | ||
| 354 | (let ((end (concat "</" node-name "\\s-*>"))) | ||
| 355 | (while (not (looking-at end)) | ||
| 356 | (cond | ||
| 357 | ((looking-at "</") | ||
| 358 | (error "XML: Invalid end tag (expecting %s) at pos %d" | ||
| 359 | node-name (point))) | ||
| 360 | ((= (char-after) ?<) | ||
| 361 | (let ((tag (xml-parse-tag nil xml-ns))) | ||
| 362 | (when tag | ||
| 363 | (push tag children)))) | ||
| 364 | (t | ||
| 365 | (setq pos (point)) | ||
| 366 | (search-forward "<") | ||
| 367 | (forward-char -1) | ||
| 368 | (let ((string (buffer-substring pos (point))) | ||
| 369 | (pos 0)) | ||
| 370 | |||
| 371 | ;; Clean up the string. As per XML | ||
| 372 | ;; specifications, the XML processor should | ||
| 373 | ;; always pass the whole string to the | ||
| 374 | ;; application. But \r's should be replaced: | ||
| 375 | ;; http://www.w3.org/TR/2000/REC-xml-20001006#sec-line-ends | ||
| 376 | (while (string-match "\r\n?" string pos) | ||
| 377 | (setq string (replace-match "\n" t t string)) | ||
| 378 | (setq pos (1+ (match-beginning 0)))) | ||
| 379 | |||
| 380 | (setq string (xml-substitute-special string)) | ||
| 381 | (setq children | ||
| 382 | (if (stringp (car children)) | ||
| 383 | ;; The two strings were separated by a comment. | ||
| 384 | (cons (concat (car children) string) | ||
| 385 | (cdr children)) | ||
| 386 | (cons string children)))))))) | ||
| 387 | |||
| 388 | (goto-char (match-end 0)) | ||
| 389 | (nreverse children)) | 414 | (nreverse children)) |
| 390 | ;; This was an invalid start tag | 415 | |
| 391 | (error "XML: Invalid attribute list"))))) | 416 | ;; is this a valid start tag ? |
| 392 | (t ;; This is not a tag. | 417 | (if (eq (char-after) ?>) |
| 393 | (error "XML: Invalid character"))))) | 418 | (progn |
| 419 | (forward-char 1) | ||
| 420 | ;; Now check that we have the right end-tag. Note that this | ||
| 421 | ;; one might contain spaces after the tag name | ||
| 422 | (let ((end (concat "</" node-name "\\s-*>"))) | ||
| 423 | (while (not (looking-at end)) | ||
| 424 | (cond | ||
| 425 | ((looking-at "</") | ||
| 426 | (error "XML: (Not Well-Formed) Invalid end tag (expecting %s) at pos %d" | ||
| 427 | node-name (point))) | ||
| 428 | ((= (char-after) ?<) | ||
| 429 | (let ((tag (xml-parse-tag nil xml-ns))) | ||
| 430 | (when tag | ||
| 431 | (push tag children)))) | ||
| 432 | (t | ||
| 433 | (let ((expansion (xml-parse-string))) | ||
| 434 | (setq children | ||
| 435 | (if (stringp expansion) | ||
| 436 | (if (stringp (car children)) | ||
| 437 | ;; The two strings were separated by a comment. | ||
| 438 | (setq children (append (concat (car children) expansion) | ||
| 439 | (cdr children))) | ||
| 440 | (setq children (append (list expansion) children))) | ||
| 441 | (setq children (append expansion children)))))))) | ||
| 442 | |||
| 443 | (goto-char (match-end 0)) | ||
| 444 | (nreverse children))) | ||
| 445 | ;; This was an invalid start tag (Expected ">", but didn't see it.) | ||
| 446 | (error "XML: (Well-Formed) Couldn't parse tag: %s" | ||
| 447 | (buffer-substring (- (point) 10) (+ (point) 1))))))) | ||
| 448 | (t ;; (Not one of PI, CDATA, Comment, End tag, or Start tag) | ||
| 449 | (unless xml-sub-parser ; Usually, we error out. | ||
| 450 | (error "XML: (Well-Formed) Invalid character")) | ||
| 451 | |||
| 452 | ;; However, if we're parsing incrementally, then we need to deal | ||
| 453 | ;; with stray CDATA. | ||
| 454 | (xml-parse-string))))) | ||
| 455 | |||
| 456 | (defun xml-parse-string () | ||
| 457 | "Parse the next whatever. Could be a string, or an element." | ||
| 458 | (let* ((pos (point)) | ||
| 459 | (string (progn (if (search-forward "<" nil t) | ||
| 460 | (forward-char -1) | ||
| 461 | (goto-char (point-max))) | ||
| 462 | (buffer-substring pos (point))))) | ||
| 463 | ;; Clean up the string. As per XML specifications, the XML | ||
| 464 | ;; processor should always pass the whole string to the | ||
| 465 | ;; application. But \r's should be replaced: | ||
| 466 | ;; http://www.w3.org/TR/2000/REC-xml-20001006#sec-line-ends | ||
| 467 | (setq pos 0) | ||
| 468 | (while (string-match "\r\n?" string pos) | ||
| 469 | (setq string (replace-match "\n" t t string)) | ||
| 470 | (setq pos (1+ (match-beginning 0)))) | ||
| 471 | |||
| 472 | (xml-substitute-special string))) | ||
| 394 | 473 | ||
| 395 | (defun xml-parse-attlist (&optional xml-ns) | 474 | (defun xml-parse-attlist (&optional xml-ns) |
| 396 | "Return the attribute-list after point. | 475 | "Return the attribute-list after point. |
| @@ -412,18 +491,23 @@ Leave point at the first non-blank character after the tag." | |||
| 412 | (setq end-pos (match-end 0)) | 491 | (setq end-pos (match-end 0)) |
| 413 | (if (looking-at "'\\([^']*\\)'") | 492 | (if (looking-at "'\\([^']*\\)'") |
| 414 | (setq end-pos (match-end 0)) | 493 | (setq end-pos (match-end 0)) |
| 415 | (error "XML: Attribute values must be given between quotes"))) | 494 | (error "XML: (Not Well-Formed) Attribute values must be given between quotes"))) |
| 416 | 495 | ||
| 417 | ;; Each attribute must be unique within a given element | 496 | ;; Each attribute must be unique within a given element |
| 418 | (if (assoc name attlist) | 497 | (if (assoc name attlist) |
| 419 | (error "XML: each attribute must be unique within an element")) | 498 | (error "XML: (Not Well-Formed) Each attribute must be unique within an element")) |
| 420 | 499 | ||
| 421 | ;; Multiple whitespace characters should be replaced with a single one | 500 | ;; Multiple whitespace characters should be replaced with a single one |
| 422 | ;; in the attributes | 501 | ;; in the attributes |
| 423 | (let ((string (match-string 1)) | 502 | (let ((string (match-string 1)) |
| 424 | (pos 0)) | 503 | (pos 0)) |
| 425 | (replace-regexp-in-string "\\s-\\{2,\\}" " " string) | 504 | (replace-regexp-in-string "\\s-\\{2,\\}" " " string) |
| 426 | (push (cons name (xml-substitute-special string)) attlist)) | 505 | (let ((expansion (xml-substitute-special string))) |
| 506 | (unless (stringp expansion) | ||
| 507 | ; We say this is the constraint. It is acctually that | ||
| 508 | ; external entities nor "<" can be in an attribute value. | ||
| 509 | (error "XML: (Not Well-Formed) Entities in attributes cannot expand into elements")) | ||
| 510 | (push (cons name expansion) attlist))) | ||
| 427 | 511 | ||
| 428 | (goto-char end-pos) | 512 | (goto-char end-pos) |
| 429 | (skip-syntax-forward " ")) | 513 | (skip-syntax-forward " ")) |
| @@ -442,24 +526,16 @@ Leave point at the first non-blank character after the tag." | |||
| 442 | (defun xml-skip-dtd () | 526 | (defun xml-skip-dtd () |
| 443 | "Skip the DTD at point. | 527 | "Skip the DTD at point. |
| 444 | This follows the rule [28] in the XML specifications." | 528 | This follows the rule [28] in the XML specifications." |
| 445 | (forward-char (length "<!DOCTYPE")) | 529 | (let ((xml-validating-parser nil)) |
| 446 | (if (looking-at "\\s-*>") | 530 | (xml-parse-dtd))) |
| 447 | (error "XML: invalid DTD (excepting name of the document)")) | ||
| 448 | (condition-case nil | ||
| 449 | (progn | ||
| 450 | (forward-sexp) | ||
| 451 | (skip-syntax-forward " ") | ||
| 452 | (if (looking-at "\\[") | ||
| 453 | (re-search-forward "]\\s-*>") | ||
| 454 | (search-forward ">"))) | ||
| 455 | (error (error "XML: No end to the DTD")))) | ||
| 456 | 531 | ||
| 457 | (defun xml-parse-dtd () | 532 | (defun xml-parse-dtd (&optional parse-ns) |
| 458 | "Parse the DTD at point." | 533 | "Parse the DTD at point." |
| 459 | (forward-char (eval-when-compile (length "<!DOCTYPE"))) | 534 | (forward-char (eval-when-compile (length "<!DOCTYPE"))) |
| 460 | (skip-syntax-forward " ") | 535 | (skip-syntax-forward " ") |
| 461 | (if (looking-at ">") | 536 | (if (and (looking-at ">") |
| 462 | (error "XML: invalid DTD (excepting name of the document)")) | 537 | xml-validating-parser) |
| 538 | (error "XML: (Validity) Invalid DTD (expecting name of the document)")) | ||
| 463 | 539 | ||
| 464 | ;; Get the name of the document | 540 | ;; Get the name of the document |
| 465 | (looking-at xml-name-regexp) | 541 | (looking-at xml-name-regexp) |
| @@ -477,27 +553,27 @@ This follows the rule [28] in the XML specifications." | |||
| 477 | (re-search-forward | 553 | (re-search-forward |
| 478 | "\\='\\([[:space:][:alnum:]-()+,./:=?;!*#@$_%]*\\)'" | 554 | "\\='\\([[:space:][:alnum:]-()+,./:=?;!*#@$_%]*\\)'" |
| 479 | nil t)) | 555 | nil t)) |
| 480 | (error "XML: missing public id")) | 556 | (error "XML: Missing Public ID")) |
| 481 | (let ((pubid (match-string 1))) | 557 | (let ((pubid (match-string 1))) |
| 558 | (skip-syntax-forward " ") | ||
| 482 | (unless (or (re-search-forward "\\='\\([^']*\\)'" nil t) | 559 | (unless (or (re-search-forward "\\='\\([^']*\\)'" nil t) |
| 483 | (re-search-forward "\\=\"\\([^\"]*\\)\"" nil t)) | 560 | (re-search-forward "\\=\"\\([^\"]*\\)\"" nil t)) |
| 484 | (error "XML: missing system id")) | 561 | (error "XML: Missing System ID")) |
| 485 | (push (list pubid (match-string 1) 'public) dtd))) | 562 | (push (list pubid (match-string 1) 'public) dtd))) |
| 486 | ((looking-at "SYSTEM\\s-+") | 563 | ((looking-at "SYSTEM\\s-+") |
| 487 | (goto-char (match-end 0)) | 564 | (goto-char (match-end 0)) |
| 488 | (unless (or (re-search-forward "\\='\\([^']*\\)'" nil t) | 565 | (unless (or (re-search-forward "\\='\\([^']*\\)'" nil t) |
| 489 | (re-search-forward "\\=\"\\([^\"]*\\)\"" nil t)) | 566 | (re-search-forward "\\=\"\\([^\"]*\\)\"" nil t)) |
| 490 | (error "XML: missing system id")) | 567 | (error "XML: Missing System ID")) |
| 491 | (push (list (match-string 1) 'system) dtd))) | 568 | (push (list (match-string 1) 'system) dtd))) |
| 492 | (skip-syntax-forward " ") | 569 | (skip-syntax-forward " ") |
| 493 | (if (eq ?> (char-after)) | 570 | (if (eq ?> (char-after)) |
| 494 | (forward-char) | 571 | (forward-char) |
| 495 | (skip-syntax-forward " ") | ||
| 496 | (if (not (eq (char-after) ?\[)) | 572 | (if (not (eq (char-after) ?\[)) |
| 497 | (error "XML: bad DTD") | 573 | (error "XML: Bad DTD") |
| 498 | (forward-char) | 574 | (forward-char) |
| 499 | ;; Parse the rest of the DTD | 575 | ;; Parse the rest of the DTD |
| 500 | ;; Fixme: Deal with ENTITY, ATTLIST, NOTATION, PIs. | 576 | ;; Fixme: Deal with ATTLIST, NOTATION, PIs. |
| 501 | (while (not (looking-at "\\s-*\\]")) | 577 | (while (not (looking-at "\\s-*\\]")) |
| 502 | (skip-syntax-forward " ") | 578 | (skip-syntax-forward " ") |
| 503 | (cond | 579 | (cond |
| @@ -521,11 +597,13 @@ This follows the rule [28] in the XML specifications." | |||
| 521 | ((string-match "^%[^;]+;[ \t\n\r]*$" type) ;; substitution | 597 | ((string-match "^%[^;]+;[ \t\n\r]*$" type) ;; substitution |
| 522 | nil) | 598 | nil) |
| 523 | (t | 599 | (t |
| 524 | (error "XML: Invalid element type in the DTD"))) | 600 | (if xml-validating-parser |
| 601 | error "XML: (Validity) Invalid element type in the DTD"))) | ||
| 525 | 602 | ||
| 526 | ;; rule [45]: the element declaration must be unique | 603 | ;; rule [45]: the element declaration must be unique |
| 527 | (if (assoc element dtd) | 604 | (if (and (assoc element dtd) |
| 528 | (error "XML: element declarations must be unique in a DTD (<%s>)" | 605 | xml-validating-parser) |
| 606 | (error "XML: (Validity) Element declarations must be unique in a DTD (<%s>)" | ||
| 529 | element)) | 607 | element)) |
| 530 | 608 | ||
| 531 | ;; Store the element in the DTD | 609 | ;; Store the element in the DTD |
| @@ -533,12 +611,49 @@ This follows the rule [28] in the XML specifications." | |||
| 533 | (goto-char end-pos)) | 611 | (goto-char end-pos)) |
| 534 | ((looking-at "<!--") | 612 | ((looking-at "<!--") |
| 535 | (search-forward "-->")) | 613 | (search-forward "-->")) |
| 536 | 614 | ((looking-at (concat "<!ENTITY[ \t\n\r]*\\(" xml-name-re | |
| 615 | "\\)[ \t\n\r]*\\(" xml-entity-value-re | ||
| 616 | "\\)[ \t\n\r]*>")) | ||
| 617 | (let ((name (buffer-substring (nth 2 (match-data)) | ||
| 618 | (nth 3 (match-data)))) | ||
| 619 | (value (buffer-substring (+ (nth 4 (match-data)) 1) | ||
| 620 | (- (nth 5 (match-data)) 1)))) | ||
| 621 | (goto-char (nth 1 (match-data))) | ||
| 622 | (setq xml-entity-alist | ||
| 623 | (append xml-entity-alist | ||
| 624 | (list (cons name | ||
| 625 | (with-temp-buffer | ||
| 626 | (insert value) | ||
| 627 | (goto-char (point-min)) | ||
| 628 | (xml-parse-fragment | ||
| 629 | xml-validating-parser | ||
| 630 | parse-ns)))))))) | ||
| 631 | ((or (looking-at (concat "<!ENTITY[ \t\n\r]+\\(" xml-name-re | ||
| 632 | "\\)[ \t\n\r]+SYSTEM[ \t\n\r]+" | ||
| 633 | "\\(\"[^\"]*\"\\|'[^']*'\\)[ \t\n\r]*>")) | ||
| 634 | (looking-at (concat "<!ENTITY[ \t\n\r]+\\(" xml-name-re | ||
| 635 | "\\)[ \t\n\r]+PUBLIC[ \t\n\r]+" | ||
| 636 | "\"[- \r\na-zA-Z0-9'()+,./:=?;!*#@$_%]*\"" | ||
| 637 | "\\|'[- \r\na-zA-Z0-9()+,./:=?;!*#@$_%]*'" | ||
| 638 | "[ \t\n\r]+\\(\"[^\"]*\"\\|'[^']*'\\)" | ||
| 639 | "[ \t\n\r]*>"))) | ||
| 640 | (let ((name (buffer-substring (nth 2 (match-data)) | ||
| 641 | (nth 3 (match-data)))) | ||
| 642 | (file (buffer-substring (+ (nth 4 (match-data)) 1) | ||
| 643 | (- (nth 5 (match-data)) 1)))) | ||
| 644 | (goto-char (nth 1 (match-data))) | ||
| 645 | (setq xml-entity-alist | ||
| 646 | (append xml-entity-alist | ||
| 647 | (list (cons name (with-temp-buffer | ||
| 648 | (insert-file-contents file) | ||
| 649 | (goto-char (point-min)) | ||
| 650 | (xml-parse-fragment | ||
| 651 | xml-validating-parser | ||
| 652 | parse-ns)))))))) | ||
| 537 | (t | 653 | (t |
| 538 | (error "XML: Invalid DTD item"))) | 654 | (error "XML: (Validity) Invalid DTD item"))))) |
| 539 | 655 | (if (looking-at "\\s-*]>") | |
| 540 | ;; Skip the end of the DTD | 656 | (goto-char (nth 1 (match-data))))) |
| 541 | (search-forward ">")))) | ||
| 542 | (nreverse dtd))) | 657 | (nreverse dtd))) |
| 543 | 658 | ||
| 544 | (defun xml-parse-elem-type (string) | 659 | (defun xml-parse-elem-type (string) |
| @@ -580,41 +695,72 @@ This follows the rule [28] in the XML specifications." | |||
| 580 | ;;** | 695 | ;;** |
| 581 | ;;******************************************************************* | 696 | ;;******************************************************************* |
| 582 | 697 | ||
| 583 | (eval-when-compile | ||
| 584 | (defvar str)) ; dynamic from replace-regexp-in-string | ||
| 585 | |||
| 586 | ;; Fixme: Take declared entities from the DTD when they're available. | ||
| 587 | (defun xml-substitute-entity (match) | ||
| 588 | "Subroutine of `xml-substitute-special'." | ||
| 589 | (save-match-data | ||
| 590 | (let ((match1 (match-string 1 str))) | ||
| 591 | (cond ((string= match1 "lt") "<") | ||
| 592 | ((string= match1 "gt") ">") | ||
| 593 | ((string= match1 "apos") "'") | ||
| 594 | ((string= match1 "quot") "\"") | ||
| 595 | ((string= match1 "amp") "&") | ||
| 596 | ((and (string-match "#\\([0-9]+\\)" match1) | ||
| 597 | (let ((c (decode-char | ||
| 598 | 'ucs | ||
| 599 | (string-to-number (match-string 1 match1))))) | ||
| 600 | (if c (string c))))) ; else unrepresentable | ||
| 601 | ((and (string-match "#x\\([[:xdigit:]]+\\)" match1) | ||
| 602 | (let ((c (decode-char | ||
| 603 | 'ucs | ||
| 604 | (string-to-number (match-string 1 match1) 16)))) | ||
| 605 | (if c (string c))))) | ||
| 606 | ;; Default to asis. Arguably, unrepresentable code points | ||
| 607 | ;; might be best replaced with U+FFFD. | ||
| 608 | (t match))))) | ||
| 609 | |||
| 610 | (defun xml-substitute-special (string) | 698 | (defun xml-substitute-special (string) |
| 611 | "Return STRING, after subsituting entity references." | 699 | "Return STRING, after subsituting entity references." |
| 612 | ;; This originally made repeated passes through the string from the | 700 | ;; This originally made repeated passes through the string from the |
| 613 | ;; beginning, which isn't correct, since then either "&amp;" or | 701 | ;; beginning, which isn't correct, since then either "&amp;" or |
| 614 | ;; "&amp;" won't DTRT. | 702 | ;; "&amp;" won't DTRT. |
| 615 | (replace-regexp-in-string "&\\([^;]+\\);" | ||
| 616 | #'xml-substitute-entity string t t)) | ||
| 617 | 703 | ||
| 704 | (let ((point 0) | ||
| 705 | children end-point) | ||
| 706 | (while (string-match "&\\([^;]+\\);" string point) | ||
| 707 | (setq end-point (match-end 0)) | ||
| 708 | (let* ((this-part (match-string 1 string)) | ||
| 709 | (prev-part (substring string point (match-beginning 0))) | ||
| 710 | (entity (assoc this-part xml-entity-alist)) | ||
| 711 | (expansion | ||
| 712 | (cond ((string-match "#\\([0-9]+\\)" this-part) | ||
| 713 | (let ((c (decode-char | ||
| 714 | 'ucs | ||
| 715 | (string-to-number (match-string 1 this-part))))) | ||
| 716 | (if c (string c)))) | ||
| 717 | ((string-match "#x\\([[:xdigit:]]+\\)" this-part) | ||
| 718 | (let ((c (decode-char | ||
| 719 | 'ucs | ||
| 720 | (string-to-number (match-string 1 this-part) 16)))) | ||
| 721 | (if c (string c)))) | ||
| 722 | (entity | ||
| 723 | (cdr entity)) | ||
| 724 | (t | ||
| 725 | (if xml-validating-parser | ||
| 726 | (error "XML: (Validity) Undefined entity `%s'" | ||
| 727 | (match-string 1 this-part))))))) | ||
| 728 | |||
| 729 | (cond ((null children) | ||
| 730 | (if (stringp expansion) | ||
| 731 | (setq children (concat prev-part expansion)) | ||
| 732 | (if (stringp (car (last expansion))) | ||
| 733 | (progn | ||
| 734 | (setq children | ||
| 735 | (list (concat prev-part (car expansion)) | ||
| 736 | (cdr expansion)))) | ||
| 737 | (setq children (append expansion prev-part))))) | ||
| 738 | ((stringp children) | ||
| 739 | (if (stringp expansion) | ||
| 740 | (setq children (concat children prev-part expansion)) | ||
| 741 | (setq children (list expansion (concat prev-part children))))) | ||
| 742 | ((and (stringp expansion) | ||
| 743 | (stringp (car children))) | ||
| 744 | (setcar children (concat prev-part expansion (car children)))) | ||
| 745 | ((stringp expansion) | ||
| 746 | (setq children (append (concat prev-part expansion) | ||
| 747 | children))) | ||
| 748 | ((stringp (car children)) | ||
| 749 | (setcar children (concat (car children) prev-part)) | ||
| 750 | (setq children (append expansion children))) | ||
| 751 | (t | ||
| 752 | (setq children (list expansion | ||
| 753 | prev-part | ||
| 754 | children)))) | ||
| 755 | (setq point end-point))) | ||
| 756 | (cond ((stringp children) | ||
| 757 | (concat children (substring string point))) | ||
| 758 | ((stringp (car (last children))) | ||
| 759 | (concat (car children) (substring string point))) | ||
| 760 | ((null children) | ||
| 761 | string) | ||
| 762 | (t | ||
| 763 | (nreverse children))))) | ||
| 618 | ;;******************************************************************* | 764 | ;;******************************************************************* |
| 619 | ;;** | 765 | ;;** |
| 620 | ;;** Printing a tree. | 766 | ;;** Printing a tree. |
diff --git a/lispref/ChangeLog b/lispref/ChangeLog index a27d59b72fa..cdf120e7a41 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog | |||
| @@ -1,3 +1,24 @@ | |||
| 1 | 2004-07-09 Richard M. Stallman <rms@gnu.org> | ||
| 2 | |||
| 3 | * frames.texi (Input Focus): Minor fix. | ||
| 4 | |||
| 5 | 2004-07-07 Luc Teirlinck <teirllm@auburn.edu> | ||
| 6 | |||
| 7 | * frames.texi (Input Focus): Clarify descriptions of | ||
| 8 | `select-frame-set-input-focus' and `select-frame'. | ||
| 9 | |||
| 10 | 2004-07-06 Luc Teirlinck <teirllm@auburn.edu> | ||
| 11 | |||
| 12 | * os.texi: Various small changes in addition to: | ||
| 13 | (Killing Emacs): Expand and clarify description of | ||
| 14 | `kill-emacs-query-functions' and `kill-emacs-hook'. | ||
| 15 | (System Environment): Expand and clarify description of `getenv' | ||
| 16 | and `setenv'. | ||
| 17 | (Timers): Clarify description of `run-at-time'. | ||
| 18 | (Translating Input): Correct description of | ||
| 19 | `extra-keyboard-modifiers'. | ||
| 20 | (Flow Control): Correct description of `enable-flow-control'. | ||
| 21 | |||
| 1 | 2004-07-06 Thien-Thi Nguyen <ttn@gnu.org> | 22 | 2004-07-06 Thien-Thi Nguyen <ttn@gnu.org> |
| 2 | 23 | ||
| 3 | * os.texi: Update copyright. | 24 | * os.texi: Update copyright. |
diff --git a/lispref/frames.texi b/lispref/frames.texi index 24540f471f8..61522e3598c 100644 --- a/lispref/frames.texi +++ b/lispref/frames.texi | |||
| @@ -997,7 +997,7 @@ Some window systems and window managers direct keyboard input to the | |||
| 997 | window object that the mouse is in; others require explicit clicks or | 997 | window object that the mouse is in; others require explicit clicks or |
| 998 | commands to @dfn{shift the focus} to various window objects. Either | 998 | commands to @dfn{shift the focus} to various window objects. Either |
| 999 | way, Emacs automatically keeps track of which frame has the focus. To | 999 | way, Emacs automatically keeps track of which frame has the focus. To |
| 1000 | switch to a different frame from a lisp function, call | 1000 | switch to a different frame from a Lisp function, call |
| 1001 | @code{select-frame-set-input-focus}. | 1001 | @code{select-frame-set-input-focus}. |
| 1002 | 1002 | ||
| 1003 | Lisp programs can also switch frames ``temporarily'' by calling the | 1003 | Lisp programs can also switch frames ``temporarily'' by calling the |
| @@ -1006,17 +1006,19 @@ concept of focus; rather, it escapes from the window manager's control | |||
| 1006 | until that control is somehow reasserted. | 1006 | until that control is somehow reasserted. |
| 1007 | 1007 | ||
| 1008 | When using a text-only terminal, only one frame can be displayed at a | 1008 | When using a text-only terminal, only one frame can be displayed at a |
| 1009 | time on the terminal, so @code{select-frame} actually displays the | 1009 | time on the terminal, so after a call to @code{select-frame}, the next |
| 1010 | newly selected frame. This frame remains displayed until a subsequent | 1010 | redisplay actually displays the newly selected frame. This frame |
| 1011 | call to @code{select-frame} or @code{select-frame-set-input-focus}. | 1011 | remains selected until a subsequent call to @code{select-frame} or |
| 1012 | Each terminal frame has a number which appears in the mode line before | 1012 | @code{select-frame-set-input-focus}. Each terminal frame has a number |
| 1013 | the buffer name (@pxref{Mode Line Variables}). | 1013 | which appears in the mode line before the buffer name (@pxref{Mode |
| 1014 | Line Variables}). | ||
| 1014 | 1015 | ||
| 1015 | @defun select-frame-set-input-focus frame | 1016 | @defun select-frame-set-input-focus frame |
| 1016 | This function makes @var{frame} the selected frame, raises it (should | 1017 | This function makes @var{frame} the selected frame, raises it (should |
| 1017 | it happen to be obscured by other frames) and tries to give it the X | 1018 | it happen to be obscured by other frames) and tries to give it the X |
| 1018 | server's focus. On a text-only terminal, the new frame gets displayed | 1019 | server's focus. On a text-only terminal, the next redisplay displays |
| 1019 | on the entire terminal screen. | 1020 | the new frame on the entire terminal screen. The return value of this |
| 1021 | function is not significant. | ||
| 1020 | @end defun | 1022 | @end defun |
| 1021 | 1023 | ||
| 1022 | @c ??? This is not yet implemented properly. | 1024 | @c ??? This is not yet implemented properly. |
| @@ -1026,7 +1028,8 @@ focus of the X server if any. The selection of @var{frame} lasts until | |||
| 1026 | the next time the user does something to select a different frame, or | 1028 | the next time the user does something to select a different frame, or |
| 1027 | until the next time this function is called. The specified @var{frame} | 1029 | until the next time this function is called. The specified @var{frame} |
| 1028 | becomes the selected frame, as explained above, and the terminal that | 1030 | becomes the selected frame, as explained above, and the terminal that |
| 1029 | @var{frame} is on becomes the selected terminal. | 1031 | @var{frame} is on becomes the selected terminal. This function |
| 1032 | returns @var{frame}, or @code{nil} if @var{frame} has been deleted. | ||
| 1030 | 1033 | ||
| 1031 | In general, you should never use @code{select-frame} in a way that could | 1034 | In general, you should never use @code{select-frame} in a way that could |
| 1032 | switch to a different terminal without switching back when you're done. | 1035 | switch to a different terminal without switching back when you're done. |
diff --git a/lispref/os.texi b/lispref/os.texi index d52464e7409..3e1b93339ad 100644 --- a/lispref/os.texi +++ b/lispref/os.texi | |||
| @@ -237,7 +237,7 @@ This normal hook is run, once, just before loading all the init files | |||
| 237 | This normal hook is run, once, just after loading all the init files | 237 | This normal hook is run, once, just after loading all the init files |
| 238 | (the user's init file, @file{default.el}, and/or @file{site-start.el}), | 238 | (the user's init file, @file{default.el}, and/or @file{site-start.el}), |
| 239 | before loading the terminal-specific library and processing the | 239 | before loading the terminal-specific library and processing the |
| 240 | command-line arguments. | 240 | command-line action arguments. |
| 241 | @end defvar | 241 | @end defvar |
| 242 | 242 | ||
| 243 | @defvar emacs-startup-hook | 243 | @defvar emacs-startup-hook |
| @@ -248,7 +248,7 @@ arguments, just before @code{term-setup-hook}. | |||
| 248 | 248 | ||
| 249 | @defvar user-init-file | 249 | @defvar user-init-file |
| 250 | @tindex user-init-file | 250 | @tindex user-init-file |
| 251 | This variable holds the file name of the user's init file. If the | 251 | This variable holds the absolute file name of the user's init file. If the |
| 252 | actual init file loaded is a compiled file, such as @file{.emacs.elc}, | 252 | actual init file loaded is a compiled file, such as @file{.emacs.elc}, |
| 253 | the value refers to the corresponding source file. | 253 | the value refers to the corresponding source file. |
| 254 | @end defvar | 254 | @end defvar |
| @@ -471,20 +471,31 @@ been saved, is lost when the Emacs process is killed. Because killing | |||
| 471 | Emacs inadvertently can lose a lot of work, Emacs queries for | 471 | Emacs inadvertently can lose a lot of work, Emacs queries for |
| 472 | confirmation before actually terminating if you have buffers that need | 472 | confirmation before actually terminating if you have buffers that need |
| 473 | saving or subprocesses that are running. This is done in the function | 473 | saving or subprocesses that are running. This is done in the function |
| 474 | @code{save-buffers-kill-emacs}. | 474 | @code{save-buffers-kill-emacs}, the higher level function from which |
| 475 | @code{kill-emacs} is usually called. | ||
| 475 | 476 | ||
| 476 | @defvar kill-emacs-query-functions | 477 | @defvar kill-emacs-query-functions |
| 477 | After asking the standard questions, @code{save-buffers-kill-emacs} | 478 | After asking the standard questions, @code{save-buffers-kill-emacs} |
| 478 | calls the functions in the list @code{kill-emacs-query-functions}, in | 479 | calls the functions in the list @code{kill-emacs-query-functions}, in |
| 479 | order of appearance, with no arguments. These functions can ask for | 480 | order of appearance, with no arguments. These functions can ask for |
| 480 | additional confirmation from the user. If any of them returns | 481 | additional confirmation from the user. If any of them returns |
| 481 | @code{nil}, Emacs is not killed. | 482 | @code{nil}, @code{save-buffers-kill-emacs} does not kill Emacs, and |
| 483 | does not run the remaining functions in this hook. Calling | ||
| 484 | @code{kill-emacs} directly does not run this hook. | ||
| 482 | @end defvar | 485 | @end defvar |
| 483 | 486 | ||
| 484 | @defvar kill-emacs-hook | 487 | @defvar kill-emacs-hook |
| 485 | This variable is a normal hook; once @code{save-buffers-kill-emacs} is | 488 | This variable is a normal hook; once @code{save-buffers-kill-emacs} is |
| 486 | finished with all file saving and confirmation, it runs the functions in | 489 | finished with all file saving and confirmation, it calls |
| 487 | this hook. This hook is not run in batch mode. | 490 | @code{kill-emacs} which runs the functions in this hook. |
| 491 | @code{kill-emacs} does not run this hook in batch mode. | ||
| 492 | |||
| 493 | @code{kill-emacs} may be invoked directly (that is not via | ||
| 494 | @code{save-buffers-kill-emacs}) if the terminal is disconnected, or in | ||
| 495 | similar situations where interaction with the user is not possible. | ||
| 496 | Thus, if your hook needs to interact with the user, put it on | ||
| 497 | @code{kill-emacs-query-functions}; if it needs to run regardless of | ||
| 498 | how Emacs is killed, put it on @code{kill-emacs-hook}. | ||
| 488 | @end defvar | 499 | @end defvar |
| 489 | 500 | ||
| 490 | @node Suspending Emacs | 501 | @node Suspending Emacs |
| @@ -508,7 +519,7 @@ give input to some other job such as a shell merely by moving to a | |||
| 508 | different window. Therefore, suspending is not allowed when Emacs is using | 519 | different window. Therefore, suspending is not allowed when Emacs is using |
| 509 | a window system (X or MS Windows). | 520 | a window system (X or MS Windows). |
| 510 | 521 | ||
| 511 | @defun suspend-emacs string | 522 | @defun suspend-emacs &optional string |
| 512 | This function stops Emacs and returns control to the superior process. | 523 | This function stops Emacs and returns control to the superior process. |
| 513 | If and when the superior process resumes Emacs, @code{suspend-emacs} | 524 | If and when the superior process resumes Emacs, @code{suspend-emacs} |
| 514 | returns @code{nil} to its caller in Lisp. | 525 | returns @code{nil} to its caller in Lisp. |
| @@ -542,10 +553,10 @@ Emacs is suspended. But it is read and executed by the shell. | |||
| 542 | (function (lambda () | 553 | (function (lambda () |
| 543 | (or (y-or-n-p | 554 | (or (y-or-n-p |
| 544 | "Really suspend? ") | 555 | "Really suspend? ") |
| 545 | (error "Suspend cancelled"))))) | 556 | (error "Suspend canceled"))))) |
| 546 | @result{} (lambda nil | 557 | @result{} (lambda nil |
| 547 | (or (y-or-n-p "Really suspend? ") | 558 | (or (y-or-n-p "Really suspend? ") |
| 548 | (error "Suspend cancelled"))) | 559 | (error "Suspend canceled"))) |
| 549 | @end group | 560 | @end group |
| 550 | @group | 561 | @group |
| 551 | (add-hook 'suspend-resume-hook | 562 | (add-hook 'suspend-resume-hook |
| @@ -694,8 +705,10 @@ Emacs was dumped. @xref{Building Emacs}.) | |||
| 694 | @deffn Command getenv var | 705 | @deffn Command getenv var |
| 695 | @cindex environment variable access | 706 | @cindex environment variable access |
| 696 | This function returns the value of the environment variable @var{var}, | 707 | This function returns the value of the environment variable @var{var}, |
| 697 | as a string. Within Emacs, the environment variable values are kept in | 708 | as a string. @var{var} should be a string. If @var{var} is undefined |
| 698 | the Lisp variable @code{process-environment}. | 709 | in the environment, @code{getenv} returns @code{nil}. If returns |
| 710 | @samp{""} if @var{var} is set but null. Within Emacs, the environment | ||
| 711 | variable values are kept in the Lisp variable @code{process-environment}. | ||
| 699 | 712 | ||
| 700 | @example | 713 | @example |
| 701 | @group | 714 | @group |
| @@ -717,11 +730,22 @@ HOME=/user/lewis | |||
| 717 | @end deffn | 730 | @end deffn |
| 718 | 731 | ||
| 719 | @c Emacs 19 feature | 732 | @c Emacs 19 feature |
| 720 | @deffn Command setenv variable value | 733 | @deffn Command setenv variable &optional value |
| 721 | This command sets the value of the environment variable named | 734 | This command sets the value of the environment variable named |
| 722 | @var{variable} to @var{value}. Both arguments should be strings. This | 735 | @var{variable} to @var{value}. @var{variable} should be a string. |
| 723 | function works by modifying @code{process-environment}; binding that | 736 | Internally, Emacs Lisp can handle any string. However, normally |
| 724 | variable with @code{let} is also reasonable practice. | 737 | @var{variable} should be a valid shell identifier, that is, a sequence |
| 738 | of letters, digits and underscores, starting with a letter or | ||
| 739 | underscore. Otherwise, errors may occur if subprocesses of Emacs try | ||
| 740 | to access the value of @var{variable}. If @var{value} is omitted or | ||
| 741 | @code{nil}, @code{setenv} removes @var{variable} from the environment. | ||
| 742 | Otherwise, @var{value} should be a string. | ||
| 743 | |||
| 744 | @code{setenv} works by modifying @code{process-environment}; binding | ||
| 745 | that variable with @code{let} is also reasonable practice. | ||
| 746 | |||
| 747 | @code{setenv} returns the new value of @var{variable}, or @code{nil} | ||
| 748 | if it removed @var{variable} from the environment. | ||
| 725 | @end deffn | 749 | @end deffn |
| 726 | 750 | ||
| 727 | @defvar process-environment | 751 | @defvar process-environment |
| @@ -801,6 +825,10 @@ an error. On some platforms, access to load averages requires | |||
| 801 | installing Emacs as setuid or setgid so that it can read kernel | 825 | installing Emacs as setuid or setgid so that it can read kernel |
| 802 | information, and that usually isn't advisable. | 826 | information, and that usually isn't advisable. |
| 803 | 827 | ||
| 828 | If the 1-minute load average is available, but the 5- or 15-minute | ||
| 829 | averages are not, this function returns a shortened list containing | ||
| 830 | the available averages. | ||
| 831 | |||
| 804 | @example | 832 | @example |
| 805 | @group | 833 | @group |
| 806 | (load-average) | 834 | (load-average) |
| @@ -820,12 +848,14 @@ lewis@@rocky[5] % uptime | |||
| 820 | @end defun | 848 | @end defun |
| 821 | 849 | ||
| 822 | @defun emacs-pid | 850 | @defun emacs-pid |
| 823 | This function returns the process @acronym{ID} of the Emacs process. | 851 | This function returns the process @acronym{ID} of the Emacs process, |
| 852 | as an integer. | ||
| 824 | @end defun | 853 | @end defun |
| 825 | 854 | ||
| 826 | @defvar tty-erase-char | 855 | @defvar tty-erase-char |
| 827 | This variable holds the erase character that was selected | 856 | This variable holds the erase character that was selected |
| 828 | in the system's terminal driver, before Emacs was started. | 857 | in the system's terminal driver, before Emacs was started. |
| 858 | The value is @code{nil} if Emacs is running under a window system. | ||
| 829 | @end defvar | 859 | @end defvar |
| 830 | 860 | ||
| 831 | @defun setprv privilege-name &optional setp getprv | 861 | @defun setprv privilege-name &optional setp getprv |
| @@ -836,7 +866,7 @@ whether the privilege is to be turned on or off. Its default is | |||
| 836 | @code{nil}. The function returns @code{t} if successful, @code{nil} | 866 | @code{nil}. The function returns @code{t} if successful, @code{nil} |
| 837 | otherwise. | 867 | otherwise. |
| 838 | 868 | ||
| 839 | If the third argument, @var{getprv}, is non-@code{nil}, @code{setprv} | 869 | If the third argument, @var{getprv}, is non-@code{nil}, @code{setprv} |
| 840 | does not change the privilege, but returns @code{t} or @code{nil} | 870 | does not change the privilege, but returns @code{t} or @code{nil} |
| 841 | indicating whether the privilege is currently enabled. | 871 | indicating whether the privilege is currently enabled. |
| 842 | @end defun | 872 | @end defun |
| @@ -845,8 +875,9 @@ indicating whether the privilege is currently enabled. | |||
| 845 | @section User Identification | 875 | @section User Identification |
| 846 | 876 | ||
| 847 | @defvar init-file-user | 877 | @defvar init-file-user |
| 848 | This variable says which user's init files should be used by Emacs---or | 878 | This variable says which user's init files should be used by |
| 849 | @code{nil} if none. The value reflects command-line options such as | 879 | Emacs---or @code{nil} if none. @code{""} stands for the user who |
| 880 | originally logged in. The value reflects command-line options such as | ||
| 850 | @samp{-q} or @samp{-u @var{user}}. | 881 | @samp{-q} or @samp{-u @var{user}}. |
| 851 | 882 | ||
| 852 | Lisp packages that load files of customizations, or any other sort of | 883 | Lisp packages that load files of customizations, or any other sort of |
| @@ -873,7 +904,8 @@ is set, that value is used. Otherwise, if the environment variable | |||
| 873 | on the effective @acronym{UID}, not the real @acronym{UID}. | 904 | on the effective @acronym{UID}, not the real @acronym{UID}. |
| 874 | 905 | ||
| 875 | If you specify @var{uid}, the value is the user name that corresponds | 906 | If you specify @var{uid}, the value is the user name that corresponds |
| 876 | to @var{uid} (which should be an integer). | 907 | to @var{uid} (which should be an integer), or @code{nil} if there is |
| 908 | no such user. | ||
| 877 | 909 | ||
| 878 | @example | 910 | @example |
| 879 | @group | 911 | @group |
| @@ -904,7 +936,7 @@ of the environment variable @code{NAME}, if that is set. | |||
| 904 | If the Emacs job's user-id does not correspond to any known user (and | 936 | If the Emacs job's user-id does not correspond to any known user (and |
| 905 | provided @code{NAME} is not set), the value is @code{"unknown"}. | 937 | provided @code{NAME} is not set), the value is @code{"unknown"}. |
| 906 | 938 | ||
| 907 | If @var{uid} is non-@code{nil}, then it should be an integer (a user-id) | 939 | If @var{uid} is non-@code{nil}, then it should be a number (a user-id) |
| 908 | or a string (a login name). Then @code{user-full-name} returns the full | 940 | or a string (a login name). Then @code{user-full-name} returns the full |
| 909 | name corresponding to that user-id or login name. If you specify a | 941 | name corresponding to that user-id or login name. If you specify a |
| 910 | user-id or login name that isn't defined, it returns @code{nil}. | 942 | user-id or login name that isn't defined, it returns @code{nil}. |
| @@ -956,7 +988,8 @@ The argument @var{time-value}, if given, specifies a time to format | |||
| 956 | instead of the current time. The argument should be a list whose first | 988 | instead of the current time. The argument should be a list whose first |
| 957 | two elements are integers. Thus, you can use times obtained from | 989 | two elements are integers. Thus, you can use times obtained from |
| 958 | @code{current-time} (see below) and from @code{file-attributes} | 990 | @code{current-time} (see below) and from @code{file-attributes} |
| 959 | (@pxref{File Attributes}). | 991 | (@pxref{Definition of file-attributes}). @var{time-value} can also be |
| 992 | a cons of two integers, but this is considered obsolete. | ||
| 960 | 993 | ||
| 961 | @example | 994 | @example |
| 962 | @group | 995 | @group |
| @@ -971,7 +1004,7 @@ two elements are integers. Thus, you can use times obtained from | |||
| 971 | This function returns the system's time value as a list of three | 1004 | This function returns the system's time value as a list of three |
| 972 | integers: @code{(@var{high} @var{low} @var{microsec})}. The integers | 1005 | integers: @code{(@var{high} @var{low} @var{microsec})}. The integers |
| 973 | @var{high} and @var{low} combine to give the number of seconds since | 1006 | @var{high} and @var{low} combine to give the number of seconds since |
| 974 | 0:00 January 1, 1970 (local time), which is | 1007 | 0:00 January 1, 1970 UTC (Coordinated Universal Time), which is |
| 975 | @ifnottex | 1008 | @ifnottex |
| 976 | @var{high} * 2**16 + @var{low}. | 1009 | @var{high} * 2**16 + @var{low}. |
| 977 | @end ifnottex | 1010 | @end ifnottex |
| @@ -984,7 +1017,8 @@ start of the current second (or 0 for systems that return time with | |||
| 984 | the resolution of only one second). | 1017 | the resolution of only one second). |
| 985 | 1018 | ||
| 986 | The first two elements can be compared with file time values such as you | 1019 | The first two elements can be compared with file time values such as you |
| 987 | get with the function @code{file-attributes}. @xref{File Attributes}. | 1020 | get with the function @code{file-attributes}. |
| 1021 | @xref{Definition of file-attributes}. | ||
| 988 | @end defun | 1022 | @end defun |
| 989 | 1023 | ||
| 990 | @c Emacs 19 feature | 1024 | @c Emacs 19 feature |
| @@ -1001,20 +1035,21 @@ if the user has specified a time zone that does not use a seasonal time | |||
| 1001 | adjustment, then the value is constant through time. | 1035 | adjustment, then the value is constant through time. |
| 1002 | 1036 | ||
| 1003 | If the operating system doesn't supply all the information necessary to | 1037 | If the operating system doesn't supply all the information necessary to |
| 1004 | compute the value, both elements of the list are @code{nil}. | 1038 | compute the value, the unknown elements of the list are @code{nil}. |
| 1005 | 1039 | ||
| 1006 | The argument @var{time-value}, if given, specifies a time to analyze | 1040 | The argument @var{time-value}, if given, specifies a time to analyze |
| 1007 | instead of the current time. The argument should be a cons cell | 1041 | instead of the current time. The argument should have the same form |
| 1008 | containing two integers, or a list whose first two elements are | 1042 | as for @code{current-time-string} (see above). Thus, you can use |
| 1009 | integers. Thus, you can use times obtained from @code{current-time} | 1043 | times obtained from @code{current-time} (see above) and from |
| 1010 | (see above) and from @code{file-attributes} (@pxref{File Attributes}). | 1044 | @code{file-attributes}. @xref{Definition of file-attributes}. |
| 1011 | @end defun | 1045 | @end defun |
| 1012 | 1046 | ||
| 1013 | @defun set-time-zone-rule tz | 1047 | @defun set-time-zone-rule tz |
| 1014 | This function specifies the local time zone according to @var{tz}. If | 1048 | This function specifies the local time zone according to @var{tz}. If |
| 1015 | @var{tz} is @code{nil}, that means to use an implementation-defined | 1049 | @var{tz} is @code{nil}, that means to use an implementation-defined |
| 1016 | default time zone. If @var{tz} is @code{t}, that means to use | 1050 | default time zone. If @var{tz} is @code{t}, that means to use |
| 1017 | Universal Time. | 1051 | Universal Time. Otherwise, @var{tz} should be a string specifying a |
| 1052 | time zone rule. | ||
| 1018 | @end defun | 1053 | @end defun |
| 1019 | 1054 | ||
| 1020 | @defun float-time &optional time-value | 1055 | @defun float-time &optional time-value |
| @@ -1022,7 +1057,7 @@ This function returns the current time as a floating-point number of | |||
| 1022 | seconds since the epoch. The argument @var{time-value}, if given, | 1057 | seconds since the epoch. The argument @var{time-value}, if given, |
| 1023 | specifies a time to convert instead of the current time. The argument | 1058 | specifies a time to convert instead of the current time. The argument |
| 1024 | should have the same form as for @code{current-time-string} (see | 1059 | should have the same form as for @code{current-time-string} (see |
| 1025 | above), and it also accepts the output of @code{current-time} and | 1060 | above). Thus, it accepts the output of @code{current-time} and |
| 1026 | @code{file-attributes}. | 1061 | @code{file-attributes}. |
| 1027 | 1062 | ||
| 1028 | @emph{Warning}: Since the result is floating point, it may not be | 1063 | @emph{Warning}: Since the result is floating point, it may not be |
| @@ -1036,7 +1071,7 @@ exact. Do not use this function if precise time stamps are required. | |||
| 1036 | to strings or to calendrical information. There is also a function to | 1071 | to strings or to calendrical information. There is also a function to |
| 1037 | convert calendrical information to a time value. You can get time | 1072 | convert calendrical information to a time value. You can get time |
| 1038 | values from the functions @code{current-time} (@pxref{Time of Day}) and | 1073 | values from the functions @code{current-time} (@pxref{Time of Day}) and |
| 1039 | @code{file-attributes} (@pxref{File Attributes}). | 1074 | @code{file-attributes} (@pxref{Definition of file-attributes}). |
| 1040 | 1075 | ||
| 1041 | Many operating systems are limited to time values that contain 32 bits | 1076 | Many operating systems are limited to time values that contain 32 bits |
| 1042 | of information; these systems typically handle only the times from | 1077 | of information; these systems typically handle only the times from |
| @@ -1189,6 +1224,7 @@ Here is what the elements mean: | |||
| 1189 | @table @var | 1224 | @table @var |
| 1190 | @item seconds | 1225 | @item seconds |
| 1191 | The number of seconds past the minute, as an integer between 0 and 59. | 1226 | The number of seconds past the minute, as an integer between 0 and 59. |
| 1227 | On some operating systems, this is 60 for leap seconds. | ||
| 1192 | @item minutes | 1228 | @item minutes |
| 1193 | The number of minutes past the hour, as an integer between 0 and 59. | 1229 | The number of minutes past the hour, as an integer between 0 and 59. |
| 1194 | @item hour | 1230 | @item hour |
| @@ -1225,9 +1261,9 @@ yourself before you call @code{encode-time}. | |||
| 1225 | The optional argument @var{zone} defaults to the current time zone and | 1261 | The optional argument @var{zone} defaults to the current time zone and |
| 1226 | its daylight savings time rules. If specified, it can be either a list | 1262 | its daylight savings time rules. If specified, it can be either a list |
| 1227 | (as you would get from @code{current-time-zone}), a string as in the | 1263 | (as you would get from @code{current-time-zone}), a string as in the |
| 1228 | @code{TZ} environment variable, or an integer (as you would get from | 1264 | @code{TZ} environment variable, @code{t} for Universal Time, or an |
| 1229 | @code{decode-time}). The specified zone is used without any further | 1265 | integer (as you would get from @code{decode-time}). The specified |
| 1230 | alteration for daylight savings time. | 1266 | zone is used without any further alteration for daylight savings time. |
| 1231 | 1267 | ||
| 1232 | If you pass more than seven arguments to @code{encode-time}, the first | 1268 | If you pass more than seven arguments to @code{encode-time}, the first |
| 1233 | six are used as @var{seconds} through @var{year}, the last argument is | 1269 | six are used as @var{seconds} through @var{year}, the last argument is |
| @@ -1309,15 +1345,18 @@ because most timer functions don't do a lot of work. Indeed, for a | |||
| 1309 | timer to call a function that takes substantial time to run is likely | 1345 | timer to call a function that takes substantial time to run is likely |
| 1310 | to be annoying. | 1346 | to be annoying. |
| 1311 | 1347 | ||
| 1312 | @defun run-at-time time repeat function &rest args | 1348 | @deffn Command run-at-time time repeat function &rest args |
| 1313 | This function arranges to call @var{function} with arguments @var{args} | 1349 | This sets up a timer that calls the function @var{function} with |
| 1314 | at time @var{time}. The argument @var{function} is a function to call | 1350 | arguments @var{args} at time @var{time}. If @var{repeat} is a number |
| 1315 | later, and @var{args} are the arguments to give it when it is called. | 1351 | (integer or floating point), the timer also runs every @var{repeat} |
| 1316 | The time @var{time} is specified as a string. | 1352 | seconds after that. If @var{repeat} is @code{nil}, the timer runs |
| 1353 | only once. | ||
| 1354 | |||
| 1355 | @var{time} may specify an absolute or a relative time. | ||
| 1317 | 1356 | ||
| 1318 | Absolute times may be specified in a wide variety of formats; this | 1357 | Absolute times may be specified in a wide variety of formats; this |
| 1319 | function tries to accept all the commonly used date formats. Valid | 1358 | function tries to accept all the commonly used date formats. The most |
| 1320 | formats include these two, | 1359 | convenient formats are strings. Valid such formats include these two, |
| 1321 | 1360 | ||
| 1322 | @example | 1361 | @example |
| 1323 | @var{year}-@var{month}-@var{day} @var{hour}:@var{min}:@var{sec} @var{timezone} | 1362 | @var{year}-@var{month}-@var{day} @var{hour}:@var{min}:@var{sec} @var{timezone} |
| @@ -1330,7 +1369,7 @@ where in both examples all fields are numbers; the format that | |||
| 1330 | @code{current-time-string} returns is also allowed, and many others | 1369 | @code{current-time-string} returns is also allowed, and many others |
| 1331 | as well. | 1370 | as well. |
| 1332 | 1371 | ||
| 1333 | To specify a relative time, use numbers followed by units. | 1372 | To specify a relative time as a string, use numbers followed by units. |
| 1334 | For example: | 1373 | For example: |
| 1335 | 1374 | ||
| 1336 | @table @samp | 1375 | @table @samp |
| @@ -1345,13 +1384,9 @@ denotes exactly 103 months, 123 days, and 10862 seconds from now. | |||
| 1345 | For relative time values, Emacs considers a month to be exactly thirty | 1384 | For relative time values, Emacs considers a month to be exactly thirty |
| 1346 | days, and a year to be exactly 365.25 days. | 1385 | days, and a year to be exactly 365.25 days. |
| 1347 | 1386 | ||
| 1348 | If @var{time} is a number (integer or floating point), that specifies a | 1387 | Not all convenient formats are strings. If @var{time} is a number |
| 1349 | relative time measured in seconds. | 1388 | (integer or floating point), that specifies a relative time measured |
| 1350 | 1389 | in seconds. | |
| 1351 | The argument @var{repeat} specifies how often to repeat the call. If | ||
| 1352 | @var{repeat} is @code{nil}, there are no repetitions; @var{function} is | ||
| 1353 | called just once, at @var{time}. If @var{repeat} is a number, it | ||
| 1354 | specifies a repetition period measured in seconds. | ||
| 1355 | 1390 | ||
| 1356 | In most cases, @var{repeat} has no effect on when @emph{first} call | 1391 | In most cases, @var{repeat} has no effect on when @emph{first} call |
| 1357 | takes place---@var{time} alone specifies that. There is one exception: | 1392 | takes place---@var{time} alone specifies that. There is one exception: |
| @@ -1362,7 +1397,7 @@ functions like @code{display-time}. | |||
| 1362 | The function @code{run-at-time} returns a timer value that identifies | 1397 | The function @code{run-at-time} returns a timer value that identifies |
| 1363 | the particular scheduled future action. You can use this value to call | 1398 | the particular scheduled future action. You can use this value to call |
| 1364 | @code{cancel-timer} (see below). | 1399 | @code{cancel-timer} (see below). |
| 1365 | @end defun | 1400 | @end deffn |
| 1366 | 1401 | ||
| 1367 | @defmac with-timeout (seconds timeout-forms@dots{}) body@dots{} | 1402 | @defmac with-timeout (seconds timeout-forms@dots{}) body@dots{} |
| 1368 | Execute @var{body}, but give up after @var{seconds} seconds. If | 1403 | Execute @var{body}, but give up after @var{seconds} seconds. If |
| @@ -1388,7 +1423,7 @@ calls one of those primitives. So use @code{with-timeout} only with a | |||
| 1388 | a timer to avoid waiting too long for an answer. @xref{Yes-or-No | 1423 | a timer to avoid waiting too long for an answer. @xref{Yes-or-No |
| 1389 | Queries}. | 1424 | Queries}. |
| 1390 | 1425 | ||
| 1391 | @defun run-with-idle-timer secs repeat function &rest args | 1426 | @deffn Command run-with-idle-timer secs repeat function &rest args |
| 1392 | Set up a timer which runs when Emacs has been idle for @var{secs} | 1427 | Set up a timer which runs when Emacs has been idle for @var{secs} |
| 1393 | seconds. The value of @var{secs} may be an integer or a floating point | 1428 | seconds. The value of @var{secs} may be an integer or a floating point |
| 1394 | number. | 1429 | number. |
| @@ -1400,7 +1435,7 @@ remains idle for @var{secs} seconds. | |||
| 1400 | 1435 | ||
| 1401 | The function @code{run-with-idle-timer} returns a timer value which you | 1436 | The function @code{run-with-idle-timer} returns a timer value which you |
| 1402 | can use in calling @code{cancel-timer} (see below). | 1437 | can use in calling @code{cancel-timer} (see below). |
| 1403 | @end defun | 1438 | @end deffn |
| 1404 | 1439 | ||
| 1405 | @cindex idleness | 1440 | @cindex idleness |
| 1406 | Emacs becomes ``idle'' when it starts waiting for user input, and it | 1441 | Emacs becomes ``idle'' when it starts waiting for user input, and it |
| @@ -1426,8 +1461,8 @@ set up to repeat will subsequently run another time, one by one. | |||
| 1426 | @defun cancel-timer timer | 1461 | @defun cancel-timer timer |
| 1427 | Cancel the requested action for @var{timer}, which should be a value | 1462 | Cancel the requested action for @var{timer}, which should be a value |
| 1428 | previously returned by @code{run-at-time} or @code{run-with-idle-timer}. | 1463 | previously returned by @code{run-at-time} or @code{run-with-idle-timer}. |
| 1429 | This cancels the effect of that call to @code{run-at-time}; the arrival | 1464 | This cancels the effect of that call to one of these functions; the |
| 1430 | of the specified time will not cause anything special to happen. | 1465 | arrival of the specified time will not cause anything special to happen. |
| 1431 | @end defun | 1466 | @end defun |
| 1432 | 1467 | ||
| 1433 | @node Terminal Input | 1468 | @node Terminal Input |
| @@ -1450,7 +1485,7 @@ functions. | |||
| 1450 | @cindex input modes | 1485 | @cindex input modes |
| 1451 | @cindex terminal input modes | 1486 | @cindex terminal input modes |
| 1452 | 1487 | ||
| 1453 | @defun set-input-mode interrupt flow meta quit-char | 1488 | @defun set-input-mode interrupt flow meta &optional quit-char |
| 1454 | This function sets the mode for reading keyboard input. If | 1489 | This function sets the mode for reading keyboard input. If |
| 1455 | @var{interrupt} is non-null, then Emacs uses input interrupts. If it is | 1490 | @var{interrupt} is non-null, then Emacs uses input interrupts. If it is |
| 1456 | @code{nil}, then it uses @sc{cbreak} mode. The default setting is | 1491 | @code{nil}, then it uses @sc{cbreak} mode. The default setting is |
| @@ -1523,31 +1558,30 @@ being read; then subsequences containing it are checked first with | |||
| 1523 | @c Emacs 19 feature | 1558 | @c Emacs 19 feature |
| 1524 | @defvar extra-keyboard-modifiers | 1559 | @defvar extra-keyboard-modifiers |
| 1525 | This variable lets Lisp programs ``press'' the modifier keys on the | 1560 | This variable lets Lisp programs ``press'' the modifier keys on the |
| 1526 | keyboard. The value is a bit mask: | 1561 | keyboard. The value is a character. Only the modifiers of the |
| 1527 | 1562 | character matter. Each time the user types a keyboard key, it is | |
| 1528 | @table @asis | 1563 | altered as if those modifier keys were held down. For instance, if |
| 1529 | @item 1 | 1564 | you bind @code{extra-keyboard-modifiers} to @code{?\C-\M-a}, then all |
| 1530 | The @key{SHIFT} key. | 1565 | keyboard input characters typed during the scope of the binding will |
| 1531 | @item 2 | 1566 | have the control and meta modifiers applied to them. The character |
| 1532 | The @key{LOCK} key. | 1567 | @code{?\C-@@}, equivalent to the integer 0, does not count as a control |
| 1533 | @item 4 | 1568 | character for this purpose, but as a character with no modifiers. |
| 1534 | The @key{CTL} key. | 1569 | Thus, setting @code{extra-keyboard-modifiers} to zero cancels any |
| 1535 | @item 8 | 1570 | modification. |
| 1536 | The @key{META} key. | ||
| 1537 | @end table | ||
| 1538 | |||
| 1539 | Each time the user types a keyboard key, it is altered as if the | ||
| 1540 | modifier keys specified in the bit mask were held down. | ||
| 1541 | 1571 | ||
| 1542 | When using a window system, the program can ``press'' any of the | 1572 | When using a window system, the program can ``press'' any of the |
| 1543 | modifier keys in this way. Otherwise, only the @key{CTL} and @key{META} | 1573 | modifier keys in this way. Otherwise, only the @key{CTL} and @key{META} |
| 1544 | keys can be virtually pressed. | 1574 | keys can be virtually pressed. |
| 1575 | |||
| 1576 | Note that this variable applies only to events that really come from | ||
| 1577 | the keyboard, and has no effect on mouse events or any other events. | ||
| 1545 | @end defvar | 1578 | @end defvar |
| 1546 | 1579 | ||
| 1547 | @defvar keyboard-translate-table | 1580 | @defvar keyboard-translate-table |
| 1548 | This variable is the translate table for keyboard characters. It lets | 1581 | This variable is the translate table for keyboard characters. It lets |
| 1549 | you reshuffle the keys on the keyboard without changing any command | 1582 | you reshuffle the keys on the keyboard without changing any command |
| 1550 | bindings. Its value is normally a char-table, or else @code{nil}. | 1583 | bindings. Its value is normally a char-table, or else @code{nil}. |
| 1584 | (It can also be a string or vector, but this is considered obsolete.) | ||
| 1551 | 1585 | ||
| 1552 | If @code{keyboard-translate-table} is a char-table | 1586 | If @code{keyboard-translate-table} is a char-table |
| 1553 | (@pxref{Char-Tables}), then each character read from the keyboard is | 1587 | (@pxref{Char-Tables}), then each character read from the keyboard is |
| @@ -1587,6 +1621,11 @@ Note that this translation is the first thing that happens to a | |||
| 1587 | character after it is read from the terminal. Record-keeping features | 1621 | character after it is read from the terminal. Record-keeping features |
| 1588 | such as @code{recent-keys} and dribble files record the characters after | 1622 | such as @code{recent-keys} and dribble files record the characters after |
| 1589 | translation. | 1623 | translation. |
| 1624 | |||
| 1625 | Note also that this translation is done before the characters are | ||
| 1626 | supplied to input methods (@pxref{Input Methods}). Use | ||
| 1627 | @code{translation-table-for-input} (@pxref{Translation of Characters}), | ||
| 1628 | if you want to translate characters after input methods operate. | ||
| 1590 | @end defvar | 1629 | @end defvar |
| 1591 | 1630 | ||
| 1592 | @defun keyboard-translate from to | 1631 | @defun keyboard-translate from to |
| @@ -1699,7 +1738,7 @@ to turn the character that follows into a Hyper character: | |||
| 1699 | 1738 | ||
| 1700 | Finally, if you have enabled keyboard character set decoding using | 1739 | Finally, if you have enabled keyboard character set decoding using |
| 1701 | @code{set-keyboard-coding-system}, decoding is done after the | 1740 | @code{set-keyboard-coding-system}, decoding is done after the |
| 1702 | translations listed above. @xref{Specifying Coding Systems}. In future | 1741 | translations listed above. @xref{Terminal I/O Encoding}. In future |
| 1703 | Emacs versions, character set decoding may be done before the other | 1742 | Emacs versions, character set decoding may be done before the other |
| 1704 | translations. | 1743 | translations. |
| 1705 | 1744 | ||
| @@ -1804,7 +1843,10 @@ often than to actual Emacs bugs. Once you are certain which characters | |||
| 1804 | were actually output, you can determine reliably whether they correspond | 1843 | were actually output, you can determine reliably whether they correspond |
| 1805 | to the Termcap specifications in use. | 1844 | to the Termcap specifications in use. |
| 1806 | 1845 | ||
| 1807 | See also @code{open-dribble-file} in @ref{Terminal Input}. | 1846 | You close the termscript file by calling this function with an |
| 1847 | argument of @code{nil}. | ||
| 1848 | |||
| 1849 | See also @code{open-dribble-file} in @ref{Recording Input}. | ||
| 1808 | 1850 | ||
| 1809 | @example | 1851 | @example |
| 1810 | @group | 1852 | @group |
| @@ -1969,10 +2011,16 @@ terminals, the flow control problem is gradually disappearing. For the | |||
| 1969 | mean time, Emacs provides a convenient way of enabling flow control if | 2011 | mean time, Emacs provides a convenient way of enabling flow control if |
| 1970 | you want it: call the function @code{enable-flow-control}. | 2012 | you want it: call the function @code{enable-flow-control}. |
| 1971 | 2013 | ||
| 1972 | @deffn Command enable-flow-control | 2014 | @deffn Command enable-flow-control &optional arg |
| 1973 | This function enables use of @kbd{C-s} and @kbd{C-q} for output flow | 2015 | When @var{arg} is a positive integer, this function enables use of |
| 1974 | control, and provides the characters @kbd{C-\} and @kbd{C-^} as aliases | 2016 | @kbd{C-s} and @kbd{C-q} for output flow control, and provides the |
| 1975 | for them using @code{keyboard-translate-table} (@pxref{Translating Input}). | 2017 | characters @kbd{C-\} and @kbd{C-^} as aliases for them using |
| 2018 | @code{keyboard-translate-table} (@pxref{Translating Input}). | ||
| 2019 | |||
| 2020 | When @var{arg} is a negative integer or zero, it disables these | ||
| 2021 | features. When @var{arg} is @code{nil} or omitted, it toggles. | ||
| 2022 | Interactively, @var{arg} is the prefix argument. If non-@code{nil}, | ||
| 2023 | its numeric value is used. | ||
| 1976 | @end deffn | 2024 | @end deffn |
| 1977 | 2025 | ||
| 1978 | You can use the function @code{enable-flow-control-on} in your | 2026 | You can use the function @code{enable-flow-control-on} in your |
| @@ -1994,7 +2042,7 @@ if the terminal type is one of @var{termtypes}. For example: | |||
| 1994 | @item | 2042 | @item |
| 1995 | @cindex @sc{cbreak} | 2043 | @cindex @sc{cbreak} |
| 1996 | It sets @sc{cbreak} mode for terminal input, and tells the operating | 2044 | It sets @sc{cbreak} mode for terminal input, and tells the operating |
| 1997 | system to handle flow control, with @code{(set-input-mode nil t)}. | 2045 | system to handle flow control. This is done using @code{set-input-mode}. |
| 1998 | 2046 | ||
| 1999 | @item | 2047 | @item |
| 2000 | It sets up @code{keyboard-translate-table} to translate @kbd{C-\} and | 2048 | It sets up @code{keyboard-translate-table} to translate @kbd{C-\} and |
| @@ -2061,10 +2109,11 @@ saved session to restore. For Emacs, this argument is @samp{--smid | |||
| 2061 | Emacs supports saving state by using a hook called | 2109 | Emacs supports saving state by using a hook called |
| 2062 | @code{emacs-save-session-functions}. Each function in this hook is | 2110 | @code{emacs-save-session-functions}. Each function in this hook is |
| 2063 | called when the session manager tells Emacs that the window system is | 2111 | called when the session manager tells Emacs that the window system is |
| 2064 | shutting down. The functions are called with the current buffer set | 2112 | shutting down. The functions are called with no arguments and with the |
| 2065 | to a temporary buffer. Each function can use @code{insert} to add | 2113 | current buffer set to a temporary buffer. Each function can use |
| 2066 | Lisp code to this buffer. At the end, Emacs saves the buffer in a | 2114 | @code{insert} to add Lisp code to this buffer. At the end, Emacs |
| 2067 | file that another Emacs will later load in order to restart the saved session. | 2115 | saves the buffer in a file that a subsequent Emacs invocation will |
| 2116 | load in order to restart the saved session. | ||
| 2068 | 2117 | ||
| 2069 | If a function in @code{emacs-save-session-functions} returns | 2118 | If a function in @code{emacs-save-session-functions} returns |
| 2070 | non-@code{nil}, Emacs tells the session manager to cancel the | 2119 | non-@code{nil}, Emacs tells the session manager to cancel the |
diff --git a/src/ChangeLog b/src/ChangeLog index 254069032ed..3d70d69cd69 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,7 +1,32 @@ | |||
| 1 | 2004-07-10 Luc Teirlinck <teirllm@auburn.edu> | ||
| 2 | |||
| 3 | * buffer.c (Fswitch_to_buffer, Fpop_to_buffer): Doc fixes. | ||
| 4 | |||
| 5 | * window.c (Fwindow_buffer, Fother_window, Fget_lru_window) | ||
| 6 | (Fget_largest_window, Fget_buffer_window, Fdelete_windows_on) | ||
| 7 | (Freplace_buffer_in_windows, Fset_window_buffer) | ||
| 8 | (Fselect-window, Fdisplay-buffer, Fsplit_window): Doc fixes. | ||
| 9 | (syms_of_window): Expand docstring of `display-buffer-function'. | ||
| 10 | |||
| 11 | 2004-07-09 Luc Teirlinck <teirllm@auburn.edu> | ||
| 12 | |||
| 13 | * editfns.c (Ffloat_time, Fformat_time_string, Fdecode_time) | ||
| 14 | (Fcurrent_time_string, Fcurrent_time_zone): Mention in docstrings | ||
| 15 | that time values of the type (HIGH . LOW) are considered obsolete. | ||
| 16 | |||
| 17 | 2004-07-06 Luc Teirlinck <teirllm@auburn.edu> | ||
| 18 | |||
| 19 | * keyboard.c (syms_of_keyboard): Fix `keyboard-translate-table' | ||
| 20 | docstring. | ||
| 21 | |||
| 22 | * fns.c (Fclear_string): Declare `len' before call to CHECK_STRING. | ||
| 23 | |||
| 1 | 2004-07-06 John Paul Wallington <jpw@gnu.org> | 24 | 2004-07-06 John Paul Wallington <jpw@gnu.org> |
| 2 | 25 | ||
| 3 | * eval.c (Fdefmacro): Signal an error if NAME is not a symbol. | 26 | * eval.c (Fdefmacro): Signal an error if NAME is not a symbol. |
| 4 | 27 | ||
| 28 | * fns.c (Fclear_string): Signal an error if STRING is not a string. | ||
| 29 | |||
| 5 | 2004-07-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | 30 | 2004-07-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> |
| 6 | 31 | ||
| 7 | * macterm.c (mac_initialize_display_info): Use CGGetActiveDisplayList | 32 | * macterm.c (mac_initialize_display_info): Use CGGetActiveDisplayList |
diff --git a/src/buffer.c b/src/buffer.c index bd4e061b05f..8bc20776957 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -1665,9 +1665,15 @@ switch_to_buffer_1 (buffer, norecord) | |||
| 1665 | 1665 | ||
| 1666 | DEFUN ("switch-to-buffer", Fswitch_to_buffer, Sswitch_to_buffer, 1, 2, "BSwitch to buffer: ", | 1666 | DEFUN ("switch-to-buffer", Fswitch_to_buffer, Sswitch_to_buffer, 1, 2, "BSwitch to buffer: ", |
| 1667 | doc: /* Select buffer BUFFER in the current window. | 1667 | doc: /* Select buffer BUFFER in the current window. |
| 1668 | BUFFER may be a buffer or a buffer name. | 1668 | If BUFFER does not identify an existing buffer, |
| 1669 | then this function creates a buffer with that name. | ||
| 1670 | |||
| 1671 | When called from Lisp, BUFFER may be a buffer, a string \(a buffer name), | ||
| 1672 | or nil. If BUFFER is nil, then this function chooses a buffer | ||
| 1673 | using `other-buffer'. | ||
| 1669 | Optional second arg NORECORD non-nil means | 1674 | Optional second arg NORECORD non-nil means |
| 1670 | do not put this buffer at the front of the list of recently selected ones. | 1675 | do not put this buffer at the front of the list of recently selected ones. |
| 1676 | This function returns the buffer it switched to. | ||
| 1671 | 1677 | ||
| 1672 | WARNING: This is NOT the way to work on another buffer temporarily | 1678 | WARNING: This is NOT the way to work on another buffer temporarily |
| 1673 | within a Lisp program! Use `set-buffer' instead. That avoids messing with | 1679 | within a Lisp program! Use `set-buffer' instead. That avoids messing with |
| @@ -1690,11 +1696,15 @@ the window-buffer correspondences. */) | |||
| 1690 | 1696 | ||
| 1691 | DEFUN ("pop-to-buffer", Fpop_to_buffer, Spop_to_buffer, 1, 3, 0, | 1697 | DEFUN ("pop-to-buffer", Fpop_to_buffer, Spop_to_buffer, 1, 3, 0, |
| 1692 | doc: /* Select buffer BUFFER in some window, preferably a different one. | 1698 | doc: /* Select buffer BUFFER in some window, preferably a different one. |
| 1693 | If BUFFER is nil, then some other buffer is chosen. | 1699 | BUFFER may be a buffer, a string \(a buffer name), or nil. |
| 1700 | If BUFFER is a string which is not the name of an existing buffer, | ||
| 1701 | then this function creates a buffer with that name. | ||
| 1702 | If BUFFER is nil, then it chooses some other buffer. | ||
| 1694 | If `pop-up-windows' is non-nil, windows can be split to do this. | 1703 | If `pop-up-windows' is non-nil, windows can be split to do this. |
| 1695 | If optional second arg OTHER-WINDOW is non-nil, insist on finding another | 1704 | If optional second arg OTHER-WINDOW is non-nil, insist on finding another |
| 1696 | window even if BUFFER is already visible in the selected window, | 1705 | window even if BUFFER is already visible in the selected window, |
| 1697 | and ignore `same-window-regexps' and `same-window-buffer-names'. | 1706 | and ignore `same-window-regexps' and `same-window-buffer-names'. |
| 1707 | This function returns the buffer it switched to. | ||
| 1698 | This uses the function `display-buffer' as a subroutine; see the documentation | 1708 | This uses the function `display-buffer' as a subroutine; see the documentation |
| 1699 | of `display-buffer' for additional customization information. | 1709 | of `display-buffer' for additional customization information. |
| 1700 | 1710 | ||
diff --git a/src/editfns.c b/src/editfns.c index 9928beff678..2782a966bf0 100644 --- a/src/editfns.c +++ b/src/editfns.c | |||
| @@ -1426,10 +1426,10 @@ lisp_time_argument (specified_time, result, usec) | |||
| 1426 | DEFUN ("float-time", Ffloat_time, Sfloat_time, 0, 1, 0, | 1426 | DEFUN ("float-time", Ffloat_time, Sfloat_time, 0, 1, 0, |
| 1427 | doc: /* Return the current time, as a float number of seconds since the epoch. | 1427 | doc: /* Return the current time, as a float number of seconds since the epoch. |
| 1428 | If SPECIFIED-TIME is given, it is the time to convert to float | 1428 | If SPECIFIED-TIME is given, it is the time to convert to float |
| 1429 | instead of the current time. The argument should have the forms: | 1429 | instead of the current time. The argument should have the form |
| 1430 | (HIGH . LOW) or (HIGH LOW USEC) or (HIGH LOW . USEC). | 1430 | (HIGH LOW . IGNORED). Thus, you can use times obtained from |
| 1431 | Thus, you can use times obtained from `current-time' | 1431 | `current-time' and from `file-attributes'. SPECIFIED-TIME can also |
| 1432 | and from `file-attributes'. | 1432 | have the form (HIGH . LOW), but this is considered obsolete. |
| 1433 | 1433 | ||
| 1434 | WARNING: Since the result is floating point, it may not be exact. | 1434 | WARNING: Since the result is floating point, it may not be exact. |
| 1435 | Do not use this function if precise time stamps are required. */) | 1435 | Do not use this function if precise time stamps are required. */) |
| @@ -1501,8 +1501,9 @@ emacs_memftimeu (s, maxsize, format, format_len, tp, ut) | |||
| 1501 | 1501 | ||
| 1502 | DEFUN ("format-time-string", Fformat_time_string, Sformat_time_string, 1, 3, 0, | 1502 | DEFUN ("format-time-string", Fformat_time_string, Sformat_time_string, 1, 3, 0, |
| 1503 | doc: /* Use FORMAT-STRING to format the time TIME, or now if omitted. | 1503 | doc: /* Use FORMAT-STRING to format the time TIME, or now if omitted. |
| 1504 | TIME is specified as (HIGH LOW . IGNORED) or (HIGH . LOW), as returned by | 1504 | TIME is specified as (HIGH LOW . IGNORED), as returned by |
| 1505 | `current-time' or `file-attributes'. | 1505 | `current-time' or `file-attributes'. The obsolete form (HIGH . LOW) |
| 1506 | is also still accepted. | ||
| 1506 | The third, optional, argument UNIVERSAL, if non-nil, means describe TIME | 1507 | The third, optional, argument UNIVERSAL, if non-nil, means describe TIME |
| 1507 | as Universal Time; nil means describe TIME in the local time zone. | 1508 | as Universal Time; nil means describe TIME in the local time zone. |
| 1508 | The value is a copy of FORMAT-STRING, but with certain constructs replaced | 1509 | The value is a copy of FORMAT-STRING, but with certain constructs replaced |
| @@ -1598,17 +1599,19 @@ For example, to produce full ISO 8601 format, use "%Y-%m-%dT%T%z". */) | |||
| 1598 | 1599 | ||
| 1599 | DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 1, 0, | 1600 | DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 1, 0, |
| 1600 | doc: /* Decode a time value as (SEC MINUTE HOUR DAY MONTH YEAR DOW DST ZONE). | 1601 | doc: /* Decode a time value as (SEC MINUTE HOUR DAY MONTH YEAR DOW DST ZONE). |
| 1601 | The optional SPECIFIED-TIME should be a list of (HIGH LOW . IGNORED) | 1602 | The optional SPECIFIED-TIME should be a list of (HIGH LOW . IGNORED), |
| 1602 | or (HIGH . LOW), as from `current-time' and `file-attributes', or `nil' | 1603 | as from `current-time' and `file-attributes', or `nil' to use the |
| 1603 | to use the current time. The list has the following nine members: | 1604 | current time. The obsolete form (HIGH . LOW) is also still accepted. |
| 1604 | SEC is an integer between 0 and 60; SEC is 60 for a leap second, which | 1605 | The list has the following nine members: SEC is an integer between 0 |
| 1605 | only some operating systems support. MINUTE is an integer between 0 and 59. | 1606 | and 60; SEC is 60 for a leap second, which only some operating systems |
| 1606 | HOUR is an integer between 0 and 23. DAY is an integer between 1 and 31. | 1607 | support. MINUTE is an integer between 0 and 59. HOUR is an integer |
| 1607 | MONTH is an integer between 1 and 12. YEAR is an integer indicating the | 1608 | between 0 and 23. DAY is an integer between 1 and 31. MONTH is an |
| 1608 | four-digit year. DOW is the day of week, an integer between 0 and 6, where | 1609 | integer between 1 and 12. YEAR is an integer indicating the |
| 1609 | 0 is Sunday. DST is t if daylight savings time is effect, otherwise nil. | 1610 | four-digit year. DOW is the day of week, an integer between 0 and 6, |
| 1610 | ZONE is an integer indicating the number of seconds east of Greenwich. | 1611 | where 0 is Sunday. DST is t if daylight savings time is effect, |
| 1611 | (Note that Common Lisp has different meanings for DOW and ZONE.) */) | 1612 | otherwise nil. ZONE is an integer indicating the number of seconds |
| 1613 | east of Greenwich. (Note that Common Lisp has different meanings for | ||
| 1614 | DOW and ZONE.) */) | ||
| 1612 | (specified_time) | 1615 | (specified_time) |
| 1613 | Lisp_Object specified_time; | 1616 | Lisp_Object specified_time; |
| 1614 | { | 1617 | { |
| @@ -1740,13 +1743,11 @@ The format is `Sun Sep 16 01:03:52 1973'. | |||
| 1740 | However, see also the functions `decode-time' and `format-time-string' | 1743 | However, see also the functions `decode-time' and `format-time-string' |
| 1741 | which provide a much more powerful and general facility. | 1744 | which provide a much more powerful and general facility. |
| 1742 | 1745 | ||
| 1743 | If SPECIFIED-TIME is given, it is a time to format instead | 1746 | If SPECIFIED-TIME is given, it is a time to format instead of the |
| 1744 | of the current time. The argument should have the form: | 1747 | current time. The argument should have the form (HIGH LOW . IGNORED). |
| 1745 | (HIGH . LOW) | 1748 | Thus, you can use times obtained from `current-time' and from |
| 1746 | or the form: | 1749 | `file-attributes'. SPECIFIED-TIME can also have the form (HIGH . LOW), |
| 1747 | (HIGH LOW . IGNORED). | 1750 | but this is considered obsolete. */) |
| 1748 | Thus, you can use times obtained from `current-time' | ||
| 1749 | and from `file-attributes'. */) | ||
| 1750 | (specified_time) | 1751 | (specified_time) |
| 1751 | Lisp_Object specified_time; | 1752 | Lisp_Object specified_time; |
| 1752 | { | 1753 | { |
| @@ -1797,12 +1798,10 @@ OFFSET is an integer number of seconds ahead of UTC (east of Greenwich). | |||
| 1797 | A negative value means west of Greenwich. | 1798 | A negative value means west of Greenwich. |
| 1798 | NAME is a string giving the name of the time zone. | 1799 | NAME is a string giving the name of the time zone. |
| 1799 | If SPECIFIED-TIME is given, the time zone offset is determined from it | 1800 | If SPECIFIED-TIME is given, the time zone offset is determined from it |
| 1800 | instead of using the current time. The argument should have the form: | 1801 | instead of using the current time. The argument should have the form |
| 1801 | (HIGH . LOW) | 1802 | (HIGH LOW . IGNORED). Thus, you can use times obtained from |
| 1802 | or the form: | 1803 | `current-time' and from `file-attributes'. SPECIFIED-TIME can also |
| 1803 | (HIGH LOW . IGNORED). | 1804 | have the form (HIGH . LOW), but this is considered obsolete. |
| 1804 | Thus, you can use times obtained from `current-time' | ||
| 1805 | and from `file-attributes'. | ||
| 1806 | 1805 | ||
| 1807 | Some operating systems cannot provide all this information to Emacs; | 1806 | Some operating systems cannot provide all this information to Emacs; |
| 1808 | in this case, `current-time-zone' returns a list containing nil for | 1807 | in this case, `current-time-zone' returns a list containing nil for |
| @@ -2298,7 +2298,9 @@ This makes STRING unibyte and may change its length. */) | |||
| 2298 | (string) | 2298 | (string) |
| 2299 | Lisp_Object string; | 2299 | Lisp_Object string; |
| 2300 | { | 2300 | { |
| 2301 | int len = SBYTES (string); | 2301 | int len; |
| 2302 | CHECK_STRING (string); | ||
| 2303 | len = SBYTES (string); | ||
| 2302 | bzero (SDATA (string), len); | 2304 | bzero (SDATA (string), len); |
| 2303 | STRING_SET_CHARS (string, len); | 2305 | STRING_SET_CHARS (string, len); |
| 2304 | STRING_SET_UNIBYTE (string); | 2306 | STRING_SET_UNIBYTE (string); |
diff --git a/src/keyboard.c b/src/keyboard.c index 469b15fb683..382f99058d4 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -11149,11 +11149,13 @@ Useful to set before you dump a modified Emacs. */); | |||
| 11149 | 11149 | ||
| 11150 | DEFVAR_LISP ("keyboard-translate-table", &Vkeyboard_translate_table, | 11150 | DEFVAR_LISP ("keyboard-translate-table", &Vkeyboard_translate_table, |
| 11151 | doc: /* Translate table for keyboard input, or nil. | 11151 | doc: /* Translate table for keyboard input, or nil. |
| 11152 | Each character is looked up in this string and the contents used instead. | 11152 | If non-nil, the value should be a char-table. Each character read |
| 11153 | The value may be a string, a vector, or a char-table. | 11153 | from the keyboard is looked up in this char-table. If the value found |
| 11154 | If it is a string or vector of length N, | 11154 | there is non-nil, then it is used instead of the actual input character. |
| 11155 | character codes N and up are untranslated. | 11155 | |
| 11156 | In a vector or a char-table, an element which is nil means "no translation". | 11156 | The value can also be a string or vector, but this is considered obsolete. |
| 11157 | If it is a string or vector of length N, character codes N and up are left | ||
| 11158 | untranslated. In a vector, an element which is nil means "no translation". | ||
| 11157 | 11159 | ||
| 11158 | This is applied to the characters supplied to input methods, not their | 11160 | This is applied to the characters supplied to input methods, not their |
| 11159 | output. See also `translation-table-for-input'. */); | 11161 | output. See also `translation-table-for-input'. */); |
diff --git a/src/window.c b/src/window.c index d3203c99e90..62ce399e95c 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -393,7 +393,8 @@ decode_any_window (window) | |||
| 393 | } | 393 | } |
| 394 | 394 | ||
| 395 | DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0, | 395 | DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0, |
| 396 | doc: /* Return the buffer that WINDOW is displaying. */) | 396 | doc: /* Return the buffer that WINDOW is displaying. |
| 397 | WINDOW defaults to the selected window. */) | ||
| 397 | (window) | 398 | (window) |
| 398 | Lisp_Object window; | 399 | Lisp_Object window; |
| 399 | { | 400 | { |
| @@ -1747,8 +1748,8 @@ DEFUN ("other-window", Fother_window, Sother_window, 1, 2, "p", | |||
| 1747 | doc: /* Select the ARG'th different window on this frame. | 1748 | doc: /* Select the ARG'th different window on this frame. |
| 1748 | All windows on current frame are arranged in a cyclic order. | 1749 | All windows on current frame are arranged in a cyclic order. |
| 1749 | This command selects the window ARG steps away in that order. | 1750 | This command selects the window ARG steps away in that order. |
| 1750 | A negative ARG moves in the opposite order. If the optional second | 1751 | A negative ARG moves in the opposite order. The optional second |
| 1751 | argument ALL_FRAMES is non-nil, cycle through all frames. */) | 1752 | argument ALL_FRAMES has the same meaning as in `next-window', which see. */) |
| 1752 | (arg, all_frames) | 1753 | (arg, all_frames) |
| 1753 | Lisp_Object arg, all_frames; | 1754 | Lisp_Object arg, all_frames; |
| 1754 | { | 1755 | { |
| @@ -2066,6 +2067,7 @@ check_all_windows () | |||
| 2066 | DEFUN ("get-lru-window", Fget_lru_window, Sget_lru_window, 0, 1, 0, | 2067 | DEFUN ("get-lru-window", Fget_lru_window, Sget_lru_window, 0, 1, 0, |
| 2067 | doc: /* Return the window least recently selected or used for display. | 2068 | doc: /* Return the window least recently selected or used for display. |
| 2068 | Return a full-width window if possible. | 2069 | Return a full-width window if possible. |
| 2070 | A minibuffer window is never a candidate. | ||
| 2069 | If optional argument FRAME is `visible', search all visible frames. | 2071 | If optional argument FRAME is `visible', search all visible frames. |
| 2070 | If FRAME is 0, search all visible and iconified frames. | 2072 | If FRAME is 0, search all visible and iconified frames. |
| 2071 | If FRAME is t, search all frames. | 2073 | If FRAME is t, search all frames. |
| @@ -2085,6 +2087,7 @@ If FRAME is a frame, search only that frame. */) | |||
| 2085 | 2087 | ||
| 2086 | DEFUN ("get-largest-window", Fget_largest_window, Sget_largest_window, 0, 1, 0, | 2088 | DEFUN ("get-largest-window", Fget_largest_window, Sget_largest_window, 0, 1, 0, |
| 2087 | doc: /* Return the largest window in area. | 2089 | doc: /* Return the largest window in area. |
| 2090 | A minibuffer window is never a candidate. | ||
| 2088 | If optional argument FRAME is `visible', search all visible frames. | 2091 | If optional argument FRAME is `visible', search all visible frames. |
| 2089 | If FRAME is 0, search all visible and iconified frames. | 2092 | If FRAME is 0, search all visible and iconified frames. |
| 2090 | If FRAME is t, search all frames. | 2093 | If FRAME is t, search all frames. |
| @@ -2099,6 +2102,7 @@ If FRAME is a frame, search only that frame. */) | |||
| 2099 | 2102 | ||
| 2100 | DEFUN ("get-buffer-window", Fget_buffer_window, Sget_buffer_window, 1, 2, 0, | 2103 | DEFUN ("get-buffer-window", Fget_buffer_window, Sget_buffer_window, 1, 2, 0, |
| 2101 | doc: /* Return a window currently displaying BUFFER, or nil if none. | 2104 | doc: /* Return a window currently displaying BUFFER, or nil if none. |
| 2105 | BUFFER can be a buffer or a buffer name. | ||
| 2102 | If optional argument FRAME is `visible', search all visible frames. | 2106 | If optional argument FRAME is `visible', search all visible frames. |
| 2103 | If optional argument FRAME is 0, search all visible and iconified frames. | 2107 | If optional argument FRAME is 0, search all visible and iconified frames. |
| 2104 | If FRAME is t, search all frames. | 2108 | If FRAME is t, search all frames. |
| @@ -2181,6 +2185,7 @@ value is reasonable when this function is called. */) | |||
| 2181 | DEFUN ("delete-windows-on", Fdelete_windows_on, Sdelete_windows_on, | 2185 | DEFUN ("delete-windows-on", Fdelete_windows_on, Sdelete_windows_on, |
| 2182 | 1, 2, "bDelete windows on (buffer): ", | 2186 | 1, 2, "bDelete windows on (buffer): ", |
| 2183 | doc: /* Delete all windows showing BUFFER. | 2187 | doc: /* Delete all windows showing BUFFER. |
| 2188 | BUFFER must be a buffer or the name of an existing buffer. | ||
| 2184 | Optional second argument FRAME controls which frames are affected. | 2189 | Optional second argument FRAME controls which frames are affected. |
| 2185 | If optional argument FRAME is `visible', search all visible frames. | 2190 | If optional argument FRAME is `visible', search all visible frames. |
| 2186 | If FRAME is 0, search all visible and iconified frames. | 2191 | If FRAME is 0, search all visible and iconified frames. |
| @@ -2210,7 +2215,8 @@ If FRAME is a frame, search only that frame. */) | |||
| 2210 | DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows, | 2215 | DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows, |
| 2211 | Sreplace_buffer_in_windows, | 2216 | Sreplace_buffer_in_windows, |
| 2212 | 1, 1, "bReplace buffer in windows: ", | 2217 | 1, 1, "bReplace buffer in windows: ", |
| 2213 | doc: /* Replace BUFFER with some other buffer in all windows showing it. */) | 2218 | doc: /* Replace BUFFER with some other buffer in all windows showing it. |
| 2219 | BUFFER may be a buffer or the name of an existing buffer. */) | ||
| 2214 | (buffer) | 2220 | (buffer) |
| 2215 | Lisp_Object buffer; | 2221 | Lisp_Object buffer; |
| 2216 | { | 2222 | { |
| @@ -3022,7 +3028,7 @@ set_window_buffer (window, buffer, run_hooks_p, keep_margins_p) | |||
| 3022 | 3028 | ||
| 3023 | DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 3, 0, | 3029 | DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 3, 0, |
| 3024 | doc: /* Make WINDOW display BUFFER as its contents. | 3030 | doc: /* Make WINDOW display BUFFER as its contents. |
| 3025 | BUFFER can be a buffer or buffer name. | 3031 | BUFFER can be a buffer or the name of an existing buffer. |
| 3026 | Optional third arg KEEP-MARGINS non-nil means that WINDOW's current | 3032 | Optional third arg KEEP-MARGINS non-nil means that WINDOW's current |
| 3027 | display margins, fringe widths, and scroll bar settings are maintained; | 3033 | display margins, fringe widths, and scroll bar settings are maintained; |
| 3028 | the default is to reset these from BUFFER's local settings or the frame | 3034 | the default is to reset these from BUFFER's local settings or the frame |
| @@ -3063,7 +3069,7 @@ defaults. */) | |||
| 3063 | DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0, | 3069 | DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0, |
| 3064 | doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer. | 3070 | doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer. |
| 3065 | If WINDOW is not already selected, make WINDOW's buffer current | 3071 | If WINDOW is not already selected, make WINDOW's buffer current |
| 3066 | and make WINDOW the frame's selected window. | 3072 | and make WINDOW the frame's selected window. Return WINDOW. |
| 3067 | Optional second arg NORECORD non-nil means | 3073 | Optional second arg NORECORD non-nil means |
| 3068 | do not put this buffer at the front of the list of recently selected ones. | 3074 | do not put this buffer at the front of the list of recently selected ones. |
| 3069 | 3075 | ||
| @@ -3247,7 +3253,8 @@ See `same-window-buffer-names' and `same-window-regexps'. */) | |||
| 3247 | DEFUN ("display-buffer", Fdisplay_buffer, Sdisplay_buffer, 1, 3, | 3253 | DEFUN ("display-buffer", Fdisplay_buffer, Sdisplay_buffer, 1, 3, |
| 3248 | "BDisplay buffer: \nP", | 3254 | "BDisplay buffer: \nP", |
| 3249 | doc: /* Make BUFFER appear in some window but don't select it. | 3255 | doc: /* Make BUFFER appear in some window but don't select it. |
| 3250 | BUFFER can be a buffer or a buffer name. | 3256 | BUFFER must be the name of an existing buffer, or, when called from Lisp, |
| 3257 | a buffer. | ||
| 3251 | If BUFFER is shown already in some window, just use that one, | 3258 | If BUFFER is shown already in some window, just use that one, |
| 3252 | unless the window is the selected window and the optional second | 3259 | unless the window is the selected window and the optional second |
| 3253 | argument NOT-THIS-WINDOW is non-nil (interactively, with prefix arg). | 3260 | argument NOT-THIS-WINDOW is non-nil (interactively, with prefix arg). |
| @@ -3590,7 +3597,11 @@ WINDOW defaults to selected one and SIZE to half its size. | |||
| 3590 | If optional third arg HORFLAG is non-nil, split side by side | 3597 | If optional third arg HORFLAG is non-nil, split side by side |
| 3591 | and put SIZE columns in the first of the pair. In that case, | 3598 | and put SIZE columns in the first of the pair. In that case, |
| 3592 | SIZE includes that window's scroll bar, or the divider column to its right. | 3599 | SIZE includes that window's scroll bar, or the divider column to its right. |
| 3593 | Returns the newly-created window. */) | 3600 | Interactively, all arguments are nil. |
| 3601 | |||
| 3602 | Returns the newly created window (which is the lower or rightmost one). | ||
| 3603 | The upper or leftmost window is the original one and remains selected. | ||
| 3604 | See Info node `(elisp)Splitting Windows' for more details and examples.*/) | ||
| 3594 | (window, size, horflag) | 3605 | (window, size, horflag) |
| 3595 | Lisp_Object window, size, horflag; | 3606 | Lisp_Object window, size, horflag; |
| 3596 | { | 3607 | { |
| @@ -6455,7 +6466,9 @@ the buffer; `temp-buffer-show-hook' is not run unless this function runs it. */ | |||
| 6455 | DEFVAR_LISP ("display-buffer-function", &Vdisplay_buffer_function, | 6466 | DEFVAR_LISP ("display-buffer-function", &Vdisplay_buffer_function, |
| 6456 | doc: /* If non-nil, function to call to handle `display-buffer'. | 6467 | doc: /* If non-nil, function to call to handle `display-buffer'. |
| 6457 | It will receive two args, the buffer and a flag which if non-nil means | 6468 | It will receive two args, the buffer and a flag which if non-nil means |
| 6458 | that the currently selected window is not acceptable. | 6469 | that the currently selected window is not acceptable. |
| 6470 | It should choose or create a window, display the specified buffer in it, | ||
| 6471 | and return the window. | ||
| 6459 | Commands such as `switch-to-buffer-other-window' and `find-file-other-window' | 6472 | Commands such as `switch-to-buffer-other-window' and `find-file-other-window' |
| 6460 | work using this function. */); | 6473 | work using this function. */); |
| 6461 | Vdisplay_buffer_function = Qnil; | 6474 | Vdisplay_buffer_function = Qnil; |