diff options
| author | Paul Eggert | 2017-10-12 13:44:16 -0700 |
|---|---|---|
| committer | Paul Eggert | 2017-10-12 13:44:16 -0700 |
| commit | 3d0d5b4ebdf19876104d23402606f2b3cc636aca (patch) | |
| tree | 87febb7bc2409f9502c86802a46915c01c546e7c | |
| parent | 36375d35aa06e84865cce678559ddfa8f79a9775 (diff) | |
| parent | 05d0c0f80291d25ea228d4a8572d58540bf08b52 (diff) | |
| download | emacs-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
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 | ||
| 106 | Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See | 106 | Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See |
| 107 | https://www.gnu.org/software/emacs/manual/html_node/ert/ | 107 | https://www.gnu.org/software/emacs/manual/html_node/ert/ |
| 108 | or run 'info "(ert)"' for for more information on writing and running | 108 | or run 'info "(ert)"' for more information on writing and running |
| 109 | tests. | 109 | tests. |
| 110 | 110 | ||
| 111 | If your test lasts longer than some few seconds, mark it in its | 111 | If 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 | ||
| 4416 | 2016-05-01 Lars Ingebrigtsen <larsi@gnus.org> | 4416 | 2016-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 @@ | |||
| 1 | 2017-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 | |||
| 8 | 2017-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 | |||
| 17 | 2017-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 | |||
| 24 | 2017-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 | |||
| 37 | 2017-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 | |||
| 53 | 2017-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 | |||
| 71 | 2017-10-10 João Távora <joaotavora@gmail.com> | ||
| 72 | |||
| 73 | * etc/NEWS (Flymake): Rewrite entry. | ||
| 74 | |||
| 75 | 2017-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 | |||
| 101 | 2017-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 | |||
| 110 | 2017-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 | |||
| 117 | 2017-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 | |||
| 139 | 2017-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 | |||
| 149 | 2017-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 | |||
| 158 | 2017-10-09 Nicolas Petton <nicolas@petton.fr> | ||
| 159 | |||
| 160 | * admin/authors.el (authors-renamed-files-alist): addition. | ||
| 161 | |||
| 162 | 2017-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 | |||
| 169 | 2017-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 | |||
| 177 | 2017-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 | |||
| 184 | 2017-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 | |||
| 193 | 2017-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 | |||
| 200 | 2017-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 | |||
| 208 | 2017-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 | |||
| 217 | 2017-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 | |||
| 243 | 2017-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 | |||
| 250 | 2017-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 | |||
| 260 | 2017-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 | |||
| 272 | 2017-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 | |||
| 279 | 2017-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 | |||
| 286 | 2017-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 | |||
| 297 | 2017-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 | |||
| 308 | 2017-10-08 Paul Eggert <eggert@cs.ucla.edu> | ||
| 309 | |||
| 310 | * src/xsmfns.c (x_session_initialize): Fix memory leak. | ||
| 311 | |||
| 312 | 2017-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 | |||
| 325 | 2017-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 | |||
| 334 | 2017-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 | |||
| 341 | 2017-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 | |||
| 348 | 2017-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 | |||
| 360 | 2017-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 | |||
| 367 | 2017-10-07 Piotr Trojanek <piotr.trojanek@gmail.com> | ||
| 368 | |||
| 369 | * src/gnutls.c (syms_of_gnutls): Remove duplicated call to DEFSYM. | ||
| 370 | |||
| 371 | 2017-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 | |||
| 378 | 2017-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 | |||
| 390 | 2017-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 | |||
| 416 | 2017-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 | |||
| 423 | 2017-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 | |||
| 434 | 2017-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 | |||
| 447 | 2017-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 | |||
| 453 | 2017-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 | |||
| 462 | 2017-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 | |||
| 468 | 2017-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 | |||
| 490 | 2017-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 | |||
| 499 | 2017-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 | |||
| 508 | 2017-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 | |||
| 519 | 2017-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 | |||
| 1 | 2017-10-05 Nicolas Petton <nicolas@petton.fr> | 527 | 2017-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 | ||
| 1870 | 2017-09-25 Michael Albinus <michael.albinus@gmx.de> | 2396 | 2017-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 | ||
| 1874 | 2017-09-25 Mark Oteiza <mvoteiza@udel.edu> | 2401 | 2017-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 | ||
| 2018 | 2017-09-21 Gemini Lasswell <gazally@runbox.com> | 2545 | 2017-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 | ||
| 4761 | 2017-08-22 Michael Albinus <michael.albinus@gmx.de> | 5288 | 2017-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 | ||
| 6208 | 2017-08-06 Tino Calancha <tino.calancha@gmail.com> | 6735 | 2017-08-06 Tino Calancha <tino.calancha@gmail.com> |
| @@ -6700,7 +7227,8 @@ | |||
| 6700 | 7227 | ||
| 6701 | 2017-07-31 Tino Calancha <tino.calancha@gmail.com> | 7228 | 2017-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 | ||
| 6705 | 2017-07-31 Paul Eggert <eggert@cs.ucla.edu> | 7233 | 2017-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 | ||
| 7050 | 2017-07-25 Tino Calancha <tino.calancha@gmail.com> | 7578 | 2017-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 | ||
| 7591 | 2017-07-18 Stefan Monnier <monnier@iro.umontreal.ca> | 8119 | 2017-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 | ||
| 7595 | 2017-07-18 Eli Zaretskii <eliz@gnu.org> | 8123 | 2017-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 | ||
| 9130 | 2017-07-03 R. Bernstein <rocky@gnu.org> | 9658 | 2017-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 | ||
| 10596 | 2017-06-19 Katsumi Yamaoka <yamaoka@jpl.org> | 11124 | 2017-06-19 Katsumi Yamaoka <yamaoka@jpl.org> |
| 10597 | 11125 | ||
| @@ -10608,8 +11136,8 @@ | |||
| 10608 | 11136 | ||
| 10609 | 2017-06-18 Andreas Schwab <schwab@linux-m68k.org> | 11137 | 2017-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 | ||
| 10614 | 2017-06-18 Paul Eggert <eggert@cs.ucla.edu> | 11142 | 2017-06-18 Paul Eggert <eggert@cs.ucla.edu> |
| 10615 | 11143 | ||
| @@ -10720,8 +11248,8 @@ | |||
| 10720 | 11248 | ||
| 10721 | 2017-06-17 Andreas Schwab <schwab@linux-m68k.org> | 11249 | 2017-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 | ||
| 10726 | 2017-06-17 Simen Heggestøyl <simenheg@gmail.com> | 11254 | 2017-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 | ||
| 10826 | 2017-06-15 Alan Mackenzie <acm@muc.de> | 11354 | 2017-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 | ||
| 12299 | 2017-05-30 Alan Mackenzie <acm@muc.de> | 12827 | 2017-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 | ||
| 13214 | 2017-05-21 Philipp Stephani <phst@google.com> | 13742 | 2017-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 | ||
| 14150 | 2017-05-13 Philipp Stephani <phst@google.com> | 14678 | 2017-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 | ||
| 15581 | 2017-04-24 Lars Ingebrigtsen <larsi@gnus.org> | 16109 | 2017-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 | ||
| 16100 | 2017-04-17 Paul Eggert <eggert@Penguin.CS.UCLA.EDU> | 16628 | 2017-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 | ||
| 16776 | 2017-04-10 Michael Albinus <michael.albinus@gmx.de> | 17304 | 2017-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 | ||
| 16967 | 2017-04-08 Paul Eggert <eggert@cs.ucla.edu> | 17495 | 2017-04-08 Paul Eggert <eggert@cs.ucla.edu> |
| 16968 | 17496 | ||
| @@ -17051,7 +17579,7 @@ | |||
| 17051 | 17579 | ||
| 17052 | 2017-04-07 Lars Brinkhoff <lars@nocrew.org> | 17580 | 2017-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 | ||
| 17056 | 2017-04-07 Paul Eggert <eggert@cs.ucla.edu> | 17584 | 2017-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 | ||
| 17079 | 2017-04-07 Noam Postavsky <npostavs@users.sourceforge.net> | 17607 | 2017-04-07 Noam Postavsky <npostavs@users.sourceforge.net> |
| @@ -17197,7 +17725,8 @@ | |||
| 17197 | 17725 | ||
| 17198 | 2017-04-07 Hong Xu <hong@topbug.net> | 17726 | 2017-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 | ||
| 17202 | 2017-04-07 Noam Postavsky <npostavs@gmail.com> | 17731 | 2017-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 | ||
| 17434 | 2017-04-06 Stefan Monnier <monnier@iro.umontreal.ca> | 17963 | 2017-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 | ||
| 18021 | 2017-03-31 Niels Möller <nisse@lysator.liu.se> (tiny change) | 18550 | 2017-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 | ||
| 18246 | 2017-03-26 Eli Zaretskii <eliz@gnu.org> | 18776 | 2017-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 | ||
| 18442 | 2017-03-23 Michael Albinus <michael.albinus@gmx.de> | 18973 | 2017-03-23 Michael Albinus <michael.albinus@gmx.de> |
| @@ -19668,10 +20199,10 @@ | |||
| 19668 | 20199 | ||
| 19669 | 2017-03-08 Andreas Schwab <schwab@linux-m68k.org> | 20200 | 2017-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 | ||
| 19677 | 2017-03-08 Thien-Thi Nguyen <ttn@gnu.org> | 20208 | 2017-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 | ||
| 20224 | 2017-03-02 Glenn Morris <rgm@gnu.org> | 20755 | 2017-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 | ||
| 20228 | 2017-03-02 Glenn Morris <rgm@gnu.org> | 20759 | 2017-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 | ||
| 20355 | 2017-02-28 Stefan Monnier <monnier@iro.umontreal.ca> | 20886 | 2017-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 | ||
| 22380 | 2017-02-05 Vibhav Pant <vibhavp@gmail.com> | 22911 | 2017-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 | ||
| 22384 | 2017-02-05 Vibhav Pant <vibhavp@gmail.com> | 22915 | 2017-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 | ||
| 23354 | 2017-01-27 Eli Zaretskii <eliz@gnu.org> | 23885 | 2017-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 | ||
| 23383 | 2017-01-27 Lars Ingebrigtsen <larsi@gnus.org> | 23915 | 2017-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 | ||
| 24320 | 2017-01-15 Vibhav Pant <vibhavp@gmail.com> | 24852 | 2017-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 | ||
| 24771 | 2017-01-08 Paul Eggert <eggert@cs.ucla.edu> | 25304 | 2017-01-08 Paul Eggert <eggert@cs.ucla.edu> |
| 24772 | 25305 | ||
| @@ -25555,7 +26088,7 @@ | |||
| 25555 | 26088 | ||
| 25556 | 2016-12-29 Mike Kupfer <mkupfer@alum.berkeley.edu> | 26089 | 2016-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 | ||
| 25560 | 2016-12-29 Alan Mackenzie <acm@muc.de> | 26093 | 2016-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 | ||
| 25857 | 2016-12-24 Paul Eggert <eggert@cs.ucla.edu> | 26390 | 2016-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 | ||
| 25938 | 2016-12-23 Eli Zaretskii <eliz@gnu.org> | 26471 | 2016-12-23 Eli Zaretskii <eliz@gnu.org> |
| @@ -26040,7 +26573,8 @@ | |||
| 26040 | 26573 | ||
| 26041 | 2016-12-21 Stefan Monnier <monnier@iro.umontreal.ca> | 26574 | 2016-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 | ||
| 26045 | 2016-12-21 Eli Zaretskii <eliz@gnu.org> | 26579 | 2016-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 | ||
| 26250 | 2016-12-19 Glenn Morris <rgm@gnu.org> | 26784 | 2016-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 | ||
| 26532 | 2016-12-15 Paul Eggert <eggert@cs.ucla.edu> | 27066 | 2016-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 | ||
| 26536 | 2016-12-15 Mark Oteiza <mvoteiza@udel.edu> | 27071 | 2016-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 | ||
| 28039 | 2012-08-15 Tom Tromey <tromey@redhat.com> | 28574 | 2012-08-15 Tom Tromey <tromey@redhat.com> |
| 28040 | 28575 | ||
| @@ -50754,7 +51289,7 @@ | |||
| 50754 | 51289 | ||
| 50755 | This file records repository revisions from | 51290 | This file records repository revisions from |
| 50756 | commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to | 51291 | commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to |
| 50757 | commit 82d2a05a74c120480dc1b68243430c9417bfc523 (inclusive). | 51292 | commit e8a7c41b4e2dc9df18038d2931ed883946a2bb50 (inclusive). |
| 50758 | See ChangeLog.1 for earlier changes. | 51293 | See 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 | |||
| 54 | to rebuild, avoiding spurious problems. | 54 | to rebuild, avoiding spurious problems. |
| 55 | 55 | ||
| 56 | Occasionally, there are changes that 'make bootstrap' won't be able to | 56 | Occasionally, there are changes that 'make bootstrap' won't be able to |
| 57 | handle. The most thorough cleaning can be achieved by 'git clean -fx' | 57 | handle. The most thorough cleaning can be achieved by 'git clean -fdx' |
| 58 | which will leave you with only files from the git repository. Here | 58 | which will leave you with only files from the git repository. Here |
| 59 | are some faster methods for a couple of particular error cases: | 59 | are 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 |
| 27 | For similar reasons, we've reverted back to building our own version | 27 | For similar reasons, we've reverted back to building our own version |
| 28 | of of @command{movemail} that retrieves POP3 mail as clear text via | 28 | of @command{movemail} that retrieves POP3 mail as clear text via |
| 29 | insecure channels. As you move back in time, the availability of | 29 | insecure channels. As you move back in time, the availability of |
| 30 | secure alternatives to POP3 will diminish, and we are only keen to | 30 | secure alternatives to POP3 will diminish, and we are only keen to |
| 31 | support that. We've also removed the @option{--with-mailutils} | 31 | support 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 | ||
| 1007 | side-by-side windows visually. When vertical scroll bars are disabled, | ||
| 1008 | Emacs by default separates such windows with the help of a one-pixel | ||
| 1009 | wide @dfn{vertical border}. That border occupies the first pixel column | ||
| 1010 | of the window on the right and may thus overdraw the leftmost pixels of | ||
| 1011 | any glyph displayed there. If these pixels convey important | ||
| 1012 | information, you can make them visible by enabling window dividers, see | ||
| 1013 | @ref{Window Dividers}. To replicate the look of vertical borders, set | ||
| 1014 | the @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 | ||
| 1017 | Manual}. | ||
| 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}. | |||
| 1060 | customize the options @code{window-divider-default-bottom-width} and | 1074 | customize 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 |
| 1078 | make the first pixel column of a window visible which would be otherwise | ||
| 1079 | covered by the vertical border used to separate side-by-side windows | ||
| 1080 | (@pxref{Scroll Bars}). | ||
| 1081 | |||
| 1082 | For more details about window dividers see @ref{Window Dividers,, | ||
| 1064 | Window Dividers, elisp, The Emacs Lisp Reference Manual}. | 1083 | Window 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 |
| 1364 | encoded in a simple code called @dfn{rot13}---so named because it | 1364 | encoded in a simple code called @dfn{rot13}---so named because it |
| 1365 | rotates the alphabet by 13 letters. This code is not for secrecy, as it | 1365 | rotates the alphabet by 13 letters. This code is not for secrecy, as it |
| 1366 | provides none; rather, it enables those who wish to to avoid | 1366 | provides none; rather, it enables those who wish to avoid |
| 1367 | seeing the real text of the message. For example, a review of a film | 1367 | seeing the real text of the message. For example, a review of a film |
| 1368 | might use rot13 to hide important plot points. | 1368 | might 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 |
| 1734 | output of @TeX{} also goes in this directory. To run @TeX{} in a | 1734 | output of @TeX{} also goes in this directory. To run @TeX{} in a |
| 1735 | different directory, change the variable @code{tex-directory} to the | 1735 | different directory, change the variable @code{tex-directory} to |
| 1736 | the desired directory. If your environment variable @env{TEXINPUTS} | 1736 | the desired directory. If your environment variable @env{TEXINPUTS} |
| 1737 | contains relative names, or if your files contains | 1737 | contains 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 |
| 832 | paragraph, and ``come up for air'' between paragraphs.} | 832 | paragraph, 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 |
| 835 | done, finished, that I know everything I need (with the | 835 | done, finished, that I know everything I need (with the |
| 836 | possible exception of the case when the next paragraph starts talking | 836 | possible exception of the case when the next paragraph starts talking |
| 837 | about it in more detail). I expect that a well written reference manual | 837 | about 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 |
| 136 | If this variable has a non-@code{nil} value (the default), running the | 136 | If this variable has a non-@code{nil} value (the default), running the |
| 137 | command @code{eval-expression} causes @code{debug-on-error} to be | 137 | command @code{eval-expression} causes @code{debug-on-error} to be |
| 138 | temporarily bound to to @code{t}. @xref{Lisp Eval,, Evaluating | 138 | temporarily bound to @code{t}. @xref{Lisp Eval,, Evaluating |
| 139 | Emacs-Lisp Expressions, emacs, The GNU Emacs Manual}. | 139 | Emacs-Lisp Expressions, emacs, The GNU Emacs Manual}. |
| 140 | 140 | ||
| 141 | If @code{eval-expression-debug-on-error} is @code{nil}, then the value | 141 | If @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 | |||
| 327 | The matcher processes a @samp{*} construct by matching, immediately, as | 327 | The matcher processes a @samp{*} construct by matching, immediately, as |
| 328 | many repetitions as can be found. Then it continues with the rest of | 328 | many repetitions as can be found. Then it continues with the rest of |
| 329 | the pattern. If that fails, backtracking occurs, discarding some of the | 329 | the pattern. If that fails, backtracking occurs, discarding some of the |
| 330 | matches of the @samp{*}-modified construct in the hope that that will | 330 | matches of the @samp{*}-modified construct in the hope that this will |
| 331 | make it possible to match the rest of the pattern. For example, in | 331 | make it possible to match the rest of the pattern. For example, in |
| 332 | matching @samp{ca*ar} against the string @samp{caaar}, the @samp{a*} | 332 | matching @samp{ca*ar} against the string @samp{caaar}, the @samp{a*} |
| 333 | first tries to match all three @samp{a}s; but the rest of the pattern is | 333 | first 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 | ||
| 66 | Flymake is a universal on-the-fly buffer checker implemented as an | 68 | Flymake is a universal on-the-fly buffer checker implemented as an |
| 67 | Emacs minor mode. When enabled, Flymake visually annotates the buffer | 69 | Emacs minor mode. When enabled, Flymake visually annotates the buffer |
| 68 | with diagnostic information coming from one or more different sources, | 70 | with diagnostic information coming from one or more different sources, |
| 69 | or @emph{backends}. | 71 | or @dfn{backends}. |
| 70 | |||
| 71 | Historically, Flymake used to accept diagnostics from a single, albeit | ||
| 72 | reasonably flexible, backend. | ||
| 73 | |||
| 74 | This backend isn't (yet) obsolete and so is still available as a | ||
| 75 | fallback and active by default(@pxref{The legacy Proc backend}). It works by | ||
| 76 | selecting a syntax check tool from a preconfigured list (compiler for | ||
| 77 | C++ files, @code{perl} for perl files, etc.), and executing it in the | ||
| 78 | background, passing it a temporary file which is a copy of the current | ||
| 79 | buffer, and parsing the output for known error/warning message | ||
| 80 | patterns. | ||
| 81 | 72 | ||
| 82 | Flymake annotates the buffer by highlighting problematic buffer | 73 | Flymake annotates the buffer by highlighting problematic buffer |
| 83 | regions with a special space. It also displays an overall buffer | 74 | regions with a special space. It displays an overall buffer status in |
| 84 | status in the mode line. Status information displayed by Flymake | 75 | the mode line containing totals for different types of diagnostics. |
| 85 | contains 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 |
| 88 | commands that allow easy navigation to the next/previous erroneous | 78 | commands that allow easy navigation to the next/previous erroneous |
| 89 | line, respectively. If might be a good idea to map them to @kbd{M-n} | 79 | line, respectively. If might be a good idea to map them to @kbd{M-n} |
| 90 | and @kbd{M-p} in @code{flymake-mode}, by adding to your init file: | 80 | and @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: | |||
| 97 | Syntax check is done ``on-the-fly''. It is started whenever | 87 | Syntax 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. |
| 103 | delay is configurable). | 93 | |
| 94 | @item | ||
| 95 | a newline character is added to the buffer, unless | ||
| 96 | @code{flymake-start-syntax-check-on-newline} is nil. | ||
| 97 | |||
| 98 | @item | ||
| 99 | some 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 | ||
| 106 | Flymake is a universal syntax checker in the sense that it's easily | 103 | Flymake is a universal syntax checker in the sense that it's easily |
| 107 | extended to support new backends. @xref{Customizable variables}. | 104 | extended to support new backends (@pxref{Extending Flymake}). |
| 105 | |||
| 106 | Historically, Flymake used to accept diagnostics from a single, albeit | ||
| 107 | reasonably flexible, backend. | ||
| 108 | |||
| 109 | This backend isn't (yet) obsolete, and so is still available as a | ||
| 110 | fallback and active by default (@pxref{The legacy Proc backend}). It works by | ||
| 111 | selecting a syntax check tool from a preconfigured list (compiler for | ||
| 112 | C@t{++} files, @command{perl} for Perl files, etc.), and executing it in the | ||
| 113 | background, passing it a temporary file which is a copy of the current | ||
| 114 | buffer, and parsing the output for known error/warning message | ||
| 115 | patterns. | ||
| 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 | ||
| 113 | Flymake is included with Emacs and its main commands, like | 121 | Flymake 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 |
| 115 | nothing to do by way of installation. | 123 | nothing 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 | ||
| 134 | Flymake is an Emacs minor mode. To use Flymake, you | 143 | Flymake is an Emacs minor mode. To use Flymake, you |
| 135 | must first activate @code{flymake-mode} by using the | 144 | must first activate @code{flymake-mode} by using the command |
| 136 | @code{flymake-mode} function. | 145 | @kbd{flymake-mode}. |
| 137 | 146 | ||
| 138 | Instead of manually activating @code{flymake-mode}, you can configure | 147 | Instead of manually activating @code{flymake-mode}, you can configure |
| 139 | Flymake to automatically enable @code{flymake-mode} upon opening any | 148 | Emacs to automatically enable @code{flymake-mode} upon opening any |
| 140 | file for which syntax check is possible. To do so, place the following | 149 | file for which syntax check is possible. To do so, place the following |
| 141 | line in @code{.emacs}: | 150 | line 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 | ||
| 151 | When @code{flymake-mode} is active, syntax check is started | 162 | When @code{flymake-mode} is active, syntax check is started |
| 152 | automatically on any of the three conditions mentioned above. Syntax | 163 | automatically on any of the three conditions mentioned in |
| 153 | check can also be started manually by using the @code{flymake-start} | 164 | @ref{Overview of Flymake}. Syntax check can also be started manually |
| 154 | function. | 165 | by 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 | ||
| 160 | After syntax check is completed, lines for which at least one error or | 171 | After syntax check is completed, lines for which at least one error or |
| 161 | warning has been reported are highlighted, and total number of errors | 172 | warning has been reported are highlighted, and the total number of errors |
| 162 | and warning is shown in the mode line. Use the following functions to | 173 | and warning is shown in the mode line. Use the following functions to |
| 163 | navigate the highlighted lines. | 174 | navigate 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} | 179 | Moves 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 | ||
| 183 | Moves point to the previous erroneous line. | ||
| 184 | @end table | ||
| 174 | 185 | ||
| 175 | If the user option @code{flymake-wrap-around} is active | 186 | If 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 | ||
| 184 | After syntax check is finished, its status is displayed in the mode line. | 195 | While enabled, Flymake displays its status in the mode line. |
| 185 | The following statuses are defined: | 196 | The 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. |
| 194 | Left-clicking the ``Flymake'' mode line indicator beings the user | 205 | Left-clicking Flymake's mode line indicator pops up a menu listing the |
| 195 | @code{*Flymake log*} buffer where these situations may be investigated | 206 | option to visit Flymake's log buffer. In this buffer these situations |
| 207 | can 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 | |||
| 203 | check process. | 215 | check 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 | |
| 211 | Flymake uses a simple logging facility for indicating important points | 223 | @cindex backends, disabled |
| 224 | Some backends may take longer than others to respond or complete, and | ||
| 225 | some may decide to @emph{disable} themselves if they are not suitable | ||
| 226 | for the current buffer. A disabled backend is not tried again for | ||
| 227 | future checks of the current buffer. | ||
| 228 | |||
| 229 | @findex flymake-reporting-backends | ||
| 230 | @findex flymake-running-backends | ||
| 231 | @findex flymake-disabled-backends | ||
| 232 | The commands @code{flymake-reporting-backends}, | ||
| 233 | @code{flymake-running-backends} and @code{flymake-disabled-backends} | ||
| 234 | show the backends currently used and those which are disabled. | ||
| 235 | |||
| 236 | @cindex reset disabled backends | ||
| 237 | Toggling @code{flymake-mode} off and on again, or invoking | ||
| 238 | @code{flymake-start} with a prefix argument is one way to reset the | ||
| 239 | disabled backend list, so that they will be tried again in the next check. | ||
| 240 | |||
| 241 | @cindex logging | ||
| 242 | @cindex flymake logging | ||
| 243 | Flymake also uses a simple logging facility for indicating important points | ||
| 212 | in the control flow. The logging facility sends logging messages to | 244 | in the control flow. The logging facility sends logging messages to |
| 213 | the @file{*Flymake log*} buffer. The information logged can be used for | 245 | the @file{*Flymake log*} buffer. The information logged can be used for |
| 214 | resolving various problems related to Flymake. | 246 | resolving various problems related to Flymake. |
| 215 | 247 | ||
| 248 | @vindex warning-minimum-log-level | ||
| 249 | @vindex warning-minimum-level | ||
| 216 | Logging output is controlled by the Emacs @code{warning-minimum-log-level} | 250 | Logging output is controlled by the Emacs @code{warning-minimum-log-level} |
| 217 | and @code{warning-minimum-level} variables. | 251 | and @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 | ||
| 223 | This section summarizes variables used for the configuration of the | 258 | This section summarizes customization variables used for the |
| 224 | Flymake user interface. | 259 | configuration 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 |
| 228 | If any changes are made to the buffer, syntax check is automatically | 263 | If any changes are made to the buffer, syntax check is automatically |
| 229 | started after @code{flymake-no-changes-timeout} seconds. | 264 | started after this many seconds, unless the user makes another change, |
| 265 | which resets the timer. | ||
| 230 | 266 | ||
| 231 | @item flymake-start-syntax-check-on-newline | 267 | @item flymake-start-syntax-check-on-newline |
| 232 | A boolean flag indicating whether to start syntax check after a | 268 | A boolean flag indicating whether to start syntax check immediately |
| 233 | newline character is added to the buffer. | 269 | after a newline character is inserted into the buffer. |
| 270 | |||
| 271 | @item flymake-start-on-flymake-mode | ||
| 272 | A boolean flag indicating whether to start syntax check immediately | ||
| 273 | after enabling @code{flymake-mode}. | ||
| 234 | 274 | ||
| 235 | @item flymake-error | 275 | @item flymake-error |
| 236 | A custom face for highlighting regions for which an error has been | 276 | A 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 |
| 259 | If non-nil, moving to errors with @code{flymake-goto-next-error} and | 299 | If 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 | |||
| 307 | Flymake can primarily be extended in one of two ways: | ||
| 308 | |||
| 309 | @enumerate | ||
| 310 | @item | ||
| 311 | By changing the look and feel of the annotations produced by the | ||
| 312 | different backends. | ||
| 313 | |||
| 314 | @item | ||
| 315 | By adding a new buffer-checking backend. | ||
| 316 | @end enumerate | ||
| 317 | |||
| 318 | The 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 | ||
| 331 | The variable @code{flymake-diagnostic-types-alist} is looked up by | ||
| 332 | Flymake every time an annotation for a diagnostic is created in the | ||
| 333 | buffer. Specifically, this variable holds a table of correspondence | ||
| 334 | between symbols designating diagnostic types and an additional | ||
| 335 | sub-table of properties pertaining to each diagnostic type. | ||
| 336 | |||
| 337 | Both tables are laid out in association list (@pxref{Association | ||
| 338 | Lists,,, elisp, The Emacs Lisp Reference Manual}) format, and thus can | ||
| 339 | be conveniently accessed with the functions of the @code{assoc} | ||
| 340 | family. | ||
| 341 | |||
| 342 | You can use any symbol-value association in the properties sub-table, | ||
| 343 | but some symbols have special meaning as to where and how Flymake | ||
| 344 | presents 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 | ||
| 352 | the syntax of @code{flymake-error-bitmap} (@pxref{Customizable | ||
| 353 | variables}). It is overridden by any @code{before-string} overlay | ||
| 354 | property. | ||
| 355 | |||
| 356 | @item | ||
| 357 | @cindex severity of diagnostic | ||
| 358 | @code{severity} is a non-negative integer specifying the diagnostic's | ||
| 359 | severity. The higher the value, the more serious is the error. If | ||
| 360 | the overlay property @code{priority} is not specified, @code{severity} | ||
| 361 | is used to set it and help sort overlapping overlays. | ||
| 362 | |||
| 363 | @item | ||
| 364 | Every property pertaining to overlays (@pxref{Overlay Properties,,, | ||
| 365 | elisp, The Emacs Lisp Reference Manual}), except @code{category} and | ||
| 366 | @code{evaporate}. These properties are used to affect the appearance | ||
| 367 | of Flymake annotations. | ||
| 368 | |||
| 369 | As an example, here's how to make errors (diagnostics of the type | ||
| 370 | @code{:error}) stand out even more prominently in the buffer, by | ||
| 371 | raising 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 | ||
| 381 | the 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 | ||
| 388 | Three 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 | ||
| 392 | symbols @code{flymake-error}, @code{flymake-warning} and | ||
| 393 | @code{flymake-note}. | ||
| 394 | |||
| 395 | These category symbols' plists is where the values of customizable | ||
| 396 | variables and faces such as @code{flymake-error-bitmap} are found. | ||
| 397 | Thus, if you change their plists, Flymake may stop honoring these | ||
| 398 | user customizations. | ||
| 399 | |||
| 400 | The @code{flymake-category} special property is also especially useful | ||
| 401 | for backends which create diagnostics objects with non-default | ||
| 402 | types that differ from an existing type by only a few properties | ||
| 403 | (@pxref{Flymake utility functions}). | ||
| 404 | |||
| 405 | As an example, consider configuring a new diagnostic type | ||
| 406 | @code{:low-priority-note} that behaves much like the @code{:note} | ||
| 407 | priority 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 | ||
| 417 | As you might have guessed, Flymake's annotations are implemented as | ||
| 418 | overlays (@pxref{Overlays,,, elisp, The Emacs Lisp Reference Manual}). | ||
| 419 | Along with the properties that you specify for the specific type of | ||
| 420 | diagnostic, Flymake adds the property @code{flymake-text} to these | ||
| 421 | overlays, and sets it to the message string that the backend used to | ||
| 422 | describe the diagnostic. | ||
| 423 | |||
| 424 | Since overlays also support arbitrary keymaps, you can use this | ||
| 425 | property @code{flymake-text} to create interactive annotations, such | ||
| 426 | as in the following example of binding a @kbd{mouse-3} event (middle | ||
| 427 | mouse 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 | ||
| 461 | Flymake backends are Lisp functions placed in the special hook | ||
| 462 | @code{flymake-diagnostic-functions}. | ||
| 463 | |||
| 464 | A backend's responsibility is to diagnose the contents of a buffer for | ||
| 465 | problems, registering the problem's positions, type, and summary | ||
| 466 | description. This information is collected in the form of diagnostic | ||
| 467 | objects created by the function @code{flymake-make-diagnostic} | ||
| 468 | (@pxref{Flymake utility functions}), and | ||
| 469 | then handed over to Flymake, which proceeds to annotate the | ||
| 470 | buffer. | ||
| 471 | |||
| 472 | A request for a buffer check, and the subsequent delivery of | ||
| 473 | diagnostics, are two key events of the interaction between Flymake | ||
| 474 | and backend. Each such event corresponds to a well-defined function | ||
| 475 | calling convention: one for calls made by Flymake into the backend via | ||
| 476 | the backend function, the other in the reverse direction via a | ||
| 477 | callback. To be usable, backends must adhere to both. | ||
| 478 | |||
| 479 | Backend functions must accept an arbitrary number of arguments: | ||
| 480 | |||
| 481 | @itemize | ||
| 482 | @item | ||
| 483 | the first argument is always @var{report-fn}, a callback function | ||
| 484 | detailed below; | ||
| 485 | |||
| 486 | @item | ||
| 487 | the remaining arguments are keyword-value pairs of the | ||
| 488 | form @w{@code{(@var{:key} @var{value} @var{:key2} @var{value2}...)}}. Currently, | ||
| 489 | Flymake provides no such arguments, but backend functions must be | ||
| 490 | prepared to accept (and possibly ignore) any number of them. | ||
| 491 | @end itemize | ||
| 492 | |||
| 493 | Whenever Flymake or the user decide to re-check the buffer, backend | ||
| 494 | functions are called as detailed above, and are expected to initiate | ||
| 495 | this check, but aren't in any way required to complete it before | ||
| 496 | exiting: if the computation involved is expensive, as | ||
| 497 | is often the case with large buffers, that slower task should be | ||
| 498 | scheduled for the future using asynchronous sub-processes | ||
| 499 | (@pxref{Asynchronous Processes,,, elisp, The Emacs Lisp reference | ||
| 500 | manual}) or other asynchronous mechanisms. | ||
| 501 | |||
| 502 | In any case, backend functions are expected to return quickly or | ||
| 503 | signal an error, in which case the backend is disabled | ||
| 504 | (@pxref{Backend exceptions}). | ||
| 505 | |||
| 506 | If the function returns, Flymake considers the backend to be | ||
| 507 | @dfn{running}. If it has not done so already, the backend is expected | ||
| 508 | to call the function @var{report-fn} passed to it, at which point | ||
| 509 | Flymake considers the backend to be @dfn{reporting}. Backends call | ||
| 510 | @var{report-fn} by passing it a single argument @var{report-action} | ||
| 511 | followed 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 | |||
| 514 | Currently accepted values for @var{report-action} are: | ||
| 515 | |||
| 516 | @itemize | ||
| 517 | @item | ||
| 518 | A (possibly empty) list of diagnostic objects created by | ||
| 519 | @code{flymake-make-diagnostic}, causing Flymake to annotate the | ||
| 520 | buffer with this information. | ||
| 521 | |||
| 522 | A backend may call @var{report-fn} repeatedly in this manner, but only | ||
| 523 | until Flymake considers that the most recently requested buffer check | ||
| 524 | is now obsolete, because, say, buffer contents have changed in the | ||
| 525 | meantime. The backend is only given notice of this via a renewed call | ||
| 526 | to the backend function. Thus, to prevent making obsolete reports and | ||
| 527 | wasting resources, backend functions should first cancel any ongoing | ||
| 528 | processing from previous calls. | ||
| 529 | |||
| 530 | @item | ||
| 531 | The symbol @code{:panic}, signaling that the backend has encountered | ||
| 532 | an exceptional situation and should be disabled. | ||
| 533 | @end itemize | ||
| 534 | |||
| 535 | Currently accepted @var{report-key} arguments are: | ||
| 536 | |||
| 537 | @itemize | ||
| 538 | @item | ||
| 539 | @code{:explanation}, whose value should give user-readable | ||
| 540 | details of the situation encountered, if any. | ||
| 541 | |||
| 542 | @item | ||
| 543 | @code{:force}, whose value should be a boolean suggesting | ||
| 544 | that Flymake consider the report even if it was somehow | ||
| 545 | unexpected. | ||
| 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 | ||
| 558 | Before delivering them to Flymake, backends create diagnostic objects | ||
| 559 | by calling the function @code{flymake-make-diagnostic}. | ||
| 560 | |||
| 561 | @deffn Function flymake-make-diagnostic buffer beg end type text | ||
| 562 | Make 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 | ||
| 565 | of the problem detected in this region. | ||
| 566 | @end deffn | ||
| 567 | |||
| 568 | @cindex buffer position from line and column number | ||
| 569 | It is often the case with external syntax tools that a diagnostic's | ||
| 570 | position is reported in terms of a line number, and sometimes a column | ||
| 571 | number. To convert this information into a buffer position, backends | ||
| 572 | can use the following function: | ||
| 573 | |||
| 574 | @deffn Function flymake-diag-region buffer line &optional col | ||
| 575 | Compute @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 | ||
| 577 | for @var{line}. Return nil if the region is invalid. | ||
| 578 | @end deffn | ||
| 579 | |||
| 580 | @cindex add a log message | ||
| 581 | For troubleshooting purposes, backends may record arbitrary | ||
| 582 | exceptional or erroneous situations into the Flymake log | ||
| 583 | buffer (@pxref{Backend exceptions}): | ||
| 584 | |||
| 585 | @deffn Macro flymake-log level msg &optional args | ||
| 586 | Log, 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 | ||
| 589 | used 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 | |||
| 597 | This section presents an annotated example of a complete working | ||
| 598 | Flymake backend. The example illustrates the process of writing a | ||
| 599 | backend as outlined above. | ||
| 600 | |||
| 601 | The backend in question is used for checking Ruby source files. It | ||
| 602 | uses asynchronous sub-processes (@pxref{Asynchronous Processes,,, elisp, | ||
| 603 | The Emacs Lisp Reference Manual}), a common technique for performing | ||
| 604 | parallel processing in Emacs. | ||
| 605 | |||
| 606 | The following code needs lexical binding (@pxref{Using Lexical | ||
| 607 | Binding,,, 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 | ||
| 285 | The backend @code{flymake-proc-legacy-backend} was originally designed | 716 | The backend @code{flymake-proc-legacy-backend} was originally designed |
| 286 | to be extended for supporting new syntax check tools and error message | 717 | to be extended for supporting new syntax check tools and error message |
| 287 | patterns. It is also controlled by its own set of customization variables | 718 | patterns. 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 |
| 295 | A list of @code{(filename-regexp, init-function, cleanup-function | 726 | A list of @code{(filename-regexp, init-function, cleanup-function |
| 296 | getfname-function)} for configuring syntax check tools. @xref{Adding | 727 | getfname-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 |
| 316 | A function to classify a diagnostic text as particular type of | 747 | A function to classify a diagnostic text as particular type of |
| 317 | error. Should be a function taking an error text and returning one of | 748 | error. Should be a function taking an error text and returning one of |
| 318 | the symbols indexing @code{flymake-diagnostic-types-alist}. If non-nil | 749 | the symbols indexing @code{flymake-diagnostic-types-alist}. If non-nil |
| 319 | is returned but there is no such symbol in that table, a warning is | 750 | is returned but there is no such symbol in that table, a warning is |
| 320 | assumed. If nil is returned, an error is assumed. Can also be a | 751 | assumed. If nil is returned, an error is assumed. Can also be a |
| 321 | regular expression that should match only warnings. This variable | 752 | regular expression that should match only warnings. This variable |
| 322 | replaces the old @code{flymake-warning-re} and | 753 | replaces 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 |
| 326 | A flag indicating whether compilation and syntax check of the same | 757 | A flag indicating whether compilation and syntax check of the same |
| 327 | file cannot be run simultaneously. | 758 | file 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 | |||
| 371 | the temporary copy. In most cases, the default implementation | 802 | the temporary copy. In most cases, the default implementation |
| 372 | provided by Flymake, @code{flymake-proc-get-real-file-name}, can be | 803 | provided by Flymake, @code{flymake-proc-get-real-file-name}, can be |
| 373 | used as @code{getfname-function}. | 804 | used as @code{getfname-function}. |
| 374 | |||
| 375 | @end table | 805 | @end table |
| 376 | 806 | ||
| 377 | To add support for a new syntax check tool, write corresponding | 807 | To 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 |
| 380 | the new tool is not yet supported by Flymake, add a new entry to | 810 | the 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 | ||
| 390 | In this example, we will add support for @code{perl} as a syntax check | 820 | In this example, we will add support for @command{perl} as a syntax check |
| 391 | tool. @code{perl} supports the @code{-c} option which does syntax | 821 | tool. @command{perl} supports the @option{-c} option which does syntax |
| 392 | checking. | 822 | checking. |
| 393 | 823 | ||
| 394 | First, we write the @code{init-function}: | 824 | First, 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 | ||
| 439 | In this example we will add support for C files syntax checked by | 869 | In 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 | ||
| 469 | Thus, @code{Makefile} must contain the @code{check-syntax} target. In | 900 | Thus, @file{Makefile} must contain the @code{check-syntax} target. In |
| 470 | our case this target might look like this: | 901 | our 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 |
| 495 | temporary file in the buffer's directory (or in the system temp | 926 | temporary file in the buffer's directory (or in the system temporary |
| 496 | directory, for Java files), creates a syntax check command and | 927 | directory, for Java files), creates a syntax check command and |
| 497 | launches a process with this command. The output is parsed using a | 928 | launches a process with this command. The output is parsed using a |
| 498 | list of error message patterns, and error information (file name, line | 929 | list of error message patterns, and error information (file name, line |
| @@ -511,15 +942,15 @@ Two syntax check modes are distinguished: | |||
| 511 | @item | 942 | @item |
| 512 | Buffer can be syntax checked in a standalone fashion, that is, the | 943 | Buffer can be syntax checked in a standalone fashion, that is, the |
| 513 | file (its temporary copy, in fact) can be passed over to the compiler to | 944 | file (its temporary copy, in fact) can be passed over to the compiler to |
| 514 | do the syntax check. Examples are C/C++ (.c, .cpp) and Java (.java) | 945 | do the syntax check. Examples are C/C@t{++} sources (@file{.c}, |
| 515 | sources. | 946 | @file{.cpp}) and Java (@file{.java}). |
| 516 | 947 | ||
| 517 | @item | 948 | @item |
| 518 | Buffer can be syntax checked, but additional file, called master file, | 949 | Buffer can be syntax checked, but additional file, called master file, |
| 519 | is required to perform this operation. A master file is a file that | 950 | is required to perform this operation. A master file is a file that |
| 520 | includes the current file, so that running a syntax check tool on it | 951 | includes the current file, so that running a syntax check tool on it |
| 521 | will also check syntax in the current file. Examples are C/C++ (.h, | 952 | will also check syntax in the current file. Examples are C/C@t{++} |
| 522 | .hpp) headers. | 953 | headers (@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 | ||
| 540 | After the possibility of the syntax check has been determined, a | 970 | After the possibility of the syntax check has been determined, a |
| 541 | temporary copy of the current buffer is made so that the most recent | 971 | temporary 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 | |||
| 547 | requires to | 977 | requires 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) | 981 | locate a master file |
| 552 | name. | 982 | @item |
| 983 | patch it to include the current file using its new (temporary) name. | ||
| 553 | @end itemize | 984 | @end itemize |
| 554 | 985 | ||
| 555 | Locating a master file is discussed in the following section. | 986 | Locating 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 | ||
| 570 | Master file is located in two steps. | 1002 | Master file is located in two steps. |
| 571 | 1003 | ||
| 572 | First, a list of possible master files is built. A simple name | 1004 | First, a list of possible master files is built. A simple name |
| 573 | matching is used to find the files. For a C++ header @code{file.h}, | 1005 | matching is used to find the files. For a C++ header @file{file.h}, |
| 574 | the Proc backend searches for all @code{.cpp} files in the directories | 1006 | the Proc backend searches for all @file{.cpp} files in the directories |
| 575 | whose relative paths are stored in a customizable variable | 1007 | whose 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 |
| 577 | like @code{("." "./src")}. No more than | 1009 | like @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 |
| 579 | master file list. The list is then sorted to move files with names | 1011 | master 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 | ||
| 582 | Next, each master file in a list is checked to contain the appropriate | 1014 | Next, each master file in a list is checked to contain the appropriate |
| 583 | include directives. No more than @code{flymake-proc-check-file-limit} of each | 1015 | include directives. No more than @code{flymake-proc-check-file-limit} of each |
| 584 | file are parsed. | 1016 | file are parsed. |
| 585 | 1017 | ||
| 586 | For @code{file.h}, the include directives to look for are | 1018 | For @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 |
| 588 | include is checked against a list of include directories | 1020 | include 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 |
| 590 | correct @code{file.h}. | 1022 | correct @file{file.h}. |
| 591 | 1023 | ||
| 592 | First matching master file found stops the search. The master file is then | 1024 | First matching master file found stops the search. The master file is then |
| 593 | patched and saved to disk. In case no master file is found, syntax check is | 1025 | patched and saved to disk. In case no master file is found, syntax check is |
| 594 | aborted, and corresponding status (!) is reported in the mode line. | 1026 | aborted, 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 | ||
| 600 | Two sets of include directories are distinguished: system include directories | 1033 | Two sets of include directories are distinguished: system include directories |
| 601 | and project include directories. The former is just the contents of the | 1034 | and 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 | ||
| 622 | The Proc backend can be configured to use different tools for | 1055 | The Proc backend can be configured to use different tools for |
| 623 | performing syntax checks. For example, it can use direct compiler | 1056 | performing syntax checks. For example, it can use direct compiler |
| 624 | call to syntax check a perl script or a call to @command{make} for a | 1057 | call to syntax check a perl script or a call to @command{make} for a |
| 625 | more complicated case of a @code{C/C++} source. The general idea is | 1058 | more complicated case of a C/C@t{++} source. The general idea is |
| 626 | that simple files, like perl scripts and html pages, can be checked by | 1059 | that simple files, like Perl scripts and @acronym{HTML} pages, can be checked by |
| 627 | directly invoking a corresponding tool. Files that are usually more | 1060 | directly invoking a corresponding tool. Files that are usually more |
| 628 | complex and generally used as part of larger projects, might require | 1061 | complex and generally used as part of larger projects, might require |
| 629 | non-trivial options to be passed to the syntax check tool, like | 1062 | non-trivial options to be passed to the syntax check tool, like |
| 630 | include directories for C++. The latter files are syntax checked | 1063 | include directories for C@t{++}. The latter files are syntax checked |
| 631 | using some build tool, like Make or Ant. | 1064 | using some build tool, like Make or Ant. |
| 632 | 1065 | ||
| 633 | All Make configuration data is usually stored in a file called | 1066 | All 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 |
| 635 | buildfile to reference the 'project configuration' file. | 1068 | buildfile to reference the @dfn{project configuration} file. |
| 636 | 1069 | ||
| 1070 | @findex flymake-proc-find-buildfile | ||
| 637 | Special function, @code{flymake-proc-find-buildfile} is provided for locating buildfiles. | 1071 | Special function, @code{flymake-proc-find-buildfile} is provided for locating buildfiles. |
| 638 | Searching for a buildfile is done in a manner similar to that of searching | 1072 | Searching for a buildfile is done in a manner similar to that of searching |
| 639 | for possible master files. | 1073 | for 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 |
| 643 | buildfile. They are checked sequentially until a buildfile is found. | 1077 | buildfile. They are checked sequentially until a buildfile is found. |
| 644 | @end ignore | 1078 | @end ignore |
| 645 | In case there's no build file, syntax check is aborted. | 1079 | In case there's no build file, the syntax check is aborted. |
| 646 | 1080 | ||
| 647 | Buildfile values are also cached. | 1081 | Buildfile 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 | ||
| 653 | The command line (command name and the list of arguments) for | 1087 | The command line (command name and the list of arguments) for |
| 654 | launching a process is returned by the initialization function. The | 1088 | launching 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 | ||
| 664 | The output generated by the syntax check tool is parsed in the process | 1098 | The output generated by the syntax check tool is parsed in the process |
| 665 | filter/sentinel using the error message patterns stored in the | 1099 | filter/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 |
| 667 | list of items of the form @code{(regexp file-idx line-idx | 1101 | list of items of the form @w{@code{(regexp file-idx line-idx |
| 668 | err-text-idx)}, used to determine whether a particular line is an | 1102 | err-text-idx)}}, used to determine whether a particular line is an |
| 669 | error message and extract file name, line number and error text, | 1103 | error message and extract file name, line number and error text, |
| 670 | respectively. Error type (error/warning) is also guessed by matching | 1104 | respectively. Error type (error/warning) is also guessed by matching |
| 671 | error text with the '@code{^[wW]arning}' pattern. Anything that was not | 1105 | error text with the @samp{^[wW]arning} pattern. Anything that was not |
| 672 | classified as a warning is considered an error. Type is then used to | 1106 | classified as a warning is considered an error. Type is then used to |
| 673 | sort error menu items, which shows error messages first. | 1107 | sort 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 | |||
| 676 | missing err-text-idx information. This is done by merely taking the | 1110 | missing err-text-idx information. This is done by merely taking the |
| 677 | rest of the matched line (@code{(substring line (match-end 0))}) as | 1111 | rest of the matched line (@code{(substring line (match-end 0))}) as |
| 678 | error text. This trick allows making use of a huge collection of | 1112 | error text. This trick allows making use of a huge collection of |
| 679 | error message line patterns from @code{compile.el}. All these error | 1113 | error message line patterns from @file{compile.el}. All these error |
| 680 | patterns are appended to the end of | 1114 | patterns 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 | ||
| 693 | The only mode the Proc backend currently knows about is | 1127 | The 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++ | |||
| 702 | compiler. The variable in question is | 1136 | compiler. 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 | ||
| 705 | The Proc backend also provides an alternative command for starting | 1140 | The Proc backend also provides an alternative command for starting |
| 706 | compilation, @code{flymake-proc-compile}. It just kills all the active | 1141 | compilation, @code{flymake-proc-compile}. It just kills all the active |
| 707 | syntax check processes before calling @code{compile}. | 1142 | syntax 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. | |||
| 825 | This matches Emacs's behavior when deciding on which face attributes to | 825 | This matches Emacs's behavior when deciding on which face attributes to |
| 826 | use, to the best of my understanding ). | 826 | use, to the best of my understanding ). |
| 827 | 827 | ||
| 828 | If @var{class} is @code{nil}, then you just get get whatever | 828 | If @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 |
| 830 | effect for @var{face}. | 830 | effect 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: | |||
| 584 | When the cell is empty (ie.@: when @code{val} is @code{nil}), print an | 584 | When the cell is empty (ie.@: when @code{val} is @code{nil}), print an |
| 585 | empty string @code{""} | 585 | empty string @code{""} |
| 586 | @item | 586 | @item |
| 587 | When the cell value is a non negative number, format the the value in | 587 | When the cell value is a non negative number, format the value in |
| 588 | fixed-point notation with one decimal after point | 588 | fixed-point notation with one decimal after point |
| 589 | @item | 589 | @item |
| 590 | Otherwise, handle the value as erroneous by printing it as an | 590 | Otherwise, 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 |
| 187 | methods, such as @command{rsh}, @command{rlogin}, @command{telnet}, | 187 | methods, such as @command{rsh}, @command{rlogin}, @command{telnet}, |
| 188 | and related programs. If these programs can successfully pass | 188 | and 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 | |||
| 2000 | install and execute a listener as follows (see @code{tramp-methods}): | 2000 | install 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 | ||
| 2006 | The above command-line syntax has changed with @command{busybox} | 2006 | The 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 | ||
| 2734 | 2012-12-14 Ryan Crum <ryan.crum@eleostech.com> | 2734 | 2012-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 @@ | |||
| 1473 | 1996-04-18 Richard Stallman <rms@mole.gnu.ai.mit.edu> | 1473 | 1996-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 | ||
| 1479 | 1996-04-18 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> | 1479 | 1996-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. |
| 101 | Return the created buffer with with program output." | 101 | Return 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. |
| 281 | Change . to _ in the variable name." | 281 | Change . 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. |
| 934 | The value nil is valid where a TABLE usually is, but only if the TAG | 934 | The value nil is valid where a TABLE usually is, but only if the TAG |
| 935 | results include overlays. | 935 | results include overlays. |
| 936 | This query only really tests the first entry in the list that is RESULTP, | 936 | This 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. |
| 599 | The file associated with OBJ does not need to be in a buffer." | 599 | The 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. |
| 225 | HITS is the list of tags that CHANGE is in. It can have more than | 225 | HITS is the list of tags that CHANGE is in. It can have more than |
| 226 | one tag in it if the leaf tag is within a parent tag." | 226 | one 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'. |
| 60 | RMAIL files in the old Babyl format (used before before Emacs 23.1) | 60 | RMAIL files in the old Babyl format (used before Emacs 23.1) |
| 61 | contain \"-*- rmail -*-\" at the top, so `dired-find-file' | 61 | contain \"-*- rmail -*-\" at the top, so `dired-find-file' |
| 62 | will run `rmail' on these files. New RMAIL files use the standard | 62 | will run `rmail' on these files. New RMAIL files use the standard |
| 63 | mbox format, and so cannot be distinguished in this way." | 63 | mbox 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 | ||
| 62 | The cars of elements of the list are searched for in order. Text is | 62 | The cars of elements of the list are searched for in order. Text is |
| 63 | elided with an invisible overlay from the end of the line where the | 63 | elided 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: | |||
| 204 | DEFAULT-BODY, if present, is used as the body of a default method. | 204 | DEFAULT-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 | |||
| 3254 | instrument cannot be found, signal an error." | 3257 | instrument 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'." | |||
| 680 | When called as a function, NAME returns an iterator value that | 680 | When called as a function, NAME returns an iterator value that |
| 681 | encapsulates the state of a computation that produces a sequence | 681 | encapsulates the state of a computation that produces a sequence |
| 682 | of values. Callers can retrieve each value using `iter-next'." | 682 | of 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 | |||
| 226 | formal argument can be any pattern accepted by `pcase' (a mere | 226 | formal argument can be any pattern accepted by `pcase' (a mere |
| 227 | variable name being but a special case of it)." | 227 | variable 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, | |||
| 2483 | and text lines might move horizontally as you move through | 2483 | and text lines might move horizontally as you move through |
| 2484 | the buffer." | 2484 | the 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 | |||
| 2497 | from that of the `line-number' face could produce such | 2498 | from that of the `line-number' face could produce such |
| 2498 | unwanted effects." | 2499 | unwanted 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'." | |||
| 638 | When switching from a GUI frame to a tty frame, behave | 638 | When switching from a GUI frame to a tty frame, behave |
| 639 | as `frameset-filter-shelve-param' does." | 639 | as `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 | ||
| 961 | 2014-01-18 Steinar Bang <sb@dod.no> | 961 | 2014-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. |
| 75 | It does this by calling by calling (gnus-group-split-fancy nil | 75 | It does this by calling (gnus-group-split-fancy nil nil CATCH-ALL). |
| 76 | nil CATCH-ALL). | ||
| 77 | 76 | ||
| 78 | If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used | 77 | If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used |
| 79 | instead. This variable is set by `gnus-group-split-setup'." | 78 | instead. 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. |
| 308 | If nil, leave the subject unchanged. If it is the symbol `ask', query | 309 | If nil, leave the subject unchanged. If it is the symbol `ask', query |
| 309 | the user what do do. In this case, the subject is matched against | 310 | the 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 |
| 312 | old subject. In this case, `message-subject-trailing-was-regexp' is | 313 | old 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. | ||
| 80 | This variable controls the way to handle a glyph for ZWNJ | ||
| 81 | returned by the underling shaping engine. | ||
| 82 | |||
| 83 | The default value is nil, which means that the ZWNJ glyph is | ||
| 84 | displayed as is. | ||
| 85 | |||
| 86 | If the value is `absorb', ZWNJ is absorbed into the previous | ||
| 87 | grapheme cluster, and not displayed. | ||
| 88 | |||
| 89 | If the value is `as-space', the glyph is displayed by a | ||
| 90 | thin (i.e. 1-dot width) space. | ||
| 91 | |||
| 92 | Customizing 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. |
| 122 | If t the echo area will not show obsolete items. See also | 122 | If 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. |
| 1790 | COMMAND is usually a command from the gvfs-* utilities. | 1812 | COMMAND 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." | 1813 | by the corresponding gio tool call if available. `call-process' |
| 1814 | is 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 | |||
| 113 | calling this function with it. You will lose. It is not necessary to | 113 | calling this function with it. You will lose. It is not necessary to |
| 114 | call this function, as event objects are garbage- collected like all | 114 | call this function, as event objects are garbage- collected like all |
| 115 | other objects; however, it may be more efficient to explicitly | 115 | other objects; however, it may be more efficient to explicitly |
| 116 | deallocate events when you are sure that that is safe. | 116 | deallocate events when you are sure that this is safe. |
| 117 | 117 | ||
| 118 | This emulation does not actually deallocate or reuse events | 118 | This emulation does not actually deallocate or reuse events |
| 119 | except via garbage collection and `cons'." | 119 | except 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. |
| 293 | This is a list of cons cells, with priority character in the car | 293 | This is a list of cons cells, with priority character in the car |
| 294 | and faces in the cdr. The face can be a symbol, a color as | 294 | and faces in the cdr. The face can be a symbol, a color |
| 295 | as a string, or a property list of attributes, like | 295 | as a string, or a property list of attributes, like |
| 296 | (:foreground \"blue\" :weight bold :underline t). | 296 | (:foreground \"blue\" :weight bold :underline t). |
| 297 | If it is a color string, the variable `org-faces-easy-properties' | 297 | If 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. |
| 116 | This should be the state `org-inlinetask-insert-task' should use by | 116 | This should be the state `org-inlinetask-insert-task' should use by |
| 117 | default, or nil of no state should be assigned." | 117 | default, 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. |
| 622 | Each element in this list looks looks like | 622 | Each 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 | ||
| 625 | The element whose MAJOR-MODE is equal to `antlr-language' is used to | 625 | The 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. |
| 169 | More precisely, convert the given `:type FOO', mined out of ARGS, | 169 | More precisely, convert the given `:type FOO', mined out of ARGS, |
| 170 | to an aggregate `:type (radio STYLE (PREAMBLE FOO))', append some | 170 | to an aggregate `:type (radio STYLE (PREAMBLE FOO))', append |
| 171 | some boilerplate documentation to DOC, arrange for the fallback | 171 | some boilerplate documentation to DOC, arrange for the fallback |
| 172 | value of NAME to be VAL, and call `custom-declare-variable' to | 172 | value of NAME to be VAL, and call `custom-declare-variable' to |
| 173 | do the rest of the work. | 173 | do 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. |
| 482 | Currently only changes how scalar variables are highlighted. | 482 | Currently only changes how scalar variables are highlighted. |
| 483 | Note that that variable is only read at initialization time for | 483 | Note that the variable is only read at initialization time for |
| 484 | the variable `cperl-font-lock-keywords-2', so changing it after you've | 484 | the variable `cperl-font-lock-keywords-2', so changing it after you've |
| 485 | entered CPerl mode the first time will have no effect." | 485 | entered 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. |
| 627 | May only be called in a dynamic environment where | 627 | May 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. |
| 128 | Specifically, 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 | ||
| 321 | The functions in this hook diagnose problems in a buffer’s | 326 | The functions in this hook diagnose problems in a buffer's |
| 322 | contents and provide information to the Flymake user interface | 327 | contents and provide information to the Flymake user interface |
| 323 | about where and how to annotate problems diagnosed in a buffer. | 328 | about where and how to annotate problems diagnosed in a buffer. |
| 324 | 329 | ||
| 325 | Whenever Flymake or the user decides to re-check the buffer, each | 330 | Each backend function must be prepared to accept an arbitrary |
| 326 | function is called with an arbitrary number of arguments: | 331 | number 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 | ||
| 336 | Backend functions are expected to initiate the buffer check, but | 341 | Whenever Flymake or the user decides to re-check the buffer, |
| 337 | aren't required to complete it check before exiting: if the | 342 | backend functions are called as detailed above and are expected |
| 338 | computation involved is expensive, especially for large buffers, | 343 | to initiate this check, but aren't required to complete it before |
| 339 | that task can be scheduled for the future using asynchronous | 344 | exiting: if the computation involved is expensive, especially for |
| 340 | processes or other asynchronous mechanisms. | 345 | large buffers, that task can be scheduled for the future using |
| 346 | asynchronous processes or other asynchronous mechanisms. | ||
| 341 | 347 | ||
| 342 | In any case, backend functions are expected to return quickly or | 348 | In any case, backend functions are expected to return quickly or |
| 343 | signal an error, in which case the backend is disabled. Flymake | 349 | signal an error, in which case the backend is disabled. Flymake |
| @@ -371,10 +377,10 @@ Currently accepted values for REPORT-ACTION are: | |||
| 371 | 377 | ||
| 372 | Currently accepted REPORT-KEY arguments are: | 378 | Currently 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. | ||
| 634 | If 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. |
| 674 | Start it immediately, or after current command if DEFERRED is | 703 | DEFERRED is a list of symbols designating conditions to wait for |
| 675 | non-nil. With optional FORCE run even disabled backends. | 704 | before actually starting the check. If it is nil (the list is |
| 705 | empty), start it immediately, else defer the check to when those | ||
| 706 | conditions 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 | ||
| 709 | in a window. If DEFERRED is t, wait for all known conditions. | ||
| 710 | |||
| 711 | With optional FORCE run even disabled backends. | ||
| 676 | 712 | ||
| 677 | Interactively, with a prefix arg, FORCE is t." | 713 | Interactively, 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. |
| 763 | With a prefix argument ARG, enable Flymake mode if ARG is | ||
| 764 | positive, and disable it otherwise. If called from Lisp, enable | ||
| 765 | the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. | ||
| 766 | |||
| 767 | Flymake is an Emacs minor mode for on-the-fly syntax checking. | ||
| 768 | Flymake collects diagnostic information from multiple sources, | ||
| 769 | called backends, and visually annotates the buffer with the | ||
| 770 | results. | ||
| 771 | |||
| 772 | Flymake performs these checks while the user is editing. The | ||
| 773 | customization variables `flymake-start-on-flymake-mode', | ||
| 774 | `flymake-no-changes-timeout' and | ||
| 775 | `flymake-start-syntax-check-on-newline' determine the exact | ||
| 776 | circumstances whereupon Flymake decides to initiate a check of | ||
| 777 | the buffer. | ||
| 778 | |||
| 779 | The commands `flymake-goto-next-error' and | ||
| 780 | `flymake-goto-prev-error' can be used to navigate among Flymake | ||
| 781 | diagnostics annotated in the buffer. | ||
| 782 | |||
| 783 | The visual appearance of each type of diagnostic can be changed | ||
| 784 | in the variable `flymake-diagnostic-types-alist'. | ||
| 785 | |||
| 786 | Activation or deactivation of backends used by Flymake in each | ||
| 787 | buffer happens via the special hook | ||
| 788 | `flymake-diagnostic-functions'. | ||
| 789 | |||
| 790 | Some backends may take longer than others to respond or complete, | ||
| 791 | and some may decide to disable themselves if they are not | ||
| 792 | suitable for the current buffer. The commands | ||
| 793 | `flymake-running-backends', `flymake-disabled-backends' and | ||
| 794 | `flymake-reporting-backends' summarize the situation, as does the | ||
| 795 | special *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. |
| 794 | Interactively, always move to the next error. With a prefix arg, | 882 | Interactively, always move to the next error. With a prefix arg, |
| 795 | skip any diagnostics with a severity less than ‘:warning’. | 883 | skip any diagnostics with a severity less than `:warning'. |
| 796 | 884 | ||
| 797 | If ‘flymake-wrap-around’ is non-nil and no more next errors, | 885 | If `flymake-wrap-around' is non-nil and no more next errors, |
| 798 | resumes search from top | 886 | resumes search from top. |
| 799 | 887 | ||
| 800 | FILTER is a list of diagnostic types found in | 888 | FILTER 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. |
| 848 | Interactively, always move to the previous error. With a prefix | 937 | Interactively, always move to the previous error. With a prefix |
| 849 | arg, skip any diagnostics with a severity less than ‘:warning’. | 938 | arg, skip any diagnostics with a severity less than `:warning'. |
| 850 | 939 | ||
| 851 | If ‘flymake-wrap-around’ is non-nil and no more previous errors, | 940 | If `flymake-wrap-around' is non-nil and no more previous errors, |
| 852 | resumes search from bottom. | 941 | resumes search from bottom. |
| 853 | 942 | ||
| 854 | FILTER is a list of diagnostic types found in | 943 | FILTER 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. | ||
| 1103 | POS 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. |
| 907 | The 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 | |||
| 129 | variables. | 129 | variables. |
| 130 | 130 | ||
| 131 | This can be also be set to a full path, or a relative path. If | 131 | This can be also be set to a full path, or a relative path. If |
| 132 | the path is relative, it will be relative to the the current | 132 | the path is relative, it will be relative to the current |
| 133 | directory by default." | 133 | directory 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. |
| 68 | When a cursor is on a wide-column character (e.g. Chinese, | 68 | When a cursor is on a wide-column character (e.g. Chinese, |
| 69 | Japanese, Korean), this may may be different from `current-column'.") | 69 | Japanese, 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 | |||
| 3450 | COUNT is 0 before the first paragraph and increments for every | 3450 | COUNT is 0 before the first paragraph and increments for every |
| 3451 | paragraph found on level IND. IN-FIRST is non-nil if this is the | 3451 | paragraph found on level IND. IN-FIRST is non-nil if this is the |
| 3452 | first line of such a paragraph. IN-SUB is non-nil if this line | 3452 | first line of such a paragraph. IN-SUB is non-nil if this line |
| 3453 | is part of a sub-block while IN-SUPER is non-nil of this line is | 3453 | is part of a sub-block while IN-SUPER is non-nil if this line is |
| 3454 | part of a less indented block (super-block). IN-EMPTY is non-nil | 3454 | part of a less indented block (super-block). IN-EMPTY is non-nil |
| 3455 | if this line is empty where an empty line is considered being | 3455 | if this line is empty where an empty line is considered being |
| 3456 | part of the previous block. RELIND is nil for an empty line, 0 | 3456 | part 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 | ||
| 3959 | 2006-05-12 Chong Yidong <cyd@stupidchicken.com> | 3959 | 2006-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 | ||
| 3353 | 2012-11-06 Jan Djärv <jan.h.d@swipnet.se> | 3353 | 2012-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 @@ | |||
| 1372 | 1995-04-11 Richard Stallman <rms@mole.gnu.ai.mit.edu> | 1372 | 1995-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 @@ | |||
| 3381 | 1998-02-15 Richard Stallman <rms@psilocin.gnu.org> | 3381 | 1998-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 | ||
| 3387 | 1998-02-14 Richard Stallman <rms@psilocin.gnu.org> | 3387 | 1998-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 | |||
| 6054 | modification time of the most recent save is different, this entry is | 6054 | modification time of the most recent save is different, this entry is |
| 6055 | obsolete. | 6055 | obsolete. |
| 6056 | 6056 | ||
| 6057 | An entry (t . 0) means means the buffer was previously unmodified but | 6057 | An entry (t . 0) means the buffer was previously unmodified but |
| 6058 | its time stamp was unknown because it was not associated with a file. | 6058 | its time stamp was unknown because it was not associated with a file. |
| 6059 | An entry (t . -1) is similar, except that it means the buffer's visited | 6059 | An entry (t . -1) is similar, except that it means the buffer's visited |
| 6060 | file did not exist. | 6060 | file 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 | ||
| 69 | static void update_frame_line (struct frame *, int); | 69 | static void update_frame_line (struct frame *, int, bool); |
| 70 | static int required_matrix_height (struct window *); | 70 | static int required_matrix_height (struct window *); |
| 71 | static int required_matrix_width (struct window *); | 71 | static int required_matrix_width (struct window *); |
| 72 | static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t); | 72 | static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t); |
| @@ -88,7 +88,7 @@ static void check_matrix_pointers (struct glyph_matrix *, | |||
| 88 | static void mirror_line_dance (struct window *, int, int, int *, char *); | 88 | static void mirror_line_dance (struct window *, int, int, int *, char *); |
| 89 | static bool update_window_tree (struct window *, bool); | 89 | static bool update_window_tree (struct window *, bool); |
| 90 | static bool update_window (struct window *, bool); | 90 | static bool update_window (struct window *, bool); |
| 91 | static bool update_frame_1 (struct frame *, bool, bool, bool); | 91 | static bool update_frame_1 (struct frame *, bool, bool, bool, bool); |
| 92 | static bool scrolling (struct frame *); | 92 | static bool scrolling (struct frame *); |
| 93 | static void set_window_cursor_after_update (struct window *); | 93 | static void set_window_cursor_after_update (struct window *); |
| 94 | static void adjust_frame_glyphs_for_window_redisplay (struct frame *); | 94 | static 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 | ||
| 4475 | static bool | 4475 | static bool |
| 4476 | update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p, | 4476 | update_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 | ||
| 4777 | static void | 4777 | static void |
| 4778 | update_frame_line (struct frame *f, int vpos) | 4778 | update_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. */ |
| 989 | static emacs_value | 989 | static 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 | ||
| 2683 | DEFUN ("functionp", Ffunctionp, Sfunctionp, 1, 1, 0, | 2683 | DEFUN ("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; | |||
| 125 | static bool auto_save_error_occurred; | 125 | static 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. */ |
| 129 | static bool valid_timestamp_file_system; | 129 | static bool valid_timestamp_file_system; |
| 130 | static dev_t timestamp_file_system; | 130 | static 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 |
| 225 | char * | 225 | current directory is unreachable, return either NULL or a string |
| 226 | emacs_get_current_dir_name (void) | 226 | beginning with '('. */ |
| 227 | |||
| 228 | static char * | ||
| 229 | get_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 | |||
| 318 | char * | ||
| 319 | emacs_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. |
| 143 | Print the the content of the Tramp debug buffer, if BODY does not | 143 | Print the content of the Tramp debug buffer, if BODY does not |
| 144 | eval properly in `should' or `should-not'. `should-error' is not | 144 | eval properly in `should' or `should-not'. `should-error' is not |
| 145 | handled properly. BODY shall not contain a timeout." | 145 | handled 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) |