mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-14 04:21:24 +00:00
Merge from origin/emacs-31
fff343c332; Fix typos in iCalendar macro and recurrence docstrings912c8e3691Ensure Tramp backward compatibilitydf9b97e516; update README for windows binaries9e37c94079Read a key sequence instead of a single key in 'map-y-or-...2755f171fc; Document new features and update NEWS13842157d2; * etc/NEWS: Presentational fixes and improvements. # Conflicts: # etc/NEWS
This commit is contained in:
commit
0fac164893
15 changed files with 385 additions and 147 deletions
|
|
@ -21,7 +21,6 @@ Making a link to our copy of the source is NOT sufficient, since we
|
||||||
might upgrade to a new version while you are still distributing the
|
might upgrade to a new version while you are still distributing the
|
||||||
old binaries.
|
old binaries.
|
||||||
|
|
||||||
|
|
||||||
Windows Binaries
|
Windows Binaries
|
||||||
================
|
================
|
||||||
|
|
||||||
|
|
@ -62,18 +61,34 @@ intended that these will be updated after that point.
|
||||||
|
|
||||||
Source for Emacs itself is found in the directory above.
|
Source for Emacs itself is found in the directory above.
|
||||||
|
|
||||||
|
Emacs binaries are normally built using MSYS2/MINGW64 and include a full
|
||||||
|
"Ahead of Time" (AOT) build of provided elisp. Other binaries for a
|
||||||
|
given version of Emacs, if any, that have been created from atypical
|
||||||
|
compilation environments or built using alternative (e.g. "noaot")
|
||||||
|
settings may include architecture (e.g. "i668") and or other "tags"
|
||||||
|
following the version identifier (for example:
|
||||||
|
emacs-X.Y.Z-i686-notreesitter-nognutls.zip).
|
||||||
|
|
||||||
Snapshots
|
Snapshots
|
||||||
=========
|
=========
|
||||||
|
|
||||||
We also distribute "snapshots" of Emacs built at points throughout the
|
We also distribute "snapshots" of Emacs built at points throughout the
|
||||||
development cycle, for those interested in following this cycle. They
|
development cycle, for those interested in following this cycle. They
|
||||||
are not recommended for normal users; however, they are useful for
|
are not recommended for normal users; however, they are useful for
|
||||||
people who want to report bugs against the current master.
|
people who want to report bugs against the current master, to help in
|
||||||
|
"pretesting" new release versions, and so on.
|
||||||
|
|
||||||
The files follow the same naming convention, but also include a date
|
The files follow the same naming convention, but also include a date
|
||||||
(and sometimes information about their branch). The Emacs source at
|
(and sometimes information about their branch) or they may releate to a
|
||||||
the time of these builds is also distributed.
|
sepecific pretest or release candidate for an "uncut" Emacs. Emacs
|
||||||
|
sources are distributed along with each dated snapshot. Sources are
|
||||||
|
provided for the pretest and release candidate Emacs versions here, as
|
||||||
|
for release builds, are found in the directory (or directories) above.
|
||||||
|
|
||||||
|
Meta
|
||||||
|
====
|
||||||
|
|
||||||
|
You can find a copy this file, along with other programs used to build Emacs as a native windows program using the MSYS2 toolchain, within the emacs source tree, see: https://git.savannah.gnu.org/cgit/emacs.git/tree/admin/nt/dist-build
|
||||||
|
|
||||||
LICENSE
|
LICENSE
|
||||||
======
|
======
|
||||||
|
|
|
||||||
|
|
@ -1640,12 +1640,16 @@ present.
|
||||||
|
|
||||||
@findex delete-trailing-whitespace
|
@findex delete-trailing-whitespace
|
||||||
@vindex delete-trailing-lines
|
@vindex delete-trailing-lines
|
||||||
|
@findex delete-trailing-whitespace-mode
|
||||||
Type @kbd{M-x delete-trailing-whitespace} to delete all trailing
|
Type @kbd{M-x delete-trailing-whitespace} to delete all trailing
|
||||||
whitespace. This command deletes all extra spaces at the end of each
|
whitespace. This command deletes all extra spaces at the end of each
|
||||||
line in the buffer, and all empty lines at the end of the buffer; to
|
line in the buffer, and all empty lines at the end of the buffer; to
|
||||||
ignore the latter, change the variable @code{delete-trailing-lines} to
|
ignore the latter, change the variable @code{delete-trailing-lines} to
|
||||||
@code{nil}. If the region is active, the command instead deletes
|
@code{nil}. If the region is active, the command instead deletes
|
||||||
extra spaces at the end of each line in the region.
|
extra spaces at the end of each line in the region. If you enable the
|
||||||
|
buffer-local mode @code{delete-trailing-whitespace-mode}, Emacs will
|
||||||
|
automatically invoke @code{delete-trailing-whitespace} each time you
|
||||||
|
save the buffer.
|
||||||
|
|
||||||
@vindex indicate-empty-lines
|
@vindex indicate-empty-lines
|
||||||
@cindex unused lines
|
@cindex unused lines
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,9 @@ Move point to where you click (@code{mouse-set-point}).
|
||||||
Activate the region around the text selected by dragging, and put the
|
Activate the region around the text selected by dragging, and put the
|
||||||
text in the primary selection (@code{mouse-set-region}).
|
text in the primary selection (@code{mouse-set-region}).
|
||||||
|
|
||||||
|
@item S-mouse-1
|
||||||
|
Adjust already selected region.
|
||||||
|
|
||||||
@item mouse-2
|
@item mouse-2
|
||||||
Move point to where you click, and insert the contents of the primary
|
Move point to where you click, and insert the contents of the primary
|
||||||
selection there (@code{mouse-yank-primary}).
|
selection there (@code{mouse-yank-primary}).
|
||||||
|
|
@ -134,6 +137,12 @@ is less than a half a character, you'd normally get the empty string
|
||||||
in your kill ring, but with @code{non-empty}, this short mouse drag
|
in your kill ring, but with @code{non-empty}, this short mouse drag
|
||||||
won't affect the kill ring.
|
won't affect the kill ring.
|
||||||
|
|
||||||
|
@findex mouse-shift-adjust-mode
|
||||||
|
If you activate the Mouse-Shift-Adjust minor mode, clicking the left
|
||||||
|
mouse button with the @kbd{Shift} modifier (@kbd{S-down-mouse-1})
|
||||||
|
adjusts (extends or shrinks, depending on where you click) the already
|
||||||
|
selected region.
|
||||||
|
|
||||||
@vindex mouse-scroll-min-lines
|
@vindex mouse-scroll-min-lines
|
||||||
If you move the mouse off the top or bottom of the window while
|
If you move the mouse off the top or bottom of the window while
|
||||||
dragging, the window scrolls at a steady rate until you move the mouse
|
dragging, the window scrolls at a steady rate until you move the mouse
|
||||||
|
|
@ -1918,6 +1927,7 @@ in the mode line when the frame is selected.
|
||||||
Some text terminals support mouse clicks in the terminal window.
|
Some text terminals support mouse clicks in the terminal window.
|
||||||
|
|
||||||
@cindex xterm
|
@cindex xterm
|
||||||
|
@findex xterm-mouse-mode
|
||||||
In a terminal emulator which is compatible with @command{xterm}, you
|
In a terminal emulator which is compatible with @command{xterm}, you
|
||||||
can use @kbd{M-x xterm-mouse-mode} to give Emacs control over simple
|
can use @kbd{M-x xterm-mouse-mode} to give Emacs control over simple
|
||||||
uses of the mouse---basically, only non-modified single clicks are
|
uses of the mouse---basically, only non-modified single clicks are
|
||||||
|
|
@ -1925,8 +1935,9 @@ supported. Newer versions of @command{xterm} also support
|
||||||
mouse-tracking. The normal @command{xterm} mouse functionality for
|
mouse-tracking. The normal @command{xterm} mouse functionality for
|
||||||
such clicks is still available by holding down the @key{SHIFT} key
|
such clicks is still available by holding down the @key{SHIFT} key
|
||||||
when you press the mouse button. Xterm Mouse mode is a global minor
|
when you press the mouse button. Xterm Mouse mode is a global minor
|
||||||
mode (@pxref{Minor Modes}). Repeating the command turns the mode off
|
mode (@pxref{Minor Modes}), which is turned on by default if Emacs
|
||||||
again.
|
detects at start time that the terminal supports it. Repeating the
|
||||||
|
command turns the mode off again.
|
||||||
|
|
||||||
@findex gpm-mouse-mode
|
@findex gpm-mouse-mode
|
||||||
In the console on GNU/Linux, you can use @kbd{M-x gpm-mouse-mode} to
|
In the console on GNU/Linux, you can use @kbd{M-x gpm-mouse-mode} to
|
||||||
|
|
|
||||||
|
|
@ -1937,6 +1937,10 @@ case. I.e., if you have a @code{query-replace} from @samp{foo} to
|
||||||
@samp{Bar}. Use this command to do the current replacement with exact
|
@samp{Bar}. Use this command to do the current replacement with exact
|
||||||
case.
|
case.
|
||||||
|
|
||||||
|
@item d
|
||||||
|
to show the replacement of the current match as a buffer of diffs
|
||||||
|
between the original text and text with the match replaced.
|
||||||
|
|
||||||
@item C-l
|
@item C-l
|
||||||
to redisplay the screen. Then you must type another character to
|
to redisplay the screen. Then you must type another character to
|
||||||
specify what to do with this occurrence.
|
specify what to do with this occurrence.
|
||||||
|
|
|
||||||
|
|
@ -1408,7 +1408,8 @@ particular chapter or section of your document.
|
||||||
This hides all the text and subheadings under the top-level heading and
|
This hides all the text and subheadings under the top-level heading and
|
||||||
returns you to the previous view of the buffer. Specifying a numeric
|
returns you to the previous view of the buffer. Specifying a numeric
|
||||||
argument exits that many levels of folds. Specifying a zero argument
|
argument exits that many levels of folds. Specifying a zero argument
|
||||||
exits all folds.
|
exits all folds. Specifying a negative argument (so that the exited
|
||||||
|
fold remains visible) preserves the position of point and window view.
|
||||||
|
|
||||||
To cancel the narrowing of a fold without hiding the text and
|
To cancel the narrowing of a fold without hiding the text and
|
||||||
subheadings, specify a negative argument. For example, @w{@kbd{M--2 C-c
|
subheadings, specify a negative argument. For example, @w{@kbd{M--2 C-c
|
||||||
|
|
|
||||||
|
|
@ -3777,14 +3777,15 @@ supplied to input methods (@pxref{Input Methods}). Use
|
||||||
if you want to translate characters after input methods operate.
|
if you want to translate characters after input methods operate.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@defun key-translate from to
|
@deffn Command key-translate from to
|
||||||
This function modifies @code{keyboard-translate-table} to translate
|
This command modifies @code{keyboard-translate-table} to translate
|
||||||
character code @var{from} into character code @var{to}. It creates the
|
character code @var{from} into character code @var{to}. Interactively,
|
||||||
|
it prompts for @var{from} and @var{to}. It creates the
|
||||||
keyboard translate table if necessary. Both @var{from} and @var{to}
|
keyboard translate table if necessary. Both @var{from} and @var{to}
|
||||||
should be strings that satisfy @code{key-valid-p} (@pxref{Key
|
should be strings that satisfy @code{key-valid-p} (@pxref{Key
|
||||||
Sequences}). If @var{to} is @code{nil}, the function removes any
|
Sequences}). If @var{to} is @code{nil}, the function removes any
|
||||||
existing translation for @var{from}.
|
existing translation for @var{from}.
|
||||||
@end defun
|
@end deffn
|
||||||
|
|
||||||
Here's an example of using the @code{keyboard-translate-table} to
|
Here's an example of using the @code{keyboard-translate-table} to
|
||||||
make @kbd{C-x}, @kbd{C-c} and @kbd{C-v} perform the cut, copy and paste
|
make @kbd{C-x}, @kbd{C-c} and @kbd{C-v} perform the cut, copy and paste
|
||||||
|
|
@ -3812,6 +3813,12 @@ input events that are not characters (i.e., @code{characterp} returns
|
||||||
@code{nil} for them), you must use the event translation mechanism
|
@code{nil} for them), you must use the event translation mechanism
|
||||||
described there.
|
described there.
|
||||||
|
|
||||||
|
@deffn Command key-translate-remove from
|
||||||
|
This command prompts for a key @var{from} and its translation, and
|
||||||
|
removes the translation from the translation table. When calling from
|
||||||
|
Lisp, specify just the key @var{from}, without its translation.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
@node Invoking the Input Method
|
@node Invoking the Input Method
|
||||||
@subsection Invoking the Input Method
|
@subsection Invoking the Input Method
|
||||||
@cindex invoking input method
|
@cindex invoking input method
|
||||||
|
|
|
||||||
|
|
@ -1303,6 +1303,28 @@ The default is @code{inhibit} on NS builds and @code{nil} everywhere
|
||||||
else.
|
else.
|
||||||
@end defopt
|
@end defopt
|
||||||
|
|
||||||
|
@defun set-frame-size-and-position &optional frame width height left top
|
||||||
|
This function sets the new size and position of @var{frame} in a single
|
||||||
|
step; @var{frame} defaults to the selected frame. The size and position
|
||||||
|
are specified as with the corresponding frame parameters @code{width},
|
||||||
|
@code{height}, @code{left}, and @code{top} (@pxref{Size Parameters}, and
|
||||||
|
@pxref{Position Parameters}). If any of these 4 arguments is omitted or
|
||||||
|
@code{nil}, that means not to change the corresponding parameter of
|
||||||
|
@var{frame}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@cindex gravity of frame
|
||||||
|
@defun set-frame-size-and-position-pixelwise frame width height x y &optional gravity
|
||||||
|
This function sets the new size and position of a frame, similarly to
|
||||||
|
@code{set-frame-size-and-position}, but in pixel units. The optional
|
||||||
|
argument @var{gravity} specified the new @dfn{gravity} of a frame and
|
||||||
|
must be a value between 0 and 10; it defaults to 1. The gravity
|
||||||
|
determines how a window or its contents adjust when resized or
|
||||||
|
positioned. The interpretation is specific to each window-system; for
|
||||||
|
example, GTK uses window gravity to define which point of the window
|
||||||
|
remains fixed during resizing.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@cindex tracking frame size changes
|
@cindex tracking frame size changes
|
||||||
The abnormal hook @code{window-size-change-functions} (@pxref{Window
|
The abnormal hook @code{window-size-change-functions} (@pxref{Window
|
||||||
Hooks}) tracks all changes of the inner size of a frame including those
|
Hooks}) tracks all changes of the inner size of a frame including those
|
||||||
|
|
|
||||||
|
|
@ -2380,9 +2380,12 @@ asking each question individually. This gives the user certain
|
||||||
convenient facilities such as the ability to answer the whole series at
|
convenient facilities such as the ability to answer the whole series at
|
||||||
once.
|
once.
|
||||||
|
|
||||||
|
@vindex y-or-n-p-use-read-key@r{, and} map-y-or-n-p
|
||||||
@defun map-y-or-n-p prompter actor list &optional help action-alist no-cursor-in-echo-area
|
@defun map-y-or-n-p prompter actor list &optional help action-alist no-cursor-in-echo-area
|
||||||
This function asks the user a series of questions, reading a
|
This function asks the user a series of questions, reading a
|
||||||
single-character answer in the echo area for each one.
|
single-character answer in the minibuffer for each one. However, if
|
||||||
|
@code{y-or-n-p-use-read-key} is non-@code{nil} (@pxref{Key Sequence
|
||||||
|
Input}), it reads a key sequence from the echo area.
|
||||||
|
|
||||||
The value of @var{list} specifies the objects to ask questions about.
|
The value of @var{list} specifies the objects to ask questions about.
|
||||||
It should be either a list of objects or a generator function. If it
|
It should be either a list of objects or a generator function. If it
|
||||||
|
|
|
||||||
|
|
@ -1670,9 +1670,10 @@ On some systems, when Emacs reads the output from a subprocess, the
|
||||||
output data is read in very small blocks, potentially resulting in
|
output data is read in very small blocks, potentially resulting in
|
||||||
very poor performance. This behavior can be remedied to some extent
|
very poor performance. This behavior can be remedied to some extent
|
||||||
by setting the variable @code{process-adaptive-read-buffering} to a
|
by setting the variable @code{process-adaptive-read-buffering} to a
|
||||||
non-@code{nil} value (the default), as it will automatically delay reading
|
non-@code{nil} value, as it will automatically delay reading
|
||||||
from such processes, thus allowing them to produce more output before
|
from such processes, thus allowing them to produce more output before
|
||||||
Emacs tries to read it.
|
Emacs tries to read it. The default is @code{nil}, since a
|
||||||
|
non-@code{nil} value reduces performance.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
|
|
|
||||||
291
etc/NEWS.31
291
etc/NEWS.31
File diff suppressed because it is too large
Load diff
|
|
@ -989,7 +989,7 @@ Each binding in BINDINGS should be a list of one of the following forms:
|
||||||
"Execute BODY with bindings in BINDINGS taken from NODE and its children.
|
"Execute BODY with bindings in BINDINGS taken from NODE and its children.
|
||||||
|
|
||||||
NODE should be an iCalendar syntax node representing a property or
|
NODE should be an iCalendar syntax node representing a property or
|
||||||
parameter. If NODE is not a syntax node, this form evalutes to nil
|
parameter. If NODE is not a syntax node, this form evaluates to nil
|
||||||
without binding the variables in BINDINGS and without executing BODY.
|
without binding the variables in BINDINGS and without executing BODY.
|
||||||
|
|
||||||
Within BODY, if NODE's value is itself a syntax node, the symbol
|
Within BODY, if NODE's value is itself a syntax node, the symbol
|
||||||
|
|
@ -1044,7 +1044,7 @@ available in BODY; see its docstring for their form."
|
||||||
"Execute BODY with BINDINGS taken from the value and parameters in NODE.
|
"Execute BODY with BINDINGS taken from the value and parameters in NODE.
|
||||||
|
|
||||||
NODE should be an iCalendar syntax node representing a property. If NODE
|
NODE should be an iCalendar syntax node representing a property. If NODE
|
||||||
is not a syntax node, this form evalutes to nil without binding the
|
is not a syntax node, this form evaluates to nil without binding the
|
||||||
variables in BINDINGS and without executing BODY.
|
variables in BINDINGS and without executing BODY.
|
||||||
|
|
||||||
Within BODY, if NODE's value is itself a syntax node, the symbol
|
Within BODY, if NODE's value is itself a syntax node, the symbol
|
||||||
|
|
@ -1067,7 +1067,7 @@ available in BODY; see its docstring for their form.")
|
||||||
"Bind the value in PARAMETER and execute BODY.
|
"Bind the value in PARAMETER and execute BODY.
|
||||||
|
|
||||||
PARAMETER should be an iCalendar syntax node representing a
|
PARAMETER should be an iCalendar syntax node representing a
|
||||||
parameter. If PARAMETER is nil, this form evalutes to nil without
|
parameter. If PARAMETER is nil, this form evaluates to nil without
|
||||||
executing BODY.
|
executing BODY.
|
||||||
|
|
||||||
Within BODY, if PARAMETER's value is a syntax node, the symbol
|
Within BODY, if PARAMETER's value is a syntax node, the symbol
|
||||||
|
|
@ -1087,7 +1087,7 @@ bound to nil."
|
||||||
|
|
||||||
Find the first child node of type TYPE in NODE, bind that
|
Find the first child node of type TYPE in NODE, bind that
|
||||||
child node's value and any of its children in BINDINGS and execute BODY
|
child node's value and any of its children in BINDINGS and execute BODY
|
||||||
with these bindings. If there is no such node, this form evalutes to
|
with these bindings. If there is no such node, this form evaluates to
|
||||||
nil without executing BODY.
|
nil without executing BODY.
|
||||||
|
|
||||||
Within BODY, the symbols `value-node', `value-type', and `value' will be
|
Within BODY, the symbols `value-node', `value-type', and `value' will be
|
||||||
|
|
|
||||||
|
|
@ -1644,7 +1644,7 @@ with the UTC offset in effect prior to the OBS-ONSET of OBSERVANCE (see
|
||||||
RFC5545 Section 3.3.5). So e.g. at the switch from Standard to Daylight
|
RFC5545 Section 3.3.5). So e.g. at the switch from Standard to Daylight
|
||||||
in US Eastern, 2:30AM EST (a nonexistent time) becomes 3:30AM EDT, and
|
in US Eastern, 2:30AM EST (a nonexistent time) becomes 3:30AM EDT, and
|
||||||
at the switch from Daylight to Standard, 1:30AM (which occurs twice)
|
at the switch from Daylight to Standard, 1:30AM (which occurs twice)
|
||||||
becomes 1:30AM EDT, the first occurence."
|
becomes 1:30AM EDT, the first occurrence."
|
||||||
(ical:with-component observance
|
(ical:with-component observance
|
||||||
((ical:tzoffsetfrom :value offset-from)
|
((ical:tzoffsetfrom :value offset-from)
|
||||||
(ical:tzoffsetto :value offset-to))
|
(ical:tzoffsetto :value offset-to))
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ function is used instead.
|
||||||
The function's value is the number of actions taken."
|
The function's value is the number of actions taken."
|
||||||
(let* ((actions 0)
|
(let* ((actions 0)
|
||||||
(msg (current-message))
|
(msg (current-message))
|
||||||
user-keys mouse-event map prompt char elt def
|
user-keys mouse-event map prompt chars elt def
|
||||||
;; Non-nil means we should use mouse menus to ask.
|
;; Non-nil means we should use mouse menus to ask.
|
||||||
use-menus
|
use-menus
|
||||||
delayed-switch-frame
|
delayed-switch-frame
|
||||||
|
|
@ -174,14 +174,15 @@ The function's value is the number of actions taken."
|
||||||
'quit)))
|
'quit)))
|
||||||
(y-or-n-p-use-read-key
|
(y-or-n-p-use-read-key
|
||||||
;; Prompt in the echo area using `read-key'.
|
;; Prompt in the echo area using `read-key'.
|
||||||
(let ((cursor-in-echo-area (not no-cursor-in-echo-area)))
|
(let ((cursor-in-echo-area (not no-cursor-in-echo-area))
|
||||||
(message "%s" (substitute-command-keys
|
(full-prompt
|
||||||
|
(substitute-command-keys
|
||||||
(format
|
(format
|
||||||
(apply #'propertize
|
(apply #'propertize
|
||||||
"%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') "
|
"%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') "
|
||||||
minibuffer-prompt-properties)
|
minibuffer-prompt-properties)
|
||||||
prompt user-keys
|
prompt user-keys
|
||||||
(help-key))))
|
(help-key)))))
|
||||||
(if minibuffer-auto-raise
|
(if minibuffer-auto-raise
|
||||||
(raise-frame (window-frame (minibuffer-window))))
|
(raise-frame (window-frame (minibuffer-window))))
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
|
|
@ -196,8 +197,8 @@ The function's value is the number of actions taken."
|
||||||
;; Do NOT use read-event here. That
|
;; Do NOT use read-event here. That
|
||||||
;; function does not consult
|
;; function does not consult
|
||||||
;; input-decode-map (bug#75886).
|
;; input-decode-map (bug#75886).
|
||||||
(setq char (read-key))
|
(setq chars (read-key-sequence-vector full-prompt))
|
||||||
(when (eq char ?\C-g)
|
(when (member chars '([?\C-g] [?\C-\[ ?\C-\[ ?\C-\[]))
|
||||||
(signal 'quit nil)))
|
(signal 'quit nil)))
|
||||||
(when (fboundp 'set-text-conversion-style)
|
(when (fboundp 'set-text-conversion-style)
|
||||||
(set-text-conversion-style text-conversion-style)))
|
(set-text-conversion-style text-conversion-style)))
|
||||||
|
|
@ -207,10 +208,10 @@ The function's value is the number of actions taken."
|
||||||
"%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') %s"
|
"%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') %s"
|
||||||
prompt user-keys
|
prompt user-keys
|
||||||
(help-key)
|
(help-key)
|
||||||
(if (equal char -1)
|
(if (equal chars [-1])
|
||||||
"[end-of-keyboard-macro]"
|
"[end-of-keyboard-macro]"
|
||||||
(single-key-description char))))))
|
(key-description chars))))))
|
||||||
(setq def (lookup-key map (vector char))))
|
(setq def (and chars (lookup-key map chars))))
|
||||||
(t
|
(t
|
||||||
;; Read from the minibuffer.
|
;; Read from the minibuffer.
|
||||||
(let* ((full-prompt
|
(let* ((full-prompt
|
||||||
|
|
@ -224,7 +225,7 @@ The function's value is the number of actions taken."
|
||||||
(cmd-char
|
(cmd-char
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(setq char last-command-event)
|
(setq chars (this-command-keys-vector))
|
||||||
(exit-minibuffer)))
|
(exit-minibuffer)))
|
||||||
(cmd-help
|
(cmd-help
|
||||||
(lambda ()
|
(lambda ()
|
||||||
|
|
@ -250,8 +251,8 @@ The function's value is the number of actions taken."
|
||||||
(read-from-minibuffer
|
(read-from-minibuffer
|
||||||
full-prompt nil remap nil
|
full-prompt nil remap nil
|
||||||
(or y-or-n-p-history-variable t))
|
(or y-or-n-p-history-variable t))
|
||||||
(message "%s%s" full-prompt (single-key-description char)))
|
(message "%s%s" full-prompt (key-description chars)))
|
||||||
(setq def (lookup-key map (vector char)))))
|
(setq def (and chars (lookup-key map chars)))))
|
||||||
(cond ((eq def 'exit)
|
(cond ((eq def 'exit)
|
||||||
(setq next (lambda () nil)))
|
(setq next (lambda () nil)))
|
||||||
((eq def 'act)
|
((eq def 'act)
|
||||||
|
|
@ -318,12 +319,16 @@ Type \\`SPC' or \\`y' to %s the current %s;
|
||||||
(setq actions (1+ actions))
|
(setq actions (1+ actions))
|
||||||
;; Regurgitated; try again.
|
;; Regurgitated; try again.
|
||||||
(funcall try-again)))
|
(funcall try-again)))
|
||||||
((and (consp char)
|
((eq chars '[switch-frame])
|
||||||
(eq (car char) 'switch-frame))
|
|
||||||
;; switch-frame event. Put it off until we're done.
|
;; switch-frame event. Put it off until we're done.
|
||||||
(setq delayed-switch-frame char)
|
(setq delayed-switch-frame chars)
|
||||||
(funcall try-again))
|
(funcall try-again))
|
||||||
((eq def nil) ;; Special case for bug#67836
|
((and noninteractive (member chars '(nil [])))
|
||||||
|
;; Special case for kmacro in batch mode (bug#67836).
|
||||||
|
;; When 'y-or-n-p-use-read-key' is non-nil,
|
||||||
|
;; 'read-key-sequence-vector' returns [].
|
||||||
|
;; When 'y-or-n-p-use-read-key' is nil,
|
||||||
|
;; 'chars' is nil.
|
||||||
(error "Can't use in a kmacro in batch mode"))
|
(error "Can't use in a kmacro in batch mode"))
|
||||||
(t
|
(t
|
||||||
;; Random char.
|
;; Random char.
|
||||||
|
|
|
||||||
|
|
@ -5478,8 +5478,10 @@ should be set connection-local.")
|
||||||
"Return non-nil if ARG exists in default `process-environment'.
|
"Return non-nil if ARG exists in default `process-environment'.
|
||||||
Tramp does not propagate local environment variables in remote
|
Tramp does not propagate local environment variables in remote
|
||||||
processes."
|
processes."
|
||||||
(or (ignore-error void-variable
|
(or ;; `buffer-local-toplevel-value' has been defined in Emacs 31.1.
|
||||||
(member arg (buffer-local-toplevel-value 'process-environment)))
|
(ignore-error (void-variable void-function)
|
||||||
|
(member arg (tramp-compat-funcall 'buffer-local-toplevel-value
|
||||||
|
'process-environment)))
|
||||||
(member arg (default-toplevel-value 'process-environment))))
|
(member arg (default-toplevel-value 'process-environment))))
|
||||||
|
|
||||||
(defun tramp-handle-make-process (&rest args)
|
(defun tramp-handle-make-process (&rest args)
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,7 @@
|
||||||
(defun map-ynp-tests-simple-call ()
|
(defun map-ynp-tests-simple-call ()
|
||||||
(map-y-or-n-p "" #'ignore '(1)))
|
(map-y-or-n-p "" #'ignore '(1)))
|
||||||
|
|
||||||
(ert-deftest test-map-ynp-kmacro ()
|
(defun test-map-ynp-kmacro-1 ()
|
||||||
"Test that `map-y-or-n-p' in a kmacro terminates on end of input."
|
|
||||||
(let ((eval-expression-debug-on-error nil)) ;; bug#67836
|
(let ((eval-expression-debug-on-error nil)) ;; bug#67836
|
||||||
(execute-kbd-macro (read-kbd-macro "M-: (map-ynp-tests-simple-call) RET y"))
|
(execute-kbd-macro (read-kbd-macro "M-: (map-ynp-tests-simple-call) RET y"))
|
||||||
(should-error
|
(should-error
|
||||||
|
|
@ -43,5 +42,80 @@
|
||||||
(should-error
|
(should-error
|
||||||
(execute-kbd-macro (read-kbd-macro "M-: (map-ynp-tests-simple-call) RET")))))))
|
(execute-kbd-macro (read-kbd-macro "M-: (map-ynp-tests-simple-call) RET")))))))
|
||||||
|
|
||||||
|
(ert-deftest test-map-ynp-kmacro ()
|
||||||
|
"Test that `map-y-or-n-p' in a kmacro terminates on end of input."
|
||||||
|
(let ((y-or-n-p-use-read-key nil))
|
||||||
|
(test-map-ynp-kmacro-1))
|
||||||
|
(let ((y-or-n-p-use-read-key t))
|
||||||
|
(test-map-ynp-kmacro-1)))
|
||||||
|
|
||||||
|
(defvar map-ynp-tests-result nil)
|
||||||
|
|
||||||
|
(defvar-keymap map-ynp-tests-map
|
||||||
|
"C-x s" 'map-ynp-tests-command)
|
||||||
|
|
||||||
|
(defun map-ynp-tests-command-symbol (obj)
|
||||||
|
(interactive)
|
||||||
|
(push obj map-ynp-tests-result))
|
||||||
|
|
||||||
|
(defun map-ynp-tests-command ()
|
||||||
|
(interactive)
|
||||||
|
(should (equal (map-y-or-n-p
|
||||||
|
"Prompt "
|
||||||
|
(lambda (obj)
|
||||||
|
(push obj map-ynp-tests-result))
|
||||||
|
'(1 2 3 4)
|
||||||
|
nil
|
||||||
|
`((?\C-r map-ynp-tests-command-symbol "C-r")
|
||||||
|
(?\M-~ ,(lambda (obj)
|
||||||
|
(push obj map-ynp-tests-result))
|
||||||
|
"M-~")))
|
||||||
|
(length map-ynp-tests-result))))
|
||||||
|
|
||||||
|
(defun map-ynp-tests-run (keys result)
|
||||||
|
(setq map-ynp-tests-result nil)
|
||||||
|
(execute-kbd-macro (read-kbd-macro (concat "C-x s " keys)))
|
||||||
|
(should (equal (nreverse map-ynp-tests-result) result)))
|
||||||
|
|
||||||
|
(defun test-map-ynp-keys-1 ()
|
||||||
|
(with-temp-buffer
|
||||||
|
(save-window-excursion
|
||||||
|
;; `execute-kbd-macro' applied to window only
|
||||||
|
(set-window-buffer nil (current-buffer))
|
||||||
|
(use-local-map map-ynp-tests-map)
|
||||||
|
|
||||||
|
(map-ynp-tests-run "y Y SPC n" '(1 2 3))
|
||||||
|
(map-ynp-tests-run "n N DEL y" '(4))
|
||||||
|
(map-ynp-tests-run "n !" '(2 3 4))
|
||||||
|
(map-ynp-tests-run "." '(1))
|
||||||
|
(map-ynp-tests-run "y q" '(1))
|
||||||
|
(map-ynp-tests-run "y RET" '(1))
|
||||||
|
(map-ynp-tests-run "C-r M-~ ESC ~ q" '(1 2 3))
|
||||||
|
|
||||||
|
(map-ynp-tests-run "x q" nil) ;; x - random char
|
||||||
|
|
||||||
|
(kill-buffer (help-buffer))
|
||||||
|
(if y-or-n-p-use-read-key
|
||||||
|
(map-ynp-tests-run "? q" nil)
|
||||||
|
(map-ynp-tests-run "C-h q" nil))
|
||||||
|
(should (get-buffer (help-buffer)))
|
||||||
|
|
||||||
|
(should (equal 'quit
|
||||||
|
(condition-case err
|
||||||
|
(map-ynp-tests-run "C-g" nil)
|
||||||
|
(quit (car err)))))
|
||||||
|
|
||||||
|
(should (equal 'quit
|
||||||
|
(condition-case err
|
||||||
|
(map-ynp-tests-run "ESC ESC ESC" nil)
|
||||||
|
(quit (car err))))))))
|
||||||
|
|
||||||
|
(ert-deftest test-map-ynp-keys ()
|
||||||
|
"Test keys for `map-y-or-n-p'."
|
||||||
|
(let ((y-or-n-p-use-read-key nil))
|
||||||
|
(test-map-ynp-keys-1))
|
||||||
|
(let ((y-or-n-p-use-read-key t))
|
||||||
|
(test-map-ynp-keys-1)))
|
||||||
|
|
||||||
(provide 'map-ynp-tests)
|
(provide 'map-ynp-tests)
|
||||||
;;; map-ynp-tests.el ends here
|
;;; map-ynp-tests.el ends here
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue