Merge from origin/emacs-28

b0d64be0bc (origin/emacs-28) Improve some NEWS entries
7fde84e881 Improve documentation of syntax-ppss-context slightly
5ecbed01b2 ; * test/lisp/mh-e/mh-utils-tests.el: Update macro declara...
168665da59 Move some xwidget entries
efde024361 time-stamp-tests: improvements to test macros
06c944cff1 Fix rfc6068-parse-mailto-url autoload
9b6b5e37ef Regexp-quote github domains in bug-reference
1f6cdeb12c Ensure valid end/beginning lines in message-mark-inserted-...
9b46150ab0 * etc/NEWS: Improve 'repeat-mode' entry.
9c37b812da ; * lisp/repeat.el (repeat-mode): Fix docstring typo.
caf87d80fa * lisp/repeat.el (repeat-keep-prefix): Expand description.
24083c8d13 * lisp/net/eww.el (eww-retrieve-command): Add :tag.
cf7d8fb1d7 Add description of cards to etc/refcards/README
d2849cc645 Fix 'calculate-lisp-indent' when "[" starts containing sex...
2a0a368ddc Fix typo in doc/emacs/anti.texi
9529e1d2fb Update doc of Edebug specification for macros
5bc522b4f4 ; * lisp/simple.el (kill-region): A better fix for bug#51320.
ee6bdd6eef Fix non-interactive behavior of 'kill-region'
2b7655ca0e ; More accurate doc string for 'tab-bar-format'
2841e26744 * test/lisp/dabbrev-tests.el: Use 'kbd' for readable keys.
1cdb4d2077 * lisp/menu-bar.el (menu-bar-keymap): Add optional arg KEY...

# Conflicts:
#	etc/NEWS
#	lisp/progmodes/bug-reference.el
This commit is contained in:
Glenn Morris 2021-10-22 09:39:39 -07:00
commit 4cf06bb751
20 changed files with 200 additions and 112 deletions

View file

@ -35,8 +35,8 @@ As Motif becomes more and more important with moving farther into the
past, we've reinstated the code which supports Motif in Emacs. past, we've reinstated the code which supports Motif in Emacs.
@item @item
Emacs once again supports versions 5.3 and older OpenBSD system, which Emacs once again supports versions 5.3 and older OpenBSD systems,
will be needed as you move back in time. which will be needed as you move back in time.
@item @item
We've dropped support for Secure Computing filter on GNU/Linux. The We've dropped support for Secure Computing filter on GNU/Linux. The

View file

@ -1216,9 +1216,7 @@ directs processing of arguments.
@table @asis @table @asis
@item @code{t} @item @code{t}
All arguments are instrumented for evaluation. All arguments are instrumented for evaluation.
This is short for @code{(body)}.
@item @code{0}
None of the arguments is instrumented.
@item a symbol @item a symbol
The symbol must have an Edebug specification, which is used instead. The symbol must have an Edebug specification, which is used instead.
@ -1528,6 +1526,16 @@ example of the @code{let} specification.
It may be easier to understand Edebug specifications by studying It may be easier to understand Edebug specifications by studying
the examples provided here. the examples provided here.
Consider a hypothetical macro @code{my-test-generator} that runs
tests on supplied lists of data. Although it is Edebug's default
behavior to not instrument arguments as code, as controlled by
@code{edebug-eval-macro-args} (@pxref{Instrumenting Macro Calls}),
it can be useful to explicitly document that the arguments are data:
@example
(def-edebug-spec my-test-generator (&rest sexp))
@end example
A @code{let} special form has a sequence of bindings and a body. Each A @code{let} special form has a sequence of bindings and a body. Each
of the bindings is either a symbol or a sublist with a symbol and of the bindings is either a symbol or a sublist with a symbol and
optional expression. In the specification below, notice the @code{gate} optional expression. In the specification below, notice the @code{gate}

View file

@ -900,6 +900,7 @@ arrived at a top level position.
@defun syntax-ppss-context state @defun syntax-ppss-context state
Return @code{string} if the end position of the scan returning Return @code{string} if the end position of the scan returning
@var{state} is in a string, and @code{comment} if it's in a comment. @var{state} is in a string, and @code{comment} if it's in a comment.
Otherwise return @code{nil}.
@end defun @end defun
@node Low-Level Parsing @node Low-Level Parsing

View file

@ -80,12 +80,13 @@ This was only ever relevant when building from a repository checkout.
This now requires makeinfo, which is part of the texinfo package. This now requires makeinfo, which is part of the texinfo package.
--- ---
** There is a new configure option '--disable-year2038' to cause ** New configure option '--disable-year2038'.
Emacs to use only 32-bit time_t on platforms that have both 32- and This causes Emacs to use only 32-bit time_t on platforms that have
64-bit time_t. This may help link Emacs to a library with ABI both 32- and 64-bit time_t. This may help when linking Emacs with a
requiring traditional 32-bit time_t. This option currently affects library with an ABI requiring traditional 32-bit time_t. This option
only 32-bit ARM and x86 running GNU/Linux with glibc 2.34 and later. currently affects only 32-bit ARM and x86 running GNU/Linux with glibc
Emacs now defaults to 64-bit time_t on these platforms. 2.34 and later. Emacs now defaults to 64-bit time_t on these
platforms.
--- ---
** Support for building with '-fcheck-pointer-bounds' has been removed. ** Support for building with '-fcheck-pointer-bounds' has been removed.
@ -273,9 +274,9 @@ whether the function 'read-answer' accepts short answers.
+++ +++
** New user option 'kill-buffer-delete-auto-save-files'. ** New user option 'kill-buffer-delete-auto-save-files'.
If non-nil, killing a buffer that has an auto-save file will prompt If non-nil, killing a buffer that has an auto-save file will prompt
the user for whether that file should be deleted. (Note that the user for whether that auto-save file should be deleted. (Note
'delete-auto-save-files', if non-nil, was previously documented to that 'delete-auto-save-files', if non-nil, was previously documented
result in deletion of auto-save files when killing a buffer without to result in deletion of auto-save files when killing a buffer without
unsaved changes, but this has apparently not worked for several unsaved changes, but this has apparently not worked for several
decades, so the documented semantics of this variable has been changed decades, so the documented semantics of this variable has been changed
to match the behavior.) to match the behavior.)
@ -354,6 +355,8 @@ of the next command to be displayed in a new frame.
*** New command 'clone-frame' (bound to 'C-x 5 c'). *** New command 'clone-frame' (bound to 'C-x 5 c').
This is like 'C-x 5 2', but uses the window configuration and frame This is like 'C-x 5 2', but uses the window configuration and frame
parameters of the current frame instead of 'default-frame-alist'. parameters of the current frame instead of 'default-frame-alist'.
When called interactively with a prefix arg, the window configuration
is not cloned.
--- ---
*** Default values of 'frame-title-format' and 'icon-title-format' have changed. *** Default values of 'frame-title-format' and 'icon-title-format' have changed.
@ -393,12 +396,13 @@ of the next command to be displayed in a new window.
+++ +++
*** New command 'recenter-other-window', bound to 'S-M-C-l'. *** New command 'recenter-other-window', bound to 'S-M-C-l'.
Like 'recenter-top-bottom' acting on the other window. Like 'recenter-top-bottom', but acting on the other window.
+++ +++
*** New user option 'delete-window-choose-selected'. *** New user option 'delete-window-choose-selected'.
This allows to choose a window that will be the frame's selected This allows specifying how Emacs chooses which window will be the
window after deleting the currently selected one. frame's selected window after the currently selected window is
deleted.
+++ +++
*** New argument NO-OTHER for some window functions. *** New argument NO-OTHER for some window functions.
@ -496,7 +500,7 @@ on each frame compared to the numerical value of 'tab-bar-show'.
*** New command 'toggle-frame-tab-bar'. *** New command 'toggle-frame-tab-bar'.
It can be used to enable/disable the tab bar on the currently selected It can be used to enable/disable the tab bar on the currently selected
frame regardless of the values of 'tab-bar-mode' and 'tab-bar-show'. frame regardless of the values of 'tab-bar-mode' and 'tab-bar-show'.
This allows to enable/disable the tab bar independently on different This allows enabling/disabling the tab bar independently on different
frames. frames.
--- ---
@ -510,10 +514,10 @@ the tab bar displays tab groups.
--- ---
*** New optional key binding for 'tab-last'. *** New optional key binding for 'tab-last'.
If you customize the user option 'tab-bar-select-tab-modifiers' for If you customize the user option 'tab-bar-select-tab-modifiers' to
selecting tabs using its index numbers, the '<MODIFIER>-9' key is allow selecting tabs using their index numbers, the '<MODIFIER>-9' key
bound to 'tab-last', and switches to the last tab. Here <MODIFIER> is is bound to 'tab-last', and switches to the last tab. Here <MODIFIER>
any of the modifiers in the list that is the value of is any of the modifiers in the list that is the value of
'tab-bar-select-tab-modifiers'. You can also use negative indices, 'tab-bar-select-tab-modifiers'. You can also use negative indices,
which count from the last tab: -1 is the last tab, -2 the one before which count from the last tab: -1 is the last tab, -2 the one before
that, etc. that, etc.
@ -700,6 +704,7 @@ the same syntax as 'auto-save-file-name-transforms'.
+++ +++
*** New user option 'remote-file-name-inhibit-locks'. *** New user option 'remote-file-name-inhibit-locks'.
When non-nil, this option suppresses lock files for remote files. When non-nil, this option suppresses lock files for remote files.
Default is nil.
+++ +++
*** New minor mode 'lock-file-mode'. *** New minor mode 'lock-file-mode'.
@ -944,8 +949,8 @@ having those two commands on the 'M-o' keymap; see the next section.
** The 'M-o M-s' and 'M-o M-S' global bindings have been removed. ** The 'M-o M-s' and 'M-o M-S' global bindings have been removed.
Use 'M-x center-line' and 'M-x center-paragraph' instead. See the Use 'M-x center-line' and 'M-x center-paragraph' instead. See the
previous section for how to get back the old bindings. Alternatively, previous section for how to get back the old bindings. Alternatively,
if you only want these two commands to have global bindings they had if you only want these two commands to have the global bindings they
before, you can add the following to your init file: had before, you can add the following to your init file:
(define-key global-map "\M-o\M-s" 'center-line) (define-key global-map "\M-o\M-s" 'center-line)
(define-key global-map "\M-o\M-S" 'center-paragraph) (define-key global-map "\M-o\M-S" 'center-paragraph)
@ -1003,10 +1008,10 @@ file:
** Xref migrated from EIEIO to cl-defstruct for its core objects. ** Xref migrated from EIEIO to cl-defstruct for its core objects.
This means that 'oref' and 'with-slots' no longer works on them, and This means that 'oref' and 'with-slots' no longer works on them, and
'make-instance' can no longer be used to create those instances (which 'make-instance' can no longer be used to create those instances (which
wasn't recommended anyway). Packages should keep to using the wasn't recommended anyway). Packages should restrict themselves to
functions like 'xref-make', 'xref-make-match', 'xref-make-*-location', using functions like 'xref-make', 'xref-make-match',
as well as accessor functions 'xref-item-summary' and 'xref-make-*-location', as well as accessor functions
'xref-item-location'. 'xref-item-summary' and 'xref-item-location'.
Among the benefits are better performance (noticeable when there are a Among the benefits are better performance (noticeable when there are a
lot of matches) and improved flexibility: 'xref-match-item' instances lot of matches) and improved flexibility: 'xref-match-item' instances
@ -1143,7 +1148,8 @@ less.
+++ +++
** New user option 'revert-buffer-quick-short-answers'. ** New user option 'revert-buffer-quick-short-answers'.
This controls how the new 'revert-buffer-quick' ('C-x x g') command This controls how the new 'revert-buffer-quick' ('C-x x g') command
prompts. prompts. A non-nil value will make it use 'y-or-n-p' rather than
'yes-or-no-p'. Defaults to nil.
+++ +++
** New user option 'query-about-changed-file'. ** New user option 'query-about-changed-file'.
@ -1197,7 +1203,7 @@ buffer to be able to move point to the inaccessible portion.
When called interactively, 'goto-char' now offers the position at When called interactively, 'goto-char' now offers the position at
point as the default. point as the default.
** Autosaving via 'auto-save-visited-mode' can now be inhibited. ** Auto-saving via 'auto-save-visited-mode' can now be inhibited.
Set the variable 'auto-save-visited-mode' buffer-locally to nil to Set the variable 'auto-save-visited-mode' buffer-locally to nil to
achieve that. achieve that.
@ -1211,7 +1217,7 @@ It used to be enabled when Emacs is started in GUI mode but not when started
in text mode. The cursor still only actually blinks in GUI frames. in text mode. The cursor still only actually blinks in GUI frames.
** 'show-paren-mode' is now enabled by default. ** 'show-paren-mode' is now enabled by default.
To go back to the previous behavior, customize the user option by the To go back to the previous behavior, customize the user option of the
same name to nil. same name to nil.
+++ +++
@ -1305,8 +1311,8 @@ displaying "by name" or "by date" sort order.
+++ +++
*** New user option 'dired-compress-directory-default-suffix'. *** New user option 'dired-compress-directory-default-suffix'.
This user option controls default suffix for compressing a directory. This user option controls the default suffix for compressing a
If it's nil, ".tar.gz" will be used. Refer to directory. If it's nil, ".tar.gz" will be used. Refer to
'dired-compress-files-alist' for a list of supported suffixes. 'dired-compress-files-alist' for a list of supported suffixes.
+++ +++
@ -1327,7 +1333,7 @@ select a different backup file instead.
+++ +++
*** New user option 'dired-maybe-use-globstar'. *** New user option 'dired-maybe-use-globstar'.
If set, enables globstar (recursive globbing) in shells that support If set, enables globstar (recursive globbing) in shells that support
this feature, but turn it off by default. This allows producing this feature, but have it turned off by default. This allows producing
directory listings with files matching a wildcard in all the directory listings with files matching a wildcard in all the
subdirectories of a given directory. The new variable subdirectories of a given directory. The new variable
'dired-enable-globstar-in-shell' lists which shells can have globstar 'dired-enable-globstar-in-shell' lists which shells can have globstar
@ -1419,7 +1425,7 @@ major mode.
+++ +++
*** 'ispell-comments-and-strings' now accepts START and END arguments. *** 'ispell-comments-and-strings' now accepts START and END arguments.
These arguments default to active region when used interactively. These arguments default to the active region when used interactively.
+++ +++
*** New command 'ispell-comment-or-string-at-point'. *** New command 'ispell-comment-or-string-at-point'.
@ -2061,7 +2067,7 @@ consistency, the 'M-s M-r' key binding has been added for the
'gnus-summary-search-article-backward' command.) 'gnus-summary-search-article-backward' command.)
--- ---
*** The value of "all" in the 'large-newsgroup-initial' group parameter changes. *** The value for "all" in the 'large-newsgroup-initial' group parameter has changed.
It was previously nil, which didn't work, because nil is It was previously nil, which didn't work, because nil is
indistinguishable from not being present. The new value for "all" is indistinguishable from not being present. The new value for "all" is
the symbol 'all'. the symbol 'all'.
@ -2358,14 +2364,6 @@ current environment.
Its default value matches localized abbreviations of the "reply" Its default value matches localized abbreviations of the "reply"
prefix on the Subject line in various languages. prefix on the Subject line in various languages.
---
*** New user option 'shr-offer-extend-specpdl'.
If this is nil, rendering of HTML in the email message body that
requires to enlarge 'max-specpdl-size', the number of Lisp variable
bindings, will be aborted, and Emacs will not ask you whether to
enlarge 'max-specpdl-size' to complete the rendering. The default is
t, which preserves the original behavior.
--- ---
*** New user option 'rmail-show-message-set-modified'. *** New user option 'rmail-show-message-set-modified'.
If set non-nil, showing an unseen message will set the Rmail buffer's If set non-nil, showing an unseen message will set the Rmail buffer's
@ -2520,10 +2518,10 @@ However, if "~/Downloads/" already exists, that will continue to be
used. used.
--- ---
*** The command 'eww-follow-link' now supports custom mailto handlers. *** The command 'eww-follow-link' now supports custom mailto: handlers.
The function that is invoked when clicking on or otherwise following a The function that is invoked when clicking on or otherwise following a
'mailto:' link in an EWW buffer can now be customized. For more 'mailto:' link in an EWW buffer can now be customized. For more
information, see the related entry about 'shr-browse-url' above. information, see the related entry about 'shr-browse-url' below.
--- ---
*** Support for bookmark.el. *** Support for bookmark.el.
@ -2540,6 +2538,14 @@ This is still the case by default, but if you customize
'browse-url-mailto-function' or 'browse-url-handlers' to call some 'browse-url-mailto-function' or 'browse-url-handlers' to call some
other function, it will now be called instead of the default. other function, it will now be called instead of the default.
---
*** New user option 'shr-offer-extend-specpdl'.
If this is nil, rendering of HTML that requires enlarging
'max-specpdl-size', the number of Lisp variable bindings, will be
aborted, and Emacs will not ask you whether to enlarge
'max-specpdl-size' to complete the rendering. The default is t, which
preserves the original behavior.
+++ +++
*** New user option 'shr-max-width'. *** New user option 'shr-max-width'.
If this user option is non-nil, and 'shr-width' is nil, then SHR will If this user option is non-nil, and 'shr-width' is nil, then SHR will
@ -2615,7 +2621,8 @@ sub-directory.
+++ +++
*** 'project-find-file' doesn't use the string at point as default input. *** 'project-find-file' doesn't use the string at point as default input.
Now it's only suggested as part of the "future history". Now it's only suggested as part of the "future history", accessible
via 'M-n'.
+++ +++
*** New command 'project-find-dir' runs Dired in a directory inside project. *** New command 'project-find-dir' runs Dired in a directory inside project.
@ -2970,6 +2977,18 @@ user-visible changes in ERC.
(return the current title), and 'xwidget-webkit-goto-history' (goto a (return the current title), and 'xwidget-webkit-goto-history' (goto a
point in history). point in history).
---
*** Downloading files from xwidget-webkit is now supported.
The new user option 'xwidget-webkit-download-dir' says where to download to.
---
*** New command 'xwidget-webkit-clone-and-split-below'.
Open a new window below displaying the current URL.
---
*** New command 'xwidget-webkit-clone-and-split-right'.
Open a new window to the right displaying the current URL.
--- ---
*** Pixel-based scrolling. *** Pixel-based scrolling.
The 'xwidget-webkit-scroll-up', 'xwidget-webkit-scroll-down' commands The 'xwidget-webkit-scroll-up', 'xwidget-webkit-scroll-down' commands
@ -3192,7 +3211,7 @@ effect.
--- ---
*** The width of the buffer-name column in 'list-buffers' is now dynamic. *** The width of the buffer-name column in 'list-buffers' is now dynamic.
The width now depends of the width of the window, but will never be The width now depends on the width of the window, but will never be
wider than the length of the longest buffer name, except that it will wider than the length of the longest buffer name, except that it will
never be narrower than 19 characters. never be narrower than 19 characters.
@ -3225,16 +3244,24 @@ Type 'M-x repeat-mode RET' to enable this mode. You can then type
instead of 'C-x o C-x o' to switch windows, 'C-x { { } } ^ ^ v v' to instead of 'C-x o C-x o' to switch windows, 'C-x { { } } ^ ^ v v' to
resize the selected window interactively, 'M-g n n p p' to navigate resize the selected window interactively, 'M-g n n p p' to navigate
next-error matches. Any other key exits this temporarily enabled next-error matches. Any other key exits this temporarily enabled
transient mode that supports shorter keys, and then after exiting transient mode that supports shorter keys, and then after exiting from
from this mode the default key binding is used for the last typed key. this mode the default key binding is used for the last typed key.
'repeat-exit-key' defines an additional key to exit mode like
'isearch-exit' ('RET'). The user option 'repeat-exit-timeout' The user option 'repeat-exit-key' defines an additional key usable to
specifies the number of seconds of idle time to break the repetition exit the mode like 'isearch-exit' ('RET').
chain automatically. With 'repeat-keep-prefix' you can keep the
prefix arg of the previous command. For example, this can help to The user option 'repeat-exit-timeout' (default nil, which means
reverse the window navigation direction with e.g. 'C-x o M-- o o'. forever) specifies the number of seconds of idle time after which to
Also it can help to set a new step with e.g. 'C-x { C-5 { { {', break the repetition chain automatically.
which will set the window resizing step to 5 columns.
When user option 'repeat-keep-prefix' is non-nil (the default), the
prefix arg of the previous command is kept. This can be used to
e.g. reverse the window navigation direction with 'C-x o M-- o o' or
to set a new step with 'C-x { C-5 { { {', which will set the window
resizing step to 5 columns.
'M-x describe-repeat-maps' will display a buffer showing
which commands are repeatable in 'repeat-mode'.
--- ---
** New themes 'modus-vivendi' and 'modus-operandi'. ** New themes 'modus-vivendi' and 'modus-operandi'.
@ -3683,7 +3710,7 @@ user option has been renamed to 'find-library-source-path', and
** The 'interactive' syntax has been extended to allow listing applicable modes. ** The 'interactive' syntax has been extended to allow listing applicable modes.
Forms like '(interactive "p" dired-mode)' can be used to annotate the Forms like '(interactive "p" dired-mode)' can be used to annotate the
commands as being applicable for modes derived from 'dired-mode', commands as being applicable for modes derived from 'dired-mode',
or if the mode is a minor mode, that the current buffer has that or if the mode is a minor mode, when the current buffer has that
minor mode activated. Note that using this form will create byte code minor mode activated. Note that using this form will create byte code
that is not compatible with byte code in previous Emacs versions. that is not compatible with byte code in previous Emacs versions.
@ -3694,7 +3721,7 @@ to say whether the command should be present when completing with
'M-x TAB'. '(declare (modes MODE...))' can be used as a short-hand 'M-x TAB'. '(declare (modes MODE...))' can be used as a short-hand
way of saying that the command should be present when completing from way of saying that the command should be present when completing from
buffers in major modes derived from MODE..., or, if it's a minor mode, buffers in major modes derived from MODE..., or, if it's a minor mode,
whether that minor mode is enabled in the current buffer. when that minor mode is enabled in the current buffer.
+++ +++
** 'define-minor-mode' now takes an ':interactive' argument. ** 'define-minor-mode' now takes an ':interactive' argument.
@ -4426,7 +4453,7 @@ also keep the type information of their arguments. Use the
+++ +++
*** New minor mode 'button-mode'. *** New minor mode 'button-mode'.
This minor mode does nothing else than install 'button-buffer-map' as This minor mode does nothing except install 'button-buffer-map' as
a minor mode map (which binds the 'TAB' / 'S-TAB' key bindings to navigate a minor mode map (which binds the 'TAB' / 'S-TAB' key bindings to navigate
to buttons), and can be used in any view-mode-like buffer that has to buttons), and can be used in any view-mode-like buffer that has
buttons in it. buttons in it.
@ -4444,7 +4471,8 @@ line when displaying that buffer.
This is useful for major modes that arrange their display in a tabular This is useful for major modes that arrange their display in a tabular
form below the header line. It is enabled by default in form below the header line. It is enabled by default in
'tabulated-list-mode' and its derived modes. 'tabulated-list-mode' and its derived modes, and disabled by default
elsewhere.
--- ---
** 'ascii' is now a coding system alias for 'us-ascii'. ** 'ascii' is now a coding system alias for 'us-ascii'.
@ -4511,18 +4539,6 @@ If Emacs was built with xwidget support, you can access the embedded
webkit browser with 'M-x xwidget-webkit-browse-url'. Viewing two webkit browser with 'M-x xwidget-webkit-browse-url'. Viewing two
instances of xwidget webkit is not supported. instances of xwidget webkit is not supported.
---
*** Downloading files from xwidget-webkit is now supported.
The new user option 'xwidget-webkit-download-dir' says where to download to.
---
*** New command 'xwidget-webkit-clone-and-split-below'.
Open a new window below displaying the current URL.
---
*** New command 'xwidget-webkit-clone-and-split-right'.
Open a new window to the right displaying the current URL.
--- ---
*** New user option 'xwidget-webkit-enable-plugins'. *** New user option 'xwidget-webkit-enable-plugins'.
If non-nil, enable plugins in xwidget. (This is only available on If non-nil, enable plugins in xwidget. (This is only available on

View file

@ -23,6 +23,51 @@ PDF and PS copies of these cards are also available at
<https://www.gnu.org/software/emacs/refcards>. The FSF online <https://www.gnu.org/software/emacs/refcards>. The FSF online
store <https://shop.fsf.org/> sometimes has printed copies for sale. store <https://shop.fsf.org/> sometimes has printed copies for sale.
List of generated cards:
calccard.pdf Calc Reference Card
dired-ref.pdf Dired Reference Card
gnus-booklet.pdf Gnus Reference Booklet
gnus-refcard.pdf Gnus Reference Card
orgcard.pdf Org-Mode Reference Card
refcard.pdf Emacs Reference Card
survival.pdf Emacs Survival Card
vipcard.pdf VIP Quick Reference Card
viperCard.pdf ViperCard: Viper Reference Pal
Brazilian Portuguese
pt-br-refcard.pdf Reference Card (pt-br)
Czech
cs-dired-ref.pdf Dired Reference Card (cs)
cs-refcard.pdf Emacs Reference Card (cs)
cs-survival.pdf Emacs Survival Card (cs)
French
fr-dired-ref.pdf Dired Reference Card (fr)
fr-refcard.pdf Emacs Reference Card (fr)
fr-survival.pdf Emacs Survival Card (fr)
German
de-refcard.pdf Emacs Reference Card (de)
Polish
pl-refcard.pdf Emacs Reference Card (pl)
Russian
ru-refcard.pdf Emacs Reference Card (ru)
Slovak
sk-dired-ref.pdf Dired Reference Card (sk)
sk-refcard.pdf Emacs Reference Card (sk)
sk-survival.pdf Emacs Survival Card (sk)
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES

View file

@ -1078,10 +1078,11 @@ is the buffer position of the start of the containing expression."
;; Handle prefix characters and whitespace ;; Handle prefix characters and whitespace
;; following an open paren. (Bug#1012) ;; following an open paren. (Bug#1012)
(backward-prefix-chars) (backward-prefix-chars)
(while (not (or (looking-back "^[ \t]*\\|([ \t]+" (while (not (save-excursion
(line-beginning-position)) (skip-chars-backward " \t")
(and containing-sexp (or (= (point) (line-beginning-position))
(>= (1+ containing-sexp) (point))))) (and containing-sexp
(= (point) (1+ containing-sexp))))))
(forward-sexp -1) (forward-sexp -1)
(backward-prefix-chars)) (backward-prefix-chars))
(setq calculate-lisp-indent-last-sexp (point))) (setq calculate-lisp-indent-last-sexp (point)))

View file

@ -2395,6 +2395,8 @@ If VERBATIM, use slrn style verbatim marks (\"#v+\" and \"#v-\")."
(save-excursion (save-excursion
;; add to the end of the region first, otherwise end would be invalid ;; add to the end of the region first, otherwise end would be invalid
(goto-char end) (goto-char end)
(unless (bolp)
(insert "\n"))
(insert (if verbatim "#v-\n" message-mark-insert-end)) (insert (if verbatim "#v-\n" message-mark-insert-end))
(goto-char beg) (goto-char beg)
(insert (if verbatim "#v+\n" message-mark-insert-begin)))) (insert (if verbatim "#v+\n" message-mark-insert-begin))))

View file

@ -2713,10 +2713,13 @@ This command is to be used when you click the mouse in the menubar."
(cdr menu-bar-item-cons) (cdr menu-bar-item-cons)
0)))) 0))))
(defun menu-bar-keymap () (defun menu-bar-keymap (&optional keymap)
"Return the current menu-bar keymap. "Return the current menu-bar keymap.
The ordering of the return value respects `menu-bar-final-items'.
The ordering of the return value respects `menu-bar-final-items'." It's possible to use the KEYMAP argument to override the default keymap
that is the currently active maps. For example, the argument KEYMAP
could provide `global-map' where items are limited to the global map only."
(let ((menu-bar '()) (let ((menu-bar '())
(menu-end '())) (menu-end '()))
(map-keymap (map-keymap
@ -2729,7 +2732,7 @@ The ordering of the return value respects `menu-bar-final-items'."
;; sorting. ;; sorting.
(push (cons pos menu-item) menu-end) (push (cons pos menu-item) menu-end)
(push menu-item menu-bar)))) (push menu-item menu-bar))))
(lookup-key (menu-bar-current-active-maps) [menu-bar])) (lookup-key (or keymap (menu-bar-current-active-maps)) [menu-bar]))
`(keymap ,@(nreverse menu-bar) `(keymap ,@(nreverse menu-bar)
,@(mapcar #'cdr (sort menu-end ,@(mapcar #'cdr (sort menu-end
(lambda (a b) (lambda (a b)

View file

@ -364,7 +364,7 @@ Some context functions add menu items below the separator."
(when (consp binding) (when (consp binding)
(define-key-after menu (vector key) (define-key-after menu (vector key)
(copy-sequence binding)))) (copy-sequence binding))))
(lookup-key global-map [menu-bar])) (menu-bar-keymap global-map))
menu) menu)
(defun context-menu-local (menu _click) (defun context-menu-local (menu _click)

View file

@ -1600,7 +1600,7 @@ used instead of `browse-url-new-window-flag'."
;; --- mailto --- ;; --- mailto ---
(autoload 'rfc6068-parse-mailto-url "rfc2368") (autoload 'rfc6068-parse-mailto-url "rfc6068")
;;;###autoload ;;;###autoload
(defun browse-url-mail (url &optional new-window) (defun browse-url-mail (url &optional new-window)

View file

@ -145,12 +145,12 @@ The string will be passed through `substitute-command-keys'."
"Command to retrieve an URL via an external program. "Command to retrieve an URL via an external program.
If nil, `url-retrieve' is used to download the data. If nil, `url-retrieve' is used to download the data.
If `sync', `url-retrieve-synchronously' is used. If `sync', `url-retrieve-synchronously' is used.
For other non-nil values, this should be a list where the first item For other non-nil values, this should be a list of strings where
is the program, and the rest are the arguments." the first item is the program, and the rest are the arguments."
:version "28.1" :version "28.1"
:type '(choice (const :tag "Use `url-retrieve'" nil) :type '(choice (const :tag "Use `url-retrieve'" nil)
(const :tag "Use `url-retrieve-synchronously'" sync) (const :tag "Use `url-retrieve-synchronously'" sync)
(repeat string))) (repeat :tag "Command/args" string )))
(defcustom eww-use-external-browser-for-content-type (defcustom eww-use-external-browser-for-content-type
"\\`\\(video/\\|audio/\\|application/ogg\\)" "\\`\\(video/\\|audio/\\|application/ogg\\)"
@ -1947,7 +1947,7 @@ Use link at point if there is one, else the current page's URL."
(defun eww-set-character-encoding (charset) (defun eww-set-character-encoding (charset)
"Set character encoding to CHARSET. "Set character encoding to CHARSET.
If CHARSET is nil then use UTF-8." If CHARSET is nil then use UTF-8."
(interactive "zUse character set (default utf-8): " eww-mode) (interactive "zUse character set (default `utf-8'): " eww-mode)
(if (null charset) (if (null charset)
(eww-reload nil 'utf-8) (eww-reload nil 'utf-8)
(eww-reload nil charset))) (eww-reload nil charset)))

View file

@ -270,7 +270,8 @@ via the internet it might also be http.")
;; possibly different projects are also supported. ;; possibly different projects are also supported.
(cl-defmethod bug-reference--build-forge-setup-entry (cl-defmethod bug-reference--build-forge-setup-entry
(host-domain (_forge-type (eql 'github)) protocol) (host-domain (_forge-type (eql 'github)) protocol)
`(,(concat "[/@]" host-domain "[/:]\\([.A-Za-z0-9_/-]+\\)\\.git") `(,(concat "[/@]" (regexp-quote host-domain)
"[/:]\\([.A-Za-z0-9_/-]+\\)\\.git")
"\\(\\([.A-Za-z0-9_/-]+\\)?\\(?:#\\)\\([0-9]+\\)\\)\\>" "\\(\\([.A-Za-z0-9_/-]+\\)?\\(?:#\\)\\([0-9]+\\)\\)\\>"
,(lambda (groups) ,(lambda (groups)
(let ((ns-project (nth 1 groups))) (let ((ns-project (nth 1 groups)))

View file

@ -355,7 +355,7 @@ of the specified number of seconds."
"Timer activated after the last key typed in the repeating key sequence.") "Timer activated after the last key typed in the repeating key sequence.")
(defcustom repeat-keep-prefix t (defcustom repeat-keep-prefix t
"Keep the prefix arg of the previous command." "Whether to keep the prefix arg of the previous command when repeating."
:type 'boolean :type 'boolean
:group 'convenience :group 'convenience
:version "28.1") :version "28.1")
@ -387,7 +387,7 @@ the map can't be set on the command symbol property `repeat-map'.")
"Toggle Repeat mode. "Toggle Repeat mode.
When Repeat mode is enabled, and the command symbol has the property named When Repeat mode is enabled, and the command symbol has the property named
`repeat-map', this map is activated temporarily for the next command. `repeat-map', this map is activated temporarily for the next command.
See `describe-repeat-maps' for a list of all repeatable command." See `describe-repeat-maps' for a list of all repeatable commands."
:global t :group 'convenience :global t :group 'convenience
(if (not repeat-mode) (if (not repeat-mode)
(remove-hook 'post-command-hook 'repeat-post-hook) (remove-hook 'post-command-hook 'repeat-post-hook)

View file

@ -5293,12 +5293,16 @@ Lisp programs should use this function for killing text.
Supply two arguments, character positions BEG and END indicating the Supply two arguments, character positions BEG and END indicating the
stretch of text to be killed. If the optional argument REGION is stretch of text to be killed. If the optional argument REGION is
non-nil, the function ignores BEG and END, and kills the current non-nil, the function ignores BEG and END, and kills the current
region instead." region instead. Interactively, REGION is always non-nil, and so
this command always kills the current region."
;; Pass mark first, then point, because the order matters when ;; Pass mark first, then point, because the order matters when
;; calling `kill-append'. ;; calling `kill-append'.
(interactive (list (mark) (point) 'region)) (interactive (progn
(unless (and beg end) (let ((beg (mark))
(user-error "The mark is not set now, so there is no region")) (end (point)))
(unless (and beg end)
(user-error "The mark is not set now, so there is no region"))
(list beg end 'region))))
(condition-case nil (condition-case nil
(let ((string (if region (let ((string (if region
(funcall region-extract-function 'delete) (funcall region-extract-function 'delete)

View file

@ -706,8 +706,13 @@ the formatted tab name to display in the tab bar."
Every item in the list is a function that returns Every item in the list is a function that returns
a string, or a list of menu-item elements, or nil. a string, or a list of menu-item elements, or nil.
Adding a function to the list causes the tab bar to show Adding a function to the list causes the tab bar to show
that string, or display a menu with those menu items when that string, or display a tab button which, when clicked,
you click on the tab bar. will invoke the command that is the binding of the menu item.
The menu-item binding of nil will produce a tab clicking
on which will select that tab. The menu-item's title is
displayed as the label of the tab.
If a function returns nil, it doesn't directly affect the
tab bar appearance, but can do that by some side-effect.
If the list ends with `tab-bar-format-align-right' and If the list ends with `tab-bar-format-align-right' and
`tab-bar-format-global', then after enabling `display-time-mode' `tab-bar-format-global', then after enabling `display-time-mode'
(or any other mode that uses `global-mode-string'), (or any other mode that uses `global-mode-string'),

View file

@ -29,16 +29,15 @@
(ert-deftest dabbrev-expand-test () (ert-deftest dabbrev-expand-test ()
"Test for bug#1948. "Test for bug#1948.
When DABBREV-ELIMINATE-NEWLINES is non-nil (the default), When `dabbrev-eliminate-newlines' is non-nil (the default),
repeated calls to DABBREV-EXPAND can result in the source of repeated calls to `dabbrev-expand' can result in the source of
first expansion being replaced rather than the destination." first expansion being replaced rather than the destination."
(with-temp-buffer (with-temp-buffer
(insert "ab x\na\nab y") (insert "ab x\na\nab y")
(goto-char 8) (goto-char 8)
(save-window-excursion (save-window-excursion
(set-window-buffer nil (current-buffer)) (set-window-buffer nil (current-buffer))
;; M-/ SPC M-/ M-/ (execute-kbd-macro (kbd "M-/ SPC M-/ M-/")))
(execute-kbd-macro "\257 \257\257"))
(should (string= (buffer-string) "ab x\nab y\nab y")))) (should (string= (buffer-string) "ab x\nab y\nab y"))))
(ert-deftest dabbrev-completion-test () (ert-deftest dabbrev-completion-test ()
@ -52,8 +51,7 @@ buffers unless a prefix argument is used."
(goto-char 6) (goto-char 6)
(save-window-excursion (save-window-excursion
(set-window-buffer nil (current-buffer)) (set-window-buffer nil (current-buffer))
;; C-M-/ (execute-kbd-macro (kbd "C-M-/")))
(execute-kbd-macro [201326639]))
(should (string= (buffer-string) "abc\nabc"))))) (should (string= (buffer-string) "abc\nabc")))))
(ert-deftest dabbrev-completion-test-with-argument () (ert-deftest dabbrev-completion-test-with-argument ()
@ -67,8 +65,7 @@ multiple expansions."
(goto-char 6) (goto-char 6)
(save-window-excursion (save-window-excursion
(set-window-buffer nil (current-buffer)) (set-window-buffer nil (current-buffer))
;; C-u C-u C-M-/ (execute-kbd-macro (kbd "C-u C-u C-M-/")))
(execute-kbd-macro [21 21 201326639]))
(should (string= (buffer-string) "abc\na"))))) (should (string= (buffer-string) "abc\na")))))
;;; dabbrev-tests.el ends here ;;; dabbrev-tests.el ends here

View file

@ -26,7 +26,7 @@
;;; Code: ;;; Code:
(require 'ert-x) ;For `ert-run-keys'. (require 'ert-x) ;For `ert-simulate-keys'.
(require 'find-func) (require 'find-func)
(ert-deftest find-func-tests--library-completion () ;bug#43393 (ert-deftest find-func-tests--library-completion () ;bug#43393

View file

@ -23,7 +23,7 @@
;;; Code: ;;; Code:
(require 'ert-x) ;For `ert-run-keys'. (require 'ert-x) ;For `ert-simulate-keys'.
(ert-deftest find-auto-coding--bug27391 () (ert-deftest find-auto-coding--bug27391 ()
"Check that Bug#27391 is fixed." "Check that Bug#27391 is fixed."

View file

@ -110,7 +110,7 @@ can log the choice only once, which makes the batch log easier to read.")
Functions that touch the file system or run MH programs are either Functions that touch the file system or run MH programs are either
mocked out or pointed at a test tree. Uses `mh-test-utils-setup' to mocked out or pointed at a test tree. Uses `mh-test-utils-setup' to
select which." select which."
(declare (indent defun)) (declare (indent 0) (debug t))
`(cl-letf ((temp-home-dir nil) `(cl-letf ((temp-home-dir nil)
;; make local bindings for things we will modify for test env ;; make local bindings for things we will modify for test env
(mh-user-path) (mh-user-path)
@ -374,6 +374,7 @@ values for the FLAG argument of `mh-folder-completion-function'.
NIL-EXPECTED is the expected value with FLAG nil. NIL-EXPECTED is the expected value with FLAG nil.
T-EXPECTED is the expected value with FLAG t. T-EXPECTED is the expected value with FLAG t.
LAMBDA-EXPECTED is the expected value with FLAG lambda." LAMBDA-EXPECTED is the expected value with FLAG lambda."
(declare (debug t))
`(with-mh-test-env `(with-mh-test-env
(mh-test-folder-completion-2 ,nil-expected ;case "a" (mh-test-folder-completion-2 ,nil-expected ;case "a"
(mh-folder-completion-function ,name nil nil)) (mh-folder-completion-function ,name nil nil))
@ -388,6 +389,7 @@ LAMBDA-EXPECTED is the expected value with FLAG lambda."
ACTUAL should evaluate to either EXPECTED or to a list containing EXPECTED. ACTUAL should evaluate to either EXPECTED or to a list containing EXPECTED.
ACTUAL may be evaluated twice, but this gives a clearer error on failure, ACTUAL may be evaluated twice, but this gives a clearer error on failure,
and the `should' macro requires idempotent evaluation anyway." and the `should' macro requires idempotent evaluation anyway."
(declare (debug t))
`(if (and (not (consp ,expected)) (consp ,actual)) `(if (and (not (consp ,expected)) (consp ,actual))
(should (member ,expected ,actual)) (should (member ,expected ,actual))
(should (equal ,expected ,actual)))) (should (equal ,expected ,actual))))

View file

@ -26,7 +26,7 @@
(defmacro with-time-stamp-test-env (&rest body) (defmacro with-time-stamp-test-env (&rest body)
"Evaluate BODY with some standard time-stamp test variables bound." "Evaluate BODY with some standard time-stamp test variables bound."
(declare (indent defun)) (declare (indent 0) (debug t))
`(let ((user-login-name "test-logname") `(let ((user-login-name "test-logname")
(user-full-name "100%d Tester") ;verify "%" passed unchanged (user-full-name "100%d Tester") ;verify "%" passed unchanged
(buffer-file-name "/emacs/test/time-stamped-file") (buffer-file-name "/emacs/test/time-stamped-file")
@ -46,7 +46,7 @@
(defmacro with-time-stamp-test-time (reference-time &rest body) (defmacro with-time-stamp-test-time (reference-time &rest body)
"Force any contained time-stamp call to use time REFERENCE-TIME." "Force any contained time-stamp call to use time REFERENCE-TIME."
(declare (indent defun)) (declare (indent 1) (debug t))
`(cl-letf* `(cl-letf*
((orig-time-stamp-string-fn (symbol-function 'time-stamp-string)) ((orig-time-stamp-string-fn (symbol-function 'time-stamp-string))
((symbol-function 'time-stamp-string) ((symbol-function 'time-stamp-string)
@ -56,13 +56,14 @@
(defmacro with-time-stamp-system-name (name &rest body) (defmacro with-time-stamp-system-name (name &rest body)
"Force (system-name) to return NAME while evaluating BODY." "Force (system-name) to return NAME while evaluating BODY."
(declare (indent defun)) (declare (indent 1) (debug t))
`(cl-letf (((symbol-function 'system-name) `(cl-letf (((symbol-function 'system-name)
(lambda () ,name))) (lambda () ,name)))
,@body)) ,@body))
(defmacro time-stamp-should-warn (form) (defmacro time-stamp-should-warn (form)
"Similar to `should' but verifies that a format warning is generated." "Similar to `should' but verifies that a format warning is generated."
(declare (debug t))
`(let ((warning-count 0)) `(let ((warning-count 0))
(cl-letf (((symbol-function 'time-stamp-conv-warn) (cl-letf (((symbol-function 'time-stamp-conv-warn)
(lambda (_old _new) (lambda (_old _new)
@ -761,6 +762,7 @@ and is used for testing."
"Formats ZONE and compares it to EXPECT. "Formats ZONE and compares it to EXPECT.
Uses the free variables `form-string' and `pattern-mod'. Uses the free variables `form-string' and `pattern-mod'.
The functions in `pattern-mod' are composed left to right." The functions in `pattern-mod' are composed left to right."
(declare (debug t))
`(let ((result ,expect)) `(let ((result ,expect))
(dolist (fn pattern-mod) (dolist (fn pattern-mod)
(setq result (funcall fn result))) (setq result (funcall fn result)))
@ -895,10 +897,11 @@ BIG-MOD is the result for offset +100 hours and modifiers for the other
expected results for hours greater than 99 with a whole number of minutes. expected results for hours greater than 99 with a whole number of minutes.
SECBIG-MOD is the result for offset +100 hours 30 seconds and modifiers for SECBIG-MOD is the result for offset +100 hours 30 seconds and modifiers for
the other expected results for hours greater than 99 with non-zero seconds." the other expected results for hours greater than 99 with non-zero seconds."
(declare (indent 1)) (declare (indent 1) (debug (&rest sexp)))
;; Generate a form to create a list of tests to define. When this ;; Generate a form to create a list of tests to define. When this
;; macro is called, the form is evaluated, thus defining the tests. ;; macro is called, the form is evaluated, thus defining the tests.
(let ((ert-test-list '(list))) ;; We will modify this list, so start with a list consed at runtime.
(let ((ert-test-list (list 'list)))
(dolist (form-string form-strings ert-test-list) (dolist (form-string form-strings ert-test-list)
(nconc (nconc
ert-test-list ert-test-list