mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-03 10:31:37 -08:00
Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-923
This commit is contained in:
commit
c12ecb0af9
35 changed files with 578 additions and 174 deletions
|
|
@ -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)
|
** 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
|
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
|
* BUGS
|
||||||
|
|
||||||
** Document the changes introduced by multi-tty
|
** Document the changes introduced by multi-tty
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2007-11-06 Kenichi Handa <handa@ni.aist.go.jp>
|
||||||
|
|
||||||
* mule.texi (Select Input Method): Describe how to activate an input
|
* mule.texi (Select Input Method): Describe how to activate an input
|
||||||
|
|
@ -15,11 +23,20 @@
|
||||||
|
|
||||||
* gnus.texi (Troubleshooting): Adjust Gnus version number.
|
* 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>
|
2007-10-30 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
* misc.texi (Directory Tracking): Explain a bit more about
|
* misc.texi (Directory Tracking): Explain a bit more about
|
||||||
dirtrack-mode.
|
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>
|
2007-10-25 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
* fortran-xtra.texi (Fortran): F90 mode handles F2003.
|
* fortran-xtra.texi (Fortran): F90 mode handles F2003.
|
||||||
|
|
|
||||||
|
|
@ -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
|
scope less noticeable. When a variable goes out of scope you can't
|
||||||
edit its value.
|
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
|
@vindex gdb-use-colon-colon-notation
|
||||||
If the variable @code{gdb-use-colon-colon-notation} is
|
If the variable @code{gdb-use-colon-colon-notation} is
|
||||||
non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}}
|
non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}}
|
||||||
|
|
|
||||||
|
|
@ -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.
|
widget library will also use the new graphic features automatically.
|
||||||
@end enumerate
|
@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
|
@node User Interface, Programming Example, Introduction, Top
|
||||||
@comment node-name, next, previous, up
|
@comment node-name, next, previous, up
|
||||||
@section User Interface
|
@section User Interface
|
||||||
|
|
|
||||||
32
etc/NEWS.22
32
etc/NEWS.22
|
|
@ -42,15 +42,6 @@ below. Emacs tries to warn you about these through `bad-packages-alist'.
|
||||||
|
|
||||||
* Changes in Emacs 22.2
|
* 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
|
** 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
|
than the window, the usual keys for moving the cursor cause the image
|
||||||
to be scrolled horizontally or vertically instead.
|
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
|
Windows to cause focus to follow the mouse will now need to explicitly set
|
||||||
this variable.
|
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
|
** 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
|
was needed. In text command mode, if you have problems before execution has
|
||||||
started, use M-x gud-gdb.
|
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.
|
* Lisp Changes in Emacs 22.2.
|
||||||
|
|
||||||
** Frame-local variables are deprecated and are slated for removal.
|
** 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
|
** The function invisible-p returns non-nil if the character
|
||||||
after a specified position is invisible.
|
after a specified position is invisible.
|
||||||
|
|
||||||
|
|
@ -121,9 +122,16 @@ as its frame.
|
||||||
** The new function `image-refresh' refreshes all images associated
|
** The new function `image-refresh' refreshes all images associated
|
||||||
with a given image specification.
|
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
|
* Installation Changes in Emacs 22.1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,7 @@ install: all
|
||||||
`id -un 2> /dev/null`; do \
|
`id -un 2> /dev/null`; do \
|
||||||
[ -n "$${installuser}" ] && break ; \
|
[ -n "$${installuser}" ] && break ; \
|
||||||
done ; \
|
done ; \
|
||||||
find ${INSTALLDIR} -exec chown $${installuser} '{}' ';'
|
-find ${INSTALLDIR} -exec chown $${installuser} '{}' ';'
|
||||||
|
|
||||||
clean mostlyclean:
|
clean mostlyclean:
|
||||||
rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \
|
rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2007-11-09 Dan Nicolaescu <dann@ics.uci.edu>
|
||||||
|
|
||||||
* ediff-init.el (ediff-xemacs-p, ediff-emacs-p): Remove.
|
* ediff-init.el (ediff-xemacs-p, ediff-emacs-p): Remove.
|
||||||
|
|
|
||||||
|
|
@ -1160,7 +1160,8 @@ Special value `always' suppresses confirmation."
|
||||||
(or (eq recursive 'always)
|
(or (eq recursive 'always)
|
||||||
(yes-or-no-p (format "Recursive copies of %s? " from))))
|
(yes-or-no-p (format "Recursive copies of %s? " from))))
|
||||||
;; This is a directory.
|
;; This is a directory.
|
||||||
(let ((files
|
(let ((mode (file-modes from))
|
||||||
|
(files
|
||||||
(condition-case err
|
(condition-case err
|
||||||
(directory-files from nil dired-re-no-dot)
|
(directory-files from nil dired-re-no-dot)
|
||||||
(file-error
|
(file-error
|
||||||
|
|
@ -1174,7 +1175,9 @@ Special value `always' suppresses confirmation."
|
||||||
(if (file-exists-p to)
|
(if (file-exists-p to)
|
||||||
(or top (dired-handle-overwrite to))
|
(or top (dired-handle-overwrite to))
|
||||||
(condition-case err
|
(condition-case err
|
||||||
(make-directory to)
|
(progn
|
||||||
|
(make-directory to)
|
||||||
|
(set-file-modes to #o700))
|
||||||
(file-error
|
(file-error
|
||||||
(push (dired-make-relative from)
|
(push (dired-make-relative from)
|
||||||
dired-create-files-failures)
|
dired-create-files-failures)
|
||||||
|
|
@ -1193,7 +1196,9 @@ Special value `always' suppresses confirmation."
|
||||||
(file-error
|
(file-error
|
||||||
(push (dired-make-relative thisfrom)
|
(push (dired-make-relative thisfrom)
|
||||||
dired-create-files-failures)
|
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.
|
;; Not a directory.
|
||||||
(or top (dired-handle-overwrite to))
|
(or top (dired-handle-overwrite to))
|
||||||
(condition-case err
|
(condition-case err
|
||||||
|
|
|
||||||
|
|
@ -261,17 +261,17 @@
|
||||||
() ; if dumping, autoloads are set up in loaddefs.el
|
() ; if dumping, autoloads are set up in loaddefs.el
|
||||||
;; if the user decides to load this file, set up autoloads
|
;; if the user decides to load this file, set up autoloads
|
||||||
;; compare files and buffers
|
;; compare files and buffers
|
||||||
(autoload 'ediff "ediff" "Compare two files" t)
|
(autoload 'ediff "ediff" "Compare two files." t)
|
||||||
(autoload 'ediff-files "ediff" "Compare two files" t)
|
(autoload 'ediff-files "ediff" "Compare two files." t)
|
||||||
(autoload 'ediff-buffers "ediff" "Compare two bufers" t)
|
(autoload 'ediff-buffers "ediff" "Compare two buffers." t)
|
||||||
(autoload 'ebuffers "ediff" "Compare two bufers" t)
|
(autoload 'ebuffers "ediff" "Compare two buffers." t)
|
||||||
(autoload 'ediff3 "ediff" "Compare three files" t)
|
(autoload 'ediff3 "ediff" "Compare three files." t)
|
||||||
(autoload 'ediff-files3 "ediff" "Compare three files" t)
|
(autoload 'ediff-files3 "ediff" "Compare three files." t)
|
||||||
(autoload 'ediff-buffers3 "ediff" "Compare three bufers" t)
|
(autoload 'ediff-buffers3 "ediff" "Compare three buffers." t)
|
||||||
(autoload 'ebuffers3 "ediff" "Compare three bufers" t)
|
(autoload 'ebuffers3 "ediff" "Compare three buffers." t)
|
||||||
|
|
||||||
(autoload 'erevision "ediff" "Compare versions of a file" t)
|
(autoload 'erevision "ediff" "Compare versions of a file." t)
|
||||||
(autoload 'ediff-revision "ediff" "Compare versions of a file" t)
|
(autoload 'ediff-revision "ediff" "Compare versions of a file." t)
|
||||||
|
|
||||||
;; compare regions and windows
|
;; compare regions and windows
|
||||||
(autoload 'ediff-windows-wordwise
|
(autoload 'ediff-windows-wordwise
|
||||||
|
|
|
||||||
|
|
@ -147,16 +147,16 @@ Results are displayed with the `elp-results' command."
|
||||||
:group 'elp)
|
:group 'elp)
|
||||||
|
|
||||||
(defcustom elp-sort-by-function 'elp-sort-by-total-time
|
(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:
|
These functions are currently available:
|
||||||
|
|
||||||
elp-sort-by-call-count -- sort by the highest call count
|
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-total-time -- sort by the highest total time
|
||||||
elp-sort-by-average-time -- sort by the highest average times
|
elp-sort-by-average-time -- sort by the highest average times
|
||||||
|
|
||||||
You can write you're own sort function. It should adhere to the
|
You can write your own sort function. It should adhere to the
|
||||||
interface specified by the PRED argument for the `sort' defun. Each
|
interface specified by the PREDICATE argument for `sort'.
|
||||||
\"element of LIST\" is really a 4 element vector where element 0 is
|
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,
|
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
|
element 2 is the average time spent in the function, and element 3 is
|
||||||
the symbol's name string."
|
the symbol's name string."
|
||||||
|
|
@ -164,7 +164,7 @@ the symbol's name string."
|
||||||
:group 'elp)
|
:group 'elp)
|
||||||
|
|
||||||
(defcustom elp-report-limit 1
|
(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
|
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
|
of times will be displayed in the output buffer. If nil, all
|
||||||
functions will be displayed."
|
functions will be displayed."
|
||||||
|
|
@ -173,12 +173,12 @@ functions will be displayed."
|
||||||
:group 'elp)
|
:group 'elp)
|
||||||
|
|
||||||
(defcustom elp-use-standard-output nil
|
(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
|
:type 'boolean
|
||||||
:group 'elp)
|
:group 'elp)
|
||||||
|
|
||||||
(defcustom elp-recycle-buffers-p t
|
(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
|
In other words, a new unique buffer is create every time you run
|
||||||
\\[elp-results]."
|
\\[elp-results]."
|
||||||
:type 'boolean
|
:type 'boolean
|
||||||
|
|
@ -372,7 +372,7 @@ Use optional LIST if provided instead."
|
||||||
(mapcar 'elp-restore-function list)))
|
(mapcar 'elp-restore-function list)))
|
||||||
|
|
||||||
(defun elp-restore-all ()
|
(defun elp-restore-all ()
|
||||||
"Restores the original definitions of all functions being profiled."
|
"Restore the original definitions of all functions being profiled."
|
||||||
(interactive)
|
(interactive)
|
||||||
(elp-restore-list elp-all-instrumented-list))
|
(elp-restore-list elp-all-instrumented-list))
|
||||||
|
|
||||||
|
|
@ -412,7 +412,7 @@ Use optional LIST if provided instead."
|
||||||
(elp-instrument-function funsym)))
|
(elp-instrument-function funsym)))
|
||||||
|
|
||||||
(defun elp-unset-master ()
|
(defun elp-unset-master ()
|
||||||
"Unsets the master function."
|
"Unset the master function."
|
||||||
(interactive)
|
(interactive)
|
||||||
;; when there's no master function, recording is turned on by default.
|
;; when there's no master function, recording is turned on by default.
|
||||||
(setq elp-master nil
|
(setq elp-master nil
|
||||||
|
|
@ -558,7 +558,7 @@ original definition, use \\[elp-restore-function] or \\[elp-restore-all]."
|
||||||
(defun elp-results ()
|
(defun elp-results ()
|
||||||
"Display current profiling results.
|
"Display current profiling results.
|
||||||
If `elp-reset-after-results' is non-nil, then current profiling
|
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."
|
displayed."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((curbuf (current-buffer))
|
(let ((curbuf (current-buffer))
|
||||||
|
|
|
||||||
|
|
@ -116,9 +116,9 @@ in the parse.")
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun unsafep (form &optional unsafep-vars)
|
(defun unsafep (form &optional unsafep-vars)
|
||||||
"Return nil if evaluating FORM couldn't possibly do any harm;
|
"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
|
Otherwise result is a reason why FORM is unsafe.
|
||||||
of symbols with local bindings."
|
UNSAFEP-VARS is a list of symbols with local bindings."
|
||||||
(catch 'unsafep
|
(catch 'unsafep
|
||||||
(if (or (eq safe-functions t) ;User turned off safety-checking
|
(if (or (eq safe-functions t) ;User turned off safety-checking
|
||||||
(atom form)) ;Atoms are never unsafe
|
(atom form)) ;Atoms are never unsafe
|
||||||
|
|
@ -213,8 +213,8 @@ of symbols with local bindings."
|
||||||
|
|
||||||
(defun unsafep-function (fun)
|
(defun unsafep-function (fun)
|
||||||
"Return nil if FUN is a safe function.
|
"Return nil if FUN is a safe function.
|
||||||
\(either a safe lambda or a symbol that names a safe function). Otherwise
|
\(Either a safe lambda or a symbol that names a safe function).
|
||||||
result is a reason code."
|
Otherwise result is a reason code."
|
||||||
(cond
|
(cond
|
||||||
((eq (car-safe fun) 'lambda)
|
((eq (car-safe fun) 'lambda)
|
||||||
(unsafep fun unsafep-vars))
|
(unsafep fun unsafep-vars))
|
||||||
|
|
@ -226,8 +226,8 @@ result is a reason code."
|
||||||
`(function ,fun))))
|
`(function ,fun))))
|
||||||
|
|
||||||
(defun unsafep-progn (list)
|
(defun unsafep-progn (list)
|
||||||
"Return nil if all forms in LIST are safe, or the reason
|
"Return nil if all forms in LIST are safe.
|
||||||
for the first unsafe form."
|
Else, return the reason for the first unsafe form."
|
||||||
(catch 'unsafep-progn
|
(catch 'unsafep-progn
|
||||||
(let (reason)
|
(let (reason)
|
||||||
(dolist (x list)
|
(dolist (x list)
|
||||||
|
|
@ -236,8 +236,9 @@ for the first unsafe form."
|
||||||
|
|
||||||
(defun unsafep-let (clause)
|
(defun unsafep-let (clause)
|
||||||
"Check the safety of a let binding.
|
"Check the safety of a let binding.
|
||||||
CLAUSE is a let-binding, either SYM or (SYM) or (SYM VAL). Checks VAL
|
CLAUSE is a let-binding, either SYM or (SYM) or (SYM VAL).
|
||||||
and throws a reason to `unsafep' if unsafe. Returns SYM."
|
Check VAL and throw a reason to `unsafep' if unsafe.
|
||||||
|
Return SYM."
|
||||||
(let (reason sym)
|
(let (reason sym)
|
||||||
(if (atom clause)
|
(if (atom clause)
|
||||||
(setq sym clause)
|
(setq sym clause)
|
||||||
|
|
|
||||||
|
|
@ -2163,6 +2163,7 @@ This prevents `mouse-drag-region' from messing things up."
|
||||||
;;{{{ The end
|
;;{{{ The end
|
||||||
|
|
||||||
(defun follow-unload-function ()
|
(defun follow-unload-function ()
|
||||||
|
"Unload Follow mode library."
|
||||||
(easy-menu-remove-item nil '("Tools") "Follow")
|
(easy-menu-remove-item nil '("Tools") "Follow")
|
||||||
(follow-stop-intercept-process-output)
|
(follow-stop-intercept-process-output)
|
||||||
(dolist (group '((before
|
(dolist (group '((before
|
||||||
|
|
@ -2189,10 +2190,9 @@ This prevents `mouse-drag-region' from messing things up."
|
||||||
(intern (concat "follow-" (symbol-name fun))))
|
(intern (concat "follow-" (symbol-name fun))))
|
||||||
(ad-update fun))
|
(ad-update fun))
|
||||||
(error nil))))))
|
(error nil))))))
|
||||||
|
;; continue standard processing
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
(defvar follow-unload-function 'follow-unload-function)
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; We're done!
|
;; We're done!
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2007-11-01 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
* mm-util.el (mm-charset-eval-alist): Mark as risky local variable.
|
* 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
|
(gnus-article-prev-page): Honor gnus-article-over-scroll when moving
|
||||||
back to the previous page.
|
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>
|
2007-10-30 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
* gnus-ems.el (gnus-x-splash): Work even if there's no scroll bar.
|
* gnus-ems.el (gnus-x-splash): Work even if there's no scroll bar.
|
||||||
|
|
|
||||||
|
|
@ -1080,6 +1080,7 @@ uncached: Non-nil if the article is uncached."
|
||||||
:group 'gnus-summary-visual
|
:group 'gnus-summary-visual
|
||||||
:type '(repeat (cons (sexp :tag "Form" nil)
|
:type '(repeat (cons (sexp :tag "Form" nil)
|
||||||
face)))
|
face)))
|
||||||
|
(put 'gnus-summary-highlight 'risky-local-variable t)
|
||||||
|
|
||||||
(defcustom gnus-alter-header-function nil
|
(defcustom gnus-alter-header-function nil
|
||||||
"Function called to allow alteration of article header structures.
|
"Function called to allow alteration of article header structures.
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ them into characters should be done separately."
|
||||||
|
|
||||||
(defun quoted-printable-decode-string (string &optional coding-system)
|
(defun quoted-printable-decode-string (string &optional coding-system)
|
||||||
"Decode the quoted-printable encoded STRING and return the result.
|
"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
|
Use of CODING-SYSTEM is deprecated; this function should deal with
|
||||||
raw bytes, and coding conversion should be done separately."
|
raw bytes, and coding conversion should be done separately."
|
||||||
(mm-with-unibyte-buffer
|
(mm-with-unibyte-buffer
|
||||||
|
|
|
||||||
|
|
@ -191,7 +191,7 @@ something strange, such as redefining an Emacs function."
|
||||||
(unload-func (intern-soft (concat name "-unload-function"))))
|
(unload-func (intern-soft (concat name "-unload-function"))))
|
||||||
;; If FEATURE-unload-function is defined and returns non-nil,
|
;; If FEATURE-unload-function is defined and returns non-nil,
|
||||||
;; don't try to do anything more; otherwise proceed normally.
|
;; 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))
|
(funcall unload-func))
|
||||||
;; Try to avoid losing badly when hooks installed in critical
|
;; Try to avoid losing badly when hooks installed in critical
|
||||||
;; places go away. (Some packages install things on
|
;; places go away. (Some packages install things on
|
||||||
|
|
|
||||||
19
lisp/msb.el
19
lisp/msb.el
|
|
@ -190,9 +190,6 @@
|
||||||
3099
|
3099
|
||||||
"Other files (%d)")))
|
"Other files (%d)")))
|
||||||
|
|
||||||
;; msb--many-menus is obsolete
|
|
||||||
(defvar msb--many-menus msb--very-many-menus)
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; Customizable variables
|
;;; 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
|
MENU-TITLE is really a format. If you add %d in it, the %d is
|
||||||
replaced with the number of items in that menu.
|
replaced with the number of items in that menu.
|
||||||
|
|
||||||
ITEM-HANDLING-FN, is optional. If it is supplied and is a function,
|
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
|
then it is used for displaying the items in that particular buffer
|
||||||
menu, otherwise the function pointed out by
|
menu, otherwise the function pointed out by
|
||||||
`msb-item-handling-function' is used.
|
`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
|
If it is not supplied, the function pointed out by
|
||||||
`msb-item-sort-function' is used.
|
`msb-item-sort-function' is used.
|
||||||
If it is nil, then no sort takes place and the buffers are presented
|
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
|
(defcustom msb-max-menu-items 15
|
||||||
"*The maximum number of items in a menu.
|
"*The maximum number of items in a menu.
|
||||||
If this variable is set to 15 for instance, then the submenu will be
|
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))
|
:type '(choice integer (const nil))
|
||||||
:set 'msb-custom-set
|
:set 'msb-custom-set
|
||||||
:group 'msb)
|
:group 'msb)
|
||||||
|
|
@ -336,7 +333,7 @@ names that starts with a space character."
|
||||||
"*The appearance of a buffer menu.
|
"*The appearance of a buffer menu.
|
||||||
|
|
||||||
The default function to call for handling the appearance of a 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.
|
where the latter is the max length of all buffer names.
|
||||||
|
|
||||||
The function should return the string to use in the menu.
|
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)
|
(defun msb--create-function-info (menu-cond-elt)
|
||||||
"Create a vector from an element MENU-COND-ELT of `msb-menu-cond'.
|
"Create a vector from an element MENU-COND-ELT of `msb-menu-cond'.
|
||||||
This takes the form:
|
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."
|
See `msb-menu-cond' for a description of its elements."
|
||||||
(let* ((list-symbol (make-symbol "-msb-buffer-list"))
|
(let* ((list-symbol (make-symbol "-msb-buffer-list"))
|
||||||
(tmp-ih (and (> (length menu-cond-elt) 3)
|
(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)
|
(defun msb--add-to-menu (buffer function-info max-buffer-name-length)
|
||||||
"Add BUFFER to the menu depicted by FUNCTION-INFO.
|
"Add BUFFER to the menu depicted by FUNCTION-INFO.
|
||||||
All side-effects. Adds an element of form (BUFFER-TITLE . BUFFER)
|
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
|
(let ((list-symbol (aref function-info 0))) ;BUFFER-LIST-VARIABLE
|
||||||
;; Here comes the hairy side-effect!
|
;; Here comes the hairy side-effect!
|
||||||
(set list-symbol
|
(set list-symbol
|
||||||
|
|
@ -961,7 +958,7 @@ It takes the form ((TITLE . BUFFER-LIST)...)."
|
||||||
(msb--create-buffer-menu-2))))
|
(msb--create-buffer-menu-2))))
|
||||||
|
|
||||||
(defun msb--toggle-menu-type ()
|
(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)
|
(interactive)
|
||||||
(setq msb-files-by-directory (not msb-files-by-directory))
|
(setq msb-files-by-directory (not msb-files-by-directory))
|
||||||
;; This gets a warning, but it is correct,
|
;; This gets a warning, but it is correct,
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,9 @@
|
||||||
(autoload 'format-spec "format-spec")
|
(autoload 'format-spec "format-spec")
|
||||||
(autoload 'format-spec-make "format-spec"))
|
(autoload 'format-spec-make "format-spec"))
|
||||||
|
|
||||||
|
(eval-when-compile
|
||||||
|
(require 'rx))
|
||||||
|
|
||||||
(defgroup tls nil
|
(defgroup tls nil
|
||||||
"Transport Layer Security (TLS) parameters."
|
"Transport Layer Security (TLS) parameters."
|
||||||
:group 'comm)
|
:group 'comm)
|
||||||
|
|
|
||||||
|
|
@ -947,6 +947,12 @@ Changed values are highlighted with the face `font-lock-warning-face'."
|
||||||
:group 'gud
|
:group 'gud
|
||||||
:version "22.1")
|
: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)
|
(defun gdb-speedbar-expand-node (text token indent)
|
||||||
"Expand the node the user clicked on.
|
"Expand the node the user clicked on.
|
||||||
TEXT is the text of the button we clicked on, a + or - item.
|
TEXT is the text of the button we clicked on, a + or - item.
|
||||||
|
|
@ -3515,7 +3521,9 @@ in_scope=\"\\(.*?\\)\".*?}")
|
||||||
(when var
|
(when var
|
||||||
(let ((match (match-string 3)))
|
(let ((match (match-string 3)))
|
||||||
(cond ((string-equal match "false")
|
(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")
|
((string-equal match "true")
|
||||||
(setcar (nthcdr 5 var) 'changed)
|
(setcar (nthcdr 5 var) 'changed)
|
||||||
(setcar (nthcdr 4 var)
|
(setcar (nthcdr 4 var)
|
||||||
|
|
|
||||||
|
|
@ -709,25 +709,14 @@ The option \"--fullname\" must be included in this value."
|
||||||
(defvar gud-filter-pending-text nil
|
(defvar gud-filter-pending-text nil
|
||||||
"Non-nil means this is text that has been saved for later in `gud-filter'.")
|
"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
|
;;;###autoload
|
||||||
(defun gud-gdb (command-line)
|
(defun gud-gdb (command-line)
|
||||||
"Run gdb on program FILE in buffer *gud-FILE*.
|
"Run gdb on program FILE in buffer *gud-FILE*.
|
||||||
The directory containing FILE becomes the initial working
|
The directory containing FILE becomes the initial working
|
||||||
directory and source-file directory for your debugger. By
|
directory and source-file directory for your debugger."
|
||||||
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."
|
|
||||||
(interactive (list (gud-query-cmdline 'gud-gdb)))
|
(interactive (list (gud-query-cmdline 'gud-gdb)))
|
||||||
|
|
||||||
(require 'gdb-ui)
|
|
||||||
|
|
||||||
(when (and gud-comint-buffer
|
(when (and gud-comint-buffer
|
||||||
(buffer-name gud-comint-buffer)
|
(buffer-name gud-comint-buffer)
|
||||||
(get-buffer-process gud-comint-buffer)
|
(get-buffer-process gud-comint-buffer)
|
||||||
|
|
@ -736,8 +725,8 @@ session."
|
||||||
(error
|
(error
|
||||||
"Multiple debugging requires restarting in text command mode"))
|
"Multiple debugging requires restarting in text command mode"))
|
||||||
|
|
||||||
(gud-common-init command-line nil 'gud-gdba-marker-filter)
|
(gud-common-init command-line nil 'gud-gdb-marker-filter)
|
||||||
(set (make-local-variable 'gud-minor-mode) 'gdba)
|
(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-break "break %f:%l" "\C-b" "Set breakpoint at current line.")
|
||||||
(gud-def gud-tbreak "tbreak %f:%l" "\C-t"
|
(gud-def gud-tbreak "tbreak %f:%l" "\C-t"
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,8 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved,
|
||||||
(current-buffer))
|
(current-buffer))
|
||||||
(insert ?\n)
|
(insert ?\n)
|
||||||
(dolist (symbol savehist-minibuffer-history-variables)
|
(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)))
|
(let ((value (savehist-trim-history (symbol-value symbol)))
|
||||||
excess-space)
|
excess-space)
|
||||||
(when value ; Don't save empty histories.
|
(when value ; Don't save empty histories.
|
||||||
|
|
|
||||||
|
|
@ -1287,6 +1287,7 @@ only these files will be asked to be saved."
|
||||||
(defun server-unload-function ()
|
(defun server-unload-function ()
|
||||||
"Unload the server library."
|
"Unload the server library."
|
||||||
(server-mode -1)
|
(server-mode -1)
|
||||||
|
(substitute-key-definition 'server-edit nil ctl-x-map)
|
||||||
(save-current-buffer
|
(save-current-buffer
|
||||||
(dolist (buffer (buffer-list))
|
(dolist (buffer (buffer-list))
|
||||||
(set-buffer buffer)
|
(set-buffer buffer)
|
||||||
|
|
@ -1294,7 +1295,10 @@ only these files will be asked to be saved."
|
||||||
;; continue standard unloading
|
;; continue standard unloading
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
|
(add-hook 'kill-emacs-hook (lambda () (server-mode -1))) ;Cleanup upon exit.
|
||||||
|
|
||||||
(defvar server-unload-function 'server-unload-function)
|
(defvar server-unload-function 'server-unload-function)
|
||||||
|
|
||||||
|
|
||||||
(provide 'server)
|
(provide 'server)
|
||||||
|
|
||||||
|
|
|
||||||
15
lisp/ses.el
15
lisp/ses.el
|
|
@ -2921,7 +2921,7 @@ TEST is evaluated."
|
||||||
;;----------------------------------------------------------------------------
|
;;----------------------------------------------------------------------------
|
||||||
|
|
||||||
;;These functions use the variables 'row' and 'col' that are
|
;;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.
|
;;compile-time to make the compiler happy.
|
||||||
(eval-when-compile
|
(eval-when-compile
|
||||||
(dolist (x '(row col))
|
(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))
|
(dolist (x (cons 'ses-unsafe ses-standard-printer-functions))
|
||||||
(put x 'side-effect-free t))
|
(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)
|
(provide 'ses)
|
||||||
|
|
||||||
;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3
|
;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3
|
||||||
|
|
|
||||||
|
|
@ -103,8 +103,8 @@ is no buffer currently visiting the file."
|
||||||
|
|
||||||
(defcustom shadow-inhibit-overload nil
|
(defcustom shadow-inhibit-overload nil
|
||||||
"If non-nil, shadowfile won't redefine \\[save-buffers-kill-emacs].
|
"If non-nil, shadowfile won't redefine \\[save-buffers-kill-emacs].
|
||||||
Normally it overloads the function `save-buffers-kill-emacs' to check
|
Normally it overloads the function `save-buffers-kill-emacs' to check for
|
||||||
for files have been changed and need to be copied to other systems."
|
files that have been changed and need to be copied to other systems."
|
||||||
:type 'boolean
|
:type 'boolean
|
||||||
:group 'shadow)
|
:group 'shadow)
|
||||||
|
|
||||||
|
|
@ -299,7 +299,7 @@ be matched against the primary of SITE2."
|
||||||
|
|
||||||
(defun shadow-parse-fullname (fullname)
|
(defun shadow-parse-fullname (fullname)
|
||||||
"Parse FULLNAME into \(site user path) list.
|
"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."
|
not a full ange-ftp pathname."
|
||||||
(if (listp fullname)
|
(if (listp fullname)
|
||||||
fullname
|
fullname
|
||||||
|
|
@ -392,9 +392,9 @@ local filename."
|
||||||
"Return t if PATTERN matches FILE.
|
"Return t if PATTERN matches FILE.
|
||||||
If REGEXP is supplied and non-nil, the file part of the pattern is a regular
|
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
|
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
|
match---see `shadow-same-site'. The pattern must be in full ange-ftp format,
|
||||||
the file can be any valid filename. This function does not do any filename
|
but the file can be any valid filename. This function does not do any
|
||||||
expansion or contraction, you must do that yourself first."
|
filename expansion or contraction, you must do that yourself first."
|
||||||
(let* ((pattern-sup (shadow-parse-fullname pattern))
|
(let* ((pattern-sup (shadow-parse-fullname pattern))
|
||||||
(file-sup (shadow-parse-name file)))
|
(file-sup (shadow-parse-name file)))
|
||||||
(and (shadow-same-site pattern-sup file-sup)
|
(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
|
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
|
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
|
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
|
files to), and a regular expression that matches the hostnames of all the
|
||||||
in the cluster."
|
sites in the cluster."
|
||||||
(interactive (list (completing-read "Cluster name: " shadow-clusters () ())))
|
(interactive (list (completing-read "Cluster name: " shadow-clusters () ())))
|
||||||
(let* ((old (shadow-get-cluster name))
|
(let* ((old (shadow-get-cluster name))
|
||||||
(primary (read-string "Primary host: "
|
(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.
|
"Make each of a group of files be shared between hosts.
|
||||||
Prompts for regular expression; files matching this are shared between a list
|
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
|
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).
|
hosts \(if they aren't, use `shadow-define-literal-group' instead of this
|
||||||
Each site can be either a hostname or the name of a cluster \(see
|
function). Each site can be either a hostname or the name of a cluster \(see
|
||||||
`shadow-define-cluster')."
|
`shadow-define-cluster')."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((regexp (read-string
|
(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)
|
(defun shadow-remove-from-todo (pair)
|
||||||
"Remove PAIR from `shadow-files-to-copy'.
|
"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
|
(setq shadow-files-to-copy
|
||||||
(shadow-remove-if (function (lambda (s) (eq s pair)))
|
(shadow-remove-if (function (lambda (s) (eq s pair)))
|
||||||
shadow-files-to-copy)))
|
shadow-files-to-copy)))
|
||||||
|
|
@ -647,7 +647,7 @@ PAIR must be (eq to) one of the elements of that list."
|
||||||
(defun shadow-read-files ()
|
(defun shadow-read-files ()
|
||||||
"Visit and load `shadow-info-file' and `shadow-todo-file'.
|
"Visit and load `shadow-info-file' and `shadow-todo-file'.
|
||||||
Thus restores shadowfile's state from your last Emacs session.
|
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)
|
(interactive)
|
||||||
(if (and (fboundp 'file-locked-p)
|
(if (and (fboundp 'file-locked-p)
|
||||||
(or (stringp (file-locked-p shadow-info-file))
|
(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)))
|
(setq shadow-hashtable (make-vector 37 0)))
|
||||||
|
|
||||||
(defun shadow-insert-var (variable)
|
(defun shadow-insert-var (variable)
|
||||||
"Prettily insert a `setq' command for VARIABLE,
|
"Build a `setq' to restore VARIABLE.
|
||||||
which, when later evaluated, will restore it to its current setting.
|
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."
|
VARIABLE must be the name of a variable whose value is a list."
|
||||||
(let ((standard-output (current-buffer)))
|
(let ((standard-output (current-buffer)))
|
||||||
(insert (format "(setq %s" variable))
|
(insert (format "(setq %s" variable))
|
||||||
|
|
|
||||||
|
|
@ -1371,7 +1371,9 @@ If STROKES-MAP is not given, `strokes-global-map' will be used instead."
|
||||||
|
|
||||||
(defun strokes-alphabetic-lessp (stroke1 stroke2)
|
(defun strokes-alphabetic-lessp (stroke1 stroke2)
|
||||||
"Return t if STROKE1's command name precedes STROKE2's in lexicographic order."
|
"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
|
(defvar strokes-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
|
|
|
||||||
|
|
@ -421,6 +421,23 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil."
|
||||||
|
|
||||||
;;; Hooks from the rest of Emacs
|
;;; 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.
|
;; 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
|
;; 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
|
;; 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-nondirectory filename)
|
||||||
(file-name-directory filename) ad-return-value))))
|
(file-name-directory filename) ad-return-value))))
|
||||||
|
|
||||||
;; Buffer deletion
|
;;; The End
|
||||||
;; 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
|
(defun uniquify-unload-function ()
|
||||||
;; because kill-buffer-hook is not permanent-local :-(
|
"Unload the uniquify library."
|
||||||
(add-hook 'kill-buffer-hook 'uniquify-maybe-rerationalize-w/o-cb)
|
(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)
|
(provide 'uniquify)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -784,7 +784,6 @@ When this mode is active, `whitespace-buffer' is added to
|
||||||
(defun whitespace-write-file-hook ()
|
(defun whitespace-write-file-hook ()
|
||||||
"Hook function to be called on the buffer when whitespace check is enabled.
|
"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'."
|
This is meant to be added buffer-locally to `write-file-functions'."
|
||||||
(interactive)
|
|
||||||
(let ((werr nil))
|
(let ((werr nil))
|
||||||
(if whitespace-auto-cleanup
|
(if whitespace-auto-cleanup
|
||||||
(whitespace-cleanup-internal)
|
(whitespace-cleanup-internal)
|
||||||
|
|
@ -794,6 +793,21 @@ This is meant to be added buffer-locally to `write-file-functions'."
|
||||||
buffer-file-name))))
|
buffer-file-name))))
|
||||||
nil)
|
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 ()
|
(defun whitespace-unload-hook ()
|
||||||
(remove-hook 'find-file-hook 'whitespace-buffer)
|
(remove-hook 'find-file-hook 'whitespace-buffer)
|
||||||
(remove-hook 'write-file-functions 'whitespace-write-file-hook t)
|
(remove-hook 'write-file-functions 'whitespace-write-file-hook t)
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2007-11-07 Jason Rumney <jasonr@gnu.org>
|
||||||
|
|
||||||
* s/windows95.h: Remove.
|
* s/windows95.h: Remove.
|
||||||
|
|
|
||||||
|
|
@ -1803,6 +1803,9 @@ struct it_slice
|
||||||
Lisp_Object height;
|
Lisp_Object height;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Input sources for fetching characters or data to display.
|
||||||
|
The input source is found in the `method' field. */
|
||||||
|
|
||||||
enum it_method {
|
enum it_method {
|
||||||
GET_FROM_BUFFER = 0,
|
GET_FROM_BUFFER = 0,
|
||||||
GET_FROM_DISPLAY_VECTOR,
|
GET_FROM_DISPLAY_VECTOR,
|
||||||
|
|
@ -1904,20 +1907,27 @@ struct it
|
||||||
position in overlay strings etc. */
|
position in overlay strings etc. */
|
||||||
struct display_pos current;
|
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
|
/* Vector of overlays to process. Overlay strings are processed
|
||||||
OVERLAY_STRING_CHUNK_SIZE at a time. */
|
OVERLAY_STRING_CHUNK_SIZE at a time. */
|
||||||
#define OVERLAY_STRING_CHUNK_SIZE 16
|
#define OVERLAY_STRING_CHUNK_SIZE 16
|
||||||
Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE];
|
Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE];
|
||||||
|
|
||||||
/* Total number of overlay strings to process. This can be >
|
/* For each overlay string, the overlay it came from. */
|
||||||
OVERLAY_STRING_CHUNK_SIZE. */
|
Lisp_Object string_overlays[OVERLAY_STRING_CHUNK_SIZE];
|
||||||
int n_overlay_strings;
|
|
||||||
|
|
||||||
/* If non-nil, a Lisp string being processed. If
|
/* If non-nil, a Lisp string being processed. If
|
||||||
current.overlay_string_index >= 0, this is an overlay string from
|
current.overlay_string_index >= 0, this is an overlay string from
|
||||||
pos. */
|
pos. */
|
||||||
Lisp_Object string;
|
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
|
/* Stack of saved values. New entries are pushed when we begin to
|
||||||
process an overlay string or a string from a `glyph' property.
|
process an overlay string or a string from a `glyph' property.
|
||||||
Entries are popped when we return to deliver display elements
|
Entries are popped when we return to deliver display elements
|
||||||
|
|
@ -1953,6 +1963,7 @@ struct it
|
||||||
/* current text and display positions. */
|
/* current text and display positions. */
|
||||||
struct text_pos position;
|
struct text_pos position;
|
||||||
struct display_pos current;
|
struct display_pos current;
|
||||||
|
Lisp_Object from_overlay;
|
||||||
enum glyph_row_area area;
|
enum glyph_row_area area;
|
||||||
enum it_method method;
|
enum it_method method;
|
||||||
unsigned multibyte_p : 1;
|
unsigned multibyte_p : 1;
|
||||||
|
|
@ -1969,13 +1980,6 @@ struct it
|
||||||
/* Stack pointer. */
|
/* Stack pointer. */
|
||||||
int sp;
|
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
|
/* -1 means selective display hides everything between a \r and the
|
||||||
next newline; > 0 means hide lines indented more than that value. */
|
next newline; > 0 means hide lines indented more than that value. */
|
||||||
int selective;
|
int selective;
|
||||||
|
|
@ -1987,6 +1991,16 @@ struct it
|
||||||
/* Face to use. */
|
/* Face to use. */
|
||||||
int face_id;
|
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. */
|
/* Non-zero means that the current face has a box. */
|
||||||
unsigned face_box_p : 1;
|
unsigned face_box_p : 1;
|
||||||
|
|
||||||
|
|
@ -2066,9 +2080,6 @@ struct it
|
||||||
Lisp_Object object;
|
Lisp_Object object;
|
||||||
struct text_pos position;
|
struct text_pos position;
|
||||||
|
|
||||||
/* 1 means lines are truncated. */
|
|
||||||
unsigned truncate_lines_p : 1;
|
|
||||||
|
|
||||||
/* Number of columns per \t. */
|
/* Number of columns per \t. */
|
||||||
short tab_width;
|
short tab_width;
|
||||||
|
|
||||||
|
|
@ -2845,6 +2856,9 @@ void free_frame_faces P_ ((struct frame *));
|
||||||
void recompute_basic_faces P_ ((struct frame *));
|
void recompute_basic_faces P_ ((struct frame *));
|
||||||
int face_at_buffer_position P_ ((struct window *, int, int, int, int *,
|
int face_at_buffer_position P_ ((struct window *, int, int, 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 face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int,
|
||||||
int, int *, enum face_id, int));
|
int, int *, enum face_id, int));
|
||||||
int merge_faces P_ ((struct frame *, Lisp_Object, int, int));
|
int merge_faces P_ ((struct frame *, Lisp_Object, int, int));
|
||||||
|
|
|
||||||
|
|
@ -2510,8 +2510,9 @@ The value is nil if that directory's name is not known. */);
|
||||||
|
|
||||||
DEFVAR_LISP ("installation-directory", &Vinstallation_directory,
|
DEFVAR_LISP ("installation-directory", &Vinstallation_directory,
|
||||||
doc: /* A directory within which to look for the `lib-src' and `etc' directories.
|
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
|
This is non-nil when we can't find those directories in their standard
|
||||||
locations, but we can find them near where the Emacs executable was found. */);
|
installed locations, but we can find them near where the Emacs executable
|
||||||
|
was found. */);
|
||||||
Vinstallation_directory = Qnil;
|
Vinstallation_directory = Qnil;
|
||||||
|
|
||||||
DEFVAR_LISP ("system-messages-locale", &Vsystem_messages_locale,
|
DEFVAR_LISP ("system-messages-locale", &Vsystem_messages_locale,
|
||||||
|
|
|
||||||
|
|
@ -4644,8 +4644,8 @@ ID is specified by either an integer or a float. */)
|
||||||
Lisp_Object result;
|
Lisp_Object result;
|
||||||
|
|
||||||
check_mac ();
|
check_mac ();
|
||||||
CHECK_NUMBER_OR_FLOAT(id);
|
CHECK_NUMBER_OR_FLOAT (id);
|
||||||
font_id = NUMBERP (id) ? XINT (id) : (ATSUFontID) XFLOAT (id);
|
font_id = INTEGERP (id) ? XINT (id) : XFLOAT_DATA (id);
|
||||||
BLOCK_INPUT;
|
BLOCK_INPUT;
|
||||||
result = mac_atsu_font_face_attributes (font_id);
|
result = mac_atsu_font_face_attributes (font_id);
|
||||||
UNBLOCK_INPUT;
|
UNBLOCK_INPUT;
|
||||||
|
|
|
||||||
|
|
@ -713,7 +713,7 @@ POSITION is at the end of OBJECT, both car and cdr are nil. */)
|
||||||
Lisp_Object overlay;
|
Lisp_Object overlay;
|
||||||
Lisp_Object val
|
Lisp_Object val
|
||||||
= get_char_property_and_overlay (position, prop, object, &overlay);
|
= get_char_property_and_overlay (position, prop, object, &overlay);
|
||||||
return Fcons(val, overlay);
|
return Fcons (val, overlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -443,15 +443,13 @@ unexec_regions_recorder (task_t task, void *rr, unsigned type,
|
||||||
|
|
||||||
while (num && num_unexec_regions < MAX_UNEXEC_REGIONS)
|
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
|
can be smaller than vmsize in segment commands. In such a
|
||||||
case, trailing pages are initialized with zeros. */
|
case, trailing bytes are initialized with zeros. */
|
||||||
for (p = ranges->address + ranges->size; p > ranges->address;
|
for (p = ranges->address + ranges->size; p > ranges->address; p--)
|
||||||
p -= sizeof (int))
|
if (*(((char *) p)-1))
|
||||||
if (*(((int *) p)-1))
|
break;
|
||||||
break;
|
filesize = p - ranges->address;
|
||||||
filesize = ROUNDUP_TO_PAGE_BOUNDARY (p - ranges->address);
|
|
||||||
assert (filesize <= ranges->size);
|
|
||||||
|
|
||||||
unexec_regions[num_unexec_regions].filesize = filesize;
|
unexec_regions[num_unexec_regions].filesize = filesize;
|
||||||
unexec_regions[num_unexec_regions++].range = *ranges;
|
unexec_regions[num_unexec_regions++].range = *ranges;
|
||||||
|
|
@ -503,11 +501,19 @@ unexec_regions_merge ()
|
||||||
{
|
{
|
||||||
int i, n;
|
int i, n;
|
||||||
unexec_region_info r;
|
unexec_region_info r;
|
||||||
|
vm_size_t padsize;
|
||||||
|
|
||||||
qsort (unexec_regions, num_unexec_regions, sizeof (unexec_regions[0]),
|
qsort (unexec_regions, num_unexec_regions, sizeof (unexec_regions[0]),
|
||||||
&unexec_regions_sort_compare);
|
&unexec_regions_sort_compare);
|
||||||
n = 0;
|
n = 0;
|
||||||
r = unexec_regions[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++)
|
for (i = 1; i < num_unexec_regions; i++)
|
||||||
{
|
{
|
||||||
if (r.range.address + r.range.size == unexec_regions[i].range.address
|
if (r.range.address + r.range.size == unexec_regions[i].range.address
|
||||||
|
|
@ -520,6 +526,17 @@ unexec_regions_merge ()
|
||||||
{
|
{
|
||||||
unexec_regions[n++] = r;
|
unexec_regions[n++] = r;
|
||||||
r = unexec_regions[i];
|
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;
|
unexec_regions[n++] = r;
|
||||||
|
|
@ -562,6 +579,11 @@ print_load_command_name (int lc)
|
||||||
case LC_TWOLEVEL_HINTS:
|
case LC_TWOLEVEL_HINTS:
|
||||||
printf ("LC_TWOLEVEL_HINTS");
|
printf ("LC_TWOLEVEL_HINTS");
|
||||||
break;
|
break;
|
||||||
|
#ifdef LC_UUID
|
||||||
|
case LC_UUID:
|
||||||
|
printf ("LC_UUID ");
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
printf ("unknown ");
|
printf ("unknown ");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
111
src/xdisp.c
111
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 face_before_or_after_it_pos P_ ((struct it *, int));
|
||||||
static int next_overlay_change P_ ((int));
|
static int next_overlay_change P_ ((int));
|
||||||
static int handle_single_display_spec P_ ((struct it *, Lisp_Object,
|
static int handle_single_display_spec P_ ((struct it *, Lisp_Object,
|
||||||
Lisp_Object, struct text_pos *,
|
Lisp_Object, Lisp_Object,
|
||||||
int));
|
struct text_pos *, int));
|
||||||
static int underlying_face_id P_ ((struct it *));
|
static int underlying_face_id P_ ((struct it *));
|
||||||
static int in_ellipses_for_invisible_text_p P_ ((struct display_pos *,
|
static int in_ellipses_for_invisible_text_p P_ ((struct display_pos *,
|
||||||
struct window *));
|
struct window *));
|
||||||
|
|
@ -3060,16 +3060,18 @@ handle_stop (it)
|
||||||
if (it->method == GET_FROM_DISPLAY_VECTOR)
|
if (it->method == GET_FROM_DISPLAY_VECTOR)
|
||||||
handle_overlay_change_p = 0;
|
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)
|
if (handle_overlay_change_p)
|
||||||
handled = handle_overlay_change (it);
|
handled = handle_overlay_change (it);
|
||||||
|
|
||||||
/* Determine where to stop next. */
|
|
||||||
if (handled == HANDLED_NORMALLY)
|
|
||||||
compute_stop_pos (it);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (handled == HANDLED_RECOMPUTE_PROPS);
|
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
|
else
|
||||||
{
|
{
|
||||||
int base_face_id, bufpos;
|
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);
|
||||||
|
|
||||||
if (it->current.overlay_string_index >= 0)
|
/* See if we got to this string directly or indirectly from
|
||||||
bufpos = IT_CHARPOS (*it);
|
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 (!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
|
else
|
||||||
bufpos = 0;
|
{
|
||||||
|
bufpos = 0;
|
||||||
|
|
||||||
/* For strings from a buffer, i.e. overlay strings or strings
|
/* For strings from a `display' property, use the face at
|
||||||
from a `display' property, use the face at IT's current
|
IT's current buffer position as the base face to merge
|
||||||
buffer position as the base face to merge with, so that
|
with, so that overlay strings appear in the same face as
|
||||||
overlay strings appear in the same face as surrounding
|
surrounding text, unless they specify their own
|
||||||
text, unless they specify their own faces. */
|
faces. */
|
||||||
base_face_id = underlying_face_id (it);
|
base_face_id = underlying_face_id (it);
|
||||||
|
}
|
||||||
|
|
||||||
new_face_id = face_at_string_position (it->w,
|
new_face_id = face_at_string_position (it->w,
|
||||||
it->string,
|
it->string,
|
||||||
|
|
@ -3772,7 +3814,7 @@ static enum prop_handled
|
||||||
handle_display_prop (it)
|
handle_display_prop (it)
|
||||||
struct it *it;
|
struct it *it;
|
||||||
{
|
{
|
||||||
Lisp_Object prop, object;
|
Lisp_Object prop, object, overlay;
|
||||||
struct text_pos *position;
|
struct text_pos *position;
|
||||||
/* Nonzero if some property replaces the display of the text itself. */
|
/* Nonzero if some property replaces the display of the text itself. */
|
||||||
int display_replaced_p = 0;
|
int display_replaced_p = 0;
|
||||||
|
|
@ -3800,10 +3842,12 @@ handle_display_prop (it)
|
||||||
if (!it->string_from_display_prop_p)
|
if (!it->string_from_display_prop_p)
|
||||||
it->area = TEXT_AREA;
|
it->area = TEXT_AREA;
|
||||||
|
|
||||||
prop = Fget_char_property (make_number (position->charpos),
|
prop = get_char_property_and_overlay (make_number (position->charpos),
|
||||||
Qdisplay, object);
|
Qdisplay, object, &overlay);
|
||||||
if (NILP (prop))
|
if (NILP (prop))
|
||||||
return HANDLED_NORMALLY;
|
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))
|
if (!STRINGP (it->string))
|
||||||
object = it->w->buffer;
|
object = it->w->buffer;
|
||||||
|
|
@ -3825,7 +3869,7 @@ handle_display_prop (it)
|
||||||
{
|
{
|
||||||
for (; CONSP (prop); prop = XCDR (prop))
|
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))
|
position, display_replaced_p))
|
||||||
{
|
{
|
||||||
display_replaced_p = 1;
|
display_replaced_p = 1;
|
||||||
|
|
@ -3840,7 +3884,7 @@ handle_display_prop (it)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < ASIZE (prop); ++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))
|
position, display_replaced_p))
|
||||||
{
|
{
|
||||||
display_replaced_p = 1;
|
display_replaced_p = 1;
|
||||||
|
|
@ -3852,7 +3896,8 @@ handle_display_prop (it)
|
||||||
}
|
}
|
||||||
else
|
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. */
|
if (ret < 0) /* Replaced by "", i.e. nothing. */
|
||||||
return HANDLED_RECOMPUTE_PROPS;
|
return HANDLED_RECOMPUTE_PROPS;
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
@ -3894,6 +3939,9 @@ display_prop_end (it, object, start_pos)
|
||||||
replaced text display with something else, for example an image;
|
replaced text display with something else, for example an image;
|
||||||
we ignore such properties after the first one has been processed.
|
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
|
If PROP is a `space' or `image' specification, and in some other
|
||||||
cases too, set *POSITION to the position where the `display'
|
cases too, set *POSITION to the position where the `display'
|
||||||
property ends.
|
property ends.
|
||||||
|
|
@ -3903,11 +3951,12 @@ display_prop_end (it, object, start_pos)
|
||||||
"something" is "nothing". */
|
"something" is "nothing". */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
handle_single_display_spec (it, spec, object, position,
|
handle_single_display_spec (it, spec, object, overlay, position,
|
||||||
display_replaced_before_p)
|
display_replaced_before_p)
|
||||||
struct it *it;
|
struct it *it;
|
||||||
Lisp_Object spec;
|
Lisp_Object spec;
|
||||||
Lisp_Object object;
|
Lisp_Object object;
|
||||||
|
Lisp_Object overlay;
|
||||||
struct text_pos *position;
|
struct text_pos *position;
|
||||||
int display_replaced_before_p;
|
int display_replaced_before_p;
|
||||||
{
|
{
|
||||||
|
|
@ -4017,7 +4066,7 @@ handle_single_display_spec (it, spec, object, position,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle `(space_width WIDTH)'. */
|
/* Handle `(space-width WIDTH)'. */
|
||||||
if (CONSP (spec)
|
if (CONSP (spec)
|
||||||
&& EQ (XCAR (spec), Qspace_width)
|
&& EQ (XCAR (spec), Qspace_width)
|
||||||
&& CONSP (XCDR (spec)))
|
&& CONSP (XCDR (spec)))
|
||||||
|
|
@ -4141,6 +4190,7 @@ handle_single_display_spec (it, spec, object, position,
|
||||||
it->position = start_pos;
|
it->position = start_pos;
|
||||||
it->object = NILP (object) ? it->w->buffer : object;
|
it->object = NILP (object) ? it->w->buffer : object;
|
||||||
it->method = GET_FROM_IMAGE;
|
it->method = GET_FROM_IMAGE;
|
||||||
|
it->from_overlay = Qnil;
|
||||||
it->face_id = face_id;
|
it->face_id = face_id;
|
||||||
|
|
||||||
/* Say that we haven't consumed the characters with
|
/* Say that we haven't consumed the characters with
|
||||||
|
|
@ -4211,6 +4261,7 @@ handle_single_display_spec (it, spec, object, position,
|
||||||
it->position = *position;
|
it->position = *position;
|
||||||
push_it (it);
|
push_it (it);
|
||||||
it->position = save_pos;
|
it->position = save_pos;
|
||||||
|
it->from_overlay = overlay;
|
||||||
|
|
||||||
if (NILP (location))
|
if (NILP (location))
|
||||||
it->area = TEXT_AREA;
|
it->area = TEXT_AREA;
|
||||||
|
|
@ -4854,7 +4905,10 @@ load_overlay_strings (it, charpos)
|
||||||
i = 0;
|
i = 0;
|
||||||
j = it->current.overlay_string_index;
|
j = it->current.overlay_string_index;
|
||||||
while (i < OVERLAY_STRING_CHUNK_SIZE && j < n)
|
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);
|
CHECK_IT (it);
|
||||||
}
|
}
|
||||||
|
|
@ -4900,6 +4954,7 @@ get_overlay_strings_1 (it, charpos, compute_stop_p)
|
||||||
string. */
|
string. */
|
||||||
IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = 0;
|
IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = 0;
|
||||||
it->string = it->overlay_strings[0];
|
it->string = it->overlay_strings[0];
|
||||||
|
it->from_overlay = Qnil;
|
||||||
it->stop_charpos = 0;
|
it->stop_charpos = 0;
|
||||||
xassert (STRINGP (it->string));
|
xassert (STRINGP (it->string));
|
||||||
it->end_charpos = SCHARS (it->string);
|
it->end_charpos = SCHARS (it->string);
|
||||||
|
|
@ -4953,6 +5008,7 @@ push_it (it)
|
||||||
p->face_id = it->face_id;
|
p->face_id = it->face_id;
|
||||||
p->string = it->string;
|
p->string = it->string;
|
||||||
p->method = it->method;
|
p->method = it->method;
|
||||||
|
p->from_overlay = it->from_overlay;
|
||||||
switch (p->method)
|
switch (p->method)
|
||||||
{
|
{
|
||||||
case GET_FROM_IMAGE:
|
case GET_FROM_IMAGE:
|
||||||
|
|
@ -5006,6 +5062,7 @@ pop_it (it)
|
||||||
it->current = p->current;
|
it->current = p->current;
|
||||||
it->position = p->position;
|
it->position = p->position;
|
||||||
it->string = p->string;
|
it->string = p->string;
|
||||||
|
it->from_overlay = p->from_overlay;
|
||||||
if (NILP (it->string))
|
if (NILP (it->string))
|
||||||
SET_TEXT_POS (it->current.string_pos, -1, -1);
|
SET_TEXT_POS (it->current.string_pos, -1, -1);
|
||||||
it->method = p->method;
|
it->method = p->method;
|
||||||
|
|
@ -17388,7 +17445,9 @@ are the selected window and the window's buffer). */)
|
||||||
buffer = w->buffer;
|
buffer = w->buffer;
|
||||||
CHECK_BUFFER (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;
|
return empty_unibyte_string;
|
||||||
|
|
||||||
if (no_props)
|
if (no_props)
|
||||||
|
|
|
||||||
79
src/xfaces.c
79
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 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
|
/* Compute the face at character position POS in Lisp string STRING on
|
||||||
window W, for ASCII characters.
|
window W, for ASCII characters.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue