diff options
35 files changed, 580 insertions, 176 deletions
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index a6277c545c9..387baade381 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -41,6 +41,18 @@ to the hack introduced on 2005-07-01 to fix some other Cleartype problem. ** raman@users.sf.net, sep 7: Emacs 23.0.50: Segfaults in alloc.c (batch process) http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00690.html +** undefined reference getopt_long +Report by Daniel C. Bastos <dbast0s@yahoo.com.br> on bug-gnu-emacs +from 2007-08-27. Impossible to procede without more input from OP (as +of 20070912, emails are bouncing) or someone else who can reproduce this. +http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01497.html + +** emacs-22.1 with GTK problems (with patches) +Only outstanding issue seems to be whether Solaris 2.6 GTK can be +supported in the absence of recursive mutexes, via a change to +alloc.c, or whether configure should abort. +http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00055.html + * BUGS ** Document the changes introduced by multi-tty diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 32617c97b20..7685a3ce789 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,11 @@ +2007-11-09 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus.texi, gnus-faq.texi, message.texi: Bump version to 5.10.9. + +2007-11-09 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Remove obscure sentence. + 2007-11-06 Kenichi Handa <handa@ni.aist.go.jp> * mule.texi (Select Input Method): Describe how to activate an input @@ -15,11 +23,20 @@ * gnus.texi (Troubleshooting): Adjust Gnus version number. +2007-10-30 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (Watch Expressions): Describe gdb-delete-out-of-scope. + 2007-10-30 Glenn Morris <rgm@gnu.org> * misc.texi (Directory Tracking): Explain a bit more about dirtrack-mode. +2007-10-29 Richard Stallman <rms@gnu.org> + + * widget.texi (Introduction): Delete discussion of implementation + internals. + 2007-10-25 Glenn Morris <rgm@gnu.org> * fortran-xtra.texi (Fortran): F90 mode handles F2003. diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index 45210118f77..a8bea90a635 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -1121,6 +1121,13 @@ changed and @code{shadow} face to make variables which have gone out of scope less noticeable. When a variable goes out of scope you can't edit its value. +@vindex gdb-delete-out-of-scope + If the variable @code{gdb-delete-out-of-scope} is non-@code{nil} +(the default value), Emacs automatically deletes watch expressions +which go out of scope. Sometimes, when re-entering the same function, +it may be useful to set this value to nil so that you don't need to +recreate the watch expression. + @vindex gdb-use-colon-colon-notation If the variable @code{gdb-use-colon-colon-notation} is non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}} diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi index 35f0722406e..49b2976472e 100644 --- a/doc/misc/widget.texi +++ b/doc/misc/widget.texi @@ -142,19 +142,6 @@ extended to use the GUI features. This means that your code using the widget library will also use the new graphic features automatically. @end enumerate -In order to minimize the code that is loaded by users who do not -create any widgets, the code has been split in two files: - -@cindex widget library, files -@table @file -@item widget.el -This will declare the user variables, define the function -@code{define-widget}, and autoload the function @code{widget-create}. -@item wid-edit.el -Everything else is here, there is no reason to load it explicitly, as -it will be autoloaded when needed. -@end table - @node User Interface, Programming Example, Introduction, Top @comment node-name, next, previous, up @section User Interface diff --git a/etc/NEWS.22 b/etc/NEWS.22 index 783092f4f5c..a8e8b3fbb8c 100644 --- a/etc/NEWS.22 +++ b/etc/NEWS.22 @@ -42,15 +42,6 @@ below. Emacs tries to warn you about these through `bad-packages-alist'. * Changes in Emacs 22.2 -** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs. - -** `bad-packages-alist' will warn about external packages that are known -to cause problems in this version of Emacs. - -** The values of `dired-recursive-deletes' and `dired-recursive-copies' -have been changed to `top'. This means that the user is asked once, -before deleting/copying the indicated directory recursively. - ** In Image mode, whenever the displayed image is wider and/or higher than the window, the usual keys for moving the cursor cause the image to be scrolled horizontally or vertically instead. @@ -67,6 +58,15 @@ Windows installations. Users of software which modifies the behaviour of Windows to cause focus to follow the mouse will now need to explicitly set this variable. +** `bad-packages-alist' will warn about external packages that are known +to cause problems in this version of Emacs. + +** The values of `dired-recursive-deletes' and `dired-recursive-copies' +have been changed to `top'. This means that the user is asked once, +before deleting/copying the indicated directory recursively. + +** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs. + ** The command gdba has been removed as gdb works now for those cases where it was needed. In text command mode, if you have problems before execution has started, use M-x gud-gdb. @@ -106,7 +106,8 @@ This can be used to add menu entries for backend specific functions. * Lisp Changes in Emacs 22.2. ** Frame-local variables are deprecated and are slated for removal. - Use frame parameters instead. +Use frame parameters instead. + ** The function invisible-p returns non-nil if the character after a specified position is invisible. @@ -121,9 +122,16 @@ as its frame. ** The new function `image-refresh' refreshes all images associated with a given image specification. -** The new function `split-string-and-unquote' does (what?) +** The new function `combine-and-quote-strings' concatenates a list of strings +using a specified separator. If a string contains double quotes, they +are escaped in the output. + +** The new function `split-string-and-unquote' performs the inverse operation to +`combine-and-quote-strings', i.e. splits a single string into a list +of strings, undoing any quoting added by `combine-and-quote-strings'. +(For some separator/string combinations, the original strings cannot +be recovered.) -** The new function `combine-and-quote-strings' does (what?) * Installation Changes in Emacs 22.1 diff --git a/leim/Makefile.in b/leim/Makefile.in index ad34ca87457..47e220c7112 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -255,7 +255,7 @@ install: all `id -un 2> /dev/null`; do \ [ -n "$${installuser}" ] && break ; \ done ; \ - find ${INSTALLDIR} -exec chown $${installuser} '{}' ';' + -find ${INSTALLDIR} -exec chown $${installuser} '{}' ';' clean mostlyclean: rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \ diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7fa6afba033..ee683375d56 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,78 @@ +2007-11-09 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gud.el (gud-gdb): Remove vestigial gdba doc and code. + +2007-11-09 Sven Joachim <svenjoac@gmx.de> + + * dired-aux.el (dired-copy-file-recursive): + Preserve directory permissions. + +2007-11-09 Juanma Barranquero <lekktu@gmail.com> + + * whitespace.el (whitespace-write-file-hook): Remove interactive spec. + (whitespace-unload-function): New-style unload function. When run, + unintern `whitespace-unload-hook' and call `unload-feature' recursively + to stop the old hook from messing with the unloading. + +2007-11-09 Juanma Barranquero <lekktu@gmail.com> + + * emacs-lisp/elp.el (elp-report-limit, elp-restore-all) + (elp-unset-master, elp-results): Fix typos. + (elp-sort-by-function, elp-use-standard-output, elp-recycle-buffers-p): + Doc fixes. + + * msb.el (msb--many-menus): Remove variable. + (msb-max-menu-items, msb--add-to-menu): Doc fixes. + (msb-menu-cond, msb-item-handling-function, msb--create-function-info) + (msb--toggle-menu-type): Fix typos in docstrings. + + * shadowfile.el (shadow-inhibit-overload, shadow-remove-from-todo) + (shadow-insert-var): Doc fixes. + (shadow-file-match, shadow-define-cluster, shadow-define-regexp-group): + Reflow docstrings. + (shadow-parse-fullname, shadow-read-files): Fix typos in docstrings. + +2007-11-09 Juanma Barranquero <lekktu@gmail.com> + + * ediff-hook.el (ediff, ediff-files, ediff-buffers, ebuffers, ediff3) + (ediff-files3, ediff-buffers3, ebuffers3, erevision, ediff-revision): + Fix typos in autoload docstrings. + +2007-11-09 Richard Stallman <rms@gnu.org> + + * savehist.el (savehist-save): Obey savehist-ignored-variables. + +2007-11-09 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gdb-ui.el (gdb-delete-out-of-scope): New option. + (gdb-var-update-handler-1): Use it. + +2007-11-09 Juanma Barranquero <lekktu@gmail.com> + + * loadhist.el (unload-feature): Remove erroneous check for the + FEATURE-unload-function variable; check the existence of the + function (that's what the docstring says, and it makes more sense). + + * follow.el (follow-unload-function): Add docstring. + (follow-unload-function): Remove variable. + + * server.el (server-unload-function): Remove variable. + (server-unload-function): Unbind `server-edit' from `C-x #'. + + * uniquify.el (uniquify-unload-function): Add docstring. + (uniquify-unload-function): Remove variable. + + * ses.el (ses-unload-function): New function. + +2007-11-09 Juanma Barranquero <lekktu@gmail.com> + + * emacs-lisp/unsafep.el (unsafep, unsafep-function) + (unsafep-progn, unsafep-let): Fix typos in docstrings. + + * uniquify.el (uniquify-maybe-rerationalize-w/o-cb): Define it + before use to avoid a warning in packages that require uniquify. + (uniquify-unload-function): New function and var. + 2007-11-09 Dan Nicolaescu <dann@ics.uci.edu> * ediff-init.el (ediff-xemacs-p, ediff-emacs-p): Remove. diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index e0749f375ae..b9ceb728dbc 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -1160,7 +1160,8 @@ Special value `always' suppresses confirmation." (or (eq recursive 'always) (yes-or-no-p (format "Recursive copies of %s? " from)))) ;; This is a directory. - (let ((files + (let ((mode (file-modes from)) + (files (condition-case err (directory-files from nil dired-re-no-dot) (file-error @@ -1174,7 +1175,9 @@ Special value `always' suppresses confirmation." (if (file-exists-p to) (or top (dired-handle-overwrite to)) (condition-case err - (make-directory to) + (progn + (make-directory to) + (set-file-modes to #o700)) (file-error (push (dired-make-relative from) dired-create-files-failures) @@ -1193,7 +1196,9 @@ Special value `always' suppresses confirmation." (file-error (push (dired-make-relative thisfrom) dired-create-files-failures) - (dired-log "Copying error for %s:\n%s\n" thisfrom err)))))) + (dired-log "Copying error for %s:\n%s\n" thisfrom err))))) + (when (file-directory-p to) + (set-file-modes to mode))) ;; Not a directory. (or top (dired-handle-overwrite to)) (condition-case err diff --git a/lisp/ediff-hook.el b/lisp/ediff-hook.el index 00e6ba6bab2..306b2ed670c 100644 --- a/lisp/ediff-hook.el +++ b/lisp/ediff-hook.el @@ -261,17 +261,17 @@ () ; if dumping, autoloads are set up in loaddefs.el ;; if the user decides to load this file, set up autoloads ;; compare files and buffers - (autoload 'ediff "ediff" "Compare two files" t) - (autoload 'ediff-files "ediff" "Compare two files" t) - (autoload 'ediff-buffers "ediff" "Compare two bufers" t) - (autoload 'ebuffers "ediff" "Compare two bufers" t) - (autoload 'ediff3 "ediff" "Compare three files" t) - (autoload 'ediff-files3 "ediff" "Compare three files" t) - (autoload 'ediff-buffers3 "ediff" "Compare three bufers" t) - (autoload 'ebuffers3 "ediff" "Compare three bufers" t) - - (autoload 'erevision "ediff" "Compare versions of a file" t) - (autoload 'ediff-revision "ediff" "Compare versions of a file" t) + (autoload 'ediff "ediff" "Compare two files." t) + (autoload 'ediff-files "ediff" "Compare two files." t) + (autoload 'ediff-buffers "ediff" "Compare two buffers." t) + (autoload 'ebuffers "ediff" "Compare two buffers." t) + (autoload 'ediff3 "ediff" "Compare three files." t) + (autoload 'ediff-files3 "ediff" "Compare three files." t) + (autoload 'ediff-buffers3 "ediff" "Compare three buffers." t) + (autoload 'ebuffers3 "ediff" "Compare three buffers." t) + + (autoload 'erevision "ediff" "Compare versions of a file." t) + (autoload 'ediff-revision "ediff" "Compare versions of a file." t) ;; compare regions and windows (autoload 'ediff-windows-wordwise diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el index 71231a86df9..c4ba3e4ca9c 100644 --- a/lisp/emacs-lisp/elp.el +++ b/lisp/emacs-lisp/elp.el @@ -147,16 +147,16 @@ Results are displayed with the `elp-results' command." :group 'elp) (defcustom elp-sort-by-function 'elp-sort-by-total-time - "*Non-nil specifies elp results sorting function. + "*Non-nil specifies ELP results sorting function. These functions are currently available: elp-sort-by-call-count -- sort by the highest call count elp-sort-by-total-time -- sort by the highest total time elp-sort-by-average-time -- sort by the highest average times -You can write you're own sort function. It should adhere to the -interface specified by the PRED argument for the `sort' defun. Each -\"element of LIST\" is really a 4 element vector where element 0 is +You can write your own sort function. It should adhere to the +interface specified by the PREDICATE argument for `sort'. +Each \"element of LIST\" is really a 4 element vector where element 0 is the call count, element 1 is the total time spent in the function, element 2 is the average time spent in the function, and element 3 is the symbol's name string." @@ -164,7 +164,7 @@ the symbol's name string." :group 'elp) (defcustom elp-report-limit 1 - "*Prevents some functions from being displayed in the results buffer. + "*Prevent some functions from being displayed in the results buffer. If a number, no function that has been called fewer than that number of times will be displayed in the output buffer. If nil, all functions will be displayed." @@ -173,12 +173,12 @@ functions will be displayed." :group 'elp) (defcustom elp-use-standard-output nil - "*Non-nil says to output to `standard-output' instead of a buffer." + "*If non-nil, output to `standard-output' instead of a buffer." :type 'boolean :group 'elp) (defcustom elp-recycle-buffers-p t - "*nil says to not recycle the `elp-results-buffer'. + "*If nil, don't recycle the `elp-results-buffer'. In other words, a new unique buffer is create every time you run \\[elp-results]." :type 'boolean @@ -372,7 +372,7 @@ Use optional LIST if provided instead." (mapcar 'elp-restore-function list))) (defun elp-restore-all () - "Restores the original definitions of all functions being profiled." + "Restore the original definitions of all functions being profiled." (interactive) (elp-restore-list elp-all-instrumented-list)) @@ -412,7 +412,7 @@ Use optional LIST if provided instead." (elp-instrument-function funsym))) (defun elp-unset-master () - "Unsets the master function." + "Unset the master function." (interactive) ;; when there's no master function, recording is turned on by default. (setq elp-master nil @@ -558,7 +558,7 @@ original definition, use \\[elp-restore-function] or \\[elp-restore-all]." (defun elp-results () "Display current profiling results. If `elp-reset-after-results' is non-nil, then current profiling -information for all instrumented functions are reset after results are +information for all instrumented functions is reset after results are displayed." (interactive) (let ((curbuf (current-buffer)) diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el index d7dd1f19300..3bb93334c3c 100644 --- a/lisp/emacs-lisp/unsafep.el +++ b/lisp/emacs-lisp/unsafep.el @@ -116,9 +116,9 @@ in the parse.") ;;;###autoload (defun unsafep (form &optional unsafep-vars) - "Return nil if evaluating FORM couldn't possibly do any harm; -otherwise result is a reason why FORM is unsafe. UNSAFEP-VARS is a list -of symbols with local bindings." + "Return nil if evaluating FORM couldn't possibly do any harm. +Otherwise result is a reason why FORM is unsafe. +UNSAFEP-VARS is a list of symbols with local bindings." (catch 'unsafep (if (or (eq safe-functions t) ;User turned off safety-checking (atom form)) ;Atoms are never unsafe @@ -213,8 +213,8 @@ of symbols with local bindings." (defun unsafep-function (fun) "Return nil if FUN is a safe function. -\(either a safe lambda or a symbol that names a safe function). Otherwise -result is a reason code." +\(Either a safe lambda or a symbol that names a safe function). +Otherwise result is a reason code." (cond ((eq (car-safe fun) 'lambda) (unsafep fun unsafep-vars)) @@ -226,8 +226,8 @@ result is a reason code." `(function ,fun)))) (defun unsafep-progn (list) - "Return nil if all forms in LIST are safe, or the reason -for the first unsafe form." + "Return nil if all forms in LIST are safe. +Else, return the reason for the first unsafe form." (catch 'unsafep-progn (let (reason) (dolist (x list) @@ -236,8 +236,9 @@ for the first unsafe form." (defun unsafep-let (clause) "Check the safety of a let binding. -CLAUSE is a let-binding, either SYM or (SYM) or (SYM VAL). Checks VAL -and throws a reason to `unsafep' if unsafe. Returns SYM." +CLAUSE is a let-binding, either SYM or (SYM) or (SYM VAL). +Check VAL and throw a reason to `unsafep' if unsafe. +Return SYM." (let (reason sym) (if (atom clause) (setq sym clause) diff --git a/lisp/follow.el b/lisp/follow.el index 50760cd9909..3edc62e5784 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -2163,6 +2163,7 @@ This prevents `mouse-drag-region' from messing things up." ;;{{{ The end (defun follow-unload-function () + "Unload Follow mode library." (easy-menu-remove-item nil '("Tools") "Follow") (follow-stop-intercept-process-output) (dolist (group '((before @@ -2189,10 +2190,9 @@ This prevents `mouse-drag-region' from messing things up." (intern (concat "follow-" (symbol-name fun)))) (ad-update fun)) (error nil)))))) + ;; continue standard processing nil) -(defvar follow-unload-function 'follow-unload-function) - ;; ;; We're done! ;; diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 372db54d91a..617f32b0909 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2007-11-03 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-sum.el (gnus-summary-highlight): Mark as risky local variable. + 2007-11-01 Reiner Steib <Reiner.Steib@gmx.de> * mm-util.el (mm-charset-eval-alist): Mark as risky local variable. @@ -21,6 +25,10 @@ (gnus-article-prev-page): Honor gnus-article-over-scroll when moving back to the previous page. +2007-10-30 Reiner Steib <Reiner.Steib@gmx.de> + + * qp.el (quoted-printable-decode-string): Fix typo in doc string. + 2007-10-30 Katsumi Yamaoka <yamaoka@jpl.org> * gnus-ems.el (gnus-x-splash): Work even if there's no scroll bar. diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 5709de62b19..bc5ed9f0fb5 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -1080,6 +1080,7 @@ uncached: Non-nil if the article is uncached." :group 'gnus-summary-visual :type '(repeat (cons (sexp :tag "Form" nil) face))) +(put 'gnus-summary-highlight 'risky-local-variable t) (defcustom gnus-alter-header-function nil "Function called to allow alteration of article header structures. diff --git a/lisp/gnus/qp.el b/lisp/gnus/qp.el index d601222160d..5689a70f3ac 100644 --- a/lisp/gnus/qp.el +++ b/lisp/gnus/qp.el @@ -82,7 +82,7 @@ them into characters should be done separately." (defun quoted-printable-decode-string (string &optional coding-system) "Decode the quoted-printable encoded STRING and return the result. -If CODING-SYSTEM is non-nil, decode the region with coding-system. +If CODING-SYSTEM is non-nil, decode the string with coding-system. Use of CODING-SYSTEM is deprecated; this function should deal with raw bytes, and coding conversion should be done separately." (mm-with-unibyte-buffer diff --git a/lisp/loadhist.el b/lisp/loadhist.el index 82bab11a7ce..0c1766143d6 100644 --- a/lisp/loadhist.el +++ b/lisp/loadhist.el @@ -191,7 +191,7 @@ something strange, such as redefining an Emacs function." (unload-func (intern-soft (concat name "-unload-function")))) ;; If FEATURE-unload-function is defined and returns non-nil, ;; don't try to do anything more; otherwise proceed normally. - (unless (and (bound-and-true-p unload-func) + (unless (and (fboundp unload-func) (funcall unload-func)) ;; Try to avoid losing badly when hooks installed in critical ;; places go away. (Some packages install things on diff --git a/lisp/msb.el b/lisp/msb.el index b67e471c229..cc5a0adcded 100644 --- a/lisp/msb.el +++ b/lisp/msb.el @@ -190,9 +190,6 @@ 3099 "Other files (%d)"))) -;; msb--many-menus is obsolete -(defvar msb--many-menus msb--very-many-menus) - ;;; ;;; Customizable variables ;;; @@ -235,12 +232,12 @@ A value of nil means don't display this menu. MENU-TITLE is really a format. If you add %d in it, the %d is replaced with the number of items in that menu. -ITEM-HANDLING-FN, is optional. If it is supplied and is a function, -than it is used for displaying the items in that particular buffer +ITEM-HANDLING-FN is optional. If it is supplied and is a function, +then it is used for displaying the items in that particular buffer menu, otherwise the function pointed out by `msb-item-handling-function' is used. -ITEM-SORT-FN, is also optional. +ITEM-SORT-FN is also optional. If it is not supplied, the function pointed out by `msb-item-sort-function' is used. If it is nil, then no sort takes place and the buffers are presented @@ -282,7 +279,7 @@ that differs by this value or more." (defcustom msb-max-menu-items 15 "*The maximum number of items in a menu. If this variable is set to 15 for instance, then the submenu will be -split up in minor parts, 15 items each. nil means no limit." +split up in minor parts, 15 items each. A value of nil means no limit." :type '(choice integer (const nil)) :set 'msb-custom-set :group 'msb) @@ -336,7 +333,7 @@ names that starts with a space character." "*The appearance of a buffer menu. The default function to call for handling the appearance of a menu -item. It should take to arguments, BUFFER and MAX-BUFFER-NAME-LENGTH, +item. It should take two arguments, BUFFER and MAX-BUFFER-NAME-LENGTH, where the latter is the max length of all buffer names. The function should return the string to use in the menu. @@ -664,7 +661,7 @@ If the argument is left out or nil, then the current buffer is considered." (defun msb--create-function-info (menu-cond-elt) "Create a vector from an element MENU-COND-ELT of `msb-menu-cond'. This takes the form: -\]BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER) +\[BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER] See `msb-menu-cond' for a description of its elements." (let* ((list-symbol (make-symbol "-msb-buffer-list")) (tmp-ih (and (> (length menu-cond-elt) 3) @@ -727,7 +724,7 @@ See `msb-menu-cond' for a description of its elements." (defun msb--add-to-menu (buffer function-info max-buffer-name-length) "Add BUFFER to the menu depicted by FUNCTION-INFO. All side-effects. Adds an element of form (BUFFER-TITLE . BUFFER) -to the buffer-list variable in function-info." +to the buffer-list variable in FUNCTION-INFO." (let ((list-symbol (aref function-info 0))) ;BUFFER-LIST-VARIABLE ;; Here comes the hairy side-effect! (set list-symbol @@ -961,7 +958,7 @@ It takes the form ((TITLE . BUFFER-LIST)...)." (msb--create-buffer-menu-2)))) (defun msb--toggle-menu-type () - "Multi purpose function for selecting a buffer with the mouse." + "Multi-purpose function for selecting a buffer with the mouse." (interactive) (setq msb-files-by-directory (not msb-files-by-directory)) ;; This gets a warning, but it is correct, diff --git a/lisp/net/tls.el b/lisp/net/tls.el index 0643aca5d80..c2d9a826157 100644 --- a/lisp/net/tls.el +++ b/lisp/net/tls.el @@ -51,6 +51,9 @@ (autoload 'format-spec "format-spec") (autoload 'format-spec-make "format-spec")) +(eval-when-compile + (require 'rx)) + (defgroup tls nil "Transport Layer Security (TLS) parameters." :group 'comm) diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index c6ae98c5b12..0d1a4b05d65 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el @@ -947,6 +947,12 @@ Changed values are highlighted with the face `font-lock-warning-face'." :group 'gud :version "22.1") +(defcustom gdb-delete-out-of-scope t + "If non-nil delete watch expressions automatically when they go out of scope." + :type 'boolean + :group 'gud + :version "22.2") + (defun gdb-speedbar-expand-node (text token indent) "Expand the node the user clicked on. TEXT is the text of the button we clicked on, a + or - item. @@ -3515,7 +3521,9 @@ in_scope=\"\\(.*?\\)\".*?}") (when var (let ((match (match-string 3))) (cond ((string-equal match "false") - (setcar (nthcdr 5 var) 'out-of-scope)) + (if gdb-delete-out-of-scope + (gdb-var-delete-1 varnum) + (setcar (nthcdr 5 var) 'out-of-scope))) ((string-equal match "true") (setcar (nthcdr 5 var) 'changed) (setcar (nthcdr 4 var) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 50dcd6a83bf..ce231f4c662 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -709,25 +709,14 @@ The option \"--fullname\" must be included in this value." (defvar gud-filter-pending-text nil "Non-nil means this is text that has been saved for later in `gud-filter'.") -;; The old gdb command. The new one is in gdb-ui.el. +;; The old gdb command (text command mode). The new one is in gdb-ui.el. ;;;###autoload (defun gud-gdb (command-line) "Run gdb on program FILE in buffer *gud-FILE*. The directory containing FILE becomes the initial working -directory and source-file directory for your debugger. By -default this command starts GDB using a graphical interface. See -`gdba' for more information. - -To run GDB in text command mode, replace the GDB \"--annotate=3\" -option with \"--fullname\" either in the minibuffer for the -current Emacs session, or the custom variable -`gud-gdb-command-name' for all future sessions. You need to use -text command mode to debug multiple programs within one Emacs -session." +directory and source-file directory for your debugger." (interactive (list (gud-query-cmdline 'gud-gdb))) - (require 'gdb-ui) - (when (and gud-comint-buffer (buffer-name gud-comint-buffer) (get-buffer-process gud-comint-buffer) @@ -736,8 +725,8 @@ session." (error "Multiple debugging requires restarting in text command mode")) - (gud-common-init command-line nil 'gud-gdba-marker-filter) - (set (make-local-variable 'gud-minor-mode) 'gdba) + (gud-common-init command-line nil 'gud-gdb-marker-filter) + (set (make-local-variable 'gud-minor-mode) 'gdb) (gud-def gud-break "break %f:%l" "\C-b" "Set breakpoint at current line.") (gud-def gud-tbreak "tbreak %f:%l" "\C-t" diff --git a/lisp/savehist.el b/lisp/savehist.el index 7cc56842d4b..705be69088d 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -308,7 +308,8 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, (current-buffer)) (insert ?\n) (dolist (symbol savehist-minibuffer-history-variables) - (when (boundp symbol) + (when (and (boundp symbol) + (not (memq symbol savehist-ignored-variables))) (let ((value (savehist-trim-history (symbol-value symbol))) excess-space) (when value ; Don't save empty histories. diff --git a/lisp/server.el b/lisp/server.el index bbebe784636..c263a21a6cf 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1287,6 +1287,7 @@ only these files will be asked to be saved." (defun server-unload-function () "Unload the server library." (server-mode -1) + (substitute-key-definition 'server-edit nil ctl-x-map) (save-current-buffer (dolist (buffer (buffer-list)) (set-buffer buffer) @@ -1294,7 +1295,10 @@ only these files will be asked to be saved." ;; continue standard unloading nil) +(add-hook 'kill-emacs-hook (lambda () (server-mode -1))) ;Cleanup upon exit. + (defvar server-unload-function 'server-unload-function) + (provide 'server) diff --git a/lisp/ses.el b/lisp/ses.el index 62067471b60..f76befa874d 100644 --- a/lisp/ses.el +++ b/lisp/ses.el @@ -2921,7 +2921,7 @@ TEST is evaluated." ;;---------------------------------------------------------------------------- ;;These functions use the variables 'row' and 'col' that are -;;dynamically bound by ses-print-cell. We define these varables at +;;dynamically bound by ses-print-cell. We define these variables at ;;compile-time to make the compiler happy. (eval-when-compile (dolist (x '(row col)) @@ -2980,6 +2980,19 @@ current column and continues until the next nonblank column." (dolist (x (cons 'ses-unsafe ses-standard-printer-functions)) (put x 'side-effect-free t)) +(defun ses-unload-function () + "Unload the Simple Emacs Spreadsheet." + (dolist (fun '(copy-region-as-kill yank)) + (ad-remove-advice fun 'around (intern (concat "ses-" (symbol-name fun)))) + (ad-update fun)) + (save-current-buffer + (dolist (buf (buffer-list)) + (set-buffer buf) + (when (eq major-mode 'ses-mode) + (funcall (or default-major-mode 'fundamental-mode))))) + ;; continue standard unloading + nil) + (provide 'ses) ;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3 diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el index ca06ace2214..be30ccc8c6a 100644 --- a/lisp/shadowfile.el +++ b/lisp/shadowfile.el @@ -103,8 +103,8 @@ is no buffer currently visiting the file." (defcustom shadow-inhibit-overload nil "If non-nil, shadowfile won't redefine \\[save-buffers-kill-emacs]. -Normally it overloads the function `save-buffers-kill-emacs' to check -for files have been changed and need to be copied to other systems." +Normally it overloads the function `save-buffers-kill-emacs' to check for +files that have been changed and need to be copied to other systems." :type 'boolean :group 'shadow) @@ -299,7 +299,7 @@ be matched against the primary of SITE2." (defun shadow-parse-fullname (fullname) "Parse FULLNAME into \(site user path) list. -Leave it alone if it already is one. Returns nil if the argument is +Leave it alone if it already is one. Return nil if the argument is not a full ange-ftp pathname." (if (listp fullname) fullname @@ -392,9 +392,9 @@ local filename." "Return t if PATTERN matches FILE. If REGEXP is supplied and non-nil, the file part of the pattern is a regular expression, otherwise it must match exactly. The sites and usernames must -match---see `shadow-same-site'. The pattern must be in full ange-ftp format, but -the file can be any valid filename. This function does not do any filename -expansion or contraction, you must do that yourself first." +match---see `shadow-same-site'. The pattern must be in full ange-ftp format, +but the file can be any valid filename. This function does not do any +filename expansion or contraction, you must do that yourself first." (let* ((pattern-sup (shadow-parse-fullname pattern)) (file-sup (shadow-parse-name file))) (and (shadow-same-site pattern-sup file-sup) @@ -412,8 +412,8 @@ expansion or contraction, you must do that yourself first." This is a group of hosts that share directories, so that copying to or from one of them is sufficient to update the file on all of them. Clusters are defined by a name, the network address of a primary host \(the one we copy -files to), and a regular expression that matches the hostnames of all the sites -in the cluster." +files to), and a regular expression that matches the hostnames of all the +sites in the cluster." (interactive (list (completing-read "Cluster name: " shadow-clusters () ()))) (let* ((old (shadow-get-cluster name)) (primary (read-string "Primary host: " @@ -469,8 +469,8 @@ specific hostnames, or names of clusters \(see `shadow-define-cluster')." "Make each of a group of files be shared between hosts. Prompts for regular expression; files matching this are shared between a list of sites, which are also prompted for. The filenames must be identical on all -hosts \(if they aren't, use `shadow-define-literal-group' instead of this function). -Each site can be either a hostname or the name of a cluster \(see +hosts \(if they aren't, use `shadow-define-literal-group' instead of this +function). Each site can be either a hostname or the name of a cluster \(see `shadow-define-cluster')." (interactive) (let ((regexp (read-string @@ -639,7 +639,7 @@ Consider them as regular expressions if third arg REGEXP is true." (defun shadow-remove-from-todo (pair) "Remove PAIR from `shadow-files-to-copy'. -PAIR must be (eq to) one of the elements of that list." +PAIR must be `eq' to one of the elements of that list." (setq shadow-files-to-copy (shadow-remove-if (function (lambda (s) (eq s pair))) shadow-files-to-copy))) @@ -647,7 +647,7 @@ PAIR must be (eq to) one of the elements of that list." (defun shadow-read-files () "Visit and load `shadow-info-file' and `shadow-todo-file'. Thus restores shadowfile's state from your last Emacs session. -Returns t unless files were locked; then returns nil." +Return t unless files were locked; then return nil." (interactive) (if (and (fboundp 'file-locked-p) (or (stringp (file-locked-p shadow-info-file)) @@ -723,8 +723,9 @@ With non-nil argument also saves the buffer." (setq shadow-hashtable (make-vector 37 0))) (defun shadow-insert-var (variable) - "Prettily insert a `setq' command for VARIABLE, -which, when later evaluated, will restore it to its current setting. + "Build a `setq' to restore VARIABLE. +Prettily insert a `setq' command which, when later evaluated, +will restore VARIABLE to its current setting. VARIABLE must be the name of a variable whose value is a list." (let ((standard-output (current-buffer))) (insert (format "(setq %s" variable)) diff --git a/lisp/strokes.el b/lisp/strokes.el index 73e5594664a..d4fcdb66f61 100644 --- a/lisp/strokes.el +++ b/lisp/strokes.el @@ -1371,7 +1371,9 @@ If STROKES-MAP is not given, `strokes-global-map' will be used instead." (defun strokes-alphabetic-lessp (stroke1 stroke2) "Return t if STROKE1's command name precedes STROKE2's in lexicographic order." - (string-lessp (cdr stroke1) (cdr stroke2))) + (let ((command-name-1 (symbol-name (cdr stroke1))) + (command-name-2 (symbol-name (cdr stroke2)))) + (string-lessp command-name-1 command-name-2))) (defvar strokes-mode-map (let ((map (make-sparse-keymap))) diff --git a/lisp/uniquify.el b/lisp/uniquify.el index 254832ed700..492918c7f96 100644 --- a/lisp/uniquify.el +++ b/lisp/uniquify.el @@ -421,6 +421,23 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." ;;; Hooks from the rest of Emacs +;; Buffer deletion +;; Rerationalize after a buffer is killed, to reduce coinciding buffer names. +;; This mechanism uses `kill-buffer-hook', which runs *before* deletion, so +;; it calls `uniquify-rerationalize-w/o-cb' to rerationalize the buffer list +;; ignoring the current buffer (which is going to be deleted anyway). +(defun uniquify-maybe-rerationalize-w/o-cb () + "Re-rationalize buffer names, ignoring current buffer. +For use on `kill-buffer-hook'." + (if (and (cdr uniquify-managed) + uniquify-buffer-name-style + uniquify-after-kill-buffer-p) + (uniquify-rerationalize-w/o-cb uniquify-managed))) + +;; Ideally we'd like to add it buffer-locally, but that doesn't work +;; because kill-buffer-hook is not permanent-local :-( +(add-hook 'kill-buffer-hook 'uniquify-maybe-rerationalize-w/o-cb) + ;; The logical place to put all this code is in generate-new-buffer-name. ;; It's written in C, so we would add a generate-new-buffer-name-function ;; which, if non-nil, would be called instead of the C. One problem with @@ -458,22 +475,24 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil." (file-name-nondirectory filename) (file-name-directory filename) ad-return-value)))) -;; Buffer deletion -;; Rerationalize after a buffer is killed, to reduce coinciding buffer names. -;; This mechanism uses `kill-buffer-hook', which runs *before* deletion, so -;; it calls `uniquify-rerationalize-w/o-cb' to rerationalize the buffer list -;; ignoring the current buffer (which is going to be deleted anyway). -(defun uniquify-maybe-rerationalize-w/o-cb () - "Re-rationalize buffer names, ignoring current buffer. -For use on `kill-buffer-hook'." - (if (and (cdr uniquify-managed) - uniquify-buffer-name-style - uniquify-after-kill-buffer-p) - (uniquify-rerationalize-w/o-cb uniquify-managed))) - -;; Ideally we'd like to add it buffer-locally, but that doesn't work -;; because kill-buffer-hook is not permanent-local :-( -(add-hook 'kill-buffer-hook 'uniquify-maybe-rerationalize-w/o-cb) +;;; The End + +(defun uniquify-unload-function () + "Unload the uniquify library." + (save-current-buffer + (let ((buffers nil)) + (dolist (buf (buffer-list)) + (set-buffer buf) + (when uniquify-managed + (push (cons buf (uniquify-item-base (car uniquify-managed))) buffers))) + (dolist (fun '(rename-buffer create-file-buffer)) + (ad-remove-advice fun 'after (intern (concat (symbol-name fun) "-uniquify"))) + (ad-update fun)) + (dolist (buf buffers) + (set-buffer (car buf)) + (rename-buffer (cdr buf) t)))) + ;; continue standard uploading + nil) (provide 'uniquify) diff --git a/lisp/whitespace.el b/lisp/whitespace.el index 6e6aeb5fbb7..f6c94534a00 100644 --- a/lisp/whitespace.el +++ b/lisp/whitespace.el @@ -784,7 +784,6 @@ When this mode is active, `whitespace-buffer' is added to (defun whitespace-write-file-hook () "Hook function to be called on the buffer when whitespace check is enabled. This is meant to be added buffer-locally to `write-file-functions'." - (interactive) (let ((werr nil)) (if whitespace-auto-cleanup (whitespace-cleanup-internal) @@ -794,6 +793,21 @@ This is meant to be added buffer-locally to `write-file-functions'." buffer-file-name)))) nil) +(defun whitespace-unload-function () + "Unload the whitespace library." + (if (unintern "whitespace-unload-hook") + ;; if whitespace-unload-hook is defined, let's get rid of it + ;; and recursively call `unload-feature' + (progn (unload-feature 'whitespace) t) + ;; this only happens in the recursive call + (whitespace-global-mode -1) + (save-current-buffer + (dolist (buf (buffer-list)) + (set-buffer buf) + (remove-hook 'write-file-functions 'whitespace-write-file-hook t))) + ;; continue standard unloading + nil)) + (defun whitespace-unload-hook () (remove-hook 'find-file-hook 'whitespace-buffer) (remove-hook 'write-file-functions 'whitespace-write-file-hook t) diff --git a/src/ChangeLog b/src/ChangeLog index d6a6b80f89c..90338e217b3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,60 @@ +2007-11-09 Chong Yidong <cyd@stupidchicken.com> + + * dispextern.h (struct it): Don't define OVERLAY_STRING_CHUNK_SIZE + twice. + + * xdisp.c (handle_face_prop): Fix last change. + +2007-11-09 Richard Stallman <rms@gnu.org> + + * xdisp.c (handle_face_prop): Test for strings that came from overlays, + not just for after-strings and before-strings. + Call face_for_overlay_string and pass the overlay to it. + (handle_display_prop): Determine whether property came from an overlay. + Pass OVERLAY arg to handle_single_display_spec. + (handle_single_display_spec): New arg OVERLAY sets it->from_overlay. + (load_overlay_strings): Fill in it->string_overlays. + (get_overlay_strings_1, push_it, pop_it): Handle it->from_overlays. + + * xfaces.c (face_for_overlay_string): Function renamed from + face_at_buffer_position_no_overlays, and add arg OVERLAY. + + * dispextern.h (struct it): New elt string_overlays. + New elt from_overlay, also in stack. + Rearrange a few elements. + (face_for_overlay_string): Decl renamed from + face_at_buffer_position_no_overlays, and add argument. + +2007-11-09 Richard Stallman <rms@gnu.org> + + * xdisp.c (handle_face_prop): Use face_at_buffer_position_no_overlays + to get the base face for an overlay string. + + * dispextern.h (face_at_buffer_position_no_overlays): Add decl. + + * xfaces.c (face_at_buffer_position_no_overlays): New function. + + * xdisp.c (handle_stop): Move some code out of loop. + +2007-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macfns.c [USE_ATSUI] (Fmac_atsu_font_face_attributes): + Fix conversion from Lisp object to ATSUFontID. + +2007-11-09 Jason Rumney <jasonr@gnu.org> + + * xdisp.c (Fformat_mode_line): Do nothing when noninteractive. + +2007-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * unexmacosx.c (unexec_regions_recorder, unexec_regions_merge): + Don't assume regions are aligned to page boundary. + (print_load_command_name): Add LC_UUID if defined. + +2007-11-09 Richard Stallman <rms@gnu.org> + + * emacs.c (syms_of_emacs) <installation-directory>: Reflow docstring. + 2007-11-07 Jason Rumney <jasonr@gnu.org> * s/windows95.h: Remove. diff --git a/src/dispextern.h b/src/dispextern.h index fd4d8ebec9d..8e792a50fb4 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1803,6 +1803,9 @@ struct it_slice Lisp_Object height; }; +/* Input sources for fetching characters or data to display. + The input source is found in the `method' field. */ + enum it_method { GET_FROM_BUFFER = 0, GET_FROM_DISPLAY_VECTOR, @@ -1904,20 +1907,27 @@ struct it position in overlay strings etc. */ struct display_pos current; + /* Total number of overlay strings to process. This can be > + OVERLAY_STRING_CHUNK_SIZE. */ + int n_overlay_strings; + /* Vector of overlays to process. Overlay strings are processed OVERLAY_STRING_CHUNK_SIZE at a time. */ #define OVERLAY_STRING_CHUNK_SIZE 16 Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE]; - /* Total number of overlay strings to process. This can be > - OVERLAY_STRING_CHUNK_SIZE. */ - int n_overlay_strings; + /* For each overlay string, the overlay it came from. */ + Lisp_Object string_overlays[OVERLAY_STRING_CHUNK_SIZE]; /* If non-nil, a Lisp string being processed. If current.overlay_string_index >= 0, this is an overlay string from pos. */ Lisp_Object string; + /* If non-nil, we are processing a string that came + from a `display' property given by an overlay. */ + Lisp_Object from_overlay; + /* Stack of saved values. New entries are pushed when we begin to process an overlay string or a string from a `glyph' property. Entries are popped when we return to deliver display elements @@ -1953,6 +1963,7 @@ struct it /* current text and display positions. */ struct text_pos position; struct display_pos current; + Lisp_Object from_overlay; enum glyph_row_area area; enum it_method method; unsigned multibyte_p : 1; @@ -1969,13 +1980,6 @@ struct it /* Stack pointer. */ int sp; - /* Setting of buffer-local variable selective-display-ellipsis. */ - unsigned selective_display_ellipsis_p : 1; - - /* 1 means control characters are translated into the form `^C' - where the `^' can be replaced by a display table entry. */ - unsigned ctl_arrow_p : 1; - /* -1 means selective display hides everything between a \r and the next newline; > 0 means hide lines indented more than that value. */ int selective; @@ -1987,6 +1991,16 @@ struct it /* Face to use. */ int face_id; + /* Setting of buffer-local variable selective-display-ellipsis. */ + unsigned selective_display_ellipsis_p : 1; + + /* 1 means control characters are translated into the form `^C' + where the `^' can be replaced by a display table entry. */ + unsigned ctl_arrow_p : 1; + + /* 1 means lines are truncated. */ + unsigned truncate_lines_p : 1; + /* Non-zero means that the current face has a box. */ unsigned face_box_p : 1; @@ -2066,9 +2080,6 @@ struct it Lisp_Object object; struct text_pos position; - /* 1 means lines are truncated. */ - unsigned truncate_lines_p : 1; - /* Number of columns per \t. */ short tab_width; @@ -2845,6 +2856,9 @@ void free_frame_faces P_ ((struct frame *)); void recompute_basic_faces P_ ((struct frame *)); int face_at_buffer_position P_ ((struct window *, int, int, int, int *, int, int)); +int face_for_overlay_string P_ ((struct window *, int, int, + int, int *, + int, int, Lisp_Object)); int face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int, int, int *, enum face_id, int)); int merge_faces P_ ((struct frame *, Lisp_Object, int, int)); diff --git a/src/emacs.c b/src/emacs.c index 2d47114e16d..8a51b8cb8e4 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -2510,8 +2510,9 @@ The value is nil if that directory's name is not known. */); DEFVAR_LISP ("installation-directory", &Vinstallation_directory, doc: /* A directory within which to look for the `lib-src' and `etc' directories. -This is non-nil when we can't find those directories in their standard installed -locations, but we can find them near where the Emacs executable was found. */); +This is non-nil when we can't find those directories in their standard +installed locations, but we can find them near where the Emacs executable +was found. */); Vinstallation_directory = Qnil; DEFVAR_LISP ("system-messages-locale", &Vsystem_messages_locale, diff --git a/src/macfns.c b/src/macfns.c index 56ef81c9701..9161a0b6c6e 100644 --- a/src/macfns.c +++ b/src/macfns.c @@ -4644,8 +4644,8 @@ ID is specified by either an integer or a float. */) Lisp_Object result; check_mac (); - CHECK_NUMBER_OR_FLOAT(id); - font_id = NUMBERP (id) ? XINT (id) : (ATSUFontID) XFLOAT (id); + CHECK_NUMBER_OR_FLOAT (id); + font_id = INTEGERP (id) ? XINT (id) : XFLOAT_DATA (id); BLOCK_INPUT; result = mac_atsu_font_face_attributes (font_id); UNBLOCK_INPUT; diff --git a/src/textprop.c b/src/textprop.c index e8ba1d87afc..f7b50755ed1 100644 --- a/src/textprop.c +++ b/src/textprop.c @@ -713,7 +713,7 @@ POSITION is at the end of OBJECT, both car and cdr are nil. */) Lisp_Object overlay; Lisp_Object val = get_char_property_and_overlay (position, prop, object, &overlay); - return Fcons(val, overlay); + return Fcons (val, overlay); } diff --git a/src/unexmacosx.c b/src/unexmacosx.c index e9664f94bbc..3646aec6983 100644 --- a/src/unexmacosx.c +++ b/src/unexmacosx.c @@ -443,15 +443,13 @@ unexec_regions_recorder (task_t task, void *rr, unsigned type, while (num && num_unexec_regions < MAX_UNEXEC_REGIONS) { - /* Subtract the size of trailing null pages from filesize. It + /* Subtract the size of trailing null bytes from filesize. It can be smaller than vmsize in segment commands. In such a - case, trailing pages are initialized with zeros. */ - for (p = ranges->address + ranges->size; p > ranges->address; - p -= sizeof (int)) - if (*(((int *) p)-1)) - break; - filesize = ROUNDUP_TO_PAGE_BOUNDARY (p - ranges->address); - assert (filesize <= ranges->size); + case, trailing bytes are initialized with zeros. */ + for (p = ranges->address + ranges->size; p > ranges->address; p--) + if (*(((char *) p)-1)) + break; + filesize = p - ranges->address; unexec_regions[num_unexec_regions].filesize = filesize; unexec_regions[num_unexec_regions++].range = *ranges; @@ -503,11 +501,19 @@ unexec_regions_merge () { int i, n; unexec_region_info r; + vm_size_t padsize; qsort (unexec_regions, num_unexec_regions, sizeof (unexec_regions[0]), &unexec_regions_sort_compare); n = 0; r = unexec_regions[0]; + padsize = r.range.address & (pagesize - 1); + if (padsize) + { + r.range.address -= padsize; + r.range.size += padsize; + r.filesize += padsize; + } for (i = 1; i < num_unexec_regions; i++) { if (r.range.address + r.range.size == unexec_regions[i].range.address @@ -520,6 +526,17 @@ unexec_regions_merge () { unexec_regions[n++] = r; r = unexec_regions[i]; + padsize = r.range.address & (pagesize - 1); + if (padsize) + { + if ((unexec_regions[n-1].range.address + + unexec_regions[n-1].range.size) == r.range.address) + unexec_regions[n-1].range.size -= padsize; + + r.range.address -= padsize; + r.range.size += padsize; + r.filesize += padsize; + } } } unexec_regions[n++] = r; @@ -562,6 +579,11 @@ print_load_command_name (int lc) case LC_TWOLEVEL_HINTS: printf ("LC_TWOLEVEL_HINTS"); break; +#ifdef LC_UUID + case LC_UUID: + printf ("LC_UUID "); + break; +#endif default: printf ("unknown "); } diff --git a/src/xdisp.c b/src/xdisp.c index 43e5a953e50..ed8d54cfaef 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -954,8 +954,8 @@ static void compute_string_pos P_ ((struct text_pos *, struct text_pos, static int face_before_or_after_it_pos P_ ((struct it *, int)); static int next_overlay_change P_ ((int)); static int handle_single_display_spec P_ ((struct it *, Lisp_Object, - Lisp_Object, struct text_pos *, - int)); + Lisp_Object, Lisp_Object, + struct text_pos *, int)); static int underlying_face_id P_ ((struct it *)); static int in_ellipses_for_invisible_text_p P_ ((struct display_pos *, struct window *)); @@ -3060,16 +3060,18 @@ handle_stop (it) if (it->method == GET_FROM_DISPLAY_VECTOR) handle_overlay_change_p = 0; - /* Handle overlay changes. */ + /* Handle overlay changes. + This sets HANDLED to HANDLED_RECOMPUTE_PROPS + if it finds overlays. */ if (handle_overlay_change_p) handled = handle_overlay_change (it); - - /* Determine where to stop next. */ - if (handled == HANDLED_NORMALLY) - compute_stop_pos (it); } } while (handled == HANDLED_RECOMPUTE_PROPS); + + /* Determine where to stop next. */ + if (handled == HANDLED_NORMALLY) + compute_stop_pos (it); } @@ -3350,18 +3352,58 @@ handle_face_prop (it) else { int base_face_id, bufpos; + int i; + Lisp_Object from_overlay + = (it->current.overlay_string_index >= 0 + ? it->string_overlays[it->current.overlay_string_index] + : Qnil); + + /* See if we got to this string directly or indirectly from + an overlay property. That includes the before-string or + after-string of an overlay, strings in display properties + provided by an overlay, their text properties, etc. + + FROM_OVERLAY is the overlay that brought us here, or nil if none. */ + if (! NILP (from_overlay)) + for (i = it->sp - 1; i >= 0; i--) + { + if (it->stack[i].current.overlay_string_index >= 0) + from_overlay + = it->string_overlays[it->stack[i].current.overlay_string_index]; + else if (! NILP (it->stack[i].from_overlay)) + from_overlay = it->stack[i].from_overlay; - if (it->current.overlay_string_index >= 0) - bufpos = IT_CHARPOS (*it); + if (!NILP (from_overlay)) + break; + } + + if (! NILP (from_overlay)) + { + bufpos = IT_CHARPOS (*it); + /* For a string from an overlay, the base face depends + only on text properties and ignores overlays. */ + base_face_id + = face_for_overlay_string (it->w, + IT_CHARPOS (*it), + it->region_beg_charpos, + it->region_end_charpos, + &next_stop, + (IT_CHARPOS (*it) + + TEXT_PROP_DISTANCE_LIMIT), + 0, + from_overlay); + } else - bufpos = 0; + { + bufpos = 0; - /* For strings from a buffer, i.e. overlay strings or strings - from a `display' property, use the face at IT's current - buffer position as the base face to merge with, so that - overlay strings appear in the same face as surrounding - text, unless they specify their own faces. */ - base_face_id = underlying_face_id (it); + /* For strings from a `display' property, use the face at + IT's current buffer position as the base face to merge + with, so that overlay strings appear in the same face as + surrounding text, unless they specify their own + faces. */ + base_face_id = underlying_face_id (it); + } new_face_id = face_at_string_position (it->w, it->string, @@ -3772,7 +3814,7 @@ static enum prop_handled handle_display_prop (it) struct it *it; { - Lisp_Object prop, object; + Lisp_Object prop, object, overlay; struct text_pos *position; /* Nonzero if some property replaces the display of the text itself. */ int display_replaced_p = 0; @@ -3800,10 +3842,12 @@ handle_display_prop (it) if (!it->string_from_display_prop_p) it->area = TEXT_AREA; - prop = Fget_char_property (make_number (position->charpos), - Qdisplay, object); + prop = get_char_property_and_overlay (make_number (position->charpos), + Qdisplay, object, &overlay); if (NILP (prop)) return HANDLED_NORMALLY; + /* Now OVERLAY is the overlay that gave us this property, or nil + if it was a text property. */ if (!STRINGP (it->string)) object = it->w->buffer; @@ -3825,7 +3869,7 @@ handle_display_prop (it) { for (; CONSP (prop); prop = XCDR (prop)) { - if (handle_single_display_spec (it, XCAR (prop), object, + if (handle_single_display_spec (it, XCAR (prop), object, overlay, position, display_replaced_p)) { display_replaced_p = 1; @@ -3840,7 +3884,7 @@ handle_display_prop (it) { int i; for (i = 0; i < ASIZE (prop); ++i) - if (handle_single_display_spec (it, AREF (prop, i), object, + if (handle_single_display_spec (it, AREF (prop, i), object, overlay, position, display_replaced_p)) { display_replaced_p = 1; @@ -3852,7 +3896,8 @@ handle_display_prop (it) } else { - int ret = handle_single_display_spec (it, prop, object, position, 0); + int ret = handle_single_display_spec (it, prop, object, overlay, + position, 0); if (ret < 0) /* Replaced by "", i.e. nothing. */ return HANDLED_RECOMPUTE_PROPS; if (ret) @@ -3894,6 +3939,9 @@ display_prop_end (it, object, start_pos) replaced text display with something else, for example an image; we ignore such properties after the first one has been processed. + OVERLAY is the overlay this `display' property came from, + or nil if it was a text property. + If PROP is a `space' or `image' specification, and in some other cases too, set *POSITION to the position where the `display' property ends. @@ -3903,11 +3951,12 @@ display_prop_end (it, object, start_pos) "something" is "nothing". */ static int -handle_single_display_spec (it, spec, object, position, +handle_single_display_spec (it, spec, object, overlay, position, display_replaced_before_p) struct it *it; Lisp_Object spec; Lisp_Object object; + Lisp_Object overlay; struct text_pos *position; int display_replaced_before_p; { @@ -4017,7 +4066,7 @@ handle_single_display_spec (it, spec, object, position, return 0; } - /* Handle `(space_width WIDTH)'. */ + /* Handle `(space-width WIDTH)'. */ if (CONSP (spec) && EQ (XCAR (spec), Qspace_width) && CONSP (XCDR (spec))) @@ -4141,6 +4190,7 @@ handle_single_display_spec (it, spec, object, position, it->position = start_pos; it->object = NILP (object) ? it->w->buffer : object; it->method = GET_FROM_IMAGE; + it->from_overlay = Qnil; it->face_id = face_id; /* Say that we haven't consumed the characters with @@ -4211,6 +4261,7 @@ handle_single_display_spec (it, spec, object, position, it->position = *position; push_it (it); it->position = save_pos; + it->from_overlay = overlay; if (NILP (location)) it->area = TEXT_AREA; @@ -4854,7 +4905,10 @@ load_overlay_strings (it, charpos) i = 0; j = it->current.overlay_string_index; while (i < OVERLAY_STRING_CHUNK_SIZE && j < n) - it->overlay_strings[i++] = entries[j++].string; + { + it->overlay_strings[i++] = entries[j++].string; + it->string_overlays[i++] = entries[j++].overlay; + } CHECK_IT (it); } @@ -4900,6 +4954,7 @@ get_overlay_strings_1 (it, charpos, compute_stop_p) string. */ IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = 0; it->string = it->overlay_strings[0]; + it->from_overlay = Qnil; it->stop_charpos = 0; xassert (STRINGP (it->string)); it->end_charpos = SCHARS (it->string); @@ -4953,6 +5008,7 @@ push_it (it) p->face_id = it->face_id; p->string = it->string; p->method = it->method; + p->from_overlay = it->from_overlay; switch (p->method) { case GET_FROM_IMAGE: @@ -5006,6 +5062,7 @@ pop_it (it) it->current = p->current; it->position = p->position; it->string = p->string; + it->from_overlay = p->from_overlay; if (NILP (it->string)) SET_TEXT_POS (it->current.string_pos, -1, -1); it->method = p->method; @@ -17388,7 +17445,9 @@ are the selected window and the window's buffer). */) buffer = w->buffer; CHECK_BUFFER (buffer); - if (NILP (format)) + /* Make formatting the modeline a non-op when noninteractive, otherwise + there will be problems later caused by a partially initialized frame. */ + if (NILP (format) || noninteractive) return empty_unibyte_string; if (no_props) diff --git a/src/xfaces.c b/src/xfaces.c index 5e396d8bf6e..36bbacb84ce 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -7732,6 +7732,85 @@ face_at_buffer_position (w, pos, region_beg, region_end, return lookup_face (f, attrs, 0, NULL); } +/* Return the face ID at buffer position POS for displaying ASCII + characters associated with overlay strings for overlay OVERLAY. + + Like face_at_buffer_position except for OVERLAY. Currently it + simply disregards the `face' properties of all overlays. */ + +int +face_for_overlay_string (w, pos, region_beg, region_end, + endptr, limit, mouse, overlay) + struct window *w; + int pos; + int region_beg, region_end; + int *endptr; + int limit; + int mouse; + Lisp_Object overlay; +{ + struct frame *f = XFRAME (w->frame); + Lisp_Object attrs[LFACE_VECTOR_SIZE]; + Lisp_Object prop, position; + int i, noverlays; + Lisp_Object *overlay_vec; + Lisp_Object frame; + int endpos; + Lisp_Object propname = mouse ? Qmouse_face : Qface; + Lisp_Object limit1, end; + struct face *default_face; + + /* W must display the current buffer. We could write this function + to use the frame and buffer of W, but right now it doesn't. */ + /* xassert (XBUFFER (w->buffer) == current_buffer); */ + + XSETFRAME (frame, f); + XSETFASTINT (position, pos); + + endpos = ZV; + if (pos < region_beg && region_beg < endpos) + endpos = region_beg; + + /* Get the `face' or `mouse_face' text property at POS, and + determine the next position at which the property changes. */ + prop = Fget_text_property (position, propname, w->buffer); + XSETFASTINT (limit1, (limit < endpos ? limit : endpos)); + end = Fnext_single_property_change (position, propname, w->buffer, limit1); + if (INTEGERP (end)) + endpos = XINT (end); + + *endptr = endpos; + + default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); + + /* Optimize common cases where we can use the default face. */ + if (NILP (prop) + && !(pos >= region_beg && pos < region_end)) + return DEFAULT_FACE_ID; + + /* Begin with attributes from the default face. */ + bcopy (default_face->lface, attrs, sizeof attrs); + + /* Merge in attributes specified via text properties. */ + if (!NILP (prop)) + merge_face_ref (f, prop, attrs, 1, 0); + + /* If in the region, merge in the region face. */ + if (pos >= region_beg && pos < region_end) + { + merge_named_face (f, Qregion, attrs, 0); + + if (region_end < endpos) + endpos = region_end; + } + + *endptr = endpos; + + /* Look up a realized face with the given face attributes, + or realize a new one for ASCII characters. */ + return lookup_face (f, attrs, 0, NULL); +} + /* Compute the face at character position POS in Lisp string STRING on window W, for ASCII characters. |