summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rwxr-xr-xconfigure3
-rw-r--r--configure.in2
-rw-r--r--etc/NEWS7
-rw-r--r--lisp/ChangeLog51
-rw-r--r--lisp/align.el8
-rw-r--r--lisp/emacs-lisp/easymenu.el73
-rw-r--r--lisp/macros.el9
-rw-r--r--lisp/net/tramp.el7
-rw-r--r--lisp/outline.el5
-rw-r--r--lisp/recentf.el2
-rw-r--r--lisp/tempo.el6
-rw-r--r--lispref/ChangeLog17
-rw-r--r--lispref/Makefile.in6
-rw-r--r--lispref/commands.texi9
-rw-r--r--lispref/os.texi23
-rw-r--r--src/ChangeLog26
-rw-r--r--src/config.in3
-rw-r--r--src/editfns.c46
-rw-r--r--src/eval.c2
-rw-r--r--src/fns.c9
-rw-r--r--src/frame.c2
-rw-r--r--src/macros.c4
-rw-r--r--src/print.c9
-rw-r--r--src/xmenu.c23
25 files changed, 292 insertions, 65 deletions
diff --git a/ChangeLog b/ChangeLog
index fea2ce35e64..8fbd47889c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-06 Lars Brinkhoff <lars@nocrew.org>
+
+ * configure.in: Add check for getrusage.
+ * configure: Regenerate.
+
2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* configure.in (HAVE_GTK_FILE_CHOOSER, $HAVE_GTK_FILE_SELECTION): New
diff --git a/configure b/configure
index c776e1fd633..d4c7ae27f4c 100755
--- a/configure
+++ b/configure
@@ -13704,8 +13704,9 @@ done
+
for ac_func in gethostname getdomainname dup2 \
-rename closedir mkdir rmdir sysinfo \
+rename closedir mkdir rmdir sysinfo getrusage \
random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime res_init setsid \
strerror fpathconf select mktime euidaccess getpagesize tzset setlocale \
utimes setrlimit setpgid getcwd getwd shutdown getaddrinfo \
diff --git a/configure.in b/configure.in
index 1478d4d4b5d..5a02beda097 100644
--- a/configure.in
+++ b/configure.in
@@ -2370,7 +2370,7 @@ AC_CHECK_FUNCS(touchlock)
AC_CHECK_HEADERS(maillock.h)
AC_CHECK_FUNCS(gethostname getdomainname dup2 \
-rename closedir mkdir rmdir sysinfo \
+rename closedir mkdir rmdir sysinfo getrusage \
random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime res_init setsid \
strerror fpathconf select mktime euidaccess getpagesize tzset setlocale \
utimes setrlimit setpgid getcwd getwd shutdown getaddrinfo \
diff --git a/etc/NEWS b/etc/NEWS
index 5d08bd4d030..726eac5afdb 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -98,6 +98,9 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
* Changes in Emacs 21.4
+** In Outline mode, hide-body no longer hides lines at the top
+of the file that precede the first header line.
+
+++
** `set-auto-mode' now gives the interpreter magic line (if present)
precedence over the file name. Likewise an <?xml or <!DOCTYPE declaration
@@ -2324,6 +2327,10 @@ configuration files.
* Lisp Changes in Emacs 21.4
+++
+** The new primitive `get-internal-run-time' returns the processor
+run time used by Emacs since start-up.
+
++++
** The new function `called-interactively-p' does what many people
have mistakenly believed `interactively-p' did: it returns t if the
calling function was called through `call-interactively'.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 8e55dcd6270..6fc7796f339 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,54 @@
+2004-11-06 Kai Grossjohann <kai.grossjohann@gmx.net>
+
+ * net/tramp.el (tramp-coding-commands): Additionally try "uudecode
+ -o /dev/stdout" before trying "uudecode -o -". Suggested by Han
+ Boetes.
+ (tramp-uudecode): Mention `uudecode -o /dev/stdout'.
+
+2004-11-06 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-menu-path): Use menu item name.
+
+2004-11-06 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/gdb-ui.el: Don't call define-fringe-bitmap if the
+ display doesn't support images.
+
+2004-11-06 Andreas Schwab <schwab@suse.de>
+
+ * tempo.el (tempo-match-finder): Doc fix.
+
+ * emacs-lisp/easymenu.el (easy-menu-get-map): Fix last change.
+
+2004-11-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/easymenu.el (easy-menu-get-map-look-for-name): Remove.
+ (easy-menu-lookup-name): New fun to replace it.
+ (easy-menu-get-map): Use it to obey menu item names (rather than just
+ keys) when looking up `path'.
+ (easy-menu-always-true-p): Rename from easy-menu-always-true.
+ (easy-menu-convert-item-1): Adjust to new name.
+
+2004-11-06 Peter Heslin <pj@heslin.eclipse.co.uk> (tiny change)
+
+ * outline.el (hide-body): Don't hide lines at the top of the file
+ that precede the first header line.
+
+2004-11-06 Paul Pogonyshev <pogonyshev@gmx.net>
+
+ * align.el (align-areas): Delete whitespace before reindenting, so
+ that tabs are never placed after spaces.
+
+2004-11-06 Alan Shutko <ats@acm.org>
+
+ * macros.el (insert-kbd-macro): Do completions based on macros,
+ rather than all commands.
+
+2004-11-06 David Hansen <david.hansen@gmx.net> (tiny change)
+
+ * tempo.el (tempo-match-finder): Use [:word:] instead of "^\\b",
+ to solve a bug whereby tags with 'b' don't match.
+
2004-11-05 Juri Linkov <juri@jurta.org>
* info.el (Info-search): Don't search in node header lines
diff --git a/lisp/align.el b/lisp/align.el
index bae09d749db..5e739c8f7c0 100644
--- a/lisp/align.el
+++ b/lisp/align.el
@@ -1212,6 +1212,14 @@ have been aligned. No changes will be made to the buffer."
(cond ((< gocol 0) t) ; don't do anything
((= cur gocol) t) ; don't need to
((< cur gocol) ; just add space
+ ;; FIXME: It is stated above that "...the
+ ;; whitespace to be modified was already
+ ;; deleted by `align-region', all we have
+ ;; to do here is indent." However, this
+ ;; doesn't seem to be true, so we first
+ ;; delete the whitespace to avoid tabs
+ ;; after spaces.
+ (delete-horizontal-space t)
(indent-to gocol))
(t
;; This code works around an oddity in the
diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el
index e039b80aee5..7b18756fd7e 100644
--- a/lisp/emacs-lisp/easymenu.el
+++ b/lisp/emacs-lisp/easymenu.el
@@ -242,9 +242,9 @@ possibly preceded by keyword pairs as described in `easy-menu-define'."
(setq visible (or arg ''nil)))))
(if (equal visible ''nil)
nil ; Invisible menu entry, return nil.
- (if (and visible (not (easy-menu-always-true visible)))
+ (if (and visible (not (easy-menu-always-true-p visible)))
(setq prop (cons :visible (cons visible prop))))
- (if (and enable (not (easy-menu-always-true enable)))
+ (if (and enable (not (easy-menu-always-true-p enable)))
(setq prop (cons :enable (cons enable prop))))
(if filter (setq prop (cons :filter (cons filter prop))))
(if help (setq prop (cons :help (cons help prop))))
@@ -363,12 +363,12 @@ ITEM defines an item as in `easy-menu-define'."
(cons cmd keys))))
(setq cache-specified nil))
(if keys (setq prop (cons :keys (cons keys prop)))))
- (if (and visible (not (easy-menu-always-true visible)))
+ (if (and visible (not (easy-menu-always-true-p visible)))
(if (equal visible ''nil)
;; Invisible menu item. Don't insert into keymap.
(setq remove t)
(setq prop (cons :visible (cons visible prop)))))))
- (if (and active (not (easy-menu-always-true active)))
+ (if (and active (not (easy-menu-always-true-p active)))
(setq prop (cons :enable (cons active prop))))
(if (and (or no-name cache-specified)
(or (null cache) (stringp cache) (vectorp cache)))
@@ -426,7 +426,8 @@ KEY does not have to be a symbol, and comparison is done with equal."
(defun easy-menu-name-match (name item)
"Return t if NAME is the name of menu item ITEM.
-NAME can be either a string, or a symbol."
+NAME can be either a string, or a symbol.
+ITEM should be a keymap binding of the form (KEY . MENU-ITEM)."
(if (consp item)
(if (symbolp name)
(eq (car-safe item) name)
@@ -439,7 +440,7 @@ NAME can be either a string, or a symbol."
(eq (car-safe item) (intern name))
(eq (car-safe item) (easy-menu-intern name)))))))
-(defun easy-menu-always-true (x)
+(defun easy-menu-always-true-p (x)
"Return true if form X never evaluates to nil."
(if (consp x) (and (eq (car x) 'quote) (cadr x))
(or (eq x t) (not (symbolp x)))))
@@ -591,10 +592,24 @@ If item is an old format item, a new format item is returned."
(cons name item)) ; Keymap or new menu format
)))
-(defun easy-menu-get-map-look-for-name (name submap)
- (while (and submap (not (easy-menu-name-match name (car submap))))
- (setq submap (cdr submap)))
- submap)
+(defun easy-menu-lookup-name (map name)
+ "Lookup menu item NAME in keymap MAP.
+Like `lookup-key' except that NAME is not an array but just a single key
+and that NAME can be a string representing the menu item's name."
+ (or (lookup-key map (vector (easy-menu-intern name)))
+ (when (stringp name)
+ ;; `lookup-key' failed and we have a menu item name: look at the
+ ;; actual menu entries's names.
+ (catch 'found
+ (map-keymap (lambda (key item)
+ (if (condition-case nil (member name item)
+ (error nil))
+ ;; Found it!! Look for it again with
+ ;; `lookup-key' so as to handle inheritance and
+ ;; to extract the actual command/keymap bound to
+ ;; `name' from the item (via get_keyelt).
+ (throw 'found (lookup-key map (vector key)))))
+ map)))))
(defun easy-menu-get-map (map path &optional to-modify)
"Return a sparse keymap in which to add or remove an item.
@@ -605,34 +620,34 @@ wants to modify in the map that we return.
In some cases we use that to select between the local and global maps."
(setq map
(catch 'found
- (let* ((key (vconcat (unless map '(menu-bar))
- (mapcar 'easy-menu-intern path)))
- (maps (mapcar (lambda (map)
- (setq map (lookup-key map key))
- (while (and (symbolp map) (keymapp map))
- (setq map (symbol-function map)))
- map)
- (if map
- (list (if (and (symbolp map)
- (not (keymapp map)))
- (symbol-value map) map))
- (current-active-maps)))))
+ (if (and map (symbolp map) (not (keymapp map)))
+ (setq map (symbol-value map)))
+ (let ((maps (if map (list map) (current-active-maps))))
+ ;; Look for PATH in each map.
+ (unless map (push 'menu-bar path))
+ (dolist (name path)
+ (setq maps
+ (delq nil (mapcar (lambda (map)
+ (setq map (easy-menu-lookup-name
+ map name))
+ (and (keymapp map) map))
+ maps))))
+
;; Prefer a map that already contains the to-be-modified entry.
(when to-modify
(dolist (map maps)
- (when (and (keymapp map)
- (easy-menu-get-map-look-for-name to-modify map))
+ (when (easy-menu-lookup-name map to-modify)
(throw 'found map))))
;; Use the first valid map.
- (dolist (map maps)
- (when (keymapp map)
- (throw 'found map)))
+ (when maps (throw 'found (car maps)))
+
;; Otherwise, make one up.
;; Hardcoding current-local-map is lame, but it's difficult
;; to know what the caller intended for us to do ;-(
(let* ((name (if path (format "%s" (car (reverse path)))))
(newmap (make-sparse-keymap name)))
- (define-key (or map (current-local-map)) key
+ (define-key (or map (current-local-map))
+ (apply 'vector (mapcar 'easy-menu-intern path))
(if name (cons name newmap) newmap))
newmap))))
(or (keymapp map) (error "Malformed menu in easy-menu: (%s)" map))
@@ -640,5 +655,5 @@ In some cases we use that to select between the local and global maps."
(provide 'easymenu)
-;;; arch-tag: 2a04020d-90d2-476d-a7c6-71e072007a4a
+;; arch-tag: 2a04020d-90d2-476d-a7c6-71e072007a4a
;;; easymenu.el ends here
diff --git a/lisp/macros.el b/lisp/macros.el
index 0de5d223ee0..bb9fda41a45 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -63,7 +63,14 @@ bindings.
To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
use this command, and then save the file."
- (interactive "CInsert kbd macro (name): \nP")
+ (interactive (list (intern (completing-read "Insert kbd macro (name): "
+ obarray
+ (lambda (elt)
+ (and (fboundp elt)
+ (or (stringp (symbol-function elt))
+ (vectorp (symbol-function elt)))))
+ t))
+ current-prefix-arg))
(let (definition)
(if (string= (symbol-name macroname) "")
(progn
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 5a71a50c5db..e153ab3341f 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -1535,8 +1535,9 @@ cat /tmp/tramp.$$
rm -f /tmp/tramp.$$
}"
"Shell function to implement `uudecode' to standard output.
-Many systems support `uudecode -o -' for this or `uudecode -p', but
-some systems don't, and for them we have this shell function.")
+Many systems support `uudecode -o /dev/stdout' for this or
+`uudecode -o -' or `uudecode -p', but some systems don't, and for
+them we have this shell function.")
;; Perl script to implement `file-attributes' in a Lisp `read'able
;; output. If you are hacking on this, note that you get *no* output
@@ -5970,6 +5971,8 @@ locale to C and sets up the remote shell search path."
base64-encode-region base64-decode-region)
("recode data..base64" "recode base64..data"
base64-encode-region base64-decode-region)
+ ("uuencode xxx" "uudecode -o /dev/stdout"
+ tramp-uuencode-region uudecode-decode-region)
("uuencode xxx" "uudecode -o -"
tramp-uuencode-region uudecode-decode-region)
("uuencode xxx" "uudecode -p"
diff --git a/lisp/outline.el b/lisp/outline.el
index 2d2663b12f2..89e9e193e9c 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -723,7 +723,7 @@ Show the heading too, if it is currently invisible."
(progn (outline-next-preface) (point)) nil)))
(defun hide-body ()
- "Hide all of buffer except headings."
+ "Hide all body lines in buffer, leaving all headings visible."
(interactive)
(hide-region-body (point-min) (point-max)))
@@ -738,7 +738,8 @@ Show the heading too, if it is currently invisible."
(narrow-to-region start end)
(goto-char (point-min))
(if (outline-on-heading-p)
- (outline-end-of-heading))
+ (outline-end-of-heading)
+ (outline-next-preface))
(while (not (eobp))
(outline-flag-region (point)
(progn (outline-next-preface) (point)) t)
diff --git a/lisp/recentf.el b/lisp/recentf.el
index 4ef55d4e1bf..2fee8e637a8 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -98,7 +98,7 @@ Set VARIABLE with VALUE, and force a rebuild of the recentf menu."
:type 'string
:set 'recentf-menu-customization-changed)
-(defcustom recentf-menu-path '("files")
+(defcustom recentf-menu-path '("File")
"*Path where to add the recentf menu.
If nil add it at top level (see also `easy-menu-add-item')."
:group 'recentf
diff --git a/lisp/tempo.el b/lisp/tempo.el
index 3ceb3e271f4..43f90b64766 100644
--- a/lisp/tempo.el
+++ b/lisp/tempo.el
@@ -1,6 +1,6 @@
;;; tempo.el --- Flexible template insertion
-;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 2004 Free Software Foundation, Inc.
;; Author: David K}gedal <davidk@lysator.liu.se>
;; Created: 16 Feb 1994
@@ -172,7 +172,7 @@ documentation for the function `tempo-complete-tag' for more info.
(defvar tempo-marks nil
"A list of marks to jump to with `\\[tempo-forward-mark]' and `\\[tempo-backward-mark]'.")
-(defvar tempo-match-finder "\\b\\([^\\b]+\\)\\="
+(defvar tempo-match-finder "\\b\\([[:word:]]+\\)\\="
"The regexp or function used to find the string to match against tags.
If `tempo-match-finder is a string, it should contain a regular
@@ -182,7 +182,7 @@ the string between the first \\( and \\) is used for matching against
each string in the tag list. If one is found, the whole text between
the first \\( and the point is replaced with the inserted template.
-You will probably want to include \\ \= at the end of the regexp to
+You will probably want to include \\=\\= at the end of the regexp to
make sure that the string is matched only against text adjacent to the
point.
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index d1bb65d3358..197c7217785 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,20 @@
+2004-11-06 Lars Brinkhoff <lars@nocrew.org>
+
+ * os.texi (Processor Run Time): New section documenting
+ get-internal-run-time.
+
+2004-11-06 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (install, maintainer-clean): Don't use "elisp-*" as
+ it nukes elisp-cover.texi.
+ (dist): Change elisp-[0-9] to elisp-[1-9], as there could be no
+ elisp-0 etc.
+
+2004-11-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * commands.texi (Keyboard Macros): Document `append' return value
+ of `defining-kbd-macro'.
+
2004-11-01 Richard M. Stallman <rms@gnu.org>
* commands.texi (Interactive Call): Add called-interactively-p.
diff --git a/lispref/Makefile.in b/lispref/Makefile.in
index e9d99de7d6a..252ab1aaaed 100644
--- a/lispref/Makefile.in
+++ b/lispref/Makefile.in
@@ -108,7 +108,7 @@ elisp.dvi: $(srcs)
install: elisp
$(srcdir)/mkinstalldirs $(infodir)
- cp elisp elisp-* $(infodir)
+ cp elisp elisp-[1-9] elisp-[1-9][0-9] $(infodir)
${INSTALL_INFO} --info-dir=${infodir} ${infodir}/elisp
clean:
@@ -119,7 +119,7 @@ clean:
distclean: clean
maintainer-clean: clean
- rm -f elisp elisp-* elisp.dvi elisp.oaux
+ rm -f elisp elisp-[1-9] elisp-[1-9][0-9] elisp.dvi elisp.oaux
dist: elisp elisp.dvi
-rm -rf temp
@@ -128,7 +128,7 @@ dist: elisp elisp.dvi
-ln $(srcdir)/README $(srcdir)/configure.in $(srcdir)/configure \
$(srcdir)/Makefile.in $(srcs) \
$(srcdir)/../man/texinfo.tex \
- elisp.dvi elisp.aux elisp.??s elisp elisp-[0-9] elisp-[0-9][0-9] \
+ elisp.dvi elisp.aux elisp.??s elisp elisp-[1-9] elisp-[1-9][0-9] \
temp/$(manual)
-(cd temp/$(manual); rm -f mkinstalldirs)
cp $(srcdir)/mkinstalldirs temp/$(manual)
diff --git a/lispref/commands.texi b/lispref/commands.texi
index 3c9612e5186..0144123ecb5 100644
--- a/lispref/commands.texi
+++ b/lispref/commands.texi
@@ -420,7 +420,7 @@ the string.) Other characters that normally terminate a symbol (e.g.,
parentheses and brackets) do not do so here. Prompt.
@item U
-A key sequence or nil. May be used after a @code{k} or @code{K}
+A key sequence or @code{nil}. May be used after a @code{k} or @code{K}
argument to get the up-event that was discarded in case the key
sequence read for that argument was a down-event. No I/O.
@@ -3023,9 +3023,10 @@ yourself.
@defvar defining-kbd-macro
This variable is non-@code{nil} if and only if a keyboard macro is
being defined. A command can test this variable so as to behave
-differently while a macro is being defined. The commands
-@code{start-kbd-macro} and @code{end-kbd-macro} set this variable---do
-not set it yourself.
+differently while a macro is being defined. The value is
+@code{append} while appending to the definition of an existing macro.
+The commands @code{start-kbd-macro}, @code{kmacro-start-macro} and
+@code{end-kbd-macro} set this variable---do not set it yourself.
The variable is always local to the current terminal and cannot be
buffer-local. @xref{Multiple Displays}.
diff --git a/lispref/os.texi b/lispref/os.texi
index 42a0613bfec..90fba8975e2 100644
--- a/lispref/os.texi
+++ b/lispref/os.texi
@@ -23,6 +23,7 @@ pertaining to the terminal and the screen.
* Time of Day:: Getting the current time.
* Time Conversion:: Converting a time from numeric form to a string, or
to calendrical data (or vice versa).
+* Processor Run Time:: Getting the run time used by Emacs.
* Time Calculations:: Adding, subtracting, comparing times, etc.
* Timers:: Setting a timer to call a function at a certain time.
* Terminal Input:: Recording terminal input for debugging.
@@ -1285,6 +1286,28 @@ For instance, years before 1970 do not work on some systems;
on others, years as early as 1901 do work.
@end defun
+@node Processor Run Time
+@section Processor Run time
+
+@defun get-internal-run-time
+This function returns the processor run time used by Emacs as a list
+of three integers: @code{(@var{high} @var{low} @var{microsec})}. The
+integers @var{high} and @var{low} combine to give the number of
+seconds, which is
+@ifnottex
+@var{high} * 2**16 + @var{low}.
+@end ifnottex
+@tex
+$high*2^{16}+low$.
+@end tex
+
+The third element, @var{microsec}, gives the microseconds (or 0 for
+systems that return time with the resolution of only one second).
+
+If the system doesn't provide a way to determine the processor run
+time, get-internal-run-time returns the same time as current-time.
+@end defun
+
@node Time Calculations
@section Time Calculations
diff --git a/src/ChangeLog b/src/ChangeLog
index a38c3f7baeb..b65bb2d5714 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,31 @@
+2004-11-06 Lars Brinkhoff <lars@nocrew.org>
+
+ * config.in: Regenerate (add HAVE_GETRUSAGE).
+ * editfns.c (Fget_internal_run_time): New function.
+ (syms_of_data): Defsubr it.
+ * fns.c (sxhash): As far as possible, merge calculation of
+ hash code for symbols and strings.
+
+2004-11-06 Eli Zaretskii <eliz@gnu.org>
+
+ * frame.c (syms_of_frame): Fix the example in the doc string.
+
+2004-11-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * eval.c (Feval): Remove check for INPUT_BLOCKED_P.
+
+ * xmenu.c (popup_get_selection, create_and_show_popup_menu)
+ (create_and_show_dialog): Revert change from 2004-10-31.
+
+
+2004-11-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * macros.c (syms_of_macros) <defining-kbd-macro>: Doc fix.
+
2004-11-05 Kim F. Storm <storm@cua.dk>
+ * print.c (print_object): Print Lisp_Misc_Save_Value objects.
+
* fileio.c (Ffile_modes): Doc fix.
(auto_save_1): Check for Ffile_modes nil value.
diff --git a/src/config.in b/src/config.in
index a2087b98b1f..c253f0c411b 100644
--- a/src/config.in
+++ b/src/config.in
@@ -196,6 +196,9 @@ Boston, MA 02111-1307, USA. */
/* Define to 1 if you have the `getpt' function. */
#undef HAVE_GETPT
+/* Define to 1 if you have the `getrusage' function. */
+#undef HAVE_GETRUSAGE
+
/* Define to 1 if you have the `getsockname' function. */
#undef HAVE_GETSOCKNAME
diff --git a/src/editfns.c b/src/editfns.c
index e83e53e9d24..2e8134d4495 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -39,6 +39,10 @@ Boston, MA 02111-1307, USA. */
#include <stdio.h>
#endif
+#if defined HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
#include <ctype.h>
#include "lisp.h"
@@ -1375,6 +1379,47 @@ resolution finer than a second. */)
return Flist (3, result);
}
+
+DEFUN ("get-internal-run-time", Fget_internal_run_time, Sget_internal_run_time,
+ 0, 0, 0,
+ doc: /* Return the current run time used by Emacs.
+The time is returned as a list of three integers. The first has the
+most significant 16 bits of the seconds, while the second has the
+least significant 16 bits. The third integer gives the microsecond
+count.
+
+On systems that can't determine the run time, get-internal-run-time
+does the same thing as current-time. The microsecond count is zero on
+systems that do not provide resolution finer than a second. */)
+ ()
+{
+#ifdef HAVE_GETRUSAGE
+ struct rusage usage;
+ Lisp_Object result[3];
+ int secs, usecs;
+
+ if (getrusage (RUSAGE_SELF, &usage) < 0)
+ /* This shouldn't happen. What action is appropriate? */
+ Fsignal (Qerror, Qnil);
+
+ /* Sum up user time and system time. */
+ secs = usage.ru_utime.tv_sec + usage.ru_stime.tv_sec;
+ usecs = usage.ru_utime.tv_usec + usage.ru_stime.tv_usec;
+ if (usecs >= 1000000)
+ {
+ usecs -= 1000000;
+ secs++;
+ }
+
+ XSETINT (result[0], (secs >> 16) & 0xffff);
+ XSETINT (result[1], (secs >> 0) & 0xffff);
+ XSETINT (result[2], usecs);
+
+ return Flist (3, result);
+#else
+ return Fcurrent_time ();
+#endif
+}
int
@@ -4315,6 +4360,7 @@ functions if all the text being accessed has this property. */);
defsubr (&Suser_full_name);
defsubr (&Semacs_pid);
defsubr (&Scurrent_time);
+ defsubr (&Sget_internal_run_time);
defsubr (&Sformat_time_string);
defsubr (&Sfloat_time);
defsubr (&Sdecode_time);
diff --git a/src/eval.c b/src/eval.c
index 5fb35cee58b..d1d5d195762 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1996,7 +1996,7 @@ DEFUN ("eval", Feval, Seval, 1, 1, 0,
struct backtrace backtrace;
struct gcpro gcpro1, gcpro2, gcpro3;
- if (handling_signal || INPUT_BLOCKED_P)
+ if (handling_signal)
abort ();
if (SYMBOLP (form))
diff --git a/src/fns.c b/src/fns.c
index b366cab196a..e0167ebf990 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -5007,15 +5007,14 @@ sxhash (obj, depth)
hash = XUINT (obj);
break;
- case Lisp_Symbol:
- hash = sxhash_string (SDATA (SYMBOL_NAME (obj)),
- SCHARS (SYMBOL_NAME (obj)));
- break;
-
case Lisp_Misc:
hash = XUINT (obj);
break;
+ case Lisp_Symbol:
+ obj = SYMBOL_NAME (obj);
+ /* Fall through. */
+
case Lisp_String:
hash = sxhash_string (SDATA (obj), SCHARS (obj));
break;
diff --git a/src/frame.c b/src/frame.c
index 1935df35508..80d1876ef11 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -4285,7 +4285,7 @@ is a reasonable practice. See also the variable `x-resource-name'. */);
DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
doc: /* Alist of default values for frame creation.
These may be set in your init file, like this:
- (setq default-frame-alist '((width . 80) (height . 55) (menu-bar-lines . 1))
+ (setq default-frame-alist '((width . 80) (height . 55) (menu-bar-lines . 1)))
These override values given in window system configuration data,
including X Windows' defaults database.
For values specific to the first Emacs frame, see `initial-frame-alist'.
diff --git a/src/macros.c b/src/macros.c
index d0219a3be04..09ae87b0a59 100644
--- a/src/macros.c
+++ b/src/macros.c
@@ -392,7 +392,9 @@ syms_of_macros ()
defsubr (&Sstore_kbd_macro_event);
DEFVAR_KBOARD ("defining-kbd-macro", defining_kbd_macro,
- doc: /* Non-nil while a keyboard macro is being defined. Don't set this! */);
+ doc: /* Non-nil while a keyboard macro is being defined. Don't set this!
+The value is the symbol `append' while appending to the definition of
+an existing macro. */);
DEFVAR_LISP ("executing-macro", &Vexecuting_macro,
doc: /* Currently executing keyboard macro (string or vector); nil if none executing. */);
diff --git a/src/print.c b/src/print.c
index 5a0f7fe6220..76c648b9a2e 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2085,6 +2085,15 @@ print_object (obj, printcharfun, escapeflag)
PRINTCHAR ('>');
break;
+ case Lisp_Misc_Save_Value:
+ strout ("#<save_value ", -1, -1, printcharfun, 0);
+ sprintf(buf, "ptr=0x%08x int=%d",
+ (unsigned long) XSAVE_VALUE (obj)->pointer,
+ XSAVE_VALUE (obj)->integer);
+ strout (buf, -1, -1, printcharfun, 0);
+ PRINTCHAR ('>');
+ break;
+
default:
goto badtype;
}
diff --git a/src/xmenu.c b/src/xmenu.c
index 145e4f70b9c..a08f4610101 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -115,7 +115,7 @@ extern XtAppContext Xt_app_con;
static Lisp_Object xdialog_show P_ ((FRAME_PTR, int, Lisp_Object, char **));
static void popup_get_selection P_ ((XEvent *, struct x_display_info *,
- LWLIB_ID, int));
+ LWLIB_ID, int, int));
/* Define HAVE_BOXES if menus can handle radio and toggle buttons. */
@@ -157,6 +157,8 @@ static void single_keymap_panes P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
static void list_of_panes P_ ((Lisp_Object));
static void list_of_items P_ ((Lisp_Object));
+extern EMACS_TIME timer_check P_ ((int));
+
/* This holds a Lisp vector that holds the results of decoding
the keymaps or alist-of-alists that specify a menu.
@@ -1122,27 +1124,27 @@ on the left of the dialog box and all following items on the right.
If DOWN_ON_KEYPRESS is nonzero, pop down if a key is pressed.
- This function used to have a DO_TIMERS argument which was
- 1 in the dialog case, and caused it to run Lisp-level timers.
- That was unsafe so we removed it, but does anyone remember
- why menus and dialogs were treated differently?
-
NOTE: All calls to popup_get_selection should be protected
with BLOCK_INPUT, UNBLOCK_INPUT wrappers. */
#ifdef USE_X_TOOLKIT
static void
-popup_get_selection (initial_event, dpyinfo, id, down_on_keypress)
+popup_get_selection (initial_event, dpyinfo, id, do_timers, down_on_keypress)
XEvent *initial_event;
struct x_display_info *dpyinfo;
LWLIB_ID id;
+ int do_timers;
int down_on_keypress;
{
XEvent event;
while (popup_activated_flag)
{
- if (initial_event)
+ /* If we have no events to run, consider timers. */
+ if (do_timers && !XtAppPending (Xt_app_con))
+ timer_check (1);
+
+ if (initial_event)
{
event = *initial_event;
initial_event = 0;
@@ -2488,7 +2490,7 @@ create_and_show_popup_menu (f, first_wv, x, y, for_click)
popup_activated_flag = 1;
/* Process events that apply to the menu. */
- popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), menu_id, 0);
+ popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), menu_id, 0, 0);
/* fp turned off the following statement and wrote a comment
that it is unnecessary--that the menu has already disappeared.
@@ -2882,7 +2884,8 @@ create_and_show_dialog (f, first_wv)
Fcons (make_number (dialog_id >> (fact)),
make_number (dialog_id & ~(-1 << (fact)))));
- popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id, 1);
+ popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f),
+ dialog_id, 1, 1);
unbind_to (count, Qnil);
}