Merge from origin/emacs-29

b8a8106fa1 ; Add missing space in the manual
5b906b6215 Fix defcustom :type of ielm-indirect-setup-hook
82af484ec1 ; Two updates of etc/TODO
0ab2823f51 ; Describe in PROBLEMS 2 problems with keyboard input
4e7112ab21 ; Fix inaccuracy in ELisp reference manual
34bbb6c8d2 Document NonGNU ELPA in FAQ
2af092741e Fix remote path setting in Eshell
4613575d97 ; * lisp/completion.el (dynamic-completion-mode): Fix las...
2f0f33fbf9 Update docs for (co-)maintainer changes
b068fcd4a3 * doc/lispref/strings.texi (Text Comparison): Fix typo (b...
2e2a5f8118 Adapt Tramp manual
d32f00a35b Improve docstring of message-sendmail-envelope-from
1a668cda8b Unbreak builds with CHECK_STRUCTS.
77b6e9bb17 Improve documentation of EPG
d3382f9471 ; * lisp/completion.el (dynamic-completion-mode): Doc fix.
1458daf316 Avoid crashes on macOS with context menus

# Conflicts:
#	src/pdumper.c
This commit is contained in:
Eli Zaretskii 2023-09-09 04:33:47 -04:00
commit 9d27b95b26
18 changed files with 208 additions and 111 deletions

View file

@ -5,6 +5,11 @@ what parts of the Emacs distribution. The areas can be defined
"arbitrarily", but should provide fairly well-defined boundaries so
that there are not too many ambiguities.
The (co-)maintainers of Emacs are:
Eli Zaretskii <eliz@gnu.org>
Stefan Kangas <stefankangas@gmail.com>
==============================================================================
1. Areas that someone wants to be maintaining (i.e. has a particularly
keen interest in). There's no need to list files where you are

View file

@ -205,7 +205,11 @@ General steps (for each step, check for possible errors):
you need to repeat from step 4 onwards. (You can commit the files
from step 2 and 3 earlier to reduce the chance of this.)
6. ./make-dist --snapshot --no-compress
6. If there has been a change in who is the Emacs maintainer since
the last release, update doc/misc/ack.texi and admin/MAINTAINERS
to reflect this. You can commit this separately.
7. ./make-dist --snapshot --no-compress
Check the contents of the new tar with admin/diff-tar-files
against the previous release (if this is the first pretest) or the
@ -234,7 +238,7 @@ General steps (for each step, check for possible errors):
The output of this command might be easier to compare to the
tarball than the one you get from find.
7. tar xf emacs-NEW.tar; cd emacs-NEW
8. tar xf emacs-NEW.tar; cd emacs-NEW
./configure --prefix=/tmp/emacs && make check && make install
Use 'script' or M-x compile to save the compilation log in
@ -244,7 +248,7 @@ General steps (for each step, check for possible errors):
M-x ediff. Especially check that Info files aren't built, and that
no autotools (autoconf etc) run.
8. You can now tag the release/pretest and push it together with the
9. You can now tag the release/pretest and push it together with the
last commit:
cd EMACS_ROOT_DIR && git tag -a TAG -m "Emacs TAG"
@ -270,7 +274,7 @@ General steps (for each step, check for possible errors):
git tag -a emacs-28.1-rc1 -m "Emacs 28.1 RC1"
git tag -a emacs-28.1 -m "Emacs 28.1 release"
9. Decide what compression schemes to offer.
10. Decide what compression schemes to offer.
For a release, at least gz and xz:
gzip --best --no-name -c emacs-NEW.tar > emacs-NEW.tar.gz
xz -c emacs-NEW.tar > emacs-NEW.tar.xz
@ -314,14 +318,14 @@ General steps (for each step, check for possible errors):
For a pretest, place the files in /incoming/alpha instead, so that
they appear on https://alpha.gnu.org/.
10. After five minutes, verify that the files are visible at
11. After five minutes, verify that the files are visible at
https://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, or
https://ftp.gnu.org/gnu/emacs/ for a release.
Download them and check the signatures and SHA1/SHA256 checksums.
Check they build (./configure --with-native-compilation).
11. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
12. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
For a pretest, also bcc: platform-testers@gnu.org.
For a release, also bcc: info-gnu@gnu.org.
(The reason for using bcc: is to make it less likely that people
@ -345,9 +349,9 @@ General steps (for each step, check for possible errors):
(Use e.g. `M-x mml-secure-message-sign' in `message-mode' to sign
an email.)
12. After a release, update the Emacs pages as described below.
13. After a release, update the Emacs pages as described below.
13. After a release, bump the Emacs version on the release branch.
14. After a release, bump the Emacs version on the release branch.
There is no need to bump the version after a pretest; the version
is bumped before the next pretest or release instead.

View file

@ -525,7 +525,7 @@ browser to display a URL.
@item
Lars Magne Ingebrigtsen was the Emacs (co-)maintainer from Emacs 27.2
onwards. He did a major redesign of the Gnus news-reader and wrote
to 29.1. He did a major redesign of the Gnus news-reader and wrote
many of its parts. Several of these are now general components of
Emacs, including: @file{dns.el} for Domain Name Service lookups;
@file{format-spec.el} for formatting arbitrary format strings;
@ -590,6 +590,9 @@ control system.
Tomoji Kagatani implemented @file{smtpmail.el}, used for sending out
mail with SMTP.
@item
Stefan Kangas was the Emacs (co-)maintainer from 29.2 onwards.
@item
Ivan Kanis wrote @file{vc-hg.el}, support for the Mercurial version
control system.
@ -1379,9 +1382,9 @@ Rodney Whitby and Reto Zimmermann wrote @file{vhdl-mode.el}, a major
mode for editing VHDL source code.
@item
John Wiegley was the Emacs maintainer from Emacs 25 onwards. He wrote
@file{align.el}, a set of commands for aligning text according to
regular-expression based rules; @file{isearchb.el} for fast buffer
John Wiegley was the Emacs (co-)maintainer from Emacs 25 to 29.1. He
wrote @file{align.el}, a set of commands for aligning text according
to regular-expression based rules; @file{isearchb.el} for fast buffer
switching; @file{timeclock.el}, a package for keeping track of time
spent on projects; the Bahá'í calendar support; @file{pcomplete.el}, a
programmable completion facility; @file{remember.el}, a mode for

View file

@ -1116,7 +1116,7 @@ functions provided by the @file{.elc} file.
@end defvar
@cindex trampolines, in native compilation
Setting the value of @code{native-comp-jit-compilation} to@code{nil}
Setting the value of @code{native-comp-jit-compilation} to @code{nil}
disables JIT native compilation. However, even when JIT native
compilation is disabled, Emacs might still need to start asynchronous
native compilation subprocesses to produce @dfn{trampolines}. To

View file

@ -754,7 +754,7 @@ ignores case differences.
@defun string-search needle haystack &optional start-pos
Return the position of the first instance of @var{needle} in
@var{haystack}, both of which are strings. If @var{start-pos} is
non-@code{nil}, start searching from that position in @var{needle}.
non-@code{nil}, start searching from that position in @var{haystack}.
Return @code{nil} if no match was found.
This function only considers the characters in the strings when doing
the comparison; text properties are ignored. Matching is always

View file

@ -2808,22 +2808,21 @@ indentation in the text.
@deffn Command back-to-indentation
@comment !!SourceFile simple.el
This command moves point to the first non-whitespace character in the
current line (which is the line in which point is located). It returns
@code{nil}.
current line (which is the line in which point is located).
@end deffn
@deffn Command backward-to-indentation &optional arg
@comment !!SourceFile simple.el
This command moves point backward @var{arg} lines and then to the
first nonblank character on that line. It returns @code{nil}.
If @var{arg} is omitted or @code{nil}, it defaults to 1.
first nonblank character on that line. If @var{arg} is omitted or
@code{nil}, it defaults to 1.
@end deffn
@deffn Command forward-to-indentation &optional arg
@comment !!SourceFile simple.el
This command moves point forward @var{arg} lines and then to the first
nonblank character on that line. It returns @code{nil}.
If @var{arg} is omitted or @code{nil}, it defaults to 1.
nonblank character on that line. If @var{arg} is omitted or
@code{nil}, it defaults to 1.
@end deffn
@node Case Changes

View file

@ -3839,13 +3839,28 @@ description of what they do and how they should be used.
The easiest way to add more features to your Emacs is to use the
command @kbd{M-x list-packages}. This contacts the
@uref{https://elpa.gnu.org, GNU ELPA} (``Emacs Lisp Package Archive'')
server and fetches the list of additional packages that it offers.
These are GNU packages that are available for use with Emacs, but are
distributed separately from Emacs itself, for reasons of space, etc.
You can browse the resulting @file{*Packages*} buffer to see what is
available, and then Emacs can automatically download and install the
packages that you select. @xref{Packages,,, emacs, The GNU Emacs Manual}.
@uref{https://elpa.gnu.org, GNU ELPA} and
@uref{https://elpa.nongnu.org, NonGNU ELPA} (``Emacs Lisp Package
Archive'') servers and fetches the list of additional packages that
they offer. You can browse the resulting @file{*Packages*} buffer to
see what is available, and then Emacs can automatically download and
install the packages that you select. @xref{Packages,,, emacs, The
GNU Emacs Manual}.
GNU ELPA contains GNU packages that are available for use with Emacs,
but are distributed separately from Emacs itself, for reasons of
space, etc. NonGNU ELPA contains a selection of third-party packages
that can not be included in GNU ELPA because their copyright has not
yet been assigned to the Free Software Foundation.@footnote{For more
information, see @uref{https://www.gnu.org/licenses/why-assign.html,
Why the FSF Gets Copyright Assignments from Contributors}.}
The @uref{https://lists.gnu.org/mailman/listinfo/gnu-emacs-sources,
GNU Emacs sources mailing list} is automatically sent an email when a
new version of a GNU ELPA or NonGNU ELPA package is
released.@footnote{It used to be an official place where people could
post or announce their extensions to Emacs. That is still allowed,
but exceedingly rare these days.}
There are other Emacs Lisp package archives. To use additional
archives, you can customize the @code{package-archives} variable.
@ -3855,23 +3870,19 @@ correctness and safety of the code, or they may give only cursory
attention.
Also, packages hosted on these other archives may encourage or require
you to install and use other nonfree programs. Unless you can verify
you to install and use nonfree programs. Unless you can verify
that a package is free software, and that it functions without
installing any nonfree software, we recommend for your freedom's sake
that you stay away from it.
The @uref{https://lists.gnu.org/mailman/listinfo/gnu-emacs-sources,
GNU Emacs sources mailing list} is an official place where people can
post or announce their extensions to Emacs.
The @uref{https://emacswiki.org, Emacs Wiki} contains pointers to some
additional extensions. @uref{https://wikemacs.org, WikEmacs} is an
alternative wiki for Emacs.
It is impossible for us to list here all the sites that offer Emacs
Lisp packages. If you are interested in a specific feature, then
after checking Emacs itself and GNU ELPA, a web search is often the
best way to find results.
after checking Emacs itself, GNU ELPA, and NonGNU ELPA, a web search
is often the best way to find results.
@node Spell-checkers
@section Spell-checkers

View file

@ -5263,30 +5263,11 @@ How to get notified after @value{tramp} completes file transfers?
Make Emacs beep after reading from or writing to the remote host with
the following code in @file{~/.emacs}.
@vindex tramp-handle-write-region-hook
@vindex tramp-handle-file-local-copy-hook
@lisp
@group
(defadvice tramp-handle-write-region
(after tramp-write-beep-advice activate)
"Make @value{tramp} beep after writing a file."
(interactive)
(beep))
@end group
@group
(defadvice tramp-handle-do-copy-or-rename-file
(after tramp-copy-beep-advice activate)
"Make @value{tramp} beep after copying a file."
(interactive)
(beep))
@end group
@group
(defadvice tramp-handle-insert-file-contents
(after tramp-insert-beep-advice activate)
"Make @value{tramp} beep after inserting a file."
(interactive)
(beep))
@end group
(add-hook 'tramp-handle-write-region-hook 'beep)
(add-hook 'tramp-handle-file-local-copy-hook 'beep)
@end lisp
@ -5539,9 +5520,8 @@ minibuffer:
@end group
@group
(defadvice minibuffer-complete
(before my-minibuffer-complete activate)
(expand-abbrev))
(advice-add 'minibuffer-complete
:before 'expand-abbrev)
@end group
@end lisp
@ -5738,6 +5718,8 @@ If you find the cleanup disturbing, because the file names in
two forms in your @file{~/.emacs} after loading the @code{tramp} and
@code{recentf} packages:
@vindex tramp-cleanup-connection-hook
@vindex tramp-cleanup-all-connections-hook
@lisp
@group
(remove-hook

View file

@ -441,6 +441,17 @@ environment.
** Keyboard problems
*** PGTK build of Emacs running on Wayland doesn't recognize Hyper modifier
If you arrange for the Wayland compositor to send the Hyper key
modifier (e.g., via XKB customizations), the Hyper modifier will still
not be reported to Emacs.
The reason is that GDK 3.x doesn't recognize the Hyper key modifier.
Since GDK 3.x is no longer developed, this bug in GDK will probably
never be solved. And the Emacs PGTK build cannot yet support GTK4,
where this problem is reportedly solved.
*** Unable to enter the M-| key on some German keyboards.
Some users have reported that M-| suffers from "keyboard ghosting".
This can't be fixed by Emacs, as the keypress never gets passed to it
@ -523,6 +534,15 @@ is to downgrade to a version of GnuPG older than 2.4.1 (or, in the
future, upgrade to a newer version which solves the problem, when such
a fixed version becomes available).
*** Emacs running on WSL receives stray characters as input.
For example, you could see Emacs inserting 'z' characters even though
nothing is typed on the keyboard, and even if you unplug the keyboard.
The reason is a bug in the WSL X server's handling of key-press and
key-repeat events. A workaround is to use the Cygwin or native
MS-Windows build of Emacs instead.
** Problems with hostname resolution
*** Emacs does not know your host's fully-qualified domain name.

View file

@ -419,41 +419,6 @@ modify them. Also, when properties are looked up during redisplay, we
generally can't run Elisp code, whereas we generally can do that when
properties are added.
*** Move overlays to intervals.c
Currently overlays are implemented as (two) sorted singly linked lists (one
for overlays_before some position and one for overlay_after that
position, for some quirky definition of "before" and "after").
The function 'overlay-recenter' changes the position used for the split
(and is called internally in various situations).
Each overlay is itself implemented with two markers (which keep track of
the overlay-start and overlay-end). Markers are implemented as
a non-sorted singly linked list of markers. So every text
insertion/deletion requires O(N) time, where N is the number of markers
since we have to go down that list to update those markers that are
affected by the modification.
You can start in src/buffer.[ch], maybe grepping for overlays_before for
a starting point.
Text-properties, OTOH, are implemented with a (mostly) balanced binary
tree. This is implemented in src/intervals.[ch].
So we'd like to change overlays so that they don't use markers (and we
don't keep them in two sorted singly-linked lists) any more. Instead,
we'll store them inside the balanced binary tree used for
text-properties. I think we can use the "augmented tree" approach
described in https://en.wikipedia.org/wiki/Interval_tree.
To ease up debugging during development, I'd guess the implementation
would first add the new stuff, keeping the old stuff (i.e. add to
Lisp_Overlay whichever fields are needed for the new code, while keeping
the old ones, add needed overlay fields to the intervals tree, but keep
the old fields, the overlays_before etc...). This way, you can add
consistency checks that make sure the new code computes the same results
as the old code. And once that works well, we can remove the old code
and old fields.
** Implement Unicode-compliant display of "default-ignorable" characters
See the "Characters Ignored for Display" section of paragraph 5.21 in
the Unicode Standard for the details.
@ -473,6 +438,20 @@ wrapping of long lines under 'visual-line-mode'. The algorithm for
selecting the wrap point may also need be changed to break at the soft
hyphen.
** Support external rules for indentation
This should teach Emacs to read indentation rules from a file and use
them in preference to the user customizations and the built-in
defaults. An example of such rule files is '.clang-format', see
https://clang.llvm.org/docs/ClangFormatStyleOptions.html
As a minimum, there should be a command, a variant of indent-region,
which could be told to use the rules from such a file, and should then
reformat the region of source code according to the rules.
The next step is to use these rules during editing of files residing
in a directory that has such an indentation-rules spec in it.
** FFI (foreign function interface)
See eg https://lists.gnu.org/r/emacs-devel/2013-10/msg00246.html

View file

@ -2133,7 +2133,25 @@ TYPE is the type of the wrapper to be added. Can be :before or :under."
;;;###autoload
(define-minor-mode dynamic-completion-mode
"Toggle dynamic word-completion on or off."
"Toggle dynamic word-completion on or off.
When this minor mode is turned on, typing \\`M-RET' or \\`C-RET'
invokes the command `complete', which completes the word or
symbol at point using the record of words/symbols you used
previously and the previously-inserted completions. Typing
a word or moving point across it constitutes \"using\" the
word.
By default, the database of all the dynamic completions that
were inserted by \\[complete] is saved on the file specified
by `save-completions-file-name' when you exit Emacs, and will
be loaded from that file when this mode is enabled in a future
Emacs session.
The following important options control the various aspects of
this mode: `enable-completion', `save-completions-flag', and
`save-completions-retention-time'. Few other less important
options can be found in the `completion' group."
:global t
;; This is always good, not specific to dynamic-completion-mode.
(define-key function-key-map [C-return] [?\C-\r])

View file

@ -266,11 +266,11 @@ car is a function and cdr is a callback data.
The function gets three arguments: the context, the key-id in
question, and the callback data (if any).
The callback may not be called if you use GnuPG 2.x, which relies
on the external program called `gpg-agent' for passphrase query.
If you really want to intercept passphrase query, consider
installing GnuPG 1.x _along with_ GnuPG 2.x, which does passphrase
query by itself and Emacs can intercept them."
The callback may not be called if you use GnuPG 2.0, which relies
only on external programs for passphrase query and does not
provide loopback pinentry. For details see Info node `(epa)
GnuPG version compatibility' and Info node `(epa) GnuPG
Pinentry'."
;; (declare (obsolete setf "25.1"))
(setf (epg-context-passphrase-callback context)
(if (functionp passphrase-callback)
@ -2018,9 +2018,7 @@ PARAMETERS is a string which tells how to create the key."
(defun epg-start-edit-key (context key edit-callback handback)
"Initiate an edit operation on KEY.
EDIT-CALLBACK is called from process filter and takes four
arguments: the context, a status, an argument string, and the
handback argument.
See `epg-edit-key' for a description of the arguments.
If you use this function, you will need to wait for the completion of
`epg-gpg-program' by using `epg-wait-for-completion' and call
@ -2035,7 +2033,47 @@ If you are unsure, use synchronous version of this function
(car (epg-key-sub-key-list key))))))
(defun epg-edit-key (context key edit-callback handback)
"Edit KEY in the keyring."
"Edit KEY in the keyring.
This function and function `epg-start-edit-key' use the
line-based protocol enabled by \"gpg\" parameter \"--status-fd\"
to edit KEY. For each GnuPG status line, these functions or,
more precisely, the EPG process filter calls EDIT-CALLBACK with
four arguments: argument CONTEXT, the GnuPG status keyword, the
GnuPG status argument string, and argument HANDBACK.
The following example uses a simple state machine to trust the
first subkey of key KEY ultimately:
(let ((state 0))
(epg-edit-key
context key
(lambda (context status string _handback)
(pcase (vector state status string)
(\\=`[0 \"KEY_CONSIDERED\" ,_])
(\\='[1 \"GET_LINE\" \"keyedit.prompt\"]
(process-send-string (epg-context-process context) \"1\\n\"))
(\\='[2 \"GOT_IT\" \"\"])
(\\='[3 \"GET_LINE\" \"keyedit.prompt\"]
(process-send-string (epg-context-process context) \"trust\\n\"))
(\\='[4 \"GOT_IT\" \"\"])
(\\='[5 \"GET_LINE\" \"edit_ownertrust.value\"]
(process-send-string (epg-context-process context) \"5\\n\"))
(\\='[6 \"GOT_IT\" \"\"])
(\\='[7 \"GET_BOOL\" \"edit_ownertrust.set_ultimate.okay\"]
(process-send-string (epg-context-process context) \"yes\\n\"))
(\\='[8 \"GOT_IT\" \"\"])
(\\='[9 \"GET_LINE\" \"keyedit.prompt\"]
(process-send-string (epg-context-process context) \"quit\\n\"))
(\\='[10 \"GOT_IT\" \"\"])
(_
(error \"Key edit protocol error in state %d\" state)))
(setq state (1+ state)))
nil))
This is a slightly simplified example: Ideally, it should have
double-checked the fingerprint argument to the \"KEY_CONSIDERED\"
status keyword instead of ignoring it."
(unwind-protect
(progn
(epg-start-edit-key context key edit-callback handback)

View file

@ -266,6 +266,8 @@ nil, write to `eshell-output-handle'."
"A marker that tracks the beginning of output of the last subprocess.
Used only on systems which do not support async subprocesses.")
(defvar tramp-remote-path)
(defun eshell-gather-process-output (command args)
"Gather the output from COMMAND + ARGS."
(require 'esh-var)
@ -273,7 +275,9 @@ Used only on systems which do not support async subprocesses.")
(unless (and (file-executable-p command)
(file-regular-p (file-truename command)))
(error "%s: not an executable file" command))
(let* ((delete-exited-processes
(let* ((real-path (getenv "PATH"))
(tramp-remote-path (bound-and-true-p tramp-remote-path))
(delete-exited-processes
(if eshell-current-subjob-p
eshell-delete-exited-processes
delete-exited-processes))
@ -281,6 +285,16 @@ Used only on systems which do not support async subprocesses.")
(coding-system-for-read coding-system-for-read)
(coding-system-for-write coding-system-for-write)
proc stderr-proc decoding encoding changed)
;; HACK: We want to supply our subprocess with the all the
;; environment variables we've set in Eshell. However, supplying
;; a remote PATH this way can break Tramp, which needs the *local*
;; PATH for calling "ssh", etc. Instead, set the local path in
;; our `process-environment' and pass the remote PATH via
;; `tramp-remote-path'. (If we handle this some better way in the
;; future, remember to remove `tramp-remote-path' above, too.)
(when (file-remote-p default-directory)
(push (concat "PATH=" real-path) process-environment)
(setq tramp-remote-path (eshell-get-path)))
;; MS-Windows needs special setting of encoding/decoding, because
;; (a) non-ASCII text in command-line arguments needs to be
;; encoded in the system's codepage; and (b) because many Windows

View file

@ -911,8 +911,10 @@ installations, which are rare these days."
(defcustom message-sendmail-envelope-from
'obey-mail-envelope-from
"Envelope-from when sending mail with sendmail.
If this is nil, use `user-mail-address'. If it is the symbol
`header', use the From: header of the message."
If this is `obey-mail-envelope-from', then use
`mail-envelope-from' to decide what to do. If it is nil, use
`user-mail-address'. If it is the symbol `header', use the
\"From:\" header of the message."
:version "27.1"
:type '(choice (string :tag "From name")
(const :tag "Use From: header from message" header)

View file

@ -491,8 +491,7 @@ addition to `comint-indirect-setup-hook', run this hook with the
indirect buffer as the current buffer after its setup is done.
This can be used to further customize fontification and other
behavior of the indirect buffer."
:type 'boolean
:safe 'booleanp
:type 'hook
:version "29.1")
(defun ielm-indirect-setup-hook ()

View file

@ -477,6 +477,14 @@ - (instancetype)initWithTitle: (NSString *)title
call to ns_update_menubar. */
- (void)menuNeedsUpdate: (NSMenu *)menu
{
/* The context menu is built and then displayed, as opposed to the
top-menu, which is partially built and then updated and filled in
when it's time to display it. Therefore, we don't call
ns_update_menubar if a context menu is active. */
if (context_menu_value != 0)
return;
#ifdef NS_IMPL_GNUSTEP
static int inside = 0;
#endif

View file

@ -2747,7 +2747,7 @@ dump_hash_table (struct dump_context *ctx,
static dump_off
dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer)
{
#if CHECK_STRUCTS && !defined HASH_buffer_6C25F9C3BC
#if CHECK_STRUCTS && !defined HASH_buffer_9E96D7C4B4
# error "buffer changed. See CHECK_STRUCTS comment in config.h."
#endif
struct buffer munged_buffer = *in_buffer;

View file

@ -313,4 +313,19 @@ write the exit status to the pipe. See bug#54136."
output-start (eshell-end-of-output))
"")))))
;; Remote processes
(ert-deftest esh-var-test/remote/remote-path ()
"Ensure that setting the remote PATH in Eshell doesn't interfere with Tramp.
See bug#65551."
(skip-unless (and (eshell-tests-remote-accessible-p)
(executable-find "echo")))
(let ((default-directory ert-remote-temporary-file-directory))
(with-temp-eshell
(eshell-insert-command "set PATH ''")
(eshell-match-command-output
(format "%s hello" (executable-find "echo" t))
"\\`hello\n"))))
;;; esh-proc-tests.el ends here