aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2017-10-12 13:44:16 -0700
committerPaul Eggert2017-10-12 13:44:16 -0700
commit3d0d5b4ebdf19876104d23402606f2b3cc636aca (patch)
tree87febb7bc2409f9502c86802a46915c01c546e7c
parent36375d35aa06e84865cce678559ddfa8f79a9775 (diff)
parent05d0c0f80291d25ea228d4a8572d58540bf08b52 (diff)
downloademacs-3d0d5b4ebdf19876104d23402606f2b3cc636aca.tar.gz
emacs-3d0d5b4ebdf19876104d23402606f2b3cc636aca.zip
Merge from origin/emacs-26
05d0c0f802 ; * ChangeLog.3: ChangeLog fixes. fbabae6b24 * ChangeLog.3: Update. eab051991e Fix docstring style for 'functionp' e8a7c41b4e Format shell commands in tramp.texi 0526aac4eb Unbreak the button in the Flymake diagnostics buffer again c89f001de1 Add mode map to Flymake diagnostic button f9cd8ee681 Tweak the Flymake diagnostics buffer again 0e83f5f279 Simplify Flymake diagnostics buffer UX cf4a15b9b6 First stab at a Flymake diagnostics buffer e4a1556392 * etc/NEWS (Flymake): Rewrite entry. 00adeb43e9 Improve the Flymake manual 44c6401733 ; * etc/NEWS: Clarify the description of "---" and "+++". 042b3cfbd2 Fix two Flymake bugs 3dfa2ca4dc Don't log "emergencies" in the Flymake legacy backend 1c2e188440 Add full documentation on new Flymake API 0f7f677f82 Fix some Flymake docstrings and messages 21e7075781 Make three new Flymake commands for debugging common problems c9be9a3678 ; INSTALL.REPO: Add -d to "thorough cleaning" suggestion. 5d51403ceb ; Typo fixes, mostly repeated words 0d004ed01a ; Spelling fixes 0485aa76c9 ; * src/lread.c (syms_of_lread) <module-file-suffix>: Fix ... ba7fb37d6a * admin/authors.el (authors-renamed-files-alist): addition. 14dca4a79a ; ChangeLog.3 fixes f352d0257c Fix PWD check on DOS_NT 934f08f3de Fix unlikely overflows with wd length 6c2b1e89ef * lisp/gnus/message.el: Improve last commit 7ed7360855 Fix problems when editing raw undecoded message (Bug#28671) aca5f0072b Avoid encoding errors in message.el 0c36663db5 Improve doc string and prompt of 'grep-read-files' 2da83c9d36 Avoid assertion violations when line numbers are displayed 5b81f65ad0 ; * lisp/emacs-lisp/rmc.el: Minor fix for copyright and li... 11b37b4a9f Be lazy when starting Flymake checks 36ed9a9ede Fix last change in frameset.el 62e5c119af Describe how window dividers can replicate vertical border... e2150d994a Add line-number faces to the display-line-numbers group 89b0023044 Increase xterm click count only within double-click-fuzz 745aea2296 Change pause in fullscreen toggling for NS port (bug#28496) 1cd334cd47 Handle PARENTS properly in tramp-*-handle-make-directory f1c73de47d ; Merge from Gnulib (comment changes only) 7c2c117c91 Improve test for unreachable dirs 2202952b83 * src/xsmfns.c (x_session_initialize): Fix memory leak. a9b72976de Merge branch 'emacs-26' of git.sv.gnu.org:/srv/git/emacs i... 64baaff8c5 New option for handling ZWNJ in Arabic text rendering c194fb61c6 Make python prettify symbols into a defvar (Bug#28713) 6dfc778d54 Fix fullscreen crash on macOS (bug#28496) 3db0dc2168 Fix crash when closing fullscreen frame on macOS (bug#28661) bc80da5bd3 Support gio tool in Tramp 349e0eb5ff Fix flymake-goto-next-error when message has %-constructs 0fa353b504 * src/gnutls.c (syms_of_gnutls): Remove duplicated call to... dc6ae15a8d Move the entry about 'format' into Incompatible Lisp Changes 75174a632d Fix glitches in displaying TTY menus 238fbcb20e Create new Edebug spec for docstrings and use it in closures 2d58d51329 Avoid byte-compilation warnings in message.el # Conflicts: # etc/NEWS
-rw-r--r--CONTRIBUTE2
-rw-r--r--ChangeLog.22
-rw-r--r--ChangeLog.3725
-rw-r--r--INSTALL.REPO2
-rw-r--r--admin/authors.el1
-rw-r--r--doc/emacs/anti.texi2
-rw-r--r--doc/emacs/frames.texi21
-rw-r--r--doc/emacs/rmail.texi2
-rw-r--r--doc/emacs/text.texi2
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi2
-rw-r--r--doc/lispref/debugging.texi2
-rw-r--r--doc/lispref/os.texi2
-rw-r--r--doc/lispref/searching.texi2
-rw-r--r--doc/misc/flymake.texi675
-rw-r--r--doc/misc/htmlfontify.texi2
-rw-r--r--doc/misc/ses.texi2
-rw-r--r--doc/misc/tramp.texi22
-rw-r--r--lib/getopt-cdefs.in.h4
-rw-r--r--lib/getopt-pfx-core.h4
-rw-r--r--lib/getopt-pfx-ext.h4
-rw-r--r--lib/getopt.in.h4
-rw-r--r--lisp/ChangeLog.162
-rw-r--r--lisp/ChangeLog.62
-rw-r--r--lisp/allout.el2
-rw-r--r--lisp/button.el2
-rw-r--r--lisp/cedet/ChangeLog.12
-rw-r--r--lisp/cedet/cedet-idutils.el2
-rw-r--r--lisp/cedet/ede/pmake.el2
-rw-r--r--lisp/cedet/semantic/db-find.el2
-rw-r--r--lisp/cedet/semantic/db.el2
-rw-r--r--lisp/cedet/semantic/edit.el2
-rw-r--r--lisp/composite.el14
-rw-r--r--lisp/dired-x.el2
-rw-r--r--lisp/display-line-numbers.el1
-rw-r--r--lisp/elide-head.el2
-rw-r--r--lisp/emacs-lisp/advice.el2
-rw-r--r--lisp/emacs-lisp/cl-generic.el13
-rw-r--r--lisp/emacs-lisp/cl-macs.el6
-rw-r--r--lisp/emacs-lisp/edebug.el27
-rw-r--r--lisp/emacs-lisp/generator.el6
-rw-r--r--lisp/emacs-lisp/pcase.el2
-rw-r--r--lisp/emacs-lisp/rmc.el4
-rw-r--r--lisp/faces.el6
-rw-r--r--lisp/frame.el6
-rw-r--r--lisp/frameset.el2
-rw-r--r--lisp/gnus/ChangeLog.32
-rw-r--r--lisp/gnus/gnus-mlspl.el3
-rw-r--r--lisp/gnus/message.el11
-rw-r--r--lisp/gnus/spam.el2
-rw-r--r--lisp/ido.el2
-rw-r--r--lisp/language/misc-lang.el64
-rw-r--r--lisp/mail/rmailedit.el26
-rw-r--r--lisp/net/newst-ticker.el2
-rw-r--r--lisp/net/tramp-adb.el9
-rw-r--r--lisp/net/tramp-gvfs.el42
-rw-r--r--lisp/obsolete/landmark.el2
-rw-r--r--lisp/obsolete/levents.el2
-rw-r--r--lisp/obsolete/otodo-mode.el2
-rw-r--r--lisp/org/org-faces.el2
-rw-r--r--lisp/org/org-inlinetask.el2
-rw-r--r--lisp/play/gomoku.el2
-rw-r--r--lisp/progmodes/antlr-mode.el2
-rw-r--r--lisp/progmodes/cc-vars.el2
-rw-r--r--lisp/progmodes/cperl-mode.el2
-rw-r--r--lisp/progmodes/flymake-proc.el4
-rw-r--r--lisp/progmodes/flymake.el353
-rw-r--r--lisp/progmodes/grep.el5
-rw-r--r--lisp/progmodes/python.el8
-rw-r--r--lisp/subr.el3
-rw-r--r--lisp/term/tvi970.el6
-rw-r--r--lisp/textmodes/less-css-mode.el2
-rw-r--r--lisp/textmodes/picture.el2
-rw-r--r--lisp/textmodes/rst.el2
-rw-r--r--lisp/vc/pcvs-defs.el2
-rw-r--r--lisp/xt-mouse.el8
-rw-r--r--src/ChangeLog.102
-rw-r--r--src/ChangeLog.122
-rw-r--r--src/ChangeLog.42
-rw-r--r--src/ChangeLog.52
-rw-r--r--src/ChangeLog.72
-rw-r--r--src/buffer.c2
-rw-r--r--src/dispnew.c22
-rw-r--r--src/emacs-module.c2
-rw-r--r--src/emacsgtkfixed.c2
-rw-r--r--src/eval.c2
-rw-r--r--src/fileio.c2
-rw-r--r--src/frame.h2
-rw-r--r--src/gnutls.c1
-rw-r--r--src/keyboard.h2
-rw-r--r--src/lread.c2
-rw-r--r--src/nsterm.m5
-rw-r--r--src/scroll.c2
-rw-r--r--src/sysdep.c92
-rw-r--r--src/termhooks.h2
-rw-r--r--src/w32inevt.c2
-rw-r--r--src/w32proc.c2
-rw-r--r--src/xdisp.c1
-rw-r--r--src/xsmfns.c4
-rw-r--r--test/lisp/kmacro-tests.el2
-rw-r--r--test/lisp/net/tramp-tests.el7
-rw-r--r--test/lisp/progmodes/flymake-tests.el12
-rw-r--r--test/lisp/simple-tests.el2
102 files changed, 1868 insertions, 487 deletions
diff --git a/CONTRIBUTE b/CONTRIBUTE
index e1ba506c729..d01ac8b07ed 100644
--- a/CONTRIBUTE
+++ b/CONTRIBUTE
@@ -105,7 +105,7 @@ tested).
105 105
106Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See 106Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See
107https://www.gnu.org/software/emacs/manual/html_node/ert/ 107https://www.gnu.org/software/emacs/manual/html_node/ert/
108or run 'info "(ert)"' for for more information on writing and running 108or run 'info "(ert)"' for more information on writing and running
109tests. 109tests.
110 110
111If your test lasts longer than some few seconds, mark it in its 111If your test lasts longer than some few seconds, mark it in its
diff --git a/ChangeLog.2 b/ChangeLog.2
index e7befde64a3..a412d3b5f2d 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -4415,7 +4415,7 @@
4415 4415
44162016-05-01 Lars Ingebrigtsen <larsi@gnus.org> 44162016-05-01 Lars Ingebrigtsen <larsi@gnus.org>
4417 4417
4418 Document mode mode line variables 4418 Document mode line variables
4419 4419
4420 * doc/lispref/modes.texi (Mode Line Variables): Document 4420 * doc/lispref/modes.texi (Mode Line Variables): Document
4421 `mode-line-front-space, `mode-line-misc-info', 4421 `mode-line-front-space, `mode-line-misc-info',
diff --git a/ChangeLog.3 b/ChangeLog.3
index 33d04f74ec5..a49477a7207 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,3 +1,529 @@
12017-10-11 Michael Albinus <michael.albinus@gmx.de>
2
3 Format shell commands in tramp.texi
4
5 * doc/misc/tramp.texi (Obtaining Tramp, Remote shell setup):
6 Format shell commands better.
7
82017-10-10 João Távora <joaotavora@gmail.com>
9
10 Unbreak the button in the Flymake diagnostics buffer again
11
12 Adding the 'keymap' property enabled RET but broke the mouse-action.
13
14 * lisp/progmodes/flymake.el
15 (flymake--diagnostics-buffer-entries): Use 'action' instead of 'keymap'.
16
172017-10-10 Mark Oteiza <mvoteiza@udel.edu>
18
19 Add mode map to Flymake diagnostic button
20
21 * lisp/progmodes/flymake.el (flymake--diagnostics-buffer-entries): Add
22 keymap propery.
23
242017-10-10 João Távora <joaotavora@gmail.com>
25
26 Tweak the Flymake diagnostics buffer again
27
28 * lisp/progmodes/flymake.el
29 (flymake-diagnostics-buffer-mode-map): Don't bind [mouse-1].
30 (flymake-show-diagnostic): Rename from
31 flymake-show-diagnostic-at-point. Really use another window.
32 (flymake-goto-diagnostic): Rename from
33 flymake-goto-diagnostic-at-point.
34 (flymake--diagnostics-buffer-entries): Use a button just for
35 the message bit.
36
372017-10-10 Mark Oteiza <mvoteiza@udel.edu>
38
39 Simplify Flymake diagnostics buffer UX
40
41 Don't create text-buttons unnecessarily, just bind RET and SPC in the
42 diagnostics buffer to a command that figures out which diagnostic it
43 was invoked on.
44
45 * lisp/progmodes/flymake.el
46 (flymake--diagnostics-buffer-mode-keymap): Renamed from
47 flymake--diagnostics-buffer-button-keymap.
48 (flymake-show-diagnostic-at-point): Don't take a button.
49 (flymake-goto-diagnostic-at-point): Don't pass button to
50 flymake-show-diagnostic-at-point.
51 (flymake--diagnostics-buffer-entries): Simplify.
52
532017-10-10 João Távora <joaotavora@gmail.com>
54
55 First stab at a Flymake diagnostics buffer
56
57 The diagnostics buffer summarizes the diagnostics of a buffer in a
58 tabulated list and is permanently updated after each Flymake check.
59
60 * lisp/progmodes/flymake.el (flymake--handle-report): Call
61 flymake-show-diagnostics-buffer under certain conditions.
62 (flymake-menu, flymake--diagnostics-buffer-source)
63 (flymake--diagnostics-buffer-button-keymap)
64 (flymake-show-diagnostic-at-point)
65 (flymake-goto-diagnostic-at-point)
66 (flymake--diagnostics-buffer-entries)
67 (flymake-diagnostics-buffer-mode)
68 (flymake--diagnostics-buffer-name)
69 (flymake-show-diagnostics-buffer): New definitions.
70
712017-10-10 João Távora <joaotavora@gmail.com>
72
73 * etc/NEWS (Flymake): Rewrite entry.
74
752017-10-10 Eli Zaretskii <eliz@gnu.org>
76
77 Improve the Flymake manual
78
79 * doc/misc/flymake.texi: Add a 'coding' cookie. Add a
80 @syncodeindex directive for @vindex. Use 2 spaces between
81 sentences. Lower-case @cindex entries.
82 (Overview of Flymake): Fix use of @itemize and @pxref. Fix
83 punctuation and markup.
84 (Backend exceptions): Use @emph instead of @dfn. Add more
85 indexing.
86 (Customizable variables, Extending Flymake): Improve wording.
87 (Flymake error types): Fix usage of @itemize. Improve wording.
88 (Backend functions): Fix punctuation. Fix markup. Add a
89 cross-reference to ELisp manual.
90 (Flymake utility functions): Add a cross-reference to ELisp manual.
91 (An annotated example backend): Fix punctuation and typos.
92 (Flymake mode, Running the syntax check)
93 (Navigating to error lines, Backend exceptions)
94 (Customizable variables, Flymake error types, Backend functions)
95 (Flymake utility functions, Proc customization variables)
96 (Locating a master file, Locating the buildfile)
97 (Starting the syntax check process, Parsing the output)
98 (Interaction with other modes): Fix indexing. Add index entries
99 for functions, variables, and concepts.
100
1012017-10-10 João Távora <joaotavora@gmail.com>
102
103 Fix two Flymake bugs
104
105 * lisp/progmodes/flymake.el (define-fringe-bitmap): Protect
106 against --without-x.
107 (flymake--mode-line-format): Ensure mode-line's mouse-4 and mouse-5 work
108 in their own windows.
109
1102017-10-10 João Távora <joaotavora@gmail.com>
111
112 Don't log "emergencies" in the Flymake legacy backend
113
114 * lisp/progmodes/flymake-proc.el (flymake-proc--panic)
115 (flymake-proc-legacy-flymake): Don't log "emergencies"
116
1172017-10-10 João Távora <joaotavora@gmail.com>
118
119 Add full documentation on new Flymake API
120
121 Also, as a minor addition to this API, set flymake-text
122 on the diagnostic overlay. This enables a good example in
123 the section "Customization Flymake annotations".
124
125 * doc/misc/flymake.texi (Overview of Flymake)
126 (Syntax check statuses): Rework.
127 (Backend exceptions): Rename from "Troubleshooting"
128 (Customizable variables): Add flymake-start-on-flymake-mode. Rework.
129 (Extending Flymake): Write chapter.
130 (Customizing Flymake annotations, Flymake backends)
131 (Flymake utility functions, An annotated example backend):
132 New sections and subsections
133
134 * lisp/progmodes/flymake.el (flymake-diagnostic-functions)
135 (flymake-diagnostic-types-alist): Rework docstring.
136 (flymake--highlight-line): Set and use flymake-text property in overlay.
137 (flymake-goto-next-error, flymake-goto-prev-error): Fix funny quotes.
138
1392017-10-10 João Távora <joaotavora@gmail.com>
140
141 Fix some Flymake docstrings and messages
142
143 * lisp/progmodes/flymake.el
144 (flymake-start-on-flymake-mode): fix typo.
145 (flymake-mode): Add docstring.
146 (flymake-mode-line-format): Fix help-echo indications. mouse-2
147 describes flymake-mode.
148
1492017-10-10 João Távora <joaotavora@gmail.com>
150
151 Make three new Flymake commands for debugging common problems
152
153 * lisp/progmodes/flymake.el (flymake-running-backends)
154 (flymake-disabled-backends)
155 (flymake-reporting-backends): Make interactive.
156 (flymake--collect): Take optional arg.
157
1582017-10-09 Nicolas Petton <nicolas@petton.fr>
159
160 * admin/authors.el (authors-renamed-files-alist): addition.
161
1622017-10-09 Paul Eggert <eggert@cs.ucla.edu>
163
164 Fix PWD check on DOS_NT
165
166 * src/sysdep.c (get_current_dir_name_or_unreachable):
167 Do not consider a file name like "a:b" to be absolute on DOS_NT.
168
1692017-10-09 Paul Eggert <eggert@cs.ucla.edu>
170
171 Fix unlikely overflows with wd length
172
173 * src/sysdep.c (get_current_dir_name_or_unreachable):
174 Avoid integer overflow if working directory name is absurdly long.
175 When allocating memory for getcwd, do not exceed MAXPATHLEN.
176
1772017-10-09 Stefan Monnier <monnier@iro.umontreal.ca>
178
179 * lisp/gnus/message.el: Improve last commit
180
181 (message-clone-locals): Don't mistakenly match other variables whose
182 name happens to include "message-default-charset".
183
1842017-10-09 Ken Olum <kdo@cosmos.phy.tufts.edu>
185
186 Fix problems when editing raw undecoded message (Bug#28671)
187
188 * lisp/mail/rmailedit.el (rmail-cease-edit): If rmail-old-mime-state
189 is set, meaning that we are editing the raw message, do not
190 encode it again. Delete old body after, not before, inserting
191 new, to avoid moving marker at beginning of next message.
192
1932017-10-09 Eli Zaretskii <eliz@gnu.org>
194
195 Avoid encoding errors in message.el
196
197 * lisp/gnus/message.el (message-clone-locals): Don't clone
198 message-default-charset. (Bug#25645)
199
2002017-10-09 Eli Zaretskii <eliz@gnu.org>
201
202 Improve doc string and prompt of 'grep-read-files'
203
204 * lisp/progmodes/grep.el (grep-read-files): Clarify in the doc
205 string and in the prompt that shell wildcards can be used.
206 Suggested by Allen Li <vianchielfaura@gmail.com>. (Bug#28615)
207
2082017-10-09 Eli Zaretskii <eliz@gnu.org>
209
210 Avoid assertion violations when line numbers are displayed
211
212 * src/xdisp.c (redisplay_window): Clear the window's desired glyph
213 matrix before calling try_window with the same starting point.
214 This avoids assertion violations when switching from a buffer
215 without line numbers to a buffer with line numbers. (Bug28710)
216
2172017-10-09 João Távora <joaotavora@gmail.com>
218
219 Be lazy when starting Flymake checks
220
221 Don't start the check immediately if the buffer is not being
222 displayed. Wait until it is, using window-configuration-change-hook.
223
224 This enables the user to batch-enable flymake-mode on many buffers and
225 not have that operation exhaust system resources for checking each
226 one. Likewise, an editing or save operation in a currently
227 non-displayed buffer does not immediately start a check.
228
229 * lisp/progmodes/flymake.el (flymake-start-on-flymake-mode):
230 Rename from flymake-start-syntax-check-on-find-file.
231 (flymake-start-syntax-check-on-find-file): Obsolete alias for
232 flymake-start-on-flymake-mode.
233 (flymake-start): Redesign. Affect the global post-command-hook
234 and local window-configuraiton-change-hook.
235 (flymake--schedule-timer-maybe)
236 (flymake-after-change-function, flymake-after-save-hook): Pass
237 t to flymake-start.
238
239 * test/lisp/progmodes/flymake-tests.el (flymake-tests--call-with-fixture)
240 (dummy-backends, recurrent-backend): Start flymake check
241 explicitly and immediately.
242
2432017-10-09 Eli Zaretskii <eliz@gnu.org>
244
245 Fix last change in frameset.el
246
247 * lisp/frameset.el (frameset-filter-font-param): Fix a thinko in
248 filtering the 'font' parameter. (Bug#17352)
249
2502017-10-09 Martin Rudalics <rudalics@gmx.at>
251
252 Describe how window dividers can replicate vertical borders (Bug#27830)
253
254 * doc/emacs/frames.texi (Scroll Bars): Describe how window
255 dividers can be used to replicate vertical borders when scroll
256 bars are disabled (Bug#27830).
257 * doc/emacs/frames.texi (Window Dividers): Mention their use
258 in replicating vertical borders.
259
2602017-10-09 Alexander Gramiak <agrambot@gmail.com>
261
262 Add line-number faces to the display-line-numbers group
263
264 See https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00151.html
265 and its resulting thread.
266
267 * lisp/display-line-numbers.el (display-line-numbers): Add to the
268 convenience group.
269 * lisp/faces.el (line-number):
270 (line-number-current-line): Add to the display-line-numbers group.
271
2722017-10-09 Alexander Gramiak <agrambot@gmail.com>
273
274 Increase xterm click count only within double-click-fuzz
275
276 * lisp/xt-mouse.el (xterm-mouse-event): Save the last click's position
277 and check it against the current click's position. (Bug#28658)
278
2792017-10-08 Alan Third <alan@idiocy.org>
280
281 Change pause in fullscreen toggling for NS port (bug#28496)
282
283 * lisp/frame.el (toggle-frame-fullscreen): Replace sit-for with
284 sleep-for, and reduce time.
285
2862017-10-08 Michael Albinus <michael.albinus@gmx.de>
287
288 Handle PARENTS properly in tramp-*-handle-make-directory
289
290 * lisp/net/tramp-adb.el (tramp-adb-handle-make-directory):
291 * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-make-directory):
292 Handle PARENTS properly.
293
294 * test/lisp/net/tramp-tests.el (tramp-test13-make-directory):
295 Extend test.
296
2972017-10-08 Paul Eggert <eggert@cs.ucla.edu>
298
299 Improve test for unreachable dirs
300
301 * src/sysdep.c (get_current_dir_name_or_unreachable):
302 New function, with most of the old contents of
303 emacs_get_current_dir_name.
304 (emacs_get_current_dir_name): Use it. Use a simpler
305 test for unreachable directory strings, and also apply
306 it to getcwd etc. (Bug#27871)
307
3082017-10-08 Paul Eggert <eggert@cs.ucla.edu>
309
310 * src/xsmfns.c (x_session_initialize): Fix memory leak.
311
3122017-10-08 K. Handa <handa@gnu.org>
313
314 New option for handling ZWNJ in Arabic text rendering
315
316 Provide a new option 'arabic-shaper-ZWNJ-handling' that controls how
317 to display ZWNJ in Arabic text rendering (Bug#28339).
318 * lisp/language/misc-lang.el: Register arabic-shape-gstring in
319 composition-function-table.
320 (arabic-shaper-ZWNJ-handling): New variable.
321 (arabic-shape-log): New variable.
322 (arabic-shape-gstring): New function.
323 * lisp/composite.el (lgstring-remove-glyph): New function.
324
3252017-10-08 Noam Postavsky <npostavs@gmail.com>
326
327 Make python prettify symbols into a defvar (Bug#28713)
328
329 * lisp/progmodes/python.el (python-prettify-symbols-alist): New
330 variable.
331 (python--prettify-symbols-alist): Make into obsolete alias for
332 `python-prettify-symbols-alist'.
333
3342017-10-07 Alan Third <alan@idiocy.org>
335
336 Fix fullscreen crash on macOS (bug#28496)
337
338 * lisp/frame.el (toggle-frame-fullscreen): Wait for animation to
339 complete on macOS.
340
3412017-10-07 Alan Third <alan@idiocy.org>
342
343 Fix crash when closing fullscreen frame on macOS (bug#28661)
344
345 * src/nsterm.m (EmacsView::windowWillResize): Return new frame size
346 unmodified if the frame isn't live.
347
3482017-10-07 Michael Albinus <michael.albinus@gmx.de>
349
350 Support gio tool in Tramp
351
352 "gvfs-<command>" utilities have been deprecated in GVFS 1.31.1. We
353 must use "gio <command>" tool instead.
354
355 * lisp/net/tramp-gvfs.el (tramp-gvfs-gio-mapping): New defconst.
356 (tramp-gvfs-handle-file-notify-add-watch): Support also "gio monitor"
357 (tramp-gvfs-gio-tool-p): New defun.
358 (tramp-gvfs-send-command): Use it. Call gio tool if available.
359
3602017-10-07 João Távora <joaotavora@gmail.com>
361
362 Fix flymake-goto-next-error when message has %-constructs
363
364 * lisp/progmodes/flymake.el (flymake-goto-next-error): Fix
365 message call. Add missing period in docstring.
366
3672017-10-07 Piotr Trojanek <piotr.trojanek@gmail.com>
368
369 * src/gnutls.c (syms_of_gnutls): Remove duplicated call to DEFSYM.
370
3712017-10-07 Eli Zaretskii <eliz@gnu.org>
372
373 Move the entry about 'format' into Incompatible Lisp Changes
374
375 * etc/NEWS: Move the entry about 'format' refraining from allocating
376 new strings into Incompatible Lisp Changes. (Bug#28625)
377
3782017-10-07 Eli Zaretskii <eliz@gnu.org>
379
380 Fix glitches in displaying TTY menus
381
382 * src/dispnew.c (update_frame_line): Accept an additional argument
383 UPDATING_MENU_P; if non-zero, home the cursor before updating a
384 frame's line. All callers changed.
385 (update_frame_1): Accept an additional argument UPDATING_MENU_P,
386 and pass it to update_frame_line. All callers changed.
387 (update_frame_with_menu): Call update_frame_1 with last argument
388 non-zero. (Bug#17497)
389
3902017-10-06 Gemini Lasswell <gazally@runbox.com>
391
392 Create new Edebug spec for docstrings and use it in closures
393
394 Since (:documentation FORM) can be used to create a docstring
395 when lexical-binding is on, allow for that possibility in Edebug
396 specs (bug#24773).
397 * lisp/emacs-lisp/edebug.el: Define an Edebug spec for docstrings
398 called lambda-doc and modify the Edebug specs for defun and
399 defmacro to use it.
400 (edebug-instrument-function): Check for generic functions first,
401 to fix bug where edebug-step-in didn't work on methods now that
402 cl-defgeneric has an Edebug spec.
403 * lisp/subr.el (lambda): Modify Edebug spec to use lambda-doc.
404 * lisp/emacs-lisp/cl-generic.el (cl-defgeneric): Add Edebug spec
405 (bug#27747).
406 (cl-defmethod): Use lambda-doc in Edebug spec.
407 * lisp/emacs-lisp/cl-macs.el: Modify Edebug spec for
408 cl-declarations-or-string to use lambda-doc, and modify Edebug
409 spec for cl-lambda-expr to use cl-declarations-or-string.
410 * lisp/emacs-lisp/pcase.el (pcase-lambda): Modify Edebug spec to
411 use lambda-doc, as well as &define and def-body which are
412 necessary for using Edebug on code wrapped by lambda.
413 * lisp/emacs-lisp/generator.el (iter-defun, iter-lambda): Add
414 Edebug specs.
415
4162017-10-06 Eli Zaretskii <eliz@gnu.org>
417
418 Avoid byte-compilation warnings in message.el
419
420 * lisp/gnus/message.el: Require 'subr-x' when compiling, to
421 avoid compiler warnings.
422
4232017-10-06 Paul Eggert <eggert@cs.ucla.edu>
424
425 Fix bug in recent styled_format change
426
427 Problem reported by Kaushal Modi in:
428 http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00141.html
429 * src/editfns.c (styled_format): Fix bug where USE_SAFE_ALLOCA was
430 not always followed by SAFE_FREE. This bug was introduced in my
431 patch 2017-09-26T23:31:57Z!eggert@cs.ucla.edu entitled "Avoid some
432 unnecessary copying in Fformat etc."
433
4342017-10-06 João Távora <joaotavora@gmail.com>
435
436 Cleanup emacs-lisp-mode's use of Flymake
437
438 * lisp/progmodes/elisp-mode.el (elisp-flymake--checkdoc-1):
439 Delete.
440 (elisp-flymake-checkdoc): Incorporate old
441 elisp-flymake--checkdoc-1.
442 (elisp-flymake--byte-compile-done): Simplify. Don't cleanup
443 here.
444 (elisp-flymake-byte-compile): Remove spurious interactive spec.
445 Simplify. Cleanup on every possible exit.
446
4472017-10-06 João Távora <joaotavora@gmail.com>
448
449 Fix @include directive in Flymake doc
450
451 * doc/misc/flymake.texi: Don't @include a relative path.
452
4532017-10-06 Mark Oteiza <mvoteiza@udel.edu>
454
455 Move read-multiple-choice to its own library
456
457 * lisp/emacs-lisp/rmc.el: New file.
458 * lisp/emacs-lisp/subr-x.el (read-multiple-choice): Remove.
459 * lisp/gnus/message.el:
460 * lisp/net/nsm.el: Change required library.
461
4622017-10-06 Piotr Trojanek <piotr.trojanek@gmail.com>
463
464 * src/process.c (syms_of_process): Remove duplicated call to DEFSYM.
465
466 Fixes: Bug#28721
467
4682017-10-06 Lele Gaifax <lele@metapensiero.it>
469
470 Fix typos in Flymake documentation
471
472 * doc/misc/flymake.texi (Syntax check statuses)
473 (Adding support for a new syntax check tool)
474 (Implementation overview, Locating the buildfile): Fix typos.
475
476 * lisp/progmodes/flymake-proc.el (flymake-proc--report-fn)
477 (flymake-proc--find-possible-master-files):Fix typos.
478 (flymake-proc--panic)
479 (flymake-proc-legacy-flymake): Fix function reference in doc.
480
481 * lisp/progmodes/flymake.el (flymake-error)
482 (flymake-diagnostic-functions): Fix typos.
483 (flymake-diagnostic-types-alist): Rephrase and fix typos.
484 (flymake--backend-state): Fix typos and rephrase.
485 (flymake--handle-report): Delete empty line.
486 (flymake--disable-backend)
487 (flymake--run-backend): Fix typos.
488 (flymake-goto-next-error, flymake-goto-prev-error): Rephrase.
489
4902017-10-06 Eli Zaretskii <eliz@gnu.org>
491
492 Revert last change in 'shr-descend'
493
494 * lisp/net/shr.el (shr-descend): Revert the part of the last
495 change which introduced calls to shr-indirect-call into this
496 function. Add a comment explaining the rationale for that.
497 (Bug#28402)
498
4992017-10-06 João Távora <joaotavora@gmail.com>
500
501 Don't error when turning on Flymake with no known backends
502
503 Leave it to the mode line indicator to inform the user that there
504 is still some configuration to do.
505
506 * lisp/progmodes/flymake.el (flymake-mode): Simplify.
507
5082017-10-06 João Távora <joaotavora@gmail.com>
509
510 Delete a Flymake obsolete alias that can't possibly work
511
512 The function `flymake-ler-make-ler' can't possibly work as an backward
513 compatible interface to existing extensinos (even purely hypothetical
514 ones, since none are known). This is because every diagnostic
515 considered by Flymake has to passed to a report-fn function.
516
517 * lisp/progmodes/flymake.el (flymake-ler-make-ler): Delete.
518
5192017-10-06 Paul Eggert <eggert@cs.ucla.edu>
520
521 Fix bug with unmounted directory on GNU/Linux
522
523 * src/sysdep.c (emacs_get_current_dir_name): Do not use
524 get_current_dir_name result unless it is absolute (Bug#27871).
525
526
12017-10-05 Nicolas Petton <nicolas@petton.fr> 5272017-10-05 Nicolas Petton <nicolas@petton.fr>
2 528
3 Update authors.el 529 Update authors.el
@@ -1379,7 +1905,7 @@
1379 1905
1380 Doc amendment for syntax-ppss. 1906 Doc amendment for syntax-ppss.
1381 1907
1382 * doc/elisp/syntax.texi (Position Parse): Note, twice, that syntax-ppss is 1908 * doc/lispref/syntax.texi (Position Parse): Note, twice, that syntax-ppss is
1383 equivalent to parse-partial-sexp from the beginning of THE VISIBLE PART OF the 1909 equivalent to parse-partial-sexp from the beginning of THE VISIBLE PART OF the
1384 buffer. Final part of the fix for bug #22983. 1910 buffer. Final part of the fix for bug #22983.
1385 1911
@@ -1869,7 +2395,8 @@
1869 2395
18702017-09-25 Michael Albinus <michael.albinus@gmx.de> 23962017-09-25 Michael Albinus <michael.albinus@gmx.de>
1871 2397
1872 * test/lisp/tramp-tests.el (tramp-test21-file-links): Special code for smb. 2398 * test/lisp/net/tramp-tests.el (tramp-test21-file-links): Special
2399 code for smb.
1873 2400
18742017-09-25 Mark Oteiza <mvoteiza@udel.edu> 24012017-09-25 Mark Oteiza <mvoteiza@udel.edu>
1875 2402
@@ -2012,8 +2539,8 @@
2012 2539
2013 Add tests for Edebug 2540 Add tests for Edebug
2014 2541
2015 * tests/lisp/emacs-lisp/edeug-tests.el: New file. 2542 * test/lisp/emacs-lisp/edebug-tests.el: New file.
2016 * tests/lisp/emacs-lisp/edebug-resources/edebug-test-code.el: New file. 2543 * test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el: New file.
2017 2544
20182017-09-21 Gemini Lasswell <gazally@runbox.com> 25452017-09-21 Gemini Lasswell <gazally@runbox.com>
2019 2546
@@ -3335,7 +3862,7 @@
3335 Construct Tramp syntax strings and regular expressions once instead 3862 Construct Tramp syntax strings and regular expressions once instead
3336 of every time they are used, and store them in alists keyed by Tramp 3863 of every time they are used, and store them in alists keyed by Tramp
3337 syntax. 3864 syntax.
3338 * tramp.el (tramp-build-remote-file-name-spec-regexp) 3865 * lisp/net/tramp.el (tramp-build-remote-file-name-spec-regexp)
3339 (tramp-build-file-name-structure): New functions. 3866 (tramp-build-file-name-structure): New functions.
3340 (tramp-prefix-format-alist, tramp-prefix-regexp-alist) 3867 (tramp-prefix-format-alist, tramp-prefix-regexp-alist)
3341 (tramp-method-regexp-alist) 3868 (tramp-method-regexp-alist)
@@ -4755,7 +5282,7 @@
4755 The practical implication of this bug was a random jit-lock chunk remaining 5282 The practical implication of this bug was a random jit-lock chunk remaining
4756 entirely unfontified. 5283 entirely unfontified.
4757 5284
4758 * lisp/progmodes/cc-mode (c-fl-decl-end): If point starts inside a macro, 5285 * lisp/progmodes/cc-mode.el (c-fl-decl-end): If point starts inside a macro,
4759 restrict two forward searches to the end of that macro. 5286 restrict two forward searches to the end of that macro.
4760 5287
47612017-08-22 Michael Albinus <michael.albinus@gmx.de> 52882017-08-22 Michael Albinus <michael.albinus@gmx.de>
@@ -6202,7 +6729,7 @@
6202 Before previous commit, we prompted users with `yes-or-no-p' 6729 Before previous commit, we prompted users with `yes-or-no-p'
6203 which doesn't TAB complete the user answer. Let's play safe and 6730 which doesn't TAB complete the user answer. Let's play safe and
6204 keep requiring full answers. 6731 keep requiring full answers.
6205 * emacs-master/lisp/dired.el (dired-delete-file): Use `read-string' 6732 * lisp/dired.el (dired-delete-file): Use `read-string'
6206 instead of `completing-read' to read the user answers. 6733 instead of `completing-read' to read the user answers.
6207 6734
62082017-08-06 Tino Calancha <tino.calancha@gmail.com> 67352017-08-06 Tino Calancha <tino.calancha@gmail.com>
@@ -6700,7 +7227,8 @@
6700 7227
67012017-07-31 Tino Calancha <tino.calancha@gmail.com> 72282017-07-31 Tino Calancha <tino.calancha@gmail.com>
6702 7229
6703 * lisp/dired (dired-trivial-filenames): Use \` and \' to match string bounds 7230 * lisp/dired.el (dired-trivial-filenames): Use \` and \' to match
7231 string bounds.
6704 7232
67052017-07-31 Paul Eggert <eggert@cs.ucla.edu> 72332017-07-31 Paul Eggert <eggert@cs.ucla.edu>
6706 7234
@@ -7045,7 +7573,7 @@
7045 7573
7046 Enable lexical binding. 7574 Enable lexical binding.
7047 * lisp/ls-lisp.el (ls-lisp-unload-function): New defun. 7575 * lisp/ls-lisp.el (ls-lisp-unload-function): New defun.
7048 * test/lisp/ls-lisp.el (ls-lisp-unload): Add test. 7576 * test/lisp/ls-lisp-tests.el (ls-lisp-unload): Add test.
7049 7577
70502017-07-25 Tino Calancha <tino.calancha@gmail.com> 75782017-07-25 Tino Calancha <tino.calancha@gmail.com>
7051 7579
@@ -7485,7 +8013,7 @@
7485 8013
7486 Stylistic changes in tramp-cache.el 8014 Stylistic changes in tramp-cache.el
7487 8015
7488 * test/lisp/net/tramp-cache.el (tramp-get-file-property) 8016 * lisp/net/tramp-cache.el (tramp-get-file-property)
7489 (tramp-set-file-property): Use `bound-and-true-p'. Add 8017 (tramp-set-file-property): Use `bound-and-true-p'. Add
7490 counter variables to `tramp-cache-unload-hook'. 8018 counter variables to `tramp-cache-unload-hook'.
7491 8019
@@ -7590,7 +8118,7 @@
7590 8118
75912017-07-18 Stefan Monnier <monnier@iro.umontreal.ca> 81192017-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
7592 8120
7593 * emacs-lisp/cl-lib.el (cl--old-struct-type-of): Accept `[]' 8121 * lisp/emacs-lisp/cl-lib.el (cl--old-struct-type-of): Accept `[]'
7594 8122
75952017-07-18 Eli Zaretskii <eliz@gnu.org> 81232017-07-18 Eli Zaretskii <eliz@gnu.org>
7596 8124
@@ -7898,7 +8426,7 @@
7898 8426
7899 Fix compilation of gnutls.c with older GnuTLS 8427 Fix compilation of gnutls.c with older GnuTLS
7900 8428
7901 * src/gnutrls.c (syms_of_gnutls): Condition some defsubr's 8429 * src/gnutls.c (syms_of_gnutls): Condition some defsubr's
7902 on HAVE_GNUTLS3, to avoid compilation errors when GnuTLS 8430 on HAVE_GNUTLS3, to avoid compilation errors when GnuTLS
7903 v3.X is not available. Reported by Colin Baxter <m43cap@yandex.com>. 8431 v3.X is not available. Reported by Colin Baxter <m43cap@yandex.com>.
7904 8432
@@ -9125,7 +9653,7 @@
9125 9653
9126 * lisp/simple.el (line-number-at-pos): Add a second optional 9654 * lisp/simple.el (line-number-at-pos): Add a second optional
9127 argument 'absolute'. 9655 argument 'absolute'.
9128 * test/list/simple-tests.el: Add tests for 'line-number-at-pos'. 9656 * test/lisp/simple-tests.el: Add tests for 'line-number-at-pos'.
9129 9657
91302017-07-03 R. Bernstein <rocky@gnu.org> 96582017-07-03 R. Bernstein <rocky@gnu.org>
9131 9659
@@ -10591,7 +11119,7 @@
10591 Add current-line in simple.el 11119 Add current-line in simple.el
10592 11120
10593 * lisp/simple.el (current-line): New function. 11121 * lisp/simple.el (current-line): New function.
10594 * test/list/simple-tests.el: Add tests for current-line. 11122 * test/lisp/simple-tests.el: Add tests for current-line.
10595 11123
105962017-06-19 Katsumi Yamaoka <yamaoka@jpl.org> 111242017-06-19 Katsumi Yamaoka <yamaoka@jpl.org>
10597 11125
@@ -10608,8 +11136,8 @@
10608 11136
106092017-06-18 Andreas Schwab <schwab@linux-m68k.org> 111372017-06-18 Andreas Schwab <schwab@linux-m68k.org>
10610 11138
10611 * url/url-util.el (url-get-url-at-point): Add missing group in 11139 * lisp/url/url-util.el (url-get-url-at-point): Add missing group
10612 regex. 11140 in regex.
10613 11141
106142017-06-18 Paul Eggert <eggert@cs.ucla.edu> 111422017-06-18 Paul Eggert <eggert@cs.ucla.edu>
10615 11143
@@ -10720,8 +11248,8 @@
10720 11248
107212017-06-17 Andreas Schwab <schwab@linux-m68k.org> 112492017-06-17 Andreas Schwab <schwab@linux-m68k.org>
10722 11250
10723 * international/characters.el: Update list of zero and full width 11251 * lisp/international/characters.el: Update list of zero and full
10724 characters according to Unicode 9.0.0. 11252 width characters according to Unicode 9.0.0.
10725 11253
107262017-06-17 Simen Heggestøyl <simenheg@gmail.com> 112542017-06-17 Simen Heggestøyl <simenheg@gmail.com>
10727 11255
@@ -10820,7 +11348,7 @@
10820 11348
10821 Fix hang in CC Mode when ":" is typed after identifier at EOB. 11349 Fix hang in CC Mode when ":" is typed after identifier at EOB.
10822 11350
10823 * list/progmodes/cc-engine.el (c-forward-declarator): Fix coding error 11351 * lisp/progmodes/cc-engine.el (c-forward-declarator): Fix coding error
10824 confusing ":" and EOB. 11352 confusing ":" and EOB.
10825 11353
108262017-06-15 Alan Mackenzie <acm@muc.de> 113542017-06-15 Alan Mackenzie <acm@muc.de>
@@ -11394,7 +11922,7 @@
11394 Rather than checking for the main thread, check for the current 11922 Rather than checking for the main thread, check for the current
11395 thread. 11923 thread.
11396 11924
11397 * emacs-module.c (check_thread): New function. 11925 * src/emacs-module.c (check_thread): New function.
11398 (MODULE_FUNCTION_BEGIN_NO_CATCH, module_get_environment) 11926 (MODULE_FUNCTION_BEGIN_NO_CATCH, module_get_environment)
11399 (module_non_local_exit_check, module_non_local_exit_clear) 11927 (module_non_local_exit_check, module_non_local_exit_clear)
11400 (module_non_local_exit_get, module_non_local_exit_signal) 11928 (module_non_local_exit_get, module_non_local_exit_signal)
@@ -11797,7 +12325,7 @@
11797 12325
11798 These can help module authors debug crashes. 12326 These can help module authors debug crashes.
11799 12327
11800 * emacs-module.c (module_non_local_exit_check) 12328 * src/emacs-module.c (module_non_local_exit_check)
11801 (module_non_local_exit_clear, module_non_local_exit_get) 12329 (module_non_local_exit_clear, module_non_local_exit_get)
11802 (module_non_local_exit_signal, module_non_local_exit_throw) 12330 (module_non_local_exit_signal, module_non_local_exit_throw)
11803 (module_copy_string_contents, module_make_string) 12331 (module_copy_string_contents, module_make_string)
@@ -12294,7 +12822,7 @@
12294 12822
12295 Mode line "%q" construct: Just use one number when both would be the same. 12823 Mode line "%q" construct: Just use one number when both would be the same.
12296 12824
12297 * src/xdisp (decode_mode_spec): recode the "%q" bit appropriately. 12825 * src/xdisp.c (decode_mode_spec): recode the "%q" bit appropriately.
12298 12826
122992017-05-30 Alan Mackenzie <acm@muc.de> 128272017-05-30 Alan Mackenzie <acm@muc.de>
12300 12828
@@ -12528,7 +13056,7 @@
12528 13056
12529 Fix Tramp for Android 7 13057 Fix Tramp for Android 7
12530 13058
12531 * tramp-adb.el (tramp-adb-ls-toolbox-regexp): 13059 * lisp/net/tramp-adb.el (tramp-adb-ls-toolbox-regexp):
12532 Username part of prompt is empty on Android 7. 13060 Username part of prompt is empty on Android 7.
12533 (tramp-adb-ls-toolbox-regexp): 13061 (tramp-adb-ls-toolbox-regexp):
12534 Ignore addition links column on Android 7. 13062 Ignore addition links column on Android 7.
@@ -13208,8 +13736,8 @@
13208 13736
13209 Remove unused automatic variables 13737 Remove unused automatic variables
13210 13738
13211 * nsterm.m (ns_read_socket): 13739 * src/nsterm.m (ns_read_socket):
13212 * macfont.m (macfont_open): Remove unused automatic variables. 13740 * src/macfont.m (macfont_open): Remove unused automatic variables.
13213 13741
132142017-05-21 Philipp Stephani <phst@google.com> 137422017-05-21 Philipp Stephani <phst@google.com>
13215 13743
@@ -13278,7 +13806,7 @@
13278 13806
13279 This removes compiler warnings on macOS and improves type safety. 13807 This removes compiler warnings on macOS and improves type safety.
13280 13808
13281 * nsterm.m (initFrameFromEmacs:): 13809 * src/nsterm.m (initFrameFromEmacs:):
13282 (menuDown:): 13810 (menuDown:):
13283 (toolbarClicked:): 13811 (toolbarClicked:):
13284 (toggleToolbar:): 13812 (toggleToolbar:):
@@ -13286,12 +13814,12 @@
13286 (initFrame:window:): 13814 (initFrame:window:):
13287 (condemn, reprieve, setPosition:portion:whole:): 13815 (condemn, reprieve, setPosition:portion:whole:):
13288 (repeatScroll:): 13816 (repeatScroll:):
13289 * nsmenu.m (initWithTitle:): 13817 * src/nsmenu.m (initWithTitle:):
13290 (initWithTitle:frame:): 13818 (initWithTitle:frame:):
13291 (initForView:withIdentifier:): 13819 (initForView:withIdentifier:):
13292 (init, initWithContentRect:styleMask:backing:defer:): 13820 (init, initWithContentRect:styleMask:backing:defer:):
13293 (initFromContents:isQuestion:): 13821 (initFromContents:isQuestion:):
13294 * nsimage.m (allocInitFromFile:): 13822 * src/nsimage.m (allocInitFromFile:):
13295 (initFromXBM:width:height:fg:bg:): 13823 (initFromXBM:width:height:fg:bg:):
13296 (setXBMColor:): 13824 (setXBMColor:):
13297 (initForXPMWithDepth:width:height:): Use instancetype as return 13825 (initForXPMWithDepth:width:height:): Use instancetype as return
@@ -14144,7 +14672,7 @@
14144 variable. 14672 variable.
14145 * test/src/lread-tests.el (lread-tests--old-style-backquotes): Add 14673 * test/src/lread-tests.el (lread-tests--old-style-backquotes): Add
14146 unit test. 14674 unit test.
14147 * emacs-lisp/bytecomp-tests.el 14675 * test/lisp/emacs-lisp/bytecomp-tests.el
14148 (bytecomp-tests--old-style-backquotes): Add unit test. 14676 (bytecomp-tests--old-style-backquotes): Add unit test.
14149 14677
141502017-05-13 Philipp Stephani <phst@google.com> 146782017-05-13 Philipp Stephani <phst@google.com>
@@ -15569,13 +16097,13 @@
15569 16097
15570 Add support for IRCv3 message tags. 16098 Add support for IRCv3 message tags.
15571 16099
15572 * erc-backend.el: 16100 * lisp/erc/erc-backend.el:
15573 erc-response: Add `tags' element. 16101 erc-response: Add `tags' element.
15574 Add (erc-parse-tags). 16102 Add (erc-parse-tags).
15575 (erc-parse-server-response): Use (erc-parse-tags) to parse message 16103 (erc-parse-server-response): Use (erc-parse-tags) to parse message
15576 tags (if any), and store them in `erc-resopnse' struct. 16104 tags (if any), and store them in `erc-resopnse' struct.
15577 16105
15578 * erc.el: (erc-display-message): Expose message tags with text 16106 * lisp/erc/erc.el: (erc-display-message): Expose message tags with text
15579 properties of the corresponding message line. 16107 properties of the corresponding message line.
15580 16108
155812017-04-24 Lars Ingebrigtsen <larsi@gnus.org> 161092017-04-24 Lars Ingebrigtsen <larsi@gnus.org>
@@ -16094,7 +16622,7 @@
16094 (xml-maybe-do-ns): Properly handle default namespace by not 16622 (xml-maybe-do-ns): Properly handle default namespace by not
16095 interning new symbol when 'special' flag is set. 16623 interning new symbol when 'special' flag is set.
16096 16624
16097 * tests/lisp/xml-tests.el (xml-parse-test--namespace-attribute-qnames) 16625 * test/lisp/xml-tests.el (xml-parse-test--namespace-attribute-qnames)
16098 (xml-parse-namespace-attribute-qnames): Add test for Bug#26533. 16626 (xml-parse-namespace-attribute-qnames): Add test for Bug#26533.
16099 16627
161002017-04-17 Paul Eggert <eggert@Penguin.CS.UCLA.EDU> 166282017-04-17 Paul Eggert <eggert@Penguin.CS.UCLA.EDU>
@@ -16770,7 +17298,7 @@
16770 * src/fns.c (Flength, Fcopy_sequence): 17298 * src/fns.c (Flength, Fcopy_sequence):
16771 * src/font.h (FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P): 17299 * src/font.h (FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P):
16772 * src/lread.c (substitute_object_recurse): 17300 * src/lread.c (substitute_object_recurse):
16773 * src/src/print.c (print_object): 17301 * src/print.c (print_object):
16774 Use it. 17302 Use it.
16775 17303
167762017-04-10 Michael Albinus <michael.albinus@gmx.de> 173042017-04-10 Michael Albinus <michael.albinus@gmx.de>
@@ -16960,9 +17488,9 @@
16960 17488
16961 Fix circular read syntax for records. 17489 Fix circular read syntax for records.
16962 17490
16963 * lread.c (substitute_object_recurse): Work with records. 17491 * src/lread.c (substitute_object_recurse): Work with records.
16964 17492
16965 * lread-tests.el (lread-record-1): New test. 17493 * test/src/lread-tests.el (lread-record-1): New test.
16966 17494
169672017-04-08 Paul Eggert <eggert@cs.ucla.edu> 174952017-04-08 Paul Eggert <eggert@cs.ucla.edu>
16968 17496
@@ -17051,7 +17579,7 @@
17051 17579
170522017-04-07 Lars Brinkhoff <lars@nocrew.org> 175802017-04-07 Lars Brinkhoff <lars@nocrew.org>
17053 17581
17054 * records.texi (Record Functions): fix typo. 17582 * doc/lispref/records.texi (Record Functions): fix typo.
17055 17583
170562017-04-07 Paul Eggert <eggert@cs.ucla.edu> 175842017-04-07 Paul Eggert <eggert@cs.ucla.edu>
17057 17585
@@ -17065,15 +17593,15 @@
17065 17593
17066 Output number of characters added to file (Bug#354) 17594 Output number of characters added to file (Bug#354)
17067 17595
17068 * fileio.c (write_region): 17596 * src/fileio.c (write_region):
17069 * epa-file.el (epa-file-write-region): 17597 * lisp/epa-file.el (epa-file-write-region):
17070 * jka-compr.el (jka-compr-write-region): 17598 * lisp/jka-compr.el (jka-compr-write-region):
17071 * ange-ftp.el (ange-ftp-write-region): 17599 * lisp/net/ange-ftp.el (ange-ftp-write-region):
17072 * tramp-gvfs.el (tramp-gvfs-handle-write-region): 17600 * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-write-region):
17073 * tramp-sh.el (tramp-sh-handle-write-region): 17601 * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
17074 * mm-util.el (mm-append-to-file): Functions now output 17602 * lisp/gnus/mm-util.el (mm-append-to-file): Functions now output
17075 characters written in addition to file name. 17603 characters written in addition to file name.
17076 * files.texi: Added documentation to write-region and 17604 * doc/lispref/files.texi: Added documentation to write-region and
17077 append-to-file describing their output. 17605 append-to-file describing their output.
17078 17606
170792017-04-07 Noam Postavsky <npostavs@users.sourceforge.net> 176072017-04-07 Noam Postavsky <npostavs@users.sourceforge.net>
@@ -17197,7 +17725,8 @@
17197 17725
171982017-04-07 Hong Xu <hong@topbug.net> 177262017-04-07 Hong Xu <hong@topbug.net>
17199 17727
17200 * search.c (Fre_search_forward, Fre_search_backward): Improve doc (Bug#25193). 17728 * src/search.c (Fre_search_forward, Fre_search_backward): Improve
17729 doc (Bug#25193).
17201 17730
172022017-04-07 Noam Postavsky <npostavs@gmail.com> 177312017-04-07 Noam Postavsky <npostavs@gmail.com>
17203 17732
@@ -17315,7 +17844,7 @@
17315 standard distribution. 17844 standard distribution.
17316 * admin/unidata/README: Mention SpecialCasing.txt. 17845 * admin/unidata/README: Mention SpecialCasing.txt.
17317 17846
17318 * admin/unidata/unidata-get.el (unidata-gen-table-special-casing, 17847 * admin/unidata/unidata-gen.el (unidata-gen-table-special-casing,
17319 unidata-gen-table-special-casing--do-load): New functions generating 17848 unidata-gen-table-special-casing--do-load): New functions generating
17320 ‘special-uppercase’, ‘special-lowercase’ and ‘special-titlecase’ 17849 ‘special-uppercase’, ‘special-lowercase’ and ‘special-titlecase’
17321 character Unicode properties built from the SpecialCasing.txt Unicode 17850 character Unicode properties built from the SpecialCasing.txt Unicode
@@ -17422,14 +17951,14 @@
17422 17951
17423 Update documentation for type semantics of records. 17952 Update documentation for type semantics of records.
17424 17953
17425 * objects.texi (Record Type): improve description of what 17954 * doc/lispref/objects.texi (Record Type): improve description of what
17426 `type-of' returns for records. 17955 `type-of' returns for records.
17427 (Type Descriptors): new section. 17956 (Type Descriptors): new section.
17428 * elisp.texi: reference it. 17957 * doc/lispref/elisp.texi: reference it.
17429 * records.texi (Records): reference it. Document behaviour when type 17958 * doc/lispref/records.texi (Records): reference it. Document
17430 slot is a record. 17959 behaviour when type slot is a record.
17431 17960
17432 * alloc.c (Fmake_record, Frecord): mention type desciptors. 17961 * admin/alloc-colors.c (Fmake_record, Frecord): mention type desciptors.
17433 17962
174342017-04-06 Stefan Monnier <monnier@iro.umontreal.ca> 179632017-04-06 Stefan Monnier <monnier@iro.umontreal.ca>
17435 17964
@@ -18016,7 +18545,7 @@
18016 18545
18017 * lisp/gnus/gnus-start.el (gnus-display-time-event-handler): Use 18546 * lisp/gnus/gnus-start.el (gnus-display-time-event-handler): Use
18018 bound-and-true-p. 18547 bound-and-true-p.
18019 * lisp/gnus/gnus-util (gnus-boundp): Remove. 18548 * lisp/gnus/gnus-util.el (gnus-boundp): Remove.
18020 18549
180212017-03-31 Niels Möller <nisse@lysator.liu.se> (tiny change) 185502017-03-31 Niels Möller <nisse@lysator.liu.se> (tiny change)
18022 18551
@@ -18240,8 +18769,9 @@
18240 18769
18241 Add check for expected backtrace in module calls. 18770 Add check for expected backtrace in module calls.
18242 18771
18243 * test.el (mod-test-non-local-exit-signal-test): Compare actual 18772 * test/manual/cedet/tests/test.el
18244 backtrace to expected backtrace. 18773 (mod-test-non-local-exit-signal-test): Compare actual backtrace to
18774 expected backtrace.
18245 18775
182462017-03-26 Eli Zaretskii <eliz@gnu.org> 187762017-03-26 Eli Zaretskii <eliz@gnu.org>
18247 18777
@@ -18397,7 +18927,7 @@
18397 18927
18398 Make it easier to abort a series of tests with C-g 18928 Make it easier to abort a series of tests with C-g
18399 18929
18400 * emacs-lisp/ert.el (ert-run-tests): Add "interactively" arg. If 18930 * lisp/emacs-lisp/ert.el (ert-run-tests): Add "interactively" arg. If
18401 interactively is true and a test was aborted then ask if the remaining 18931 interactively is true and a test was aborted then ask if the remaining
18402 tests should be aborted too. 18932 tests should be aborted too.
18403 (ert-run-tests-batch, ert-run-tests-interactively): Pass in 18933 (ert-run-tests-batch, ert-run-tests-interactively): Pass in
@@ -18435,8 +18965,9 @@
18435 `python-nav-end-of-statement'. Protect against this by checking 18965 `python-nav-end-of-statement'. Protect against this by checking
18436 whether the search for the end of the current string makes progress. 18966 whether the search for the end of the current string makes progress.
18437 18967
18438 * python.el (python-nav-end-of-statement): Protect against infloop. 18968 * lisp/progmodes/python.el (python-nav-end-of-statement): Protect
18439 * progmodes/python-tests.el 18969 against infloop.
18970 * test/lisp/progmodes/python-tests.el
18440 (python-tests--python-nav-end-of-statement--infloop): Add unit test. 18971 (python-tests--python-nav-end-of-statement--infloop): Add unit test.
18441 18972
184422017-03-23 Michael Albinus <michael.albinus@gmx.de> 189732017-03-23 Michael Albinus <michael.albinus@gmx.de>
@@ -19668,10 +20199,10 @@
19668 20199
196692017-03-08 Andreas Schwab <schwab@linux-m68k.org> 202002017-03-08 Andreas Schwab <schwab@linux-m68k.org>
19670 20201
19671 * data.c (minmax_driver): Use CHECK_NUMBER_OR_FLOAT_COERCE_MARKER. 20202 * src/data.c (minmax_driver): Use CHECK_NUMBER_OR_FLOAT_COERCE_MARKER.
19672 (Fmax, Fmin): Restore documentation. 20203 (Fmax, Fmin): Restore documentation.
19673 20204
19674 * data.c (cons_to_unsigned, cons_to_signed, Fstring_to_number): Reorder 20205 * src/data.c (cons_to_unsigned, cons_to_signed, Fstring_to_number): Reorder
19675 comparisons that are written backward. 20206 comparisons that are written backward.
19676 20207
196772017-03-08 Thien-Thi Nguyen <ttn@gnu.org> 202082017-03-08 Thien-Thi Nguyen <ttn@gnu.org>
@@ -20080,7 +20611,7 @@
20080 20611
20081 Enable the usage of an in-memory database. Prior to this, sql-mode w/ 20612 Enable the usage of an in-memory database. Prior to this, sql-mode w/
20082 sqlite could only be used with file databases. 20613 sqlite could only be used with file databases.
20083 * list/progmodes/sql.el (sql-get-login-ext): Don't expand an empty 20614 * lisp/progmodes/sql.el (sql-get-login-ext): Don't expand an empty
20084 file name provided by the user, but call sub-process sqlite with that, 20615 file name provided by the user, but call sub-process sqlite with that,
20085 in which case it uses an in-memory database. 20616 in which case it uses an in-memory database.
20086 20617
@@ -20223,7 +20754,7 @@
20223 20754
202242017-03-02 Glenn Morris <rgm@gnu.org> 207552017-03-02 Glenn Morris <rgm@gnu.org>
20225 20756
20226 * test/lisp/net/puny.el: New file. 20757 * test/lisp/net/puny-tests.el: New file.
20227 20758
202282017-03-02 Glenn Morris <rgm@gnu.org> 207592017-03-02 Glenn Morris <rgm@gnu.org>
20229 20760
@@ -20349,7 +20880,7 @@
20349 20880
20350 Do not use find-file non-interactively 20881 Do not use find-file non-interactively
20351 20882
20352 * lisp/international/titdic-cnv (miscdic-convert): Use 20883 * lisp/international/titdic-cnv.el (miscdic-convert): Use
20353 insert-file-contents in place of find-file. 20884 insert-file-contents in place of find-file.
20354 20885
203552017-02-28 Stefan Monnier <monnier@iro.umontreal.ca> 208862017-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
@@ -21412,7 +21943,7 @@
21412 21943
21413 Avoid errors when flyspell-generic-check-word-predicate is a lambda. 21944 Avoid errors when flyspell-generic-check-word-predicate is a lambda.
21414 21945
21415 * flyspell.el (flyspell-auto-correct-word, flyspell-word): Apply 21946 * lisp/textmodes/flyspell.el (flyspell-auto-correct-word, flyspell-word): Apply
21416 functionp instead of fboundp on 21947 functionp instead of fboundp on
21417 flyspell-generic-check-word-predicate (Bug#25765). 21948 flyspell-generic-check-word-predicate (Bug#25765).
21418 21949
@@ -22379,7 +22910,7 @@
22379 22910
223802017-02-05 Vibhav Pant <vibhavp@gmail.com> 229112017-02-05 Vibhav Pant <vibhavp@gmail.com>
22381 22912
22382 * byte-opt.el (byte-decompile-bytecode-1): Use eq instead of =. 22913 * lisp/emacs-lisp/byte-opt.el (byte-decompile-bytecode-1): Use eq instead of =.
22383 22914
223842017-02-05 Vibhav Pant <vibhavp@gmail.com> 229152017-02-05 Vibhav Pant <vibhavp@gmail.com>
22385 22916
@@ -22865,9 +23396,9 @@
22865 nested brace lists when the opening element stands on the same line as both 23396 nested brace lists when the opening element stands on the same line as both
22866 its introductory brace and an enclosing parameter list parenthesis. 23397 its introductory brace and an enclosing parameter list parenthesis.
22867 23398
22868 * list/progmodes/cc-align.el (c-lineup-under-anchor): New line-up function. 23399 * lisp/progmodes/cc-align.el (c-lineup-under-anchor): New line-up function.
22869 23400
22870 * list/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): Accept the 23401 * lisp/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): Accept the
22871 presence of exactly an identifier between an open parenthesis and an open 23402 presence of exactly an identifier between an open parenthesis and an open
22872 brace as evidence of the brace starting a brace list. 23403 brace as evidence of the brace starting a brace list.
22873 (c-looking-at-statement-block): New function, extracted from 23404 (c-looking-at-statement-block): New function, extracted from
@@ -23123,7 +23654,7 @@
23123 `:purecopy t`, use purecopy_hash_table otherwise. 23654 `:purecopy t`, use purecopy_hash_table otherwise.
23124 (marked_pinned_objects) New function, marks all objects in pinned_objects. 23655 (marked_pinned_objects) New function, marks all objects in pinned_objects.
23125 (garbage_collect_1) Use it. Mark all pinned objects before sweeping. 23656 (garbage_collect_1) Use it. Mark all pinned objects before sweeping.
23126 * src/lisp.h Add new field `pure' to struct `Lisp_Hash_Table'. 23657 * src/lisp.h: Add new field `pure' to struct `Lisp_Hash_Table'.
23127 * src/fns.c: Add `purecopy' parameter to hash tables. 23658 * src/fns.c: Add `purecopy' parameter to hash tables.
23128 (Fmake_hash_table): Check for a `:purecopy PURECOPY' argument, pass it 23659 (Fmake_hash_table): Check for a `:purecopy PURECOPY' argument, pass it
23129 to make_hash_table. 23660 to make_hash_table.
@@ -23348,7 +23879,7 @@
23348 23879
23349 Support Bash Ctrl-Z indication of directory name in term.el 23880 Support Bash Ctrl-Z indication of directory name in term.el
23350 23881
23351 * term.el (term-emulate-terminal): Do not display ?\032 escape 23882 * lisp/term/xterm.el (term-emulate-terminal): Do not display ?\032 escape
23352 codes even when 'handled-ansi-message' is non-nil. (Bug#11919) 23883 codes even when 'handled-ansi-message' is non-nil. (Bug#11919)
23353 23884
233542017-01-27 Eli Zaretskii <eliz@gnu.org> 238852017-01-27 Eli Zaretskii <eliz@gnu.org>
@@ -23373,12 +23904,13 @@
23373 23904
23374 python-mode: Fix detection for opening blocks. 23905 python-mode: Fix detection for opening blocks.
23375 23906
23376 * python.el (python-info-dedenter-opening-block-positions): There 23907 * lisp/progmodes/python.el
23377 can't be any back-indented lines between an opening block and the 23908 (python-info-dedenter-opening-block-positions): There can't be any
23378 current line. 23909 back-indented lines between an opening block and the current line.
23379 23910
23380 * python-tests.el (python-indent-electric-colon-4): Add an indent 23911 * test/lisp/progmodes/python-tests.el
23381 test case where there is one-more indented previous opening block. 23912 (python-indent-electric-colon-4): Add an indent test case where
23913 there is one-more indented previous opening block.
23382 23914
233832017-01-27 Lars Ingebrigtsen <larsi@gnus.org> 239152017-01-27 Lars Ingebrigtsen <larsi@gnus.org>
23384 23916
@@ -24314,7 +24846,7 @@
24314 24846
24315 * lisp/emacs-lisp/byte-opt.el: Optimize how tags are checked for use. 24847 * lisp/emacs-lisp/byte-opt.el: Optimize how tags are checked for use.
24316 24848
24317 * byte-opt.el: (byte-optimize-lapcode): Return nil instantly on 24849 * lisp/emacs-lisp/byte-opt.el: (byte-optimize-lapcode): Return nil instantly on
24318 finding the tag in a jump table. 24850 finding the tag in a jump table.
24319 24851
243202017-01-15 Vibhav Pant <vibhavp@gmail.com> 248522017-01-15 Vibhav Pant <vibhavp@gmail.com>
@@ -24368,7 +24900,7 @@
24368 24900
24369 Correct c-parse-state-get-strategy for moving HERE backward into a macro. 24901 Correct c-parse-state-get-strategy for moving HERE backward into a macro.
24370 24902
24371 * list/progmodes/c-engine.el (c-parse-state-get-strategy): When HERE is below 24903 * lisp/progmodes/cc-engine.el (c-parse-state-get-strategy): When HERE is below
24372 its previous value, we chose strategy 'forward, and the new HERE is in a 24904 its previous value, we chose strategy 'forward, and the new HERE is in a
24373 (different) macro, ensure the returned START-POINT is not above the start of 24905 (different) macro, ensure the returned START-POINT is not above the start of
24374 the macro. 24906 the macro.
@@ -24761,12 +25293,13 @@
24761 25293
24762 * lisp/textmodes/rst.el: Fix rst-forward-indented-block. 25294 * lisp/textmodes/rst.el: Fix rst-forward-indented-block.
24763 25295
24764 * rst.el (rst-cvs-header, rst-svn-rev, rst-svn-timestamp) 25296 * lisp/textmodes/rst.el (rst-cvs-header, rst-svn-rev)
24765 (rst-official-version, rst-official-cvs-rev) 25297 (rst-svn-timestamp)
24766 (rst-package-emacs-version-alist): Maintain version numbers. 25298 (rst-official-version, rst-official-cvs-rev)
24767 (rst-forward-indented-block): Fix. Start searching at next 25299 (rst-package-emacs-version-alist): Maintain version numbers.
24768 line again. Fixes fontification of comments continuing on the 25300 (rst-forward-indented-block): Fix. Start searching at next
24769 same line they started. 25301 line again. Fixes fontification of comments continuing on the
25302 same line they started.
24770 25303
247712017-01-08 Paul Eggert <eggert@cs.ucla.edu> 253042017-01-08 Paul Eggert <eggert@cs.ucla.edu>
24772 25305
@@ -25555,7 +26088,7 @@
25555 26088
255562016-12-29 Mike Kupfer <mkupfer@alum.berkeley.edu> 260892016-12-29 Mike Kupfer <mkupfer@alum.berkeley.edu>
25557 26090
25558 * mh-e.el (mh-fetch-x-image-url): Fix a docstring typo. 26091 * lisp/mh-e/mh-e.el (mh-fetch-x-image-url): Fix a docstring typo.
25559 26092
255602016-12-29 Alan Mackenzie <acm@muc.de> 260932016-12-29 Alan Mackenzie <acm@muc.de>
25561 26094
@@ -25846,13 +26379,13 @@
25846 26379
25847 Fix timezone detection of parse-iso8601-time-string 26380 Fix timezone detection of parse-iso8601-time-string
25848 26381
25849 * parse-time.el (parse-iso8601-time-string): Fix timezone 26382 * lisp/calendar/parse-time.el (parse-iso8601-time-string): Fix timezone
25850 parsing. Add a doc string. (Bug#25086) 26383 parsing. Add a doc string. (Bug#25086)
25851 * editfns.c (Fdecode-time): Doc fix. 26384 * src/editfns.c (Fdecode-time): Doc fix.
25852 * emacs-mime.texi (time-date): Add an example for 26385 * doc/misc/emacs-mime.texi (time-date): Add an example for
25853 parse-iso8601-time-string.
25854 * parse-time-tests.el (parse-time-tests): Add tests for
25855 parse-iso8601-time-string. 26386 parse-iso8601-time-string.
26387 * test/lisp/calendar/parse-time-tests.el (parse-time-tests): Add
26388 tests for parse-iso8601-time-string.
25856 26389
258572016-12-24 Paul Eggert <eggert@cs.ucla.edu> 263902016-12-24 Paul Eggert <eggert@cs.ucla.edu>
25858 26391
@@ -25932,7 +26465,7 @@
25932 Document that variable binding order is unspecified 26465 Document that variable binding order is unspecified
25933 26466
25934 * doc/lispref/variables.texi (Local Variables): 26467 * doc/lispref/variables.texi (Local Variables):
25935 * cl.texi (Modify Macros): Document that binding order in 'let' and 26468 * doc/misc/cl.texi (Modify Macros): Document that binding order in 'let' and
25936 'cl-letf' is unspecified. 26469 'cl-letf' is unspecified.
25937 26470
259382016-12-23 Eli Zaretskii <eliz@gnu.org> 264712016-12-23 Eli Zaretskii <eliz@gnu.org>
@@ -26040,7 +26573,8 @@
26040 26573
260412016-12-21 Stefan Monnier <monnier@iro.umontreal.ca> 265742016-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
26042 26575
26043 * tex-mode.el (tex-compile-commands): Add luatex and xetex commands 26576 * lisp/textmodes/tex-mode.el (tex-compile-commands): Add luatex
26577 and xetex commands.
26044 26578
260452016-12-21 Eli Zaretskii <eliz@gnu.org> 265792016-12-21 Eli Zaretskii <eliz@gnu.org>
26046 26580
@@ -26244,7 +26778,7 @@
26244 26778
26245 Protect change of window's buffer in vertical-motion against unwinds (bug#25209) 26779 Protect change of window's buffer in vertical-motion against unwinds (bug#25209)
26246 26780
26247 * indent.c (restore_window_buffer): New function. 26781 * src/indent.c (restore_window_buffer): New function.
26248 (Fvertical_motion): Use it to restore window's buffer. 26782 (Fvertical_motion): Use it to restore window's buffer.
26249 26783
262502016-12-19 Glenn Morris <rgm@gnu.org> 267842016-12-19 Glenn Morris <rgm@gnu.org>
@@ -26305,7 +26839,7 @@
26305 26839
26306 avoid Eager macro-expansion failure: (void-function string-to-list) 26840 avoid Eager macro-expansion failure: (void-function string-to-list)
26307 26841
26308 * loadup.el [ns]: "ucs-normalize" uses `string-to-list' which is defined 26842 * lisp/loadup.el [ns]: "ucs-normalize" uses `string-to-list' which is defined
26309 in "mule-util", so we have to load "mule-util" before "ucs-normalize", 26843 in "mule-util", so we have to load "mule-util" before "ucs-normalize",
26310 otherwise I get "Eager macro-expansion failure" on "make bootstrap" 26844 otherwise I get "Eager macro-expansion failure" on "make bootstrap"
26311 26845
@@ -26531,7 +27065,8 @@
26531 27065
265322016-12-15 Paul Eggert <eggert@cs.ucla.edu> 270662016-12-15 Paul Eggert <eggert@cs.ucla.edu>
26533 27067
26534 * emacs-document.svg: Append newline. 27068 * etc/images/icons/hicolor/scalable/mimetypes/emacs-document.svg:
27069 Append newline.
26535 27070
265362016-12-15 Mark Oteiza <mvoteiza@udel.edu> 270712016-12-15 Mark Oteiza <mvoteiza@udel.edu>
26537 27072
@@ -28033,8 +28568,8 @@
28033 28568
28034 fix a latent bug in process.c 28569 fix a latent bug in process.c
28035 28570
28036 * process.c (wait_reading_process_output): Check Writeok bits, 28571 * src/process.c (wait_reading_process_output): Check Writeok bits,
28037 not write_mask. 28572 not write_mask.
28038 28573
280392012-08-15 Tom Tromey <tromey@redhat.com> 285742012-08-15 Tom Tromey <tromey@redhat.com>
28040 28575
@@ -50754,7 +51289,7 @@
50754 51289
50755This file records repository revisions from 51290This file records repository revisions from
50756commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to 51291commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
50757commit 82d2a05a74c120480dc1b68243430c9417bfc523 (inclusive). 51292commit e8a7c41b4e2dc9df18038d2931ed883946a2bb50 (inclusive).
50758See ChangeLog.1 for earlier changes. 51293See ChangeLog.1 for earlier changes.
50759 51294
50760;; Local Variables: 51295;; Local Variables:
diff --git a/INSTALL.REPO b/INSTALL.REPO
index ac991f7ee26..a5b60cf6cb1 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -54,7 +54,7 @@ If CPU time is not an issue, 'make bootstrap' is a more thorough way
54to rebuild, avoiding spurious problems. 54to rebuild, avoiding spurious problems.
55 55
56Occasionally, there are changes that 'make bootstrap' won't be able to 56Occasionally, there are changes that 'make bootstrap' won't be able to
57handle. The most thorough cleaning can be achieved by 'git clean -fx' 57handle. The most thorough cleaning can be achieved by 'git clean -fdx'
58which will leave you with only files from the git repository. Here 58which will leave you with only files from the git repository. Here
59are some faster methods for a couple of particular error cases: 59are some faster methods for a couple of particular error cases:
60 60
diff --git a/admin/authors.el b/admin/authors.el
index 5638efbc34c..71995d5764c 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -916,6 +916,7 @@ in the repository.")
916 ("vc/vc-arch.el" . "vc-arch.el") 916 ("vc/vc-arch.el" . "vc-arch.el")
917 ("lisp/gnus/messcompat.el" . "messcompat.el") 917 ("lisp/gnus/messcompat.el" . "messcompat.el")
918 ("html2text.el" . "html2text.el") 918 ("html2text.el" . "html2text.el")
919 ("lisp/net/html2text.el" . "html2text.el")
919 ;; From lisp to etc/forms. 920 ;; From lisp to etc/forms.
920 ("forms-d2.el" . "forms-d2.el") 921 ("forms-d2.el" . "forms-d2.el")
921 ("forms-pass.el" . "forms-pass.el") 922 ("forms-pass.el" . "forms-pass.el")
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index 547dbd1b45d..426c18b14e5 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -25,7 +25,7 @@ less and less available/popular as you move farther back in time.
25 25
26@item 26@item
27For similar reasons, we've reverted back to building our own version 27For similar reasons, we've reverted back to building our own version
28of of @command{movemail} that retrieves POP3 mail as clear text via 28of @command{movemail} that retrieves POP3 mail as clear text via
29insecure channels. As you move back in time, the availability of 29insecure channels. As you move back in time, the availability of
30secure alternatives to POP3 will diminish, and we are only keen to 30secure alternatives to POP3 will diminish, and we are only keen to
31support that. We've also removed the @option{--with-mailutils} 31support that. We've also removed the @option{--with-mailutils}
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index b168effb3a0..8c08f51825c 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -1002,6 +1002,20 @@ when the entire buffer is visible.
1002 The visual appearance of the scroll bars is controlled by the 1002 The visual appearance of the scroll bars is controlled by the
1003@code{scroll-bar} face. 1003@code{scroll-bar} face.
1004 1004
1005@cindex vertical border
1006 On graphical frames, vertical scroll bars implicitly serve to separate
1007side-by-side windows visually. When vertical scroll bars are disabled,
1008Emacs by default separates such windows with the help of a one-pixel
1009wide @dfn{vertical border}. That border occupies the first pixel column
1010of the window on the right and may thus overdraw the leftmost pixels of
1011any glyph displayed there. If these pixels convey important
1012information, you can make them visible by enabling window dividers, see
1013@ref{Window Dividers}. To replicate the look of vertical borders, set
1014the @code{right-divider-width} parameter of frames to one and have the
1015@code{window-divider} face inherit from that of @code{vertical-border},
1016@ref{Window Dividers,, Window Dividers, elisp, The Emacs Lisp Reference
1017Manual}.
1018
1005@cindex Horizontal Scroll Bar 1019@cindex Horizontal Scroll Bar
1006@cindex Horizontal Scroll Bar mode 1020@cindex Horizontal Scroll Bar mode
1007 On graphical displays with toolkit support, Emacs may also supply a 1021 On graphical displays with toolkit support, Emacs may also supply a
@@ -1060,7 +1074,12 @@ window-divider-mode}.
1060customize the options @code{window-divider-default-bottom-width} and 1074customize the options @code{window-divider-default-bottom-width} and
1061@code{window-divider-default-right-width}. 1075@code{window-divider-default-right-width}.
1062 1076
1063 For more details about window dividers see @ref{Window Dividers,, 1077 When vertical scroll bars are disabled, dividers can be also useful to
1078make the first pixel column of a window visible which would be otherwise
1079covered by the vertical border used to separate side-by-side windows
1080(@pxref{Scroll Bars}).
1081
1082For more details about window dividers see @ref{Window Dividers,,
1064Window Dividers, elisp, The Emacs Lisp Reference Manual}. 1083Window Dividers, elisp, The Emacs Lisp Reference Manual}.
1065 1084
1066@node Drag and Drop 1085@node Drag and Drop
diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi
index f2416a07776..b073687da9c 100644
--- a/doc/emacs/rmail.texi
+++ b/doc/emacs/rmail.texi
@@ -1363,7 +1363,7 @@ message itself is flagged as deleted.
1363 Mailing list messages that might offend or annoy some readers are sometimes 1363 Mailing list messages that might offend or annoy some readers are sometimes
1364encoded in a simple code called @dfn{rot13}---so named because it 1364encoded in a simple code called @dfn{rot13}---so named because it
1365rotates the alphabet by 13 letters. This code is not for secrecy, as it 1365rotates the alphabet by 13 letters. This code is not for secrecy, as it
1366provides none; rather, it enables those who wish to to avoid 1366provides none; rather, it enables those who wish to avoid
1367seeing the real text of the message. For example, a review of a film 1367seeing the real text of the message. For example, a review of a film
1368might use rot13 to hide important plot points. 1368might use rot13 to hide important plot points.
1369 1369
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index 5aa0c77d34c..c5967f8cf65 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -1732,7 +1732,7 @@ C-p} (@code{tex-print}) to print a hardcopy of the output file.
1732@vindex tex-directory 1732@vindex tex-directory
1733 By default, @kbd{C-c C-b} runs @TeX{} in the current directory. The 1733 By default, @kbd{C-c C-b} runs @TeX{} in the current directory. The
1734output of @TeX{} also goes in this directory. To run @TeX{} in a 1734output of @TeX{} also goes in this directory. To run @TeX{} in a
1735different directory, change the variable @code{tex-directory} to the 1735different directory, change the variable @code{tex-directory} to
1736the desired directory. If your environment variable @env{TEXINPUTS} 1736the desired directory. If your environment variable @env{TEXINPUTS}
1737contains relative names, or if your files contains 1737contains relative names, or if your files contains
1738@samp{\input} commands with relative file names, then 1738@samp{\input} commands with relative file names, then
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index d9493879b1d..65ded50c396 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -831,7 +831,7 @@ An expert programmer who reviewed this text said to me:
831@i{I prefer to learn from reference manuals. I ``dive into'' each 831@i{I prefer to learn from reference manuals. I ``dive into'' each
832paragraph, and ``come up for air'' between paragraphs.} 832paragraph, and ``come up for air'' between paragraphs.}
833 833
834@i{When I get to the end of a paragraph, I assume that that subject is 834@i{When I get to the end of a paragraph, I assume that subject is
835done, finished, that I know everything I need (with the 835done, finished, that I know everything I need (with the
836possible exception of the case when the next paragraph starts talking 836possible exception of the case when the next paragraph starts talking
837about it in more detail). I expect that a well written reference manual 837about it in more detail). I expect that a well written reference manual
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 2ca4a0a849e..fe3446ada2d 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -135,7 +135,7 @@ set @code{debug-ignored-errors} to @code{nil}.
135@defopt eval-expression-debug-on-error 135@defopt eval-expression-debug-on-error
136If this variable has a non-@code{nil} value (the default), running the 136If this variable has a non-@code{nil} value (the default), running the
137command @code{eval-expression} causes @code{debug-on-error} to be 137command @code{eval-expression} causes @code{debug-on-error} to be
138temporarily bound to to @code{t}. @xref{Lisp Eval,, Evaluating 138temporarily bound to @code{t}. @xref{Lisp Eval,, Evaluating
139Emacs-Lisp Expressions, emacs, The GNU Emacs Manual}. 139Emacs-Lisp Expressions, emacs, The GNU Emacs Manual}.
140 140
141If @code{eval-expression-debug-on-error} is @code{nil}, then the value 141If @code{eval-expression-debug-on-error} is @code{nil}, then the value
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index af646ce40f4..59c269a3084 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -222,7 +222,7 @@ If it is @code{t}, it selects the @file{*scratch*} buffer.
222@c called from two places. If displaying a startup screen, they are 222@c called from two places. If displaying a startup screen, they are
223@c called in command-line-1 before the startup screen is shown. 223@c called in command-line-1 before the startup screen is shown.
224@c inhibit-startup-hooks is then set and window-setup-hook set to nil. 224@c inhibit-startup-hooks is then set and window-setup-hook set to nil.
225@c If not displaying a startup screen, they are are called in 225@c If not displaying a startup screen, they are called in
226@c normal-top-level. 226@c normal-top-level.
227@c FIXME? So it seems they can be called before or after the 227@c FIXME? So it seems they can be called before or after the
228@c daemon/session restore step? 228@c daemon/session restore step?
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index 23879aad0a3..755fa554bb6 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -327,7 +327,7 @@ expression. Thus, @samp{fo*} has a repeating @samp{o}, not a repeating
327The matcher processes a @samp{*} construct by matching, immediately, as 327The matcher processes a @samp{*} construct by matching, immediately, as
328many repetitions as can be found. Then it continues with the rest of 328many repetitions as can be found. Then it continues with the rest of
329the pattern. If that fails, backtracking occurs, discarding some of the 329the pattern. If that fails, backtracking occurs, discarding some of the
330matches of the @samp{*}-modified construct in the hope that that will 330matches of the @samp{*}-modified construct in the hope that this will
331make it possible to match the rest of the pattern. For example, in 331make it possible to match the rest of the pattern. For example, in
332matching @samp{ca*ar} against the string @samp{caaar}, the @samp{a*} 332matching @samp{ca*ar} against the string @samp{caaar}, the @samp{a*}
333first tries to match all three @samp{a}s; but the rest of the pattern is 333first tries to match all three @samp{a}s; but the rest of the pattern is
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index a85fe4a30e1..d89a555ff73 100644
--- a/doc/misc/flymake.texi
+++ b/doc/misc/flymake.texi
@@ -1,4 +1,4 @@
1\input texinfo @c -*-texinfo-*- 1\input texinfo @c -*-texinfo; coding: utf-8 -*-
2@comment %**start of header 2@comment %**start of header
3@setfilename ../../info/flymake.info 3@setfilename ../../info/flymake.info
4@set VERSION 0.3 4@set VERSION 0.3
@@ -6,6 +6,8 @@
6@settitle GNU Flymake @value{VERSION} 6@settitle GNU Flymake @value{VERSION}
7@include docstyle.texi 7@include docstyle.texi
8@syncodeindex pg cp 8@syncodeindex pg cp
9@syncodeindex vr cp
10@syncodeindex fn cp
9@comment %**end of header 11@comment %**end of header
10 12
11@copying 13@copying
@@ -61,32 +63,20 @@ modify this GNU manual.''
61 63
62@node Overview of Flymake 64@node Overview of Flymake
63@chapter Overview 65@chapter Overview
64@cindex Overview of Flymake 66@cindex overview of flymake
65 67
66Flymake is a universal on-the-fly buffer checker implemented as an 68Flymake is a universal on-the-fly buffer checker implemented as an
67Emacs minor mode. When enabled, Flymake visually annotates the buffer 69Emacs minor mode. When enabled, Flymake visually annotates the buffer
68with diagnostic information coming from one or more different sources, 70with diagnostic information coming from one or more different sources,
69or @emph{backends}. 71or @dfn{backends}.
70
71Historically, Flymake used to accept diagnostics from a single, albeit
72reasonably flexible, backend.
73
74This backend isn't (yet) obsolete and so is still available as a
75fallback and active by default(@pxref{The legacy Proc backend}). It works by
76selecting a syntax check tool from a preconfigured list (compiler for
77C++ files, @code{perl} for perl files, etc.), and executing it in the
78background, passing it a temporary file which is a copy of the current
79buffer, and parsing the output for known error/warning message
80patterns.
81 72
82Flymake annotates the buffer by highlighting problematic buffer 73Flymake annotates the buffer by highlighting problematic buffer
83regions with a special space. It also displays an overall buffer 74regions with a special space. It displays an overall buffer status in
84status in the mode line. Status information displayed by Flymake 75the mode line containing totals for different types of diagnostics.
85contains totals for different types of diagnostics.
86 76
87@code{flymake-goto-next-error} and @code{flymake-goto-prev-error} are 77@code{flymake-goto-next-error} and @code{flymake-goto-prev-error} are
88commands that allow easy navigation to the next/previous erroneous 78commands that allow easy navigation to the next/previous erroneous
89line, respectively. If might be a good idea to map them to @kbd{M-n} 79line, respectively. If might be a good idea to map them to @kbd{M-n}
90and @kbd{M-p} in @code{flymake-mode}, by adding to your init file: 80and @kbd{M-p} in @code{flymake-mode}, by adding to your init file:
91 81
92@lisp 82@lisp
@@ -97,48 +87,67 @@ and @kbd{M-p} in @code{flymake-mode}, by adding to your init file:
97Syntax check is done ``on-the-fly''. It is started whenever 87Syntax check is done ``on-the-fly''. It is started whenever
98 88
99@itemize @bullet 89@itemize @bullet
100@item @code{flymake-mode} is started; 90@item
101@item a newline character is added to the buffer; 91@code{flymake-mode} is started, unless
102@item some changes were made to the buffer more than @code{0.5} seconds ago (the 92@code{flymake-start-on-flymake-mode} is nil.
103delay is configurable). 93
94@item
95a newline character is added to the buffer, unless
96@code{flymake-start-syntax-check-on-newline} is nil.
97
98@item
99some changes were made to the buffer more than @code{0.5} seconds ago
100(the delay is configurable in @code{flymake-no-changes-timeout}).
104@end itemize 101@end itemize
105 102
106Flymake is a universal syntax checker in the sense that it's easily 103Flymake is a universal syntax checker in the sense that it's easily
107extended to support new backends. @xref{Customizable variables}. 104extended to support new backends (@pxref{Extending Flymake}).
105
106Historically, Flymake used to accept diagnostics from a single, albeit
107reasonably flexible, backend.
108
109This backend isn't (yet) obsolete, and so is still available as a
110fallback and active by default (@pxref{The legacy Proc backend}). It works by
111selecting a syntax check tool from a preconfigured list (compiler for
112C@t{++} files, @command{perl} for Perl files, etc.), and executing it in the
113background, passing it a temporary file which is a copy of the current
114buffer, and parsing the output for known error/warning message
115patterns.
108 116
109@node Installing Flymake 117@node Installing Flymake
110@chapter Installing 118@chapter Installing
111@cindex Installing Flymake 119@cindex installing flymake
112 120
113Flymake is included with Emacs and its main commands, like 121Flymake is included with Emacs and its main commands, like
114@code{flymake-mode}, are autoloaded. This means there is usually 122@code{flymake-mode}, are autoloaded. This means there is usually
115nothing to do by way of installation. 123nothing to do by way of installation.
116 124
117@node Using Flymake 125@node Using Flymake
118@chapter Using Flymake 126@chapter Using Flymake
119@cindex Using Flymake 127@cindex using flymake
120 128
121@menu 129@menu
122* Flymake mode:: 130* Flymake mode::
123* Running the syntax check:: 131* Running the syntax check::
124* Navigating to error lines:: @c * Viewing error messages:: 132* Navigating to error lines:: @c * Viewing error messages::
125* Syntax check statuses:: 133* Syntax check statuses::
126* Troubleshooting:: 134* Backend exceptions::
127* Customizable variables:: 135* Customizable variables::
128@end menu 136@end menu
129 137
130@node Flymake mode 138@node Flymake mode
131@section Flymake mode 139@section Flymake mode
132@cindex flymake-mode 140@cindex flymake-mode
141@cindex activating flymake-mode
133 142
134Flymake is an Emacs minor mode. To use Flymake, you 143Flymake is an Emacs minor mode. To use Flymake, you
135must first activate @code{flymake-mode} by using the 144must first activate @code{flymake-mode} by using the command
136@code{flymake-mode} function. 145@kbd{flymake-mode}.
137 146
138Instead of manually activating @code{flymake-mode}, you can configure 147Instead of manually activating @code{flymake-mode}, you can configure
139Flymake to automatically enable @code{flymake-mode} upon opening any 148Emacs to automatically enable @code{flymake-mode} upon opening any
140file for which syntax check is possible. To do so, place the following 149file for which syntax check is possible. To do so, place the following
141line in @code{.emacs}: 150line in your @file{~/.emacs}:
142 151
143@lisp 152@lisp
144(add-hook 'find-file-hook 'flymake-find-file-hook) 153(add-hook 'find-file-hook 'flymake-find-file-hook)
@@ -146,31 +155,33 @@ line in @code{.emacs}:
146 155
147@node Running the syntax check 156@node Running the syntax check
148@section Running the syntax check 157@section Running the syntax check
149@cindex Manually starting the syntax check 158@cindex manually starting syntax check
159@cindex syntax check, start manually
150 160
161@findex flymake-start
151When @code{flymake-mode} is active, syntax check is started 162When @code{flymake-mode} is active, syntax check is started
152automatically on any of the three conditions mentioned above. Syntax 163automatically on any of the three conditions mentioned in
153check can also be started manually by using the @code{flymake-start} 164@ref{Overview of Flymake}. Syntax check can also be started manually
154function. 165by typing the @kbd{M-x flymake-start @key{RET}} command.
155 166
156@node Navigating to error lines 167@node Navigating to error lines
157@section Navigating to error lines 168@section Navigating to error lines
158@cindex Navigating to error lines 169@cindex navigating to error lines
159 170
160After syntax check is completed, lines for which at least one error or 171After syntax check is completed, lines for which at least one error or
161warning has been reported are highlighted, and total number of errors 172warning has been reported are highlighted, and the total number of errors
162and warning is shown in the mode line. Use the following functions to 173and warning is shown in the mode line. Use the following functions to
163navigate the highlighted lines. 174navigate the highlighted lines:
164
165@multitable @columnfractions 0.25 0.75
166 175
167@item @code{flymake-goto-next-error} 176@table @code
168@tab Moves point to the next erroneous line, if any. 177@findex flymake-goto-next-error
169 178@item flymake-goto-next-error
170@item @code{flymake-goto-prev-error} 179Moves point to the next erroneous line, if any.
171@tab Moves point to the previous erroneous line.
172 180
173@end multitable 181@findex flymake-goto-prev-error
182@item flymake-goto-prev-error
183Moves point to the previous erroneous line.
184@end table
174 185
175If the user option @code{flymake-wrap-around} is active 186If the user option @code{flymake-wrap-around} is active
176(@pxref{Customizable variables}), these functions treat diagnostics 187(@pxref{Customizable variables}), these functions treat diagnostics
@@ -181,7 +192,7 @@ to the first diagnostic when invoked in the end of the buffer.
181@section Syntax check statuses 192@section Syntax check statuses
182@cindex Syntax check statuses 193@cindex Syntax check statuses
183 194
184After syntax check is finished, its status is displayed in the mode line. 195While enabled, Flymake displays its status in the mode line.
185The following statuses are defined: 196The following statuses are defined:
186 197
187@multitable @columnfractions 0.25 0.75 198@multitable @columnfractions 0.25 0.75
@@ -191,8 +202,9 @@ where questioned.
191 202
192@item @code{!} 203@item @code{!}
193@tab All the configured Flymake backends have disabled themselves. 204@tab All the configured Flymake backends have disabled themselves.
194Left-clicking the ``Flymake'' mode line indicator beings the user 205Left-clicking Flymake's mode line indicator pops up a menu listing the
195@code{*Flymake log*} buffer where these situations may be investigated 206option to visit Flymake's log buffer. In this buffer these situations
207can be investigated.
196 208
197@item @code{?} 209@item @code{?}
198@tab There are no configured Flymake backends in 210@tab There are no configured Flymake backends in
@@ -203,34 +215,62 @@ Left-clicking the ``Flymake'' mode line indicator beings the user
203check process. 215check process.
204@end multitable 216@end multitable
205 217
206@node Troubleshooting 218@node Backend exceptions
207@section Troubleshooting 219@section Backend exceptions
208@cindex Logging 220@cindex backend exceptions
209@cindex Troubleshooting 221
210 222@cindex disabled backends
211Flymake uses a simple logging facility for indicating important points 223@cindex backends, disabled
224Some backends may take longer than others to respond or complete, and
225some may decide to @emph{disable} themselves if they are not suitable
226for the current buffer. A disabled backend is not tried again for
227future checks of the current buffer.
228
229@findex flymake-reporting-backends
230@findex flymake-running-backends
231@findex flymake-disabled-backends
232The commands @code{flymake-reporting-backends},
233@code{flymake-running-backends} and @code{flymake-disabled-backends}
234show the backends currently used and those which are disabled.
235
236@cindex reset disabled backends
237Toggling @code{flymake-mode} off and on again, or invoking
238@code{flymake-start} with a prefix argument is one way to reset the
239disabled backend list, so that they will be tried again in the next check.
240
241@cindex logging
242@cindex flymake logging
243Flymake also uses a simple logging facility for indicating important points
212in the control flow. The logging facility sends logging messages to 244in the control flow. The logging facility sends logging messages to
213the @file{*Flymake log*} buffer. The information logged can be used for 245the @file{*Flymake log*} buffer. The information logged can be used for
214resolving various problems related to Flymake. 246resolving various problems related to Flymake.
215 247
248@vindex warning-minimum-log-level
249@vindex warning-minimum-level
216Logging output is controlled by the Emacs @code{warning-minimum-log-level} 250Logging output is controlled by the Emacs @code{warning-minimum-log-level}
217and @code{warning-minimum-level} variables. 251and @code{warning-minimum-level} variables.
218 252
219@node Customizable variables 253@node Customizable variables
220@section Customizable variables 254@section Customizable variables
221@cindex Customizable variables 255@cindex customizable variables
256@cindex variables for customizing flymake
222 257
223This section summarizes variables used for the configuration of the 258This section summarizes customization variables used for the
224Flymake user interface. 259configuration of the Flymake user interface.
225 260
226@table @code 261@vtable @code
227@item flymake-no-changes-timeout 262@item flymake-no-changes-timeout
228If any changes are made to the buffer, syntax check is automatically 263If any changes are made to the buffer, syntax check is automatically
229started after @code{flymake-no-changes-timeout} seconds. 264started after this many seconds, unless the user makes another change,
265which resets the timer.
230 266
231@item flymake-start-syntax-check-on-newline 267@item flymake-start-syntax-check-on-newline
232A boolean flag indicating whether to start syntax check after a 268A boolean flag indicating whether to start syntax check immediately
233newline character is added to the buffer. 269after a newline character is inserted into the buffer.
270
271@item flymake-start-on-flymake-mode
272A boolean flag indicating whether to start syntax check immediately
273after enabling @code{flymake-mode}.
234 274
235@item flymake-error 275@item flymake-error
236A custom face for highlighting regions for which an error has been 276A custom face for highlighting regions for which an error has been
@@ -258,16 +298,406 @@ Which fringe (if any) should show the warning/error bitmaps.
258@item flymake-wrap-around 298@item flymake-wrap-around
259If non-nil, moving to errors with @code{flymake-goto-next-error} and 299If non-nil, moving to errors with @code{flymake-goto-next-error} and
260@code{flymake-goto-prev-error} wraps around buffer boundaries. 300@code{flymake-goto-prev-error} wraps around buffer boundaries.
261 301@end vtable
262@end table
263 302
264@node Extending Flymake 303@node Extending Flymake
265@chapter Extending Flymake 304@chapter Extending Flymake
266@cindex Extending Flymake 305@cindex extending flymake
306
307Flymake can primarily be extended in one of two ways:
308
309@enumerate
310@item
311By changing the look and feel of the annotations produced by the
312different backends.
313
314@item
315By adding a new buffer-checking backend.
316@end enumerate
317
318The following sections discuss each approach in detail.
319
320@menu
321* Flymake error types::
322* Backend functions::
323@end menu
324
325@node Flymake error types
326@section Customizing Flymake error types
327@cindex customizing error types
328@cindex error types, customization
329
330@vindex flymake-diagnostic-types-alist
331The variable @code{flymake-diagnostic-types-alist} is looked up by
332Flymake every time an annotation for a diagnostic is created in the
333buffer. Specifically, this variable holds a table of correspondence
334between symbols designating diagnostic types and an additional
335sub-table of properties pertaining to each diagnostic type.
336
337Both tables are laid out in association list (@pxref{Association
338Lists,,, elisp, The Emacs Lisp Reference Manual}) format, and thus can
339be conveniently accessed with the functions of the @code{assoc}
340family.
341
342You can use any symbol-value association in the properties sub-table,
343but some symbols have special meaning as to where and how Flymake
344presents the diagnostic:
345
346@itemize
347
348@item
349@cindex bitmap of diagnostic
350@code{bitmap}, an image displayed in the fringe according to
351@code{flymake-fringe-indicator-position}. The value actually follows
352the syntax of @code{flymake-error-bitmap} (@pxref{Customizable
353variables}). It is overridden by any @code{before-string} overlay
354property.
355
356@item
357@cindex severity of diagnostic
358@code{severity} is a non-negative integer specifying the diagnostic's
359severity. The higher the value, the more serious is the error. If
360the overlay property @code{priority} is not specified, @code{severity}
361is used to set it and help sort overlapping overlays.
362
363@item
364Every property pertaining to overlays (@pxref{Overlay Properties,,,
365elisp, The Emacs Lisp Reference Manual}), except @code{category} and
366@code{evaporate}. These properties are used to affect the appearance
367of Flymake annotations.
368
369As an example, here's how to make errors (diagnostics of the type
370@code{:error}) stand out even more prominently in the buffer, by
371raising the characters using a @code{display} overlay property.
372
373@example
374(push '(display . (raise 1.2))
375 (cdr (assoc :error flymake-diagnostic-types-alist)))
376@end example
377
378@item
379@vindex flymake-category
380@code{flymake-category} is a symbol whose property list is considered
381the default for missing values of any other properties.
382@end itemize
383
384@cindex predefined diagnostic types
385@vindex flymake-error
386@vindex flymake-warning
387@vindex flymake-note
388Three default diagnostic types, @code{:error}, @code{:warning} and
389@code{:note} are predefined in
390@code{flymake-diagnostic-types-alist}. By default each lists a single
391@code{flymake-category} property whose value is, respectively, the
392symbols @code{flymake-error}, @code{flymake-warning} and
393@code{flymake-note}.
394
395These category symbols' plists is where the values of customizable
396variables and faces such as @code{flymake-error-bitmap} are found.
397Thus, if you change their plists, Flymake may stop honoring these
398user customizations.
399
400The @code{flymake-category} special property is also especially useful
401for backends which create diagnostics objects with non-default
402types that differ from an existing type by only a few properties
403(@pxref{Flymake utility functions}).
404
405As an example, consider configuring a new diagnostic type
406@code{:low-priority-note} that behaves much like the @code{:note}
407priority but without an overlay face.
408
409@example
410(add-to-list
411 'flymake-diagnostic-types-alist
412 `(:low-priority-note . ((face . nil)
413 (flymake-category . flymake-note))))
414@end example
415
416@vindex flymake-text
417As you might have guessed, Flymake's annotations are implemented as
418overlays (@pxref{Overlays,,, elisp, The Emacs Lisp Reference Manual}).
419Along with the properties that you specify for the specific type of
420diagnostic, Flymake adds the property @code{flymake-text} to these
421overlays, and sets it to the message string that the backend used to
422describe the diagnostic.
423
424Since overlays also support arbitrary keymaps, you can use this
425property @code{flymake-text} to create interactive annotations, such
426as in the following example of binding a @kbd{mouse-3} event (middle
427mouse button click) to an Internet search for the text of a
428@code{:warning} or @code{:error}.
429
430@example
431(defun my-search-for-message (event)
432 (interactive "e")
433 (let ((ovs (overlays-at (posn-point (event-start event))))
434 ov)
435 ;; loop until flymake overlay we clicked on is recovered
436 (while (not (overlay-get (setq ov (pop ovs)) 'flymake-text)))
437 (when ov
438 (eww-browse-url
439 (concat "https://duckduckgo.com/?q="
440 (replace-regexp-in-string " "
441 "+"
442 (overlay-get ov 'flymake-text)))
443 t))))
444
445(dolist (type '(:warning :error))
446 (let ((a (assoc type flymake-diagnostic-types-alist)))
447 (setf (cdr a)
448 (append `((mouse-face . highlight)
449 (keymap . ,(let ((map (make-sparse-keymap)))
450 (define-key map [mouse-2]
451 'my-search-for-message)
452 map)))
453 (cdr a)))))
454@end example
455
456@node Backend functions
457@section Backend functions
458@cindex backend functions
459
460@vindex flymake-diagnostic-functions
461Flymake backends are Lisp functions placed in the special hook
462@code{flymake-diagnostic-functions}.
463
464A backend's responsibility is to diagnose the contents of a buffer for
465problems, registering the problem's positions, type, and summary
466description. This information is collected in the form of diagnostic
467objects created by the function @code{flymake-make-diagnostic}
468(@pxref{Flymake utility functions}), and
469then handed over to Flymake, which proceeds to annotate the
470buffer.
471
472A request for a buffer check, and the subsequent delivery of
473diagnostics, are two key events of the interaction between Flymake
474and backend. Each such event corresponds to a well-defined function
475calling convention: one for calls made by Flymake into the backend via
476the backend function, the other in the reverse direction via a
477callback. To be usable, backends must adhere to both.
478
479Backend functions must accept an arbitrary number of arguments:
480
481@itemize
482@item
483the first argument is always @var{report-fn}, a callback function
484detailed below;
485
486@item
487the remaining arguments are keyword-value pairs of the
488form @w{@code{(@var{:key} @var{value} @var{:key2} @var{value2}...)}}. Currently,
489Flymake provides no such arguments, but backend functions must be
490prepared to accept (and possibly ignore) any number of them.
491@end itemize
492
493Whenever Flymake or the user decide to re-check the buffer, backend
494functions are called as detailed above, and are expected to initiate
495this check, but aren't in any way required to complete it before
496exiting: if the computation involved is expensive, as
497is often the case with large buffers, that slower task should be
498scheduled for the future using asynchronous sub-processes
499(@pxref{Asynchronous Processes,,, elisp, The Emacs Lisp reference
500manual}) or other asynchronous mechanisms.
501
502In any case, backend functions are expected to return quickly or
503signal an error, in which case the backend is disabled
504(@pxref{Backend exceptions}).
505
506If the function returns, Flymake considers the backend to be
507@dfn{running}. If it has not done so already, the backend is expected
508to call the function @var{report-fn} passed to it, at which point
509Flymake considers the backend to be @dfn{reporting}. Backends call
510@var{report-fn} by passing it a single argument @var{report-action}
511followed by an optional list of keyword-value pairs of the form
512@w{@code{(@var{:report-key} @var{value} @var{:report-key2} @var{value2}...)}}.
513
514Currently accepted values for @var{report-action} are:
515
516@itemize
517@item
518A (possibly empty) list of diagnostic objects created by
519@code{flymake-make-diagnostic}, causing Flymake to annotate the
520buffer with this information.
521
522A backend may call @var{report-fn} repeatedly in this manner, but only
523until Flymake considers that the most recently requested buffer check
524is now obsolete, because, say, buffer contents have changed in the
525meantime. The backend is only given notice of this via a renewed call
526to the backend function. Thus, to prevent making obsolete reports and
527wasting resources, backend functions should first cancel any ongoing
528processing from previous calls.
529
530@item
531The symbol @code{:panic}, signaling that the backend has encountered
532an exceptional situation and should be disabled.
533@end itemize
534
535Currently accepted @var{report-key} arguments are:
536
537@itemize
538@item
539@code{:explanation}, whose value should give user-readable
540details of the situation encountered, if any.
541
542@item
543@code{:force}, whose value should be a boolean suggesting
544that Flymake consider the report even if it was somehow
545unexpected.
546@end itemize
547
548@menu
549* Flymake utility functions::
550* An annotated example backend::
551@end menu
552
553@node Flymake utility functions
554@subsection Flymake utility functions
555@cindex utility functions
556
557@cindex create diagnostic object
558Before delivering them to Flymake, backends create diagnostic objects
559by calling the function @code{flymake-make-diagnostic}.
560
561@deffn Function flymake-make-diagnostic buffer beg end type text
562Make a Flymake diagnostic for @var{buffer}'s region from @var{beg} to
563@var{end}. @var{type} is a key to
564@code{flymake-diagnostic-types-alist} and @var{text} is a description
565of the problem detected in this region.
566@end deffn
567
568@cindex buffer position from line and column number
569It is often the case with external syntax tools that a diagnostic's
570position is reported in terms of a line number, and sometimes a column
571number. To convert this information into a buffer position, backends
572can use the following function:
573
574@deffn Function flymake-diag-region buffer line &optional col
575Compute @var{buffer}'s region (@var{beg} . @var{end}) corresponding to
576@var{line} and @var{col}. If @var{col} is nil, return a region just
577for @var{line}. Return nil if the region is invalid.
578@end deffn
579
580@cindex add a log message
581For troubleshooting purposes, backends may record arbitrary
582exceptional or erroneous situations into the Flymake log
583buffer (@pxref{Backend exceptions}):
584
585@deffn Macro flymake-log level msg &optional args
586Log, at level @var{level}, the message @var{msg} formatted with
587@var{args}. @var{level} is passed to @code{display-warning}
588(@pxref{Warning Basics,,, elisp, The Emacs Lisp reference Manual}), which is
589used to display the warning in Flymake's log buffer.
590@end deffn
591
592@node An annotated example backend
593@subsection An annotated example backend
594@cindex example of backend
595@cindex backend, annotated example
596
597This section presents an annotated example of a complete working
598Flymake backend. The example illustrates the process of writing a
599backend as outlined above.
600
601The backend in question is used for checking Ruby source files. It
602uses asynchronous sub-processes (@pxref{Asynchronous Processes,,, elisp,
603The Emacs Lisp Reference Manual}), a common technique for performing
604parallel processing in Emacs.
605
606The following code needs lexical binding (@pxref{Using Lexical
607Binding,,, elisp, The Emacs Lisp Reference Manual}) to be active.
608
609@example
610;;; ruby-flymake.el --- A ruby Flymake backend -*- lexical-binding: t; -*-
611(defvar-local ruby--flymake-proc nil)
612
613(defun ruby-flymake (report-fn &rest _args)
614 ;; Not having a ruby interpreter is a serious problem which should cause
615 ;; the backend to disable itself, so an @code{error} is signalled.
616 ;;
617 (unless (executable-find
618 "ruby") (error "Cannot find a suitable ruby"))
619 ;; If a live process launched in an earlier check was found, that
620 ;; process is killed. When that process's sentinel eventually runs,
621 ;; it will notice its obsoletion, since it have since reset
622 ;; `ruby-flymake-proc' to a different value
623 ;;
624 (when (process-live-p ruby--flymake-proc)
625 (kill-process ruby--flymake-proc))
626
627 ;; Save the current buffer, the narrowing restriction, remove any
628 ;; narrowing restriction.
629 ;;
630 (let ((source (current-buffer)))
631 (save-restriction
632 (widen)
633 ;; Reset the `ruby--flymake-proc' process to a new process
634 ;; calling the ruby tool.
635 ;;
636 (setq
637 ruby--flymake-proc
638 (make-process
639 :name "ruby-flymake" :noquery t :connection-type 'pipe
640 ;; Make output go to a temporary buffer.
641 ;;
642 :buffer (generate-new-buffer " *ruby-flymake*")
643 :command '("ruby" "-w" "-c")
644 :sentinel
645 (lambda (proc _event)
646 ;; Check that the process has indeed exited, as it might
647 ;; be simply suspended.
648 ;;
649 (when (eq 'exit (process-status proc))
650 (unwind-protect
651 ;; Only proceed if `proc' is the same as
652 ;; `ruby--flymake-proc', which indicates that
653 ;; `proc' is not an obsolete process.
654 ;;
655 (if (eq proc ruby--flymake-proc)
656 (with-current-buffer (process-buffer proc)
657 (goto-char (point-min))
658 ;; Parse the output buffer for diagnostic's
659 ;; messages and locations, collect them in a list
660 ;; of objects, and call `report-fn'.
661 ;;
662 (cl-loop
663 while (search-forward-regexp
664 "^\\(?:.*.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$"
665 nil t)
666 for msg = (match-string 2)
667 for (beg . end) = (flymake-diag-region
668 source
669 (string-to-number (match-string 1)))
670 for type = (if (string-match "^warning" msg)
671 :warning
672 :error)
673 collect (flymake-make-diagnostic source
674 beg
675 end
676 type
677 msg)
678 into diags
679 finally (funcall report-fn diags)))
680 (flymake-log :warning "Cancelling obsolete check %s"
681 proc))
682 ;; Cleanup the temporary buffer used to hold the
683 ;; check's output.
684 ;;
685 (kill-buffer (process-buffer proc)))))))
686 ;; Send the buffer contents to the process's stdin, followed by
687 ;; an EOF.
688 ;;
689 (process-send-region ruby--flymake-proc (point-min) (point-max))
690 (process-send-eof ruby--flymake-proc))))
691
692(defun ruby-setup-flymake-backend ()
693 (add-hook 'flymake-diagnostic-functions 'ruby-flymake nil t))
694
695(add-hook 'ruby-mode-hook 'ruby-setup-flymake-backend)
696@end example
267 697
268@node The legacy Proc backend 698@node The legacy Proc backend
269@chapter The legacy ``Proc'' backend 699@chapter The legacy ``Proc'' backend
270@cindex The legacy Proc backend 700@cindex legacy proc backend
271 701
272@menu 702@menu
273* Proc customization variables:: 703* Proc customization variables::
@@ -282,15 +712,16 @@ If non-nil, moving to errors with @code{flymake-goto-next-error} and
282* Interaction with other modes:: 712* Interaction with other modes::
283@end menu 713@end menu
284 714
715@findex flymake-proc-legacy-backend
285The backend @code{flymake-proc-legacy-backend} was originally designed 716The backend @code{flymake-proc-legacy-backend} was originally designed
286to be extended for supporting new syntax check tools and error message 717to be extended for supporting new syntax check tools and error message
287patterns. It is also controlled by its own set of customization variables 718patterns. It is also controlled by its own set of customization variables
288 719
289@node Proc customization variables 720@node Proc customization variables
290@section Customization variables for the Proc backend 721@section Customization variables for the Proc backend
291@cindex Proc customization variables 722@cindex proc backend customization variables
292 723
293@table @code 724@vtable @code
294@item flymake-proc-allowed-file-name-masks 725@item flymake-proc-allowed-file-name-masks
295A list of @code{(filename-regexp, init-function, cleanup-function 726A list of @code{(filename-regexp, init-function, cleanup-function
296getfname-function)} for configuring syntax check tools. @xref{Adding 727getfname-function)} for configuring syntax check tools. @xref{Adding
@@ -314,22 +745,22 @@ line-idx col-idx err-text-idx)}. @xref{Parsing the output}.
314 745
315@item flymake-proc-diagnostic-type-pred 746@item flymake-proc-diagnostic-type-pred
316A function to classify a diagnostic text as particular type of 747A function to classify a diagnostic text as particular type of
317error. Should be a function taking an error text and returning one of 748error. Should be a function taking an error text and returning one of
318the symbols indexing @code{flymake-diagnostic-types-alist}. If non-nil 749the symbols indexing @code{flymake-diagnostic-types-alist}. If non-nil
319is returned but there is no such symbol in that table, a warning is 750is returned but there is no such symbol in that table, a warning is
320assumed. If nil is returned, an error is assumed. Can also be a 751assumed. If nil is returned, an error is assumed. Can also be a
321regular expression that should match only warnings. This variable 752regular expression that should match only warnings. This variable
322replaces the old @code{flymake-warning-re} and 753replaces the old @code{flymake-warning-re} and
323@code{flymake-warning-predicate}. 754@code{flymake-warning-predicate}.
324 755
325@item flymake-proc-compilation-prevents-syntax-check 756@item flymake-proc-compilation-prevents-syntax-check
326A flag indicating whether compilation and syntax check of the same 757A flag indicating whether compilation and syntax check of the same
327file cannot be run simultaneously. 758file cannot be run simultaneously. @xref{Interaction with other modes}.
328@end table 759@end vtable
329 760
330@node Adding support for a new syntax check tool 761@node Adding support for a new syntax check tool
331@section Adding support for a new syntax check tool 762@section Adding support for a new syntax check tool
332@cindex Adding support for a new syntax check tool 763@cindex adding support for a new syntax check tool
333 764
334@menu 765@menu
335* Example---Configuring a tool called directly:: 766* Example---Configuring a tool called directly::
@@ -371,10 +802,9 @@ will be different from the real ones, as actually the tool works with
371the temporary copy. In most cases, the default implementation 802the temporary copy. In most cases, the default implementation
372provided by Flymake, @code{flymake-proc-get-real-file-name}, can be 803provided by Flymake, @code{flymake-proc-get-real-file-name}, can be
373used as @code{getfname-function}. 804used as @code{getfname-function}.
374
375@end table 805@end table
376 806
377To add support for a new syntax check tool, write corresponding 807To add support for a new syntax check tool, write the corresponding
378@code{init-function} and, optionally, @code{cleanup-function} and 808@code{init-function} and, optionally, @code{cleanup-function} and
379@code{getfname-function}. If the format of error messages reported by 809@code{getfname-function}. If the format of error messages reported by
380the new tool is not yet supported by Flymake, add a new entry to 810the new tool is not yet supported by Flymake, add a new entry to
@@ -385,10 +815,10 @@ support for various syntax check tools.
385 815
386@node Example---Configuring a tool called directly 816@node Example---Configuring a tool called directly
387@subsection Example---Configuring a tool called directly 817@subsection Example---Configuring a tool called directly
388@cindex Adding support for perl 818@cindex adding support for perl
389 819
390In this example, we will add support for @code{perl} as a syntax check 820In this example, we will add support for @command{perl} as a syntax check
391tool. @code{perl} supports the @code{-c} option which does syntax 821tool. @command{perl} supports the @option{-c} option which does syntax
392checking. 822checking.
393 823
394First, we write the @code{init-function}: 824First, we write the @code{init-function}:
@@ -434,7 +864,7 @@ Finally, we add an entry to @code{flymake-proc-err-line-patterns}:
434 864
435@node Example---Configuring a tool called via make 865@node Example---Configuring a tool called via make
436@subsection Example---Configuring a tool called via make 866@subsection Example---Configuring a tool called via make
437@cindex Adding support for C (gcc+make) 867@cindex adding support for C (gcc+make)
438 868
439In this example we will add support for C files syntax checked by 869In this example we will add support for C files syntax checked by
440@command{gcc} called via @command{make}. 870@command{gcc} called via @command{make}.
@@ -464,9 +894,10 @@ command line:
464 "check-syntax")) 894 "check-syntax"))
465@end lisp 895@end lisp
466 896
467@code{base-dir} is a directory containing @code{Makefile}, see @ref{Locating the buildfile}. 897@code{base-dir} is a directory containing the @file{Makefile}, see
898@ref{Locating the buildfile}.
468 899
469Thus, @code{Makefile} must contain the @code{check-syntax} target. In 900Thus, @file{Makefile} must contain the @code{check-syntax} target. In
470our case this target might look like this: 901our case this target might look like this:
471 902
472@verbatim 903@verbatim
@@ -488,11 +919,11 @@ check-syntax:
488 919
489@node Implementation overview 920@node Implementation overview
490@section Implementation overview 921@section Implementation overview
491@cindex Syntax check models 922@cindex syntax check models
492@cindex Master file 923@cindex master file
493 924
494@code{flymake-proc-legacy-backend} saves a copy of the buffer in a 925@code{flymake-proc-legacy-backend} saves a copy of the buffer in a
495temporary file in the buffer's directory (or in the system temp 926temporary file in the buffer's directory (or in the system temporary
496directory, for Java files), creates a syntax check command and 927directory, for Java files), creates a syntax check command and
497launches a process with this command. The output is parsed using a 928launches a process with this command. The output is parsed using a
498list of error message patterns, and error information (file name, line 929list of error message patterns, and error information (file name, line
@@ -511,15 +942,15 @@ Two syntax check modes are distinguished:
511@item 942@item
512Buffer can be syntax checked in a standalone fashion, that is, the 943Buffer can be syntax checked in a standalone fashion, that is, the
513file (its temporary copy, in fact) can be passed over to the compiler to 944file (its temporary copy, in fact) can be passed over to the compiler to
514do the syntax check. Examples are C/C++ (.c, .cpp) and Java (.java) 945do the syntax check. Examples are C/C@t{++} sources (@file{.c},
515sources. 946@file{.cpp}) and Java (@file{.java}).
516 947
517@item 948@item
518Buffer can be syntax checked, but additional file, called master file, 949Buffer can be syntax checked, but additional file, called master file,
519is required to perform this operation. A master file is a file that 950is required to perform this operation. A master file is a file that
520includes the current file, so that running a syntax check tool on it 951includes the current file, so that running a syntax check tool on it
521will also check syntax in the current file. Examples are C/C++ (.h, 952will also check syntax in the current file. Examples are C/C@t{++}
522.hpp) headers. 953headers (@file{.h}, @file{.hpp}).
523 954
524@end enumerate 955@end enumerate
525 956
@@ -534,8 +965,7 @@ tool-specific (routines for Make, Ant, etc.)@: code.
534 965
535@node Making a temporary copy 966@node Making a temporary copy
536@section Making a temporary copy 967@section Making a temporary copy
537@cindex Temporary copy of the buffer 968@cindex temporary copy of the buffer
538@cindex Master file
539 969
540After the possibility of the syntax check has been determined, a 970After the possibility of the syntax check has been determined, a
541temporary copy of the current buffer is made so that the most recent 971temporary copy of the current buffer is made so that the most recent
@@ -547,9 +977,10 @@ Things get trickier, however, when master file is involved, as it
547requires to 977requires to
548 978
549@itemize @bullet 979@itemize @bullet
550@item locate a master file 980@item
551@item patch it to include the current file using its new (temporary) 981locate a master file
552name. 982@item
983patch it to include the current file using its new (temporary) name.
553@end itemize 984@end itemize
554 985
555Locating a master file is discussed in the following section. 986Locating a master file is discussed in the following section.
@@ -565,37 +996,39 @@ the syntax check tool.
565 996
566@node Locating a master file 997@node Locating a master file
567@section Locating a master file 998@section Locating a master file
568@cindex Master file 999@cindex locating a master file
1000@cindex master file, locating
569 1001
570Master file is located in two steps. 1002Master file is located in two steps.
571 1003
572First, a list of possible master files is built. A simple name 1004First, a list of possible master files is built. A simple name
573matching is used to find the files. For a C++ header @code{file.h}, 1005matching is used to find the files. For a C++ header @file{file.h},
574the Proc backend searches for all @code{.cpp} files in the directories 1006the Proc backend searches for all @file{.cpp} files in the directories
575whose relative paths are stored in a customizable variable 1007whose relative paths are stored in a customizable variable
576@code{flymake-proc-master-file-dirs}, which usually contains something 1008@code{flymake-proc-master-file-dirs}, which usually contains something
577like @code{("." "./src")}. No more than 1009like @code{("." "./src")}. No more than
578@code{flymake-proc-master-file-count-limit} entries is added to the 1010@code{flymake-proc-master-file-count-limit} entries is added to the
579master file list. The list is then sorted to move files with names 1011master file list. The list is then sorted to move files with names
580@code{file.cpp} to the top. 1012@file{file.cpp} to the top.
581 1013
582Next, each master file in a list is checked to contain the appropriate 1014Next, each master file in a list is checked to contain the appropriate
583include directives. No more than @code{flymake-proc-check-file-limit} of each 1015include directives. No more than @code{flymake-proc-check-file-limit} of each
584file are parsed. 1016file are parsed.
585 1017
586For @code{file.h}, the include directives to look for are 1018For @file{file.h}, the include directives to look for are
587@code{#include "file.h"}, @code{#include "../file.h"}, etc. Each 1019@code{#include "file.h"}, @code{#include "../file.h"}, etc. Each
588include is checked against a list of include directories 1020include is checked against a list of include directories
589(see @ref{Getting the include directories}) to be sure it points to the 1021(see @ref{Getting the include directories}) to be sure it points to the
590correct @code{file.h}. 1022correct @file{file.h}.
591 1023
592First matching master file found stops the search. The master file is then 1024First matching master file found stops the search. The master file is then
593patched and saved to disk. In case no master file is found, syntax check is 1025patched and saved to disk. In case no master file is found, syntax check is
594aborted, and corresponding status (!) is reported in the mode line. 1026aborted, and corresponding status (@samp{!}) is reported in the mode line.
1027@xref{Syntax check statuses}.
595 1028
596@node Getting the include directories 1029@node Getting the include directories
597@section Getting the include directories 1030@section Getting the include directories
598@cindex Include directories (C/C++ specific) 1031@cindex include directories (C/C++ specific)
599 1032
600Two sets of include directories are distinguished: system include directories 1033Two sets of include directories are distinguished: system include directories
601and project include directories. The former is just the contents of the 1034and project include directories. The former is just the contents of the
@@ -615,25 +1048,26 @@ of every syntax check attempt.
615 1048
616@node Locating the buildfile 1049@node Locating the buildfile
617@section Locating the buildfile 1050@section Locating the buildfile
618@cindex Locating the buildfile 1051@cindex locating the buildfile
619@cindex buildfile, locating 1052@cindex buildfile, locating
620@cindex Makefile, locating 1053@cindex Makefile, locating
621 1054
622The Proc backend can be configured to use different tools for 1055The Proc backend can be configured to use different tools for
623performing syntax checks. For example, it can use direct compiler 1056performing syntax checks. For example, it can use direct compiler
624call to syntax check a perl script or a call to @command{make} for a 1057call to syntax check a perl script or a call to @command{make} for a
625more complicated case of a @code{C/C++} source. The general idea is 1058more complicated case of a C/C@t{++} source. The general idea is
626that simple files, like perl scripts and html pages, can be checked by 1059that simple files, like Perl scripts and @acronym{HTML} pages, can be checked by
627directly invoking a corresponding tool. Files that are usually more 1060directly invoking a corresponding tool. Files that are usually more
628complex and generally used as part of larger projects, might require 1061complex and generally used as part of larger projects, might require
629non-trivial options to be passed to the syntax check tool, like 1062non-trivial options to be passed to the syntax check tool, like
630include directories for C++. The latter files are syntax checked 1063include directories for C@t{++}. The latter files are syntax checked
631using some build tool, like Make or Ant. 1064using some build tool, like Make or Ant.
632 1065
633All Make configuration data is usually stored in a file called 1066All Make configuration data is usually stored in a file called
634@code{Makefile}. To allow for future extensions, Flymake uses a notion of 1067@file{Makefile}. To allow for future extensions, Flymake uses a notion of
635buildfile to reference the 'project configuration' file. 1068buildfile to reference the @dfn{project configuration} file.
636 1069
1070@findex flymake-proc-find-buildfile
637Special function, @code{flymake-proc-find-buildfile} is provided for locating buildfiles. 1071Special function, @code{flymake-proc-find-buildfile} is provided for locating buildfiles.
638Searching for a buildfile is done in a manner similar to that of searching 1072Searching for a buildfile is done in a manner similar to that of searching
639for possible master files. 1073for possible master files.
@@ -642,13 +1076,13 @@ A customizable variable
642@code{flymake-proc-buildfile-dirs} holds a list of relative paths to the 1076@code{flymake-proc-buildfile-dirs} holds a list of relative paths to the
643buildfile. They are checked sequentially until a buildfile is found. 1077buildfile. They are checked sequentially until a buildfile is found.
644@end ignore 1078@end ignore
645In case there's no build file, syntax check is aborted. 1079In case there's no build file, the syntax check is aborted.
646 1080
647Buildfile values are also cached. 1081Buildfile values are also cached.
648 1082
649@node Starting the syntax check process 1083@node Starting the syntax check process
650@section Starting the syntax check process 1084@section Starting the syntax check process
651@cindex Syntax check process 1085@cindex syntax check process, legacy proc backend
652 1086
653The command line (command name and the list of arguments) for 1087The command line (command name and the list of arguments) for
654launching a process is returned by the initialization function. The 1088launching a process is returned by the initialization function. The
@@ -659,16 +1093,16 @@ be killed without prompting the user.
659 1093
660@node Parsing the output 1094@node Parsing the output
661@section Parsing the output 1095@section Parsing the output
662@cindex Parsing the output 1096@cindex parsing the output, legacy proc backend
663 1097
664The output generated by the syntax check tool is parsed in the process 1098The output generated by the syntax check tool is parsed in the process
665filter/sentinel using the error message patterns stored in the 1099filter/sentinel using the error message patterns stored in the
666@code{flymake-proc-err-line-patterns} variable. This variable contains a 1100@code{flymake-proc-err-line-patterns} variable. This variable contains a
667list of items of the form @code{(regexp file-idx line-idx 1101list of items of the form @w{@code{(regexp file-idx line-idx
668err-text-idx)}, used to determine whether a particular line is an 1102err-text-idx)}}, used to determine whether a particular line is an
669error message and extract file name, line number and error text, 1103error message and extract file name, line number and error text,
670respectively. Error type (error/warning) is also guessed by matching 1104respectively. Error type (error/warning) is also guessed by matching
671error text with the '@code{^[wW]arning}' pattern. Anything that was not 1105error text with the @samp{^[wW]arning} pattern. Anything that was not
672classified as a warning is considered an error. Type is then used to 1106classified as a warning is considered an error. Type is then used to
673sort error menu items, which shows error messages first. 1107sort error menu items, which shows error messages first.
674 1108
@@ -676,7 +1110,7 @@ The Proc backend is also able to interpret error message patterns
676missing err-text-idx information. This is done by merely taking the 1110missing err-text-idx information. This is done by merely taking the
677rest of the matched line (@code{(substring line (match-end 0))}) as 1111rest of the matched line (@code{(substring line (match-end 0))}) as
678error text. This trick allows making use of a huge collection of 1112error text. This trick allows making use of a huge collection of
679error message line patterns from @code{compile.el}. All these error 1113error message line patterns from @file{compile.el}. All these error
680patterns are appended to the end of 1114patterns are appended to the end of
681@code{flymake-proc-err-line-patterns}. 1115@code{flymake-proc-err-line-patterns}.
682 1116
@@ -687,8 +1121,8 @@ after every process launch/exit.
687 1121
688@node Interaction with other modes 1122@node Interaction with other modes
689@section Interaction with other modes 1123@section Interaction with other modes
690@cindex Interaction with other modes 1124@cindex interaction with other modes, legacy proc backend
691@cindex Interaction with compile mode 1125@cindex interaction with compile mode, legacy proc backend
692 1126
693The only mode the Proc backend currently knows about is 1127The only mode the Proc backend currently knows about is
694@code{compile}. 1128@code{compile}.
@@ -702,8 +1136,9 @@ though, was working around a locking problem with MS Visual C++
702compiler. The variable in question is 1136compiler. The variable in question is
703@code{flymake-proc-compilation-prevents-syntax-check}. 1137@code{flymake-proc-compilation-prevents-syntax-check}.
704 1138
1139@findex flymake-proc-compile
705The Proc backend also provides an alternative command for starting 1140The Proc backend also provides an alternative command for starting
706compilation, @code{flymake-proc-compile}. It just kills all the active 1141compilation, @code{flymake-proc-compile}. It just kills all the active
707syntax check processes before calling @code{compile}. 1142syntax check processes before calling @code{compile}.
708 1143
709@node GNU Free Documentation License 1144@node GNU Free Documentation License
diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi
index a04fa43a776..f7fe5392ce5 100644
--- a/doc/misc/htmlfontify.texi
+++ b/doc/misc/htmlfontify.texi
@@ -825,7 +825,7 @@ with a class of @code{t} is considered to match any class you specify.
825This matches Emacs's behavior when deciding on which face attributes to 825This matches Emacs's behavior when deciding on which face attributes to
826use, to the best of my understanding ). 826use, to the best of my understanding ).
827 827
828If @var{class} is @code{nil}, then you just get get whatever 828If @var{class} is @code{nil}, then you just get whatever
829@code{face-attr-construct} returns; i.e., the current specification in 829@code{face-attr-construct} returns; i.e., the current specification in
830effect for @var{face}. 830effect for @var{face}.
831 831
diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi
index fc79b027a1d..5f9a0f59721 100644
--- a/doc/misc/ses.texi
+++ b/doc/misc/ses.texi
@@ -584,7 +584,7 @@ This example will:
584When the cell is empty (ie.@: when @code{val} is @code{nil}), print an 584When the cell is empty (ie.@: when @code{val} is @code{nil}), print an
585empty string @code{""} 585empty string @code{""}
586@item 586@item
587When the cell value is a non negative number, format the the value in 587When the cell value is a non negative number, format the value in
588fixed-point notation with one decimal after point 588fixed-point notation with one decimal after point
589@item 589@item
590Otherwise, handle the value as erroneous by printing it as an 590Otherwise, handle the value as erroneous by printing it as an
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 6478479c38d..47055793b73 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -186,7 +186,7 @@ transparency extends to editing, version control, and @code{dired}.
186@value{tramp} can access remote hosts using any number of access 186@value{tramp} can access remote hosts using any number of access
187methods, such as @command{rsh}, @command{rlogin}, @command{telnet}, 187methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
188and related programs. If these programs can successfully pass 188and related programs. If these programs can successfully pass
189@acronym{ASCII]} characters, @value{tramp} can use them. 189@acronym{ASCII} characters, @value{tramp} can use them.
190@value{tramp} does not require or mandate 8-bit clean connections. 190@value{tramp} does not require or mandate 8-bit clean connections.
191 191
192@value{tramp}'s most common access method is through @command{ssh}, a 192@value{tramp}'s most common access method is through @command{ssh}, a
@@ -339,8 +339,8 @@ Another way is to follow the terminal session below:
339 339
340@example 340@example
341@group 341@group
342] @strong{cd ~/emacs} 342$ cd ~/emacs
343] @strong{git clone git://git.savannah.gnu.org/tramp.git} 343$ git clone git://git.savannah.gnu.org/tramp.git
344@end group 344@end group
345@end example 345@end example
346 346
@@ -349,8 +349,8 @@ From behind a firewall:
349 349
350@example 350@example
351@group 351@group
352] @strong{git config --global http.proxy http://user:pwd@@proxy.server.com:8080} 352$ git config --global http.proxy http://user:pwd@@proxy.server.com:8080
353] @strong{git clone https://git.savannah.gnu.org/r/tramp.git} 353$ git clone https://git.savannah.gnu.org/r/tramp.git
354@end group 354@end group
355@end example 355@end example
356 356
@@ -358,7 +358,7 @@ From behind a firewall:
358@value{tramp} developers: 358@value{tramp} developers:
359 359
360@example 360@example
361] @strong{git clone login@@git.sv.gnu.org:/srv/git/tramp.git} 361$ git clone login@@git.sv.gnu.org:/srv/git/tramp.git
362@end example 362@end example
363 363
364@noindent 364@noindent
@@ -370,8 +370,8 @@ To fetch updates from the repository, use git pull:
370 370
371@example 371@example
372@group 372@group
373] @strong{cd ~/emacs/tramp} 373$ cd ~/emacs/tramp
374] @strong{git pull} 374$ git pull
375@end group 375@end group
376@end example 376@end example
377 377
@@ -381,8 +381,8 @@ Run @command{autoconf} as follows to generate an up-to-date
381 381
382@example 382@example
383@group 383@group
384] @strong{cd ~/emacs/tramp} 384$ cd ~/emacs/tramp
385] @strong{autoconf} 385$ autoconf
386@end group 386@end group
387@end example 387@end example
388 388
@@ -2000,7 +2000,7 @@ fi
2000install and execute a listener as follows (see @code{tramp-methods}): 2000install and execute a listener as follows (see @code{tramp-methods}):
2001 2001
2002@example 2002@example
2003# nc -l -p 42 2003$ nc -l -p 42
2004@end example 2004@end example
2005 2005
2006The above command-line syntax has changed with @command{busybox} 2006The above command-line syntax has changed with @command{busybox}
diff --git a/lib/getopt-cdefs.in.h b/lib/getopt-cdefs.in.h
index 21d847b8c3d..83a18f9a75e 100644
--- a/lib/getopt-cdefs.in.h
+++ b/lib/getopt-cdefs.in.h
@@ -4,12 +4,12 @@
4 Unlike most of the getopt implementation, it is NOT shared 4 Unlike most of the getopt implementation, it is NOT shared
5 with the GNU C Library. 5 with the GNU C Library.
6 6
7 gnulib is free software; you can redistribute it and/or modify it 7 This file is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as 8 under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 3 of 9 published by the Free Software Foundation; either version 3 of
10 the License, or (at your option) any later version. 10 the License, or (at your option) any later version.
11 11
12 gnulib is distributed in the hope that it will be useful, but 12 This file is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of 13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details. 15 General Public License for more details.
diff --git a/lib/getopt-pfx-core.h b/lib/getopt-pfx-core.h
index 2ede4bbffef..02b2b5064d3 100644
--- a/lib/getopt-pfx-core.h
+++ b/lib/getopt-pfx-core.h
@@ -4,12 +4,12 @@
4 Unlike most of the getopt implementation, it is NOT shared 4 Unlike most of the getopt implementation, it is NOT shared
5 with the GNU C Library. 5 with the GNU C Library.
6 6
7 gnulib is free software; you can redistribute it and/or modify it 7 This file is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as 8 under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 3 of 9 published by the Free Software Foundation; either version 3 of
10 the License, or (at your option) any later version. 10 the License, or (at your option) any later version.
11 11
12 gnulib is distributed in the hope that it will be useful, but 12 This file is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of 13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details. 15 General Public License for more details.
diff --git a/lib/getopt-pfx-ext.h b/lib/getopt-pfx-ext.h
index 16d9634e8c9..75e6fd32fe0 100644
--- a/lib/getopt-pfx-ext.h
+++ b/lib/getopt-pfx-ext.h
@@ -4,12 +4,12 @@
4 Unlike most of the getopt implementation, it is NOT shared 4 Unlike most of the getopt implementation, it is NOT shared
5 with the GNU C Library. 5 with the GNU C Library.
6 6
7 gnulib is free software; you can redistribute it and/or modify it 7 This file is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as 8 under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 3 of 9 published by the Free Software Foundation; either version 3 of
10 the License, or (at your option) any later version. 10 the License, or (at your option) any later version.
11 11
12 gnulib is distributed in the hope that it will be useful, but 12 This file is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of 13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details. 15 General Public License for more details.
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
index 908f84166af..594ed8092a1 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -5,12 +5,12 @@
5 with the GNU C Library, which supplies a different version of 5 with the GNU C Library, which supplies a different version of
6 this file. 6 this file.
7 7
8 gnulib is free software; you can redistribute it and/or modify it 8 This file is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as 9 under the terms of the GNU General Public License as
10 published by the Free Software Foundation; either version 3 of 10 published by the Free Software Foundation; either version 3 of
11 the License, or (at your option) any later version. 11 the License, or (at your option) any later version.
12 12
13 gnulib is distributed in the hope that it will be useful, but 13 This file is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of 14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details. 16 General Public License for more details.
diff --git a/lisp/ChangeLog.16 b/lisp/ChangeLog.16
index f3d4874a1ce..33bd9a03323 100644
--- a/lisp/ChangeLog.16
+++ b/lisp/ChangeLog.16
@@ -2728,7 +2728,7 @@
2728 2728
2729 * vc/ediff-util.el (ediff-buffer-type): New function. 2729 * vc/ediff-util.el (ediff-buffer-type): New function.
2730 (ediff-clone-buffer-for-current-diff-comparison): Compute the buf-type 2730 (ediff-clone-buffer-for-current-diff-comparison): Compute the buf-type
2731 rather than taking it as as argument. 2731 rather than taking it as an argument.
2732 (ediff-inferior-compare-regions): Adjust calls accordingly (bug#11319). 2732 (ediff-inferior-compare-regions): Adjust calls accordingly (bug#11319).
2733 2733
27342012-12-14 Ryan Crum <ryan.crum@eleostech.com> 27342012-12-14 Ryan Crum <ryan.crum@eleostech.com>
diff --git a/lisp/ChangeLog.6 b/lisp/ChangeLog.6
index 8c985fbfb7d..64a9d4df8ed 100644
--- a/lisp/ChangeLog.6
+++ b/lisp/ChangeLog.6
@@ -1473,7 +1473,7 @@
14731996-04-18 Richard Stallman <rms@mole.gnu.ai.mit.edu> 14731996-04-18 Richard Stallman <rms@mole.gnu.ai.mit.edu>
1474 1474
1475 * term/win32-win.el (x-select-text): Remember selected text. 1475 * term/win32-win.el (x-select-text): Remember selected text.
1476 (x-get-selection-value): Return nil if the clipboard data is 1476 (x-get-selection-value): Return nil if the clipboard data
1477 is the same as the remembered selected text. 1477 is the same as the remembered selected text.
1478 1478
14791996-04-18 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> 14791996-04-18 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
diff --git a/lisp/allout.el b/lisp/allout.el
index d0be847aa79..15b7b3a8ac5 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -357,7 +357,7 @@ Examples:
357 grandchildren, but completely collapse the final top-level topic. 357 grandchildren, but completely collapse the final top-level topic.
358 (-1 () : 1 0) 358 (-1 () : 1 0)
359 Close the first topic so only the immediate subtopics are shown, 359 Close the first topic so only the immediate subtopics are shown,
360 leave the subsequent topics exposed as they are until the second 360 leave the subsequent topics exposed as they are until the
361 second to last topic, which is exposed at least one level, and 361 second to last topic, which is exposed at least one level, and
362 completely close the last topic. 362 completely close the last topic.
363 (-2 : -1 *) 363 (-2 : -1 *)
diff --git a/lisp/button.el b/lisp/button.el
index 7e9a712dca7..a6090477c55 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -36,7 +36,7 @@
36;; represented by the overlay itself, or text-properties, in which case 36;; represented by the overlay itself, or text-properties, in which case
37;; the button is represented by a marker or buffer-position pointing 37;; the button is represented by a marker or buffer-position pointing
38;; somewhere in the button. In the latter case, no markers into the 38;; somewhere in the button. In the latter case, no markers into the
39;; buffer are retained, which is important for speed if there are are 39;; buffer are retained, which is important for speed if there are
40;; extremely large numbers of buttons. Note however that if there is 40;; extremely large numbers of buttons. Note however that if there is
41;; an existing face text-property at the site of the button, the 41;; an existing face text-property at the site of the button, the
42;; button face may not be visible. Using overlays avoids this. 42;; button face may not be visible. Using overlays avoids this.
diff --git a/lisp/cedet/ChangeLog.1 b/lisp/cedet/ChangeLog.1
index a17e53a1c5a..35cdf80e4b3 100644
--- a/lisp/cedet/ChangeLog.1
+++ b/lisp/cedet/ChangeLog.1
@@ -457,7 +457,7 @@
457 complete local variables. 457 complete local variables.
458 458
459 * semantic/scope.el (semantic-analyze-scoped-types-default): If we 459 * semantic/scope.el (semantic-analyze-scoped-types-default): If we
460 cannot find a type in the typecache, also look into the the types 460 cannot find a type in the typecache, also look into the types
461 we already found. This is necessary since in C++, a 'using 461 we already found. This is necessary since in C++, a 'using
462 namespace' can be dependend on a previous one. 462 namespace' can be dependend on a previous one.
463 (semantic-completable-tags-from-type): When creating the list of 463 (semantic-completable-tags-from-type): When creating the list of
diff --git a/lisp/cedet/cedet-idutils.el b/lisp/cedet/cedet-idutils.el
index 4b6c6b01aa2..48e1b2d09b1 100644
--- a/lisp/cedet/cedet-idutils.el
+++ b/lisp/cedet/cedet-idutils.el
@@ -98,7 +98,7 @@ Return the created buffer with program output."
98 98
99(defun cedet-idutils-lid-call (flags) 99(defun cedet-idutils-lid-call (flags)
100 "Call ID Utils lid with the list of FLAGS. 100 "Call ID Utils lid with the list of FLAGS.
101Return the created buffer with with program output." 101Return the created buffer with program output."
102 (let ((b (get-buffer-create "*CEDET lid*")) 102 (let ((b (get-buffer-create "*CEDET lid*"))
103 (cd default-directory) 103 (cd default-directory)
104 ) 104 )
diff --git a/lisp/cedet/ede/pmake.el b/lisp/cedet/ede/pmake.el
index c199cae82ba..b836eafa8ce 100644
--- a/lisp/cedet/ede/pmake.el
+++ b/lisp/cedet/ede/pmake.el
@@ -277,7 +277,7 @@ Execute BODY in a location where a value can be placed."
277;;; SOURCE VARIABLE NAME CONSTRUCTION 277;;; SOURCE VARIABLE NAME CONSTRUCTION
278 278
279(defsubst ede-pmake-varname (obj) 279(defsubst ede-pmake-varname (obj)
280 "Convert OBJ into a variable name name. 280 "Convert OBJ into a variable name.
281Change . to _ in the variable name." 281Change . to _ in the variable name."
282 (let ((name (oref obj name))) 282 (let ((name (oref obj name)))
283 (while (string-match "\\." name) 283 (while (string-match "\\." name)
diff --git a/lisp/cedet/semantic/db-find.el b/lisp/cedet/semantic/db-find.el
index c678739671c..1f5de71c53d 100644
--- a/lisp/cedet/semantic/db-find.el
+++ b/lisp/cedet/semantic/db-find.el
@@ -930,7 +930,7 @@ but should be good enough for debugging assertions."
930 (length result)))) 930 (length result))))
931 931
932(defun semanticdb-find-result-with-nil-p (resultp) 932(defun semanticdb-find-result-with-nil-p (resultp)
933 "Non-nil of RESULTP is in the form of a semanticdb search result. 933 "Non-nil if RESULTP is in the form of a semanticdb search result.
934The value nil is valid where a TABLE usually is, but only if the TAG 934The value nil is valid where a TABLE usually is, but only if the TAG
935results include overlays. 935results include overlays.
936This query only really tests the first entry in the list that is RESULTP, 936This query only really tests the first entry in the list that is RESULTP,
diff --git a/lisp/cedet/semantic/db.el b/lisp/cedet/semantic/db.el
index e7ee879bf39..4d9daaf54ef 100644
--- a/lisp/cedet/semantic/db.el
+++ b/lisp/cedet/semantic/db.el
@@ -595,7 +595,7 @@ This will call `semantic-fetch-tags' if that file is in memory."
595 (kill-buffer buff)))))) 595 (kill-buffer buff))))))
596 596
597(cl-defmethod semanticdb-needs-refresh-p ((obj semanticdb-table)) 597(cl-defmethod semanticdb-needs-refresh-p ((obj semanticdb-table))
598 "Return non-nil of OBJ's tag list is out of date. 598 "Return non-nil if OBJ's tag list is out of date.
599The file associated with OBJ does not need to be in a buffer." 599The file associated with OBJ does not need to be in a buffer."
600 (let* ((ff (semanticdb-full-filename obj)) 600 (let* ((ff (semanticdb-full-filename obj))
601 (buff (semanticdb-in-buffer-p obj)) 601 (buff (semanticdb-in-buffer-p obj))
diff --git a/lisp/cedet/semantic/edit.el b/lisp/cedet/semantic/edit.el
index 78822c487ae..fc0a05a6a6e 100644
--- a/lisp/cedet/semantic/edit.el
+++ b/lisp/cedet/semantic/edit.el
@@ -221,7 +221,7 @@ Argument START, END, and LENGTH specify the bounds of the change."
221 ) 221 )
222 222
223(defun semantic-edits-change-in-one-tag-p (change hits) 223(defun semantic-edits-change-in-one-tag-p (change hits)
224 "Return non-nil of the overlay CHANGE exists solely in one leaf tag. 224 "Return non-nil if the overlay CHANGE exists solely in one leaf tag.
225HITS is the list of tags that CHANGE is in. It can have more than 225HITS is the list of tags that CHANGE is in. It can have more than
226one tag in it if the leaf tag is within a parent tag." 226one tag in it if the leaf tag is within a parent tag."
227 (and (< (semantic-tag-start (car hits)) 227 (and (< (semantic-tag-start (car hits))
diff --git a/lisp/composite.el b/lisp/composite.el
index ab39e087e1f..72b0ffc8f48 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -442,8 +442,10 @@ after a sequence of character events."
442(defsubst lglyph-set-adjustment (glyph &optional xoff yoff wadjust) 442(defsubst lglyph-set-adjustment (glyph &optional xoff yoff wadjust)
443 (aset glyph 9 (vector (or xoff 0) (or yoff 0) (or wadjust 0)))) 443 (aset glyph 9 (vector (or xoff 0) (or yoff 0) (or wadjust 0))))
444 444
445;; Return the shallow Copy of GLYPH.
445(defsubst lglyph-copy (glyph) (copy-sequence glyph)) 446(defsubst lglyph-copy (glyph) (copy-sequence glyph))
446 447
448;; Insert GLYPH at the index IDX of GSTRING.
447(defun lgstring-insert-glyph (gstring idx glyph) 449(defun lgstring-insert-glyph (gstring idx glyph)
448 (let ((nglyphs (lgstring-glyph-len gstring)) 450 (let ((nglyphs (lgstring-glyph-len gstring))
449 (i idx)) 451 (i idx))
@@ -459,6 +461,18 @@ after a sequence of character events."
459 (lgstring-set-glyph gstring i glyph) 461 (lgstring-set-glyph gstring i glyph)
460 gstring)) 462 gstring))
461 463
464;; Remove glyph at IDX from GSTRING.
465(defun lgstring-remove-glyph (gstring idx)
466 (setq gstring (copy-sequence gstring))
467 (lgstring-set-id gstring nil)
468 (let ((len (length gstring)))
469 (setq idx (+ idx 3))
470 (while (< idx len)
471 (aset gstring (1- idx) (aref gstring idx))
472 (setq idx (1+ idx)))
473 (aset gstring (1- len) nil))
474 gstring)
475
462(defun compose-glyph-string (gstring from to) 476(defun compose-glyph-string (gstring from to)
463 (let ((glyph (lgstring-glyph gstring from)) 477 (let ((glyph (lgstring-glyph gstring from))
464 from-pos to-pos) 478 from-pos to-pos)
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 78fa5ed7788..5fa28d3e3e8 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -57,7 +57,7 @@
57 57
58(defcustom dired-bind-vm nil 58(defcustom dired-bind-vm nil
59 "Non-nil means \"V\" runs `dired-vm', otherwise \"V\" runs `dired-rmail'. 59 "Non-nil means \"V\" runs `dired-vm', otherwise \"V\" runs `dired-rmail'.
60RMAIL files in the old Babyl format (used before before Emacs 23.1) 60RMAIL files in the old Babyl format (used before Emacs 23.1)
61contain \"-*- rmail -*-\" at the top, so `dired-find-file' 61contain \"-*- rmail -*-\" at the top, so `dired-find-file'
62will run `rmail' on these files. New RMAIL files use the standard 62will run `rmail' on these files. New RMAIL files use the standard
63mbox format, and so cannot be distinguished in this way." 63mbox format, and so cannot be distinguished in this way."
diff --git a/lisp/display-line-numbers.el b/lisp/display-line-numbers.el
index 3b6b101de49..15e04279156 100644
--- a/lisp/display-line-numbers.el
+++ b/lisp/display-line-numbers.el
@@ -36,6 +36,7 @@
36 36
37(defgroup display-line-numbers nil 37(defgroup display-line-numbers nil
38 "Display line numbers in the buffer." 38 "Display line numbers in the buffer."
39 :group 'convenience
39 :group 'display) 40 :group 'display)
40 41
41(defcustom display-line-numbers-type t 42(defcustom display-line-numbers-type t
diff --git a/lisp/elide-head.el b/lisp/elide-head.el
index 5bede73eaa1..c6d8c9009b9 100644
--- a/lisp/elide-head.el
+++ b/lisp/elide-head.el
@@ -57,7 +57,7 @@ If not, see <http://www\\.gnu\\.org/licenses/>\\)\\.")
57 "SUCH DAMAGE\\.") ; BSD 57 "SUCH DAMAGE\\.") ; BSD
58 ("Permission is hereby granted, free of charge" . ; X11 58 ("Permission is hereby granted, free of charge" . ; X11
59 "authorization from the X Consortium\\.")) 59 "authorization from the X Consortium\\."))
60 "Alist of regexps defining start end end of text to elide. 60 "Alist of regexps defining start and end of text to elide.
61 61
62The cars of elements of the list are searched for in order. Text is 62The cars of elements of the list are searched for in order. Text is
63elided with an invisible overlay from the end of the line where the 63elided with an invisible overlay from the end of the line where the
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index 32b6a47b053..82867667756 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -502,7 +502,7 @@
502;; important advantage is that it allows the implementation of forward advice. 502;; important advantage is that it allows the implementation of forward advice.
503;; Advice information for a certain function accumulates as the value of the 503;; Advice information for a certain function accumulates as the value of the
504;; `advice-info' property of the function symbol. This accumulation is 504;; `advice-info' property of the function symbol. This accumulation is
505;; completely independent of the fact that that function might not yet be 505;; completely independent of the fact that the function might not yet be
506;; defined. The macros `defun' and `defmacro' check whether the 506;; defined. The macros `defun' and `defmacro' check whether the
507;; function/macro they defined had advice information 507;; function/macro they defined had advice information
508;; associated with it. If so and forward advice is enabled, the original 508;; associated with it. If so and forward advice is enabled, the original
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index b2f76abd88e..62befd4742a 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -204,7 +204,16 @@ OPTIONS-AND-METHODS currently understands:
204DEFAULT-BODY, if present, is used as the body of a default method. 204DEFAULT-BODY, if present, is used as the body of a default method.
205 205
206\(fn NAME ARGS [DOC-STRING] [OPTIONS-AND-METHODS...] &rest DEFAULT-BODY)" 206\(fn NAME ARGS [DOC-STRING] [OPTIONS-AND-METHODS...] &rest DEFAULT-BODY)"
207 (declare (indent 2) (doc-string 3)) 207 (declare (indent 2) (doc-string 3)
208 (debug
209 (&define name cl-lambda-list lambda-doc
210 [&rest [&or
211 ("declare" &rest sexp)
212 (":argument-precedence-order" &rest sexp)
213 (&define ":method" [&rest atom]
214 cl-generic-method-args lambda-doc
215 def-body)]]
216 def-body)))
208 (let* ((doc (if (stringp (car-safe options-and-methods)) 217 (let* ((doc (if (stringp (car-safe options-and-methods))
209 (pop options-and-methods))) 218 (pop options-and-methods)))
210 (declarations nil) 219 (declarations nil)
@@ -422,7 +431,7 @@ The set of acceptable TYPEs (also called \"specializers\") is defined
422 ; Like in CLOS spec, we support 431 ; Like in CLOS spec, we support
423 ; any non-list values. 432 ; any non-list values.
424 cl-generic-method-args ; arguments 433 cl-generic-method-args ; arguments
425 [ &optional stringp ] ; documentation string 434 lambda-doc ; documentation string
426 def-body))) ; part to be debugged 435 def-body))) ; part to be debugged
427 (let ((qualifiers nil)) 436 (let ((qualifiers nil))
428 (while (not (listp args)) 437 (while (not (listp args))
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 32ba0ac3091..40eda1e0d65 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -190,7 +190,7 @@ The name is made by appending a number to PREFIX, default \"T\"."
190 (&rest ("cl-declare" &rest sexp))) 190 (&rest ("cl-declare" &rest sexp)))
191 191
192(def-edebug-spec cl-declarations-or-string 192(def-edebug-spec cl-declarations-or-string
193 (&or stringp cl-declarations)) 193 (&or lambda-doc cl-declarations))
194 194
195(def-edebug-spec cl-lambda-list 195(def-edebug-spec cl-lambda-list
196 (([&rest arg] 196 (([&rest arg]
@@ -447,8 +447,8 @@ more details.
447 447
448(def-edebug-spec cl-lambda-expr 448(def-edebug-spec cl-lambda-expr
449 (&define ("lambda" cl-lambda-list 449 (&define ("lambda" cl-lambda-list
450 ;;cl-declarations-or-string 450 cl-declarations-or-string
451 ;;[&optional ("interactive" interactive)] 451 [&optional ("interactive" interactive)]
452 def-body))) 452 def-body)))
453 453
454;; Redefine function-form to also match cl-function 454;; Redefine function-form to also match cl-function
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index a070ff25d17..77523de32c5 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -2017,15 +2017,14 @@ expressions; a `progn' form will be returned enclosing these forms."
2017(def-edebug-spec defvar (symbolp &optional form stringp)) 2017(def-edebug-spec defvar (symbolp &optional form stringp))
2018 2018
2019(def-edebug-spec defun 2019(def-edebug-spec defun
2020 (&define name lambda-list 2020 (&define name lambda-list lambda-doc
2021 [&optional stringp]
2022 [&optional ("declare" &rest sexp)] 2021 [&optional ("declare" &rest sexp)]
2023 [&optional ("interactive" interactive)] 2022 [&optional ("interactive" interactive)]
2024 def-body)) 2023 def-body))
2025(def-edebug-spec defmacro 2024(def-edebug-spec defmacro
2026 ;; FIXME: Improve `declare' so we can Edebug gv-expander and 2025 ;; FIXME: Improve `declare' so we can Edebug gv-expander and
2027 ;; gv-setter declarations. 2026 ;; gv-setter declarations.
2028 (&define name lambda-list [&optional stringp] 2027 (&define name lambda-list lambda-doc
2029 [&optional ("declare" &rest sexp)] def-body)) 2028 [&optional ("declare" &rest sexp)] def-body))
2030 2029
2031(def-edebug-spec arglist lambda-list) ;; deprecated - use lambda-list. 2030(def-edebug-spec arglist lambda-list) ;; deprecated - use lambda-list.
@@ -2036,6 +2035,10 @@ expressions; a `progn' form will be returned enclosing these forms."
2036 &optional ["&rest" arg] 2035 &optional ["&rest" arg]
2037 ))) 2036 )))
2038 2037
2038(def-edebug-spec lambda-doc
2039 (&optional [&or stringp
2040 (&define ":documentation" def-form)]))
2041
2039(def-edebug-spec interactive 2042(def-edebug-spec interactive
2040 (&optional &or stringp def-form)) 2043 (&optional &or stringp def-form))
2041 2044
@@ -3254,15 +3257,6 @@ generated symbols for methods. If a function or method to
3254instrument cannot be found, signal an error." 3257instrument cannot be found, signal an error."
3255 (let ((func-marker (get func 'edebug))) 3258 (let ((func-marker (get func 'edebug)))
3256 (cond 3259 (cond
3257 ((and (markerp func-marker) (marker-buffer func-marker))
3258 ;; It is uninstrumented, so instrument it.
3259 (with-current-buffer (marker-buffer func-marker)
3260 (goto-char func-marker)
3261 (edebug-eval-top-level-form)
3262 (list func)))
3263 ((consp func-marker)
3264 (message "%s is already instrumented." func)
3265 (list func))
3266 ((cl-generic-p func) 3260 ((cl-generic-p func)
3267 (let ((method-defs (cl--generic-method-files func)) 3261 (let ((method-defs (cl--generic-method-files func))
3268 symbols) 3262 symbols)
@@ -3277,6 +3271,15 @@ instrument cannot be found, signal an error."
3277 (edebug-eval-top-level-form) 3271 (edebug-eval-top-level-form)
3278 (push (edebug-form-data-symbol) symbols)))) 3272 (push (edebug-form-data-symbol) symbols))))
3279 symbols)) 3273 symbols))
3274 ((and (markerp func-marker) (marker-buffer func-marker))
3275 ;; It is uninstrumented, so instrument it.
3276 (with-current-buffer (marker-buffer func-marker)
3277 (goto-char func-marker)
3278 (edebug-eval-top-level-form)
3279 (list func)))
3280 ((consp func-marker)
3281 (message "%s is already instrumented." func)
3282 (list func))
3280 (t 3283 (t
3281 (let ((loc (find-function-noselect func t))) 3284 (let ((loc (find-function-noselect func t)))
3282 (unless (cdr loc) 3285 (unless (cdr loc)
diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el
index 3e9885900cf..410e4edcc92 100644
--- a/lisp/emacs-lisp/generator.el
+++ b/lisp/emacs-lisp/generator.el
@@ -680,7 +680,8 @@ sub-iterator function returns via `iter-end-of-sequence'."
680When called as a function, NAME returns an iterator value that 680When called as a function, NAME returns an iterator value that
681encapsulates the state of a computation that produces a sequence 681encapsulates the state of a computation that produces a sequence
682of values. Callers can retrieve each value using `iter-next'." 682of values. Callers can retrieve each value using `iter-next'."
683 (declare (indent defun)) 683 (declare (indent defun)
684 (debug (&define name lambda-list lambda-doc def-body)))
684 (cl-assert lexical-binding) 685 (cl-assert lexical-binding)
685 (let* ((parsed-body (macroexp-parse-body body)) 686 (let* ((parsed-body (macroexp-parse-body body))
686 (declarations (car parsed-body)) 687 (declarations (car parsed-body))
@@ -692,7 +693,8 @@ of values. Callers can retrieve each value using `iter-next'."
692(defmacro iter-lambda (arglist &rest body) 693(defmacro iter-lambda (arglist &rest body)
693 "Return a lambda generator. 694 "Return a lambda generator.
694`iter-lambda' is to `iter-defun' as `lambda' is to `defun'." 695`iter-lambda' is to `iter-defun' as `lambda' is to `defun'."
695 (declare (indent defun)) 696 (declare (indent defun)
697 (debug (&define lambda-list lambda-doc def-body)))
696 (cl-assert lexical-binding) 698 (cl-assert lexical-binding)
697 `(lambda ,arglist 699 `(lambda ,arglist
698 ,(cps-generate-evaluator body))) 700 ,(cps-generate-evaluator body)))
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index c703cae4458..36af88423c8 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -226,7 +226,7 @@ I.e. accepts the usual &optional and &rest keywords, but every
226formal argument can be any pattern accepted by `pcase' (a mere 226formal argument can be any pattern accepted by `pcase' (a mere
227variable name being but a special case of it)." 227variable name being but a special case of it)."
228 (declare (doc-string 2) (indent defun) 228 (declare (doc-string 2) (indent defun)
229 (debug ((&rest pcase-PAT) body))) 229 (debug (&define (&rest pcase-PAT) lambda-doc def-body)))
230 (let* ((bindings ()) 230 (let* ((bindings ())
231 (parsed-body (macroexp-parse-body body)) 231 (parsed-body (macroexp-parse-body body))
232 (args (mapcar (lambda (pat) 232 (args (mapcar (lambda (pat)
diff --git a/lisp/emacs-lisp/rmc.el b/lisp/emacs-lisp/rmc.el
index 417301cde06..57bc6d9b591 100644
--- a/lisp/emacs-lisp/rmc.el
+++ b/lisp/emacs-lisp/rmc.el
@@ -1,6 +1,6 @@
1;;; rmc.el --- read from a multiple choice question -*- lexical-binding: t -*- 1;;; rmc.el --- read from a multiple choice question -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 2017 Free Software Foundation, Inc. 3;; Copyright (C) 2016-2017 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org 5;; Maintainer: emacs-devel@gnu.org
6 6
@@ -17,7 +17,7 @@
17;; GNU General Public License for more details. 17;; GNU General Public License for more details.
18 18
19;; You should have received a copy of the GNU General Public License 19;; You should have received a copy of the GNU General Public License
20;; along with this program. If not, see <http://www.gnu.org/licenses/>. 20;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21 21
22;;; Commentary: 22;;; Commentary:
23 23
diff --git a/lisp/faces.el b/lisp/faces.el
index 24ab1fa4f0c..a5f1d1dd328 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -2483,7 +2483,8 @@ monospaced font, otherwise line numbers will not line up,
2483and text lines might move horizontally as you move through 2483and text lines might move horizontally as you move through
2484the buffer." 2484the buffer."
2485 :version "26.1" 2485 :version "26.1"
2486 :group 'basic-faces) 2486 :group 'basic-faces
2487 :group 'display-line-numbers)
2487 2488
2488(defface line-number-current-line 2489(defface line-number-current-line
2489 '((t :inherit line-number)) 2490 '((t :inherit line-number))
@@ -2497,7 +2498,8 @@ the buffer. Similarly, making this face's font different
2497from that of the `line-number' face could produce such 2498from that of the `line-number' face could produce such
2498unwanted effects." 2499unwanted effects."
2499 :version "26.1" 2500 :version "26.1"
2500 :group 'basic-faces) 2501 :group 'basic-faces
2502 :group 'display-line-numbers)
2501 2503
2502(defface escape-glyph 2504(defface escape-glyph
2503 '((((background dark)) :foreground "cyan") 2505 '((((background dark)) :foreground "cyan")
diff --git a/lisp/frame.el b/lisp/frame.el
index e501daefb4c..f8aa5c6e523 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -2434,7 +2434,11 @@ See also `toggle-frame-maximized'."
2434 (set-frame-parameter nil 'fullscreen fullscreen-restore) 2434 (set-frame-parameter nil 'fullscreen fullscreen-restore)
2435 (set-frame-parameter nil 'fullscreen nil))) 2435 (set-frame-parameter nil 'fullscreen nil)))
2436 (modify-frame-parameters 2436 (modify-frame-parameters
2437 nil `((fullscreen . fullboth) (fullscreen-restore . ,fullscreen)))))) 2437 nil `((fullscreen . fullboth) (fullscreen-restore . ,fullscreen))))
2438 ;; Manipulating a frame without waiting for the fullscreen
2439 ;; animation to complete can cause a crash, or other unexpected
2440 ;; behaviour, on macOS (bug#28496).
2441 (when (featurep 'cocoa) (sleep-for 0.5))))
2438 2442
2439;;;; Key bindings 2443;;;; Key bindings
2440 2444
diff --git a/lisp/frameset.el b/lisp/frameset.el
index 593451a4d75..bda21a8b8d7 100644
--- a/lisp/frameset.el
+++ b/lisp/frameset.el
@@ -638,7 +638,7 @@ see `frameset-filter-alist'."
638When switching from a GUI frame to a tty frame, behave 638When switching from a GUI frame to a tty frame, behave
639as `frameset-filter-shelve-param' does." 639as `frameset-filter-shelve-param' does."
640 (or saving 640 (or saving
641 (if (frameset-switch-to-gui-p parameters) 641 (if (frameset-switch-to-tty-p parameters)
642 (frameset-filter-shelve-param current filtered parameters saving 642 (frameset-filter-shelve-param current filtered parameters saving
643 prefix)))) 643 prefix))))
644 644
diff --git a/lisp/gnus/ChangeLog.3 b/lisp/gnus/ChangeLog.3
index c2e4846442a..43681f6eb7d 100644
--- a/lisp/gnus/ChangeLog.3
+++ b/lisp/gnus/ChangeLog.3
@@ -955,7 +955,7 @@
955 * gnus-sum.el (gnus-summary-read-group-1): Initialize the spam code if 955 * gnus-sum.el (gnus-summary-read-group-1): Initialize the spam code if
956 that's needed. 956 that's needed.
957 957
958 * spam.el (spam-initialize): Allow calling repeatedly, but only run the 958 * spam.el (spam-initialize): Allow calling repeatedly, but only run
959 the code once (bug#9069). 959 the code once (bug#9069).
960 960
9612014-01-18 Steinar Bang <sb@dod.no> 9612014-01-18 Steinar Bang <sb@dod.no>
diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
index cd6bbd03576..d0810ca8221 100644
--- a/lisp/gnus/gnus-mlspl.el
+++ b/lisp/gnus/gnus-mlspl.el
@@ -72,8 +72,7 @@ match any of the group-specified splitting rules. See
72;;;###autoload 72;;;###autoload
73(defun gnus-group-split-update (&optional catch-all) 73(defun gnus-group-split-update (&optional catch-all)
74 "Computes nnmail-split-fancy from group params and CATCH-ALL. 74 "Computes nnmail-split-fancy from group params and CATCH-ALL.
75It does this by calling by calling (gnus-group-split-fancy nil 75It does this by calling (gnus-group-split-fancy nil nil CATCH-ALL).
76nil CATCH-ALL).
77 76
78If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used 77If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used
79instead. This variable is set by `gnus-group-split-setup'." 78instead. This variable is set by `gnus-group-split-setup'."
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index cc914643779..acb55463f7f 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -50,6 +50,7 @@
50(require 'rfc2047) 50(require 'rfc2047)
51(require 'puny) 51(require 'puny)
52(require 'rmc) ; read-multiple-choice 52(require 'rmc) ; read-multiple-choice
53(eval-when-compile (require 'subr-x)) ; when-let*
53 54
54(autoload 'mailclient-send-it "mailclient") 55(autoload 'mailclient-send-it "mailclient")
55 56
@@ -306,7 +307,7 @@ any confusion."
306(defcustom message-subject-trailing-was-query t 307(defcustom message-subject-trailing-was-query t
307 "What to do with trailing \"(was: <old subject>)\" in subject lines. 308 "What to do with trailing \"(was: <old subject>)\" in subject lines.
308If nil, leave the subject unchanged. If it is the symbol `ask', query 309If nil, leave the subject unchanged. If it is the symbol `ask', query
309the user what do do. In this case, the subject is matched against 310the user what to do. In this case, the subject is matched against
310`message-subject-trailing-was-ask-regexp'. If 311`message-subject-trailing-was-ask-regexp'. If
311`message-subject-trailing-was-query' is t, always strip the trailing 312`message-subject-trailing-was-query' is t, always strip the trailing
312old subject. In this case, `message-subject-trailing-was-regexp' is 313old subject. In this case, `message-subject-trailing-was-regexp' is
@@ -8059,8 +8060,12 @@ regexp VARSTR."
8059 (or (null varstr) 8060 (or (null varstr)
8060 (string-match varstr (symbol-name (car local))))) 8061 (string-match varstr (symbol-name (car local)))))
8061 (ignore-errors 8062 (ignore-errors
8062 (set (make-local-variable (car local)) 8063 ;; Cloning message-default-charset could cause an already
8063 (cdr local))))) 8064 ;; encoded text to be encoded again, yielding raw bytes
8065 ;; instead of characters in the message.
8066 (unless (eq 'message-default-charset (car local))
8067 (set (make-local-variable (car local))
8068 (cdr local))))))
8064 locals))) 8069 locals)))
8065 8070
8066;;; 8071;;;
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index 6378e3e97e1..f14af741f75 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -628,7 +628,7 @@ order for SpamAssassin to recognize the new registered spam."
628 :group 'spam-spamassassin) 628 :group 'spam-spamassassin)
629 629
630(defcustom spam-sa-learn-unregister-switch "--forget" 630(defcustom spam-sa-learn-unregister-switch "--forget"
631 "The switch that sa-learn uses to unregister messages messages." 631 "The switch that sa-learn uses to unregister messages."
632 :type 'string 632 :type 'string
633 :group 'spam-spamassassin) 633 :group 'spam-spamassassin)
634 634
diff --git a/lisp/ido.el b/lisp/ido.el
index 23c039d32e6..47cbcb63c69 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -443,7 +443,7 @@ Possible values:
443`other-window' Show new file in another window (same frame) 443`other-window' Show new file in another window (same frame)
444`display' Display file in another window without selecting to it 444`display' Display file in another window without selecting to it
445`other-frame' Show new file in another frame 445`other-frame' Show new file in another frame
446`maybe-frame' If a file is visible in another frame, prompt to ask if you 446`maybe-frame' If a file is visible in another frame, prompt to ask if
447 you want to see the file in the same window of the current 447 you want to see the file in the same window of the current
448 frame or in the other frame 448 frame or in the other frame
449`raise-frame' If a file is visible in another frame, raise that 449`raise-frame' If a file is visible in another frame, raise that
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el
index 2843c7c9038..a63c3a21091 100644
--- a/lisp/language/misc-lang.el
+++ b/lisp/language/misc-lang.el
@@ -75,12 +75,70 @@ and Italian.")))
75 (sample-text . "Persian فارسی") 75 (sample-text . "Persian فارسی")
76 (documentation . "Bidirectional editing is supported."))) 76 (documentation . "Bidirectional editing is supported.")))
77 77
78(defcustom arabic-shaper-ZWNJ-handling nil
79 "How to handle ZWMJ in Arabic text rendering.
80This variable controls the way to handle a glyph for ZWNJ
81returned by the underling shaping engine.
82
83The default value is nil, which means that the ZWNJ glyph is
84displayed as is.
85
86If the value is `absorb', ZWNJ is absorbed into the previous
87grapheme cluster, and not displayed.
88
89If the value is `as-space', the glyph is displayed by a
90thin (i.e. 1-dot width) space.
91
92Customizing the value takes effect when you start Emacs next time."
93 :group 'mule
94 :version "26.1"
95 :type '(choice
96 (const :tag "default" nil)
97 (const :tag "as space" as-space)
98 (const :tag "absorb" absorb)))
99
100;; Record error in arabic-change-gstring.
101(defvar arabic-shape-log nil)
102
103(defun arabic-shape-gstring (gstring)
104 (setq gstring (font-shape-gstring gstring))
105 (condition-case err
106 (when arabic-shaper-ZWNJ-handling
107 (let ((font (lgstring-font gstring))
108 (i 1)
109 (len (lgstring-glyph-len gstring))
110 (modified nil))
111 (while (< i len)
112 (let ((glyph (lgstring-glyph gstring i)))
113 (when (eq (lglyph-char glyph) #x200c)
114 (cond
115 ((eq arabic-shaper-ZWNJ-handling 'as-space)
116 (if (> (- (lglyph-rbearing glyph) (lglyph-lbearing glyph)) 0)
117 (let ((space-glyph (aref (font-get-glyphs font 0 1 " ") 0)))
118 (when space-glyph
119 (lglyph-set-code glyph (aref space-glyph 3))
120 (lglyph-set-width glyph (aref space-glyph 4)))))
121 (lglyph-set-adjustment glyph 0 0 1)
122 (setq modified t))
123 ((eq arabic-shaper-ZWNJ-handling 'absorb)
124 (let ((prev (lgstring-glyph gstring (1- i))))
125 (lglyph-set-from-to prev (lglyph-from prev) (lglyph-to glyph))
126 (setq gstring (lgstring-remove-glyph gstring i))
127 (setq len (1- len)))
128 (setq modified t)))))
129 (setq i (1+ i)))
130 (if modified
131 (lgstring-set-id gstring nil))))
132 (error (push err arabic-shape-log)))
133 gstring)
134
78(set-char-table-range 135(set-char-table-range
79 composition-function-table 136 composition-function-table
80 '(#x600 . #x74F) 137 '(#x600 . #x74F)
81 (list (vector "[\u0600-\u074F\u200C\u200D]+" 0 'font-shape-gstring) 138 (list (vector "[\u0600-\u074F\u200C\u200D]+" 0
82 (vector "[\u200C\u200D][\u0600-\u074F\u200C\u200D]+" 139 'arabic-shape-gstring)
83 1 'font-shape-gstring))) 140 (vector "[\u200C\u200D][\u0600-\u074F\u200C\u200D]+" 1
141 'arabic-shape-gstring)))
84 142
85(provide 'misc-lang) 143(provide 'misc-lang)
86 144
diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el
index b91a81503e2..640febd0473 100644
--- a/lisp/mail/rmailedit.el
+++ b/lisp/mail/rmailedit.el
@@ -312,26 +312,34 @@ This function runs the hooks `text-mode-hook' and `rmail-edit-mode-hook'.
312 (data-buffer (current-buffer)) 312 (data-buffer (current-buffer))
313 (start (copy-marker (point) nil)) ; new body will be between 313 (start (copy-marker (point) nil)) ; new body will be between
314 (end (copy-marker (point) t))) ; these two markers 314 (end (copy-marker (point) t))) ; these two markers
315 (with-current-buffer rmail-view-buffer 315 (if mime-state
316 (encode-coding-region headers-end (point-max) coding-system 316 ;; Message is already in encoded state
317 data-buffer)) 317 (insert-buffer-substring rmail-view-buffer headers-end
318 (delete-region end (point-max)) 318 (with-current-buffer rmail-view-buffer
319 (point-max)))
320 (with-current-buffer rmail-view-buffer
321 (encode-coding-region headers-end (point-max) coding-system
322 data-buffer)))
319 ;; Apply to the mbox buffer any changes in header fields 323 ;; Apply to the mbox buffer any changes in header fields
320 ;; that the user made while editing in the view buffer. 324 ;; that the user made while editing in the view buffer.
321 (rmail-edit-update-headers (rmail-edit-diff-headers 325 (rmail-edit-update-headers (rmail-edit-diff-headers
322 rmail-old-headers new-headers)) 326 rmail-old-headers new-headers))
323 ;; Re-apply content-transfer-encoding, if any, on the message body. 327 ;; Re-apply content-transfer-encoding, if any, on the message body.
324 (cond 328 (cond
329 (mime-state) ; if set, already transfer-encoded
325 ((string= character-coding "quoted-printable") 330 ((string= character-coding "quoted-printable")
326 (mail-quote-printable-region start (point-max))) 331 (mail-quote-printable-region start end))
327 ((and (string= character-coding "base64") is-text-message) 332 ((and (string= character-coding "base64") is-text-message)
328 (base64-encode-region start (point-max))) 333 (base64-encode-region start end))
329 ((and (eq character-coding 'uuencode) is-text-message) 334 ((and (eq character-coding 'uuencode) is-text-message)
330 (error "uuencoded messages are not supported"))) 335 (error "uuencoded messages are not supported")))
331 ;; After encoding, make sure buffer ends with a blank line so as not to 336 ;; After encoding, make sure buffer ends with a blank line so as not to
332 ;; run this message together with the following one. 337 ;; run this message together with the following one.
333 (goto-char (point-max)) 338 (goto-char end)
334 (rmail-ensure-blank-line)) 339 (rmail-ensure-blank-line)
340 ;; Delete previous body. This must be after all insertions at the end,
341 ;; so the marker for the beginning of the next message isn't messed up.
342 (delete-region end (point-max)))
335 (rmail-set-attribute rmail-edited-attr-index t)) 343 (rmail-set-attribute rmail-edited-attr-index t))
336;;;??? BROKEN perhaps. 344;;;??? BROKEN perhaps.
337;;; (if (boundp 'rmail-summary-vector) 345;;; (if (boundp 'rmail-summary-vector)
diff --git a/lisp/net/newst-ticker.el b/lisp/net/newst-ticker.el
index 913b89b43ff..eb6ff19d5c2 100644
--- a/lisp/net/newst-ticker.el
+++ b/lisp/net/newst-ticker.el
@@ -118,7 +118,7 @@ been added between the last two retrievals."
118 118
119(defcustom newsticker-hide-obsolete-items-in-echo-area 119(defcustom newsticker-hide-obsolete-items-in-echo-area
120 t 120 t
121 "Decides whether to show obsolete items items in the ticker. 121 "Decides whether to show obsolete items in the ticker.
122If t the echo area will not show obsolete items. See also 122If t the echo area will not show obsolete items. See also
123`newsticker-hide-old-items-in-echo-area'." 123`newsticker-hide-old-items-in-echo-area'."
124 :type 'boolean 124 :type 'boolean
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 5268e80a33d..e75efcf483f 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -549,11 +549,12 @@ Emacs dired can't find files."
549 (let ((par (expand-file-name ".." dir))) 549 (let ((par (expand-file-name ".." dir)))
550 (unless (file-directory-p par) 550 (unless (file-directory-p par)
551 (make-directory par parents)))) 551 (make-directory par parents))))
552 (tramp-adb-barf-unless-okay
553 v (format "mkdir %s" (tramp-shell-quote-argument localname))
554 "Couldn't make directory %s" dir)
555 (tramp-flush-file-property v (file-name-directory localname)) 552 (tramp-flush-file-property v (file-name-directory localname))
556 (tramp-flush-directory-property v localname))) 553 (tramp-flush-directory-property v localname)
554 (unless (or (tramp-adb-send-command-and-check
555 v (format "mkdir %s" (tramp-shell-quote-argument localname)))
556 (and parents (file-directory-p dir)))
557 (tramp-error v 'file-error "Couldn't make directory %s" dir))))
557 558
558(defun tramp-adb-handle-delete-directory (directory &optional recursive _trash) 559(defun tramp-adb-handle-delete-directory (directory &optional recursive _trash)
559 "Like `delete-directory' for Tramp files." 560 "Like `delete-directory' for Tramp files."
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 237d6896e2a..2b29a1b55f5 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -416,6 +416,19 @@ Every entry is a list (NAME ADDRESS).")
416(defconst tramp-hal-interface-device "org.freedesktop.Hal.Device" 416(defconst tramp-hal-interface-device "org.freedesktop.Hal.Device"
417 "The device interface of the HAL daemon.") 417 "The device interface of the HAL daemon.")
418 418
419;; "gvfs-<command>" utilities have been deprecated in GVFS 1.31.1. We
420;; must use "gio <command>" tool instead.
421(defconst tramp-gvfs-gio-mapping
422 '(("gvfs-copy" . "copy")
423 ("gvfs-info" . "info")
424 ("gvfs-ls" . "list")
425 ("gvfs-mkdir" . "mkdir")
426 ("gvfs-monitor-file" . "monitor")
427 ("gvfs-move" . "move")
428 ("gvfs-rm" . "remove")
429 ("gvfs-trash" . "trash"))
430 "List of cons cells, mapping \"gvfs-<command>\" to \"gio <command>\".")
431
419(defconst tramp-gvfs-file-attributes 432(defconst tramp-gvfs-file-attributes
420 '("name" 433 '("name"
421 "type" 434 "type"
@@ -1078,9 +1091,12 @@ If FILE-SYSTEM is non-nil, return file system attributes."
1078 ((memq 'change flags) 1091 ((memq 'change flags)
1079 '(created changed changes-done-hint moved deleted)) 1092 '(created changed changes-done-hint moved deleted))
1080 ((memq 'attribute-change flags) '(attribute-changed)))) 1093 ((memq 'attribute-change flags) '(attribute-changed))))
1081 (p (start-process 1094 (p (apply
1082 "gvfs-monitor-file" (generate-new-buffer " *gvfs-monitor-file*") 1095 'start-process
1083 "gvfs-monitor-file" (tramp-gvfs-url-file-name file-name)))) 1096 "gvfs-monitor" (generate-new-buffer " *gvfs-monitor*")
1097 (if (tramp-gvfs-gio-tool-p v)
1098 `("gio" "monitor" ,(tramp-gvfs-url-file-name file-name)))
1099 `("gvfs-monitor-file" (tramp-gvfs-url-file-name file-name)))))
1084 (if (not (processp p)) 1100 (if (not (processp p))
1085 (tramp-error 1101 (tramp-error
1086 v 'file-notify-error "Monitoring not supported for `%s'" file-name) 1102 v 'file-notify-error "Monitoring not supported for `%s'" file-name)
@@ -1190,8 +1206,9 @@ file-notify events."
1190 (when (and parents (not (file-directory-p ldir))) 1206 (when (and parents (not (file-directory-p ldir)))
1191 (make-directory ldir parents)) 1207 (make-directory ldir parents))
1192 ;; Just do it. 1208 ;; Just do it.
1193 (unless (tramp-gvfs-send-command 1209 (unless (or (tramp-gvfs-send-command
1194 v "gvfs-mkdir" (tramp-gvfs-url-file-name dir)) 1210 v "gvfs-mkdir" (tramp-gvfs-url-file-name dir))
1211 (and parents (file-directory-p dir)))
1195 (tramp-error v 'file-error "Couldn't make directory %s" dir)))))) 1212 (tramp-error v 'file-error "Couldn't make directory %s" dir))))))
1196 1213
1197(defun tramp-gvfs-handle-rename-file 1214(defun tramp-gvfs-handle-rename-file
@@ -1785,10 +1802,16 @@ connection if a previous connection has died for some reason."
1785 (tramp-gvfs-get-remote-uid vec 'string) 1802 (tramp-gvfs-get-remote-uid vec 'string)
1786 (tramp-gvfs-get-remote-gid vec 'string)))) 1803 (tramp-gvfs-get-remote-gid vec 'string))))
1787 1804
1805(defun tramp-gvfs-gio-tool-p (vec)
1806 "Check, whether the gio tool is available."
1807 (with-tramp-connection-property vec "gio-tool"
1808 (zerop (tramp-call-process vec "gio" nil nil nil "version"))))
1809
1788(defun tramp-gvfs-send-command (vec command &rest args) 1810(defun tramp-gvfs-send-command (vec command &rest args)
1789 "Send the COMMAND with its ARGS to connection VEC. 1811 "Send the COMMAND with its ARGS to connection VEC.
1790COMMAND is usually a command from the gvfs-* utilities. 1812COMMAND is a command from the gvfs-* utilities. It is replaced
1791`call-process' is applied, and it returns t if the return code is zero." 1813by the corresponding gio tool call if available. `call-process'
1814is applied, and it returns t if the return code is zero."
1792 (let* ((locale (tramp-get-local-locale vec)) 1815 (let* ((locale (tramp-get-local-locale vec))
1793 (process-environment 1816 (process-environment
1794 (append 1817 (append
@@ -1796,6 +1819,11 @@ COMMAND is usually a command from the gvfs-* utilities.
1796 ,(format "LANGUAGE=%s" locale) 1819 ,(format "LANGUAGE=%s" locale)
1797 ,(format "LC_ALL=%s" locale)) 1820 ,(format "LC_ALL=%s" locale))
1798 process-environment))) 1821 process-environment)))
1822 (when (tramp-gvfs-gio-tool-p vec)
1823 ;; Use gio tool.
1824 (setq args (cons (cdr (assoc command tramp-gvfs-gio-mapping)) args)
1825 command "gio"))
1826
1799 (with-current-buffer (tramp-get-connection-buffer vec) 1827 (with-current-buffer (tramp-get-connection-buffer vec)
1800 (tramp-gvfs-maybe-open-connection vec) 1828 (tramp-gvfs-maybe-open-connection vec)
1801 (erase-buffer) 1829 (erase-buffer)
diff --git a/lisp/obsolete/landmark.el b/lisp/obsolete/landmark.el
index 99fd55107ba..7795279bf42 100644
--- a/lisp/obsolete/landmark.el
+++ b/lisp/obsolete/landmark.el
@@ -260,7 +260,7 @@ is non-nil. One interesting value is `turn-on-font-lock'."
260 "Vector recording the actual score of the free squares.") 260 "Vector recording the actual score of the free squares.")
261 261
262 262
263;; The key point point about the algorithm is that, rather than considering 263;; The key point about the algorithm is that, rather than considering
264;; the board as just a set of squares, we prefer to see it as a "space" of 264;; the board as just a set of squares, we prefer to see it as a "space" of
265;; internested 5-tuples of contiguous squares (called qtuples). 265;; internested 5-tuples of contiguous squares (called qtuples).
266;; 266;;
diff --git a/lisp/obsolete/levents.el b/lisp/obsolete/levents.el
index 24de4891ae3..b9b153553d7 100644
--- a/lisp/obsolete/levents.el
+++ b/lisp/obsolete/levents.el
@@ -113,7 +113,7 @@ In actual Lucid Emacs, you MUST NOT use this event object after
113calling this function with it. You will lose. It is not necessary to 113calling this function with it. You will lose. It is not necessary to
114call this function, as event objects are garbage- collected like all 114call this function, as event objects are garbage- collected like all
115other objects; however, it may be more efficient to explicitly 115other objects; however, it may be more efficient to explicitly
116deallocate events when you are sure that that is safe. 116deallocate events when you are sure that this is safe.
117 117
118This emulation does not actually deallocate or reuse events 118This emulation does not actually deallocate or reuse events
119except via garbage collection and `cons'." 119except via garbage collection and `cons'."
diff --git a/lisp/obsolete/otodo-mode.el b/lisp/obsolete/otodo-mode.el
index c7a05ad1459..dd25e336f0a 100644
--- a/lisp/obsolete/otodo-mode.el
+++ b/lisp/obsolete/otodo-mode.el
@@ -164,7 +164,7 @@
164;; might be nicer and to that effect a function has been declared 164;; might be nicer and to that effect a function has been declared
165;; further down in the code. You may wish to auto-load this. 165;; further down in the code. You may wish to auto-load this.
166;; 166;;
167;; Carsten also writes that that *changing* the prefix after the 167;; Carsten also writes that *changing* the prefix after the
168;; todo list is already established is not as simple as changing 168;; todo list is already established is not as simple as changing
169;; the variable - the todo files have to be changed by hand. 169;; the variable - the todo files have to be changed by hand.
170;; 170;;
diff --git a/lisp/org/org-faces.el b/lisp/org/org-faces.el
index 53538e6a858..eab9f3e313f 100644
--- a/lisp/org/org-faces.el
+++ b/lisp/org/org-faces.el
@@ -291,7 +291,7 @@ determines if it is a foreground or a background color."
291(defcustom org-priority-faces nil 291(defcustom org-priority-faces nil
292 "Faces for specific Priorities. 292 "Faces for specific Priorities.
293This is a list of cons cells, with priority character in the car 293This is a list of cons cells, with priority character in the car
294and faces in the cdr. The face can be a symbol, a color as 294and faces in the cdr. The face can be a symbol, a color
295as a string, or a property list of attributes, like 295as a string, or a property list of attributes, like
296 (:foreground \"blue\" :weight bold :underline t). 296 (:foreground \"blue\" :weight bold :underline t).
297If it is a color string, the variable `org-faces-easy-properties' 297If it is a color string, the variable `org-faces-easy-properties'
diff --git a/lisp/org/org-inlinetask.el b/lisp/org/org-inlinetask.el
index 360b1bcfdb0..4a8e43db03b 100644
--- a/lisp/org/org-inlinetask.el
+++ b/lisp/org/org-inlinetask.el
@@ -114,7 +114,7 @@ When nil, the first star is not shown."
114(defcustom org-inlinetask-default-state nil 114(defcustom org-inlinetask-default-state nil
115 "Non-nil means make inline tasks have a TODO keyword initially. 115 "Non-nil means make inline tasks have a TODO keyword initially.
116This should be the state `org-inlinetask-insert-task' should use by 116This should be the state `org-inlinetask-insert-task' should use by
117default, or nil of no state should be assigned." 117default, or nil if no state should be assigned."
118 :group 'org-inlinetask 118 :group 'org-inlinetask
119 :version "24.1" 119 :version "24.1"
120 :type '(choice 120 :type '(choice
diff --git a/lisp/play/gomoku.el b/lisp/play/gomoku.el
index 7c3184543b0..2f5f36e1dbb 100644
--- a/lisp/play/gomoku.el
+++ b/lisp/play/gomoku.el
@@ -263,7 +263,7 @@ Other useful commands:\n
263 "Vector recording the actual score of the free squares.") 263 "Vector recording the actual score of the free squares.")
264 264
265 265
266;; The key point point about the algorithm is that, rather than considering 266;; The key point about the algorithm is that, rather than considering
267;; the board as just a set of squares, we prefer to see it as a "space" of 267;; the board as just a set of squares, we prefer to see it as a "space" of
268;; internested 5-tuples of contiguous squares (called qtuples). 268;; internested 5-tuples of contiguous squares (called qtuples).
269;; 269;;
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index f84d94a3e68..82ae1816270 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -619,7 +619,7 @@ COUNT starts with 1. GEN-SEP is used to separate long variable values."
619 '((java-mode ("%sTokenTypes.java") ("%s.java")) 619 '((java-mode ("%sTokenTypes.java") ("%s.java"))
620 (c++-mode ("%sTokenTypes.hpp") ("%s.cpp" "%s.hpp"))) 620 (c++-mode ("%sTokenTypes.hpp") ("%s.cpp" "%s.hpp")))
621 "Language dependent formats which specify generated files. 621 "Language dependent formats which specify generated files.
622Each element in this list looks looks like 622Each element in this list looks like
623 (MAJOR-MODE (VOCAB-FILE-FORMAT...) (CLASS-FILE-FORMAT...)). 623 (MAJOR-MODE (VOCAB-FILE-FORMAT...) (CLASS-FILE-FORMAT...)).
624 624
625The element whose MAJOR-MODE is equal to `antlr-language' is used to 625The element whose MAJOR-MODE is equal to `antlr-language' is used to
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index 6818b5e0b76..df202e9cd2f 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -167,7 +167,7 @@ use c-constant-symbol instead."
167(defmacro defcustom-c-stylevar (name val doc &rest args) 167(defmacro defcustom-c-stylevar (name val doc &rest args)
168 "Define a style variable NAME with VAL and DOC. 168 "Define a style variable NAME with VAL and DOC.
169More precisely, convert the given `:type FOO', mined out of ARGS, 169More precisely, convert the given `:type FOO', mined out of ARGS,
170to an aggregate `:type (radio STYLE (PREAMBLE FOO))', append some 170to an aggregate `:type (radio STYLE (PREAMBLE FOO))', append
171some boilerplate documentation to DOC, arrange for the fallback 171some boilerplate documentation to DOC, arrange for the fallback
172value of NAME to be VAL, and call `custom-declare-variable' to 172value of NAME to be VAL, and call `custom-declare-variable' to
173do the rest of the work. 173do the rest of the work.
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index e956637572c..1681922fa5a 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -480,7 +480,7 @@ Font for POD headers."
480(defcustom cperl-highlight-variables-indiscriminately nil 480(defcustom cperl-highlight-variables-indiscriminately nil
481 "Non-nil means perform additional highlighting on variables. 481 "Non-nil means perform additional highlighting on variables.
482Currently only changes how scalar variables are highlighted. 482Currently only changes how scalar variables are highlighted.
483Note that that variable is only read at initialization time for 483Note that the variable is only read at initialization time for
484the variable `cperl-font-lock-keywords-2', so changing it after you've 484the variable `cperl-font-lock-keywords-2', so changing it after you've
485entered CPerl mode the first time will have no effect." 485entered CPerl mode the first time will have no effect."
486 :type 'boolean 486 :type 'boolean
diff --git a/lisp/progmodes/flymake-proc.el b/lisp/progmodes/flymake-proc.el
index 52cb1985327..ab60855b217 100644
--- a/lisp/progmodes/flymake-proc.el
+++ b/lisp/progmodes/flymake-proc.el
@@ -626,7 +626,7 @@ Create parent directories as needed."
626 "Tell Flymake UI about a fatal PROBLEM with this backend. 626 "Tell Flymake UI about a fatal PROBLEM with this backend.
627May only be called in a dynamic environment where 627May only be called in a dynamic environment where
628`flymake-proc--report-fn' is bound." 628`flymake-proc--report-fn' is bound."
629 (flymake-log 0 "%s: %s" problem explanation) 629 (flymake-log 1 "%s: %s" problem explanation)
630 (if (and (boundp 'flymake-proc--report-fn) 630 (if (and (boundp 'flymake-proc--report-fn)
631 flymake-proc--report-fn) 631 flymake-proc--report-fn)
632 (funcall flymake-proc--report-fn :panic 632 (funcall flymake-proc--report-fn :panic
@@ -766,7 +766,7 @@ can also be executed interactively independently of
766 (unwind-protect 766 (unwind-protect
767 (cond 767 (cond
768 ((not cmd-and-args) 768 ((not cmd-and-args)
769 (flymake-log 0 "init function %s for %s failed, cleaning up" 769 (flymake-log 1 "init function %s for %s failed, cleaning up"
770 init-f buffer-file-name)) 770 init-f buffer-file-name))
771 (t 771 (t
772 (setq proc 772 (setq proc
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 45f0adfeba1..e4c6a38a77e 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -123,10 +123,14 @@ If nil, never start checking buffer automatically like this."
123(make-obsolete-variable 'flymake-gui-warnings-enabled 123(make-obsolete-variable 'flymake-gui-warnings-enabled
124 "it no longer has any effect." "26.1") 124 "it no longer has any effect." "26.1")
125 125
126(defcustom flymake-start-syntax-check-on-find-file t 126(defcustom flymake-start-on-flymake-mode t
127 "Start syntax check on find file." 127 "Start syntax check when `flymake-mode'is enabled.
128Specifically, start it when the buffer is actually displayed."
128 :type 'boolean) 129 :type 'boolean)
129 130
131(define-obsolete-variable-alias 'flymake-start-syntax-check-on-find-file
132 'flymake-start-on-flymake-mode "26.1")
133
130(defcustom flymake-log-level -1 134(defcustom flymake-log-level -1
131 "Obsolete and ignored variable." 135 "Obsolete and ignored variable."
132 :type 'integer) 136 :type 'integer)
@@ -138,24 +142,25 @@ If nil, never start checking buffer automatically like this."
138 "If non-nil, moving to errors wraps around buffer boundaries." 142 "If non-nil, moving to errors wraps around buffer boundaries."
139 :type 'boolean) 143 :type 'boolean)
140 144
141(define-fringe-bitmap 'flymake-double-exclamation-mark 145(when (fboundp 'define-fringe-bitmap)
142 (vector #b00000000 146 (define-fringe-bitmap 'flymake-double-exclamation-mark
143 #b00000000 147 (vector #b00000000
144 #b00000000 148 #b00000000
145 #b00000000 149 #b00000000
146 #b01100110 150 #b00000000
147 #b01100110 151 #b01100110
148 #b01100110 152 #b01100110
149 #b01100110 153 #b01100110
150 #b01100110 154 #b01100110
151 #b01100110 155 #b01100110
152 #b01100110 156 #b01100110
153 #b01100110 157 #b01100110
154 #b00000000 158 #b01100110
155 #b01100110 159 #b00000000
156 #b00000000 160 #b01100110
157 #b00000000 161 #b00000000
158 #b00000000)) 162 #b00000000
163 #b00000000)))
159 164
160(defvar-local flymake-timer nil 165(defvar-local flymake-timer nil
161 "Timer for starting syntax check.") 166 "Timer for starting syntax check.")
@@ -318,12 +323,12 @@ region is invalid."
318(defvar flymake-diagnostic-functions nil 323(defvar flymake-diagnostic-functions nil
319 "Special hook of Flymake backends that check a buffer. 324 "Special hook of Flymake backends that check a buffer.
320 325
321The functions in this hook diagnose problems in a buffers 326The functions in this hook diagnose problems in a buffer's
322contents and provide information to the Flymake user interface 327contents and provide information to the Flymake user interface
323about where and how to annotate problems diagnosed in a buffer. 328about where and how to annotate problems diagnosed in a buffer.
324 329
325Whenever Flymake or the user decides to re-check the buffer, each 330Each backend function must be prepared to accept an arbitrary
326function is called with an arbitrary number of arguments: 331number of arguments:
327 332
328* the first argument is always REPORT-FN, a callback function 333* the first argument is always REPORT-FN, a callback function
329 detailed below; 334 detailed below;
@@ -333,11 +338,12 @@ function is called with an arbitrary number of arguments:
333 no such arguments, but backend functions must be prepared to 338 no such arguments, but backend functions must be prepared to
334 accept and possibly ignore any number of them. 339 accept and possibly ignore any number of them.
335 340
336Backend functions are expected to initiate the buffer check, but 341Whenever Flymake or the user decides to re-check the buffer,
337aren't required to complete it check before exiting: if the 342backend functions are called as detailed above and are expected
338computation involved is expensive, especially for large buffers, 343to initiate this check, but aren't required to complete it before
339that task can be scheduled for the future using asynchronous 344exiting: if the computation involved is expensive, especially for
340processes or other asynchronous mechanisms. 345large buffers, that task can be scheduled for the future using
346asynchronous processes or other asynchronous mechanisms.
341 347
342In any case, backend functions are expected to return quickly or 348In any case, backend functions are expected to return quickly or
343signal an error, in which case the backend is disabled. Flymake 349signal an error, in which case the backend is disabled. Flymake
@@ -371,10 +377,10 @@ Currently accepted values for REPORT-ACTION are:
371 377
372Currently accepted REPORT-KEY arguments are: 378Currently accepted REPORT-KEY arguments are:
373 379
374* :explanation’: value should give user-readable details of 380* `:explanation' value should give user-readable details of
375 the situation encountered, if any. 381 the situation encountered, if any.
376 382
377* :force: value should be a boolean suggesting that Flymake 383* `:force': value should be a boolean suggesting that Flymake
378 consider the report even if it was somehow unexpected.") 384 consider the report even if it was somehow unexpected.")
379 385
380(defvar flymake-diagnostic-types-alist 386(defvar flymake-diagnostic-types-alist
@@ -403,12 +409,12 @@ properties are:
403 409
404* `severity', a non-negative integer specifying the diagnostic's 410* `severity', a non-negative integer specifying the diagnostic's
405 severity. The higher, the more serious. If the overlay 411 severity. The higher, the more serious. If the overlay
406 priority `priority' is not specified, `severity' is used to set 412 property `priority' is not specified, `severity' is used to set
407 it and help sort overlapping overlays. 413 it and help sort overlapping overlays.
408 414
409* `flymake-category', a symbol whose property list is considered 415* `flymake-category', a symbol whose property list is considered
410 as a default for missing values of any other properties. This 416 a default for missing values of any other properties. This is
411 is useful to backend authors when creating new diagnostic types 417 useful to backend authors when creating new diagnostic types
412 that differ from an existing type by only a few properties.") 418 that differ from an existing type by only a few properties.")
413 419
414(put 'flymake-error 'face 'flymake-error) 420(put 'flymake-error 'face 'flymake-error)
@@ -493,8 +499,7 @@ associated `flymake-category' return DEFAULT."
493 (lambda (_window _ov pos) 499 (lambda (_window _ov pos)
494 (mapconcat 500 (mapconcat
495 (lambda (ov) 501 (lambda (ov)
496 (let ((diag (overlay-get ov 'flymake--diagnostic))) 502 (overlay-get ov 'flymake-text))
497 (flymake--diag-text diag)))
498 (flymake--overlays :beg pos) 503 (flymake--overlays :beg pos)
499 "\n"))) 504 "\n")))
500 (default-maybe 'severity (warning-numeric-level :error)) 505 (default-maybe 'severity (warning-numeric-level :error))
@@ -503,6 +508,7 @@ associated `flymake-category' return DEFAULT."
503 ;; 508 ;;
504 (overlay-put ov 'evaporate t) 509 (overlay-put ov 'evaporate t)
505 (overlay-put ov 'flymake t) 510 (overlay-put ov 'flymake t)
511 (overlay-put ov 'flymake-text (flymake--diag-text diagnostic))
506 (overlay-put ov 'flymake--diagnostic diagnostic))) 512 (overlay-put ov 'flymake--diagnostic diagnostic)))
507 513
508;; Nothing in Flymake uses this at all any more, so this is just for 514;; Nothing in Flymake uses this at all any more, so this is just for
@@ -605,7 +611,12 @@ not expected."
605 (flymake-log :debug "backend %s reported %d diagnostics in %.2f second(s)" 611 (flymake-log :debug "backend %s reported %d diagnostics in %.2f second(s)"
606 backend 612 backend
607 (length new-diags) 613 (length new-diags)
608 (- (float-time) flymake-check-start-time))))))))) 614 (- (float-time) flymake-check-start-time)))
615 (when (and (get-buffer (flymake--diagnostics-buffer-name))
616 (get-buffer-window (flymake--diagnostics-buffer-name))
617 (null (cl-set-difference (flymake-running-backends)
618 (flymake-reporting-backends))))
619 (flymake-show-diagnostics-buffer))))))))
609 620
610(defun flymake-make-report-fn (backend &optional token) 621(defun flymake-make-report-fn (backend &optional token)
611 "Make a suitable anonymous report function for BACKEND. 622 "Make a suitable anonymous report function for BACKEND.
@@ -618,24 +629,42 @@ different runs of the same backend."
618 (with-current-buffer buffer 629 (with-current-buffer buffer
619 (apply #'flymake--handle-report backend token args)))))) 630 (apply #'flymake--handle-report backend token args))))))
620 631
621(defun flymake--collect (fn) 632(defun flymake--collect (fn &optional message-prefix)
633 "Collect Flymake backends matching FN.
634If MESSAGE-PREFIX, echo a message using that prefix"
635 (unless flymake--backend-state
636 (user-error "Flymake is not initialized"))
622 (let (retval) 637 (let (retval)
623 (maphash (lambda (backend state) 638 (maphash (lambda (backend state)
624 (when (funcall fn state) (push backend retval))) 639 (when (funcall fn state) (push backend retval)))
625 flymake--backend-state) 640 flymake--backend-state)
641 (when message-prefix
642 (message "%s%s"
643 message-prefix
644 (mapconcat (lambda (s) (format "%s" s))
645 retval ", ")))
626 retval)) 646 retval))
627 647
628(defun flymake-running-backends () 648(defun flymake-running-backends ()
629 "Compute running Flymake backends in current buffer." 649 "Compute running Flymake backends in current buffer."
630 (flymake--collect #'flymake--backend-state-running)) 650 (interactive)
651 (flymake--collect #'flymake--backend-state-running
652 (and (called-interactively-p 'interactive)
653 "Running backends: ")))
631 654
632(defun flymake-disabled-backends () 655(defun flymake-disabled-backends ()
633 "Compute disabled Flymake backends in current buffer." 656 "Compute disabled Flymake backends in current buffer."
634 (flymake--collect #'flymake--backend-state-disabled)) 657 (interactive)
658 (flymake--collect #'flymake--backend-state-disabled
659 (and (called-interactively-p 'interactive)
660 "Disabled backends: ")))
635 661
636(defun flymake-reporting-backends () 662(defun flymake-reporting-backends ()
637 "Compute reporting Flymake backends in current buffer." 663 "Compute reporting Flymake backends in current buffer."
638 (flymake--collect #'flymake--backend-state-reported-p)) 664 (interactive)
665 (flymake--collect #'flymake--backend-state-reported-p
666 (and (called-interactively-p 'interactive)
667 "Reporting backends: ")))
639 668
640(defun flymake--disable-backend (backend &optional explanation) 669(defun flymake--disable-backend (backend &optional explanation)
641 "Disable BACKEND because EXPLANATION. 670 "Disable BACKEND because EXPLANATION.
@@ -670,41 +699,101 @@ If it is running also stop it."
670 (flymake--disable-backend backend err))))) 699 (flymake--disable-backend backend err)))))
671 700
672(defun flymake-start (&optional deferred force) 701(defun flymake-start (&optional deferred force)
673 "Start a syntax check. 702 "Start a syntax check for the current buffer.
674Start it immediately, or after current command if DEFERRED is 703DEFERRED is a list of symbols designating conditions to wait for
675non-nil. With optional FORCE run even disabled backends. 704before actually starting the check. If it is nil (the list is
705empty), start it immediately, else defer the check to when those
706conditions are met. Currently recognized conditions are
707`post-command', for waiting until the current command is over,
708`on-display', for waiting until the buffer is actually displayed
709in a window. If DEFERRED is t, wait for all known conditions.
710
711With optional FORCE run even disabled backends.
676 712
677Interactively, with a prefix arg, FORCE is t." 713Interactively, with a prefix arg, FORCE is t."
678 (interactive (list nil current-prefix-arg)) 714 (interactive (list nil current-prefix-arg))
679 (cl-labels 715 (let ((deferred (if (eq t deferred)
680 ((start 716 '(post-command on-display)
681 () 717 deferred))
682 (remove-hook 'post-command-hook #'start 'local) 718 (buffer (current-buffer)))
683 (setq flymake-check-start-time (float-time)) 719 (cl-labels
684 (run-hook-wrapped 720 ((start-post-command
685 'flymake-diagnostic-functions 721 ()
686 (lambda (backend) 722 (remove-hook 'post-command-hook #'start-post-command
687 (cond 723 nil)
688 ((and (not force) 724 (with-current-buffer buffer
689 (flymake--with-backend-state backend state 725 (flymake-start (remove 'post-command deferred) force)))
690 (flymake--backend-state-disabled state))) 726 (start-on-display
691 (flymake-log :debug "Backend %s is disabled, not starting" 727 ()
692 backend)) 728 (remove-hook 'window-configuration-change-hook #'start-on-display
729 'local)
730 (flymake-start (remove 'on-display deferred) force)))
731 (cond ((and (memq 'post-command deferred)
732 this-command)
733 (add-hook 'post-command-hook
734 #'start-post-command
735 'append nil))
736 ((and (memq 'on-display deferred)
737 (not (get-buffer-window (current-buffer))))
738 (add-hook 'window-configuration-change-hook
739 #'start-on-display
740 'append 'local))
693 (t 741 (t
694 (flymake--run-backend backend))) 742 (setq flymake-check-start-time (float-time))
695 nil)))) 743 (run-hook-wrapped
696 (if (and deferred 744 'flymake-diagnostic-functions
697 this-command) 745 (lambda (backend)
698 (add-hook 'post-command-hook #'start 'append 'local) 746 (cond
699 (start)))) 747 ((and (not force)
748 (flymake--with-backend-state backend state
749 (flymake--backend-state-disabled state)))
750 (flymake-log :debug "Backend %s is disabled, not starting"
751 backend))
752 (t
753 (flymake--run-backend backend)))
754 nil)))))))
700 755
701(defvar flymake-mode-map 756(defvar flymake-mode-map
702 (let ((map (make-sparse-keymap))) map) 757 (let ((map (make-sparse-keymap))) map)
703 "Keymap for `flymake-mode'") 758 "Keymap for `flymake-mode'")
704 759
705;;;###autoload 760;;;###autoload
706(define-minor-mode flymake-mode nil 761(define-minor-mode flymake-mode
707 :group 'flymake :lighter flymake--mode-line-format :keymap flymake-mode-map 762 "Toggle Flymake mode on or off.
763With a prefix argument ARG, enable Flymake mode if ARG is
764positive, and disable it otherwise. If called from Lisp, enable
765the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'.
766
767Flymake is an Emacs minor mode for on-the-fly syntax checking.
768Flymake collects diagnostic information from multiple sources,
769called backends, and visually annotates the buffer with the
770results.
771
772Flymake performs these checks while the user is editing. The
773customization variables `flymake-start-on-flymake-mode',
774`flymake-no-changes-timeout' and
775`flymake-start-syntax-check-on-newline' determine the exact
776circumstances whereupon Flymake decides to initiate a check of
777the buffer.
778
779The commands `flymake-goto-next-error' and
780`flymake-goto-prev-error' can be used to navigate among Flymake
781diagnostics annotated in the buffer.
782
783The visual appearance of each type of diagnostic can be changed
784in the variable `flymake-diagnostic-types-alist'.
785
786Activation or deactivation of backends used by Flymake in each
787buffer happens via the special hook
788`flymake-diagnostic-functions'.
789
790Some backends may take longer than others to respond or complete,
791and some may decide to disable themselves if they are not
792suitable for the current buffer. The commands
793`flymake-running-backends', `flymake-disabled-backends' and
794`flymake-reporting-backends' summarize the situation, as does the
795special *Flymake log* buffer." :group 'flymake :lighter
796 flymake--mode-line-format :keymap flymake-mode-map
708 (cond 797 (cond
709 ;; Turning the mode ON. 798 ;; Turning the mode ON.
710 (flymake-mode 799 (flymake-mode
@@ -714,8 +803,7 @@ Interactively, with a prefix arg, FORCE is t."
714 803
715 (setq flymake--backend-state (make-hash-table)) 804 (setq flymake--backend-state (make-hash-table))
716 805
717 (when flymake-start-syntax-check-on-find-file 806 (when flymake-start-on-flymake-mode (flymake-start t)))
718 (flymake-start)))
719 807
720 ;; Turning the mode OFF. 808 ;; Turning the mode OFF.
721 (t 809 (t
@@ -748,7 +836,7 @@ Do it only if `flymake-no-changes-timeout' is non-nil."
748 (flymake-log 836 (flymake-log
749 :debug "starting syntax check after idle for %s seconds" 837 :debug "starting syntax check after idle for %s seconds"
750 flymake-no-changes-timeout) 838 flymake-no-changes-timeout)
751 (flymake-start)) 839 (flymake-start t))
752 (setq flymake-timer nil)))) 840 (setq flymake-timer nil))))
753 (current-buffer))))) 841 (current-buffer)))))
754 842
@@ -770,13 +858,13 @@ Do it only if `flymake-no-changes-timeout' is non-nil."
770 (let((new-text (buffer-substring start stop))) 858 (let((new-text (buffer-substring start stop)))
771 (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) 859 (when (and flymake-start-syntax-check-on-newline (equal new-text "\n"))
772 (flymake-log :debug "starting syntax check as new-line has been seen") 860 (flymake-log :debug "starting syntax check as new-line has been seen")
773 (flymake-start 'deferred)) 861 (flymake-start t))
774 (flymake--schedule-timer-maybe))) 862 (flymake--schedule-timer-maybe)))
775 863
776(defun flymake-after-save-hook () 864(defun flymake-after-save-hook ()
777 (when flymake-mode 865 (when flymake-mode
778 (flymake-log :debug "starting syntax check as buffer was saved") 866 (flymake-log :debug "starting syntax check as buffer was saved")
779 (flymake-start))) 867 (flymake-start t)))
780 868
781(defun flymake-kill-buffer-hook () 869(defun flymake-kill-buffer-hook ()
782 (when flymake-timer 870 (when flymake-timer
@@ -792,10 +880,10 @@ Do it only if `flymake-no-changes-timeout' is non-nil."
792(defun flymake-goto-next-error (&optional n filter interactive) 880(defun flymake-goto-next-error (&optional n filter interactive)
793 "Go to Nth next Flymake error in buffer matching FILTER. 881 "Go to Nth next Flymake error in buffer matching FILTER.
794Interactively, always move to the next error. With a prefix arg, 882Interactively, always move to the next error. With a prefix arg,
795skip any diagnostics with a severity less than :warning. 883skip any diagnostics with a severity less than `:warning'.
796 884
797If flymake-wrap-around is non-nil and no more next errors, 885If `flymake-wrap-around' is non-nil and no more next errors,
798resumes search from top 886resumes search from top.
799 887
800FILTER is a list of diagnostic types found in 888FILTER is a list of diagnostic types found in
801`flymake-diagnostic-types-alist', or nil, if no filter is to be 889`flymake-diagnostic-types-alist', or nil, if no filter is to be
@@ -835,6 +923,7 @@ applied."
835 (goto-char (overlay-start target)) 923 (goto-char (overlay-start target))
836 (when interactive 924 (when interactive
837 (message 925 (message
926 "%s"
838 (funcall (overlay-get target 'help-echo) 927 (funcall (overlay-get target 'help-echo)
839 nil nil (point))))) 928 nil nil (point)))))
840 (interactive 929 (interactive
@@ -846,9 +935,9 @@ applied."
846(defun flymake-goto-prev-error (&optional n filter interactive) 935(defun flymake-goto-prev-error (&optional n filter interactive)
847 "Go to Nth previous Flymake error in buffer matching FILTER. 936 "Go to Nth previous Flymake error in buffer matching FILTER.
848Interactively, always move to the previous error. With a prefix 937Interactively, always move to the previous error. With a prefix
849arg, skip any diagnostics with a severity less than :warning. 938arg, skip any diagnostics with a severity less than `:warning'.
850 939
851If flymake-wrap-around is non-nil and no more previous errors, 940If `flymake-wrap-around' is non-nil and no more previous errors,
852resumes search from bottom. 941resumes search from bottom.
853 942
854FILTER is a list of diagnostic types found in 943FILTER is a list of diagnostic types found in
@@ -868,6 +957,7 @@ applied."
868 [ "Go to previous error" flymake-goto-prev-error t ] 957 [ "Go to previous error" flymake-goto-prev-error t ]
869 [ "Check now" flymake-start t ] 958 [ "Check now" flymake-start t ]
870 [ "Go to log buffer" flymake-switch-to-log-buffer t ] 959 [ "Go to log buffer" flymake-switch-to-log-buffer t ]
960 [ "Show error buffer" flymake-show-diagnostics-buffer t ]
871 "--" 961 "--"
872 [ "Turn off Flymake" flymake-mode t ])) 962 [ "Turn off Flymake" flymake-mode t ]))
873 963
@@ -897,11 +987,16 @@ applied."
897 ,(concat (format "%s known backends\n" (length known)) 987 ,(concat (format "%s known backends\n" (length known))
898 (format "%s running\n" (length running)) 988 (format "%s running\n" (length running))
899 (format "%s disabled\n" (length disabled)) 989 (format "%s disabled\n" (length disabled))
900 "mouse-1: go to log buffer ") 990 "mouse-1: Display minor mode menu\n"
991 "mouse-2: Show help for minor mode")
901 keymap 992 keymap
902 ,(let ((map (make-sparse-keymap))) 993 ,(let ((map (make-sparse-keymap)))
903 (define-key map [mode-line down-mouse-1] 994 (define-key map [mode-line down-mouse-1]
904 flymake-menu) 995 flymake-menu)
996 (define-key map [mode-line mouse-2]
997 (lambda ()
998 (interactive)
999 (describe-function 'flymake-mode)))
905 map)) 1000 map))
906 ,@(pcase-let ((`(,ind ,face ,explain) 1001 ,@(pcase-let ((`(,ind ,face ,explain)
907 (cond ((null known) 1002 (cond ((null known)
@@ -952,13 +1047,15 @@ applied."
952 ,(let ((map (make-sparse-keymap)) 1047 ,(let ((map (make-sparse-keymap))
953 (type type)) 1048 (type type))
954 (define-key map [mode-line mouse-4] 1049 (define-key map [mode-line mouse-4]
955 (lambda (_event) 1050 (lambda (event)
956 (interactive "e") 1051 (interactive "e")
957 (flymake-goto-prev-error 1 (list type) t))) 1052 (with-selected-window (posn-window (event-start event))
1053 (flymake-goto-prev-error 1 (list type) t))))
958 (define-key map [mode-line mouse-5] 1054 (define-key map [mode-line mouse-5]
959 (lambda (_event) 1055 (lambda (event)
960 (interactive "e") 1056 (interactive "e")
961 (flymake-goto-next-error 1 (list type) t))) 1057 (with-selected-window (posn-window (event-start event))
1058 (flymake-goto-next-error 1 (list type) t))))
962 map) 1059 map)
963 help-echo 1060 help-echo
964 ,(concat (format "%s diagnostics of type %s\n" 1061 ,(concat (format "%s diagnostics of type %s\n"
@@ -976,6 +1073,102 @@ applied."
976 '(:propertize " ")) 1073 '(:propertize " "))
977 (:propertize "]"))))))) 1074 (:propertize "]")))))))
978 1075
1076;;; Diagnostics buffer
1077
1078(defvar-local flymake--diagnostics-buffer-source nil)
1079
1080(defvar flymake-diagnostics-buffer-mode-map
1081 (let ((map (make-sparse-keymap)))
1082 (define-key map (kbd "RET") 'flymake-goto-diagnostic)
1083 (define-key map (kbd "SPC") 'flymake-show-diagnostic)
1084 map))
1085
1086(defun flymake-show-diagnostic (pos &optional other-window)
1087 "Show location of diagnostic at POS."
1088 (interactive (list (point) t))
1089 (let* ((id (or (tabulated-list-get-id pos)
1090 (user-error "Nothing at point")))
1091 (overlay (plist-get id :overlay)))
1092 (with-current-buffer (overlay-buffer overlay)
1093 (with-selected-window
1094 (display-buffer (current-buffer) other-window)
1095 (goto-char (overlay-start overlay))
1096 (pulse-momentary-highlight-region (overlay-start overlay)
1097 (overlay-end overlay)
1098 'highlight))
1099 (current-buffer))))
1100
1101(defun flymake-goto-diagnostic (pos)
1102 "Show location of diagnostic at POS.
1103POS can be a buffer position or a button"
1104 (interactive "d")
1105 (pop-to-buffer
1106 (flymake-show-diagnostic (if (button-type pos) (button-start pos) pos))))
1107
1108(defun flymake--diagnostics-buffer-entries ()
1109 (with-current-buffer flymake--diagnostics-buffer-source
1110 (cl-loop for ov in (flymake--overlays)
1111 for diag = (overlay-get ov
1112 'flymake--diagnostic)
1113 for (line . col) =
1114 (save-excursion
1115 (goto-char (overlay-start ov))
1116 (cons (line-number-at-pos)
1117 (- (point)
1118 (line-beginning-position))))
1119 for type = (flymake--diag-type diag)
1120 collect
1121 (list (list :overlay ov
1122 :line line
1123 :severity (flymake--lookup-type-property
1124 type
1125 'severity (warning-numeric-level :error)))
1126 `[,(format "%s" line)
1127 ,(format "%s" col)
1128 ,(propertize (format "%s" type)
1129 'face (flymake--lookup-type-property
1130 type 'mode-line-face 'flymake-error))
1131 (,(format "%s" (flymake--diag-text diag))
1132 mouse-face highlight
1133 help-echo "mouse-2: visit this diagnostic"
1134 face nil
1135 action flymake-goto-diagnostic
1136 mouse-action flymake-goto-diagnostic)]))))
1137
1138(define-derived-mode flymake-diagnostics-buffer-mode tabulated-list-mode
1139 "Flymake diagnostics"
1140 "A mode for listing Flymake diagnostics."
1141 (setq tabulated-list-format
1142 `[("Line" 5 (lambda (l1 l2)
1143 (< (plist-get (car l1) :line)
1144 (plist-get (car l2) :line)))
1145 :right-align t)
1146 ("Col" 3 nil :right-align t)
1147 ("Type" 8 (lambda (l1 l2)
1148 (< (plist-get (car l1) :severity)
1149 (plist-get (car l2) :severity))))
1150 ("Message" 0 t)])
1151 (setq tabulated-list-entries
1152 'flymake--diagnostics-buffer-entries)
1153 (tabulated-list-init-header))
1154
1155(defun flymake--diagnostics-buffer-name ()
1156 (format "*Flymake diagnostics for %s*" (current-buffer)))
1157
1158(defun flymake-show-diagnostics-buffer ()
1159 "Show a list of Flymake diagnostics for current buffer."
1160 (interactive)
1161 (let* ((name (flymake--diagnostics-buffer-name))
1162 (source (current-buffer))
1163 (target (or (get-buffer name)
1164 (with-current-buffer (get-buffer-create name)
1165 (flymake-diagnostics-buffer-mode)
1166 (setq flymake--diagnostics-buffer-source source)
1167 (current-buffer)))))
1168 (with-current-buffer target
1169 (revert-buffer)
1170 (display-buffer (current-buffer)))))
1171
979(provide 'flymake) 1172(provide 'flymake)
980 1173
981(require 'flymake-proc) 1174(require 'flymake-proc)
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 01bdb04714f..d0404fdeaf4 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -903,7 +903,8 @@ substitution string. Note dynamic scoping of variables.")
903 (read-regexp "Search for" 'grep-tag-default 'grep-regexp-history)) 903 (read-regexp "Search for" 'grep-tag-default 'grep-regexp-history))
904 904
905(defun grep-read-files (regexp) 905(defun grep-read-files (regexp)
906 "Read files arg for interactive grep." 906 "Read a file-name pattern arg for interactive grep.
907The pattern can include shell wildcards."
907 (let* ((bn (or (buffer-file-name) 908 (let* ((bn (or (buffer-file-name)
908 (replace-regexp-in-string "<[0-9]+>\\'" "" (buffer-name)))) 909 (replace-regexp-in-string "<[0-9]+>\\'" "" (buffer-name))))
909 (fn (and bn 910 (fn (and bn
@@ -936,7 +937,7 @@ substitution string. Note dynamic scoping of variables.")
936 (car (car grep-files-aliases)))) 937 (car (car grep-files-aliases))))
937 (files (completing-read 938 (files (completing-read
938 (concat "Search for \"" regexp 939 (concat "Search for \"" regexp
939 "\" in files" 940 "\" in files matching wildcard"
940 (if default (concat " (default " default ")")) 941 (if default (concat " (default " default ")"))
941 ": ") 942 ": ")
942 'read-file-name-internal 943 'read-file-name-internal
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 9aa5134ca0d..f79d9a47d31 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -640,10 +640,14 @@ The type returned can be `comment', `string' or `paren'."
640 ((python-rx string-delimiter) 640 ((python-rx string-delimiter)
641 (0 (ignore (python-syntax-stringify)))))) 641 (0 (ignore (python-syntax-stringify))))))
642 642
643(defconst python--prettify-symbols-alist 643(defvar python-prettify-symbols-alist
644 '(("lambda" . ?λ) 644 '(("lambda" . ?λ)
645 ("and" . ?∧) 645 ("and" . ?∧)
646 ("or" . ?∨))) 646 ("or" . ?∨))
647 "Value for `prettify-symbols-alist' in `python-mode'.")
648
649(define-obsolete-variable-alias 'python--prettify-symbols-alist
650 'python-prettify-symbols-alist "26.1")
647 651
648(defsubst python-syntax-count-quotes (quote-char &optional point limit) 652(defsubst python-syntax-count-quotes (quote-char &optional point limit)
649 "Count number of quotes around point (max is 3). 653 "Count number of quotes around point (max is 3).
diff --git a/lisp/subr.el b/lisp/subr.el
index c1eae8d752b..a6c998e9be2 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -110,8 +110,7 @@ BODY should be a list of Lisp expressions.
110 110
111\(fn ARGS [DOCSTRING] [INTERACTIVE] BODY)" 111\(fn ARGS [DOCSTRING] [INTERACTIVE] BODY)"
112 (declare (doc-string 2) (indent defun) 112 (declare (doc-string 2) (indent defun)
113 (debug (&define lambda-list 113 (debug (&define lambda-list lambda-doc
114 [&optional stringp]
115 [&optional ("interactive" interactive)] 114 [&optional ("interactive" interactive)]
116 def-body))) 115 def-body)))
117 ;; Note that this definition should not use backquotes; subr.el should not 116 ;; Note that this definition should not use backquotes; subr.el should not
diff --git a/lisp/term/tvi970.el b/lisp/term/tvi970.el
index abcd149acd4..1ce82200b38 100644
--- a/lisp/term/tvi970.el
+++ b/lisp/term/tvi970.el
@@ -36,7 +36,7 @@
36 ;; ("\eOR" [kp-f3]) 36 ;; ("\eOR" [kp-f3])
37 ;; ("\eOS" [kp-f4]) 37 ;; ("\eOS" [kp-f4])
38 38
39 ;; These might bre set by terminfo. 39 ;; These might be set by terminfo.
40 ("\e[H" [home]) 40 ("\e[H" [home])
41 ("\e[Z" [backtab]) 41 ("\e[Z" [backtab])
42 ("\e[i" [print]) 42 ("\e[i" [print])
@@ -45,13 +45,13 @@
45 ("\e[M" [deleteline]) 45 ("\e[M" [deleteline])
46 ("\e[U" [next]) ;; actually the `page' key 46 ("\e[U" [next]) ;; actually the `page' key
47 47
48 ;; These won't be set up by either 48 ;; These won't be set up by either.
49 ("\eOm" [kp-subtract]) 49 ("\eOm" [kp-subtract])
50 ("\eOl" [kp-separator]) 50 ("\eOl" [kp-separator])
51 ("\eOn" [kp-decimal]) 51 ("\eOn" [kp-decimal])
52 ("\eOM" [kp-enter]) 52 ("\eOM" [kp-enter])
53 53
54 ;; These won't be set up by either either 54 ;; These won't be set up by either.
55 ("\e[K" [key_eol]) ;; Not an X keysym 55 ("\e[K" [key_eol]) ;; Not an X keysym
56 ("\e[J" [key_eos]) ;; Not an X keysym 56 ("\e[J" [key_eos]) ;; Not an X keysym
57 ("\e[2J" [key_clear]) ;; Not an X keysym 57 ("\e[2J" [key_clear]) ;; Not an X keysym
diff --git a/lisp/textmodes/less-css-mode.el b/lisp/textmodes/less-css-mode.el
index b665f917d3a..d31414e3a4b 100644
--- a/lisp/textmodes/less-css-mode.el
+++ b/lisp/textmodes/less-css-mode.el
@@ -129,7 +129,7 @@ variable in most cases is likely to be via directory local
129variables. 129variables.
130 130
131This can be also be set to a full path, or a relative path. If 131This can be also be set to a full path, or a relative path. If
132the path is relative, it will be relative to the the current 132the path is relative, it will be relative to the current
133directory by default." 133directory by default."
134 :type 'file) 134 :type 'file)
135;;;###autoload 135;;;###autoload
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index 0fb120ec80a..60e9bbb5f5c 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -66,7 +66,7 @@
66(defvar picture-desired-column 0 66(defvar picture-desired-column 0
67 "Desired current column for Picture mode. 67 "Desired current column for Picture mode.
68When a cursor is on a wide-column character (e.g. Chinese, 68When a cursor is on a wide-column character (e.g. Chinese,
69Japanese, Korean), this may may be different from `current-column'.") 69Japanese, Korean), this may be different from `current-column'.")
70 70
71 71
72(defun picture-update-desired-column (adjust-to-current) 72(defun picture-update-desired-column (adjust-to-current)
diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el
index 5eb64c82b94..f1a30048849 100644
--- a/lisp/textmodes/rst.el
+++ b/lisp/textmodes/rst.el
@@ -3450,7 +3450,7 @@ applied to each line like this
3450COUNT is 0 before the first paragraph and increments for every 3450COUNT is 0 before the first paragraph and increments for every
3451paragraph found on level IND. IN-FIRST is non-nil if this is the 3451paragraph found on level IND. IN-FIRST is non-nil if this is the
3452first line of such a paragraph. IN-SUB is non-nil if this line 3452first line of such a paragraph. IN-SUB is non-nil if this line
3453is part of a sub-block while IN-SUPER is non-nil of this line is 3453is part of a sub-block while IN-SUPER is non-nil if this line is
3454part of a less indented block (super-block). IN-EMPTY is non-nil 3454part of a less indented block (super-block). IN-EMPTY is non-nil
3455if this line is empty where an empty line is considered being 3455if this line is empty where an empty line is considered being
3456part of the previous block. RELIND is nil for an empty line, 0 3456part of the previous block. RELIND is nil for an empty line, 0
diff --git a/lisp/vc/pcvs-defs.el b/lisp/vc/pcvs-defs.el
index 9575b5f7cab..41dc9401c0a 100644
--- a/lisp/vc/pcvs-defs.el
+++ b/lisp/vc/pcvs-defs.el
@@ -269,7 +269,7 @@ This variable is buffer local and only used in the *cvs* buffer.")
269 "Regexp matching the possible names of locks in the CVS repository.") 269 "Regexp matching the possible names of locks in the CVS repository.")
270 270
271(defconst cvs-cursor-column 22 271(defconst cvs-cursor-column 22
272 "Column to position cursor in in `cvs-mode'.") 272 "Column to position cursor in, in `cvs-mode'.")
273 273
274;;;; 274;;;;
275;;;; Global internal variables 275;;;; Global internal variables
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index d268e1a3fe7..d704cfa4e8f 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -278,6 +278,8 @@ which is the \"1006\" extension implemented in Xterm >= 277."
278 (last-name (symbol-name last-type)) 278 (last-name (symbol-name last-type))
279 (last-time (nth 1 last-click)) 279 (last-time (nth 1 last-click))
280 (click-count (nth 2 last-click)) 280 (click-count (nth 2 last-click))
281 (last-x (nth 3 last-click))
282 (last-y (nth 4 last-click))
281 (this-time (float-time)) 283 (this-time (float-time))
282 (name (symbol-name type))) 284 (name (symbol-name type)))
283 (cond 285 (cond
@@ -292,12 +294,16 @@ which is the \"1006\" extension implemented in Xterm >= 277."
292 double-click-time 294 double-click-time
293 (or (eq double-click-time t) 295 (or (eq double-click-time t)
294 (> double-click-time (* 1000 (- this-time last-time)))) 296 (> double-click-time (* 1000 (- this-time last-time))))
297 (<= (abs (- x last-x))
298 (/ double-click-fuzz 8))
299 (<= (abs (- y last-y))
300 (/ double-click-fuzz 8))
295 (equal last-name (replace-match "" t t name))) 301 (equal last-name (replace-match "" t t name)))
296 (setq click-count (1+ click-count)) 302 (setq click-count (1+ click-count))
297 (xterm-mouse--set-click-count event click-count)) 303 (xterm-mouse--set-click-count event click-count))
298 (t (setq click-count 1))) 304 (t (setq click-count 1)))
299 (set-terminal-parameter nil 'xterm-mouse-last-click 305 (set-terminal-parameter nil 'xterm-mouse-last-click
300 (list type this-time click-count))) 306 (list type this-time click-count x y)))
301 307
302 (set-terminal-parameter nil 'xterm-mouse-x x) 308 (set-terminal-parameter nil 'xterm-mouse-x x)
303 (set-terminal-parameter nil 'xterm-mouse-y y) 309 (set-terminal-parameter nil 'xterm-mouse-y y)
diff --git a/src/ChangeLog.10 b/src/ChangeLog.10
index 1bd822d492f..f5eb88be961 100644
--- a/src/ChangeLog.10
+++ b/src/ChangeLog.10
@@ -3958,7 +3958,7 @@
3958 3958
39592006-05-12 Chong Yidong <cyd@stupidchicken.com> 39592006-05-12 Chong Yidong <cyd@stupidchicken.com>
3960 3960
3961 * intervals.c (set_point_both): Fix mixup before before and after 3961 * intervals.c (set_point_both): Fix mixup before and after
3962 in variable names. 3962 in variable names.
3963 3963
3964 * editfns.c (Fline_beginning_position): Inhibit point-motion hooks 3964 * editfns.c (Fline_beginning_position): Inhibit point-motion hooks
diff --git a/src/ChangeLog.12 b/src/ChangeLog.12
index 61251bfbb47..2291e85e8cb 100644
--- a/src/ChangeLog.12
+++ b/src/ChangeLog.12
@@ -3348,7 +3348,7 @@
3348 with plain -g rather than with -g3, and they need the duplicate 3348 with plain -g rather than with -g3, and they need the duplicate
3349 definitions for .gdbinit to work; see <https://bugs.gnu.org/12814#26>. 3349 definitions for .gdbinit to work; see <https://bugs.gnu.org/12814#26>.
3350 * lisp.h (GCTYPEBITS, ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK): 3350 * lisp.h (GCTYPEBITS, ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK):
3351 Define as macros, as well as as enums or as constants. 3351 Define as macros, as well as enums or constants.
3352 3352
33532012-11-06 Jan Djärv <jan.h.d@swipnet.se> 33532012-11-06 Jan Djärv <jan.h.d@swipnet.se>
3354 3354
diff --git a/src/ChangeLog.4 b/src/ChangeLog.4
index 2935ee52cca..70865535e96 100644
--- a/src/ChangeLog.4
+++ b/src/ChangeLog.4
@@ -3381,7 +3381,7 @@
3381 some external definitions. 3381 some external definitions.
3382 (Ffile_attributes) [MSDOS]: Set execute bits from file name. 3382 (Ffile_attributes) [MSDOS]: Set execute bits from file name.
3383 (Ffile_name_all_completions) [FILE_SYSTEM_CASE]: Convert 3383 (Ffile_name_all_completions) [FILE_SYSTEM_CASE]: Convert
3384 case of file name as as indicated by conditional. 3384 case of file name as indicated by conditional.
3385 3385
3386 * emacs.c (main) [MSDOS]: Call init_environment. Set file types to 3386 * emacs.c (main) [MSDOS]: Call init_environment. Set file types to
3387 binary for all files. Call init_dosfns. 3387 binary for all files. Call init_dosfns.
diff --git a/src/ChangeLog.5 b/src/ChangeLog.5
index 489ccfa5323..99d25163a4d 100644
--- a/src/ChangeLog.5
+++ b/src/ChangeLog.5
@@ -1372,7 +1372,7 @@
13721995-04-11 Richard Stallman <rms@mole.gnu.ai.mit.edu> 13721995-04-11 Richard Stallman <rms@mole.gnu.ai.mit.edu>
1373 1373
1374 * keyboard.c (read_char): Rearrange code so that getcjmp is set 1374 * keyboard.c (read_char): Rearrange code so that getcjmp is set
1375 only around sit_for and kbd_buffer_get_event, and 1375 only around sit_for and kbd_buffer_get_event,
1376 and polling is stopped only around the kbd_buffer_get_event call. 1376 and polling is stopped only around the kbd_buffer_get_event call.
1377 (Ftrack_mouse, tracking_off, read_char): Don't call prepare_menu_bars. 1377 (Ftrack_mouse, tracking_off, read_char): Don't call prepare_menu_bars.
1378 1378
diff --git a/src/ChangeLog.7 b/src/ChangeLog.7
index 32472ac074c..a1a9fb77157 100644
--- a/src/ChangeLog.7
+++ b/src/ChangeLog.7
@@ -3381,7 +3381,7 @@
33811998-02-15 Richard Stallman <rms@psilocin.gnu.org> 33811998-02-15 Richard Stallman <rms@psilocin.gnu.org>
3382 3382
3383 * minibuf.c (read_minibuf): Do use DEFALT in place of empty input 3383 * minibuf.c (read_minibuf): Do use DEFALT in place of empty input
3384 when when expflag is nonzero. 3384 when expflag is nonzero.
3385 (Fread_no_blanks_input): Arg INIT renamed to INITIAL. 3385 (Fread_no_blanks_input): Arg INIT renamed to INITIAL.
3386 3386
33871998-02-14 Richard Stallman <rms@psilocin.gnu.org> 33871998-02-14 Richard Stallman <rms@psilocin.gnu.org>
diff --git a/src/buffer.c b/src/buffer.c
index 76670b89545..cc6021bfb5d 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -6054,7 +6054,7 @@ and is the visited file's modification time, as of that time. If the
6054modification time of the most recent save is different, this entry is 6054modification time of the most recent save is different, this entry is
6055obsolete. 6055obsolete.
6056 6056
6057An entry (t . 0) means means the buffer was previously unmodified but 6057An entry (t . 0) means the buffer was previously unmodified but
6058its time stamp was unknown because it was not associated with a file. 6058its time stamp was unknown because it was not associated with a file.
6059An entry (t . -1) is similar, except that it means the buffer's visited 6059An entry (t . -1) is similar, except that it means the buffer's visited
6060file did not exist. 6060file did not exist.
diff --git a/src/dispnew.c b/src/dispnew.c
index ad59704a168..cb32f09b7c6 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -66,7 +66,7 @@ struct dim
66 66
67/* Function prototypes. */ 67/* Function prototypes. */
68 68
69static void update_frame_line (struct frame *, int); 69static void update_frame_line (struct frame *, int, bool);
70static int required_matrix_height (struct window *); 70static int required_matrix_height (struct window *);
71static int required_matrix_width (struct window *); 71static int required_matrix_width (struct window *);
72static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t); 72static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t);
@@ -88,7 +88,7 @@ static void check_matrix_pointers (struct glyph_matrix *,
88static void mirror_line_dance (struct window *, int, int, int *, char *); 88static void mirror_line_dance (struct window *, int, int, int *, char *);
89static bool update_window_tree (struct window *, bool); 89static bool update_window_tree (struct window *, bool);
90static bool update_window (struct window *, bool); 90static bool update_window (struct window *, bool);
91static bool update_frame_1 (struct frame *, bool, bool, bool); 91static bool update_frame_1 (struct frame *, bool, bool, bool, bool);
92static bool scrolling (struct frame *); 92static bool scrolling (struct frame *);
93static void set_window_cursor_after_update (struct window *); 93static void set_window_cursor_after_update (struct window *);
94static void adjust_frame_glyphs_for_window_redisplay (struct frame *); 94static void adjust_frame_glyphs_for_window_redisplay (struct frame *);
@@ -3121,7 +3121,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p)
3121 3121
3122 /* Update the display. */ 3122 /* Update the display. */
3123 update_begin (f); 3123 update_begin (f);
3124 paused_p = update_frame_1 (f, force_p, inhibit_hairy_id_p, 1); 3124 paused_p = update_frame_1 (f, force_p, inhibit_hairy_id_p, 1, false);
3125 update_end (f); 3125 update_end (f);
3126 3126
3127 if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) 3127 if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
@@ -3174,7 +3174,7 @@ update_frame_with_menu (struct frame *f, int row, int col)
3174 cursor_at_point_p = !(row >= 0 && col >= 0); 3174 cursor_at_point_p = !(row >= 0 && col >= 0);
3175 /* Force update_frame_1 not to stop due to pending input, and not 3175 /* Force update_frame_1 not to stop due to pending input, and not
3176 try scrolling. */ 3176 try scrolling. */
3177 paused_p = update_frame_1 (f, 1, 1, cursor_at_point_p); 3177 paused_p = update_frame_1 (f, 1, 1, cursor_at_point_p, true);
3178 /* ROW and COL tell us where in the menu to position the cursor, so 3178 /* ROW and COL tell us where in the menu to position the cursor, so
3179 that screen readers know the active region on the screen. */ 3179 that screen readers know the active region on the screen. */
3180 if (!cursor_at_point_p) 3180 if (!cursor_at_point_p)
@@ -4474,7 +4474,7 @@ scrolling_window (struct window *w, bool header_line_p)
4474 4474
4475static bool 4475static bool
4476update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p, 4476update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p,
4477 bool set_cursor_p) 4477 bool set_cursor_p, bool updating_menu_p)
4478{ 4478{
4479 /* Frame matrices to work on. */ 4479 /* Frame matrices to work on. */
4480 struct glyph_matrix *current_matrix = f->current_matrix; 4480 struct glyph_matrix *current_matrix = f->current_matrix;
@@ -4513,7 +4513,7 @@ update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p,
4513 4513
4514 /* Update the individual lines as needed. Do bottom line first. */ 4514 /* Update the individual lines as needed. Do bottom line first. */
4515 if (MATRIX_ROW_ENABLED_P (desired_matrix, desired_matrix->nrows - 1)) 4515 if (MATRIX_ROW_ENABLED_P (desired_matrix, desired_matrix->nrows - 1))
4516 update_frame_line (f, desired_matrix->nrows - 1); 4516 update_frame_line (f, desired_matrix->nrows - 1, updating_menu_p);
4517 4517
4518 /* Now update the rest of the lines. */ 4518 /* Now update the rest of the lines. */
4519 for (i = 0; i < desired_matrix->nrows - 1 && (force_p || !input_pending); i++) 4519 for (i = 0; i < desired_matrix->nrows - 1 && (force_p || !input_pending); i++)
@@ -4539,7 +4539,7 @@ update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p,
4539 if (!force_p && (i - 1) % preempt_count == 0) 4539 if (!force_p && (i - 1) % preempt_count == 0)
4540 detect_input_pending_ignore_squeezables (); 4540 detect_input_pending_ignore_squeezables ();
4541 4541
4542 update_frame_line (f, i); 4542 update_frame_line (f, i, updating_menu_p);
4543 } 4543 }
4544 } 4544 }
4545 4545
@@ -4775,7 +4775,7 @@ count_match (struct glyph *str1, struct glyph *end1, struct glyph *str2, struct
4775/* Perform a frame-based update on line VPOS in frame FRAME. */ 4775/* Perform a frame-based update on line VPOS in frame FRAME. */
4776 4776
4777static void 4777static void
4778update_frame_line (struct frame *f, int vpos) 4778update_frame_line (struct frame *f, int vpos, bool updating_menu_p)
4779{ 4779{
4780 struct glyph *obody, *nbody, *op1, *op2, *np1, *nend; 4780 struct glyph *obody, *nbody, *op1, *op2, *np1, *nend;
4781 int tem; 4781 int tem;
@@ -4814,6 +4814,12 @@ update_frame_line (struct frame *f, int vpos)
4814 current_row->enabled_p = true; 4814 current_row->enabled_p = true;
4815 current_row->used[TEXT_AREA] = desired_row->used[TEXT_AREA]; 4815 current_row->used[TEXT_AREA] = desired_row->used[TEXT_AREA];
4816 4816
4817 /* For some reason, cursor is sometimes moved behind our back when a
4818 frame with a TTY menu is redrawn. Homing the cursor as below
4819 fixes that. */
4820 if (updating_menu_p)
4821 cursor_to (f, 0, 0);
4822
4817 /* If desired line is empty, just clear the line. */ 4823 /* If desired line is empty, just clear the line. */
4818 if (!desired_row->enabled_p) 4824 if (!desired_row->enabled_p)
4819 { 4825 {
diff --git a/src/emacs-module.c b/src/emacs-module.c
index e5833a1d1f0..6bc91a7e06a 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -983,7 +983,7 @@ value_to_lisp (emacs_value v)
983 return o; 983 return o;
984} 984}
985 985
986/* Attempt to convert O to an emacs_value. Do not do any checking or 986/* Attempt to convert O to an emacs_value. Do not do any checking
987 or allocate any storage; the caller should prevent or detect 987 or allocate any storage; the caller should prevent or detect
988 any resulting bit pattern that is not a valid emacs_value. */ 988 any resulting bit pattern that is not a valid emacs_value. */
989static emacs_value 989static emacs_value
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index 1a00e0f6806..4243b3ffd9d 100644
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -81,7 +81,7 @@ emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget,
81 additional case for an xwidget view. 81 additional case for an xwidget view.
82 82
83 It would be nicer if the bse class method could be called first, 83 It would be nicer if the bse class method could be called first,
84 and the the xview modification only would remain here. It wasn't 84 and the xview modification only would remain here. It wasn't
85 possible to solve it that way yet. */ 85 possible to solve it that way yet. */
86 EmacsFixedClass *klass; 86 EmacsFixedClass *klass;
87 GtkWidgetClass *parent_class; 87 GtkWidgetClass *parent_class;
diff --git a/src/eval.c b/src/eval.c
index acda64e7f04..52e4c96d4b2 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2681,7 +2681,7 @@ call8 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3,
2681} 2681}
2682 2682
2683DEFUN ("functionp", Ffunctionp, Sfunctionp, 1, 1, 0, 2683DEFUN ("functionp", Ffunctionp, Sfunctionp, 1, 1, 0,
2684 doc: /* Non-nil if OBJECT is a function. */) 2684 doc: /* Return t if OBJECT is a function. */)
2685 (Lisp_Object object) 2685 (Lisp_Object object)
2686{ 2686{
2687 if (FUNCTIONP (object)) 2687 if (FUNCTIONP (object))
diff --git a/src/fileio.c b/src/fileio.c
index d460f123a82..d8ecccd7930 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -125,7 +125,7 @@ static mode_t auto_save_mode_bits;
125static bool auto_save_error_occurred; 125static bool auto_save_error_occurred;
126 126
127/* If VALID_TIMESTAMP_FILE_SYSTEM, then TIMESTAMP_FILE_SYSTEM is the device 127/* If VALID_TIMESTAMP_FILE_SYSTEM, then TIMESTAMP_FILE_SYSTEM is the device
128 number of a file system where time stamps were observed to to work. */ 128 number of a file system where time stamps were observed to work. */
129static bool valid_timestamp_file_system; 129static bool valid_timestamp_file_system;
130static dev_t timestamp_file_system; 130static dev_t timestamp_file_system;
131 131
diff --git a/src/frame.h b/src/frame.h
index d1c21da4d2a..e610fc768d3 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -447,7 +447,7 @@ struct frame
447 447
448 /* New text height and width for pending size change. 0 if no change 448 /* New text height and width for pending size change. 0 if no change
449 pending. These values represent pixels or canonical character units 449 pending. These values represent pixels or canonical character units
450 according to the value of new_pixelwise and correlate to the the 450 according to the value of new_pixelwise and correlate to the
451 text width/height of the frame. */ 451 text width/height of the frame. */
452 int new_width, new_height; 452 int new_width, new_height;
453 453
diff --git a/src/gnutls.c b/src/gnutls.c
index d7a1399f106..b55d1b9289f 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -2472,7 +2472,6 @@ syms_of_gnutls (void)
2472 DEFSYM (QCcipher_blocksize, ":cipher-blocksize"); 2472 DEFSYM (QCcipher_blocksize, ":cipher-blocksize");
2473 DEFSYM (QCcipher_keysize, ":cipher-keysize"); 2473 DEFSYM (QCcipher_keysize, ":cipher-keysize");
2474 DEFSYM (QCcipher_tagsize, ":cipher-tagsize"); 2474 DEFSYM (QCcipher_tagsize, ":cipher-tagsize");
2475 DEFSYM (QCcipher_keysize, ":cipher-keysize");
2476 DEFSYM (QCcipher_ivsize, ":cipher-ivsize"); 2475 DEFSYM (QCcipher_ivsize, ":cipher-ivsize");
2477 2476
2478 DEFSYM (QCmac_algorithm_id, ":mac-algorithm-id"); 2477 DEFSYM (QCmac_algorithm_id, ":mac-algorithm-id");
diff --git a/src/keyboard.h b/src/keyboard.h
index a2a5f8f21d9..662d8e4a4f6 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -65,7 +65,7 @@ INLINE_HEADER_BEGIN
65 as soon as a complete key arrives from some KBOARD or other, 65 as soon as a complete key arrives from some KBOARD or other,
66 Emacs starts executing that key's binding. It switches to the 66 Emacs starts executing that key's binding. It switches to the
67 single-kboard state for the execution of that command, 67 single-kboard state for the execution of that command,
68 so that that command can get input only from its own KBOARD. 68 so that the command can get input only from its own KBOARD.
69 69
70 While in the single-kboard state, read_char can consider input only 70 While in the single-kboard state, read_char can consider input only
71 from the current KBOARD. If events come from other KBOARDs, they 71 from the current KBOARD. If events come from other KBOARDs, they
diff --git a/src/lread.c b/src/lread.c
index 6bc93b14817..33da8667228 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -4834,7 +4834,7 @@ to the specified file name if a suffix is allowed or required. */);
4834 build_pure_c_string (".el")); 4834 build_pure_c_string (".el"));
4835#endif 4835#endif
4836 DEFVAR_LISP ("module-file-suffix", Vmodule_file_suffix, 4836 DEFVAR_LISP ("module-file-suffix", Vmodule_file_suffix,
4837 doc: /* Suffix of loadable module file, or nil of modules are not supported. */); 4837 doc: /* Suffix of loadable module file, or nil if modules are not supported. */);
4838#ifdef HAVE_MODULES 4838#ifdef HAVE_MODULES
4839 Vmodule_file_suffix = build_pure_c_string (MODULES_SUFFIX); 4839 Vmodule_file_suffix = build_pure_c_string (MODULES_SUFFIX);
4840#else 4840#else
diff --git a/src/nsterm.m b/src/nsterm.m
index f0b6a70dae3..0b43c04c0b7 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -3715,7 +3715,7 @@ ns_dumpglyphs_image (struct glyph_string *s, NSRect r)
3715 /* Currently on NS img->mask is always 0. Since 3715 /* Currently on NS img->mask is always 0. Since
3716 get_window_cursor_type specifies a hollow box cursor when on 3716 get_window_cursor_type specifies a hollow box cursor when on
3717 a non-masked image we never reach this clause. But we put it 3717 a non-masked image we never reach this clause. But we put it
3718 in in anticipation of better support for image masks on 3718 in, in anticipation of better support for image masks on
3719 NS. */ 3719 NS. */
3720 tdCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f); 3720 tdCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f);
3721 } 3721 }
@@ -6893,6 +6893,9 @@ not_in_argv (NSString *arg)
6893 NSTRACE_RECT ("[sender frame]", [sender frame]); 6893 NSTRACE_RECT ("[sender frame]", [sender frame]);
6894 NSTRACE_FSTYPE ("fs_state", fs_state); 6894 NSTRACE_FSTYPE ("fs_state", fs_state);
6895 6895
6896 if (!FRAME_LIVE_P (emacsframe))
6897 return frameSize;
6898
6896 if (fs_state == FULLSCREEN_MAXIMIZED 6899 if (fs_state == FULLSCREEN_MAXIMIZED
6897 && (maximized_width != (int)frameSize.width 6900 && (maximized_width != (int)frameSize.width
6898 || maximized_height != (int)frameSize.height)) 6901 || maximized_height != (int)frameSize.height))
diff --git a/src/scroll.c b/src/scroll.c
index 7004dcd9aea..c6e0cfd7e21 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -457,7 +457,7 @@ calculate_direct_scrolling (struct frame *frame,
457 if (baud_rate <= 0) 457 if (baud_rate <= 0)
458 extra_cost = 1; 458 extra_cost = 1;
459 459
460 /* Overhead of setting the scroll window, plus the extra cost 460 /* Overhead of setting the scroll window, plus the extra
461 cost of scrolling by a distance of one. The extra cost is 461 cost of scrolling by a distance of one. The extra cost is
462 added once for consistency with the cost vectors */ 462 added once for consistency with the cost vectors */
463 scroll_overhead 463 scroll_overhead
diff --git a/src/sysdep.c b/src/sysdep.c
index 8291a606bea..dd0062b6f04 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -221,10 +221,29 @@ init_standard_fds (void)
221} 221}
222 222
223/* Return the current working directory. The result should be freed 223/* Return the current working directory. The result should be freed
224 with 'free'. Return NULL on errors. */ 224 with 'free'. Return NULL (setting errno) on errors. If the
225char * 225 current directory is unreachable, return either NULL or a string
226emacs_get_current_dir_name (void) 226 beginning with '('. */
227
228static char *
229get_current_dir_name_or_unreachable (void)
227{ 230{
231 /* Use malloc, not xmalloc, since this function can be called before
232 the xmalloc exception machinery is available. */
233
234 char *pwd;
235
236 /* The maximum size of a directory name, including the terminating null.
237 Leave room so that the caller can append a trailing slash. */
238 ptrdiff_t dirsize_max = min (PTRDIFF_MAX, SIZE_MAX) - 1;
239
240 /* The maximum size of a buffer for a file name, including the
241 terminating null. This is bounded by MAXPATHLEN, if available. */
242 ptrdiff_t bufsize_max = dirsize_max;
243#ifdef MAXPATHLEN
244 bufsize_max = min (bufsize_max, MAXPATHLEN);
245#endif
246
228# if HAVE_GET_CURRENT_DIR_NAME && !BROKEN_GET_CURRENT_DIR_NAME 247# if HAVE_GET_CURRENT_DIR_NAME && !BROKEN_GET_CURRENT_DIR_NAME
229# ifdef HYBRID_MALLOC 248# ifdef HYBRID_MALLOC
230 bool use_libc = bss_sbrk_did_unexec; 249 bool use_libc = bss_sbrk_did_unexec;
@@ -233,65 +252,80 @@ emacs_get_current_dir_name (void)
233# endif 252# endif
234 if (use_libc) 253 if (use_libc)
235 { 254 {
236 /* GNU/Linux get_current_dir_name can return a string starting 255 /* For an unreachable directory, this returns a string that starts
237 with "(unreachable)" (Bug#27871). */ 256 with "(unreachable)"; see Bug#27871. */
238 char *wd = get_current_dir_name (); 257 pwd = get_current_dir_name ();
239 if (wd && ! (IS_DIRECTORY_SEP (*wd) || (*wd && IS_DEVICE_SEP (wd[1])))) 258 if (pwd)
240 { 259 {
241 free (wd); 260 if (strlen (pwd) < dirsize_max)
242 errno = ENOENT; 261 return pwd;
243 return NULL; 262 free (pwd);
263 errno = ERANGE;
244 } 264 }
245 return wd; 265 return NULL;
246 } 266 }
247# endif 267# endif
248 268
249 char *buf; 269 size_t pwdlen;
250 char *pwd = getenv ("PWD");
251 struct stat dotstat, pwdstat; 270 struct stat dotstat, pwdstat;
271 pwd = getenv ("PWD");
272
252 /* If PWD is accurate, use it instead of calling getcwd. PWD is 273 /* If PWD is accurate, use it instead of calling getcwd. PWD is
253 sometimes a nicer name, and using it may avoid a fatal error if a 274 sometimes a nicer name, and using it may avoid a fatal error if a
254 parent directory is searchable but not readable. */ 275 parent directory is searchable but not readable. */
255 if (pwd 276 if (pwd
256 && (IS_DIRECTORY_SEP (*pwd) || (*pwd && IS_DEVICE_SEP (pwd[1]))) 277 && (pwdlen = strlen (pwd)) < bufsize_max
278 && IS_DIRECTORY_SEP (pwd[pwdlen && IS_DEVICE_SEP (pwd[1]) ? 2 : 0])
257 && stat (pwd, &pwdstat) == 0 279 && stat (pwd, &pwdstat) == 0
258 && stat (".", &dotstat) == 0 280 && stat (".", &dotstat) == 0
259 && dotstat.st_ino == pwdstat.st_ino 281 && dotstat.st_ino == pwdstat.st_ino
260 && dotstat.st_dev == pwdstat.st_dev 282 && dotstat.st_dev == pwdstat.st_dev)
261#ifdef MAXPATHLEN
262 && strlen (pwd) < MAXPATHLEN
263#endif
264 )
265 { 283 {
266 buf = malloc (strlen (pwd) + 1); 284 char *buf = malloc (pwdlen + 1);
267 if (!buf) 285 if (!buf)
268 return NULL; 286 return NULL;
269 strcpy (buf, pwd); 287 return memcpy (buf, pwd, pwdlen + 1);
270 } 288 }
271 else 289 else
272 { 290 {
273 size_t buf_size = 1024; 291 ptrdiff_t buf_size = min (bufsize_max, 1024);
274 buf = malloc (buf_size); 292 char *buf = malloc (buf_size);
275 if (!buf) 293 if (!buf)
276 return NULL; 294 return NULL;
277 for (;;) 295 for (;;)
278 { 296 {
279 if (getcwd (buf, buf_size) == buf) 297 if (getcwd (buf, buf_size) == buf)
280 break; 298 return buf;
281 if (errno != ERANGE) 299 int getcwd_errno = errno;
300 if (getcwd_errno != ERANGE || buf_size == bufsize_max)
282 { 301 {
283 int tmp_errno = errno;
284 free (buf); 302 free (buf);
285 errno = tmp_errno; 303 errno = getcwd_errno;
286 return NULL; 304 return NULL;
287 } 305 }
288 buf_size *= 2; 306 buf_size = buf_size <= bufsize_max / 2 ? 2 * buf_size : bufsize_max;
289 buf = realloc (buf, buf_size); 307 buf = realloc (buf, buf_size);
290 if (!buf) 308 if (!buf)
291 return NULL; 309 return NULL;
292 } 310 }
293 } 311 }
294 return buf; 312}
313
314/* Return the current working directory. The result should be freed
315 with 'free'. Return NULL (setting errno) on errors; an unreachable
316 directory (e.g., its name starts with '(') counts as an error. */
317
318char *
319emacs_get_current_dir_name (void)
320{
321 char *dir = get_current_dir_name_or_unreachable ();
322 if (dir && *dir == '(')
323 {
324 free (dir);
325 errno = ENOENT;
326 return NULL;
327 }
328 return dir;
295} 329}
296 330
297 331
diff --git a/src/termhooks.h b/src/termhooks.h
index b5171bf1229..dd6044aabd5 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -625,7 +625,7 @@ struct terminal
625 TERMINAL indicates which terminal device to read from. Input 625 TERMINAL indicates which terminal device to read from. Input
626 events should be read into HOLD_QUIT. 626 events should be read into HOLD_QUIT.
627 627
628 A positive return value indicates that that many input events 628 A positive return value N indicates that N input events
629 were read into BUF. 629 were read into BUF.
630 Zero means no events were immediately available. 630 Zero means no events were immediately available.
631 A value of -1 means a transient read error, while -2 indicates 631 A value of -1 means a transient read error, while -2 indicates
diff --git a/src/w32inevt.c b/src/w32inevt.c
index 0b0f3f9e669..9d79bd46fb3 100644
--- a/src/w32inevt.c
+++ b/src/w32inevt.c
@@ -526,7 +526,7 @@ do_mouse_event (MOUSE_EVENT_RECORD *event,
526 help_echo_window, help_echo_object, 526 help_echo_window, help_echo_object,
527 help_echo_pos); 527 help_echo_pos);
528 } 528 }
529 /* We already called kbd_buffer_store_event, so indicate the 529 /* We already called kbd_buffer_store_event, so indicate to
530 the caller it shouldn't. */ 530 the caller it shouldn't. */
531 return 0; 531 return 0;
532 } 532 }
diff --git a/src/w32proc.c b/src/w32proc.c
index ca59f995e63..0046c9e85dc 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -838,7 +838,7 @@ alarm (int seconds)
838 updates the status of the read accordingly, and signals the 2nd 838 updates the status of the read accordingly, and signals the 2nd
839 event object, char_avail, on whose handle sys_select is 839 event object, char_avail, on whose handle sys_select is
840 waiting. This tells sys_select that the file descriptor 840 waiting. This tells sys_select that the file descriptor
841 allocated for the subprocess or the the stream is ready to be 841 allocated for the subprocess or the stream is ready to be
842 read from. 842 read from.
843 843
844 When the subprocess exits or the network/serial stream is closed, 844 When the subprocess exits or the network/serial stream is closed,
diff --git a/src/xdisp.c b/src/xdisp.c
index 141275f15a0..b14b7daf2b0 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -17036,6 +17036,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
17036 = try_window_reusing_current_matrix (w))) 17036 = try_window_reusing_current_matrix (w)))
17037 { 17037 {
17038 IF_DEBUG (debug_method_add (w, "1")); 17038 IF_DEBUG (debug_method_add (w, "1"));
17039 clear_glyph_matrix (w->desired_matrix);
17039 if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0) 17040 if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0)
17040 /* -1 means we need to scroll. 17041 /* -1 means we need to scroll.
17041 0 means we need new matrices, but fonts_changed 17042 0 means we need new matrices, but fonts_changed
diff --git a/src/xsmfns.c b/src/xsmfns.c
index 2cb4f3eca56..fb0d01bb66c 100644
--- a/src/xsmfns.c
+++ b/src/xsmfns.c
@@ -401,12 +401,14 @@ x_session_initialize (struct x_display_info *dpyinfo)
401 ptrdiff_t name_len = 0; 401 ptrdiff_t name_len = 0;
402 402
403 /* libSM seems to crash if pwd is missing - see bug#18851. */ 403 /* libSM seems to crash if pwd is missing - see bug#18851. */
404 if (! emacs_get_current_dir_name ()) 404 char *pwd = emacs_get_current_dir_name ();
405 if (!pwd)
405 { 406 {
406 fprintf (stderr, "Disabling session management due to pwd error: %s\n", 407 fprintf (stderr, "Disabling session management due to pwd error: %s\n",
407 emacs_strerror (errno)); 408 emacs_strerror (errno));
408 return; 409 return;
409 } 410 }
411 xfree (pwd);
410 412
411 ice_fd = -1; 413 ice_fd = -1;
412 doing_interact = false; 414 doing_interact = false;
diff --git a/test/lisp/kmacro-tests.el b/test/lisp/kmacro-tests.el
index a691ec84549..9f3eeafe486 100644
--- a/test/lisp/kmacro-tests.el
+++ b/test/lisp/kmacro-tests.el
@@ -248,7 +248,7 @@ cause the current test to fail."
248 (kmacro-tests-simulate-command '(kmacro-set-counter 1)) 248 (kmacro-tests-simulate-command '(kmacro-set-counter 1))
249 (kmacro-tests-should-insert "1" 249 (kmacro-tests-should-insert "1"
250 (kmacro-tests-simulate-command '(kmacro-insert-counter nil))) 250 (kmacro-tests-simulate-command '(kmacro-insert-counter nil)))
251 ;; Using universal arg to to set counter should reset to starting value. 251 ;; Using universal arg to set counter should reset to starting value.
252 (kmacro-tests-simulate-command '(kmacro-set-counter (4)) '(4)) 252 (kmacro-tests-simulate-command '(kmacro-set-counter (4)) '(4))
253 (kmacro-tests-should-insert "5" 253 (kmacro-tests-should-insert "5"
254 (kmacro-tests-simulate-command '(kmacro-insert-counter nil)))) 254 (kmacro-tests-simulate-command '(kmacro-insert-counter nil))))
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index a8fe06d4e67..7cc0779b81c 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -140,7 +140,7 @@ This shall used dynamically bound only.")
140 140
141(defmacro tramp--test-instrument-test-case (verbose &rest body) 141(defmacro tramp--test-instrument-test-case (verbose &rest body)
142 "Run BODY with `tramp-verbose' equal VERBOSE. 142 "Run BODY with `tramp-verbose' equal VERBOSE.
143Print the the content of the Tramp debug buffer, if BODY does not 143Print the content of the Tramp debug buffer, if BODY does not
144eval properly in `should' or `should-not'. `should-error' is not 144eval properly in `should' or `should-not'. `should-error' is not
145handled properly. BODY shall not contain a timeout." 145handled properly. BODY shall not contain a timeout."
146 (declare (indent 1) (debug (natnump body))) 146 (declare (indent 1) (debug (natnump body)))
@@ -2105,7 +2105,10 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
2105 (should-error (make-directory tmp-name2) :type 'file-error) 2105 (should-error (make-directory tmp-name2) :type 'file-error)
2106 (make-directory tmp-name2 'parents) 2106 (make-directory tmp-name2 'parents)
2107 (should (file-directory-p tmp-name2)) 2107 (should (file-directory-p tmp-name2))
2108 (should (file-accessible-directory-p tmp-name2))) 2108 (should (file-accessible-directory-p tmp-name2))
2109 ;; If PARENTS is non-nil, `make-directory' shall not
2110 ;; signal an error when DIR exists already.
2111 (make-directory tmp-name2 'parents))
2109 2112
2110 ;; Cleanup. 2113 ;; Cleanup.
2111 (ignore-errors (delete-directory tmp-name1 'recursive)))))) 2114 (ignore-errors (delete-directory tmp-name1 'recursive))))))
diff --git a/test/lisp/progmodes/flymake-tests.el b/test/lisp/progmodes/flymake-tests.el
index 5e042f2b082..0b29b6a9715 100644
--- a/test/lisp/progmodes/flymake-tests.el
+++ b/test/lisp/progmodes/flymake-tests.el
@@ -73,7 +73,9 @@ SEVERITY-PREDICATE is used to setup
73 (when sev-pred-supplied-p 73 (when sev-pred-supplied-p
74 (setq-local flymake-proc-diagnostic-type-pred severity-predicate)) 74 (setq-local flymake-proc-diagnostic-type-pred severity-predicate))
75 (goto-char (point-min)) 75 (goto-char (point-min))
76 (unless flymake-mode (flymake-mode 1)) 76 (let ((flymake-start-on-flymake-mode nil))
77 (unless flymake-mode (flymake-mode 1)))
78 (flymake-start)
77 (flymake-tests--wait-for-backends) 79 (flymake-tests--wait-for-backends)
78 (funcall fn))) 80 (funcall fn)))
79 (and buffer 81 (and buffer
@@ -230,7 +232,9 @@ SEVERITY-PREDICATE is used to setup
230 'crashing-backend 232 'crashing-backend
231 )) 233 ))
232 (flymake-wrap-around nil)) 234 (flymake-wrap-around nil))
233 (flymake-mode) 235 (let ((flymake-start-on-flymake-mode nil))
236 (flymake-mode))
237 (flymake-start)
234 238
235 (flymake-tests--assert-set (flymake-running-backends) 239 (flymake-tests--assert-set (flymake-running-backends)
236 (error-backend warning-backend panicking-backend) 240 (error-backend warning-backend panicking-backend)
@@ -299,7 +303,9 @@ SEVERITY-PREDICATE is used to setup
299 (let ((flymake-diagnostic-functions 303 (let ((flymake-diagnostic-functions
300 (list 'eager-backend)) 304 (list 'eager-backend))
301 (flymake-wrap-around nil)) 305 (flymake-wrap-around nil))
302 (flymake-mode) 306 (let ((flymake-start-on-flymake-mode nil))
307 (flymake-mode))
308 (flymake-start)
303 (flymake-tests--assert-set (flymake-running-backends) 309 (flymake-tests--assert-set (flymake-running-backends)
304 (eager-backend) ()) 310 (eager-backend) ())
305 (cl-loop until tick repeat 4 do (sleep-for 0.2)) 311 (cl-loop until tick repeat 4 do (sleep-for 0.2))
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el
index 90a627f261e..5133e686a15 100644
--- a/test/lisp/simple-tests.el
+++ b/test/lisp/simple-tests.el
@@ -188,7 +188,7 @@
188;; From 24 Oct - 21 Nov 2015, `open-line' took a second argument 188;; From 24 Oct - 21 Nov 2015, `open-line' took a second argument
189;; INTERACTIVE and ran `post-self-insert-hook' if the argument was 189;; INTERACTIVE and ran `post-self-insert-hook' if the argument was
190;; true. This test tested that. Currently, however, `open-line' 190;; true. This test tested that. Currently, however, `open-line'
191;; does not run run `post-self-insert-hook' at all, so for now 191;; does not run `post-self-insert-hook' at all, so for now
192;; this test just makes sure that it doesn't. 192;; this test just makes sure that it doesn't.
193(ert-deftest open-line-hook () 193(ert-deftest open-line-hook ()
194 (let* ((x 0) 194 (let* ((x 0)