mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Merge from origin/emacs-27
2f9bfaef21(origin/emacs-27) ; Fix last change520fd3e728* lisp/env.el (substitute-env-vars): Doc fix. (Bug#40948)85544f8ef5* lisp/isearch.el: Fix lazy-highlighting and lazy-counting...d83cc05a73Fix error in ERC when 'erc-server-coding-system' is custom...16fed05ba8Avoid crashes on TTY frames with over-long compositions0278741676Fix typo in custom.texi9f5ae717fb* test/lisp/simple-tests.el (with-shell-command-dont-erase...1f76a16ed3* lisp/image-mode.el (image-mode-map): Update menu items.f0e1bf56f0Fix bugs in tab-bar and tab-line and mention remaining fea...f0b9f18457Make shell-command tests fit for tcsh.68f4a740a1Remove doc duplicationac31cd384c* etc/NEWS: Fix inconsistencies. # Conflicts: # etc/NEWS
This commit is contained in:
commit
b56401f384
13 changed files with 135 additions and 50 deletions
|
|
@ -755,7 +755,7 @@ non-@code{nil} value). If you set a variable using the customization
|
|||
buffer, you need not worry about giving it an invalid type: the
|
||||
customization buffer usually only allows you to enter meaningful
|
||||
values. When in doubt, use @kbd{C-h v} (@code{describe-variable}) to
|
||||
check the variable's documentation string to see kind of value it
|
||||
check the variable's documentation string to see what kind of value it
|
||||
expects (@pxref{Examining}).
|
||||
|
||||
@menu
|
||||
|
|
|
|||
|
|
@ -1266,7 +1266,7 @@ Note that the Tab Bar is different from the Tab Line (@pxref{Tab Line}).
|
|||
Whereas tabs on the Tab Line at the top of each window are used to
|
||||
switch between buffers, tabs on the Tab Bar at the top of each frame
|
||||
are used to switch between window configurations containing several
|
||||
windows.
|
||||
windows with buffers.
|
||||
|
||||
@findex tab-bar-mode
|
||||
To toggle the use of tab bars, type @kbd{M-x tab-bar-mode}. This
|
||||
|
|
@ -1324,6 +1324,10 @@ current before calling the command that adds a new tab.
|
|||
To start a new tab with other buffers, customize the variable
|
||||
@code{tab-bar-new-tab-choice}.
|
||||
|
||||
@vindex tab-bar-new-tab-to
|
||||
The variable @code{tab-bar-new-tab-to} defines where to place a new tab.
|
||||
By default, a new tab is added on the right side of the current tab.
|
||||
|
||||
The following commands can be used to delete tabs:
|
||||
|
||||
@table @kbd
|
||||
|
|
@ -1331,7 +1335,8 @@ To start a new tab with other buffers, customize the variable
|
|||
@kindex C-x t 0
|
||||
@findex tab-close
|
||||
Close the selected tab (@code{tab-close}). It has no effect if there
|
||||
is only one tab.
|
||||
is only one tab, unless the variable @code{tab-bar-close-last-tab-choice}
|
||||
is customized to a non-default value.
|
||||
|
||||
@item C-x t 1
|
||||
@kindex C-x t 1
|
||||
|
|
@ -1339,6 +1344,14 @@ is only one tab.
|
|||
Close all tabs on the selected frame, except the selected one.
|
||||
@end table
|
||||
|
||||
@vindex tab-bar-close-tab-select
|
||||
The variable @code{tab-bar-close-tab-select} defines what tab to
|
||||
select after closing the current tab. By default, it selects
|
||||
a recently used tab.
|
||||
|
||||
@findex tab-undo
|
||||
The command @code{tab-undo} restores the last closed tab.
|
||||
|
||||
The following commands can be used to switch between tabs:
|
||||
|
||||
@table @kbd
|
||||
|
|
@ -1358,22 +1371,60 @@ switches back to the previous Nth tab.
|
|||
Switch to the previous tab. With a positive numeric argument N, it
|
||||
switches to the previous Nth tab; with a negative argument −N, it
|
||||
switches back to the next Nth tab.
|
||||
|
||||
@item C-x t @key{RET} @var{tabname} @key{RET}
|
||||
Switch to the tab by its name, with completion on all tab names.
|
||||
Default values are tab names sorted by recency, so you can use
|
||||
@kbd{M-n} (@code{next-history-element}) to get the name of the last
|
||||
visited tab, the second last, and so on.
|
||||
|
||||
@item @var{modifier}-@var{tabnumber}
|
||||
@findex tab-select
|
||||
Switch to the tab by its number. After customizing the variable
|
||||
@code{tab-bar-select-tab-modifiers} to specify a @var{modifier} key, you
|
||||
can select a tab by its ordinal number using the specified modifier in
|
||||
combination with the tab number to select. To display the tab number
|
||||
alongside the tab name, you can customize another variable
|
||||
@code{tab-bar-tab-hints}. This will help you to decide what key to press
|
||||
to select the tab by its number.
|
||||
|
||||
@item @var{modifier}-@kbd{0}
|
||||
@findex tab-recent
|
||||
Switch to the recent tab. The key combination is the modifier key
|
||||
defined by @code{tab-bar-select-tab-modifiers} and the key @kbd{0}.
|
||||
With a numeric argument N, switch to the Nth recent tab.
|
||||
@end table
|
||||
|
||||
The following commands can be used to operate on tabs:
|
||||
|
||||
@table @kbd
|
||||
@item C-x t r @var{tabname} @key{RET}
|
||||
@findex tab-rename
|
||||
Rename the current tab to @var{tabname}. You can control the
|
||||
programmatic name given to a tab by default by customizing the
|
||||
variable @code{tab-bar-tab-name-function}.
|
||||
|
||||
@item C-x t m
|
||||
@findex tab-move
|
||||
Move the current tab N positions to the right with a positive numeric
|
||||
argument N. With a negative argument −N, it moves the current tab
|
||||
argument N. With a negative argument −N, move the current tab
|
||||
N positions to the left.
|
||||
@end table
|
||||
|
||||
@findex tab-bar-history-mode
|
||||
You can enable @code{tab-bar-history-mode} to remember window
|
||||
configurations used in every tab, and restore them.
|
||||
|
||||
@table @kbd
|
||||
@item tab-bar-history-back
|
||||
Restore a previous window configuration used in the current tab.
|
||||
This navigates back in the history of window configurations.
|
||||
|
||||
@item tab-bar-history-forward
|
||||
Cancel restoration of the previous window configuration.
|
||||
This navigates forward in the history of window configurations.
|
||||
@end table
|
||||
|
||||
@node Dialog Boxes
|
||||
@section Using Dialog Boxes
|
||||
@cindex dialog boxes
|
||||
|
|
|
|||
|
|
@ -628,8 +628,16 @@ Selecting the previous window-local tab is the same as typing @kbd{C-x
|
|||
same as @kbd{C-x @key{RIGHT}} (@code{next-buffer}). Both commands
|
||||
support a numeric prefix argument as a repeat count.
|
||||
|
||||
You can customize the variable @code{tab-line-tabs-function} to define
|
||||
the preferred contents of the tab line. By default, it displays all
|
||||
buffers previously visited in the window, as described above. But you
|
||||
can also set it to display a list of buffers with the same major mode
|
||||
as the current buffer, or to display buffers grouped by their major
|
||||
mode, where clicking on the mode name in the first tab displays a list
|
||||
of all major modes where you can select another group of buffers.
|
||||
|
||||
Note that the Tab Line is different from the Tab Bar (@pxref{Tab Bars}).
|
||||
Whereas tabs on the Tab Bar at the top of each frame are used to
|
||||
switch between window configurations containing several windows,
|
||||
switch between window configurations containing several windows with buffers,
|
||||
tabs on the Tab Line at the top of each window are used to switch
|
||||
between buffers.
|
||||
between buffers in the window.
|
||||
|
|
|
|||
|
|
@ -2406,8 +2406,7 @@ call @code{(make-string 3 ?a)} yields a mutable string that can be
|
|||
changed via later calls to @code{aset}.
|
||||
|
||||
A mutable object can become constant if it is part of an expression
|
||||
that is evaluated, because a program should not modify an object
|
||||
that is being evaluated. The reverse does not occur: constant objects
|
||||
that is evaluated. The reverse does not occur: constant objects
|
||||
should stay constant.
|
||||
|
||||
Trying to modify a constant variable signals an error
|
||||
|
|
|
|||
16
etc/NEWS.27
16
etc/NEWS.27
|
|
@ -28,7 +28,7 @@ applies, and please also update docstrings as needed.
|
|||
** Emacs now uses GMP, the GNU Multiple Precision library.
|
||||
By default, if 'configure' does not find a suitable libgmp, it
|
||||
arranges for the included mini-gmp library to be built and used.
|
||||
The new 'configure' option '--without-libgmp' uses mini-gmp even if a
|
||||
The new configure option '--without-libgmp' uses mini-gmp even if a
|
||||
suitable libgmp is available.
|
||||
|
||||
---
|
||||
|
|
@ -132,7 +132,7 @@ can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2
|
|||
** Emacs now normally uses a C pointer type instead of a C integer
|
||||
type to implement Lisp_Object, which is the fundamental machine word
|
||||
type internal to the Emacs Lisp interpreter. This change aims to
|
||||
catch typos and supports '-fcheck-pointer-bounds'. The 'configure'
|
||||
catch typos and supports '-fcheck-pointer-bounds'. The configure
|
||||
option '--enable-check-lisp-object-type' is therefore no longer as
|
||||
useful and so is no longer enabled by default in developer builds,
|
||||
to reduce differences between developer and production builds.
|
||||
|
|
@ -868,7 +868,7 @@ to allow controlling how the conversion to text is done.
|
|||
|
||||
+++
|
||||
*** The prefix key 's' was changed to 'c' for slicing commands
|
||||
to avoid conflicts with image-mode key 's'. The new key 'c' still
|
||||
to avoid conflicts with 'image-mode' key 's'. The new key 'c' still
|
||||
has good mnemonics of "cut", "clip", "crop".
|
||||
|
||||
** Ido
|
||||
|
|
@ -2090,11 +2090,11 @@ variable for remote shells. It still defaults to "/bin/sh".
|
|||
|
||||
+++
|
||||
*** New values of 'shell-command-dont-erase-buffer'.
|
||||
This option can now have the value 'erase' to force to erase the
|
||||
This user option can now have the value 'erase' to force to erase the
|
||||
output buffer before execution of the command, even if the output goes
|
||||
to the current buffer. Additional values 'beg-last-out',
|
||||
'end-last-out', and 'save-point' control where to put point in the
|
||||
output buffer after inserting the shell-command output.
|
||||
output buffer after inserting the 'shell-command' output.
|
||||
|
||||
---
|
||||
*** The new functions 'shell-command-save-pos-or-erase' and
|
||||
|
|
@ -3538,9 +3538,9 @@ With a prefix argument, 'image-rotate' now rotates the image at point
|
|||
By default, the image will resize upon first display and whenever the
|
||||
window's dimensions change. Two user options 'image-auto-resize' and
|
||||
'image-auto-resize-on-window-resize' control the resizing behavior
|
||||
(including the possibility to disable auto-resizing). A new key
|
||||
prefix 's' contains the commands that can be used to fit the image to
|
||||
the window manually.
|
||||
(including the possibility to disable auto-resizing). A new prefix
|
||||
key 's' contains the commands that can be used to fit the image to the
|
||||
window manually.
|
||||
|
||||
---
|
||||
*** Some 'image-mode' variables are now buffer-local.
|
||||
|
|
|
|||
|
|
@ -68,10 +68,10 @@ with a character not a letter, digit or underscore; otherwise, enclose
|
|||
the entire variable name in braces. For instance, in `ab$cd-x',
|
||||
`$cd' is treated as an environment variable.
|
||||
|
||||
If WHEN-DEFINED is nil, references to undefined environment variables
|
||||
are replaced by the empty string; if it is a function, the function is called
|
||||
with the variable name as argument and should return the text with which
|
||||
to replace it or nil to leave it unchanged.
|
||||
If WHEN-UNDEFINED is omitted or nil, references to undefined environment
|
||||
variables are replaced by the empty string; if it is a function, the
|
||||
function is called with the variable's name as argument, and should return
|
||||
the text with which to replace it, or nil to leave it unchanged.
|
||||
If it is non-nil and not a function, references to undefined variables are
|
||||
left unchanged.
|
||||
|
||||
|
|
|
|||
|
|
@ -466,7 +466,8 @@ If this is set to nil, never try to reconnect."
|
|||
The length is specified in `erc-split-line-length'.
|
||||
|
||||
Currently this is called by `erc-send-input'."
|
||||
(let ((charset (car (erc-coding-system-for-target nil))))
|
||||
(let* ((coding (erc-coding-system-for-target nil))
|
||||
(charset (if (consp coding) (car coding) coding)))
|
||||
(with-temp-buffer
|
||||
(insert longline)
|
||||
;; The line lengths are in octets, not characters (because these
|
||||
|
|
|
|||
|
|
@ -505,16 +505,22 @@ call."
|
|||
"--"
|
||||
["Fit Frame to Image" image-mode-fit-frame :active t
|
||||
:help "Resize frame to match image"]
|
||||
["Fit Image to Window (Best Fit)" image-transform-fit-both
|
||||
:help "Resize image to match the window height and width"]
|
||||
["Fit to Window Height" image-transform-fit-to-height
|
||||
:help "Resize image to match the window height"]
|
||||
["Fit to Window Width" image-transform-fit-to-width
|
||||
:help "Resize image to match the window width"]
|
||||
["Fit to Window Height and Width" image-transform-fit-both
|
||||
:help "Resize image to match the window height and width"]
|
||||
["Zoom In" image-increase-size
|
||||
:help "Enlarge the image"]
|
||||
["Zoom Out" image-decrease-size
|
||||
:help "Shrink the image"]
|
||||
["Set Scale..." image-transform-set-scale
|
||||
:help "Resize image by specified scale factor"]
|
||||
["Rotate Image..." image-transform-set-rotation
|
||||
["Rotate Clockwise" image-rotate
|
||||
:help "Rotate the image"]
|
||||
["Set Rotation..." image-transform-set-rotation
|
||||
:help "Set rotation angle of the image"]
|
||||
["Reset Transformations" image-transform-reset
|
||||
:help "Reset all image transformations"]
|
||||
"--"
|
||||
|
|
@ -524,10 +530,10 @@ call."
|
|||
(image-dired default-directory))
|
||||
:active default-directory
|
||||
:help "Show thumbnails for all images in this directory"]
|
||||
["Next Image" image-next-file :active buffer-file-name
|
||||
:help "Move to next image in this directory"]
|
||||
["Previous Image" image-previous-file :active buffer-file-name
|
||||
:help "Move to previous image in this directory"]
|
||||
["Next Image" image-next-file :active buffer-file-name
|
||||
:help "Move to next image in this directory"]
|
||||
["Copy File Name" image-mode-copy-file-name-as-kill
|
||||
:active buffer-file-name
|
||||
:help "Copy the current file name to the kill ring"]
|
||||
|
|
@ -565,10 +571,10 @@ call."
|
|||
["Reset Animation Speed" image-reset-speed
|
||||
:active image-multi-frame
|
||||
:help "Reset the speed of this image's animation"]
|
||||
["Next Frame" image-next-frame :active image-multi-frame
|
||||
:help "Show the next frame of this image"]
|
||||
["Previous Frame" image-previous-frame :active image-multi-frame
|
||||
:help "Show the previous frame of this image"]
|
||||
["Next Frame" image-next-frame :active image-multi-frame
|
||||
:help "Show the next frame of this image"]
|
||||
["Goto Frame..." image-goto-frame :active image-multi-frame
|
||||
:help "Show a specific frame of this image"]
|
||||
))
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ this variable is set to the symbol `all-windows'."
|
|||
"Show match numbers in the search prompt.
|
||||
When both this option and `isearch-lazy-highlight' are non-nil,
|
||||
show the current match number and the total number of matches
|
||||
in the buffer (or its restriction)."
|
||||
in the buffer (or its restriction), including all hidden matches."
|
||||
:type 'boolean
|
||||
:group 'lazy-count
|
||||
:group 'isearch
|
||||
|
|
@ -3869,7 +3869,10 @@ Attempt to do the search exactly the way the pending Isearch would."
|
|||
(isearch-regexp-lax-whitespace
|
||||
isearch-lazy-highlight-regexp-lax-whitespace)
|
||||
(isearch-forward isearch-lazy-highlight-forward)
|
||||
(search-invisible nil) ; don't match invisible text
|
||||
;; Don't match invisible text unless it can be opened
|
||||
;; or when counting matches and user can visit hidden matches
|
||||
(search-invisible (or (eq search-invisible 'open)
|
||||
(and isearch-lazy-count search-invisible)))
|
||||
(retry t)
|
||||
(success nil))
|
||||
;; Use a loop like in `isearch-search'.
|
||||
|
|
|
|||
|
|
@ -87,10 +87,11 @@
|
|||
|
||||
|
||||
(defcustom tab-bar-select-tab-modifiers '()
|
||||
"List of key modifiers for selecting a tab by its index digit.
|
||||
Possible modifiers are `control', `meta', `shift', `hyper', `super' and
|
||||
`alt'."
|
||||
:type '(set :tag "Tab selection key modifiers"
|
||||
"List of modifier keys for selecting a tab by its index digit.
|
||||
Possible modifier keys are `control', `meta', `shift', `hyper', `super' and
|
||||
`alt'. To help you to select a tab by its number, you can customize
|
||||
`tab-bar-tab-hints' that will show tab numbers alongside the tab name."
|
||||
:type '(set :tag "Tab selection modifier keys"
|
||||
(const control)
|
||||
(const meta)
|
||||
(const shift)
|
||||
|
|
@ -310,7 +311,8 @@ If nil, don't show it at all."
|
|||
|
||||
(defcustom tab-bar-tab-hints nil
|
||||
"Show absolute numbers on tabs in the tab bar before the tab name.
|
||||
This helps to select the tab by its number using `tab-bar-select-tab'."
|
||||
This helps to select the tab by its number using `tab-bar-select-tab'
|
||||
and `tab-bar-select-tab-modifiers'."
|
||||
:type 'boolean
|
||||
:initialize 'custom-initialize-default
|
||||
:set (lambda (sym val)
|
||||
|
|
@ -563,9 +565,10 @@ Return its existing value or a new value."
|
|||
|
||||
(defun tab-bar-select-tab (&optional arg)
|
||||
"Switch to the tab by its absolute position ARG in the tab bar.
|
||||
When this command is bound to a numeric key (with a prefix or modifier),
|
||||
calling it without an argument will translate its bound numeric key
|
||||
to the numeric argument. ARG counts from 1."
|
||||
When this command is bound to a numeric key (with a prefix or modifier key
|
||||
using `tab-bar-select-tab-modifiers'), calling it without an argument
|
||||
will translate its bound numeric key to the numeric argument.
|
||||
ARG counts from 1."
|
||||
(interactive "P")
|
||||
(unless (integerp arg)
|
||||
(let ((key (event-basic-type last-command-event)))
|
||||
|
|
@ -664,7 +667,10 @@ to the numeric argument. ARG counts from 1."
|
|||
(message "No more recent tabs"))))
|
||||
|
||||
(defun tab-bar-switch-to-tab (name)
|
||||
"Switch to the tab by NAME."
|
||||
"Switch to the tab by NAME.
|
||||
Default values are tab names sorted by recency, so you can use \
|
||||
\\<minibuffer-local-map>\\[next-history-element]
|
||||
to get the name of the last visited tab, the second last, and so on."
|
||||
(interactive
|
||||
(let* ((recent-tabs (mapcar (lambda (tab)
|
||||
(alist-get 'name tab))
|
||||
|
|
@ -789,7 +795,7 @@ After the tab is created, the hooks in
|
|||
(pcase tab-bar-new-tab-to
|
||||
('leftmost 0)
|
||||
('rightmost (length tabs))
|
||||
('left (1- (or from-index 1)))
|
||||
('left (or from-index 1))
|
||||
('right (1+ (or from-index 0)))
|
||||
((pred functionp)
|
||||
(funcall tab-bar-new-tab-to))))))
|
||||
|
|
@ -920,7 +926,7 @@ for the last tab on a frame is determined by
|
|||
;; Select another tab before deleting the current tab
|
||||
(let ((to-index (or (if to-index (1- to-index))
|
||||
(pcase tab-bar-close-tab-select
|
||||
('left (1- current-index))
|
||||
('left (1- (if (< current-index 1) 2 current-index)))
|
||||
('right (if (> (length tabs) (1+ current-index))
|
||||
(1+ current-index)
|
||||
(1- current-index)))
|
||||
|
|
@ -1004,7 +1010,7 @@ for the last tab on a frame is determined by
|
|||
(unless (eq frame (selected-frame))
|
||||
(select-frame-set-input-focus frame))
|
||||
|
||||
(let ((tabs (tab-bar-tabs)))
|
||||
(let ((tabs (funcall tab-bar-tabs-function)))
|
||||
(setq index (max 0 (min index (length tabs))))
|
||||
(cl-pushnew tab (nthcdr index tabs))
|
||||
(when (eq index 0)
|
||||
|
|
@ -1102,6 +1108,8 @@ function `tab-bar-tab-name-function'."
|
|||
(setq tab-bar-history-omit nil)))
|
||||
|
||||
(defun tab-bar-history-back ()
|
||||
"Restore a previous window configuration used in the current tab.
|
||||
This navigates back in the history of window configurations."
|
||||
(interactive)
|
||||
(setq tab-bar-history-omit t)
|
||||
(let* ((history (pop (gethash (selected-frame) tab-bar-history-back)))
|
||||
|
|
@ -1119,6 +1127,8 @@ function `tab-bar-tab-name-function'."
|
|||
(message "No more tab back history"))))
|
||||
|
||||
(defun tab-bar-history-forward ()
|
||||
"Cancel restoration of the previous window configuration.
|
||||
This navigates forward in the history of window configurations."
|
||||
(interactive)
|
||||
(setq tab-bar-history-omit t)
|
||||
(let* ((history (pop (gethash (selected-frame) tab-bar-history-forward)))
|
||||
|
|
@ -1136,7 +1146,9 @@ function `tab-bar-tab-name-function'."
|
|||
(message "No more tab forward history"))))
|
||||
|
||||
(define-minor-mode tab-bar-history-mode
|
||||
"Toggle tab history mode for the tab bar."
|
||||
"Toggle tab history mode for the tab bar.
|
||||
Tab history mode remembers window configurations used in every tab,
|
||||
and can restore them."
|
||||
:global t :group 'tab-bar
|
||||
(if tab-bar-history-mode
|
||||
(progn
|
||||
|
|
|
|||
|
|
@ -474,8 +474,12 @@ variable `tab-line-tabs-function'."
|
|||
"Template for displaying tab line for selected window."
|
||||
(let* ((tabs (funcall tab-line-tabs-function))
|
||||
(cache-key (list tabs
|
||||
;; handle buffer renames
|
||||
(buffer-name (window-buffer))
|
||||
(window-parameter nil 'tab-line-hscroll)))
|
||||
;; handle tab-line scrolling
|
||||
(window-parameter nil 'tab-line-hscroll)
|
||||
;; for setting face 'tab-line-tab-current'
|
||||
(eq (selected-window) (old-selected-window))))
|
||||
(cache (window-parameter nil 'tab-line-cache)))
|
||||
;; Enable auto-hscroll again after it was disabled on manual scrolling.
|
||||
;; The moment to enable it is when the window-buffer was updated.
|
||||
|
|
|
|||
|
|
@ -563,8 +563,8 @@ encode_terminal_code (struct glyph *src, int src_len,
|
|||
{
|
||||
cmp = composition_table[src->u.cmp.id];
|
||||
required = cmp->glyph_len;
|
||||
required *= MAX_MULTIBYTE_LENGTH;
|
||||
}
|
||||
required *= MAX_MULTIBYTE_LENGTH;
|
||||
|
||||
if (encode_terminal_src_size - nbytes < required)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -757,7 +757,7 @@ See Bug#21722."
|
|||
;;; Tests for shell-command-dont-erase-buffer
|
||||
|
||||
(defmacro with-shell-command-dont-erase-buffer (str output-buffer-is-current &rest body)
|
||||
(declare (debug (form &body)) (indent 2))
|
||||
(declare (debug (sexp form body)) (indent 2))
|
||||
(let ((expected (make-symbol "expected"))
|
||||
(command (make-symbol "command"))
|
||||
(caller-buf (make-symbol "caller-buf"))
|
||||
|
|
@ -766,8 +766,9 @@ See Bug#21722."
|
|||
(,output-buf (if ,output-buffer-is-current ,caller-buf
|
||||
(generate-new-buffer "output-buf")))
|
||||
(emacs (expand-file-name invocation-name invocation-directory))
|
||||
(,command (format "%s -Q --batch --eval \"(princ \\\"%s\\\")\""
|
||||
emacs ,str))
|
||||
(,command
|
||||
(format "%s -Q --batch --eval %s"
|
||||
emacs (shell-quote-argument (format "(princ %S)" ,str))))
|
||||
(inhibit-message t))
|
||||
(unwind-protect
|
||||
;; Feature must work the same regardless how we specify the 2nd arg of `shell-command', ie,
|
||||
|
|
@ -787,7 +788,7 @@ See Bug#21722."
|
|||
|
||||
(ert-deftest simple-tests-shell-command-39067 ()
|
||||
"The output buffer is erased or not according to `shell-command-dont-erase-buffer'."
|
||||
(let ((str "foo\n"))
|
||||
(let ((str "foo\\n"))
|
||||
(dolist (output-current '(t nil))
|
||||
(with-shell-command-dont-erase-buffer str output-current
|
||||
(let ((expected (cond ((eq shell-command-dont-erase-buffer 'erase) str)
|
||||
|
|
@ -799,7 +800,7 @@ See Bug#21722."
|
|||
|
||||
(ert-deftest simple-tests-shell-command-dont-erase-buffer ()
|
||||
"The point is set at the expected position after execution of the command."
|
||||
(let* ((str "foo\n")
|
||||
(let* ((str "foo\\n")
|
||||
(expected-point `((beg-last-out . ,(1+ (length str)))
|
||||
(end-last-out . ,(1+ (* 2 (length str))))
|
||||
(save-point . 1))))
|
||||
|
|
|
|||
Loading…
Reference in a new issue