找不到eshell/sudo?

我用的是emacs 26.1 在 em-tramp.el.gz里面的确定义了eshell/sudo的,找不到是什么原因呢?

p.s.升到archlinux官方源里的26.1后还有两个问题,一个是进termansi-term会卡死(这个应该是26的bug,27没有),还有一个小概率会发生的窗口大小调整失败。这两个错误25.x的时候都没有,怎么定位呢?

顺便,所有的eshell/*

Possible completions are:
eshell/. 	eshell/addpath 	eshell/agrep 	eshell/alias
eshell/basename 	eshell/cat 	eshell/cd 	eshell/clear
eshell/clear-scrollback 	eshell/cp 	eshell/date 	eshell/define
eshell/diff 	eshell/dirname 	eshell/dirs 	eshell/du
eshell/echo 	eshell/egrep 	eshell/env 	eshell/eshell-debug
eshell/exit 	eshell/export 	eshell/fgrep 	eshell/glimpse
eshell/grep 	eshell/history 	eshell/info 	eshell/jobs
eshell/kill 	eshell/listify 	eshell/ln 	eshell/locate
eshell/ls 	eshell/make 	eshell/man 	eshell/mkdir
eshell/mv 	eshell/occur 	eshell/popd 	eshell/printnl
eshell/pushd 	eshell/pwd 	eshell/rm 	eshell/rmdir
eshell/setq 	eshell/source 	eshell/time 	eshell/umask
eshell/unset 	eshell/wait 	eshell/which 	eshell/whoami
(require 'em-tramp)

这样的确可以,不过sudo表现很糟糕:

首先按回车后显示是这样的:

~ $ sudo ls
~ $ [sudo] mark 的密码:

其次,输密码是明文,要用send-invisible

最后,ls输出完成后sudo没有返回,我只好手动C-c C-c。。。

喷了,我是不是哪天手动构建一个emacs试一下有没有这些问题。。。

不用配置直接用 sudo 完全沒有你提到的问題,只能说用 eshell/sudo 多此一舉。

呃,我最开始是想要eshell记住密码,不过只找到tramp怎么记住密码。。。

sudo 自己就能一定时间內免密,用 eshell​ 記一不安全二来多此一舉

但是我在eshell下用/bin/sudo,不但没有免密,密码也是明文的,不像你图上那样。。。

你確定 eshell/sudo 沒有定义嗎?我在 Linux 上和 NetBSD 上用 eshell 也都是這樣。

如果没有任何相关设置的话,是的,我最开始是找的这个答案,不过我发现which eshell/sudo找不到,而且介绍eshell手册里,sudoem-unix.el定义的,所以来问了。

那个回答下面有评论。

Eshell info 那个估计过期了。

如果是指的prefer那两个和password那两个的话,没用,下次依然叫你明文输密码。。。

所以你是零配置还要输明文密碼?

所有eshell相关的配置是:

(defun set-no-process-query-on-exit ()
  (let ((proc (get-buffer-process (current-buffer))))
    (when (processp proc)
      (set-process-query-on-exit-flag proc nil))))

(add-hook 'term-exec-hook 'set-no-process-query-on-exit)

(add-hook 'eshell-mode-hook (lambda () (company-mode -1)))

當然不是啊,评论的意思是根本不用 eshell/sudo,只要设 (setq password-cache t) (setq password-cache-expiry 3600) Emacs 就会在一小時內记 sudo 密碼了。(require 'em-tramp)(setq eshell-prefer-lisp-functions t) 什麼的都不要做。

我目前就是这样的,前一个默认是开启的,后一个默认是16秒,我在customize-variable里面把它设成的3600。 在之前我也像他那样两条语句设置过,也不行。

又试了下,(require 'em-tramp) 之后再多加个 alias sudo 'eshell/sudo $*' 就能工作了。

是哎,现在想来我就是漏了(require 'em-tramp)这一步。。。