Commit 90de50e2 authored by Glenn Morris's avatar Glenn Morris

Merge from emacs-24; up to 2014-06-03T06:51:18Z!eliz@gnu.org

parents 799d2f3d 27433ff8
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):
......
......@@ -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
......
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
......
......@@ -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
......
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...)
......
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)
......
......@@ -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);
}
}
}
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment