diff --git a/ChangeLog.1 b/ChangeLog.1 index 1fb7b78fa62..b01a316f741 100644 --- a/ChangeLog.1 +++ b/ChangeLog.1 @@ -3528,7 +3528,7 @@ Port to Solaris 8. Without this change, 'configure' fails because the recently-added wait3 prototype in config.h messes up later 'configure' tests. - Fix this problem by droping wait3 and WRETCODE, as they're + Fix this problem by dropping wait3 and WRETCODE, as they're no longer needed on hosts that are current porting targets. * configure.ac (wait3, WRETCODE): Remove, fixing a FIXME. All uses changed to waitpid and WEXITSTATUS. diff --git a/ChangeLog.3 b/ChangeLog.3 index 16e74f41be4..ec2d3f8d462 100644 --- a/ChangeLog.3 +++ b/ChangeLog.3 @@ -315,7 +315,7 @@ * lisp/net/gnutls.el (gnutls-trustfiles): Update the names of the systems in the comments. Reported by Richard Stallman in - https://lists.gnu.org/archive/html/emacs-devel/2020-07/msg00455.html. + https://lists.gnu.org/r/emacs-devel/2020-07/msg00455.html. 2020-07-17 Eli Zaretskii @@ -611,8 +611,8 @@ of 2019-10-13T15:36:02Z!contovob@tcd.ie. For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00550.html - https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00473.html + https://lists.gnu.org/r/emacs-devel/2019-10/msg00550.html + https://lists.gnu.org/r/emacs-devel/2020-06/msg00473.html * doc/lispref/nonascii.texi (Specifying Coding Systems): Use more specific cross-reference to progn even if info.el displays it @@ -727,8 +727,8 @@ Minor improvements to EDE and EIEIO manuals For discussion, see the following threads: - https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html - https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00099.html + https://lists.gnu.org/r/emacs-devel/2020-05/msg00630.html + https://lists.gnu.org/r/emacs-devel/2020-06/msg00099.html * doc/misc/ede.texi (ede-generic-project): Clean up example. * doc/misc/eieio.texi (Accessing Slots): Document slot-value as a @@ -1573,7 +1573,7 @@ * etc/NEWS: Rearrange image sections. - https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01315.html + https://lists.gnu.org/r/emacs-devel/2020-04/msg01315.html 2020-04-22 Paul Eggert @@ -1616,7 +1616,7 @@ * doc/emacs/files.texi (Image Mode): Mention image-auto-resize and image-auto-resize-on-window-resize. - https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01160.html + https://lists.gnu.org/r/emacs-devel/2020-04/msg01160.html 2020-04-21 Juri Linkov @@ -1944,7 +1944,7 @@ These changes fix actual or latent bugs in regexps that match file names, such as PATTERN arguments to 'directory-files'. See - https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00265.html + https://lists.gnu.org/r/emacs-devel/2020-04/msg00265.html * admin/authors.el (authors-obsolete-files-regexps) (authors-renamed-files-regexps): @@ -2036,7 +2036,7 @@ Clarify documentation on inhibit-modification-hooks intended usage Cf. bug#40332 and the discussion at - https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00921.html + https://lists.gnu.org/r/emacs-devel/2020-03/msg00921.html * doc/lispref/text.texi (Change Hooks): * src/insdel.c (syms_of_insdel): Clarify the intended usage of @@ -2173,9 +2173,9 @@ LENGTH (i). This happens when delete_interval is called from set_intervals_multibyte_1, because the caller zeroes out the total_length field of the interval to be deleted. See - https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00131.html + https://lists.gnu.org/r/emacs-devel/2020-04/msg00131.html for more details. See also a related old discussion at - https://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00399.html. + https://lists.gnu.org/r/emacs-devel/2012-07/msg00399.html. 2020-04-08 Eli Zaretskii @@ -2212,7 +2212,7 @@ like GNOME shell that use invisible outer frame borders. For further information see the thread starting with - https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00343.html + https://lists.gnu.org/r/emacs-devel/2020-01/msg00343.html * src/frame.c (syms_of_frame): New symbol Qxg_frame_set_char_size_4. * src/gtkutil.c (xg_frame_set_char_size): Hide child frame @@ -2771,7 +2771,7 @@ and will be *the* mailing list for discussions and announcements about ERC going forward. The other two lists, erc-announce and erc-commit, are now retired. For more details, see the announcement at - . + . 2020-03-06 Roland Winkler @@ -5120,7 +5120,7 @@ * lisp/progmodes/xref.el (xref--find-buffer-visiting): Speed up by using get-file-buffer. (xref--collect-matches): Remove the condition on remote-id. - (https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00753.html) + (https://lists.gnu.org/r/emacs-devel/2019-12/msg00753.html) 2019-12-27 Dmitry Gutov @@ -5634,7 +5634,7 @@ Speed up vc-dir-update * lisp/vc/vc-dir.el (vc-dir-update): Speed up. - (https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00568.html) + (https://lists.gnu.org/r/emacs-devel/2019-12/msg00568.html) 2019-12-20 Alan Mackenzie @@ -6779,7 +6779,7 @@ frame-monitor-workarea (and display-monitor-attributes-list). For details on why some GTK menus were empty please see thread - https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg01061.html + https://lists.gnu.org/r/emacs-devel/2019-11/msg01061.html * src/gtkutil.c (menubar_map_cb, xg_update_frame_menubar): Scale up req.height so that the menu bar's height is in device pixels as @@ -6900,7 +6900,7 @@ so in case of the active minibuffer, calling minibuffer-message will allow sit-for to wait the complete timeout, because discard-input will discard all initial events that prevent sit-for from waiting during startup. - https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg00581.html + https://lists.gnu.org/r/emacs-devel/2019-11/msg00581.html 2019-11-30 Alan Mackenzie @@ -6939,7 +6939,7 @@ Use run-with-idle-timer instead of debounce for responsive image scaling. * lisp/emacs-lisp/timer.el (debounce, debounce-reduce): Revert macro addition. - https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg01133.html + https://lists.gnu.org/r/emacs-devel/2019-11/msg01133.html * lisp/image.el (image-increase-size, image-decrease-size): Use run-with-idle-timer. @@ -8251,7 +8251,7 @@ (do-after-load-evaluation): Replace run-with-timer with run-with-idle-timer to give a chance for the minibuffer to handle initial events before sit-for. - https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg00581.html + https://lists.gnu.org/r/emacs-devel/2019-11/msg00581.html 2019-11-17 Juri Linkov @@ -8342,7 +8342,7 @@ * lisp/simple.el (eval-expression-print-maximum-character): Use choice type. - https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg00433.html + https://lists.gnu.org/r/emacs-devel/2019-11/msg00433.html 2019-11-16 Juri Linkov @@ -8589,7 +8589,7 @@ changing point-min. It wasn't necessary for vertical-motion to work, and it had some adverse effects on how font-lock rules were applied - (https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg00522.html). + (https://lists.gnu.org/r/emacs-devel/2019-11/msg00522.html). This can also be an alternative fix for bug#38049. 2019-11-14 Alan Mackenzie @@ -9194,7 +9194,7 @@ Use read-char-from-minibuffer instead of read-char-choice. Remove special handling of original window scrolling that is now supported in the minibuffer. This fixes - https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg01020.html + https://lists.gnu.org/r/emacs-devel/2019-10/msg01020.html (files--ask-user-about-large-file): Use read-char-from-minibuffer instead of read-char-choice. @@ -9585,7 +9585,7 @@ Call vc-file-clearprops on new file too for the case when old and new files were renamed to each other back and forth. - https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg00069.html + https://lists.gnu.org/r/emacs-devel/2019-11/msg00069.html 2019-11-06 Juri Linkov @@ -11092,7 +11092,7 @@ (tab-line-mode--turn-on): New function. (tab-line-exclude-modes): New defcustom. (tab-line-exclude): New buffer-local variable. - https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00988.html + https://lists.gnu.org/r/emacs-devel/2019-10/msg00988.html * lisp/dired.el (dired-mark-pop-up): Set tab-line-exclude to nil. Don't set tab-line-format. (Bug#37699) @@ -15340,7 +15340,7 @@ Implementation for VC projects that uses 'git ls-files' or 'hg status --all' for listing. With gratitude to Tassilo Horn who has done most of the legwork and wrote the first version of the code - (https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00069.html). + (https://lists.gnu.org/r/emacs-devel/2019-10/msg00069.html). (project--vc-list-files): New function, to be used by the above. (project--find-regexp-in-files): Silence warnings about nonexistent files. @@ -17981,7 +17981,7 @@ 'query-replace-regexp undo: Update next-replacement after undo' (30c4f35a6fc8a6507930923766c3126ac1c2063f) - See https://lists.gnu.org/archive/html/emacs-devel/2019-09/msg00364.html + See https://lists.gnu.org/r/emacs-devel/2019-09/msg00364.html * lisp/replace.el(perform-replace): Rename variable to next-replacement-replaced. @@ -19170,7 +19170,7 @@ * lisp/net/nsm.el (nsm-protocol-check--renegotiation-info-ext): Don't check when using TLS1.3, renegotiation has been removed from TLS. Reported in - + 2019-09-04 Paul Eggert @@ -19320,7 +19320,7 @@ Avoid macros in pdumper.c when it’s easy Problem with DUMP_SET_REFERRER mentioned by Pip Cet at end of: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00548.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00548.html * src/pdumper.c (DANGEROUS, EMACS_RELOC_TYPE_BITS) (EMACS_RELOC_LENGTH_BITS, DUMP_RELOC_TYPE_BITS) (DUMP_RELOC_ALIGNMENT_BITS, DUMP_RELOC_OFFSET_BITS) @@ -21681,7 +21681,7 @@ method. Set up any user-defined fringe bitmaps in addition to the standard bitmaps. Suggested by Liam Quinlan in - https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00259.html. + https://lists.gnu.org/r/emacs-devel/2019-08/msg00259.html. (w32_reset_fringes) [HAVE_NTGUI]: Do nothing if the frame's redisplay_interface doesn't implement the @@ -22067,7 +22067,7 @@ Suggested by Oleh Krehel and implemented by Basil Contovounesios in the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00547.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00547.html * lisp/array.el (xor): Move unused function from here... * lisp/subr.el: ...to here, and improve. @@ -22947,7 +22947,7 @@ Make gravatar.el more configurable For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00528.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00528.html * etc/NEWS: Announce changes in gravatar.el user options. @@ -22973,7 +22973,7 @@ Fix some minor gravatar.el issues For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00528.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00528.html * lisp/image/gravatar.el (gravatar-hash): Trim leading and trailing whitespace in given address, as per the Gravatar docs. (gravatar-retrieve-synchronously): Silence call to @@ -22986,7 +22986,7 @@ DRY in gravatar.el For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00528.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00528.html * lisp/image/gravatar.el (gravatar-data->image): Remove. (gravatar-retrieve, gravatar-retrieve-synchronously): Reuse url-fetch-from-cache and gravatar-retrieved to reduce duplication. @@ -22999,7 +22999,7 @@ Use lexical-binding for Gravatar support For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00528.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00528.html * lisp/gnus/gnus-gravatar.el: Use lexical-binding. Link custom group 'gnus-gravatar' to 'gravatar'. (gnus-gravatar-size, gnus-gravatar-too-ugly): Doc fix. @@ -23177,7 +23177,7 @@ Fix property stripping in image-file-yank-handler Fix proposed by Martin Rudalics in: - https://lists.gnu.org/archive/html/emacs-devel/2008-12/msg00945.html + https://lists.gnu.org/r/emacs-devel/2008-12/msg00945.html * lisp/image-file.el (image-file-yank-handler): Handle case when yank-excluded-properties is t. @@ -28310,7 +28310,7 @@ This changeset also rearranges native image transform code for other platforms to make it cleaner, and also removes the support for native cropping. For the discussions, see - https://lists.gnu.org/archive/html/emacs-devel/2019-06/msg00242.html + https://lists.gnu.org/r/emacs-devel/2019-06/msg00242.html * src/w32term.c (w32_image_rotations_p, transform): New functions. (w32_draw_image_foreground): If image rotation is requested @@ -28832,8 +28832,8 @@ Remove gnus-bug from report-emacs-bug TODO entry For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg01196.html - https://lists.gnu.org/archive/html/emacs-devel/2019-06/msg00967.html + https://lists.gnu.org/r/emacs-devel/2019-04/msg01196.html + https://lists.gnu.org/r/emacs-devel/2019-06/msg00967.html * etc/TODO: Remove gnus-bug from list of obsolete bug-reporting commands now that it is implemented in terms of report-emacs-bug. @@ -35048,7 +35048,7 @@ Fix url-copy-file argument handling For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00500.html + https://lists.gnu.org/r/emacs-devel/2019-05/msg00500.html * lisp/url/url-handlers.el: Update autoloaded docstrings. Quote function symbols as such. (url-handler-regexp): Make grouping construct shy. @@ -35208,7 +35208,7 @@ Use lexical-binding in tempo.el and add tests For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00395.html + https://lists.gnu.org/r/emacs-devel/2019-05/msg00395.html * lisp/tempo.el: Use lexical-binding. (tempo-define-template): Expand documentation to mention `tempo-user-elements'. @@ -35265,8 +35265,8 @@ Improve C and Elisp Git diff hunk headers For discussion, see the following threads: - https://lists.gnu.org/archive/html/emacs-devel/2019-03/msg00457.html - https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00369.html + https://lists.gnu.org/r/emacs-devel/2019-03/msg00457.html + https://lists.gnu.org/r/emacs-devel/2019-05/msg00369.html * autogen.sh: Extend the built-in Git xfuncname pattern 'cpp' to match preprocessor and DEFUN macros, and the 'elisp' pattern to @@ -35278,7 +35278,7 @@ Thanks to Basil L. Contovounesios for additional cleanups. For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00177.html + https://lists.gnu.org/r/emacs-devel/2019-05/msg00177.html * lisp/delim-col.el: Use lexical-binding. @@ -35798,8 +35798,8 @@ Remove XEmacs audio checks from mm-decode.el For discussion, see the following threads: - https://lists.gnu.org/archive/html/emacs-devel/2019-03/msg01087.html - https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00584.html + https://lists.gnu.org/r/emacs-devel/2019-03/msg01087.html + https://lists.gnu.org/r/emacs-devel/2019-05/msg00584.html * lisp/gnus/mm-decode.el (mm-inline-media-tests): Remove no-op media tests for XEmacs features. @@ -36178,7 +36178,7 @@ Add docstring to project--read-file-cpd-relative For discussion, see thread starting at: - https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00460.html + https://lists.gnu.org/r/emacs-devel/2019-05/msg00460.html * lisp/progmodes/project.el (project--read-file-cpd-relative): Describe arglist as promised by user option project-read-file-name-function. @@ -36457,7 +36457,7 @@ Allow customizing the display of project file names when reading To hopefully resolve a long-running discussion - (https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00162.html). + (https://lists.gnu.org/r/emacs-devel/2019-05/msg00162.html). * lisp/progmodes/project.el (project-read-file-name-function): New variable. @@ -37629,7 +37629,7 @@ * lisp/progmodes/xref.el (xref--read-identifier): Abort on empty input if there is no default - (https://lists.gnu.org/archive/html/help-gnu-emacs/2019-05/msg00012.html). + (https://lists.gnu.org/r/help-gnu-emacs/2019-05/msg00012.html). 2019-05-02 Alan Mackenzie @@ -38137,7 +38137,7 @@ This should not be necessary, and is merely a precaution. For background, see: - https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00639.html + https://lists.gnu.org/r/emacs-devel/2019-04/msg00639.html * src/frame.c: * src/xdisp.c: Check for existence of terminal hooks before use. @@ -39037,7 +39037,7 @@ Improve pure and side-effect-free docs For discussion, see thread starting at: - https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00316.html + https://lists.gnu.org/r/emacs-devel/2019-04/msg00316.html * doc/lispref/customize.texi (Composite Types): Do not overspecify :match-alternatives predicates. * doc/lispref/eval.texi (Intro Eval): Anchor definition of "side @@ -40266,7 +40266,7 @@ Optimize byte-compilation of proper-list-p For discussion, see thread starting at: - https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00316.html + https://lists.gnu.org/r/emacs-devel/2019-04/msg00316.html * lisp/emacs-lisp/byte-opt.el: Optimize proper-list-p as a predicate. * lisp/subr.el: Mark proper-list-p as pure, and side-effect and @@ -41453,7 +41453,7 @@ Fix more regexp oddities Problems reported by Mattias Engdegård in: - https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00178.html + https://lists.gnu.org/r/emacs-devel/2019-04/msg00178.html * lisp/progmodes/sh-script.el (sh-get-indent-info): Reorder skip-chars-forward arg so that it does not look like a regexp. * lisp/progmodes/verilog-mode.el (verilog-sk-define-signal): @@ -41479,7 +41479,7 @@ * lisp/frame.el (display-planes): Use logb over truncate + log Suggested by Basil L. Contovounesios: - https://lists.gnu.org/archive/html/bug-gnu-emacs/2019-03/msg01052.html + https://lists.gnu.org/r/bug-gnu-emacs/2019-03/msg01052.html 2019-04-06 Alexander Gramiak @@ -41786,7 +41786,7 @@ (gnus-dup-suppress-articles): DRY. For discussion, see thread starting at: - https://lists.gnu.org/archive/html/emacs-devel/2019-03/msg00974.html + https://lists.gnu.org/r/emacs-devel/2019-03/msg00974.html 2019-04-02 Wilson Snyder @@ -41980,7 +41980,7 @@ Do not set indent-line-function in text-mode For discussion, see thread starting at: - https://lists.gnu.org/archive/html/emacs-devel/2019-03/msg01012.html + https://lists.gnu.org/r/emacs-devel/2019-03/msg01012.html * lisp/textmodes/text-mode.el (text-mode): Do not reset indent-line-function to its global default value of indent-relative. * doc/lispref/modes.texi (Example Major Modes): @@ -42626,7 +42626,7 @@ i18n: Add function ngettext for pluralization. * lisp/international/mule-cmds.el (ngettext): New function. - https://lists.gnu.org/archive/html/emacs-devel/2019-03/msg00586.html + https://lists.gnu.org/r/emacs-devel/2019-03/msg00586.html * lisp/replace.el (flush-lines, how-many, occur-1, occur-engine) (perform-replace): Use ngettext. @@ -42909,7 +42909,7 @@ This reverts commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. There was no consensus for that commit, see - https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00150.html. + https://lists.gnu.org/r/emacs-devel/2016-01/msg00150.html. Also, reverting this commit should fix Bug#31238. 2019-03-21 Eli Zaretskii @@ -46161,7 +46161,7 @@ Rename multifile.el to fileloop.el * lisp/multifile.el: Rename to fileloop.el as discussed in - https://lists.gnu.org/archive/html/emacs-devel/2018-12/msg00475.html. + https://lists.gnu.org/r/emacs-devel/2018-12/msg00475.html. Update symbol prefixes and all callers 2019-02-07 Aurelien Aptel @@ -47560,7 +47560,7 @@ but that only affects a small corner case of c-toggle-auto-newline, which is not turned on by default. - See https://lists.gnu.org/archive/html/emacs-devel/2019-01/msg00360.html + See https://lists.gnu.org/r/emacs-devel/2019-01/msg00360.html for more information. * lisp/progmodes/cc-cmds.el (c--disable-fix-of-bug-33794): New @@ -49008,7 +49008,7 @@ * lisp/progmodes/project.el (project--completing-read-strict): Extract the common parent directory of all files first - (https://lists.gnu.org/archive/html/emacs-devel/2018-12/msg00444.html). + (https://lists.gnu.org/r/emacs-devel/2018-12/msg00444.html). 2018-12-28 Michael Albinus @@ -52604,7 +52604,7 @@ Advertise new hi-lock 'M-s h' key prefix in lisp/bindings.el - https://lists.gnu.org/archive/html/emacs-devel/2015-07/msg00104.html + https://lists.gnu.org/r/emacs-devel/2015-07/msg00104.html 2018-11-07 Juri Linkov @@ -54667,7 +54667,7 @@ Fix a previous commit Suggested by Stefan Monnier here: - https://lists.gnu.org/archive/html/emacs-devel/2018-09/msg00783.html + https://lists.gnu.org/r/emacs-devel/2018-09/msg00783.html * lisp/replace.el (occur--parse-occur-buffer): Since point is at the beginning of the buffer, use `point'. @@ -57449,7 +57449,7 @@ * lisp/calendar/todo-mode.el (todo-jump-to-category): Improve code by using bound-and-true-p. This leaves a byte-compiler warning unsilenced, but ideally, there shouldn't be a warning here (see - https://lists.gnu.org/archive/html/emacs-devel/2018-08/msg00131.html). + https://lists.gnu.org/r/emacs-devel/2018-08/msg00131.html). (todo--fifiles-history): New variable. (todo-find-filtered-items-file): Use it to fix the filtered items files history list for completing-read. @@ -59294,7 +59294,7 @@ Fix custom-available-themes file expansion For discussion, see thread starting at - https://lists.gnu.org/archive/html/emacs-devel/2018-05/msg00222.html. + https://lists.gnu.org/r/emacs-devel/2018-05/msg00222.html. * lisp/custom.el: (custom-available-themes): Use directory-files instead of performing arbitrary wildcard expansion in file names. (custom-theme--load-path): Document return value. @@ -59320,8 +59320,8 @@ * etc/themes/whiteboard-theme.el: * etc/themes/wombat-theme.el: Disable no-byte-compile. - https://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00614.html - https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00060.html + https://lists.gnu.org/r/emacs-devel/2018-01/msg00614.html + https://lists.gnu.org/r/emacs-devel/2018-02/msg00060.html 2018-07-13 Basil L. Contovounesios @@ -59330,8 +59330,8 @@ * lisp/custom.el (load-theme): Load byte-compiled file of safe themes when available. - https://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00614.html - https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00060.html + https://lists.gnu.org/r/emacs-devel/2018-01/msg00614.html + https://lists.gnu.org/r/emacs-devel/2018-02/msg00060.html 2018-07-13 Robert Pluim @@ -59629,11 +59629,11 @@ Add predicate proper-list-p For discussion, see emacs-devel thread starting at - https://lists.gnu.org/archive/html/emacs-devel/2018-04/msg00460.html. + https://lists.gnu.org/r/emacs-devel/2018-04/msg00460.html. * lisp/subr.el (proper-list-p): New function. Implementation suggested by Paul Eggert in - https://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00138.html. + https://lists.gnu.org/r/emacs-devel/2018-06/msg00138.html. * doc/lispref/lists.texi (List Elements): * etc/NEWS: Document proper-list-p. * lisp/org/ob-core.el (org-babel-insert-result): @@ -60559,7 +60559,7 @@ Mark a specific electric-pair-mode test as an expected failure - See https://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00535.html + See https://lists.gnu.org/r/emacs-devel/2018-06/msg00535.html * test/lisp/electric-tests.el (electric-pair-whitespace-chomping-2-at-point-4-in-c++-mode-in-strings): @@ -62491,7 +62491,7 @@ with C sources. The green light for this change had already been given some time ago in - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00385.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00385.html * src/Makefile.in (check-syntax): New target. (.PHONY): Add check-syntax. @@ -64326,7 +64326,7 @@ Use next-error-found to set next-error-last-buffer. - https://lists.gnu.org/archive/html/emacs-devel/2018-04/msg00207.html + https://lists.gnu.org/r/emacs-devel/2018-04/msg00207.html * lisp/simple.el (next-error-buffer): New buffer-local variable instead of making buffer-local next-error-last-buffer. (Bug#20489) @@ -65735,7 +65735,7 @@ 2018-04-05 Tino Calancha - Require secrets.el iif Emacs has dbusbind support + Require secrets.el if Emacs has dbusbind support * test/lisp/net/secrets-tests.el: Require secrets.el if and only if, Emacs has been compiled with dbusbind support. @@ -65794,7 +65794,7 @@ and disabled by `disabled'. (search-exit-option): Doc fix. (isearch-post-command-hook): Check for isearch-forward. - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00438.html + https://lists.gnu.org/r/emacs-devel/2018-03/msg00438.html 2018-04-04 Juri Linkov @@ -66167,7 +66167,7 @@ Don't wait for visible frames to become visible For discussion, see thread starting at - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00807.html. + https://lists.gnu.org/r/emacs-devel/2018-03/msg00807.html. * src/xterm.c (x_make_frame_visible): Check FRAME_VISIBLE_P before calling x_wait_for_event. @@ -67190,22 +67190,22 @@ * lisp/emacs-lisp/package.el (package-enable-at-startup): Update docstring to note that packages are now made available before loading the init file, rather than afterwards. See - https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00632.html + https://lists.gnu.org/r/emacs-devel/2018-02/msg00632.html (package-load-list): Refer to "making available" rather than "loading" for packages. See - https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00298.html + https://lists.gnu.org/r/emacs-devel/2018-02/msg00298.html * lisp/startup.el (command-line): Call `custom-reevaluate-setting' on predefined variables before loading the early init file and before `package-initialize' is called. This prevents `Info-default-directory-list' from being unbound when `package-initialize' tries to access it during startup. See - https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00545.html + https://lists.gnu.org/r/emacs-devel/2018-02/msg00545.html * lisp/emacs-lisp/package.el (package-initialize): Issue a warning if called twice. - See: https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00626.html - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00301.html + See: https://lists.gnu.org/r/emacs-devel/2018-02/msg00626.html + https://lists.gnu.org/r/emacs-devel/2018-03/msg00301.html 2018-03-18 Glenn Morris @@ -67236,7 +67236,7 @@ Date: Fri, 16 Mar 2018 10:23:31 -0500 Message-ID: <87po44jb7w.fsf@red-bean.com> - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00555.html + https://lists.gnu.org/r/emacs-devel/2018-03/msg00555.html 2018-03-18 Nicolas Petton @@ -67885,7 +67885,7 @@ * doc/emacs/search.texi: Replace search-exit-option option nil with append. - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00202.html + https://lists.gnu.org/r/emacs-devel/2018-03/msg00202.html 2018-03-08 Charles A. Roelli @@ -68097,7 +68097,7 @@ * doc/emacs/search.texi (Not Exiting Isearch): Document new values ‘shift-move’ and ‘move’ of search-exit-option. - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00013.html + https://lists.gnu.org/r/emacs-devel/2018-03/msg00013.html 2018-03-03 Glenn Morris @@ -68177,7 +68177,7 @@ but the Emacs 24 byte compiler doesn't recognize that define-obsolete-variable-alias defines a variable). - [1]: https://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00826.html + [1]: https://lists.gnu.org/r/emacs-devel/2018-02/msg00826.html 2018-03-01 Glenn Morris @@ -68976,11 +68976,11 @@ Discussion on emacs-devel leading up to this change (approximately 150 messages): - - https://lists.gnu.org/archive/html/emacs-devel/2017-08/msg00154.html - - https://lists.gnu.org/archive/html/emacs-devel/2017-08/msg00433.html - - https://lists.gnu.org/archive/html/emacs-devel/2017-09/msg00023.html - - https://lists.gnu.org/archive/html/emacs-devel/2017-09/msg00599.html - - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00332.html + - https://lists.gnu.org/r/emacs-devel/2017-08/msg00154.html + - https://lists.gnu.org/r/emacs-devel/2017-08/msg00433.html + - https://lists.gnu.org/r/emacs-devel/2017-09/msg00023.html + - https://lists.gnu.org/r/emacs-devel/2017-09/msg00599.html + - https://lists.gnu.org/r/emacs-devel/2017-10/msg00332.html * lisp/startup.el (early-init-file): New variable. (load-user-init-file): New function. @@ -71454,7 +71454,7 @@ In the macro expansion of the example above, right after: (setq k (+ k 1)) - evaluate the rest of the body forms iif the condition + evaluate the rest of the body forms if the condition (< k 2) is still valid. @@ -73761,7 +73761,7 @@ Merge from origin/emacs-26 - a89f0b6f33 maint: shorten https://lists.gnu.org/archive/html/... links + a89f0b6f33 maint: shorten https://lists.gnu.org/r/... links 8be3aee281 Merge from Gnulib 265cee553f Work around GCC bug 80776 on Fedora 27 x86 dc7a97fb84 Tweak copy-file, rename-file doc @@ -74031,7 +74031,7 @@ * lisp/emacs-lisp/copyright.el (copyright-update-year): Enlarge the scope of save-excursion. Reported in: - https://lists.gnu.org/archive/html/emacs-devel/2017-04/msg00271.html + https://lists.gnu.org/r/emacs-devel/2017-04/msg00271.html 2017-11-19 Vibhav Pant @@ -76193,7 +76193,7 @@ Clarify Gravatar docs For discussion, see the following thread: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00528.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00528.html * doc/misc/gnus.texi (X-Face): Fix cross-reference. (Gravatars): * lisp/gnus/gnus-gravatar.el (gnus-gravatar-too-ugly): @@ -76247,7 +76247,7 @@ This explanation was given by Eli Zaretskii on emacs-devel. For discussion, see: - https://lists.gnu.org/archive/html/emacs-devel/2019-07/msg00294.html + https://lists.gnu.org/r/emacs-devel/2019-07/msg00294.html * src/buffer.c (syms_of_buffer): Add warning to doc string of bidi-display-reordering to explain that it should only be used for @@ -77164,7 +77164,7 @@ Backport: Improve pure and side-effect-free docs For discussion, see thread starting at: - https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00316.html + https://lists.gnu.org/r/emacs-devel/2019-04/msg00316.html * doc/lispref/customize.texi (Composite Types): Do not overspecify :match-alternatives predicates. * doc/lispref/eval.texi (Intro Eval): Anchor definition of "side @@ -78845,7 +78845,7 @@ * doc/misc/ediff.texi (Major Entry Points): Update and clarify the documentation of 'ediff-windows-wordwise' and 'ediff-regions-wordwise'. See the discussion starting at - https://lists.gnu.org/archive/html/help-gnu-emacs/2018-11/msg00197.html + https://lists.gnu.org/r/help-gnu-emacs/2018-11/msg00197.html for the details. 2019-01-07 Eli Zaretskii @@ -80362,7 +80362,7 @@ Fix math-imaginary-i check Reported by Bastian Erdnüß at - . + . * lisp/calc/calc-cplx.el (math-imaginary-i): Check for a value of (polar 1 ). @@ -81058,7 +81058,7 @@ reject :server and :nowait (Bug#31903)", the sense of the SERVER check was accidentally reversed so that we ended up looking for the wrong ADDRESS. Reported by T.V Raman in - . + . 2018-07-12 Eli Zaretskii @@ -81111,8 +81111,8 @@ lists. For discussion, see the following emacs-devel subthreads: - https://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00112.html - https://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00138.html + https://lists.gnu.org/r/emacs-devel/2018-06/msg00112.html + https://lists.gnu.org/r/emacs-devel/2018-06/msg00138.html 2018-07-10 John Shahid @@ -81220,8 +81220,8 @@ Fix (length NON-SEQUENCE) documentation Suggested by Eli Zaretskii in the following threads: - https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00171.html - https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00206.html + https://lists.gnu.org/r/emacs-devel/2018-07/msg00171.html + https://lists.gnu.org/r/emacs-devel/2018-07/msg00206.html * doc/lispref/sequences.texi (Sequence Functions): Mention that 'length' signals a 'wrong-type-argument' also when given a @@ -81400,7 +81400,7 @@ * lisp/vc/vc-git.el (vc-git-dir-status-goto-stage): Call 'git ls-files -u' for the ls-files-conflict stage - (https://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00885.html). + (https://lists.gnu.org/r/emacs-devel/2018-06/msg00885.html). 2018-06-27 Eli Zaretskii @@ -81461,7 +81461,7 @@ See discussion: - https://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00826.html + https://lists.gnu.org/r/emacs-devel/2018-06/msg00826.html From: Eli Zaretskii Subject: Re: [Emacs-diffs] \ emacs-26 9a53b6d: Say how to override a primitive interactive spec @@ -81508,7 +81508,7 @@ From this thread on Emacs Devel: - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00923.html + https://lists.gnu.org/r/emacs-devel/2018-03/msg00923.html From: Eli Zaretskii To: Karl Fogel CC: Juri Linkov, Emacs Devel @@ -82175,7 +82175,7 @@ Don't wait for visible frames to become visible For discussion, see thread starting at - https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00807.html. + https://lists.gnu.org/r/emacs-devel/2018-03/msg00807.html. * src/xterm.c (x_make_frame_visible): Check FRAME_VISIBLE_P before calling x_wait_for_event. @@ -85543,7 +85543,7 @@ * doc/lispref/customize.texi (Custom Themes): Clarify .el preference. - https://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00824.html. + https://lists.gnu.org/r/emacs-devel/2018-01/msg00824.html. 2018-02-02 Eli Zaretskii @@ -88280,7 +88280,7 @@ 2017-11-26 Paul Eggert - maint: shorten https://lists.gnu.org/archive/html/... links + maint: shorten https://lists.gnu.org/r/... links 2017-11-26 Paul Eggert @@ -88288,7 +88288,7 @@ This incorporates: 2017-11-23 stat: work around Solaris bug with tv_nsec < 0 - 2017-11-12 maint: shorten https://lists.gnu.org/archive/html/... links + 2017-11-12 maint: shorten https://lists.gnu.org/r/... links * build-aux/config.sub, doc/misc/texinfo.tex, lib/allocator.h: * lib/fstatat.c, lib/intprops.h, lib/lstat.c, lib/signal.in.h: * lib/stat-time.h, lib/stdio-impl.h, lib/stdio.in.h: @@ -89542,7 +89542,7 @@ arbitrary buffers where this variable's value doesn't make sense. For a way to trigger a problem due to this, see discussion starting in - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00645.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00645.html * lisp/textmodes/tex-mode.el (tex-chktex): Use with-current-buffer. @@ -90150,7 +90150,7 @@ * configure.ac (CYGWIN_OBJ): Leave empty on QNX. Problem reported by Elad Lahav in: - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00750.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00750.html 2017-10-26 Dmitry Gutov @@ -90242,9 +90242,9 @@ Port to QNX Simplified version of a patch proposed by Elad Lahav in: - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00716.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00716.html which is based on a previous patch I proposed in: - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00707.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00707.html * configure.ac (opsys, CFLAGS, LIBS_SYSTEM, hybrid_malloc) (system_alloc, FIRST_PTY_LETTER, CYGWIN_OBJ): Set appropriately for QNX. @@ -90637,7 +90637,7 @@ Augment Flymake API for third-party extensions See - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00619.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00619.html * doc/misc/flymake.texi (Flymake error types): Rewrite example. @@ -91060,9 +91060,9 @@ Do not under-align pseudovectors Problem reported by Fabrice Popineau in: - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00357.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00357.html Also see diagnosis by Eli Zaretskii in: - https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00476.html + https://lists.gnu.org/r/emacs-devel/2017-10/msg00476.html * src/alloc.c (vector_alignment): Now a multiple of alignof (max_align_t). @@ -114927,7 +114927,7 @@ 2017-01-28 Yuri D'Elia - Subject: Check Bcc after the Messag hook has run + Subject: Check Bcc after the Message hook has run * lisp/gnus/message.el (message-send): If the hook modifies the message (mml tags or headers), we should check bcc on the diff --git a/doc/emacs/msdos-xtra.texi b/doc/emacs/msdos-xtra.texi index 230e918c842..045ac6c4605 100644 --- a/doc/emacs/msdos-xtra.texi +++ b/doc/emacs/msdos-xtra.texi @@ -563,7 +563,7 @@ finishes. Spell checking also works, by means of special support for synchronous invocation of the @code{ispell} program. This is slower than the -asynchronous invocation on other platforms +asynchronous invocation on other platforms. Instead of the Shell mode, which doesn't work on MS-DOS, you can use the @kbd{M-x eshell} command. This invokes the Eshell package that diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index d982a9e8787..2169a4120be 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -1984,11 +1984,21 @@ the @code{search-highlight-submatches} variable. If this variable's value is @code{nil}, no special highlighting is done, but if the value is non-@code{nil}, text that matches @samp{\( @dots{} \)} constructs (a.k.a.@: ``subexpressions'') in the regular expression will be -highlighted with distinct faces, named @code{isearch-group-odd} -for the odd group matches, and @code{isearch-group-even} -for the even group matches. For instance, when searching for -@samp{foo-\([0-9]+\)}, the part matched by @samp{[0-9]+} will be -highlighted with the @code{isearch-group-odd} face. +highlighted with distinct faces. By default, two distinct faces are +defined, named @code{isearch-group-1} and @code{isearch-group-2}. +With these two faces, odd-numbered subexpressions will be highlighted +using the @code{isearch-group-1} face and even-numbered subexpressions +will be highlighted using the @code{isearch-group-2} face. For +instance, when searching for @samp{foo-\([0-9]+\)\([a-z]+\)}, the part +matched by @samp{[0-9]+} will be highlighted with the +@code{isearch-group-1} face, and the part matched by @samp{[a-z]+} +will be highlighted using @code{isearch-group-2}. If you define +additional faces using the same numbering scheme, i.e.@: +@code{isearch-group-3}, @code{isearch-group-4}, @dots{}, then the face +@code{isearch-group-@var{M}} will be used to highlight the @var{M}'th, +@code{@var{N}+@var{M}}'th, @code{2@var{N}+@var{M}}'th, @dots{} +subexpressions, where @var{N} is the total number of faces of the form +@code{isearch-group-@var{M}}. @cindex lazy highlighting customizations @vindex isearch-lazy-highlight diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 9aefe1da17a..1bd2849bb3e 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -227,7 +227,7 @@ supports it in developing GNU and promoting software freedom.'' @c learn Emacs Lisp starting with the Emacs Lisp Reference Manual. @c @c Richard Stallman , -@c https://lists.gnu.org/archive/html/emacs-devel/2018-05/msg00374.html +@c https://lists.gnu.org/r/emacs-devel/2018-05/msg00374.html @shortcontents @contents diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 25f657404f3..1467854904c 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -930,9 +930,8 @@ was specified to run but remapped into another command. @defun this-command-keys This function returns a string or vector containing the key sequence -that invoked the present command, plus any previous commands that -generated the prefix argument for this command. Any events read by the -command using @code{read-event} without a timeout get tacked on to the end. +that invoked the present command. Any events read by the command +using @code{read-event} without a timeout get tacked on to the end. However, if the command has called @code{read-key-sequence}, it returns the last read key sequence. @xref{Key Sequence Input}. The @@ -943,7 +942,7 @@ fit in a string. @xref{Input Events}. @group (this-command-keys) ;; @r{Now use @kbd{C-u C-x C-e} to evaluate that.} - @result{} "^U^X^E" + @result{} "^X^E" @end group @end example @end defun diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 7d1c14c8169..d2e6cad6c45 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1970,36 +1970,45 @@ This function returns the width in columns of the string @var{string}, if it were displayed in the current buffer and the selected window. @end defun -@defun truncate-string-to-width string width &optional start-column padding ellipsis -This function returns the part of @var{string} that fits within -@var{width} columns, as a new string. +@defun truncate-string-to-width string width &optional start-column padding ellipsis ellipsis-text-property +This function returns a new string that is a truncation of @var{string} +which fits within @var{width} columns on display. -If @var{string} does not reach @var{width}, then the result ends where -@var{string} ends. If one multi-column character in @var{string} -extends across the column @var{width}, that character is not included in -the result. Thus, the result can fall short of @var{width} but cannot -go beyond it. +If @var{string} is narrower than @var{width}, the result is equal to +@var{string}; otherwise excess characters are omitted from the result. +If a multi-column character in @var{string} exceeds the goal +@var{width}, that character is omitted from the result. Thus, the +result can sometimes fall short of @var{width}, but cannot go beyond +it. The optional argument @var{start-column} specifies the starting column. If this is non-@code{nil}, then the first @var{start-column} columns of -the string are omitted from the value. If one multi-column character in +the string are omitted from the result. If one multi-column character in @var{string} extends across the column @var{start-column}, that -character is not included. +character is omitted. The optional argument @var{padding}, if non-@code{nil}, is a padding -character added at the beginning and end of the result string, to extend -it to exactly @var{width} columns. The padding character is used at the -end of the result if it falls short of @var{width}. It is also used at -the beginning of the result if one multi-column character in +character added at the beginning and end of the result string, to +extend it to exactly @var{width} columns. The padding character is +appended at the end of the result if it falls short of @var{width}, as +many times as needed to reach @var{width}. It is also prepended at +the beginning of the result if a multi-column character in @var{string} extends across the column @var{start-column}. -@vindex truncate-string-ellipsis If @var{ellipsis} is non-@code{nil}, it should be a string which will -replace the end of @var{string} (including any padding) if it extends -beyond @var{width}, unless the display width of @var{string} is equal -to or less than the display width of @var{ellipsis}. If -@var{ellipsis} is non-@code{nil} and not a string, it stands for -the value of the variable @code{truncate-string-ellipsis}. +replace the end of @var{string} when it is truncated. In this case, +more charcaters will be removed from @var{string} to free enough space +for @var{ellipsis} to fit within @var{width} columns. However, if +the display width of @var{string} is less than the display width of +@var{ellipsis}, @var{ellipsis} will not be appended to the result. If +@var{ellipsis} is non-@code{nil} and not a string, it stands for the +value returned by the function @code{truncate-string-ellipsis}, +described below. + +The optional argument @var{ellipsis-text-property}, if non-@code{nil}, +means hide the excess parts of @var{string} with a @code{display} text +property (@pxref{Display Property}) showing the ellipsis, instead of +actually truncating the string. @example (truncate-string-to-width "\tab\t" 12 4) @@ -2009,6 +2018,16 @@ the value of the variable @code{truncate-string-ellipsis}. @end example @end defun +@defun truncate-string-ellipsis +This function returns the string to be used as an ellipses in +@code{truncate-string-to-width} and other similar contexts. The value +is that of the variable @code{truncate-string-ellipsis}, if it's +non-@code{nil}, the string with the single character @sc{U+2026 +HORIZONTAL ELLIPSIS} if that character can be displayed on the +selected frame, and the string @samp{...} otherwise. +@end defun + + The following function returns the size in pixels of text as if it were displayed in a given window. This function is used by @code{fit-window-to-buffer} and @code{fit-frame-to-buffer} diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi index 6404e068dae..6e9ec47f7b0 100644 --- a/doc/lispref/edebug.texi +++ b/doc/lispref/edebug.texi @@ -863,19 +863,20 @@ to a non-@code{nil} value. @end example @noindent -Custom printing prints this as @samp{Result: #1=(#1# y)}. The -@samp{#1=} notation labels the structure that follows it with the label -@samp{1}, and the @samp{#1#} notation references the previously labeled -structure. This notation is used for any shared elements of lists or -vectors. +If @code{print-circle} is non-@code{nil}, printing functions (e.g., +@code{prin1}) will print @code{a} as @samp{#1=(#1# y)}. The +@samp{#1=} notation labels the structure that follows it with the +label @samp{1}, and the @samp{#1#} notation references the previously +labeled structure. This notation is used for any shared elements of +lists or vectors. @defopt edebug-print-circle If non-@code{nil}, Edebug binds @code{print-circle} to this value while printing results. The default value is @code{t}. @end defopt - Other programs can also use custom printing; see @file{cust-print.el} -for details. + See @xref{Output Functions} for further details about how printing +can be customized. @node Trace Buffer @subsection Trace Buffer diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 92cbc2a1c91..3b8b4fb3a9e 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -548,7 +548,7 @@ the functions in the list @code{after-insert-file-functions}. (@pxref{Coding Systems}) used for decoding the file's contents, including end-of-line conversion. However, if the file contains null bytes, it is by default visited without any code conversions. -@xref{Lisp and Coding Systems, inhibit-nul-byte-detection}. +@xref{Lisp and Coding Systems, inhibit-null-byte-detection}. If @var{visit} is non-@code{nil}, this function additionally marks the buffer as unmodified and sets up various fields in the buffer so that it diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index be2ee5721c2..41c86d69abf 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1729,7 +1729,8 @@ The command named @var{mode} first performs the standard actions such as setting the variable named @var{mode} and then executes the @var{body} forms, if any. It then runs the mode hook variable @code{@var{mode}-hook} and finishes by evaluating any form in -@code{:after-hook}. +@code{:after-hook}. (Note that all of this, including running the +hook, is done both when the mode is enabled and disabled.) @end defmac The initial value must be @code{nil} except in cases where (1) the diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index c6c78ec096e..8e9d62429c2 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -1379,7 +1379,7 @@ operates on the contents of @var{string} instead of bytes in the buffer. @end defun @cindex null bytes, and decoding text -@defvar inhibit-nul-byte-detection +@defvar inhibit-null-byte-detection If this variable has a non-@code{nil} value, null bytes are ignored when detecting the encoding of a region or a string. This allows the encoding of text that contains null bytes to be correctly detected, diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 855df4b9260..5fefab99d4c 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -1839,7 +1839,7 @@ system comes from @code{coding-system-for-read}, if that is non-@code{nil}; or else from the defaulting mechanism (@pxref{Default Coding Systems}). If the text output by a process contains null bytes, Emacs by default uses @code{no-conversion} for it; see -@ref{Lisp and Coding Systems, inhibit-nul-byte-detection}, for how to +@ref{Lisp and Coding Systems, inhibit-null-byte-detection}, for how to control this behavior. @strong{Warning:} Coding systems such as @code{undecided}, which diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index 4b2eab4eb76..5a1dd55248d 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -63,7 +63,7 @@ another. An overview of D-Bus can be found at * Signals:: Sending and receiving signals. * Alternative Buses:: Alternative buses and environments. * Errors and Events:: Errors and events. -* Monitoring Events:: Monitoring events. +* Monitoring Messages:: Monitoring messages. * Index:: Index including concepts, functions, variables. * GNU Free Documentation License:: The license for this documentation. @@ -1622,7 +1622,9 @@ are constructed incrementally by adding single methods or properties at a time, @var{dont-register-service} can be used to prevent other clients from discovering the still incomplete interface. -@noindent Example: +@code{dbus-register-property} returns a Lisp object, which can be used +as argument in @code{dbus-unregister-object} for removing the +registration for @var{property}. Example: @lisp (dbus-register-property @@ -1687,9 +1689,9 @@ It is also possible to apply the @code{dbus-get-property}, @defun dbus-unregister-object object This function unregisters @var{object} from the D-Bus. @var{object} must be the result of a preceding @code{dbus-register-method}, -@code{dbus-register-property} or @code{dbus-register-signal} call -(@pxref{Signals}). It returns @code{t} if @var{object} has been -unregistered, @code{nil} otherwise. +@code{dbus-register-property}, @code{dbus-register-signal} +(@pxref{Signals}) or @code{dbus-register-monitor} call. It returns +@code{t} if @var{object} has been unregistered, @code{nil} otherwise. When @var{object} identifies the last method or property, which is registered for the respective service, Emacs releases its association @@ -2099,24 +2101,24 @@ D-Bus applications running. They should therefore check carefully, whether a given D-Bus error is related to them. -@node Monitoring Events -@chapter Monitoring events. +@node Monitoring Messages +@chapter Monitoring messages. @cindex monitoring @defun dbus-register-monitor bus &optional handler &key type sender destination path interface member -This function registers @var{handler} for monitor events on the D-Bus -@var{bus}. +This function registers @var{handler} for monitoring messages on the +D-Bus @var{bus}. @var{bus} is either a Lisp keyword, @code{:system} or @code{:session}, or a string denoting the bus address. @findex dbus-monitor-handler -@var{handler} is the function to be called when a monitor event -arrives. It is called with the `args' slot of the monitor event, -which are stripped off the type keywords. If @var{handler} is -@code{nil}, the default handler @code{dbus-monitor-handler} is -applied. This default handler behaves similar to the -@command{dbus-monitor} program. +@var{handler} is the function to be called when a D-Bus event to be +monitored arrives. It is called with the @var{args} slot of the D-Bus +event (@pxref{Errors and Events}), which are stripped off the type +keywords. If @var{handler} is @code{nil}, the default handler +@code{dbus-monitor-handler} is applied. This default handler behaves +similar to the @command{dbus-monitor} program. The other arguments are keyword-value pairs. @code{:type @var{type}} defines the message type to be monitored. If given, it must be equal @@ -2132,6 +2134,9 @@ names. @code{:member @var{member}} is either a method name, a signal name, or an error name. +@code{dbus-register-monitor} returns a Lisp object, which can be used +as argument in @code{dbus-unregister-object} for removing the monitor. + The following form shows all D-Bus events on the session bus in buffer @samp{*D-Bus Monitor*}: diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index ee20d28ce66..f356dfe4d05 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -1737,12 +1737,6 @@ of doing your job. Note that this variable is used before @vindex gnus-no-groups-message Message displayed by Gnus when no groups are available. -@item gnus-use-backend-marks -@vindex gnus-use-backend-marks -If non-@code{nil}, Gnus will store article marks both in the -@file{.newsrc.eld} file and in the backends. This will slow down -group operation some. - @end table diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 0d2a1fdbc8f..0a26e9f702c 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -1088,7 +1088,7 @@ } % The -2 in the arguments here gives all the input to TeX catcode 12 % (other) or 10 (space), preventing undefined control sequence errors. See - % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html + % https://lists.gnu.org/r/bug-texinfo/2019-08/msg00031.html % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 1b5339b8d26..0e397f4c244 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -4280,8 +4280,8 @@ first saving to a temporary file. @vindex tramp-local-host-regexp When connecting to a local host, @value{tramp} uses some internal -optimizations. They fail, when there is a chrooted environment. In -order to disable those optimizations, set user option +optimizations. They fail when Emacs runs in a chrooted environment. +In order to disable those optimizations, set user option @code{tramp-local-host-regexp} to @code{nil}. diff --git a/etc/NEWS b/etc/NEWS index 88957fb01a9..e1f9382228e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -85,6 +85,10 @@ useful on systems such as FreeBSD which ships only with "etc/termcap". * Changes in Emacs 28.1 +*** New var 'redisplay-skip-initial-frame' to enable batch redisplay tests. +Setting it to nil forces the redisplay to do its job even in the +initial frame used in batch mode. + --- ** Support for the 'strike-through' face attribute on TTY frames. If your terminal's termcap or terminfo database entry has the 'smxx' @@ -541,6 +545,11 @@ grep emits SGR ANSI escape sequences to color its output. The new variable markers in order to provide highlighting in the source buffer. The variable can be customized to accommodate other grep-like tools. +--- +*** The 'lgrep' command now ignores directories. +On systems where the grep command supports it, directories will be +skipped. + ** Help +++ @@ -1102,9 +1111,12 @@ keystrokes. +++ *** Interactive regular expression search now uses faces for sub-groups. -E.g., 'C-M-s foo-\([0-9]+\)' will now use the 'isearch-group-odd' face +E.g., 'C-M-s foo-\([0-9]+\)' will now use the 'isearch-group-1' face on the part of the regexp that matches the sub-expression "[0-9]+". -The even group matches are highlighted with the 'isearch-group-even' face. +By default, there are two faces for sub-group highlighting, but you +can define more faces whose names are of the form 'isearch-group-N', +where N are successive numbers above 2. + This is controlled by the 'search-highlight-submatches' user option. This feature is available only on terminals that have enough colors to distinguish between sub-expression highlighting. @@ -1474,6 +1486,12 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el. * Lisp Changes in Emacs 28.1 ++++ +** 'truncate-string-ellipsis' now uses '…' by default. +Modes that use 'truncate-string-to-width' with non-nil, non-string +argument 'ellipsis', will now indicate truncation using '…' when +the selected frame can display it, and using "..." otherwise. + +++ *** New command 'make-directory-autoloads'. This does the same as the old command 'update-directory-autoloads', @@ -1611,6 +1629,8 @@ convert them to a list '(R G B)' of primary color values. This user option can be one of the predefined styles or a function to personalize the uniquified buffer name. ++++ +** 'inhibit-nul-byte-detection' is renamed to 'inhibit-null-byte-detection'. * Changes in Emacs 28.1 on Non-Free Operating Systems diff --git a/etc/PROBLEMS b/etc/PROBLEMS index dada27fa55c..41d5ea1bb75 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -786,7 +786,7 @@ build emacs with Cairo enabled ("configure --with-cairo" and have the appropriate Cairo development packages installed) as this configuration does not suffer from this problem. See and - + for more discussion. ** Under X, an unexpected monospace font is used as the default font. diff --git a/etc/TODO b/etc/TODO index 467b08e0bf2..4f9ea7e5d46 100644 --- a/etc/TODO +++ b/etc/TODO @@ -525,7 +525,7 @@ Save backtraces when errors happen during specified filters, specified timers, and specified hooks. ** Install mmc@maruska.dyndns.org's no-flicker change -https://lists.gnu.org/archive/html/emacs-devel/2005-12/msg00699.html +https://lists.gnu.org/r/emacs-devel/2005-12/msg00699.html I don't know if this is still relevant. I can't reach the URLs in the above message thread and double-buffering may have solved some @@ -849,7 +849,7 @@ designed to be compatible with multiple Emacs ports. (See the scratch/nsxwidget branch, and the discussion around Objective-C code and GCC at -https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00072.html) +https://lists.gnu.org/r/emacs-devel/2019-08/msg00072.html ) **** Respect 'frame-inhibit-implied-resize' When the variable 'frame-inhibit-implied-resize' is non-nil, frames diff --git a/lisp/ChangeLog.12 b/lisp/ChangeLog.12 index a9d0067598e..40aa8c4dc83 100644 --- a/lisp/ChangeLog.12 +++ b/lisp/ChangeLog.12 @@ -16274,7 +16274,7 @@ (c-guess-basic-syntax): Adapt case 5B for the new `c-just-after-func-arglist-p'. Merge cases 5B.1 and 5B.3. - Remove cases 5D.1 and 5D.2 since they aren't trigged anymore (case 5B.1 + Remove cases 5D.1 and 5D.2 since they aren't triggered anymore (case 5B.1 covers all cases now). * progmodes/cc-defs.el (c-point): Add `bosws' and `eosws'. @@ -32889,7 +32889,7 @@ 2005-01-14 Nick Roberts - * xt-mouse.el (xterm-mouse-event): Compute window co-ordinates + * xt-mouse.el (xterm-mouse-event): Compute window coordinates more carefully. 2005-01-13 Stefan Monnier diff --git a/lisp/ChangeLog.17 b/lisp/ChangeLog.17 index 1869f4e4c4a..8039e3f28a3 100644 --- a/lisp/ChangeLog.17 +++ b/lisp/ChangeLog.17 @@ -6540,8 +6540,8 @@ (newsticker--image-get): New arguments FILENAME and DIRECTORY. Use `url-retrieve' if `newsticker-retrieval-method' is 'intern. (newsticker--image-download-by-wget): New. Use process properties - for storing informations. - (newsticker--image-sentinel): Read informations from process properties. + for storing information. + (newsticker--image-sentinel): Read information from process properties. (newsticker--image-save) (newsticker--image-remove) (newsticker--image-download-by-url) diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el index 33fd1af6ffb..aa10d55e52c 100644 --- a/lisp/calc/calc-bin.el +++ b/lisp/calc/calc-bin.el @@ -403,7 +403,7 @@ (setq a (math-clip a w))) (let ((two-to-sizem1 (math-power-of-2 (1- w))) (sh (calcFunc-lsh a n w))) - (cond ((Math-natnum-lessp a two-to-sizem1) + (cond ((zerop (logand a two-to-sizem1)) sh) ((Math-lessp n (- 1 w)) (math-add (math-mul two-to-sizem1 2) -1)) diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el index 71321e12da3..94bb7fa8bef 100644 --- a/lisp/cedet/semantic.el +++ b/lisp/cedet/semantic.el @@ -195,13 +195,13 @@ during a flush when the cache is given a new value of nil.") (make-variable-buffer-local 'semantic-parse-tree-state) (defmacro semantic-parse-tree-unparseable () - "Indicate that the current buffer is unparseable. + "Indicate that the current buffer is unparsable. It is also true that the parse tree will need either updating or a rebuild. This state will be changed when the user edits the buffer." '(setq semantic-parse-tree-state 'unparseable)) (defmacro semantic-parse-tree-unparseable-p () - "Return non-nil if the current buffer has been marked unparseable." + "Return non-nil if the current buffer has been marked unparsable." '(eq semantic-parse-tree-state 'unparseable)) (defmacro semantic-parse-tree-set-needs-update () @@ -539,14 +539,14 @@ If the buffer cache is out of date, attempt an incremental reparse. If the buffer has not been parsed before, or if the incremental reparse fails, then parse the entire buffer. If a lexical error had been previously discovered and the buffer -was marked unparseable, then do nothing, and return the cache." +was marked unparsable, then do nothing, and return the cache." (and ;; Is this a semantic enabled buffer? (semantic-active-p) ;; Application hooks say the buffer is safe for parsing (run-hook-with-args-until-failure 'semantic--before-fetch-tags-hook) - ;; If the buffer was previously marked unparseable, + ;; If the buffer was previously marked unparsable, ;; then don't waste our time. (not (semantic-parse-tree-unparseable-p)) ;; The parse tree actually needs to be refreshed @@ -617,7 +617,7 @@ Does nothing if the current buffer doesn't need reparsing." ;; do them here, then all the bovination hooks are not run, and ;; we save lots of time. (cond - ;; If the buffer was previously marked unparseable, + ;; If the buffer was previously marked unparsable, ;; then don't waste our time. ((semantic-parse-tree-unparseable-p) nil) diff --git a/lisp/comint.el b/lisp/comint.el index 611947605fb..944e1ae8c06 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -362,6 +362,7 @@ This variable is buffer-local." ;; Some implementations of passwd use "Password (again)" as the 2nd prompt. ;; Something called "perforce" uses "Enter password:". ;; OpenVPN prints a prompt like: "Enter Auth Password:". +;; OpenBSD doas prints "doas (user@host) password:". ;; See ert test `comint-test-password-regexp'. (defcustom comint-password-prompt-regexp (concat @@ -370,7 +371,7 @@ This variable is buffer-local." '("Enter" "enter" "Enter same" "enter same" "Enter the" "enter the" "Enter Auth" "enter auth" "Old" "old" "New" "new" "'s" "login" "Kerberos" "CVS" "UNIX" " SMB" "LDAP" "PEM" "SUDO" - "[sudo]" "Repeat" "Bad" "Retype") + "[sudo]" "doas" "Repeat" "Bad" "Retype") t) ;; Allow for user name to precede password equivalent (Bug#31075). " +.*\\)" diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index a62b623c44f..9c5d89f89ff 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -487,6 +487,14 @@ Return a list suitable for use in `interactive'." (if (symbolp v) v nil) (intern val))))) +(defvar custom-actioned-widget nil + "Widget for which to show the menu of available actions. + +When showing a menu for a custom-variable, custom-face or custom-group widget, +the respective custom-*-action functions bind this variable to that widget, and +the respective custom-*-menu menus use the binding in their :enable and +:selected forms.") + (defun custom-menu-filter (menu widget) "Convert MENU to the form used by `widget-choose'. MENU should be in the same format as `custom-variable-menu'. @@ -2851,53 +2859,81 @@ otherwise." (defun custom-variable-standard-value (widget) (get (widget-value widget) 'standard-value)) -(defvar custom-variable-menu - `(("Set for Current Session" custom-variable-set - (lambda (widget) - (eq (widget-get widget :custom-state) 'modified))) - ;; Note that in all the backquoted code in this file, we test - ;; init-file-user rather than user-init-file. This is in case - ;; cus-edit is loaded by something in site-start.el, because - ;; user-init-file is not set at that stage. - ;; https://lists.gnu.org/r/emacs-devel/2007-10/msg00310.html - ,@(when (or custom-file init-file-user) - '(("Save for Future Sessions" custom-variable-save - (lambda (widget) - (memq (widget-get widget :custom-state) - '(modified set changed rogue)))))) - ("Undo Edits" custom-redraw - (lambda (widget) - (and (default-boundp (widget-value widget)) - (memq (widget-get widget :custom-state) '(modified changed))))) - ("Revert This Session's Customization" custom-variable-reset-saved - (lambda (widget) - (memq (widget-get widget :custom-state) - '(modified set changed rogue)))) - ,@(when (or custom-file init-file-user) - '(("Erase Customization" custom-variable-reset-standard - (lambda (widget) - (and (get (widget-value widget) 'standard-value) - (memq (widget-get widget :custom-state) - '(modified set changed saved rogue))))))) - ("Set to Backup Value" custom-variable-reset-backup - (lambda (widget) - (get (widget-value widget) 'backup-value))) - ("---" ignore ignore) - ("Add Comment" custom-comment-show custom-comment-invisible-p) - ("---" ignore ignore) - ("Show Current Value" custom-variable-edit - (lambda (widget) - (eq (widget-get widget :custom-form) 'lisp))) - ("Show Saved Lisp Expression" custom-variable-edit-lisp - (lambda (widget) - (eq (widget-get widget :custom-form) 'edit)))) - "Alist of actions for the `custom-variable' widget. +(defvar custom-variable-menu nil + "If non-nil, an alist of actions for the `custom-variable' widget. + +This variable is kept for backward compatibility reasons, please use +`custom-variable-extended-menu' instead. + Each entry has the form (NAME ACTION FILTER) where NAME is the name of the menu entry, ACTION is the function to call on the widget when the menu is selected, and FILTER is a predicate which takes a `custom-variable' widget as an argument, and returns non-nil if ACTION is valid on that widget. If FILTER is nil, ACTION is always valid.") +(defvar custom-variable-extended-menu + ;; No need to give the keymap a prompt, `widget-choose' takes care of it. + (let ((map (make-sparse-keymap))) + (define-key-after map [custom-variable-set] + '(menu-item "Set for Current Session" custom-variable-set + :enable (eq (widget-get custom-actioned-widget :custom-state) + 'modified))) + ;; Conditionally add items that depend on having loaded the custom-file, + ;; rather than giving it a :visible form, because we used to conditionally + ;; add this item when using simplified menus. + ;; Note that we test init-file-user rather than user-init-file. This is + ;; in case cus-edit is loaded by something in site-start.el, because + ;; user-init-file is not set at that stage. + ;; https://lists.gnu.org/r/emacs-devel/2007-10/msg00310.html + (when (or custom-file init-file-user) + (define-key-after map [custom-variable-save] + '(menu-item "Save for Future Sessions" custom-variable-save + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set changed rogue))))) + (define-key-after map [custom-redraw] + '(menu-item "Undo Edits" custom-redraw + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified changed)))) + (define-key-after map [custom-variable-reset-saved] + '(menu-item "Revert This Session's Customization" + custom-variable-reset-saved + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set changed rogue)))) + (when (or custom-file init-file-user) + (define-key-after map [custom-variable-reset-standard] + '(menu-item "Erase Customization" custom-variable-reset-standard + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set changed saved rogue))))) + (define-key-after map [custom-variable-reset-backup] + '(menu-item "Set to Backup Value" custom-variable-reset-backup + :enable (get + (widget-value custom-actioned-widget) + 'backup-value))) + (define-key-after map [sep0] + '(menu-item "---")) + (define-key-after map [custom-comment-show] + '(menu-item "Add Comment" custom-comment-show + :enable (custom-comment-invisible-p custom-actioned-widget))) + (define-key-after map [sep1] + '(menu-item "---")) + (define-key-after map [custom-variable-edit] + '(menu-item "Show Current Value" custom-variable-edit + :button (:radio . (eq (widget-get custom-actioned-widget + :custom-form) + 'edit)))) + (define-key-after map [custom-variable-edit-lisp] + '(menu-item "Show Saved Lisp Expression" custom-variable-edit-lisp + :button (:radio . (eq (widget-get custom-actioned-widget + :custom-form) + 'lisp)))) + map) + "A menu for `custom-variable' widgets. +Used in `custom-variable-action' to show a menu to the user.") + (defun custom-variable-action (widget &optional event) "Show the menu for `custom-variable' WIDGET. Optional EVENT is the location for the menu." @@ -2907,12 +2943,17 @@ Optional EVENT is the location for the menu." (custom-variable-state-set widget)) (custom-redraw-magic widget) (let* ((completion-ignore-case t) + (custom-actioned-widget widget) (answer (widget-choose (concat "Operation on " - (custom-unlispify-tag-name - (widget-get widget :value))) - (custom-menu-filter custom-variable-menu - widget) - event))) + (custom-unlispify-tag-name + (widget-get widget :value))) + ;; Get rid of checks like this one if we ever + ;; remove the simplified menus. + (if custom-variable-menu + (custom-menu-filter custom-variable-menu + widget) + custom-variable-extended-menu) + event))) (if answer (funcall answer widget))))) @@ -3676,39 +3717,66 @@ the present value is saved to its :shown-value property instead." (widget-put widget :children children) (custom-face-state-set widget)))))) -(defvar custom-face-menu - `(("Set for Current Session" custom-face-set) - ,@(when (or custom-file init-file-user) - '(("Save for Future Sessions" custom-face-save))) - ("Undo Edits" custom-redraw - (lambda (widget) - (memq (widget-get widget :custom-state) '(modified changed)))) - ("Revert This Session's Customization" custom-face-reset-saved - (lambda (widget) - (memq (widget-get widget :custom-state) '(modified set changed)))) - ,@(when (or custom-file init-file-user) - '(("Erase Customization" custom-face-reset-standard - (lambda (widget) - (get (widget-value widget) 'face-defface-spec))))) - ("---" ignore ignore) - ("Add Comment" custom-comment-show custom-comment-invisible-p) - ("---" ignore ignore) - ("For Current Display" custom-face-edit-selected - (lambda (widget) - (not (eq (widget-get widget :custom-form) 'selected)))) - ("For All Kinds of Displays" custom-face-edit-all - (lambda (widget) - (not (eq (widget-get widget :custom-form) 'all)))) - ("Show Lisp Expression" custom-face-edit-lisp - (lambda (widget) - (not (eq (widget-get widget :custom-form) 'lisp))))) - "Alist of actions for the `custom-face' widget. +(defvar custom-face-menu nil + "If non-nil, an alist of actions for the `custom-face' widget. + +This variable is kept for backward compatibility reasons, please use +`custom-face-extended-menu' instead. + Each entry has the form (NAME ACTION FILTER) where NAME is the name of the menu entry, ACTION is the function to call on the widget when the menu is selected, and FILTER is a predicate which takes a `custom-face' widget as an argument, and returns non-nil if ACTION is valid on that widget. If FILTER is nil, ACTION is always valid.") +(defvar custom-face-extended-menu + (let ((map (make-sparse-keymap))) + (define-key-after map [custom-face-set] + '(menu-item "Set for Current Session" custom-face-set)) + (when (or custom-file init-file-user) + (define-key-after map [custom-face-save] + '(menu-item "Save for Future Sessions" custom-face-save))) + (define-key-after map [custom-redraw] + '(menu-item "Undo Edits" custom-redraw + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified changed)))) + (define-key-after map [custom-face-reset-saved] + '(menu-item "Revert This Session's Customization" custom-face-reset-saved + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set changed)))) + (when (or custom-file init-file-user) + (define-key-after map [custom-face-reset-standard] + '(menu-item "Erase Customization" custom-face-reset-standard + :enable (get (widget-value custom-actioned-widget) + 'face-defface-spec)))) + (define-key-after map [sep0] + '(menu-item "---")) + (define-key-after map [custom-comment-show] + '(menu-item "Add Comment" custom-comment-show + :enable (custom-comment-invisible-p custom-actioned-widget))) + (define-key-after map [sep1] + '(menu-item "---")) + (define-key-after map [custom-face-edit-selected] + '(menu-item "For Current Display" custom-face-edit-selected + :button (:radio . (eq (widget-get custom-actioned-widget + :custom-form) + 'selected)))) + (define-key-after map [custom-face-edit-all] + '(menu-item "For All Kinds of Displays" custom-face-edit-all + :button (:radio . (eq (widget-get custom-actioned-widget + :custom-form) + 'all)))) + (define-key-after map [custom-face-edit-lisp] + '(menu-item "Show Lisp Expression" custom-face-edit-lisp + :button (:radio . (eq (widget-get custom-actioned-widget + :custom-form) + 'lisp)))) + map) + "A menu for `custom-face' widgets. +Used in `custom-face-action' to show a menu to the user.") + (defun custom-face-edit-selected (widget) "Edit selected attributes of the value of WIDGET." (widget-put widget :custom-state 'unknown) @@ -3775,12 +3843,15 @@ Optional EVENT is the location for the menu." (if (eq (widget-get widget :custom-state) 'hidden) (custom-toggle-hide widget) (let* ((completion-ignore-case t) + (custom-actioned-widget widget) (symbol (widget-get widget :value)) (answer (widget-choose (concat "Operation on " (custom-unlispify-tag-name symbol)) - (custom-menu-filter custom-face-menu - widget) - event))) + (if custom-face-menu + (custom-menu-filter custom-face-menu + widget) + custom-face-extended-menu) + event))) (if answer (funcall answer widget))))) @@ -4310,43 +4381,65 @@ This works for both graphical and text displays." (insert "\n") (custom-group--draw-horizontal-line))))) -(defvar custom-group-menu - `(("Set for Current Session" custom-group-set - (lambda (widget) - (eq (widget-get widget :custom-state) 'modified))) - ,@(when (or custom-file init-file-user) - '(("Save for Future Sessions" custom-group-save - (lambda (widget) - (memq (widget-get widget :custom-state) '(modified set)))))) - ("Undo Edits" custom-group-reset-current - (lambda (widget) - (memq (widget-get widget :custom-state) '(modified)))) - ("Revert This Session's Customizations" custom-group-reset-saved - (lambda (widget) - (memq (widget-get widget :custom-state) '(modified set)))) - ,@(when (or custom-file init-file-user) - '(("Erase Customization" custom-group-reset-standard - (lambda (widget) - (memq (widget-get widget :custom-state) '(modified set saved))))))) - "Alist of actions for the `custom-group' widget. +(defvar custom-group-menu nil + "If non-nil, an alist of actions for the `custom-group' widget. + +This variable is kept for backward compatibility reasons, please use +`custom-group-extended-menu' instead. + Each entry has the form (NAME ACTION FILTER) where NAME is the name of the menu entry, ACTION is the function to call on the widget when the menu is selected, and FILTER is a predicate which takes a `custom-group' widget as an argument, and returns non-nil if ACTION is valid on that widget. If FILTER is nil, ACTION is always valid.") +(defvar custom-group-extended-menu + (let ((map (make-sparse-keymap))) + (define-key-after map [custom-group-set] + '(menu-item "Set for Current Session" custom-group-set + :enable (eq (widget-get custom-actioned-widget :custom-state) + 'modified))) + (when (or custom-file init-file-user) + (define-key-after map [custom-group-save] + '(menu-item "Save for Future Sessions" custom-group-save + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set))))) + (define-key-after map [custom-group-reset-current] + '(menu-item "Undo Edits" custom-group-reset-current + :enable (eq (widget-get custom-actioned-widget :custom-state) + 'modified))) + (define-key-after map [custom-group-reset-saved] + '(menu-item "Revert This Session's Customizations" + custom-group-reset-saved + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set)))) + (when (or custom-file init-file-user) + (define-key-after map [custom-group-reset-standard] + '(menu-item "Erase Customization" custom-group-reset-standard + :enable (memq + (widget-get custom-actioned-widget :custom-state) + '(modified set saved))))) + map) + "A menu for `custom-group' widgets. +Used in `custom-group-action' to show a menu to the user.") + (defun custom-group-action (widget &optional event) "Show the menu for `custom-group' WIDGET. Optional EVENT is the location for the menu." (if (eq (widget-get widget :custom-state) 'hidden) (custom-toggle-hide widget) (let* ((completion-ignore-case t) + (custom-actioned-widget widget) (answer (widget-choose (concat "Operation on " (custom-unlispify-tag-name (widget-get widget :value))) - (custom-menu-filter custom-group-menu - widget) - event))) + (if custom-group-menu + (custom-menu-filter custom-group-menu + widget) + custom-group-extended-menu) + event))) (if answer (funcall answer widget))))) diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 8aaf38aab21..02d89650b8b 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -910,17 +910,27 @@ Resize the containing frame if needed." (width-diff (- img-width win-width)) (height-diff (- img-height win-height)) (new-frame-params + ;; If we can't resize the window, try and resize the frame. + ;; We used to compare the `window-width/height` and the + ;; `frame-width/height` instead of catching the errors, but + ;; it's too fiddly (e.g. in the presence of the miniwindow, + ;; the height the frame should be equal to the height of the + ;; root window +1). (append - (if (= (window-width) (frame-width)) - `((width . (text-pixels - . ,(+ (frame-text-width) width-diff)))) - (enlarge-window (/ width-diff (frame-char-width)) 'horiz) - nil) - (if (= (window-height) (frame-height)) - `((height . (text-pixels - . ,(+ (frame-text-height) height-diff)))) - (enlarge-window (/ height-diff (frame-char-height)) nil) - nil)))) + (condition-case nil + (progn + (enlarge-window (/ width-diff (frame-char-width)) 'horiz) + nil) + (error + `((width . (text-pixels + . ,(+ (frame-text-width) width-diff)))))) + (condition-case nil + (progn + (enlarge-window (/ height-diff (frame-char-height)) nil) + nil) + (error + `((height . (text-pixels + . ,(+ (frame-text-height) height-diff))))))))) (when new-frame-params (modify-frame-parameters (selected-frame) new-frame-params)))) diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index b1e27a4dbda..13205011ebf 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -284,7 +284,7 @@ The information is logged to `byte-compile-log-buffer'." ;; This needs to be autoloaded because it needs to be available to ;; Emacs before the byte compiler is loaded, otherwise Emacs will not ;; know that this variable is marked as safe until it is too late. -;; (See https://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00261.html ) +;; (See https://lists.gnu.org/r/emacs-devel/2018-01/msg00261.html ) ;;;###autoload(put 'byte-compile-error-on-warn 'safe-local-variable 'booleanp) (defconst byte-compile-warning-types diff --git a/lisp/frame.el b/lisp/frame.el index 7751ae1303f..29ac862ccd4 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1244,13 +1244,10 @@ face specs for the new background mode." ;; during startup with -rv on the command ;; line for the initial frame, because frames ;; are not recorded in the pdump file. - (assq face (frame-face-alist)) + (assq face (frame-face-alist frame)) (face-spec-match-p face (face-user-default-spec face) - ;; FIXME: why selected-frame and - ;; not the frame that is the - ;; argument to this function? - (selected-frame)))) + frame))) (push face locally-modified-faces))) ;; Now change to the new frame parameters (modify-frame-parameters frame params) diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el index f748996acc8..6a7e81b3e91 100644 --- a/lisp/gnus/gnus-agent.el +++ b/lisp/gnus/gnus-agent.el @@ -3812,7 +3812,6 @@ has been fetched." t)))) (defun gnus-agent-store-article (article group) - (declare (obsolete nil "28.1")) (let* ((gnus-command-method (gnus-find-method-for-group group)) (file (gnus-agent-article-name (number-to-string article) group)) (file-name-coding-system nnmail-pathname-coding-system) diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index b1147924ffa..2d9d5ece01a 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -7092,7 +7092,10 @@ If given a prefix, show the hidden text instead." gnus-summary-buffer) (when gnus-keep-backlog (gnus-backlog-enter-article - group article (current-buffer)))) + group article (current-buffer))) + (when (and gnus-agent + (gnus-agent-group-covered-p group)) + (gnus-agent-store-article article group))) (setq result 'article)) (methods (setq gnus-override-method (pop methods))) diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el index 9bcb6c33a64..e3e81c8bbce 100644 --- a/lisp/gnus/gnus-async.el +++ b/lisp/gnus/gnus-async.el @@ -225,6 +225,12 @@ that was fetched." (save-excursion (save-restriction (narrow-to-region mark (point-max)) + ;; Put the articles into the agent, if they aren't already. + (when (and gnus-agent + (gnus-agent-group-covered-p group)) + (save-restriction + (narrow-to-region mark (point-max)) + (gnus-agent-store-article article group))) ;; Prefetch images for the groups that want that. (when (fboundp 'gnus-html-prefetch-images) (gnus-html-prefetch-images summary)) diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index b3ed5cb6647..561f199531e 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -6240,8 +6240,8 @@ If WHERE is `summary', the summary mode line format will be used." ;; We might have to chop a bit of the string off... (when (> (length mode-string) max-len) (setq mode-string - (concat (truncate-string-to-width mode-string (- max-len 3)) - "..."))))) + (truncate-string-to-width + mode-string (- max-len 3) nil nil t))))) ;; Update the mode line. (setq mode-line-buffer-identification (gnus-mode-line-buffer-identification (list mode-string))) diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 77856aeddec..a906e56aac6 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -1106,7 +1106,8 @@ point and mark around the citation text as modified." If nil, don't insert a signature. If t, insert `message-signature-file'. If a function or form, insert its result. -See `mail-signature' for the recommended format of a signature." +See `mail-signature' for the recommended format of a signature. +Also see `message-signature-insert-empty-line'." :version "23.2" :type '(choice string (const :tag "None" nil) diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index c9a748830c1..8ff3b56c5e6 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -1597,7 +1597,7 @@ If point is on a group name, this function operates on that group." (defun ibuffer-compile-make-substring-form (strvar maxvar from-end-p) (if from-end-p ;; FIXME: not sure if this case is correct (Bug#24972) - `(truncate-string-to-width str strlen (- strlen ,maxvar) nil ?\s) + `(truncate-string-to-width str strlen (- strlen ,maxvar) ?\s) `(truncate-string-to-width ,strvar ,maxvar nil ?\s))) (defun ibuffer-compile-make-format-form (strvar widthform alignment) diff --git a/lisp/info.el b/lisp/info.el index 20633fd0598..6dffb3993c4 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -638,14 +638,14 @@ Do the right thing if the file has been compressed or zipped." (insert-file-contents-literally fullname visit) (let ((inhibit-read-only t) (coding-system-for-write 'no-conversion) - (inhibit-nul-byte-detection t) ; Index nodes include null bytes + (inhibit-null-byte-detection t) ; Index nodes include null bytes (default-directory (or (file-name-directory fullname) default-directory))) (or (consp decoder) (setq decoder (list decoder))) (apply #'call-process-region (point-min) (point-max) (car decoder) t t nil (cdr decoder)))) - (let ((inhibit-nul-byte-detection t)) ; Index nodes include null bytes + (let ((inhibit-null-byte-detection t)) ; Index nodes include null bytes (insert-file-contents fullname visit))) ;; Clear the caches of modified Info files. @@ -1375,7 +1375,7 @@ is non-nil)." ;; Index nodes include null bytes. DIR ;; files should not have indices, but who ;; knows... - (let ((inhibit-nul-byte-detection t)) + (let ((inhibit-null-byte-detection t)) (insert-file-contents file) (setq Info-dir-file-name file) (push (current-buffer) buffers) diff --git a/lisp/international/ja-dic-cnv.el b/lisp/international/ja-dic-cnv.el index f5e70ce7021..5f645b6e8e4 100644 --- a/lisp/international/ja-dic-cnv.el +++ b/lisp/international/ja-dic-cnv.el @@ -329,12 +329,12 @@ Optional argument DIRNAME if specified is the directory name under which the generated Emacs Lisp is saved. The name of generated file is specified by the variable `ja-dic-filename'." (interactive "FSKK dictionary file: ") - (let* ((coding-system-for-read 'euc-japan) - (skkbuf (get-buffer-create " *skkdic-unannotated*")) + (let* ((skkbuf (get-buffer-create " *skkdic-unannotated*")) (buf (get-buffer-create "*skkdic-work*"))) ;; Set skkbuf to an unannotated copy of the dictionary. (with-current-buffer skkbuf - (insert-file-contents (expand-file-name filename)) + (let ((coding-system-for-read 'euc-japan)) + (insert-file-contents (expand-file-name filename))) (re-search-forward "^[^;]") (while (re-search-forward ";[^\n/]*/" nil t) (replace-match "/"))) diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el index 660ac58e022..8f316332249 100644 --- a/lisp/international/mule-util.el +++ b/lisp/international/mule-util.el @@ -44,9 +44,22 @@ (setq i (1+ i))))) string) -(defvar truncate-string-ellipsis "..." ;"…" +(defvar truncate-string-ellipsis nil "String to use to indicate truncation. -Serves as default value of ELLIPSIS argument to `truncate-string-to-width'.") +Serves as default value of ELLIPSIS argument to `truncate-string-to-width' +returned by the function `truncate-string-ellipsis'.") + +(defun truncate-string-ellipsis () + "Return the string used to indicate truncation. +Use the value of the variable `truncate-string-ellipsis' when it's non-nil. +Otherwise, return the Unicode character U+2026 \"HORIZONTAL ELLIPSIS\" +when it's displayable on the selected frame, or `...'. This function +needs to be called on every use of `truncate-string-to-width' to +decide whether the selected frame can display that Unicode character." + (cond + (truncate-string-ellipsis) + ((char-displayable-p ?…) "…") + ("..."))) ;;;###autoload (defun truncate-string-to-width (str end-column @@ -73,7 +86,7 @@ If ELLIPSIS is non-nil, it should be a string which will replace the end of STR (including any padding) if it extends beyond END-COLUMN, unless the display width of STR is equal to or less than the display width of ELLIPSIS. If it is non-nil and not a string, then ELLIPSIS -defaults to `truncate-string-ellipsis'. +defaults to `truncate-string-ellipsis', or to three dots when it's nil. If ELLIPSIS-TEXT-PROPERTY is non-nil, a too-long string will not be truncated, but instead the elided parts will be covered by a @@ -81,7 +94,7 @@ be truncated, but instead the elided parts will be covered by a (or start-column (setq start-column 0)) (when (and ellipsis (not (stringp ellipsis))) - (setq ellipsis truncate-string-ellipsis)) + (setq ellipsis (truncate-string-ellipsis))) (let ((str-len (length str)) (str-width (string-width str)) (ellipsis-width (if ellipsis (string-width ellipsis) 0)) diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 3edea7e7717..607287f59cd 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -856,10 +856,10 @@ VALUE is a CCL program name defined by `define-ccl-program'. The CCL program reads a character sequence and writes a byte sequence as an encoding result. -`:inhibit-nul-byte-detection' +`:inhibit-null-byte-detection' VALUE non-nil means Emacs ignore null bytes on code detection. -See the variable `inhibit-nul-byte-detection'. This attribute +See the variable `inhibit-null-byte-detection'. This attribute is meaningful only when `:coding-type' is `undecided'. `:inhibit-iso-escape-detection' @@ -904,7 +904,7 @@ non-ASCII files. This attribute is meaningful only when :ccl-encoder :valids)) ((eq coding-type 'undecided) - '(:inhibit-nul-byte-detection + '(:inhibit-null-byte-detection :inhibit-iso-escape-detection :prefer-utf-8)))))) diff --git a/lisp/isearch.el b/lisp/isearch.el index 781a8c5a93a..f39de79303d 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -271,8 +271,12 @@ are `word-search-regexp' \(`\\[isearch-toggle-word]'), `isearch-symbol-regexp' (defcustom search-highlight-submatches t "Whether to highlight regexp subexpressions of the current regexp match. -The faces used to do the highlights are named `isearch-group-odd' and -`isearch-group-even'." +The faces used to do the highlights are named `isearch-group-1', +`isearch-group-2', etc. (By default, only these 2 are defined.) +When there are more matches than faces, then faces are reused from the +beginning, in a cyclical manner, so the `isearch-group-1' face is +isreused for the third match. If you want to use more distinctive colors, +you can define more of these faces using the same numbering scheme." :type 'boolean :version "28.1") @@ -887,7 +891,7 @@ variable by the command `isearch-toggle-lax-whitespace'.") "Stack of search status elements. Each element is an `isearch--state' struct where the slots are [STRING MESSAGE POINT SUCCESS FORWARD OTHER-END WORD/REGEXP-FUNCTION - ERROR WRAPPED BARRIER CASE-FOLD-SEARCH POP-FUN]") + ERROR WRAPPED BARRIER CASE-FOLD-SEARCH POP-FUN MATCH-DATA]") (defvar isearch-string "") ; The current search string. (defvar isearch-message "") ; text-char-description version of isearch-string @@ -903,6 +907,7 @@ Each element is an `isearch--state' struct where the slots are "Recorded minimum/maximal point for the current search.") (defvar isearch-just-started nil) (defvar isearch-start-hscroll 0) ; hscroll when starting the search. +(defvar isearch-match-data nil) ; match-data of regexp-based search ;; case-fold-search while searching. ;; either nil, t, or 'yes. 'yes means the same as t except that mixed @@ -1221,6 +1226,7 @@ used to set the value of `isearch-regexp-function'." isearch-small-window nil isearch-just-started t isearch-start-hscroll (window-hscroll) + isearch-match-data nil isearch-opoint (point) search-ring-yank-pointer nil @@ -1349,8 +1355,8 @@ The last thing is to trigger a new round of lazy highlighting." (set-window-hscroll (selected-window) current-scroll)))) (if isearch-other-end (if (< isearch-other-end (point)) ; isearch-forward? - (isearch-highlight isearch-other-end (point)) - (isearch-highlight (point) isearch-other-end)) + (isearch-highlight isearch-other-end (point) isearch-match-data) + (isearch-highlight (point) isearch-other-end isearch-match-data)) (isearch-dehighlight)))) (setq ;; quit-flag nil not for isearch-mode isearch-adjusted nil @@ -1508,7 +1514,8 @@ REGEXP if non-nil says use the regexp search ring." (barrier isearch-barrier) (case-fold-search isearch-case-fold-search) (pop-fun (if isearch-push-state-function - (funcall isearch-push-state-function)))))) + (funcall isearch-push-state-function))) + (match-data isearch-match-data)))) (string nil :read-only t) (message nil :read-only t) (point nil :read-only t) @@ -1520,7 +1527,8 @@ REGEXP if non-nil says use the regexp search ring." (wrapped nil :read-only t) (barrier nil :read-only t) (case-fold-search nil :read-only t) - (pop-fun nil :read-only t)) + (pop-fun nil :read-only t) + (match-data nil :read-only t)) (defun isearch--set-state (cmd) (setq isearch-string (isearch--state-string cmd) @@ -1532,7 +1540,8 @@ REGEXP if non-nil says use the regexp search ring." isearch-error (isearch--state-error cmd) isearch-wrapped (isearch--state-wrapped cmd) isearch-barrier (isearch--state-barrier cmd) - isearch-case-fold-search (isearch--state-case-fold-search cmd)) + isearch-case-fold-search (isearch--state-case-fold-search cmd) + isearch-match-data (isearch--state-match-data cmd)) (if (functionp (isearch--state-pop-fun cmd)) (funcall (isearch--state-pop-fun cmd) cmd)) (goto-char (isearch--state-point cmd))) @@ -1624,6 +1633,7 @@ You can update the global isearch variables by setting new values to (isearch-adjusted isearch-adjusted) (isearch-yank-flag isearch-yank-flag) (isearch-error isearch-error) + (isearch-match-data isearch-match-data) (multi-isearch-file-list-new multi-isearch-file-list) (multi-isearch-buffer-list-new multi-isearch-buffer-list) @@ -3432,6 +3442,7 @@ Optional third argument, if t, means if fail just return nil (no error). (match-beginning 0) (match-end 0))) (setq retry nil))) (setq isearch-just-started nil) + (setq isearch-match-data (match-data t)) (if isearch-success (setq isearch-other-end (if isearch-forward (match-beginning 0) (match-end 0))))) @@ -3663,27 +3674,27 @@ since they have special meaning in a regexp." (defvar isearch-overlay nil) (defvar isearch-submatches-overlays nil) -(defface isearch-group-odd +(defface isearch-group-1 '((((class color) (min-colors 88) (background light)) - (:background "#ff00ff" :foreground "lightskyblue1")) + (:background "#f000f0" :foreground "lightskyblue1")) (((class color) (min-colors 88) (background dark)) - (:background "palevioletred3" :foreground "brown4")) + (:background "palevioletred1" :foreground "brown4")) (t (:inherit isearch))) "Face for highlighting Isearch the odd group matches." :group 'isearch :version "28.1") -(defface isearch-group-even +(defface isearch-group-2 '((((class color) (min-colors 88) (background light)) - (:background "#800080" :foreground "lightskyblue1")) + (:background "#a000a0" :foreground "lightskyblue1")) (((class color) (min-colors 88) (background dark)) - (:background "#905070" :foreground "brown4")) + (:background "palevioletred3" :foreground "brown4")) (t (:inherit isearch))) "Face for highlighting Isearch the even group matches." :group 'isearch :version "28.1") -(defun isearch-highlight (beg end) +(defun isearch-highlight (beg end &optional match-data) (if search-highlight (if isearch-overlay ;; Overlay already exists, just move it. @@ -3693,18 +3704,24 @@ since they have special meaning in a regexp." ;; 1001 is higher than lazy's 1000 and ediff's 100+ (overlay-put isearch-overlay 'priority 1001) (overlay-put isearch-overlay 'face isearch-face))) + (when (and search-highlight-submatches isearch-regexp) (mapc 'delete-overlay isearch-submatches-overlays) (setq isearch-submatches-overlays nil) - (dotimes (i (/ (length (match-data)) 2)) - (unless (zerop i) - (let ((ov (make-overlay (match-beginning i) (match-end i)))) - (overlay-put ov 'face (if (zerop (mod i 2)) - 'isearch-group-even - 'isearch-group-odd)) - (overlay-put ov 'priority 1002) - (push ov isearch-submatches-overlays)))))) + (let ((submatch-data (cddr (butlast match-data))) + (group 0) + ov face) + (while submatch-data + (setq group (1+ group)) + (setq ov (make-overlay (pop submatch-data) (pop submatch-data)) + face (intern-soft (format "isearch-group-%d" group))) + ;; Recycle faces from beginning. + (unless (facep face) + (setq group 1 face 'isearch-group-1)) + (overlay-put ov 'face face) + (overlay-put ov 'priority 1002) + (push ov isearch-submatches-overlays))))) (defun isearch-dehighlight () (when isearch-overlay diff --git a/lisp/leim/quail/latin-post.el b/lisp/leim/quail/latin-post.el index a033739efba..1d6aeddc060 100644 --- a/lisp/leim/quail/latin-post.el +++ b/lisp/leim/quail/latin-post.el @@ -937,7 +937,7 @@ Doubling the postfix separates the letter and postfix: e.g. a\\='\\=' -> a\\=' (quail-define-package "danish-postfix" "Latin-1" "DA<" t - "Danish input method (rule: AE -> Æ, OE -> Ø, AA -> Å, E\\=' -> É) + "Danish input method (rule: AE -> Æ, OE -> Ø, AA -> Å, E\\=' -> É, E= -> €) Doubling the postfix separates the letter and postfix: e.g. aee -> ae " @@ -951,6 +951,7 @@ Doubling the postfix separates the letter and postfix: e.g. aee -> ae ("AA" ?Å) ("aa" ?å) ("E'" ?É) + ("E=" ?€) ("e'" ?é) ("AEE" ["AE"]) @@ -960,6 +961,7 @@ Doubling the postfix separates the letter and postfix: e.g. aee -> ae ("AAA" ["AA"]) ("aaa" ["aa"]) ("E''" ["E'"]) + ("E==" ["E="]) ("e''" ["e'"]) ) @@ -1034,6 +1036,7 @@ AE -> Ä AEE -> AE OE -> Ö OEE -> OE +E= -> € " nil t nil nil nil nil nil nil nil nil t) @@ -1042,11 +1045,13 @@ OEE -> OE ("ae" ?ä) ("OE" ?Ö) ("oe" ?ö) + ("E=" ?€) ("AEE" ["AE"]) ("aee" ["ae"]) ("OEE" ["OE"]) ("oee" ["oe"]) + ("E==" ["E="]) ) (quail-define-package @@ -1061,6 +1066,8 @@ Par exemple: a\\=` -> à e\\=' -> é. En doublant la frappe des diacritiques, ils s'isoleront de la lettre. Par exemple: e\\='\\=' -> e\\=' +€ est produit par E=. + Œ est produit par O/." nil t nil nil nil nil nil nil nil nil t) @@ -1073,6 +1080,7 @@ Par exemple: e\\='\\=' -> e\\=' ("E'" ?É) ("E^" ?Ê) ("E\"" ?Ë) + ("E=" ?€) ("e`" ?è) ("e'" ?é) ("e^" ?ê) @@ -1104,6 +1112,7 @@ Par exemple: e\\='\\=' -> e\\=' ("E''" ["E'"]) ("E^^" ["E^"]) ("E\"\"" ["E\""]) + ("E==" ["E="]) ("e``" ["e`"]) ("e''" ["e'"]) ("e^^" ["e^"]) @@ -1140,6 +1149,7 @@ ue -> ü (not after a/e/q) uee -> ue sz -> ß szz -> sz +E= -> € " nil t nil nil nil nil nil nil nil nil t) @@ -1152,6 +1162,7 @@ szz -> sz ("ue" ?ü) ("sz" ?ß) ("SZ" ?ẞ) + ("E=" ?€) ("AEE" ["AE"]) ("aee" ["ae"]) @@ -1168,6 +1179,7 @@ szz -> sz ("Aue" ["Aue"]) ("que" ["que"]) ("Que" ["Que"]) + ("E==" ["E="]) ) (quail-define-package @@ -1184,6 +1196,7 @@ AE -> Æ OE -> Ö D/ -> Ð (eth) T/ -> Þ (thorn) +E= -> € Doubling the postfix separates the letter and postfix: e.g. a\\='\\=' -> a\\=' " nil t nil nil nil nil nil nil nil nil t) @@ -1238,7 +1251,7 @@ Doubling the postfix separates the letter and postfix: e.g. a\\='\\=' -> a\\=' a\\=` -> à A\\=` -> À e\\=' -> é << -> « e\\=` -> è E\\=` -> È E\\=' -> É >> -> » -i\\=` -> ì I\\=` -> Ì o_ -> º +i\\=` -> ì I\\=` -> Ì E= -> € o_ -> º o\\=` -> ò O\\=` -> Ò a_ -> ª u\\=` -> ù U\\=` -> Ù @@ -1252,6 +1265,7 @@ Doubling the postfix separates the letter and postfix: e.g. a\\=`\\=` -> a\\=` ("a`" ?à) ("E`" ?È) ("E'" ?É) + ("E=" ?€) ("e`" ?è) ("e'" ?é) ("I`" ?Ì) @@ -1269,6 +1283,7 @@ Doubling the postfix separates the letter and postfix: e.g. a\\=`\\=` -> a\\=` ("a``" ["a`"]) ("E``" ["E`"]) ("E''" ["E'"]) + ("E==" ["E="]) ("e``" ["e`"]) ("e''" ["e'"]) ("I``" ["I`"]) @@ -1285,7 +1300,8 @@ Doubling the postfix separates the letter and postfix: e.g. a\\=`\\=` -> a\\=` (quail-define-package "norwegian-postfix" "Latin-1" "NO<" t - "Norwegian (Norsk) input method (rule: AE->Æ OE->Ø AA->Å E\\='->É) + "Norwegian (Norsk) input method (rule: AE->Æ OE->Ø AA->Å E\\='->É + E= -> €) Doubling the postfix separates the letter and postfix: e.g. aee -> ae " @@ -1299,6 +1315,7 @@ Doubling the postfix separates the letter and postfix: e.g. aee -> ae ("AA" ?Å) ("aa" ?å) ("E'" ?É) + ("E=" ?€) ("e'" ?é) ("AEE" ["AE"]) @@ -1308,6 +1325,7 @@ Doubling the postfix separates the letter and postfix: e.g. aee -> ae ("AAA" ["AA"]) ("aaa" ["aa"]) ("E''" ["E'"]) + ("E==" ["E="]) ("e''" ["e'"]) ) @@ -1322,6 +1340,7 @@ aa -> å a\" -> ä o\" -> ö e\\=' -> é +E= -> € Doubling the postfix separates the letter and postfix: aee -> ae o\"\" -> o\" etc. @@ -1339,6 +1358,7 @@ aee -> ae o\"\" -> o\" etc. ("O\"" ?Ö) ("o\"" ?ö) ("E'" ?É) + ("E=" ?€) ("e'" ?é) ("AEE" ["AE"]) @@ -1352,6 +1372,7 @@ aee -> ae o\"\" -> o\" etc. ("O\"\"" ["O\""]) ("o\"\"" ["o\""]) ("E''" ["E'"]) + ("E==" ["E="]) ("e''" ["e'"]) ) @@ -1361,6 +1382,7 @@ aee -> ae o\"\" -> o\" etc. A\\=' -> Á E\\=' -> É +E= -> € I\\=' -> Í O\\=' -> Ó U\\=' -> Ú @@ -1376,6 +1398,7 @@ a\\='\\=' -> a\\=' n~~ -> n~, etc. ("A'" ?Á) ("a'" ?á) ("E'" ?É) + ("E=" ?€) ("e'" ?é) ("I'" ?Í) ("i'" ?í) @@ -1393,6 +1416,7 @@ a\\='\\=' -> a\\=' n~~ -> n~, etc. ("A''" ["A'"]) ("a''" ["a'"]) ("E''" ["E'"]) + ("E==" ["E="]) ("e''" ["e'"]) ("I''" ["I'"]) ("i''" ["i'"]) @@ -1410,7 +1434,8 @@ a\\='\\=' -> a\\=' n~~ -> n~, etc. (quail-define-package "swedish-postfix" "Latin-1" "SV<" t - "Swedish (Svenska) input method (rule: AA -> Å AE -> Ä OE -> Ö E\\=' -> É) + "Swedish (Svenska) input method +(rule: AA -> Å AE -> Ä OE -> Ö E\\=' -> É E= -> €) Doubling the postfix separates the letter and postfix: e.g. aee -> ae " nil t nil nil nil nil nil nil nil nil t) @@ -1423,6 +1448,7 @@ Doubling the postfix separates the letter and postfix: e.g. aee -> ae ("OE" ?Ö) ("oe" ?ö) ("E'" ?É) + ("E=" ?€) ("e'" ?é) ("AAA" ["AA"]) @@ -1432,6 +1458,7 @@ Doubling the postfix separates the letter and postfix: e.g. aee -> ae ("OEE" ["OE"]) ("oee" ["oe"]) ("E''" ["E'"]) + ("E==" ["E="]) ("e''" ["e'"]) ) diff --git a/lisp/mouse.el b/lisp/mouse.el index 9e7eee61e57..9d4492f1bde 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -2622,7 +2622,7 @@ is copied instead of being cut." ;; this for all windows on all visible frames. In addition we save ;; also the cursor type for the window's buffer so we can restore it ;; in case we modified it. - ;; https://lists.gnu.org/archive/html/emacs-devel/2017-12/msg00090.html + ;; https://lists.gnu.org/r/emacs-devel/2017-12/msg00090.html (walk-window-tree (lambda (window) (setq states diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el index 48712a9c3d8..77ba5266dcb 100644 --- a/lisp/net/dbus.el +++ b/lisp/net/dbus.el @@ -912,8 +912,9 @@ discovering the still incomplete interface." (defun dbus-unregister-object (object) "Unregister OBJECT from D-Bus. OBJECT must be the result of a preceding `dbus-register-method', -`dbus-register-property' or `dbus-register-signal' call. It -returns t if OBJECT has been unregistered, nil otherwise. +`dbus-register-signal', `dbus-register-property' or +`dbus-register-monitor' call. The function returns t if OBJECT +has been unregistered, nil otherwise. When OBJECT identifies the last method or property, which is registered for the respective service, Emacs releases its @@ -951,7 +952,10 @@ association to the service from D-Bus." (when (eq type :signal) (dbus-call-method bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus - "RemoveMatch" (nth 4 elt))))) + "RemoveMatch" (nth 4 elt))) + ;; Delete monitor connection by reestablishing private bus. + (when (eq type :monitor) + (dbus-init-bus bus 'private)))) ;; Check, whether there is still a registered function or property ;; for the given service. If not, unregister the service from the @@ -2037,7 +2041,7 @@ either a method name, a signal name, or an error name." (when dbus-debug (message "%s" dbus-registered-objects-table)) ;; Return the object. - (list key key1))) + (list key (list nil nil handler)))) (defconst dbus-monitor-method-call (propertize "method-call" 'face 'font-lock-function-name-face) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 4e336c0a064..1649f507363 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -8426,6 +8426,7 @@ comment at the start of cc-engine.el for more info." ;; o - 'found if it's a type that matches one in `c-found-types'; ;; o - 'maybe if it's an identifier that might be a type; ;; o - 'decltype if it's a decltype(variable) declaration; - or + ;; o - 'no-id if "auto" precluded parsing a type identifier. ;; o - nil if it can't be a type (the point isn't moved then). ;; ;; The point is assumed to be at the beginning of a token. @@ -8450,9 +8451,12 @@ comment at the start of cc-engine.el for more info." ;; prefix of a type. (when c-opt-type-modifier-prefix-key ; e.g. "const" "volatile", but NOT "typedef" (while (looking-at c-opt-type-modifier-prefix-key) + (when (looking-at c-no-type-key) + (setq res 'no-id)) (goto-char (match-end 1)) (c-forward-syntactic-ws) - (setq res 'prefix))) + (or (eq res 'no-id) + (setq res 'prefix)))) (cond ((looking-at c-typeof-key) ; e.g. C++'s "decltype". @@ -8503,28 +8507,30 @@ comment at the start of cc-engine.el for more info." (setq res t)) (unless res (goto-char start))) ; invalid syntax - ((progn - (setq pos nil) - (if (looking-at c-identifier-start) - (save-excursion - (setq id-start (point) - name-res (c-forward-name)) - (when name-res - (setq id-end (point) - id-range c-last-identifier-range)))) - (and (cond ((looking-at c-primitive-type-key) - (setq res t)) - ((c-with-syntax-table c-identifier-syntax-table - (looking-at c-known-type-key)) - (setq res 'known))) - (or (not id-end) - (>= (save-excursion - (save-match-data - (goto-char (match-end 1)) - (c-forward-syntactic-ws) - (setq pos (point)))) - id-end) - (setq res nil)))) + ((and + (not (eq res 'no-id)) + (progn + (setq pos nil) + (if (looking-at c-identifier-start) + (save-excursion + (setq id-start (point) + name-res (c-forward-name)) + (when name-res + (setq id-end (point) + id-range c-last-identifier-range)))) + (and (cond ((looking-at c-primitive-type-key) + (setq res t)) + ((c-with-syntax-table c-identifier-syntax-table + (looking-at c-known-type-key)) + (setq res 'known))) + (or (not id-end) + (>= (save-excursion + (save-match-data + (goto-char (match-end 1)) + (c-forward-syntactic-ws) + (setq pos (point)))) + id-end) + (setq res nil))))) ;; Looking at a primitive or known type identifier. We've ;; checked for a name first so that we don't go here if the ;; known type match only is a prefix of another name. @@ -8599,7 +8605,7 @@ comment at the start of cc-engine.el for more info." (goto-char start) (setq res nil))))) - (when res + (when (not (memq res '(nil no-id))) ;; Skip trailing type modifiers. If any are found we know it's ;; a type. (when c-opt-type-modifier-key @@ -9452,12 +9458,11 @@ This function might do hidden buffer changes." (when (setq found-type (c-forward-type t)) ; brace-block-too ;; Found a known or possible type or a prefix of a known type. - (when (and (c-major-mode-is 'c++-mode) ; C++11 style "auto"? - (eq prev-kwd-sym (c-keyword-sym "auto")) - (looking-at "[=(]")) ; FIXME!!! proper regexp. - (setq new-style-auto t) - (setq found-type nil) - (goto-char start)) ; position of foo in "auto foo" + (when (and (eq found-type 'no-id) + (save-excursion + (and (c-forward-name) ; over the identifier + (looking-at "[=(]")))) ; FIXME!!! proper regexp. + (setq new-style-auto t)) ; position of foo in "auto foo" (when at-type ;; Got two identifiers with nothing but whitespace @@ -9540,7 +9545,7 @@ This function might do hidden buffer changes." ;; over all specifiers and type identifiers. The reason ;; to do this for a known type prefix is to make things ;; like "unsigned INT16" work. - (and found-type (not (eq found-type t)))))) + (and found-type (not (memq found-type '(t no-id))))))) (cond ((eq at-type t) @@ -9560,6 +9565,10 @@ This function might do hidden buffer changes." ;; followed by another type. (setq at-type t)) + ((eq at-type 'no-id) + ;; For an auto type, we assume we definitely have a type construct. + (setq at-type t)) + ((not at-type) ;; Got no type but set things up to continue anyway to handle ;; the various cases when a declaration doesn't start with a diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index eee8e304273..7e36e1f2e3c 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -2122,7 +2122,9 @@ fontified with the keyword face and not the type face." t nil c '("const" "restrict" "volatile") c++ '("const" "noexcept" "volatile") - objc '("const" "volatile")) + objc '("const" "volatile") + t (append (c-lang-const c-no-type-kwds) + (c-lang-const c-type-modifier-prefix-kwds))) (c-lang-defconst c-opt-type-modifier-prefix-key ;; Adorned regexp matching `c-type-modifier-prefix-kwds', or nil in @@ -2349,6 +2351,16 @@ will be handled." t (c-make-keywords-re t (c-lang-const c-using-kwds))) (c-lang-defvar c-using-key (c-lang-const c-using-key)) +(c-lang-defconst c-no-type-kwds + "Keywords which remove the need to specify a type in declarations" + t nil + c++ '("auto")) + +(c-lang-defconst c-no-type-key + ;; Regexp matching an entry from `c-no-type-kwds' + t (c-make-keywords-re t (c-lang-const c-no-type-kwds))) +(c-lang-defvar c-no-type-key (c-lang-const c-no-type-key)) + (c-lang-defconst c-typeless-decl-kwds "Keywords introducing declarations where the (first) identifier \(declarator) follows directly after the keyword, without any type. @@ -2362,7 +2374,6 @@ will be handled." ;; {...}"). t (append (c-lang-const c-class-decl-kwds) (c-lang-const c-brace-list-decl-kwds)) - c++ (append (c-lang-const c-typeless-decl-kwds) '("auto")) ; C++11. ;; Note: "manages" for CORBA CIDL clashes with its presence on ;; `c-type-list-kwds' for IDL. idl (append (c-lang-const c-typeless-decl-kwds) @@ -2397,7 +2408,8 @@ If any of these also are on `c-type-list-kwds', `c-ref-list-kwds', `c-<>-type-kwds', or `c-<>-arglist-kwds' then the associated clauses will be handled." t nil - (c c++) '("auto" "extern" "inline" "register" "static") + (c c++) '("extern" "inline" "register" "static") + c (append '("auto") (c-lang-const c-modifier-kwds)) c++ (append '("constexpr" "explicit" "friend" "mutable" "template" "thread_local" "virtual") ;; "using" is now handled specially (2020-09-14). diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 279eb4d54b1..f028a4279d1 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -703,10 +703,10 @@ The value depends on `grep-command', `grep-template', (let ((grep-options (concat (if grep-use-null-device "-n" "-nH") (if grep-use-null-filename-separator " --null") - (if (grep-probe grep-program - `(nil nil nil "-e" "foo" ,null-device) - nil 1) - " -e")))) + (when (grep-probe grep-program + `(nil nil nil "-e" "foo" ,null-device) + nil 1) + " -e")))) (unless grep-command (setq grep-command (format "%s %s %s " grep-program @@ -1121,6 +1121,11 @@ command before it's run." grep-find-ignored-files " --exclude="))))) (when command + (when (grep-probe grep-program + `(nil nil nil "--directories=skip" "foo" + ,null-device) + nil 1) + (setq command (concat command " --directories=skip"))) (if confirm (setq command (read-from-minibuffer "Confirm: " diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 8c550b57682..40a804b00ec 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -66,6 +66,9 @@ ;; `project-combine-directories' and `project-subtract-directories', ;; mainly for use in the abovementioned generics' implementations. ;; +;; `project-known-project-roots' and `project-remember-project' to +;; interact with the "known projects" list. +;; ;; Commands: ;; ;; `project-prefix-map' contains the full list of commands defined in diff --git a/lisp/replace.el b/lisp/replace.el index 2d17ec9097c..e363924501f 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -1576,7 +1576,8 @@ is not modified." (concat "Next buffer to search " (cond - ((eq read-buffer-function #'ido-read-buffer) + ((or (eq read-buffer-function #'ido-read-buffer) + (bound-and-true-p ido-everywhere)) (substitute-command-keys "(\\\\[ido-select-text] to end): ")) ((bound-and-true-p fido-mode) diff --git a/lisp/subr.el b/lisp/subr.el index b1e382b80ee..bd8dd07b30e 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -837,10 +837,11 @@ Elements of ALIST that are not conses are ignored." If KEY is not found in ALIST, return DEFAULT. Equality with KEY is tested by TESTFN, defaulting to `eq'. -You can use `alist-get' in PLACE expressions. This will modify -an existing association (more precisely, the first one if -multiple exist), or add a new element to the beginning of ALIST, -destructively modifying the list stored in ALIST. +You can use `alist-get' in \"place expressions\"; i.e., as a +generalized variable. Doing this will modify an existing +association (more precisely, the first one if multiple exist), or +add a new element to the beginning of ALIST, destructively +modifying the list stored in ALIST. Example: @@ -1627,8 +1628,8 @@ be a list of the form returned by `event-start' and `event-end'." (make-obsolete-variable 'x-gtk-use-window-move nil "26.1") (defvaralias 'messages-buffer-max-lines 'message-log-max) -(define-obsolete-variable-alias 'inhibit-null-byte-detection - 'inhibit-nul-byte-detection "27.1") +(define-obsolete-variable-alias 'inhibit-nul-byte-detection + 'inhibit-null-byte-detection "28.1") (make-obsolete-variable 'load-dangerous-libraries "no longer used." "27.1") diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index 9c6b9cbc048..26049552242 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -363,22 +363,18 @@ to `tab-bar-tab-name-truncated'." :group 'tab-bar :version "27.1") -(defvar tab-bar-tab-name-ellipsis nil) +(defvar tab-bar-tab-name-ellipsis t) (defun tab-bar-tab-name-truncated () "Generate tab name from the buffer of the selected window. Truncate it to the length specified by `tab-bar-tab-name-truncated-max'. Append ellipsis `tab-bar-tab-name-ellipsis' in this case." - (let ((tab-name (buffer-name (window-buffer (minibuffer-selected-window)))) - (ellipsis (cond - (tab-bar-tab-name-ellipsis) - ((char-displayable-p ?…) "…") - ("...")))) + (let ((tab-name (buffer-name (window-buffer (minibuffer-selected-window))))) (if (< (length tab-name) tab-bar-tab-name-truncated-max) tab-name (propertize (truncate-string-to-width tab-name tab-bar-tab-name-truncated-max nil nil - ellipsis) + tab-bar-tab-name-ellipsis) 'help-echo tab-name)))) diff --git a/lisp/tab-line.el b/lisp/tab-line.el index 8da554a3267..46bf89f14eb 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el @@ -240,8 +240,7 @@ to `tab-line-tab-name-truncated-buffer'." :group 'tab-line :version "27.1") -(defvar tab-line-tab-name-ellipsis - (if (char-displayable-p ?…) "…" "...")) +(defvar tab-line-tab-name-ellipsis t) (defun tab-line-tab-name-truncated-buffer (buffer &optional _buffers) "Generate tab name from BUFFER. diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 80682883c85..7196692001e 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -4943,6 +4943,12 @@ If optional argument STATE is positive, turn borders on." (cons (+ window-x window-start-x) (+ window-y window-start-y)))) +(defun artist--adjust-x (x) + "Adjust the X position wrt. `display-line-numbers-mode'." + (let ((adjust (line-number-display-width))) + (if (= adjust 0) + x + (- x adjust 2)))) (defun artist-mouse-draw-continously (ev) "Generic function for shapes that require 1 point as input. @@ -4964,7 +4970,7 @@ The event, EV, is the mouse event." (ev-start (event-start ev)) (initial-win (posn-window ev-start)) (ev-start-pos (artist-coord-win-to-buf (posn-col-row ev-start))) - (x1 (car ev-start-pos)) + (x1 (artist--adjust-x (car ev-start-pos))) (y1 (cdr ev-start-pos)) (shape) (timer)) @@ -4981,7 +4987,7 @@ The event, EV, is the mouse event." (member 'down (event-modifiers ev))) (setq ev-start-pos (artist-coord-win-to-buf (posn-col-row (event-start ev)))) - (setq x1 (car ev-start-pos)) + (setq x1 (artist--adjust-x (car ev-start-pos))) (setq y1 (cdr ev-start-pos)) ;; Cancel previous timer @@ -5061,7 +5067,7 @@ The event, EV, is the mouse event." (ev-start (event-start ev)) (initial-win (posn-window ev-start)) (ev-start-pos (artist-coord-win-to-buf (posn-col-row ev-start))) - (x1-last (car ev-start-pos)) + (x1-last (artist--adjust-x (car ev-start-pos))) (y1-last (cdr ev-start-pos)) (x2 x1-last) (y2 y1-last) @@ -5153,7 +5159,7 @@ The event, EV, is the mouse event." ;; (setq ev-start-pos (artist-coord-win-to-buf (posn-col-row (event-start ev)))) - (setq x2 (car ev-start-pos)) + (setq x2 (artist--adjust-x (car ev-start-pos))) (setq y2 (cdr ev-start-pos)) ;; Draw the new shape (if not rubber-banding, place both marks) @@ -5180,7 +5186,7 @@ The event, EV, is the mouse event." ;; set x2 and y2 (setq ev-start-pos (artist-coord-win-to-buf (posn-col-row (event-start ev)))) - (setq x2 (car ev-start-pos)) + (setq x2 (artist--adjust-x (car ev-start-pos))) (setq y2 (cdr ev-start-pos)) ;; First undraw last shape @@ -5265,7 +5271,7 @@ Operation is done once. The event, EV, is the mouse event." (arrow-set-fn (artist-go-get-arrow-set-fn-from-symbol op)) (ev-start (event-start ev)) (ev-start-pos (artist-coord-win-to-buf (posn-col-row ev-start))) - (x1 (car ev-start-pos)) + (x1 (artist--adjust-x (car ev-start-pos))) (y1 (cdr ev-start-pos))) (select-window (posn-window ev-start)) (artist-funcall init-fn x1 y1) @@ -5299,7 +5305,7 @@ The event, EV, is the mouse event." (ev-start (event-start ev)) (initial-win (posn-window ev-start)) (ev-start-pos (artist-coord-win-to-buf (posn-col-row ev-start))) - (x1 (car ev-start-pos)) + (x1 (artist--adjust-x (car ev-start-pos))) (y1 (cdr ev-start-pos)) (x2) (y2) @@ -5313,7 +5319,7 @@ The event, EV, is the mouse event." (member 'down (event-modifiers ev))) (setq ev-start-pos (artist-coord-win-to-buf (posn-col-row (event-start ev)))) - (setq x2 (car ev-start-pos)) + (setq x2 (artist--adjust-x (car ev-start-pos))) (setq y2 (cdr ev-start-pos)) (if (not (eq initial-win (posn-window (event-start ev)))) diff --git a/lisp/tmm.el b/lisp/tmm.el index e9f3f5b038f..0e83f427f5f 100644 --- a/lisp/tmm.el +++ b/lisp/tmm.el @@ -50,14 +50,19 @@ The ordering of the return value respects `menu-bar-final-items'." (menu-end '())) (map-keymap (lambda (key binding) - (push (cons key binding) - ;; If KEY is the name of an item that we want to put last, - ;; move it to the end. - (if (memq key menu-bar-final-items) - menu-end - menu-bar))) + (let ((pos (seq-position menu-bar-final-items key)) + (menu-item (cons key binding))) + (if pos + ;; If KEY is the name of an item that we want to put + ;; last, store it separately with explicit ordering for + ;; sorting. + (push (cons pos menu-item) menu-end) + (push menu-item menu-bar)))) (tmm-get-keybind [menu-bar])) - `(keymap ,@(nreverse menu-bar) ,@(nreverse menu-end)))) + `(keymap ,@(nreverse menu-bar) + ,@(mapcar #'cdr (sort menu-end + (lambda (a b) + (< (car a) (car b)))))))) ;;;###autoload (define-key global-map "\M-`" 'tmm-menubar) ;;;###autoload (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -96,7 +101,10 @@ to invoke `tmm-menubar' instead, customize the variable (or (null visible) (eval visible))))))) (setq column (+ column (length name) 1))))) - menu-bar)))) + menu-bar) + ;; Check the last menu item. + (when (> column x-position) + (setq menu-bar-item prev-key))))) (tmm-prompt menu-bar nil menu-bar-item))) ;;;###autoload diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 6ff6951dbc9..b1880c0f7b0 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1795,9 +1795,9 @@ The difference to vc-do-command is that this function always invokes (defun vc-git--call (buffer command &rest args) ;; We don't need to care the arguments. If there is a file name, it ;; is always a relative one. This works also for remote - ;; directories. We enable `inhibit-nul-byte-detection', otherwise + ;; directories. We enable `inhibit-null-byte-detection', otherwise ;; Tramp's eol conversion might be confused. - (let ((inhibit-nul-byte-detection t) + (let ((inhibit-null-byte-detection t) (coding-system-for-read (or coding-system-for-read vc-git-log-output-coding-system)) (coding-system-for-write diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 3852a64550a..46c44fa54b7 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1038,7 +1038,9 @@ If the current buffer is in `vc-dir' or Dired mode, FILESET is the list of marked files, or the current directory if no files are marked. Otherwise, if the current buffer is visiting a version-controlled -file, FILESET is a single-file list containing that file's name. +file or is an indirect buffer whose base buffer visits a +version-controlled file, FILESET is a single-file list containing +that file's name. Otherwise, if ALLOW-UNREGISTERED is non-nil and the visited file is unregistered, FILESET is a single-file list containing the name of the visited file. @@ -1052,6 +1054,14 @@ possible values of STATE are explained in `vc-state', and MODEL in the returned list. BEWARE: this function may change the current buffer." + (with-current-buffer (or (buffer-base-buffer) (current-buffer)) + (vc-deduce-fileset-1 not-state-changing + allow-unregistered + state-model-only-files))) + +(defun vc-deduce-fileset-1 (not-state-changing + allow-unregistered + state-model-only-files) (let (backend) (cond ((derived-mode-p 'vc-dir-mode) @@ -1073,7 +1083,7 @@ BEWARE: this function may change the current buffer." (derived-mode-p 'dired-mode))))) (progn ;FIXME: Why not `with-current-buffer'? --Stef. (set-buffer vc-parent-buffer) - (vc-deduce-fileset not-state-changing allow-unregistered state-model-only-files))) + (vc-deduce-fileset-1 not-state-changing allow-unregistered state-model-only-files))) ((and (not buffer-file-name) (setq backend (vc-responsible-backend default-directory))) (list backend nil)) @@ -1883,6 +1893,10 @@ state of each file in the fileset." t (list backend (list rootdir)) rev1 rev2 (called-interactively-p 'interactive))))) +(defun vc-maybe-buffer-sync (not-urgent) + (with-current-buffer (or (buffer-base-buffer) (current-buffer)) + (when buffer-file-name (vc-buffer-sync not-urgent)))) + ;;;###autoload (defun vc-diff (&optional historic not-urgent) "Display diffs between file revisions. @@ -1895,6 +1909,7 @@ saving the buffer." (interactive (list current-prefix-arg t)) (if historic (call-interactively 'vc-version-diff) + (vc-maybe-buffer-sync not-urgent) (let ((fileset (vc-deduce-fileset t))) (vc-buffer-sync-fileset fileset not-urgent) (vc-diff-internal t fileset nil nil @@ -1981,7 +1996,7 @@ saving the buffer." (interactive (list current-prefix-arg t)) (if historic (call-interactively 'vc-version-ediff) - (when buffer-file-name (vc-buffer-sync not-urgent)) + (vc-maybe-buffer-sync not-urgent) (vc-version-ediff (cadr (vc-deduce-fileset t)) nil nil))) ;;;###autoload @@ -1998,7 +2013,7 @@ saving the buffer." (if historic ;; We want the diff for the VC root dir. (call-interactively 'vc-root-version-diff) - (when buffer-file-name (vc-buffer-sync not-urgent)) + (vc-maybe-buffer-sync not-urgent) (let ((backend (vc-deduce-backend)) (default-directory default-directory) rootdir working-revision) @@ -2038,17 +2053,18 @@ Return nil if the root directory cannot be identified." If the current file is named `F', the revision is named `F.~REV~'. If `F.~REV~' already exists, use it instead of checking it out again." (interactive - (save-current-buffer + (with-current-buffer (or (buffer-base-buffer) (current-buffer)) (vc-ensure-vc-buffer) (list (vc-read-revision "Revision to visit (default is working revision): " (list buffer-file-name))))) - (vc-ensure-vc-buffer) - (let* ((file buffer-file-name) - (revision (if (string-equal rev "") - (vc-working-revision file) - rev))) - (switch-to-buffer-other-window (vc-find-revision file revision)))) + (with-current-buffer (or (buffer-base-buffer) (current-buffer)) + (vc-ensure-vc-buffer) + (let* ((file buffer-file-name) + (revision (if (string-equal rev "") + (vc-working-revision file) + rev))) + (switch-to-buffer-other-window (vc-find-revision file revision))))) (defun vc-find-revision (file revision &optional backend) "Read REVISION of FILE into a buffer and return the buffer. diff --git a/src/ChangeLog.11 b/src/ChangeLog.11 index 1086d1183a2..cf9e87a6a80 100644 --- a/src/ChangeLog.11 +++ b/src/ChangeLog.11 @@ -10126,7 +10126,7 @@ 2010-01-06 Jan Djärv - * font.c (font_open_entity): Enable chache and call cached_font_ok + * font.c (font_open_entity): Enable cache and call cached_font_ok for the driver if defined. (QCuser_spec): New symbol. (font_spec_from_name): Save name as user-spec. diff --git a/src/alloc.c b/src/alloc.c index bde0a16ac15..fbfa814bcd8 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1658,7 +1658,7 @@ sdata_size (ptrdiff_t n) #define GC_STRING_EXTRA GC_STRING_OVERRUN_COOKIE_SIZE /* Exact bound on the number of bytes in a string, not counting the - terminating NUL. A string cannot contain more bytes than + terminating null. A string cannot contain more bytes than STRING_BYTES_BOUND, nor can it be so long that the size_t arithmetic in allocate_string_data would overflow while it is calculating a value to be passed to malloc. */ diff --git a/src/bidi.c b/src/bidi.c index 1017bd2d523..225b27b18cd 100644 --- a/src/bidi.c +++ b/src/bidi.c @@ -2338,7 +2338,7 @@ bidi_resolve_weak (struct bidi_it *bidi_it) and make it L right away, to avoid the potentially costly loop below. This is important when the buffer has a long series of - control characters, like binary NULs, and no + control characters, like binary nulls, and no R2L characters at all. */ && new_level == 0 && !bidi_explicit_dir_char (bidi_it->ch) @@ -2996,7 +2996,7 @@ bidi_resolve_neutral (struct bidi_it *bidi_it) } /* The next two "else if" clauses are shortcuts for the important special case when we have a long sequence of - neutral or WEAK_BN characters, such as whitespace or NULs or + neutral or WEAK_BN characters, such as whitespace or nulls or other control characters, on the base embedding level of the paragraph, and that sequence goes all the way to the end of the paragraph and follows a character whose resolved diff --git a/src/bignum.c b/src/bignum.c index 669df4d9ee3..dce5908a1e4 100644 --- a/src/bignum.c +++ b/src/bignum.c @@ -353,7 +353,7 @@ emacs_mpz_pow_ui (mpz_t rop, mpz_t const base, unsigned long exp) /* Yield an upper bound on the buffer size needed to contain a C string representing the NUM in base BASE. This includes any - preceding '-' and the terminating NUL. */ + preceding '-' and the terminating null. */ static ptrdiff_t mpz_bufsize (mpz_t const num, int base) { @@ -418,7 +418,7 @@ bignum_to_string (Lisp_Object num, int base) /* Create a bignum by scanning NUM, with digits in BASE. NUM must consist of an optional '-', a nonempty sequence - of base-BASE digits, and a terminating NUL byte, and + of base-BASE digits, and a terminating null byte, and the represented number must not be in fixnum range. */ Lisp_Object diff --git a/src/callint.c b/src/callint.c index f609c96a6fa..f80436f3d91 100644 --- a/src/callint.c +++ b/src/callint.c @@ -712,7 +712,7 @@ invoke it (via an `interactive' spec that contains, for instance, an default: { /* How many bytes are left unprocessed in the specs string? - (Note that this excludes the trailing NUL byte.) */ + (Note that this excludes the trailing null byte.) */ ptrdiff_t bytes_left = string_len - (tem - string); unsigned letter; diff --git a/src/coding.c b/src/coding.c index 221a9cad898..2142e7fa518 100644 --- a/src/coding.c +++ b/src/coding.c @@ -5707,7 +5707,7 @@ setup_coding_system (Lisp_Object coding_system, struct coding_system *coding) coding->common_flags |= CODING_REQUIRE_DETECTION_MASK; coding->spec.undecided.inhibit_nbd = (encode_inhibit_flag - (AREF (attrs, coding_attr_undecided_inhibit_nul_byte_detection))); + (AREF (attrs, coding_attr_undecided_inhibit_null_byte_detection))); coding->spec.undecided.inhibit_ied = (encode_inhibit_flag (AREF (attrs, coding_attr_undecided_inhibit_iso_escape_detection))); @@ -6535,9 +6535,9 @@ detect_coding (struct coding_system *coding) { int c, i; struct coding_detection_info detect_info; - bool nul_byte_found = 0, eight_bit_found = 0; + bool null_byte_found = 0, eight_bit_found = 0; bool inhibit_nbd = inhibit_flag (coding->spec.undecided.inhibit_nbd, - inhibit_nul_byte_detection); + inhibit_null_byte_detection); bool inhibit_ied = inhibit_flag (coding->spec.undecided.inhibit_ied, inhibit_iso_escape_detection); bool prefer_utf_8 = coding->spec.undecided.prefer_utf_8; @@ -6550,7 +6550,7 @@ detect_coding (struct coding_system *coding) if (c & 0x80) { eight_bit_found = 1; - if (nul_byte_found) + if (null_byte_found) break; } else if (c < 0x20) @@ -6565,7 +6565,7 @@ detect_coding (struct coding_system *coding) if (! (detect_info.rejected & CATEGORY_MASK_ISO_7_ELSE)) { /* We didn't find an 8-bit code. We may - have found a NUL-byte, but it's very + have found a null-byte, but it's very rare that a binary file conforms to ISO-2022. */ src = src_end; @@ -6577,7 +6577,7 @@ detect_coding (struct coding_system *coding) } else if (! c && !inhibit_nbd) { - nul_byte_found = 1; + null_byte_found = 1; if (eight_bit_found) break; } @@ -6609,7 +6609,7 @@ detect_coding (struct coding_system *coding) coding->head_ascii++; } - if (nul_byte_found || eight_bit_found + if (null_byte_found || eight_bit_found || coding->head_ascii < coding->src_bytes || detect_info.found) { @@ -6627,7 +6627,7 @@ detect_coding (struct coding_system *coding) } else { - if (nul_byte_found) + if (null_byte_found) { detect_info.checked |= ~CATEGORY_MASK_UTF_16; detect_info.rejected |= ~CATEGORY_MASK_UTF_16; @@ -6700,7 +6700,7 @@ detect_coding (struct coding_system *coding) else found = CODING_ID_NAME (this->id); } - else if (nul_byte_found) + else if (null_byte_found) found = Qno_conversion; else if ((detect_info.rejected & CATEGORY_MASK_ANY) == CATEGORY_MASK_ANY) @@ -8476,7 +8476,7 @@ from_unicode (Lisp_Object str) Lisp_Object from_unicode_buffer (const wchar_t *wstr) { - /* We get one of the two final NUL bytes for free. */ + /* We get one of the two final null bytes for free. */ ptrdiff_t len = 1 + sizeof (wchar_t) * wcslen (wstr); AUTO_STRING_WITH_LEN (str, (char *) wstr, len); return from_unicode (str); @@ -8489,7 +8489,7 @@ to_unicode (Lisp_Object str, Lisp_Object *buf) /* We need to make another copy (in addition to the one made by code_convert_string_norecord) to ensure that the final string is _doubly_ zero terminated --- that is, that the string is - terminated by two zero bytes and one utf-16le NUL character. + terminated by two zero bytes and one utf-16le null character. Because strings are already terminated with a single zero byte, we just add one additional zero. */ str = make_uninit_string (SBYTES (*buf) + 1); @@ -8605,7 +8605,7 @@ detect_coding_system (const unsigned char *src, ptrdiff_t id; struct coding_detection_info detect_info; enum coding_category base_category; - bool nul_byte_found = 0, eight_bit_found = 0; + bool null_byte_found = 0, eight_bit_found = 0; if (NILP (coding_system)) coding_system = Qundecided; @@ -8632,7 +8632,7 @@ detect_coding_system (const unsigned char *src, struct coding_system *this UNINIT; int c, i; bool inhibit_nbd = inhibit_flag (coding.spec.undecided.inhibit_nbd, - inhibit_nul_byte_detection); + inhibit_null_byte_detection); bool inhibit_ied = inhibit_flag (coding.spec.undecided.inhibit_ied, inhibit_iso_escape_detection); bool prefer_utf_8 = coding.spec.undecided.prefer_utf_8; @@ -8644,7 +8644,7 @@ detect_coding_system (const unsigned char *src, if (c & 0x80) { eight_bit_found = 1; - if (nul_byte_found) + if (null_byte_found) break; } else if (c < 0x20) @@ -8659,7 +8659,7 @@ detect_coding_system (const unsigned char *src, if (! (detect_info.rejected & CATEGORY_MASK_ISO_7_ELSE)) { /* We didn't find an 8-bit code. We may - have found a NUL-byte, but it's very + have found a null-byte, but it's very rare that a binary file confirm to ISO-2022. */ src = src_end; @@ -8671,7 +8671,7 @@ detect_coding_system (const unsigned char *src, } else if (! c && !inhibit_nbd) { - nul_byte_found = 1; + null_byte_found = 1; if (eight_bit_found) break; } @@ -8682,7 +8682,7 @@ detect_coding_system (const unsigned char *src, coding.head_ascii++; } - if (nul_byte_found || eight_bit_found + if (null_byte_found || eight_bit_found || coding.head_ascii < coding.src_bytes || detect_info.found) { @@ -8697,7 +8697,7 @@ detect_coding_system (const unsigned char *src, } else { - if (nul_byte_found) + if (null_byte_found) { detect_info.checked |= ~CATEGORY_MASK_UTF_16; detect_info.rejected |= ~CATEGORY_MASK_UTF_16; @@ -8744,7 +8744,7 @@ detect_coding_system (const unsigned char *src, } if ((detect_info.rejected & CATEGORY_MASK_ANY) == CATEGORY_MASK_ANY - || nul_byte_found) + || null_byte_found) { detect_info.found = CATEGORY_MASK_RAW_TEXT; id = CODING_SYSTEM_ID (Qno_conversion); @@ -8846,7 +8846,7 @@ detect_coding_system (const unsigned char *src, { if (detect_info.found & ~CATEGORY_MASK_UTF_16) { - if (nul_byte_found) + if (null_byte_found) normal_eol = EOL_SEEN_LF; else normal_eol = detect_eol (coding.source, src_bytes, @@ -11320,8 +11320,8 @@ usage: (define-coding-system-internal ...) */) { if (nargs < coding_arg_undecided_max) goto short_args; - ASET (attrs, coding_attr_undecided_inhibit_nul_byte_detection, - args[coding_arg_undecided_inhibit_nul_byte_detection]); + ASET (attrs, coding_attr_undecided_inhibit_null_byte_detection, + args[coding_arg_undecided_inhibit_null_byte_detection]); ASET (attrs, coding_attr_undecided_inhibit_iso_escape_detection, args[coding_arg_undecided_inhibit_iso_escape_detection]); ASET (attrs, coding_attr_undecided_prefer_utf_8, @@ -12086,18 +12086,18 @@ to explicitly specify some coding system that doesn't use ISO-2022 escape sequence (e.g., `latin-1') on reading by \\[universal-coding-system-argument]. */); inhibit_iso_escape_detection = 0; - DEFVAR_BOOL ("inhibit-nul-byte-detection", - inhibit_nul_byte_detection, - doc: /* If non-nil, Emacs ignores NUL bytes on code detection. + DEFVAR_BOOL ("inhibit-null-byte-detection", + inhibit_null_byte_detection, + doc: /* If non-nil, Emacs ignores null bytes on code detection. By default, Emacs treats it as binary data, and does not attempt to decode it. The effect is as if you specified `no-conversion' for reading that text. -Set this to non-nil when a regular text happens to include NUL bytes. -Examples are Index nodes of Info files and NUL-byte delimited output -from GNU Find and GNU Grep. Emacs will then ignore the NUL bytes and +Set this to non-nil when a regular text happens to include null bytes. +Examples are Index nodes of Info files and null-byte delimited output +from GNU Find and GNU Grep. Emacs will then ignore the null bytes and decode text as usual. */); - inhibit_nul_byte_detection = 0; + inhibit_null_byte_detection = 0; DEFVAR_BOOL ("disable-ascii-optimization", disable_ascii_optimization, doc: /* If non-nil, Emacs does not optimize code decoder for ASCII files. @@ -12156,7 +12156,7 @@ internal character representation. */); "automatic conversion on decoding."); plist[15] = args[coding_arg_eol_type] = Qnil; args[coding_arg_plist] = CALLMANY (Flist, plist); - args[coding_arg_undecided_inhibit_nul_byte_detection] = make_fixnum (0); + args[coding_arg_undecided_inhibit_null_byte_detection] = make_fixnum (0); args[coding_arg_undecided_inhibit_iso_escape_detection] = make_fixnum (0); Fdefine_coding_system_internal (coding_arg_undecided_max, args); diff --git a/src/coding.h b/src/coding.h index c2a7b2a00ff..4973cf89eb1 100644 --- a/src/coding.h +++ b/src/coding.h @@ -82,7 +82,7 @@ enum define_coding_ccl_arg_index enum define_coding_undecided_arg_index { - coding_arg_undecided_inhibit_nul_byte_detection = coding_arg_max, + coding_arg_undecided_inhibit_null_byte_detection = coding_arg_max, coding_arg_undecided_inhibit_iso_escape_detection, coding_arg_undecided_prefer_utf_8, coding_arg_undecided_max @@ -139,7 +139,7 @@ enum coding_attr_index coding_attr_emacs_mule_full, - coding_attr_undecided_inhibit_nul_byte_detection, + coding_attr_undecided_inhibit_null_byte_detection, coding_attr_undecided_inhibit_iso_escape_detection, coding_attr_undecided_prefer_utf_8, @@ -353,7 +353,7 @@ struct emacs_mule_spec struct undecided_spec { - /* Inhibit NUL byte detection. 1 means always inhibit, + /* Inhibit null byte detection. 1 means always inhibit, -1 means do not inhibit, 0 means rely on user variable. */ int inhibit_nbd; diff --git a/src/dbusbind.c b/src/dbusbind.c index cca5f13907d..7904606d39e 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -446,12 +446,18 @@ xd_signature (char *signature, int dtype, int parent_type, Lisp_Object object) { Lisp_Object elt1 = XD_NEXT_VALUE (elt); if (CONSP (elt1) && STRINGP (XCAR (elt1)) && NILP (XCDR (elt1))) - subsig = SSDATA (XCAR (elt1)); + { + subsig = SSDATA (XCAR (elt1)); + elt = Qnil; + } } while (!NILP (elt)) { - if (subtype != XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt))) + char x[DBUS_MAXIMUM_SIGNATURE_LENGTH]; + subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt)); + xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt))); + if (strcmp (subsig, x) != 0) wrong_type_argument (intern ("D-Bus"), CAR_SAFE (elt)); elt = CDR_SAFE (XD_NEXT_VALUE (elt)); } @@ -1937,11 +1943,12 @@ syms_of_dbusbind (void) doc: /* Hash table of registered functions for D-Bus. There are two different uses of the hash table: for accessing -registered interfaces properties, targeted by signals or method calls, -and for calling handlers in case of non-blocking method call returns. +registered interfaces properties, targeted by signals, method calls or +monitors, and for calling handlers in case of non-blocking method call +returns. In the first case, the key in the hash table is the list (TYPE BUS -INTERFACE MEMBER). TYPE is one of the Lisp symbols `:method', +[INTERFACE MEMBER]). TYPE is one of the Lisp symbols `:method', `:signal', `:property' or `:monitor'. BUS is either a Lisp symbol, `:system', `:session', `:system-private' or `:session-private', or a string denoting the bus address. INTERFACE is a string which denotes @@ -1951,17 +1958,18 @@ signal or a property INTERFACE is offering. All arguments can be nil. The value in the hash table is a list of quadruple lists ((UNAME SERVICE PATH OBJECT [RULE]) ...). SERVICE is the service name as registered, UNAME is the corresponding unique name. In case of -registered methods and properties, UNAME is nil. PATH is the object -path of the sending object. All of them can be nil, which means a -wildcard then. +registered methods, properties and monitors, UNAME is nil. PATH is +the object path of the sending object. All of them can be nil, which +means a wildcard then. OBJECT is either the handler to be called when a D-Bus message, which matches the key criteria, arrives (TYPE `:method', `:signal' and `:monitor'), or a list (ACCESS EMITS-SIGNAL VALUE) for TYPE `:property'. -For entries of type `:signal', there is also a fifth element RULE, -which keeps the match string the signal is registered with. +For entries of type `:signal' or `:monitor', there is also a fifth +element RULE, which keeps the match string the signal or monitor is +registered with. In the second case, the key in the hash table is the list (:serial BUS SERIAL). BUS is either a Lisp symbol, `:system' or `:session', or a diff --git a/src/dired.c b/src/dired.c index f013a4cea03..1584b6acf08 100644 --- a/src/dired.c +++ b/src/dired.c @@ -929,7 +929,7 @@ file_attributes (int fd, char const *name, struct stat s; /* An array to hold the mode string generated by filemodestring, - including its terminating space and NUL byte. */ + including its terminating space and null byte. */ char modes[sizeof "-rwxr-xr-x "]; char *uname = NULL, *gname = NULL; diff --git a/src/dispextern.h b/src/dispextern.h index 0d982f79177..848d3bcd20e 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1996,7 +1996,7 @@ struct bidi_string_data { Lisp_Object lstring; /* Lisp string to reorder, or nil */ const unsigned char *s; /* string data, or NULL if reordering buffer */ ptrdiff_t schars; /* the number of characters in the string, - excluding the terminating NUL */ + excluding the terminating null */ ptrdiff_t bufpos; /* buffer position of lstring, or 0 if N/A */ bool_bf from_disp_str : 1; /* True means the string comes from a display property */ diff --git a/src/dispnew.c b/src/dispnew.c index d318e26308e..3f2ae3e6ad1 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -1830,7 +1830,7 @@ adjust_frame_glyphs (struct frame *f) /* Don't forget the buffer for decode_mode_spec. */ adjust_decode_mode_spec_buffer (f); - f->glyphs_initialized_p = 1; + f->glyphs_initialized_p = true; unblock_input (); } @@ -2251,7 +2251,7 @@ free_glyphs (struct frame *f) /* Block interrupt input so that we don't get surprised by an X event while we're in an inconsistent state. */ block_input (); - f->glyphs_initialized_p = 0; + f->glyphs_initialized_p = false; /* Release window sub-matrices. */ if (!NILP (f->root_window)) @@ -3236,9 +3236,16 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p) build_frame_matrix (f); /* Update the display. */ - update_begin (f); - paused_p = update_frame_1 (f, force_p, inhibit_hairy_id_p, 1, false); - update_end (f); + if (FRAME_INITIAL_P (f)) + /* No actual display to update so the "update" is a nop and + obviously isn't interrupted by pending input. */ + paused_p = false; + else + { + update_begin (f); + paused_p = update_frame_1 (f, force_p, inhibit_hairy_id_p, 1, false); + update_end (f); + } if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) { diff --git a/src/doc.c b/src/doc.c index 31ccee8079b..8a4f885cc7e 100644 --- a/src/doc.c +++ b/src/doc.c @@ -233,7 +233,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) } /* Scan the text and perform quoting with ^A (char code 1). - ^A^A becomes ^A, ^A0 becomes a NUL char, and ^A_ becomes a ^_. */ + ^A^A becomes ^A, ^A0 becomes a null char, and ^A_ becomes a ^_. */ from = get_doc_string_buffer + offset; to = get_doc_string_buffer + offset; while (from != p) diff --git a/src/doprnt.c b/src/doprnt.c index b0ba12552bc..ceadf3bdfad 100644 --- a/src/doprnt.c +++ b/src/doprnt.c @@ -35,7 +35,7 @@ along with GNU Emacs. If not, see . */ sequence. . It accepts a pointer to the end of the format string, so the format string - could include embedded NUL characters. + could include embedded null characters. . It signals an error if the length of the formatted string is about to overflow ptrdiff_t or size_t, to avoid producing strings longer than what @@ -123,7 +123,7 @@ along with GNU Emacs. If not, see . */ to fit and return BUFSIZE - 1; if this truncates a multibyte sequence, store '\0' into the sequence's first byte. Returns the number of bytes stored into BUFFER, excluding - the terminating NUL byte. Output is always NUL-terminated. + the terminating null byte. Output is always null-terminated. String arguments are passed as C strings. Integers are passed as C integers. */ diff --git a/src/editfns.c b/src/editfns.c index 7e1e24ef16a..ca6b8981ebf 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -3069,7 +3069,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) : FLT_RADIX == 16 ? 4 : -1)), - /* Maximum number of bytes (including terminating NUL) generated + /* Maximum number of bytes (including terminating null) generated by any format, if precision is no more than USEFUL_PRECISION_MAX. On all practical hosts, %Lf is the worst case. */ SPRINTF_BUFSIZE = (sizeof "-." + (LDBL_MAX_10_EXP + 1) diff --git a/src/emacs.c b/src/emacs.c index 1f7f5eabc56..a45842b8713 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -2772,7 +2772,7 @@ decode_env_path (const char *evarname, const char *defalt, bool empty) } } else if (cnv_result != 0 && d > path_utf8) - d[-1] = '\0'; /* remove last semi-colon and NUL-terminate PATH */ + d[-1] = '\0'; /* remove last semi-colon and null-terminate PATH */ } while (q); path_copy = path_utf8; #else /* MSDOS */ diff --git a/src/fileio.c b/src/fileio.c index 6d0bafa8cf9..283813ff89e 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1710,7 +1710,7 @@ See also the function `substitute-in-file-name'.") #endif /* Put into BUF the concatenation of DIR and FILE, with an intervening - directory separator if needed. Return a pointer to the NUL byte + directory separator if needed. Return a pointer to the null byte at the end of the concatenated string. */ char * splice_dir_file (char *buf, char const *dir, char const *file) diff --git a/src/filelock.c b/src/filelock.c index ee46e0e3e00..39febd366d8 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -296,7 +296,7 @@ typedef struct /* Write the name of the lock file for FNAME into LOCKNAME. Length will be that of FNAME plus two more for the leading ".#", plus one - for the NUL. */ + for the null. */ #define MAKE_LOCK_NAME(lockname, fname) \ (lockname = SAFE_ALLOCA (SBYTES (fname) + 2 + 1), \ fill_in_lock_file_name (lockname, fname)) diff --git a/src/fns.c b/src/fns.c index f626fe11b20..4003fe8a818 100644 --- a/src/fns.c +++ b/src/fns.c @@ -406,7 +406,7 @@ string_version_cmp (Lisp_Object string1, Lisp_Object string2) while ((cmp = filevercmp (p1, p2)) == 0) { - /* If the strings are identical through their first NUL bytes, + /* If the strings are identical through their first null bytes, skip past identical prefixes and try again. */ ptrdiff_t size = strlen (p1) + 1; eassert (size == strlen (p2) + 1); diff --git a/src/font.c b/src/font.c index beaa7be98de..fe257f47dc3 100644 --- a/src/font.c +++ b/src/font.c @@ -188,6 +188,9 @@ font_make_object (int size, Lisp_Object entity, int pixelsize) FONT_OBJECT_MAX, PVEC_FONT); int i; + /* Poison the max_width, so we can detect when it hasn't been set. */ + eassert (font->max_width = 1024 * 1024 * 1024); + /* GC can happen before the driver is set up, so avoid dangling pointer here (Bug#17771). */ font->driver = NULL; @@ -1011,7 +1014,7 @@ font_expand_wildcards (Lisp_Object *field, int n) } -/* Parse NAME (NUL terminated) as XLFD and store information in FONT +/* Parse NAME (null terminated) as XLFD and store information in FONT (font-spec or font-entity). Size property of FONT is set as follows: specified XLFD fields FONT property @@ -1355,7 +1358,7 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes) return len < nbytes ? len : -1; } -/* Parse NAME (NUL terminated) and store information in FONT +/* Parse NAME (null terminated) and store information in FONT (font-spec or font-entity). NAME is supplied in either the Fontconfig or GTK font name format. If NAME is successfully parsed, return 0. Otherwise return -1. @@ -1727,7 +1730,7 @@ font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes) #endif -/* Parse NAME (NUL terminated) and store information in FONT +/* Parse NAME (null terminated) and store information in FONT (font-spec or font-entity). If NAME is successfully parsed, return 0. Otherwise return -1. */ @@ -5171,6 +5174,9 @@ If the named font cannot be opened and loaded, return nil. */) return Qnil; font = XFONT_OBJECT (font_object); + /* Sanity check to make sure we have initialized max_width. */ + eassert (XFONT_OBJECT (font_object)->max_width < 1024 * 1024 * 1024); + info = CALLN (Fvector, AREF (font_object, FONT_NAME_INDEX), AREF (font_object, FONT_FULLNAME_INDEX), diff --git a/src/frame.c b/src/frame.c index 3f934504372..0b707c2af87 100644 --- a/src/frame.c +++ b/src/frame.c @@ -931,18 +931,18 @@ make_frame (bool mini_p) wset_frame (rw, frame); - /* 10 is arbitrary, + /* 80/25 is arbitrary, just so that there is "something there." Correct size will be set up later with adjust_frame_size. */ - SET_FRAME_COLS (f, 10); - SET_FRAME_LINES (f, 10); + SET_FRAME_COLS (f, 80); + SET_FRAME_LINES (f, 25); SET_FRAME_WIDTH (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f)); SET_FRAME_HEIGHT (f, FRAME_LINES (f) * FRAME_LINE_HEIGHT (f)); - rw->total_cols = 10; + rw->total_cols = FRAME_COLS (f); rw->pixel_width = rw->total_cols * FRAME_COLUMN_WIDTH (f); - rw->total_lines = mini_p ? 9 : 10; + rw->total_lines = FRAME_LINES (f) - (mini_p ? 1 : 0); rw->pixel_height = rw->total_lines * FRAME_LINE_HEIGHT (f); if (mini_p) @@ -1101,7 +1101,7 @@ make_initial_frame (void) terminal = init_initial_terminal (); - f = make_frame (1); + f = make_frame (true); XSETFRAME (frame, f); Vframe_list = Fcons (frame, Vframe_list); diff --git a/src/ftcrfont.c b/src/ftcrfont.c index 7832d4f5ce0..4892a34a3ab 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -187,7 +187,8 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) block_input (); cairo_glyph_t stack_glyph; - font->min_width = font->average_width = font->space_width = 0; + font->min_width = font->max_width = 0; + font->average_width = font->space_width = 0; for (char c = 32; c < 127; c++) { cairo_glyph_t *glyphs = &stack_glyph; @@ -211,6 +212,8 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) && (! font->min_width || font->min_width > this_width)) font->min_width = this_width; + if (this_width > font->max_width) + font->max_width = this_width; if (c == 32) font->space_width = this_width; font->average_width += this_width; @@ -266,6 +269,7 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) font->relative_compose = 0; font->default_ascent = 0; font->vertical_centering = false; + eassert (font->max_width < 512 * 1024 * 1024); return font_object; } diff --git a/src/insdel.c b/src/insdel.c index c37b0710783..6e245971085 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -714,7 +714,7 @@ insert_char (int c) insert ((char *) str, len); } -/* Insert the NUL-terminated string S before point. */ +/* Insert the null-terminated string S before point. */ void insert_string (const char *s) diff --git a/src/json.c b/src/json.c index 8c9583631ad..744c40a1bef 100644 --- a/src/json.c +++ b/src/json.c @@ -279,10 +279,10 @@ json_release_object (void *object) } /* Signal an error if OBJECT is not a string, or if OBJECT contains - embedded NUL characters. */ + embedded null characters. */ static void -check_string_without_embedded_nuls (Lisp_Object object) +check_string_without_embedded_nulls (Lisp_Object object) { CHECK_STRING (object); CHECK_TYPE (memchr (SDATA (object), '\0', SBYTES (object)) == NULL, @@ -368,11 +368,11 @@ lisp_to_json_toplevel_1 (Lisp_Object lisp, CHECK_STRING (key); Lisp_Object ekey = json_encode (key); /* We can't specify the length, so the string must be - NUL-terminated. */ - check_string_without_embedded_nuls (ekey); + null-terminated. */ + check_string_without_embedded_nulls (ekey); const char *key_str = SSDATA (ekey); /* Reject duplicate keys. These are possible if the hash - table test is not `equal'. */ + table test is not `equal'. */ if (json_object_get (json, key_str) != NULL) wrong_type_argument (Qjson_value_p, lisp); int status @@ -419,8 +419,8 @@ lisp_to_json_toplevel_1 (Lisp_Object lisp, CHECK_SYMBOL (key_symbol); Lisp_Object key = SYMBOL_NAME (key_symbol); /* We can't specify the length, so the string must be - NUL-terminated. */ - check_string_without_embedded_nuls (key); + null-terminated. */ + check_string_without_embedded_nulls (key); key_str = SSDATA (key); /* In plists, ensure leading ":" in keys is stripped. It will be reconstructed later in `json_to_lisp'.*/ @@ -563,7 +563,7 @@ false values, t, numbers, strings, or other vectors hashtables, alists or plists. t will be converted to the JSON true value. Vectors will be converted to JSON arrays, whereas hashtables, alists and plists are converted to JSON objects. Hashtable keys must be strings without -embedded NUL characters and must be unique within each object. Alist +embedded null characters and must be unique within each object. Alist and plist keys must be symbols; if a key is duplicate, the first instance is used. @@ -976,7 +976,7 @@ usage: (json-parse-string STRING &rest ARGS) */) Lisp_Object string = args[0]; CHECK_STRING (string); Lisp_Object encoded = json_encode (string); - check_string_without_embedded_nuls (encoded); + check_string_without_embedded_nulls (encoded); struct json_configuration conf = {json_object_hashtable, json_array_array, QCnull, QCfalse}; json_parse_args (nargs - 1, args + 1, &conf, true); diff --git a/src/keyboard.c b/src/keyboard.c index af075a42c76..4d22c44810e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -6234,7 +6234,7 @@ parse_modifiers_uncached (Lisp_Object symbol, ptrdiff_t *modifier_end) static Lisp_Object apply_modifiers_uncached (int modifiers, char *base, int base_len, int base_len_byte) { - /* Since BASE could contain NULs, we can't use intern here; we have + /* Since BASE could contain nulls, we can't use intern here; we have to use Fintern, which expects a genuine Lisp_String, and keeps a reference to it. */ char new_mods[sizeof "A-C-H-M-S-s-up-down-drag-double-triple-"]; @@ -10566,8 +10566,6 @@ DEFUN ("this-single-command-keys", Fthis_single_command_keys, doc: /* Return the key sequence that invoked this command. More generally, it returns the last key sequence read, either by the command loop or by `read-key-sequence'. -Unlike `this-command-keys', this function's value -does not include prefix arguments. The value is always a vector. */) (void) { @@ -12106,7 +12104,8 @@ See also `pre-command-hook'. */); DEFVAR_LISP ("menu-bar-final-items", Vmenu_bar_final_items, doc: /* List of menu bar items to move to the end of the menu bar. -The elements of the list are event types that may have menu bar bindings. */); +The elements of the list are event types that may have menu bar +bindings. The order of this list controls the order of the items. */); Vmenu_bar_final_items = Qnil; DEFVAR_LISP ("tab-bar-separator-image-expression", Vtab_bar_separator_image_expression, diff --git a/src/lisp.h b/src/lisp.h index a1bdfe89d3a..4b0592e03bd 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1519,11 +1519,11 @@ STRING_MULTIBYTE (Lisp_Object str) } /* An upper bound on the number of bytes in a Lisp string, not - counting the terminating NUL. This a tight enough bound to + counting the terminating null. This a tight enough bound to prevent integer overflow errors that would otherwise occur during string size calculations. A string cannot contain more bytes than a fixnum can represent, nor can it be so long that C pointer - arithmetic stops working on the string plus its terminating NUL. + arithmetic stops working on the string plus its terminating null. Although the actual size limit (see STRING_BYTES_MAX in alloc.c) may be a bit smaller than STRING_BYTES_BOUND, calculating it here would expose alloc.c internal details that we'd rather keep @@ -3005,7 +3005,7 @@ CHECK_SUBR (Lisp_Object x) /* Define a built-in function for calling from Lisp. `lname' should be the name to give the function in Lisp, - as a NUL-terminated C string. + as a null-terminated C string. `fnname' should be the name of the function in C. By convention, it starts with F. `sname' should be the name for the C constant structure @@ -4794,7 +4794,7 @@ extern char *xlispstrdup (Lisp_Object) ATTRIBUTE_MALLOC; extern void dupstring (char **, char const *); /* Make DEST a copy of STRING's data. Return a pointer to DEST's terminating - NUL byte. This is like stpcpy, except the source is a Lisp string. */ + null byte. This is like stpcpy, except the source is a Lisp string. */ INLINE char * lispstpcpy (char *dest, Lisp_Object string) @@ -5012,7 +5012,7 @@ enum : list4 (a, b, c, d)) /* Declare NAME as an auto Lisp string if possible, a GC-based one if not. - Take its unibyte value from the NUL-terminated string STR, + Take its unibyte value from the null-terminated string STR, an expression that should not have side effects. STR's value is not necessarily copied. The resulting Lisp string should not be modified or given text properties or made visible to @@ -5022,8 +5022,8 @@ enum AUTO_STRING_WITH_LEN (name, str, strlen (str)) /* Declare NAME as an auto Lisp string if possible, a GC-based one if not. - Take its unibyte value from the NUL-terminated string STR with length LEN. - STR may have side effects and may contain NUL bytes. + Take its unibyte value from the null-terminated string STR with length LEN. + STR may have side effects and may contain null bytes. STR's value is not necessarily copied. The resulting Lisp string should not be modified or given text properties or made visible to user code. */ diff --git a/src/module-env-25.h b/src/module-env-25.h index 01ce65e9148..97c7787da34 100644 --- a/src/module-env-25.h +++ b/src/module-env-25.h @@ -80,13 +80,13 @@ EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 - NUL-terminated string. + null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. - Note that SIZE must include the last NUL byte (e.g. "abc" needs + Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ diff --git a/src/nsterm.m b/src/nsterm.m index fdcd677d144..a702a051d00 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -3032,7 +3032,7 @@ so some key presses (TAB) are swallowed by the system. */ { NSTRACE ("ns_clear_under_internal_border"); - if (FRAME_INTERNAL_BORDER_WIDTH (f) > 0) + if (FRAME_LIVE_P (f) && FRAME_INTERNAL_BORDER_WIDTH (f) > 0) { int border_width = FRAME_INTERNAL_BORDER_WIDTH (f); NSView *view = FRAME_NS_VIEW (f); diff --git a/src/sysdep.c b/src/sysdep.c index e161172a79b..f6c0ddee01a 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -267,12 +267,12 @@ get_current_dir_name_or_unreachable (void) char *pwd; - /* The maximum size of a directory name, including the terminating NUL. + /* The maximum size of a directory name, including the terminating null. Leave room so that the caller can append a trailing slash. */ ptrdiff_t dirsize_max = min (PTRDIFF_MAX, SIZE_MAX) - 1; /* The maximum size of a buffer for a file name, including the - terminating NUL. This is bounded by PATH_MAX, if available. */ + terminating null. This is bounded by PATH_MAX, if available. */ ptrdiff_t bufsize_max = dirsize_max; #ifdef PATH_MAX bufsize_max = min (bufsize_max, PATH_MAX); @@ -3331,7 +3331,7 @@ system_process_attributes (Lisp_Object pid) if (nread) { - /* We don't want trailing NUL characters. */ + /* We don't want trailing null characters. */ for (p = cmdline + nread; cmdline < p && !p[-1]; p--) continue; diff --git a/src/termcap.c b/src/termcap.c index cc6f2d11acd..1ace4c93103 100644 --- a/src/termcap.c +++ b/src/termcap.c @@ -162,7 +162,7 @@ tgetst1 (char *ptr, char **area) else ret = *area; - /* Copy the string value, stopping at NUL or colon. + /* Copy the string value, stopping at null or colon. Also process ^ and \ abbreviations. */ p = ptr; r = ret; @@ -424,7 +424,7 @@ tgetent (char *bp, const char *name) return -1; buf.size = BUFSIZE; - /* Add 1 to size to ensure room for terminating NUL. */ + /* Add 1 to size to ensure room for terminating null. */ buf.beg = xmalloc (buf.size + 1); term = indirect ? indirect : (char *)name; @@ -480,7 +480,7 @@ tgetent (char *bp, const char *name) *bp1 = '\0'; /* Does this entry refer to another terminal type's entry? - If something is found, copy it into heap and NUL-terminate it. */ + If something is found, copy it into heap and null-terminate it. */ tc_search_point = find_capability (tc_search_point, "tc"); term = tgetst1 (tc_search_point, 0); } @@ -618,7 +618,7 @@ gobble_line (int fd, register struct termcap_buffer *bufp, char *append_end) { ptrdiff_t ptr_offset = bufp->ptr - buf; ptrdiff_t append_end_offset = append_end - buf; - /* Add 1 to size to ensure room for terminating NUL. */ + /* Add 1 to size to ensure room for terminating null. */ ptrdiff_t size = bufp->size + 1; bufp->beg = buf = xpalloc (buf, &size, 1, -1, 1); bufp->size = size - 1; diff --git a/src/timefns.c b/src/timefns.c index 71d5e10872a..4a28f707a3b 100644 --- a/src/timefns.c +++ b/src/timefns.c @@ -1311,7 +1311,7 @@ or (if you need time as a string) `format-time-string'. */) determine how many bytes would be written, use NULL for S and ((size_t) -1) for MAXSIZE. - This function behaves like nstrftime, except it allows NUL + This function behaves like nstrftime, except it allows null bytes in FORMAT. */ static size_t emacs_nmemftime (char *s, size_t maxsize, const char *format, @@ -1320,8 +1320,8 @@ emacs_nmemftime (char *s, size_t maxsize, const char *format, int saved_errno = errno; size_t total = 0; - /* Loop through all the NUL-terminated strings in the format - argument. Normally there's just one NUL-terminated string, but + /* Loop through all the null-terminated strings in the format + argument. Normally there's just one null-terminated string, but there can be arbitrarily many, concatenated together, if the format contains '\0' bytes. nstrftime stops at the first '\0' byte so we must invoke it separately for each such string. */ diff --git a/src/unexmacosx.c b/src/unexmacosx.c index 59cbe3c18b9..8cf68bb92e1 100644 --- a/src/unexmacosx.c +++ b/src/unexmacosx.c @@ -447,7 +447,7 @@ unexec_regions_recorder (task_t task, void *rr, unsigned type, while (num && num_unexec_regions < MAX_UNEXEC_REGIONS) { - /* Subtract the size of trailing NUL bytes from filesize. It + /* Subtract the size of trailing null bytes from filesize. It can be smaller than vmsize in segment commands. In such a case, trailing bytes are initialized with zeros. */ for (p = ranges->address + ranges->size; p > ranges->address; p--) diff --git a/src/w16select.c b/src/w16select.c index b56ced4f2e5..75933526db1 100644 --- a/src/w16select.c +++ b/src/w16select.c @@ -220,7 +220,7 @@ set_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) /* need to know final size after '\r' chars are inserted (the standard CF_OEMTEXT clipboard format uses CRLF line endings, while Emacs uses just LF internally). */ - truelen = Size + 1; /* +1 for the terminating NUL */ + truelen = Size + 1; /* +1 for the terminating null */ if (!Raw) { @@ -243,7 +243,7 @@ set_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) { dosmemput (Data, Size, xbuf_addr); - /* Terminate with a NUL, otherwise Windows does strange things + /* Terminate with a null, otherwise Windows does strange things when the text size is an integral multiple of 32 bytes. */ _farpokeb (_dos_ds, xbuf_addr + Size, '\0'); } @@ -255,7 +255,7 @@ set_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) while (Size--) { /* Don't allow them to put binary data into the clipboard, since - it will cause yanked data to be truncated at the first NUL. */ + it will cause yanked data to be truncated at the first null. */ if (*dp == '\0') return 2; if (*dp == '\n') @@ -263,7 +263,7 @@ set_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) _farnspokeb (buf_offset++, *dp++); } - /* Terminate with a NUL, otherwise Windows does strange things + /* Terminate with a null, otherwise Windows does strange things when the text size is an integral multiple of 32 bytes. */ _farnspokeb (buf_offset, '\0'); } @@ -354,13 +354,13 @@ get_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) __dpmi_int (0x2f, ®s); if (regs.x.ax != 0) { - unsigned char nul_char = '\0'; + unsigned char null_char = '\0'; unsigned long xbuf_beg = xbuf_addr; /* If last_clipboard_text is NULL, we don't want to slow down the next loop by an additional test. */ register unsigned char *lcdp = - last_clipboard_text == NULL ? &nul_char : last_clipboard_text; + last_clipboard_text == NULL ? &null_char : last_clipboard_text; /* Copy data from low memory, remove CR characters before LF if needed. */ @@ -383,7 +383,7 @@ get_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) /* Windows reportedly rounds up the size of clipboard data (passed in SIZE) to a multiple of 32, and removes trailing spaces from each line without updating SIZE. We therefore - bail out when we see the first NUL character. */ + bail out when we see the first null character. */ else if (c == '\0') break; } @@ -392,7 +392,7 @@ get_clipboard_data (unsigned Format, void *Data, unsigned Size, int Raw) last time set_clipboard_data was called, pretend there's no data in the clipboard. This is so we don't pass our own text from the clipboard (which might be troublesome if the killed - text includes NUL characters). */ + text includes null characters). */ if (last_clipboard_text && xbuf_addr - xbuf_beg == (long)(lcdp - last_clipboard_text)) dp = (unsigned char *)Data + 1; diff --git a/src/w32.c b/src/w32.c index d4a8d2e6ffb..0d38eae7fea 100644 --- a/src/w32.c +++ b/src/w32.c @@ -6144,7 +6144,7 @@ is_symlink (const char *filename) /* If NAME identifies a symbolic link, copy into BUF the file name of the symlink's target. Copy at most BUF_SIZE bytes, and do NOT - NUL-terminate the target name, even if it fits. Return the number + null-terminate the target name, even if it fits. Return the number of bytes copied, or -1 if NAME is not a symlink or any error was encountered while resolving it. The file name copied into BUF is encoded in the current ANSI codepage. */ @@ -6248,10 +6248,10 @@ readlink (const char *name, char *buf, size_t buf_size) size_t size_to_copy = buf_size; /* According to MSDN, PrintNameLength does not include the - terminating NUL character. */ + terminating null character. */ lwname = alloca ((lwname_len + 1) * sizeof(WCHAR)); memcpy (lwname, lwname_src, lwname_len); - lwname[lwname_len/sizeof(WCHAR)] = 0; /* NUL-terminate */ + lwname[lwname_len/sizeof(WCHAR)] = 0; /* null-terminate */ filename_from_utf16 (lwname, resolved); dostounix_filename (resolved); lname_size = strlen (resolved) + 1; @@ -9884,7 +9884,7 @@ w32_read_registry (HKEY rootkey, Lisp_Object lkey, Lisp_Object lname) /* Convert input strings to UTF-16. */ encoded_key = code_convert_string_norecord (lkey, Qutf_16le, 1); memcpy (key_w, SSDATA (encoded_key), SBYTES (encoded_key)); - /* wchar_t strings need to be terminated by 2 NUL bytes. */ + /* wchar_t strings need to be terminated by 2 null bytes. */ key_w [SBYTES (encoded_key)/2] = L'\0'; encoded_vname = code_convert_string_norecord (lname, Qutf_16le, 1); memcpy (value_w, SSDATA (encoded_vname), SBYTES (encoded_vname)); @@ -9976,7 +9976,7 @@ w32_read_registry (HKEY rootkey, Lisp_Object lkey, Lisp_Object lname) case REG_SZ: if (use_unicode) { - /* pvalue ends with 2 NUL bytes, but we need only one, + /* pvalue ends with 2 null bytes, but we need only one, and AUTO_STRING_WITH_LEN will add it. */ if (pvalue[vsize - 1] == '\0') vsize -= 2; @@ -9985,7 +9985,7 @@ w32_read_registry (HKEY rootkey, Lisp_Object lkey, Lisp_Object lname) } else { - /* Don't waste a byte on the terminating NUL character, + /* Don't waste a byte on the terminating null character, since make_unibyte_string will add one anyway. */ if (pvalue[vsize - 1] == '\0') vsize--; diff --git a/src/w32fns.c b/src/w32fns.c index 3134f678f39..ef69f40611e 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -7960,7 +7960,7 @@ DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash, { SHFILEOPSTRUCTW file_op_w; /* We need one more element beyond MAX_PATH because this is - a list of file names, with the last element double-NUL + a list of file names, with the last element double-null terminated. */ wchar_t tmp_path_w[MAX_PATH + 1]; @@ -9732,7 +9732,7 @@ get_dll_version (const char *dll_name) /* Return the number of bytes in UTF-8 encoded string STR that corresponds to at most LIM characters. If STR ends before LIM characters, return the number of bytes in STR including the - terminating NUL byte. */ + terminating null byte. */ static int utf8_mbslen_lim (const char *str, int lim) { diff --git a/src/w32proc.c b/src/w32proc.c index c50f246a454..0cf82013065 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -2007,9 +2007,9 @@ sys_spawnve (int mode, char *cmdname, char **argv, char **envp) } /* we have to do some conjuring here to put argv and envp into the - form CreateProcess wants... argv needs to be a space separated/NUL - terminated list of parameters, and envp is a NUL - separated/double-NUL terminated list of parameters. + form CreateProcess wants... argv needs to be a space separated/null + terminated list of parameters, and envp is a null + separated/double-null terminated list of parameters. Additionally, zero-length args and args containing whitespace or quote chars need to be wrapped in double quotes - for this to work, @@ -3398,10 +3398,10 @@ If LCID (a 16-bit number) is not a valid locale, the result is nil. */) got_full = GetLocaleInfo (XFIXNUM (lcid), XFIXNUM (longform), full_name, sizeof (full_name)); - /* GetLocaleInfo's return value includes the terminating NUL + /* GetLocaleInfo's return value includes the terminating null character, when the returned information is a string, whereas make_unibyte_string needs the string length without the - terminating NUL. */ + terminating null. */ if (got_full) return make_unibyte_string (full_name, got_full - 1); } diff --git a/src/w32select.c b/src/w32select.c index 4e5bd6a00f0..e754e1f1ed2 100644 --- a/src/w32select.c +++ b/src/w32select.c @@ -803,7 +803,7 @@ DEFUN ("w32-get-clipboard-data", Fw32_get_clipboard_data, (void) ignored; /* Don't pass our own text from the clipboard (which might be - troublesome if the killed text includes NUL characters). */ + troublesome if the killed text includes null characters). */ if (!NILP (current_text)) return ret; diff --git a/src/xdisp.c b/src/xdisp.c index d9101592b2a..9e8f4fc5ada 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11043,7 +11043,7 @@ message_log_check_duplicate (ptrdiff_t prev_bol_byte, ptrdiff_t this_bol_byte) /* Display an echo area message M with a specified length of NBYTES - bytes. The string may include NUL characters. If M is not a + bytes. The string may include null characters. If M is not a string, clear out any existing message, and let the mini-buffer text show through. @@ -11146,7 +11146,7 @@ message3_nolog (Lisp_Object m) } -/* Display a NUL-terminated echo area message M. If M is 0, clear +/* Display a null-terminated echo area message M. If M is 0, clear out any existing message, and let the mini-buffer text show through. The buffer M must continue to exist until after the echo area gets @@ -15464,7 +15464,8 @@ redisplay_internal (void) /* No redisplay if running in batch mode or frame is not yet fully initialized, or redisplay is explicitly turned off by setting Vinhibit_redisplay. */ - if (FRAME_INITIAL_P (SELECTED_FRAME ()) + if ((FRAME_INITIAL_P (SELECTED_FRAME ()) + && redisplay_skip_initial_frame) || !NILP (Vinhibit_redisplay)) return; @@ -26152,7 +26153,7 @@ are the selected window and the WINDOW's buffer). */) return unbind_to (count, str); } -/* Write a NUL-terminated, right justified decimal representation of +/* Write a null-terminated, right justified decimal representation of the positive integer D to BUF using a minimal field width WIDTH. */ static void @@ -26182,7 +26183,7 @@ pint2str (register char *buf, register int width, register ptrdiff_t d) } } -/* Write a NUL-terminated, right justified decimal and "human +/* Write a null-terminated, right justified decimal and "human readable" representation of the nonnegative integer D to BUF using a minimal field width WIDTH. D should be smaller than 999.5e24. */ @@ -26405,7 +26406,7 @@ decode_mode_spec (struct window *w, register int c, int field_width, produce strings from numerical values, so limit preposterously large values of FIELD_WIDTH to avoid overrunning the buffer's end. The size of the buffer is enough for FRAME_MESSAGE_BUF_SIZE - bytes plus the terminating NUL. */ + bytes plus the terminating null. */ int width = min (field_width, FRAME_MESSAGE_BUF_SIZE (f)); struct buffer *b = current_buffer; @@ -35452,6 +35453,12 @@ When nil, mouse-movement events will not be generated as long as the mouse stays within the extent of a single glyph (except for images). */); mouse_fine_grained_tracking = false; + DEFVAR_BOOL ("redisplay-skip-initial-frame", redisplay_skip_initial_frame, + doc: /* Non-nil to skip redisplay in initial frame. +The initial frame is not displayed anywhere, so skipping it is +best except in special circumstances such as running redisplay tests +in batch mode. */); + redisplay_skip_initial_frame = true; } @@ -35462,6 +35469,8 @@ init_xdisp (void) { CHARPOS (this_line_start_pos) = 0; + echo_area_window = minibuf_window; + if (!noninteractive) { struct window *m = XWINDOW (minibuf_window); @@ -35471,8 +35480,6 @@ init_xdisp (void) struct window *r = XWINDOW (root); int i; - echo_area_window = minibuf_window; - r->top_line = FRAME_TOP_MARGIN (f); r->pixel_top = r->top_line * FRAME_LINE_HEIGHT (f); r->total_cols = FRAME_COLS (f); diff --git a/src/xfont.c b/src/xfont.c index 1563b43bf97..32f63c3f7ce 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -133,7 +133,7 @@ compare_font_names (const void *name1, const void *name2) /* Decode XLFD as iso-8859-1 into OUTPUT, and return the byte length of the decoding result. LEN is the byte length of XLFD, or -1 if - XLFD is NUL terminated. The caller must assure that OUTPUT is at + XLFD is NULL terminated. The caller must assure that OUTPUT is at least twice (plus 1) as large as XLFD. */ static ptrdiff_t diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el index 0df96a0e2db..4bced28a64f 100644 --- a/test/lisp/calc/calc-tests.el +++ b/test/lisp/calc/calc-tests.el @@ -574,6 +574,68 @@ An existing calc stack is reused, otherwise a new one is created." 86400)))) (should (equal (math-format-date d-1991-01-09-0600) "663400800"))))) +;; Reference implementations of binary shift functions: + +(defun calc-tests--clip (x w) + "Clip X to W bits, signed if W is negative, otherwise unsigned." + (if (>= w 0) + (logand x (- (ash 1 w) 1)) + (let ((y (calc-tests--clip x (- w))) + (msb (ash 1 (- (- w) 1)))) + (- y (ash (logand y msb) 1))))) + +(defun calc-tests--lsh (x n w) + "Logical shift left X by N steps, word size W." + (if (< n 0) + (calc-tests--rsh x (- n) w) + (calc-tests--clip (ash x n) w))) + +(defun calc-tests--rsh (x n w) + "Logical shift right X by N steps, word size W." + (if (< n 0) + (calc-tests--lsh x (- n) w) + (ash (calc-tests--clip x w) (- n)))) + +(defun calc-tests--ash (x n w) + "Arithmetic shift left X by N steps, word size W." + (if (< n 0) + (calc-tests--rash x (- n) w) + (calc-tests--clip (ash x n) w))) + +(defun calc-tests--rash (x n w) + "Arithmetic shift right X by N steps, word size W." + (if (< n 0) + (calc-tests--ash x (- n) w) + ;; First sign-extend, then shift. + (let ((x-sext (calc-tests--clip x (- (abs w))))) + (calc-tests--clip (ash x-sext (- n)) w)))) + +(defun calc-tests--rot (x n w) + "Rotate X left by N steps, word size W." + (let* ((aw (abs w)) + (y (calc-tests--clip x aw)) + (steps (mod n aw))) + (calc-tests--clip (logior (ash y steps) (ash y (- steps aw))) + w))) + +(ert-deftest calc-shift-binary () + (dolist (w '(16 32)) + (dolist (x '(0 1 #x1234 #x8000 #xabcd #xffff + #x12345678 #xabcdef12 #x80000000 #xffffffff + #x1234567890ab #x1234967890ab + -1 -14)) + (dolist (n '(0 1 4 16 32 -1 -4 -16 -32)) + (should (equal (calcFunc-lsh x n w) + (calc-tests--lsh x n w))) + (should (equal (calcFunc-rsh x n w) + (calc-tests--rsh x n w))) + (should (equal (calcFunc-ash x n w) + (calc-tests--ash x n w))) + (should (equal (calcFunc-rash x n w) + (calc-tests--rash x n w))) + (should (equal (calcFunc-rot x n w) + (calc-tests--rot x n w))))))) + (provide 'calc-tests) ;;; calc-tests.el ends here diff --git a/test/lisp/comint-tests.el b/test/lisp/comint-tests.el index 5b593409027..923f588e9e6 100644 --- a/test/lisp/comint-tests.el +++ b/test/lisp/comint-tests.el @@ -39,6 +39,7 @@ "Passphrase for key root@GNU.ORG: " ; plink "[sudo] password for user:" ; Ubuntu sudo "[sudo] user 的密码:" ; localized + "doas (user@host) password:" ; OpenBSD doas "PIN for user:" ; Bug#35523 "Password (again):" "Enter password:" diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index 3b01d89dbab..59d8c600a20 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -539,6 +539,9 @@ (ert-deftest rx-compat () "Test old symbol retained for compatibility (bug#37517)." - (should (equal (rx-submatch-n '(group-n 3 (+ nonl) eol)) "\\(?3:.+$\\)"))) + (should (equal + (with-suppressed-warnings ((obsolete rx-submatch-n)) + (rx-submatch-n '(group-n 3 (+ nonl) eol))) + "\\(?3:.+$\\)"))) (provide 'rx-tests) diff --git a/test/lisp/international/mule-util-tests.el b/test/lisp/international/mule-util-tests.el index cc199bd4972..0524dad88da 100644 --- a/test/lisp/international/mule-util-tests.el +++ b/test/lisp/international/mule-util-tests.el @@ -75,8 +75,9 @@ (eval `(ert-deftest ,testname () ,testdoc - (should (equal (apply 'truncate-string-to-width ',(car testdata)) - ,(cdr testdata))))))) + (let ((truncate-string-ellipsis "...")) + (should (equal (apply 'truncate-string-to-width ',(car testdata)) + ,(cdr testdata)))))))) (dotimes (i (length mule-util-test-truncate-data)) (mule-util-test-truncate-create i)) diff --git a/test/lisp/net/dbus-tests.el b/test/lisp/net/dbus-tests.el index 7ebef5d2609..cd2e166c103 100644 --- a/test/lisp/net/dbus-tests.el +++ b/test/lisp/net/dbus-tests.el @@ -131,7 +131,7 @@ (should-error (dbus-check-arguments :session dbus--test-service :object-path) :type 'wrong-type-argument) - ;; Raises an error on stdin. + ;; Raises an error on stderr. (should-error (dbus-check-arguments :session dbus--test-service :object-path "string") :type 'dbus-error) @@ -144,7 +144,7 @@ (should-error (dbus-check-arguments :session dbus--test-service :signature) :type 'wrong-type-argument) - ;; Raises an error on stdin. + ;; Raises an error on stderr. (should-error (dbus-check-arguments :session dbus--test-service :signature "string") :type 'dbus-error) @@ -348,8 +348,12 @@ (should (dbus-check-arguments :session dbus--test-service '(:array :string "string1" "string2"))) + (should + (dbus-check-arguments + :session dbus--test-service '(:array :signature "s" :signature "ao"))) ;; Empty array (of strings). (should (dbus-check-arguments :session dbus--test-service '(:array))) + ;; Empty array (of object paths). (should (dbus-check-arguments :session dbus--test-service '(:array :signature "o"))) ;; Different element types. @@ -358,6 +362,13 @@ :session dbus--test-service '(:array :string "string" :object-path "/object/path")) :type 'wrong-type-argument) + ;; Different variant types in array don't matter. + (should + (dbus-check-arguments + :session dbus--test-service + '(:array + (:variant :string "string1") + (:variant (:struct :string "string2" :object-path "/object/path"))))) ;; `:variant'. It contains exactly one element. (should @@ -383,7 +394,7 @@ (dbus-check-arguments :session dbus--test-service '(:array (:dict-entry :string "string" :boolean nil)))) - ;; This is an alternative syntax. FIXME: Shall this be supported? + ;; This is an alternative syntax. (should (dbus-check-arguments :session dbus--test-service @@ -414,14 +425,14 @@ (dbus-check-arguments :session dbus--test-service '(:dict-entry :string "string" :boolean t)) :type 'wrong-type-argument) - ;; Different dict entry types are not ched. FIXME: Add check. - ;; (should-error - ;; (dbus-check-arguments - ;; :session dbus--test-service - ;; '(:array - ;; (:dict-entry :string "string1" :boolean t) - ;; (:dict-entry :string "string2" :object-path "/object/path"))) - ;; :type 'wrong-type-argument) + ;; Different dict entry types in array. + (should-error + (dbus-check-arguments + :session dbus--test-service + '(:array + (:dict-entry :string "string1" :boolean t) + (:dict-entry :string "string2" :object-path "/object/path"))) + :type 'wrong-type-argument) ;; `:struct'. There is no restriction what could be an element of a struct. (should @@ -434,6 +445,14 @@ ;; Empty struct. (should-error (dbus-check-arguments :session dbus--test-service '(:struct)) + :type 'wrong-type-argument) + ;; Different struct types in array. + (should-error + (dbus-check-arguments + :session dbus--test-service + '(:array + (:struct :string "string1" :boolean t) + (:struct :object-path "/object/path"))) :type 'wrong-type-argument)) (defun dbus--test-register-service (bus) @@ -697,7 +716,7 @@ is in progress." "Received signal value in `dbus--test-signal-handler'.") (defun dbus--test-signal-handler (&rest args) - "Signal handler for `dbus-test*-signal'." + "Signal handler for `dbus-test*-signal' and `dbus-test08-register-monitor'." (setq dbus--test-signal-received args)) (defun dbus--test-timeout-handler (&rest _ignore) @@ -1833,6 +1852,46 @@ The argument EXPECTED-ARGS is a list of expected arguments for the method." ;; Cleanup. (dbus-unregister-service :session dbus--test-service))) +(ert-deftest dbus-test08-register-monitor () + "Check monitor registration." + :tags '(:expensive-test) + (skip-unless dbus--test-enabled-session-bus) + + (unwind-protect + (let (registered) + (should + (equal + (setq registered + (dbus-register-monitor :session #'dbus--test-signal-handler)) + '((:monitor :session-private) + (nil nil dbus--test-signal-handler)))) + + ;; Send a signal, shall be traced. + (setq dbus--test-signal-received nil) + (dbus-send-signal + :session dbus--test-service dbus--test-path + dbus--test-interface "Foo" "foo") + (with-timeout (1 (dbus--test-timeout-handler)) + (while (null dbus--test-signal-received) + (read-event nil nil 0.1))) + + ;; Unregister monitor. + (should (dbus-unregister-object registered)) + (should-not (dbus-unregister-object registered)) + + ;; Send a signal, shall not be traced. + (setq dbus--test-signal-received nil) + (dbus-send-signal + :session dbus--test-service dbus--test-path + dbus--test-interface "Foo" "foo") + (with-timeout (1 (ignore)) + (while (null dbus--test-signal-received) + (read-event nil nil 0.1))) + (should-not dbus--test-signal-received)) + + ;; Cleanup. + (dbus-unregister-service :session dbus--test-service))) + (defun dbus-test-all (&optional interactive) "Run all tests for \\[dbus]." (interactive "p") diff --git a/test/lisp/play/animate-tests.el b/test/lisp/play/animate-tests.el index 8af1517ffa4..7c41d3b7761 100644 --- a/test/lisp/play/animate-tests.el +++ b/test/lisp/play/animate-tests.el @@ -36,8 +36,8 @@ -Happy Birthday, - Foo + Happy Birthday, + Foo You are my sunshine, diff --git a/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl b/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl index 4a9842ffa56..8c1883a10f1 100644 --- a/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl +++ b/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl @@ -26,7 +26,7 @@ } continue { -last; # no endless loop, though +last; } } # -------- while loop: expected output -------- @@ -34,7 +34,7 @@ while (1) { say "boring loop"; } continue { - last; # no endless loop, though + last; } } # -------- while loop: end -------- diff --git a/test/lisp/progmodes/cperl-mode-tests.el b/test/lisp/progmodes/cperl-mode-tests.el index f0ff8e90052..20be7ed68cc 100644 --- a/test/lisp/progmodes/cperl-mode-tests.el +++ b/test/lisp/progmodes/cperl-mode-tests.el @@ -148,6 +148,7 @@ under timeout control." These exercise some standard blocks and also the special treatment for Perl expressions where a closing paren isn't the end of the statement." + (skip-unless (eq cperl-test-mode #'cperl-mode)) (let ((file (expand-file-name "cperl-indent-exp.pl" cperl-mode-tests-data-directory))) (with-temp-buffer @@ -166,6 +167,7 @@ end of the statement." got) (with-temp-buffer (insert code) + (cperl-mode) (goto-char (point-min)) (cperl-indent-exp) ; here we go! (setq expected (concat "test case " name ":\n" expected)) diff --git a/test/lisp/progmodes/ruby-mode-tests.el b/test/lisp/progmodes/ruby-mode-tests.el index 5988a495238..6675fb28f8e 100644 --- a/test/lisp/progmodes/ruby-mode-tests.el +++ b/test/lisp/progmodes/ruby-mode-tests.el @@ -717,7 +717,7 @@ VALUES-PLIST is a list with alternating index and value elements." (ruby-with-temp-buffer ruby-sexp-test-example (goto-char (point-min)) (forward-line 1) - (ruby-forward-sexp) + (forward-sexp) (should (= 8 (line-number-at-pos))))) (ert-deftest ruby-backward-sexp-skips-method-calls-with-keyword-names () @@ -725,7 +725,7 @@ VALUES-PLIST is a list with alternating index and value elements." (goto-char (point-min)) (forward-line 7) (end-of-line) - (ruby-backward-sexp) + (backward-sexp) (should (= 2 (line-number-at-pos))))) (ert-deftest ruby-forward-sexp-jumps-do-end-block-with-no-args () @@ -734,7 +734,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |end") (search-backward "do\n") - (ruby-forward-sexp) + (forward-sexp) (should (eobp)))) (ert-deftest ruby-backward-sexp-jumps-do-end-block-with-no-args () @@ -743,7 +743,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |end") (goto-char (point-max)) - (ruby-backward-sexp) + (backward-sexp) (should (looking-at "do$")))) (ert-deftest ruby-forward-sexp-jumps-do-end-block-with-empty-args () @@ -752,7 +752,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do || |end") (search-backward "do ") - (ruby-forward-sexp) + (forward-sexp) (should (eobp)))) (ert-deftest ruby-backward-sexp-jumps-do-end-block-with-empty-args () @@ -761,7 +761,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do || |end") (goto-char (point-max)) - (ruby-backward-sexp) + (backward-sexp) (should (looking-at "do ")))) (ert-deftest ruby-forward-sexp-jumps-do-end-block-with-args () @@ -770,7 +770,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |a,b| |end") (search-backward "do ") - (ruby-forward-sexp) + (forward-sexp) (should (eobp)))) (ert-deftest ruby-backward-sexp-jumps-do-end-block-with-args () @@ -779,7 +779,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |a,b| |end") (goto-char (point-max)) - (ruby-backward-sexp) + (backward-sexp) (should (looking-at "do ")))) (ert-deftest ruby-forward-sexp-jumps-do-end-block-with-any-args () @@ -788,7 +788,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |*| |end") (search-backward "do ") - (ruby-forward-sexp) + (forward-sexp) (should (eobp)))) (ert-deftest ruby-forward-sexp-jumps-do-end-block-with-expanded-one-arg () @@ -797,7 +797,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |a,| |end") (search-backward "do ") - (ruby-forward-sexp) + (forward-sexp) (should (eobp)))) (ert-deftest ruby-forward-sexp-jumps-do-end-block-with-one-and-any-args () @@ -806,7 +806,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |a,*| |end") (search-backward "do ") - (ruby-forward-sexp) + (forward-sexp) (should (eobp)))) (ert-deftest ruby-backward-sexp-jumps-do-end-block-with-one-and-any-args () @@ -815,7 +815,7 @@ VALUES-PLIST is a list with alternating index and value elements." "proc do |a,*| |end") (goto-char (point-max)) - (ruby-backward-sexp) + (backward-sexp) (should (looking-at "do ")))) (ert-deftest ruby-toggle-string-quotes-quotes-correctly () diff --git a/test/lisp/so-long-tests/so-long-tests.el b/test/lisp/so-long-tests/so-long-tests.el index ffffe070ba6..b72ee2fd612 100644 --- a/test/lisp/so-long-tests/so-long-tests.el +++ b/test/lisp/so-long-tests/so-long-tests.el @@ -181,7 +181,7 @@ ;; The various 'window change functions' are now invoked by the ;; redisplay, and redisplay does nothing at all in batch mode, ;; so we cannot test under this revised behavior. Refer to: - ;; https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00971.html + ;; https://lists.gnu.org/r/emacs-devel/2019-10/msg00971.html ;; For interactive (non-batch) test runs, calling `redisplay' ;; does do the trick; so do that first. (redisplay) diff --git a/test/manual/etags/CTAGS.good b/test/manual/etags/CTAGS.good index 519315c6fdd..5e582434a62 100644 --- a/test/manual/etags/CTAGS.good +++ b/test/manual/etags/CTAGS.good @@ -1835,7 +1835,7 @@ Z c-src/h.h 100 \Ealphaenumerate tex-src/texinfo.tex /^\\def\\Ealphaenumerate{\\Eenumerate}$/ \Ecapsenumerate tex-src/texinfo.tex /^\\def\\Ecapsenumerate{\\Eenumerate}$/ \Ecartouche tex-src/texinfo.tex /^\\def\\Ecartouche{%$/ -\Edescription tex-src/texinfo.tex /^\\def\\Edescription{\\Etable}% Neccessary kludge.$/ +\Edescription tex-src/texinfo.tex /^\\def\\Edescription{\\Etable}% Necessary kludge.$/ \Edisplay tex-src/texinfo.tex /^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/ \Eexample tex-src/texinfo.tex /^\\def\\Eexample{\\Elisp}$/ \Eflushleft tex-src/texinfo.tex /^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/ diff --git a/test/manual/etags/cp-src/functions.cpp b/test/manual/etags/cp-src/functions.cpp index 7c353d161a1..ddd78f14d9b 100644 --- a/test/manual/etags/cp-src/functions.cpp +++ b/test/manual/etags/cp-src/functions.cpp @@ -223,7 +223,7 @@ int WorkingDays(Date a, Date b){ return(wdays); } -Date StartDay(Date a,int days){//Function to calculate the apropriate start day to finish in days working days +Date StartDay(Date a,int days){//Function to calculate the appropriate start day to finish in days working days Date tmp; int wdays=0; if ( ! a.set() ) diff --git a/test/manual/etags/prol-src/ordsets.prolog b/test/manual/etags/prol-src/ordsets.prolog index 7192129fdce..0fa70f903f0 100644 --- a/test/manual/etags/prol-src/ordsets.prolog +++ b/test/manual/etags/prol-src/ordsets.prolog @@ -120,7 +120,7 @@ ord_intersect(>, Head1, Tail1, _, [Head2|Tail2]) :- % ord_intersection(+Set1, +Set2, ?Intersection) -% is true when Intersection is the intersecton of Set1 +% is true when Intersection is the intersection of Set1 % and Set2, provided that Set1 and Set2 are ordered sets. ord_intersection([], _, []). @@ -144,7 +144,7 @@ ord_intersection3([Head2|Tail2], Head1, Tail1, Intersection) :- % ord_intersection(+Set1, +Set2, ?Intersection, ?Difference) % is true when Intersection is the intersection of Set1 and Set2, -% and Differens is Set2 \ Set1 (like in ord_union/4), +% and Difference is Set2 \ Set1 (like in ord_union/4), % provided that Set1 and Set2 are ordered sets. ord_intersection([], Set2, [], Set2). diff --git a/test/manual/etags/tex-src/texinfo.tex b/test/manual/etags/tex-src/texinfo.tex index cece96fac56..8d84f513ba5 100644 --- a/test/manual/etags/tex-src/texinfo.tex +++ b/test/manual/etags/tex-src/texinfo.tex @@ -1074,7 +1074,7 @@ \def\tablez #1#2#3#4#5#6{% \aboveenvbreak % \begingroup % -\def\Edescription{\Etable}% Neccessary kludge. +\def\Edescription{\Etable}% Necessary kludge. \let\itemindex=#1% \ifnum 0#3>0 \advance \leftskip by #3\mil \fi % \ifnum 0#4>0 \tableindent=#4\mil \fi % @@ -2937,7 +2937,7 @@ \setbox0=\hbox{\printednodename}% \ifdim \wd0=0pt% \def\printednodename{\ignorespaces #1}% -%%% Uncommment the following line to make the actual chapter or section title +%%% Uncomment the following line to make the actual chapter or section title %%% appear inside the square brackets. %\def\printednodename{#1-title}% \fi% diff --git a/test/src/xdisp-tests.el b/test/src/xdisp-tests.el index 3d0d0f58302..95c39dacc3e 100644 --- a/test/src/xdisp-tests.el +++ b/test/src/xdisp-tests.el @@ -33,19 +33,21 @@ (lambda () (insert "hello") (let ((ol (make-overlay (point) (point))) + (redisplay-skip-initial-frame nil) (max-mini-window-height 1) (text "askdjfhaklsjdfhlkasjdfhklasdhflkasdhflkajsdhflkashdfkljahsdlfkjahsdlfkjhasldkfhalskdjfhalskdfhlaksdhfklasdhflkasdhflkasdhflkajsdhklajsdgh")) - ;; (save-excursion (insert text)) - ;; (sit-for 2) - ;; (delete-region (point) (point-max)) - (put-text-property 0 1 'cursor t text) - (overlay-put ol 'after-string text) - (redisplay 'force) - (throw 'result - ;; Make sure we do the see "hello" text. - (prog1 (equal (window-start) (point-min)) - ;; (list (window-start) (window-end) (window-width)) - (delete-overlay ol))))) + ;; (save-excursion (insert text)) + ;; (sit-for 2) + ;; (delete-region (point) (point-max)) + (put-text-property 0 1 'cursor t text) + (overlay-put ol 'after-string text) + (let ((executing-kbd-macro nil)) ;Don't skip redisplay + (redisplay 'force)) + (throw 'result + ;; Make sure we do the see "hello" text. + (prog1 (equal (window-start) (point-min)) + ;; (list (window-start) (window-end) (window-width)) + (delete-overlay ol))))) (let ((executing-kbd-macro t)) ;Force real minibuffer in `read-string'. (read-string "toto: ")))))))