Merge from emacs-24; up to 2014-06-03T06:51:18Z!eliz@gnu.org
This commit is contained in:
commit
90de50e270
15 changed files with 203 additions and 71 deletions
|
@ -1,3 +1,11 @@
|
|||
2014-06-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Port part of the AIX fix to Solaris (Bug#17598).
|
||||
* configure.ac (_REENTRANT): Define on Solaris if HAVE_PTHREAD.
|
||||
This ports part of the recent AIX fixes to Solaris. It is needed
|
||||
for the same reason that _THREAD_SAFE is needed on AIX, e.g., to
|
||||
make sure that each thread has its own 'errno'.
|
||||
|
||||
2014-06-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (CC, CFLAGS, LDFLAGS, CPPFLAGS, abs_top_srcdir):
|
||||
|
|
14
configure.ac
14
configure.ac
|
@ -2091,11 +2091,15 @@ if test "$ac_cv_header_pthread_h"; then
|
|||
# Some systems optimize for single-threaded programs by default, and
|
||||
# need special flags to disable these optimizations. For example, the
|
||||
# definition of 'errno' in <errno.h>.
|
||||
if test "$opsys" = aix4-2; then
|
||||
AC_DEFINE([_THREAD_SAFE], [1],
|
||||
[Define to 1 if your system requires this in multithreaded code.])
|
||||
fi])
|
||||
if test "X$LIBS" != "X$OLD_LIBS"; then
|
||||
case $opsys in
|
||||
sol*)
|
||||
AC_DEFINE([_REENTRANT], 1,
|
||||
[Define to 1 if your system requires this in multithreaded code.]);;
|
||||
aix4-2)
|
||||
AC_DEFINE([_THREAD_SAFE], 1,
|
||||
[Define to 1 if your system requires this in multithreaded code.]);;
|
||||
esac])
|
||||
if test "X$LIBS" != "X$OLD_LIBS"; then
|
||||
eval LIB_PTHREAD=\$ac_cv_search_$emacs_pthread_function
|
||||
fi
|
||||
LIBS=$OLD_LIBS
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-06-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* commands.texi (Accessing Mouse): Improve the wording of the
|
||||
posn-col-row documentation. (Bug#17768)
|
||||
|
||||
2014-06-10 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (INFO_EXT): Remove and replace by ".info" throughout.
|
||||
|
|
|
@ -2053,23 +2053,24 @@ POSITION is assumed to lie in a window text area."
|
|||
@defun posn-col-row position
|
||||
This function returns a cons cell @code{(@var{col} . @var{row})},
|
||||
containing the estimated column and row corresponding to buffer
|
||||
position @var{position}. The return value is given in units of the
|
||||
frame's default character width and height, as computed from the
|
||||
@var{x} and @var{y} values corresponding to @var{position}. (So, if
|
||||
the actual characters have non-default sizes, the actual row and
|
||||
column may differ from these computed values.)
|
||||
position in @var{position}. The return value is given in units of the
|
||||
frame's default character width and default line height (including
|
||||
spacing), as computed from the @var{x} and @var{y} values
|
||||
corresponding to @var{position}. (So, if the actual characters have
|
||||
non-default sizes, the actual row and column may differ from these
|
||||
computed values.)
|
||||
|
||||
Note that @var{row} is counted from the top of the text area. If the
|
||||
window possesses a header line (@pxref{Header Lines}), it is
|
||||
@emph{not} counted as the first line.
|
||||
window given by @var{position} possesses a header line (@pxref{Header
|
||||
Lines}), it is @emph{not} included in the @var{row} count.
|
||||
@end defun
|
||||
|
||||
@defun posn-actual-col-row position
|
||||
Return the actual row and column in @var{position}, as a cons cell
|
||||
@code{(@var{col} . @var{row})}. The values are the actual row and
|
||||
column numbers in the window. @xref{Click Events}, for details. It
|
||||
returns @code{nil} if @var{position} does not include actual positions
|
||||
values.
|
||||
column numbers in the window given by @var{position}. @xref{Click
|
||||
Events}, for details. The function returns @code{nil} if
|
||||
@var{position} does not include actual position values.
|
||||
@end defun
|
||||
|
||||
@defun posn-string position
|
||||
|
|
46
etc/NEWS
46
etc/NEWS
|
@ -309,16 +309,7 @@ removed.
|
|||
*** The function `quail-help' is no longer an interactive command.
|
||||
Use `C-h C-\' (`describe-input-method') instead.
|
||||
|
||||
** ImageMagick
|
||||
|
||||
*** ImageMagick images now support the :max-width and :max-height keywords.
|
||||
|
||||
*** When using `create-image' with image data, you can pass a :format
|
||||
attribute (via the property-list argument) in order to help
|
||||
ImageMagick detect the image type. The value should be a MIME
|
||||
content-type that is found in the new variable `image-format-suffixes'.
|
||||
|
||||
** Frame and window changes
|
||||
** Frame and window handling
|
||||
|
||||
*** New commands `toggle-frame-fullscreen' and `toggle-frame-maximized',
|
||||
bound to <f11> and M-<f10>, respectively.
|
||||
|
@ -416,7 +407,7 @@ bottom of the selected frame.
|
|||
caller of `display-buffer' is ready to handle the case of not displaying
|
||||
the buffer in a window.
|
||||
|
||||
** Lisp evaluation changes
|
||||
** Lisp evaluation
|
||||
|
||||
*** `eval-defun' on an already defined defcustom calls the :set function,
|
||||
if there is one.
|
||||
|
@ -450,7 +441,7 @@ simply disabling Transient Mark mode does the same thing.
|
|||
|
||||
* Editing Changes in Emacs 24.4
|
||||
|
||||
** Indentation changes
|
||||
** Indentation
|
||||
|
||||
*** `electric-indent-mode' is now enabled by default.
|
||||
Typing RET reindents the current line and indents the new line.
|
||||
|
@ -708,8 +699,7 @@ the symbol near point.
|
|||
*** New option `hi-lock-auto-select-face'. When non-nil, hi-lock commands
|
||||
will cycle through faces in `hi-lock-face-defaults' without prompting.
|
||||
|
||||
** Icomplete
|
||||
Icomplete is now more similar to Ido.
|
||||
** Icomplete is now more similar to Ido.
|
||||
|
||||
*** Icomplete by default now applies to all forms of minibuffer completion.
|
||||
The variable `icomplete-with-completion-tables' (now a user option)
|
||||
|
@ -1066,8 +1056,8 @@ Also the following files used by the now obsolete otodo-mode.el:
|
|||
|
||||
* New Modes and Packages in Emacs 24.4
|
||||
|
||||
** New package `eww' is a built-in web browser.
|
||||
(It is only available if Emacs is compiled with libxml2 support.)
|
||||
** New package eww.el provides a built-in web browser.
|
||||
This requires Emacs to have been compiled with libxml2 support.
|
||||
|
||||
** New package nadvice.el offers lighter-weight advice facilities.
|
||||
It is layered as:
|
||||
|
@ -1078,11 +1068,10 @@ any function-carrying place, such as process filters or `<foo>-function' hooks.
|
|||
*** `advice-add'/`advice-remove' to add/remove a piece of advice on a named
|
||||
function, much like `defadvice' does.
|
||||
|
||||
** New package frameset.el.
|
||||
It provides a set of operations to save a frameset (the state of all
|
||||
or a subset of the existing frames and windows, somewhat similar to a
|
||||
frame configuration), both in-session and persistently, and restore it
|
||||
at some point in the future.
|
||||
** New package frameset.el provides a set of operations to save a frameset
|
||||
(the state of all or a subset of the existing frames and windows, somewhat
|
||||
similar to a frame configuration), both in-session and persistently, and
|
||||
restore it at some point in the future.
|
||||
|
||||
** New package filenotify.el provides an interface for file system
|
||||
notifications. It requires that Emacs be compiled with one of the
|
||||
|
@ -1092,9 +1081,9 @@ low-level libraries gfilenotify.c, inotify.c or w32notify.c.
|
|||
display specified symbols as composed characters. E.g., in Emacs Lisp mode,
|
||||
this replaces the string "lambda" with the Greek lambda character.
|
||||
|
||||
** New minor mode `superword-mode'.
|
||||
This overrides the default word motion commands to treat "symbol_words"
|
||||
as a single word, similar to what `subword-mode' does.
|
||||
** New minor mode `superword-mode', which overrides the default word motion
|
||||
commands to treat "symbol_words" as a single word, similar to what
|
||||
`subword-mode' does.
|
||||
|
||||
|
||||
* Incompatible Lisp Changes in Emacs 24.4
|
||||
|
@ -1332,6 +1321,15 @@ animated images which do not specify a frame delay.
|
|||
*** New functions `image-current-frame' and `image-show-frame' for getting
|
||||
and setting the current frame of a multi-frame image.
|
||||
|
||||
** ImageMagick
|
||||
|
||||
*** ImageMagick images now support the :max-width and :max-height keywords.
|
||||
|
||||
*** When using `create-image' with image data, you can pass a :format
|
||||
attribute (via the property-list argument) in order to help
|
||||
ImageMagick detect the image type. The value should be a MIME
|
||||
content-type that is found in the new variable `image-format-suffixes'.
|
||||
|
||||
** Revert and Autorevert
|
||||
|
||||
*** If Emacs is compiled with file notification support, it uses notifications
|
||||
|
|
|
@ -159,7 +159,6 @@ This is due to a bug introduced in ImageMagick 6.8.2-3. The bug should
|
|||
be fixed in ImageMagick 6.8.3-10. See <URL:http://debbugs.gnu.org/13867>.
|
||||
|
||||
** Crashes when displaying GIF images in Emacs built with version
|
||||
|
||||
libungif-4.1.0 are resolved by using version libungif-4.1.0b1.
|
||||
Configure checks for the correct version, but this problem could occur
|
||||
if a binary built against a shared libungif is run on a system with an
|
||||
|
|
|
@ -1,6 +1,31 @@
|
|||
2014-06-14 Ron Schnell <ronnie@driver-aces.com>
|
||||
2014-06-15 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* progmodes/cc-langs.el: Require cl-lib. (Bug#17463)
|
||||
Replace delete-duplicates and mapcan by cl- versions throughout.
|
||||
And cl-macroexpand-all by macroexpand-all.
|
||||
(delete-duplicates, mapcan, cl-macroexpand-all): No need to declare.
|
||||
|
||||
2014-06-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* subr.el (posn-col-row): Doc fix. (Bug#17768)
|
||||
|
||||
2014-06-15 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* bindings.el: Put `ascii-character' property on keypad keys
|
||||
mapped to characters. (Bug#17759)
|
||||
|
||||
2014-06-15 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/smie.el (smie-next-sexp): Fix up "other-end" info when
|
||||
bumping forward into a closing paren (bug#17761).
|
||||
|
||||
* term/xterm.el (xterm--version-handler): Work around for OSX
|
||||
Terminal.app (bug#17607).
|
||||
|
||||
2014-06-14 Ron Schnell <ronnie@driver-aces.com>
|
||||
|
||||
* play/dunnet.el If a lamp is in the room, you won't be eaten by a grue.
|
||||
|
||||
|
||||
2014-06-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in ($(lisp)/cus-load.el, $(lisp)/finder-inf.el)
|
||||
|
|
|
@ -1075,10 +1075,14 @@ if `inhibit-field-text-motion' is non-nil."
|
|||
(kp-5 ?5) (kp-6 ?6) (kp-7 ?7) (kp-8 ?8) (kp-9 ?9)
|
||||
(kp-add ?+) (kp-subtract ?-) (kp-multiply ?*) (kp-divide ?/))))
|
||||
(dolist (pair keys)
|
||||
(dolist (mod modifiers)
|
||||
(define-key function-key-map
|
||||
(vector (append mod (list (nth 0 pair))))
|
||||
(vector (append mod (list (nth 1 pair))))))))
|
||||
(let ((keypad (nth 0 pair))
|
||||
(normal (nth 1 pair)))
|
||||
(when (characterp normal)
|
||||
(put keypad 'ascii-character normal))
|
||||
(dolist (mod modifiers)
|
||||
(define-key function-key-map
|
||||
(vector (append mod (list keypad)))
|
||||
(vector (append mod (list normal))))))))
|
||||
|
||||
(define-key function-key-map [backspace] [?\C-?])
|
||||
(define-key function-key-map [delete] [?\C-?])
|
||||
|
|
|
@ -709,7 +709,8 @@ Possible return values:
|
|||
(condition-case err
|
||||
(progn (funcall next-sexp 1) nil)
|
||||
(scan-error
|
||||
(let ((epos (nth 2 err)))
|
||||
(let* ((epos1 (nth 2 err))
|
||||
(epos (if (<= (point) epos1) (nth 3 err) epos1)))
|
||||
(goto-char pos)
|
||||
(throw 'return
|
||||
(list t epos
|
||||
|
@ -1832,6 +1833,8 @@ KEYWORDS are additional arguments, which can use the following keywords:
|
|||
(append smie-blink-matching-triggers
|
||||
(delete-dups triggers)))))))
|
||||
|
||||
(declare-function edebug-instrument-function "edebug" (func))
|
||||
|
||||
(defun smie-edebug ()
|
||||
"Instrument the `smie-rules-function' for Edebug."
|
||||
(interactive)
|
||||
|
|
|
@ -130,7 +130,9 @@
|
|||
|
||||
|
||||
;; This file is not always loaded. See note above.
|
||||
(cc-external-require 'cl)
|
||||
;; Except it is always loaded - see bug#17463.
|
||||
;;;(cc-external-require 'cl)
|
||||
(require 'cl-lib)
|
||||
|
||||
|
||||
;;; Setup for the `c-lang-defvar' system.
|
||||
|
@ -209,9 +211,9 @@ the evaluated constant value at compile time."
|
|||
;; Suppress "might not be defined at runtime" warning.
|
||||
;; This file is only used when compiling other cc files.
|
||||
;; These are defined in cl as aliases to the cl- versions.
|
||||
(declare-function delete-duplicates "cl-seq" (cl-seq &rest cl-keys) t)
|
||||
(declare-function mapcan "cl-extra" (cl-func cl-seq &rest cl-rest) t)
|
||||
(declare-function cl-macroexpand-all "cl" (form &optional env))
|
||||
;(declare-function delete-duplicates "cl-seq" (cl-seq &rest cl-keys) t)
|
||||
;(declare-function mapcan "cl-extra" (cl-func cl-seq &rest cl-rest) t)
|
||||
;(declare-function cl-macroexpand-all "cl" (form &optional env))
|
||||
|
||||
(eval-and-compile
|
||||
;; Some helper functions used when building the language constants.
|
||||
|
@ -252,14 +254,14 @@ the evaluated constant value at compile time."
|
|||
(unless xlate
|
||||
(setq xlate 'identity))
|
||||
(c-with-syntax-table (c-lang-const c-mode-syntax-table)
|
||||
(delete-duplicates
|
||||
(mapcan (lambda (opgroup)
|
||||
(cl-delete-duplicates
|
||||
(cl-mapcan (lambda (opgroup)
|
||||
(when (if (symbolp (car opgroup))
|
||||
(when (funcall opgroup-filter (car opgroup))
|
||||
(setq opgroup (cdr opgroup))
|
||||
t)
|
||||
t)
|
||||
(mapcan (lambda (op)
|
||||
(cl-mapcan (lambda (op)
|
||||
(when (funcall op-filter op)
|
||||
(let ((res (funcall xlate op)))
|
||||
(if (listp res) res (list res)))))
|
||||
|
@ -1147,7 +1149,7 @@ operators."
|
|||
(c-lang-defconst c-all-op-syntax-tokens
|
||||
;; List of all tokens in the punctuation and parenthesis syntax
|
||||
;; classes.
|
||||
t (delete-duplicates (append (c-lang-const c-other-op-syntax-tokens)
|
||||
t (cl-delete-duplicates (append (c-lang-const c-other-op-syntax-tokens)
|
||||
(c-lang-const c-operator-list))
|
||||
:test 'string-equal))
|
||||
|
||||
|
@ -1700,7 +1702,7 @@ not the type face."
|
|||
(c-lang-defconst c-type-start-kwds
|
||||
;; All keywords that can start a type (i.e. are either a type prefix
|
||||
;; or a complete type).
|
||||
t (delete-duplicates (append (c-lang-const c-primitive-type-kwds)
|
||||
t (cl-delete-duplicates (append (c-lang-const c-primitive-type-kwds)
|
||||
(c-lang-const c-type-prefix-kwds)
|
||||
(c-lang-const c-type-modifier-kwds))
|
||||
:test 'string-equal))
|
||||
|
@ -1943,7 +1945,7 @@ one of `c-type-list-kwds', `c-ref-list-kwds',
|
|||
;; something is a type or just some sort of macro in front of the
|
||||
;; declaration. They might be ambiguous with types or type
|
||||
;; prefixes.
|
||||
t (delete-duplicates (append (c-lang-const c-class-decl-kwds)
|
||||
t (cl-delete-duplicates (append (c-lang-const c-class-decl-kwds)
|
||||
(c-lang-const c-brace-list-decl-kwds)
|
||||
(c-lang-const c-other-block-decl-kwds)
|
||||
(c-lang-const c-typedef-decl-kwds)
|
||||
|
@ -2136,7 +2138,7 @@ type identifiers separated by arbitrary tokens."
|
|||
pike '("array" "function" "int" "mapping" "multiset" "object" "program"))
|
||||
|
||||
(c-lang-defconst c-paren-any-kwds
|
||||
t (delete-duplicates (append (c-lang-const c-paren-nontype-kwds)
|
||||
t (cl-delete-duplicates (append (c-lang-const c-paren-nontype-kwds)
|
||||
(c-lang-const c-paren-type-kwds))
|
||||
:test 'string-equal))
|
||||
|
||||
|
@ -2162,7 +2164,7 @@ assumed to be set if this isn't nil."
|
|||
|
||||
(c-lang-defconst c-<>-sexp-kwds
|
||||
;; All keywords that can be followed by an angle bracket sexp.
|
||||
t (delete-duplicates (append (c-lang-const c-<>-type-kwds)
|
||||
t (cl-delete-duplicates (append (c-lang-const c-<>-type-kwds)
|
||||
(c-lang-const c-<>-arglist-kwds))
|
||||
:test 'string-equal))
|
||||
|
||||
|
@ -2222,7 +2224,7 @@ Keywords here should also be in `c-block-stmt-1-kwds'."
|
|||
|
||||
(c-lang-defconst c-block-stmt-kwds
|
||||
;; Union of `c-block-stmt-1-kwds' and `c-block-stmt-2-kwds'.
|
||||
t (delete-duplicates (append (c-lang-const c-block-stmt-1-kwds)
|
||||
t (cl-delete-duplicates (append (c-lang-const c-block-stmt-1-kwds)
|
||||
(c-lang-const c-block-stmt-2-kwds))
|
||||
:test 'string-equal))
|
||||
|
||||
|
@ -2326,7 +2328,7 @@ This construct is \"<keyword> <expression> :\"."
|
|||
(c-lang-defconst c-expr-kwds
|
||||
;; Keywords that can occur anywhere in expressions. Built from
|
||||
;; `c-primary-expr-kwds' and all keyword operators in `c-operators'.
|
||||
t (delete-duplicates
|
||||
t (cl-delete-duplicates
|
||||
(append (c-lang-const c-primary-expr-kwds)
|
||||
(c-filter-ops (c-lang-const c-operator-list)
|
||||
t
|
||||
|
@ -2430,7 +2432,7 @@ Note that Java specific rules are currently applied to tell this from
|
|||
|
||||
(c-lang-defconst c-keywords
|
||||
;; All keywords as a list.
|
||||
t (delete-duplicates
|
||||
t (cl-delete-duplicates
|
||||
(c-lang-defconst-eval-immediately
|
||||
`(append ,@(mapcar (lambda (kwds-lang-const)
|
||||
`(c-lang-const ,kwds-lang-const))
|
||||
|
@ -3193,10 +3195,10 @@ accomplish that conveniently."
|
|||
;; `c-lang-const' will expand to the evaluated
|
||||
;; constant immediately in `cl-macroexpand-all'
|
||||
;; below.
|
||||
(mapcan
|
||||
(cl-mapcan
|
||||
(lambda (init)
|
||||
`(current-var ',(car init)
|
||||
,(car init) ,(cl-macroexpand-all
|
||||
,(car init) ,(macroexpand-all
|
||||
(elt init 1))))
|
||||
;; Note: The following `append' copies the
|
||||
;; first argument. That list is small, so
|
||||
|
|
|
@ -1127,7 +1127,7 @@ pixels. POSITION should be a list of the form returned by
|
|||
"Return the nominal column and row in POSITION, measured in characters.
|
||||
The column and row values are approximations calculated from the x
|
||||
and y coordinates in POSITION and the frame's default character width
|
||||
and height.
|
||||
and default line height, including spacing.
|
||||
For a scroll-bar event, the result column is 0, and the row
|
||||
corresponds to the vertical position of the click in the scroll bar.
|
||||
POSITION should be a list of the form returned by the `event-start'
|
||||
|
|
|
@ -605,6 +605,10 @@ The relevant features are:
|
|||
;; Gnome terminal 3.6.1 reports 1;3406;0
|
||||
;; Gnome terminal 2.32.1 reports 1;2802;0
|
||||
(setq version 200))
|
||||
(when (equal (match-string 1 str) "83")
|
||||
;; OSX's Terminal.app (version 2.3 (309), which returns 83;40003;0)
|
||||
;; seems to also lack support for some of these (bug#17607).
|
||||
(setq version 240))
|
||||
;; If version is 242 or higher, assume the xterm supports
|
||||
;; reporting the background color (TODO: maybe earlier
|
||||
;; versions do too...)
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
2014-06-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (Fmove_point_visually): Don't use the glyph matrix
|
||||
information if we are in the middle of executing a keyboard macro,
|
||||
since redisplay doesn't update the screen until the macro is
|
||||
finished. (Bug#17777)
|
||||
|
||||
* alloc.c (cleanup_vector): Don't dereference a font driver
|
||||
pointer if it is NULL. (Bug#17771)
|
||||
|
||||
2014-06-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in ($(leimdir)/leim-list.el, $(srcdir)/macuvs.h)
|
||||
|
|
13
src/alloc.c
13
src/alloc.c
|
@ -2974,9 +2974,16 @@ cleanup_vector (struct Lisp_Vector *vector)
|
|||
&& ((vector->header.size & PSEUDOVECTOR_SIZE_MASK)
|
||||
== FONT_OBJECT_MAX))
|
||||
{
|
||||
/* Attempt to catch subtle bugs like Bug#16140. */
|
||||
eassert (valid_font_driver (((struct font *) vector)->driver));
|
||||
((struct font *) vector)->driver->close ((struct font *) vector);
|
||||
struct font_driver *drv = ((struct font *) vector)->driver;
|
||||
|
||||
/* The font driver might sometimes be NULL, e.g. if Emacs was
|
||||
interrupted before it had time to set it up. */
|
||||
if (drv)
|
||||
{
|
||||
/* Attempt to catch subtle bugs like Bug#16140. */
|
||||
eassert (valid_font_driver (drv));
|
||||
drv->close ((struct font *) vector);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
68
src/xdisp.c
68
src/xdisp.c
|
@ -98,7 +98,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
This function attempts to redisplay a window by reusing parts of
|
||||
its existing display. It finds and reuses the part that was not
|
||||
changed, and redraws the rest.
|
||||
changed, and redraws the rest. (The "id" part in the function's
|
||||
name stands for "insert/delete", not for "identification" or
|
||||
somesuch.)
|
||||
|
||||
. try_window
|
||||
|
||||
|
@ -113,6 +115,19 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
optimizations were successful, redisplay calls redisplay_windows,
|
||||
which performs a full redisplay of all windows.
|
||||
|
||||
Note that there's one more important optimization up Emacs's
|
||||
sleeve, but it is related to actually redrawing the potentially
|
||||
changed portions of the window/frame, not to reproducing the
|
||||
desired matrices of those potentially changed portions. Namely,
|
||||
the function update_frame and its subroutines, which you will find
|
||||
in dispnew.c, compare the desired matrices with the current
|
||||
matrices, and only redraw the portions that changed. So it could
|
||||
happen that the functions in this file for some reason decide that
|
||||
the entire desired matrix needs to be regenerated from scratch, and
|
||||
still only parts of the Emacs display, or even nothing at all, will
|
||||
be actually delivered to the glass, because update_frame has found
|
||||
that the new and the old screen contents are similar or identical.
|
||||
|
||||
Desired matrices.
|
||||
|
||||
Desired matrices are always built per Emacs window. The function
|
||||
|
@ -15746,7 +15761,51 @@ set_vertical_scroll_bar (struct window *w)
|
|||
selected_window is redisplayed.
|
||||
|
||||
We can return without actually redisplaying the window if fonts has been
|
||||
changed on window's frame. In that case, redisplay_internal will retry. */
|
||||
changed on window's frame. In that case, redisplay_internal will retry.
|
||||
|
||||
As one of the important parts of redisplaying a window, we need to
|
||||
decide whether the previous window-start position (stored in the
|
||||
window's w->start marker position) is still valid, and if it isn't,
|
||||
recompute it. Some details about that:
|
||||
|
||||
. The previous window-start could be in a continuation line, in
|
||||
which case we need to recompute it when the window width
|
||||
changes. See compute_window_start_on_continuation_line and its
|
||||
call below.
|
||||
|
||||
. The text that changed since last redisplay could include the
|
||||
previous window-start position. In that case, we try to salvage
|
||||
what we can from the current glyph matrix by calling
|
||||
try_scrolling, which see.
|
||||
|
||||
. Some Emacs command could force us to use a specific window-start
|
||||
position by setting the window's force_start flag, or gently
|
||||
propose doing that by setting the window's optional_new_start
|
||||
flag. In these cases, we try using the specified start point if
|
||||
that succeeds (i.e. the window desired matrix is successfully
|
||||
recomputed, and point location is within the window). In case
|
||||
of optional_new_start, we first check if the specified start
|
||||
position is feasible, i.e. if it will allow point to be
|
||||
displayed in the window. If using the specified start point
|
||||
fails, e.g., if new fonts are needed to be loaded, we abort the
|
||||
redisplay cycle and leave it up to the next cycle to figure out
|
||||
things.
|
||||
|
||||
. Note that the window's force_start flag is sometimes set by
|
||||
redisplay itself, when it decides that the previous window start
|
||||
point is fine and should be kept. Search for "goto force_start"
|
||||
below to see the details. Like the values of window-start
|
||||
specified outside of redisply, these internally deduced values
|
||||
are tested for feasibility, and ignored if found to be
|
||||
unfeasible.
|
||||
|
||||
. Note that the function try_window, used to completely redisplay
|
||||
a window, accepts the window's start point as its argument.
|
||||
This is used several times in the redisplay code to control
|
||||
where the window start will be, according to user options such
|
||||
as scroll-conservatively, and also to ensure the screen line
|
||||
showing point will be fully (as opposed to partially) visible on
|
||||
display. */
|
||||
|
||||
static void
|
||||
redisplay_window (Lisp_Object window, bool just_this_one_p)
|
||||
|
@ -15792,6 +15851,8 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
|
|||
eassert (XMARKER (w->start)->buffer == buffer);
|
||||
eassert (XMARKER (w->pointm)->buffer == buffer);
|
||||
|
||||
/* We come here again if we need to run window-text-change-functions
|
||||
below. */
|
||||
restart:
|
||||
reconsider_clip_changes (w);
|
||||
frame_line_height = default_line_pixel_height (w);
|
||||
|
@ -15856,7 +15917,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
|
|||
&& !current_buffer->prevent_redisplay_optimizations_p
|
||||
&& !window_outdated (w));
|
||||
|
||||
/* Run the window-bottom-change-functions
|
||||
/* Run the window-text-change-functions
|
||||
if it is possible that the text on the screen has changed
|
||||
(either due to modification of the text, or any other reason). */
|
||||
if (!current_matrix_up_to_date_p
|
||||
|
@ -20685,6 +20746,7 @@ Value is the new character position of point. */)
|
|||
recorded in the glyphs, at least as long as the goal is on the
|
||||
screen. */
|
||||
if (w->window_end_valid
|
||||
&& NILP (Vexecuting_kbd_macro)
|
||||
&& !windows_or_buffers_changed
|
||||
&& b
|
||||
&& !b->clip_changed
|
||||
|
|
Loading…
Add table
Reference in a new issue