Commit 0274862f authored by Paul Eggert's avatar Paul Eggert
Browse files

Merge from origin/emacs-25

d08afa1d * etc/AUTHORS: Update the AUTHORS file
26685000 ;; * ChangeLog.2: ChangeLog update.
7acfaead ; ChangeLog fixes
97d28b42 * admin/authors.el (authors-valid-file-names): Addition.
9ab52f69 * admin/authors.el: Additions.
0e646c73 Warn about Cairo-related problems
bc4c07fc Don't let completion break `declare' handling
66f95e0d Adjust match data before calling after-change-funs
52cf0d5d Do not show string-rectangle preview if minibuffer is empty
6a3d031a * etc/PROBLEMS: Add entry about selection problems under Plas...

# Conflicts:
#	ChangeLog.2
#	src/lisp.h
parents f902a6b8 d08afa1d
This diff is collapsed.
......@@ -652,6 +652,7 @@ Changes to files in this list are not listed.")
"ebuild.bat" "install.bat" "fast-install.bat"
"debug.bat.in" "emacs.bat.in" "addsection.c"
"inc/sys/dir.h" "inc/gettext.h"
"time.h"
".gdbinit-union"
"alloca.s"
"make-delta"
......@@ -750,11 +751,20 @@ Changes to files in this list are not listed.")
"getopt_.h" "getopt_int.h" "gettext.h" "leditcfns.c" "loadst.c"
"make-path.c" "qsort.c" "sorted-doc.c" "tcp.c" "timer.c" "wakeup.c"
"yow.c" "grep-changelog" "grep-changelog.1"
;; semantic files now removed from the repository
"semantic/bovine/c-by.el" "semantic/bovine/make-by.el"
"semantic/bovine/scm-by.el" "semantic/wisent/javat-wy.el"
"semantic/wisent/js-wy.el" "semantic/wisent/python-wy.el"
"srecode/srt-wy.el"
;; etc/
"emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
"test-distrib.c" "testfile"
"tpu-edt.doc" ; see below
"lisp/obsolete/vc-mcvs.el"
"obsolete/vc-mcvs.el"
"nnwarchive.el"
"nnultimate.el"
"nnslashdot.el"
"webmail.el"
)
"File names which are valid, but no longer exist (or cannot be found)
in the repository.")
......@@ -892,6 +902,14 @@ in the repository.")
("major.texi" . "modes.texi")
("msdog-xtra.texi" . "msdos-xtra.texi")
("msdog.texi" . "msdos.texi")
;; Moved from lisp/gnus/ to lisp/calendar/
("time-date.el" . "calendar/time-date.el")
;; Moved from lisp/gnus/ to lisp/mail/
("binhex.el" . "mail/binhex.el")
("uudecode.el" . "mail/uudecode.el")
;; Moved from lisp/gnus/ to lisp/net/
("imap.el" . "net/imap.el")
("rfc2104.el" . "net/rfc2104.el")
;; And from emacs/ to misc/ and back again.
("ns-emacs.texi" . "macos.texi")
("overrides.texi" . "gnus-overrides.texi")
......@@ -909,7 +927,6 @@ in the repository.")
("lisp/character-fold.el" . "lisp/char-fold.el")
("test/automated/character-fold-tests.el" . "test/automated/char-fold-tests.el")
("images/gnus/mail_send.xpm" . "mail-send.xpm") ; still in images/gnus
;; Renamed within same directory.
("schema/xhtml-basic-form.rnc" . "xhtml-bform.rnc" )
("schema/xhtml-basic-table.rnc" . "xhtml-btable.rnc")
("schema/xhtml-list.rnc" . "xhtml-lst.rnc")
......
This diff is collapsed.
......@@ -601,8 +601,10 @@ file names into backslashes. It no longer does that.
** New configure option --with-cairo.
This builds Emacs with Cairo drawing. As a side effect, it provides
support for built-in printing, when Emacs was built with GTK+.
Cairo drawing is an experimental feature in Emacs, and subject to
change in future releases.
The Emacs Cairo drawing is experimental and still has some known
display problems. We encourage more testing of this build and
reporting any problems you find, but it is not recommended for
production.
+++
** New configure option --with-modules.
......
......@@ -1039,6 +1039,28 @@ while, Emacs may print a message:
A workaround is to not use 'klipper'. Upgrading 'klipper' to the one
coming with KDE 3.3 or later also solves the problem.
*** KDE / Plasma 5: Emacs exhausts memory and needs to be killed
This problem occurs when large selections contain mixed line endings
(i.e. the buffer has LF line endings, but in some parts CRLF is used).
The source of the problem is currently under investigation, older
versions of Emacs up to 24.5 just hang for a few seconds and then
return with the message "Timed out waiting for property-notify event"
as described in the previous note. As a workaround, go to the
settings dialog for the Clipboard widget and select the option "Ignore
Selection".
Note: Plasma 5 has replaced the separate klipper process from earlier
KDE versions with functionality directly integrated into plasmashell,
so even if you've previously did not use klipper this will affect you.
Also, all configuration you might have done to klipper is not used by
the new Clipboard widget / plasmoid since it uses its own settings.
You can hide the Clipboard widget by removing its entry from the
system tray settings "Extra Items", but it's not clear if the
underlying functionality in plasmashell gets fully disabled as well.
At least a restart of plasmashell is required for the clipboard
history to be cleared.
*** CDE: Frames may cover dialogs they created when using CDE.
This can happen if you have "Allow Primary Windows On Top" enabled which
......
......@@ -6026,7 +6026,7 @@
 
2014-11-01 Michael R. Mauger <michael@mauger.com>
 
* sql.el (sql-mode-oracle-font-lock-keywords): Correct regexp
* progmodes/sql.el (sql-mode-oracle-font-lock-keywords): Correct regexp
syntax, add new keywords, and parse longer keywords first.
(sql-redirect-one): Protect against empty command.
(sql-mode, sql-interactive-mode): Set `custom-mode-group' property
......@@ -6034,7 +6034,7 @@
 
2014-11-01 Michael R. Mauger <michael@mauger.com>
 
* sql.el (sql-interactive-mode, sql-stop): Correct fix for
* progmodes/sql.el (sql-interactive-mode, sql-stop): Correct fix for
Bug#16814 with let-bind of comint-input-ring variables around read
and save functions.
 
......
......@@ -539,9 +539,9 @@ functions are annotated with \"<f>\" via the
(delete-dups
;; FIXME: We should include some
;; docstring with each entry.
(append
macro-declarations-alist
defun-declarations-alist)))))
(append macro-declarations-alist
defun-declarations-alist
nil))))) ; Copy both alists.
((and (or `condition-case `condition-case-unless-debug)
(guard (save-excursion
(ignore-errors
......
......@@ -410,9 +410,6 @@ With a prefix (or a FILL) argument, also fill too short lines."
(defun rectangle--string-preview ()
(when rectangle-preview
(let ((str (minibuffer-contents)))
(when (equal str "")
(setq str (or (car-safe minibuffer-default)
(if (stringp minibuffer-default) minibuffer-default))))
(when str (setq str (propertize str 'face 'rectangle-preview)))
(with-selected-window rectangle--string-preview-window
(unless (or (null rectangle--string-preview-state)
......
......@@ -447,7 +447,7 @@ internal_self_insert (int c, EMACS_INT n)
string = concat2 (string, tem);
}
replace_range (PT, PT + chars_to_delete, string, 1, 1, 1);
replace_range (PT, PT + chars_to_delete, string, 1, 1, 1, 0);
Fforward_char (make_number (n));
}
else if (n > 1)
......
......@@ -3244,7 +3244,7 @@ Both characters must have the same length of multi-byte form. */)
/* replace_range is less efficient, because it moves the gap,
but it handles combining correctly. */
replace_range (pos, pos + 1, string,
0, 0, 1);
0, 0, 1, 0);
pos_byte_next = CHAR_TO_BYTE (pos);
if (pos_byte_next > pos_byte)
/* Before combining happened. We should not increment
......@@ -3457,7 +3457,7 @@ It returns the number of characters changed. */)
/* This is less efficient, because it moves the gap,
but it should handle multibyte characters correctly. */
string = make_multibyte_string ((char *) str, 1, str_len);
replace_range (pos, pos + 1, string, 1, 0, 1);
replace_range (pos, pos + 1, string, 1, 0, 1, 0);
len = str_len;
}
else
......@@ -3498,7 +3498,7 @@ It returns the number of characters changed. */)
{
string = Fmake_string (make_number (1), val);
}
replace_range (pos, pos + len, string, 1, 0, 1);
replace_range (pos, pos + len, string, 1, 0, 1, 0);
pos_byte += SBYTES (string);
pos += SCHARS (string);
cnt += SCHARS (string);
......
......@@ -1340,7 +1340,9 @@ adjust_after_insert (ptrdiff_t from, ptrdiff_t from_byte,
/* Replace the text from character positions FROM to TO with NEW,
If PREPARE, call prepare_to_modify_buffer.
If INHERIT, the newly inserted text should inherit text properties
from the surrounding non-deleted text. */
from the surrounding non-deleted text.
If ADJUST_MATCH_DATA, then adjust the match data before calling
signal_after_change. */
/* Note that this does not yet handle markers quite right.
Also it needs to record a single undo-entry that does a replacement
......@@ -1351,7 +1353,8 @@ adjust_after_insert (ptrdiff_t from, ptrdiff_t from_byte,
void
replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new,
bool prepare, bool inherit, bool markers)
bool prepare, bool inherit, bool markers,
bool adjust_match_data)
{
ptrdiff_t inschars = SCHARS (new);
ptrdiff_t insbytes = SBYTES (new);
......@@ -1508,6 +1511,9 @@ replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new,
MODIFF++;
CHARS_MODIFF = MODIFF;
if (adjust_match_data)
update_search_regs (from, to, from + SCHARS (new));
signal_after_change (from, nchars_del, GPT - from);
update_compositions (from, GPT, CHECK_BORDER);
}
......
......@@ -3530,7 +3530,7 @@ extern void adjust_markers_for_delete (ptrdiff_t, ptrdiff_t,
ptrdiff_t, ptrdiff_t);
extern void adjust_markers_bytepos (ptrdiff_t, ptrdiff_t,
ptrdiff_t, ptrdiff_t, int);
extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, bool, bool, bool);
extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, bool, bool, bool, bool);
extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
const char *, ptrdiff_t, ptrdiff_t, bool);
extern void syms_of_insdel (void);
......@@ -4019,6 +4019,8 @@ extern Lisp_Object make_temp_name (Lisp_Object, bool);
/* Defined in search.c. */
extern void shrink_regexp_cache (void);
extern void restore_search_regs (void);
extern void update_search_regs (ptrdiff_t oldstart,
ptrdiff_t oldend, ptrdiff_t newend);
extern void record_unwind_save_match_data (void);
struct re_registers;
extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
......
......@@ -2712,16 +2712,23 @@ since only regular expressions have distinguished subexpressions. */)
/* The functions below modify the buffer, so they could trigger
various modification hooks (see signal_before_change and
signal_after_change), which might clobber the match data we need
to adjust after the replacement. If that happens, we error out. */
signal_after_change). If these hooks clobber the match data we
error out since otherwise this will result in confusing bugs. */
ptrdiff_t sub_start = search_regs.start[sub];
ptrdiff_t sub_end = search_regs.end[sub];
unsigned num_regs = search_regs.num_regs;
newpoint = search_regs.start[sub] + SCHARS (newtext);
/* Replace the old text with the new in the cleanest possible way. */
replace_range (search_regs.start[sub], search_regs.end[sub],
newtext, 1, 0, 1);
newpoint = search_regs.start[sub] + SCHARS (newtext);
newtext, 1, 0, 1, 1);
/* Update saved data to match adjustment made by replace_range. */
{
ptrdiff_t change = newpoint - sub_end;
if (sub_start >= sub_end)
sub_start += change;
sub_end += change;
}
if (case_action == all_caps)
Fupcase_region (make_number (search_regs.start[sub]),
......@@ -2736,26 +2743,6 @@ since only regular expressions have distinguished subexpressions. */)
|| search_regs.num_regs != num_regs)
error ("Match data clobbered by buffer modification hooks");
/* Adjust search data for this change. */
{
ptrdiff_t oldend = search_regs.end[sub];
ptrdiff_t oldstart = search_regs.start[sub];
ptrdiff_t change = newpoint - search_regs.end[sub];
ptrdiff_t i;
for (i = 0; i < search_regs.num_regs; i++)
{
if (search_regs.start[i] >= oldend)
search_regs.start[i] += change;
else if (search_regs.start[i] > oldstart)
search_regs.start[i] = oldstart;
if (search_regs.end[i] >= oldend)
search_regs.end[i] += change;
else if (search_regs.end[i] > oldstart)
search_regs.end[i] = oldstart;
}
}
/* Put point back where it was in the text. */
if (opoint <= 0)
TEMP_SET_PT (opoint + ZV);
......@@ -3096,6 +3083,27 @@ restore_search_regs (void)
}
}
/* Called from replace-match via replace_range. */
void
update_search_regs (ptrdiff_t oldstart, ptrdiff_t oldend, ptrdiff_t newend)
{
/* Adjust search data for this change. */
ptrdiff_t change = newend - oldend;
ptrdiff_t i;
for (i = 0; i < search_regs.num_regs; i++)
{
if (search_regs.start[i] >= oldend)
search_regs.start[i] += change;
else if (search_regs.start[i] > oldstart)
search_regs.start[i] = oldstart;
if (search_regs.end[i] >= oldend)
search_regs.end[i] += change;
else if (search_regs.end[i] > oldstart)
search_regs.end[i] = oldstart;
}
}
static void
unwind_set_match_data (Lisp_Object list)
{
......
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