aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Wiegley2016-01-11 22:50:30 -0800
committerJohn Wiegley2016-01-11 22:50:30 -0800
commitfee9e3ff5e3181e5e477849b5db94e7e39a4e0c4 (patch)
treeb5a8934d6b587f3517d2b8214a6738374b07820d
parent2d7f4d99f715a3b32bb2873be6e9b4e7e1dad1da (diff)
parentce4a052415b70030ee591af3cb5bed0fb79ef3aa (diff)
downloademacs-fee9e3ff5e3181e5e477849b5db94e7e39a4e0c4.tar.gz
emacs-fee9e3ff5e3181e5e477849b5db94e7e39a4e0c4.zip
Merge from origin/emacs-25
ce4a052 Add defvar-local to lisp-imenu-generic-expression a0121bc Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd 76fe2d5 * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix. 1ae088f * lisp/emacs-lisp/autoload.el (autoload-find-destination): b6b47af Properly encode/decode base64Binary data in SOAP c632466 Obey coding-system-for-write when writing stdout/stderr in batch 2f32cb5 * doc/misc/efaq.texi (Packages that do not come with Emacs): Update the URI of MELPA and marmalade-repo. Reported by CHENG Goa <chenggao@royau.me> in https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html. d2937aa * lisp/progmodes/opascal.el (opascal-mode-syntax-table): 5330c25 * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit): 7380990 Remove function wrongly on AWK Mode value of context fontification hook. d400753 * src/buffer.c: Stick with ASCII in doc string. 221240c Reword transient-mark-mode doc string 977d3ea Update doc string of 'selective-display' 229c3fa Make C++ buffers writeable when writing their initial text properties. f5c762c Additional changes for "make check-expensive" 1729cf3 ; * admin/MAINTAINERS: Remove myself. 33219d3 Apply text properties for <, > in new after-change function (C++ Java Modes).
-rw-r--r--CONTRIBUTE8
-rw-r--r--admin/MAINTAINERS3
-rw-r--r--doc/lispref/os.texi24
-rw-r--r--doc/misc/efaq.texi8
-rw-r--r--etc/NEWS4
-rw-r--r--lisp/emacs-lisp/autoload.el5
-rw-r--r--lisp/emacs-lisp/easy-mmode.el11
-rw-r--r--lisp/emacs-lisp/lisp-mode.el5
-rw-r--r--lisp/net/soap-client.el4
-rw-r--r--lisp/progmodes/cc-cmds.el38
-rw-r--r--lisp/progmodes/cc-engine.el83
-rw-r--r--lisp/progmodes/cc-fonts.el25
-rw-r--r--lisp/progmodes/cc-langs.el13
-rw-r--r--lisp/progmodes/cc-mode.el20
-rw-r--r--lisp/progmodes/opascal.el1
-rw-r--r--lisp/progmodes/xscheme.el5
-rw-r--r--src/buffer.c11
-rw-r--r--src/print.c12
-rw-r--r--src/xdisp.c11
-rw-r--r--test/Makefile.in3
20 files changed, 189 insertions, 105 deletions
diff --git a/CONTRIBUTE b/CONTRIBUTE
index 19ec68221c4..323f9b9d060 100644
--- a/CONTRIBUTE
+++ b/CONTRIBUTE
@@ -262,12 +262,20 @@ Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See (info
262"(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/ 262"(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/
263for more information on writing and running tests. 263for more information on writing and running tests.
264 264
265If your test lasts longer than some few seconds, mark it in its
266`ert-deftest' definition with ":tags '(:expensive-test)".
267
265To run tests on the entire Emacs tree, run "make check" from the 268To run tests on the entire Emacs tree, run "make check" from the
266top-level directory. Most tests are in the directory 269top-level directory. Most tests are in the directory
267"test/". From the "test/" directory, run "make 270"test/". From the "test/" directory, run "make
268<filename>" to run the tests for <filename>.el(c). See 271<filename>" to run the tests for <filename>.el(c). See
269"test/Makefile" for more information. 272"test/Makefile" for more information.
270 273
274Tests which are tagged ":expensive-test" are enabled additionally, if
275you run "make check-expensive" from the top-level directory. "make
276<filename>" as mentioned above incorporates expensive tests for
277<filename>.el(c).
278
271** Understanding Emacs Internals. 279** Understanding Emacs Internals.
272 280
273The best way to understand Emacs Internals is to read the code, 281The best way to understand Emacs Internals is to read the code,
diff --git a/admin/MAINTAINERS b/admin/MAINTAINERS
index dc6c0d26ae9..859046a6324 100644
--- a/admin/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -218,9 +218,6 @@ Nicolas Petton
218 lisp/emacs-lisp/subr-x.el 218 lisp/emacs-lisp/subr-x.el
219 lisp/arc-mode.el 219 lisp/arc-mode.el
220 220
221Xue Fuqiao
222 doc/lispref/*
223
224Tassilo Horn 221Tassilo Horn
225 lisp/doc-view.el 222 lisp/doc-view.el
226 223
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 9db5e9e1e97..8e3720eb947 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -2085,6 +2085,8 @@ than optimal. To fix the problem, set @code{baud-rate}.
2085@defun send-string-to-terminal string &optional terminal 2085@defun send-string-to-terminal string &optional terminal
2086This function sends @var{string} to @var{terminal} without alteration. 2086This function sends @var{string} to @var{terminal} without alteration.
2087Control characters in @var{string} have terminal-dependent effects. 2087Control characters in @var{string} have terminal-dependent effects.
2088(If you need to display non-ASCII text on the terminal, encode it
2089using one of the functions described in @ref{Explicit Encoding}.)
2088This function operates only on text terminals. @var{terminal} may be 2090This function operates only on text terminals. @var{terminal} may be
2089a terminal object, a frame, or @code{nil} for the selected frame's 2091a terminal object, a frame, or @code{nil} for the selected frame's
2090terminal. In batch mode, @var{string} is sent to @code{stdout} when 2092terminal. In batch mode, @var{string} is sent to @code{stdout} when
@@ -2252,13 +2254,21 @@ loads the library named @var{file}, or @samp{-f @var{function}}, which
2252calls @var{function} with no arguments, or @samp{--eval @var{form}}. 2254calls @var{function} with no arguments, or @samp{--eval @var{form}}.
2253 2255
2254 Any Lisp program output that would normally go to the echo area, 2256 Any Lisp program output that would normally go to the echo area,
2255either using @code{message}, or using @code{prin1}, etc., with @code{t} 2257either using @code{message}, or using @code{prin1}, etc., with
2256as the stream, goes instead to Emacs's standard error descriptor when 2258@code{t} as the stream, goes instead to Emacs's standard descriptors
2257in batch mode. Similarly, input that would normally come from the 2259when in batch mode: @code{message} writes to the standard error
2258minibuffer is read from the standard input descriptor. 2260descriptor, while @code{prin1} and other print functions write to the
2259Thus, Emacs behaves much like a noninteractive 2261standard output. Similarly, input that would normally come from the
2260application program. (The echo area output that Emacs itself normally 2262minibuffer is read from the standard input descriptor. Thus, Emacs
2261generates, such as command echoing, is suppressed entirely.) 2263behaves much like a noninteractive application program. (The echo
2264area output that Emacs itself normally generates, such as command
2265echoing, is suppressed entirely.)
2266
2267Non-ASCII text written to the standard output or error descriptors is
2268by default encoded using @code{locale-coding-system} (@pxref{Locales})
2269if it is non-@code{nil}; this can be overridden by binding
2270@code{coding-system-for-write} to a coding system of you choice
2271(@pxref{Explicit Encoding}).
2262 2272
2263@defvar noninteractive 2273@defvar noninteractive
2264This variable is non-@code{nil} when Emacs is running in batch mode. 2274This variable is non-@code{nil} when Emacs is running in batch mode.
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index bbd9354c786..5008db31f25 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -3308,10 +3308,10 @@ available, and then Emacs can automatically download and install the
3308packages that you select. @xref{Packages,,, emacs, The GNU Emacs Manual}. 3308packages that you select. @xref{Packages,,, emacs, The GNU Emacs Manual}.
3309 3309
3310There are other, non-GNU, Emacs Lisp package servers, including: 3310There are other, non-GNU, Emacs Lisp package servers, including:
3311@uref{http://melpa.milkbox.net, MELPA}; and 3311@uref{http://melpa.org/, MELPA}; and
3312@uref{http://marmalade-repo.org, Marmalade}. To use additional 3312@uref{https://marmalade-repo.org/, Marmalade}. To use additional
3313package servers, customize the @code{package-archives} variable. 3313package servers, customize the @code{package-archives} variable. Be
3314Be aware that installing a package can run arbitrary code, so only add 3314aware that installing a package can run arbitrary code, so only add
3315sources that you trust. 3315sources that you trust.
3316 3316
3317The @uref{https://lists.gnu.org/mailman/listinfo/gnu-emacs-sources, 3317The @uref{https://lists.gnu.org/mailman/listinfo/gnu-emacs-sources,
diff --git a/etc/NEWS b/etc/NEWS
index 0566ff2e834..2c6f6fc8f02 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -148,6 +148,10 @@ so if you want to use it, you can always take a copy from an older Emacs.
148Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png. 148Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png.
149The old Emacs logo icons are available as `emacs23.png' in the same location. 149The old Emacs logo icons are available as `emacs23.png' in the same location.
150 150
151** New make target `check-expensive' to run additional tests.
152This includes all tests which run via "make check", plus additional
153tests which take more time to perform.
154
151 155
152* Startup Changes in Emacs 25.1 156* Startup Changes in Emacs 25.1
153 157
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index 401b419a993..3405b09e6f5 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -701,8 +701,9 @@ Return FILE if there was no autoload cookie in it, else nil."
701(defun autoload-find-destination (file load-name) 701(defun autoload-find-destination (file load-name)
702 "Find the destination point of the current buffer's autoloads. 702 "Find the destination point of the current buffer's autoloads.
703FILE is the file name of the current buffer. 703FILE is the file name of the current buffer.
704LOAD-NAME is the name as it appears in the output.
704Returns a buffer whose point is placed at the requested location. 705Returns a buffer whose point is placed at the requested location.
705Returns nil if the file's autoloads are uptodate, otherwise 706Returns nil if the file's autoloads are up-to-date, otherwise
706removes any prior now out-of-date autoload entries." 707removes any prior now out-of-date autoload entries."
707 (catch 'up-to-date 708 (catch 'up-to-date
708 (let* ((buf (current-buffer)) 709 (let* ((buf (current-buffer))
@@ -738,7 +739,7 @@ removes any prior now out-of-date autoload entries."
738 ;; last-time is the time-stamp (specifying 739 ;; last-time is the time-stamp (specifying
739 ;; the last time we looked at the file) and 740 ;; the last time we looked at the file) and
740 ;; the file hasn't been changed since. 741 ;; the file hasn't been changed since.
741 ((listp last-time) 742 ((listp last-time) (= (length last-time) 2)
742 (not (time-less-p last-time file-time))) 743 (not (time-less-p last-time file-time)))
743 ;; FIXME? Arguably we should throw a 744 ;; FIXME? Arguably we should throw a
744 ;; user error, or some kind of warning, 745 ;; user error, or some kind of warning,
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 5543e920c67..f29f64f0562 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -152,12 +152,11 @@ For example, you could write
152 ...BODY CODE...)" 152 ...BODY CODE...)"
153 (declare (doc-string 2) 153 (declare (doc-string 2)
154 (debug (&define name string-or-null-p 154 (debug (&define name string-or-null-p
155 [&optional [&not keywordp] sexp 155 [&optional [&not keywordp] sexp
156 &optional [&not keywordp] sexp 156 &optional [&not keywordp] sexp
157 &optional [&not keywordp] sexp] 157 &optional [&not keywordp] sexp]
158 [&rest [keywordp sexp]] 158 [&rest [keywordp sexp]]
159 def-body)) 159 def-body)))
160 (indent 1))
161 160
162 ;; Allow skipping the first three args. 161 ;; Allow skipping the first three args.
163 (cond 162 (cond
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 574ecef0cde..cb8abde52ed 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -131,9 +131,10 @@
131 t)) 131 t))
132 "\\s-+\\(" lisp-mode-symbol-regexp "\\)")) 132 "\\s-+\\(" lisp-mode-symbol-regexp "\\)"))
133 2) 133 2)
134 ;; For `defvar', we ignore (defvar FOO) constructs. 134 ;; For `defvar'/`defvar-local', we ignore (defvar FOO) constructs.
135 (list (purecopy "Variables") 135 (list (purecopy "Variables")
136 (purecopy (concat "^\\s-*(defvar\\s-+\\(" lisp-mode-symbol-regexp "\\)" 136 (purecopy (concat "^\\s-*(defvar\\(?:-local\\)?\\s-+\\("
137 lisp-mode-symbol-regexp "\\)"
137 "[[:space:]\n]+[^)]")) 138 "[[:space:]\n]+[^)]"))
138 1) 139 1)
139 (list (purecopy "Types") 140 (list (purecopy "Types")
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index f8cdaa9bc56..74024644966 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -538,7 +538,7 @@ This is a specialization of `soap-encode-value' for
538 (base64Binary 538 (base64Binary
539 (unless (stringp value) 539 (unless (stringp value)
540 (error "Not a string value for base64Binary")) 540 (error "Not a string value for base64Binary"))
541 (base64-encode-string value)) 541 (base64-encode-string (encode-coding-string value 'utf-8)))
542 542
543 (otherwise 543 (otherwise
544 (error "Don't know how to encode %s for type %s" 544 (error "Don't know how to encode %s for type %s"
@@ -682,7 +682,7 @@ This is a specialization of `soap-decode-type' for
682 decimal byte float double duration) 682 decimal byte float double duration)
683 (string-to-number (car contents))) 683 (string-to-number (car contents)))
684 (boolean (string= (downcase (car contents)) "true")) 684 (boolean (string= (downcase (car contents)) "true"))
685 (base64Binary (base64-decode-string (car contents))) 685 (base64Binary (decode-coding-string (base64-decode-string (car contents)) 'utf-8))
686 (anyType (soap-decode-any-type node)) 686 (anyType (soap-decode-any-type node))
687 (Array (soap-decode-array node)))))) 687 (Array (soap-decode-array node))))))
688 688
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index a46f0488e76..6761de11700 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -1121,35 +1121,15 @@ numeric argument is supplied, or the point is inside a literal."
1121 (looking-at "<<")) 1121 (looking-at "<<"))
1122 (>= (match-end 0) final-pos))) 1122 (>= (match-end 0) final-pos)))
1123 1123
1124 ;; It's a >. Either a C++ >> operator. ...... 1124 ;; It's a >. Either a template/generic terminator ...
1125 (or (and (c-major-mode-is 'c++-mode) 1125 (or (c-get-char-property (1- final-pos) 'syntax-table)
1126 ;; or a C++ >> operator.
1127 (and (c-major-mode-is 'c++-mode)
1126 (progn 1128 (progn
1127 (goto-char (1- final-pos)) 1129 (goto-char (1- final-pos))
1128 (c-beginning-of-current-token) 1130 (c-beginning-of-current-token)
1129 (looking-at ">>")) 1131 (looking-at ">>"))
1130 (>= (match-end 0) final-pos)) 1132 (>= (match-end 0) final-pos))))))
1131 ;; ...., or search back for a < which isn't already marked as an
1132 ;; opening template delimiter.
1133 (save-restriction
1134 (widen)
1135 ;; Narrow to avoid `c-forward-<>-arglist' below searching past
1136 ;; our position.
1137 (narrow-to-region (point-min) final-pos)
1138 (goto-char final-pos)
1139 (while
1140 (and
1141 (progn
1142 (c-syntactic-skip-backward "^<;}" nil t)
1143 (eq (char-before) ?<))
1144 (progn
1145 (backward-char)
1146 (looking-at "\\s("))))
1147 (and (eq (char-after) ?<)
1148 (not (looking-at "\\s("))
1149 (progn (c-backward-syntactic-ws)
1150 (c-simple-skip-symbol-backward))
1151 (or (looking-at c-opt-<>-sexp-key)
1152 (not (looking-at c-keywords-regexp)))))))))
1153 1133
1154 (goto-char final-pos) 1134 (goto-char final-pos)
1155 (when found-delim 1135 (when found-delim
@@ -1157,11 +1137,9 @@ numeric argument is supplied, or the point is inside a literal."
1157 (when (and (eq (char-before) ?>) 1137 (when (and (eq (char-before) ?>)
1158 (not executing-kbd-macro) 1138 (not executing-kbd-macro)
1159 blink-paren-function) 1139 blink-paren-function)
1160 ;; Currently (2014-10-19), the syntax-table text properties on < and > 1140 ;; From now (2016-01-01), the syntax-table text properties on < and >
1161 ;; are only applied in code called during Emacs redisplay. We thus 1141 ;; are applied in an after-change function, not during redisplay. Hence
1162 ;; explicitly cause a redisplay so that these properties have been 1142 ;; we no longer need to call (sit-for 0) for blink paren to work.
1163 ;; applied when `blink-paren-function' gets called.
1164 (sit-for 0)
1165 (funcall blink-paren-function))))) 1143 (funcall blink-paren-function)))))
1166 1144
1167(defun c-electric-paren (arg) 1145(defun c-electric-paren (arg)
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 617c94aae08..3301d415923 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -5577,8 +5577,9 @@ comment at the start of cc-engine.el for more info."
5577 5577
5578(defun c-before-change-check-<>-operators (beg end) 5578(defun c-before-change-check-<>-operators (beg end)
5579 ;; Unmark certain pairs of "< .... >" which are currently marked as 5579 ;; Unmark certain pairs of "< .... >" which are currently marked as
5580 ;; template/generic delimiters. (This marking is via syntax-table 5580 ;; template/generic delimiters. (This marking is via syntax-table text
5581 ;; text properties). 5581 ;; properties), and expand the (c-new-BEG c-new-END) region to include all
5582 ;; unmarked < and > operators within the certain bounds (see below).
5582 ;; 5583 ;;
5583 ;; These pairs are those which are in the current "statement" (i.e., 5584 ;; These pairs are those which are in the current "statement" (i.e.,
5584 ;; the region between the {, }, or ; before BEG and the one after 5585 ;; the region between the {, }, or ; before BEG and the one after
@@ -5595,40 +5596,43 @@ comment at the start of cc-engine.el for more info."
5595 ;; FIXME!!! This routine ignores the possibility of macros entirely. 5596 ;; FIXME!!! This routine ignores the possibility of macros entirely.
5596 ;; 2010-01-29. 5597 ;; 2010-01-29.
5597 (save-excursion 5598 (save-excursion
5598 (let ((beg-lit-limits (progn (goto-char beg) (c-literal-limits))) 5599 (c-save-buffer-state
5599 (end-lit-limits (progn (goto-char end) (c-literal-limits))) 5600 ((beg-lit-limits (progn (goto-char beg) (c-literal-limits)))
5600 new-beg new-end need-new-beg need-new-end) 5601 (end-lit-limits (progn (goto-char end) (c-literal-limits)))
5601 ;; Locate the barrier before the changed region 5602 new-beg new-end beg-limit end-limit)
5603 ;; Locate the earliest < after the barrier before the changed region,
5604 ;; which isn't already marked as a paren.
5602 (goto-char (if beg-lit-limits (car beg-lit-limits) beg)) 5605 (goto-char (if beg-lit-limits (car beg-lit-limits) beg))
5603 (c-syntactic-skip-backward "^;{}" (c-determine-limit 512)) 5606 (setq beg-limit (c-determine-limit 512))
5604 (setq new-beg (point))
5605 5607
5606 ;; Remove the syntax-table/category properties from each pertinent <...> 5608 ;; Remove the syntax-table/category properties from each pertinent <...>
5607 ;; pair. Firsly, the ones with the < before beg and > after beg. 5609 ;; pair. Firstly, the ones with the < before beg and > after beg....
5608 (while 5610 (while (progn (c-syntactic-skip-backward "^;{}<" beg-limit)
5609 (c-search-forward-char-property 'syntax-table c-<-as-paren-syntax beg) 5611 (eq (char-before) ?<))
5610 (if (c-clear-<-pair-props-if-match-after beg (1- (point))) 5612 (c-backward-token-2)
5611 (setq need-new-beg t))) 5613 (when (eq (char-after) ?<)
5614 (c-clear-<-pair-props-if-match-after beg)))
5615 (c-forward-syntactic-ws)
5616 (setq new-beg (point))
5612 5617
5613 ;; Locate the barrier after END. 5618 ;; ...Then the ones with < before end and > after end.
5614 (goto-char (if end-lit-limits (cdr end-lit-limits) end)) 5619 (goto-char (if end-lit-limits (cdr end-lit-limits) end))
5615 (c-syntactic-re-search-forward "[;{}]" (c-determine-+ve-limit 512) 'end) 5620 (setq end-limit (c-determine-+ve-limit 512))
5621 (while (and (c-syntactic-re-search-forward "[;{}>]" end-limit 'end)
5622 (eq (char-before) ?>))
5623 (c-end-of-current-token)
5624 (when (eq (char-before) ?>)
5625 (c-clear->-pair-props-if-match-before end (1- (point)))))
5626 (c-backward-syntactic-ws)
5616 (setq new-end (point)) 5627 (setq new-end (point))
5617 5628
5618 ;; Remove syntax-table properties from the remaining pertinent <...>
5619 ;; pairs, those with a > after end and < before end.
5620 (while (c-search-backward-char-property 'syntax-table c->-as-paren-syntax end)
5621 (if (c-clear->-pair-props-if-match-before end)
5622 (setq need-new-end t)))
5623
5624 ;; Extend the fontification region, if needed. 5629 ;; Extend the fontification region, if needed.
5625 (when need-new-beg 5630 (and new-beg
5626 (goto-char new-beg) 5631 (< new-beg c-new-BEG)
5627 (c-forward-syntactic-ws) 5632 (setq c-new-BEG new-beg))
5628 (and (< (point) c-new-BEG) (setq c-new-BEG (point)))) 5633 (and new-end
5629 5634 (> new-end c-new-END)
5630 (when need-new-end 5635 (setq c-new-END new-end)))))
5631 (and (> new-end c-new-END) (setq c-new-END new-end))))))
5632 5636
5633(defun c-after-change-check-<>-operators (beg end) 5637(defun c-after-change-check-<>-operators (beg end)
5634 ;; This is called from `after-change-functions' when 5638 ;; This is called from `after-change-functions' when
@@ -5668,7 +5672,28 @@ comment at the start of cc-engine.el for more info."
5668 (c-clear-<>-pair-props) 5672 (c-clear-<>-pair-props)
5669 (forward-char))))))) 5673 (forward-char)))))))
5670 5674
5671 5675(defun c-restore-<>-properties (_beg _end _old-len)
5676 ;; This function is called as an after-change function. It restores the
5677 ;; category/syntax-table properties on template/generic <..> pairs between
5678 ;; c-new-BEG and c-new-END. It may do hidden buffer changes.
5679 (c-save-buffer-state ((c-parse-and-markup-<>-arglists t)
5680 c-restricted-<>-arglists lit-limits)
5681 (goto-char c-new-BEG)
5682 (if (setq lit-limits (c-literal-limits))
5683 (goto-char (cdr lit-limits)))
5684 (while (and (< (point) c-new-END)
5685 (c-syntactic-re-search-forward "<" c-new-END 'bound))
5686 (backward-char)
5687 (save-excursion
5688 (c-backward-token-2)
5689 (setq c-restricted-<>-arglists
5690 (and (not (looking-at c-opt-<>-sexp-key))
5691 (progn (c-backward-syntactic-ws) ; to < or ,
5692 (and (memq (char-before) '(?< ?,))
5693 (not (eq (c-get-char-property (point) 'c-type)
5694 'c-decl-arg-start)))))))
5695 (or (c-forward-<>-arglist nil)
5696 (forward-char)))))
5672 5697
5673;; Handling of small scale constructs like types and names. 5698;; Handling of small scale constructs like types and names.
5674 5699
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index c2b2d72649f..f74e5cbf678 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1205,6 +1205,9 @@ casts and declarations are fontified. Used on level 2 and higher."
1205 ;; Same as `max-type-decl-*', but used when we're before 1205 ;; Same as `max-type-decl-*', but used when we're before
1206 ;; `token-pos'. 1206 ;; `token-pos'.
1207 (max-type-decl-end-before-token 0) 1207 (max-type-decl-end-before-token 0)
1208 ;; End of <..> construct which has had c-<>-arg-sep c-type
1209 ;; properties set within it.
1210 (max-<>-end 0)
1208 ;; Set according to the context to direct the heuristics for 1211 ;; Set according to the context to direct the heuristics for
1209 ;; recognizing C++ templates. 1212 ;; recognizing C++ templates.
1210 c-restricted-<>-arglists 1213 c-restricted-<>-arglists
@@ -1347,6 +1350,28 @@ casts and declarations are fontified. Used on level 2 and higher."
1347 (setq decl-or-cast (c-forward-decl-or-cast-1 1350 (setq decl-or-cast (c-forward-decl-or-cast-1
1348 match-pos context last-cast-end)) 1351 match-pos context last-cast-end))
1349 1352
1353 ;; Ensure that c-<>-arg-sep c-type properties are in place on the
1354 ;; commas separating the arguments inside template/generic <..>s.
1355 (when (and (eq (char-before match-pos) ?<)
1356 (> match-pos max-<>-end))
1357 (save-excursion
1358 (goto-char match-pos)
1359 (c-backward-token-2)
1360 (if (and
1361 (eq (char-after) ?<)
1362 (let ((c-restricted-<>-arglists
1363 (save-excursion
1364 (c-backward-token-2)
1365 (and
1366 (not (looking-at c-opt-<>-sexp-key))
1367 (progn (c-backward-syntactic-ws)
1368 (memq (char-before) '(?\( ?,)))
1369 (not (eq (c-get-char-property (1- (point))
1370 'c-type)
1371 'c-decl-arg-start))))))
1372 (c-forward-<>-arglist nil)))
1373 (setq max-<>-end (point)))))
1374
1350 (cond 1375 (cond
1351 ((eq decl-or-cast 'cast) 1376 ((eq decl-or-cast 'cast)
1352 ;; Save the position after the previous cast so we can feed 1377 ;; Save the position after the previous cast so we can feed
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 8ae75277925..08d84fbb625 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -499,8 +499,13 @@ parameters \(point-min) and \(point-max).")
499 ;; For documentation see the following c-lang-defvar of the same name. 499 ;; For documentation see the following c-lang-defvar of the same name.
500 ;; The value here may be a list of functions or a single function. 500 ;; The value here may be a list of functions or a single function.
501 t 'c-change-expand-fl-region 501 t 'c-change-expand-fl-region
502 (c c++ objc) '(c-neutralize-syntax-in-and-mark-CPP 502 (c objc) '(c-neutralize-syntax-in-and-mark-CPP
503 c-change-expand-fl-region) 503 c-change-expand-fl-region)
504 c++ '(c-neutralize-syntax-in-and-mark-CPP
505 c-restore-<>-properties
506 c-change-expand-fl-region)
507 java '(c-restore-<>-properties
508 c-change-expand-fl-region)
504 awk 'c-awk-extend-and-syntax-tablify-region) 509 awk 'c-awk-extend-and-syntax-tablify-region)
505(c-lang-defvar c-before-font-lock-functions 510(c-lang-defvar c-before-font-lock-functions
506 (let ((fs (c-lang-const c-before-font-lock-functions))) 511 (let ((fs (c-lang-const c-before-font-lock-functions)))
@@ -526,8 +531,8 @@ When the mode is initialized, these functions are called with
526parameters \(point-min), \(point-max) and <buffer size>.") 531parameters \(point-min), \(point-max) and <buffer size>.")
527 532
528(c-lang-defconst c-before-context-fontification-functions 533(c-lang-defconst c-before-context-fontification-functions
529 awk nil 534 t 'c-context-expand-fl-region
530 t 'c-context-expand-fl-region) 535 awk nil)
531 ;; For documentation see the following c-lang-defvar of the same name. 536 ;; For documentation see the following c-lang-defvar of the same name.
532 ;; The value here may be a list of functions or a single function. 537 ;; The value here may be a list of functions or a single function.
533(c-lang-defvar c-before-context-fontification-functions 538(c-lang-defvar c-before-context-fontification-functions
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 7f71700c650..644065911dd 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -631,8 +631,11 @@ that requires a literal mode spec at compile time."
631 (font-lock-mode 1))) 631 (font-lock-mode 1)))
632 632
633;; Buffer local variables defining the region to be fontified by a font lock 633;; Buffer local variables defining the region to be fontified by a font lock
634;; after-change function. They are set in c-after-change to 634;; after-change function. They are initialized in c-before-change to
635;; after-change-functions' BEG and END, and may be modified by functions in 635;; before-change-functions' BEG and END. `c-new-END' is amended in
636;; c-after-change with after-change-functions' BEG, END, and OLD-LEN. These
637;; variables may be modified by any before/after-change function, in
638;; particular by functions in `c-get-state-before-change-functions' and
636;; `c-before-font-lock-functions'. 639;; `c-before-font-lock-functions'.
637(defvar c-new-BEG 0) 640(defvar c-new-BEG 0)
638(make-variable-buffer-local 'c-new-BEG) 641(make-variable-buffer-local 'c-new-BEG)
@@ -671,8 +674,9 @@ compatible with old code; callers should always specify it."
671 (funcall fn (point-min) (point-max))) 674 (funcall fn (point-min) (point-max)))
672 c-get-state-before-change-functions) 675 c-get-state-before-change-functions)
673 (mapc (lambda (fn) 676 (mapc (lambda (fn)
674 (funcall fn (point-min) (point-max) 677 (if (not (eq fn 'c-restore-<>-properties))
675 (- (point-max) (point-min)))) 678 (funcall fn (point-min) (point-max)
679 (- (point-max) (point-min)))))
676 c-before-font-lock-functions)))) 680 c-before-font-lock-functions))))
677 681
678 (set (make-local-variable 'outline-regexp) "[^#\n\^M]") 682 (set (make-local-variable 'outline-regexp) "[^#\n\^M]")
@@ -1032,6 +1036,8 @@ Note that the style variables are always made local to the buffer."
1032 c-just-done-before-change) ; guard against a spurious second 1036 c-just-done-before-change) ; guard against a spurious second
1033 ; invocation of before-change-functions. 1037 ; invocation of before-change-functions.
1034 (setq c-just-done-before-change t) 1038 (setq c-just-done-before-change t)
1039 ;; (c-new-BEG c-new-END) will be the region to fontify.
1040 (setq c-new-BEG beg c-new-END end)
1035 (setq c-maybe-stale-found-type nil) 1041 (setq c-maybe-stale-found-type nil)
1036 (save-restriction 1042 (save-restriction
1037 (save-match-data 1043 (save-match-data
@@ -1126,7 +1132,8 @@ Note that the style variables are always made local to the buffer."
1126 1132
1127 ;; (c-new-BEG c-new-END) will be the region to fontify. It may become 1133 ;; (c-new-BEG c-new-END) will be the region to fontify. It may become
1128 ;; larger than (beg end). 1134 ;; larger than (beg end).
1129 (setq c-new-BEG beg c-new-END end) 1135 ;; (setq c-new-BEG beg c-new-END end)
1136 (setq c-new-END (- (+ c-new-END (- end beg)) old-len))
1130 1137
1131 (unless (c-called-from-text-property-change-p) 1138 (unless (c-called-from-text-property-change-p)
1132 (setq c-just-done-before-change nil) 1139 (setq c-just-done-before-change nil)
@@ -1245,7 +1252,8 @@ Note that the style variables are always made local to the buffer."
1245 (save-restriction 1252 (save-restriction
1246 (widen) 1253 (widen)
1247 (save-excursion 1254 (save-excursion
1248 (let ((new-beg beg) (new-end end) new-region) 1255 (let ((new-beg beg) (new-end end)
1256 (new-region (cons beg end)))
1249 (mapc (lambda (fn) 1257 (mapc (lambda (fn)
1250 (setq new-region (funcall fn new-beg new-end)) 1258 (setq new-region (funcall fn new-beg new-end))
1251 (setq new-beg (car new-region) new-end (cdr new-region))) 1259 (setq new-beg (car new-region) new-end (cdr new-region)))
diff --git a/lisp/progmodes/opascal.el b/lisp/progmodes/opascal.el
index 72c09fe15c2..6a02280c1e8 100644
--- a/lisp/progmodes/opascal.el
+++ b/lisp/progmodes/opascal.el
@@ -257,6 +257,7 @@ routine.")
257 257
258(defvar opascal-mode-syntax-table 258(defvar opascal-mode-syntax-table
259 (let ((st (make-syntax-table))) 259 (let ((st (make-syntax-table)))
260 (modify-syntax-entry ?\\ "." st) ; bug#22224
260 ;; Strings. 261 ;; Strings.
261 (modify-syntax-entry ?\" "\"" st) 262 (modify-syntax-entry ?\" "\"" st)
262 (modify-syntax-entry ?\' "\"" st) 263 (modify-syntax-entry ?\' "\"" st)
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 6efc0b1dccf..214f381971a 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -1174,9 +1174,10 @@ the remaining input.")
1174 1174
1175(defun xscheme-prompt-for-expression-exit () 1175(defun xscheme-prompt-for-expression-exit ()
1176 (interactive) 1176 (interactive)
1177 (if (eq (xscheme-region-expression-p (point-min) (point-max)) 'one) 1177 (if (eq (xscheme-region-expression-p (minibuffer-prompt-end) (point-max))
1178 'one)
1178 (exit-minibuffer) 1179 (exit-minibuffer)
1179 (error "input must be a single, complete expression"))) 1180 (error "Input must be a single, complete expression")))
1180 1181
1181(defun xscheme-region-expression-p (start end) 1182(defun xscheme-region-expression-p (start end)
1182 (save-excursion 1183 (save-excursion
diff --git a/src/buffer.c b/src/buffer.c
index 51c36de0c6b..3f9371652e7 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5803,11 +5803,14 @@ you probably should set this to -2 in that buffer. */);
5803 DEFVAR_PER_BUFFER ("selective-display", &BVAR (current_buffer, selective_display), 5803 DEFVAR_PER_BUFFER ("selective-display", &BVAR (current_buffer, selective_display),
5804 Qnil, 5804 Qnil,
5805 doc: /* Non-nil enables selective display. 5805 doc: /* Non-nil enables selective display.
5806
5806An integer N as value means display only lines 5807An integer N as value means display only lines
5807that start with less than N columns of space. 5808that start with less than N columns of space.
5809
5808A value of t means that the character ^M makes itself and 5810A value of t means that the character ^M makes itself and
5809all the rest of the line invisible; also, when saving the buffer 5811all the rest of the line invisible; also, when saving the buffer
5810in a file, save the ^M as a newline. */); 5812in a file, save the ^M as a newline. This usage is obsolete; use
5813overlays or text properties instead. */);
5811 5814
5812 DEFVAR_PER_BUFFER ("selective-display-ellipses", 5815 DEFVAR_PER_BUFFER ("selective-display-ellipses",
5813 &BVAR (current_buffer, selective_display_ellipses), 5816 &BVAR (current_buffer, selective_display_ellipses),
@@ -6201,11 +6204,11 @@ all windows or just the selected window.
6201 6204
6202Lisp programs may give this variable certain special values: 6205Lisp programs may give this variable certain special values:
6203 6206
6204- A value of \\='lambda (literally) enables Transient Mark mode temporarily. 6207- The symbol `lambda' enables Transient Mark mode temporarily.
6205 It is disabled again after any subsequent action that would 6208 The mode is disabled again after any subsequent action that would
6206 normally deactivate the mark (e.g. buffer modification). 6209 normally deactivate the mark (e.g. buffer modification).
6207 6210
6208- A value of (only . OLDVAL) enables Transient Mark mode 6211- The pair (only . OLDVAL) enables Transient Mark mode
6209 temporarily. After any subsequent point motion command that is 6212 temporarily. After any subsequent point motion command that is
6210 not shift-translated, or any other action that would normally 6213 not shift-translated, or any other action that would normally
6211 deactivate the mark (e.g. buffer modification), the value of 6214 deactivate the mark (e.g. buffer modification), the value of
diff --git a/src/print.c b/src/print.c
index 975675014d9..269d8f250e2 100644
--- a/src/print.c
+++ b/src/print.c
@@ -200,6 +200,13 @@ printchar_to_stream (unsigned int ch, FILE *stream)
200{ 200{
201 Lisp_Object dv IF_LINT (= Qnil); 201 Lisp_Object dv IF_LINT (= Qnil);
202 ptrdiff_t i = 0, n = 1; 202 ptrdiff_t i = 0, n = 1;
203 Lisp_Object coding_system = Vlocale_coding_system;
204 bool encode_p = false;
205
206 if (!NILP (Vcoding_system_for_write))
207 coding_system = Vcoding_system_for_write;
208 if (!NILP (coding_system))
209 encode_p = true;
203 210
204 if (CHAR_VALID_P (ch) && DISP_TABLE_P (Vstandard_display_table)) 211 if (CHAR_VALID_P (ch) && DISP_TABLE_P (Vstandard_display_table))
205 { 212 {
@@ -228,8 +235,11 @@ printchar_to_stream (unsigned int ch, FILE *stream)
228 unsigned char mbstr[MAX_MULTIBYTE_LENGTH]; 235 unsigned char mbstr[MAX_MULTIBYTE_LENGTH];
229 int len = CHAR_STRING (ch, mbstr); 236 int len = CHAR_STRING (ch, mbstr);
230 Lisp_Object encoded_ch = 237 Lisp_Object encoded_ch =
231 ENCODE_SYSTEM (make_multibyte_string ((char *) mbstr, 1, len)); 238 make_multibyte_string ((char *) mbstr, 1, len);
232 239
240 if (encode_p)
241 encoded_ch = code_convert_string_norecord (encoded_ch,
242 coding_system, true);
233 fwrite (SSDATA (encoded_ch), 1, SBYTES (encoded_ch), stream); 243 fwrite (SSDATA (encoded_ch), 1, SBYTES (encoded_ch), stream);
234#ifdef WINDOWSNT 244#ifdef WINDOWSNT
235 if (print_output_debug_flag && stream == stderr) 245 if (print_output_debug_flag && stream == stderr)
diff --git a/src/xdisp.c b/src/xdisp.c
index b18bfd0d49d..ee748bd8680 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -10206,7 +10206,16 @@ message_to_stderr (Lisp_Object m)
10206 } 10206 }
10207 if (STRINGP (m)) 10207 if (STRINGP (m))
10208 { 10208 {
10209 Lisp_Object s = ENCODE_SYSTEM (m); 10209 Lisp_Object coding_system = Vlocale_coding_system;
10210 Lisp_Object s;
10211
10212 if (!NILP (Vcoding_system_for_write))
10213 coding_system = Vcoding_system_for_write;
10214 if (!NILP (coding_system))
10215 s = code_convert_string_norecord (m, coding_system, true);
10216 else
10217 s = m;
10218
10210 fwrite (SDATA (s), SBYTES (s), 1, stderr); 10219 fwrite (SDATA (s), SBYTES (s), 1, stderr);
10211 } 10220 }
10212 if (!cursor_in_echo_area) 10221 if (!cursor_in_echo_area)
diff --git a/test/Makefile.in b/test/Makefile.in
index db386cebe29..62443a195ef 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -133,8 +133,7 @@ $(foreach test,${TESTS},$(eval $(call test_template,${test})))
133## have to run Emacs for every make invocation, and it might not be 133## have to run Emacs for every make invocation, and it might not be
134## available during clean. 134## available during clean.
135-include make-test-deps.mk 135-include make-test-deps.mk
136 136## Rerun default tests.
137## Re-run all the tests every time.
138check: 137check:
139 -@for f in $(LOGFILES); do test ! -f $$f || mv $$f $$f~; done 138 -@for f in $(LOGFILES); do test ! -f $$f || mv $$f $$f~; done
140 @${MAKE} check-maybe 139 @${MAKE} check-maybe