我用的是emacs 26.1 在 em-tramp.el.gz里面的确定义了eshell/sudo
的,找不到是什么原因呢?
p.s.升到archlinux官方源里的26.1后还有两个问题,一个是进term
或ansi-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
这样的确可以,不过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
的手册里,sudo
是em-unix.el
定义的,所以来问了。
如果是指的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)
这一步。。。