首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tramp-模式不与sudo外壳断开吗?

Tramp-模式不与sudo外壳断开吗?
EN

Stack Overflow用户
提问于 2015-05-22 17:10:23
回答 1查看 384关注 0票数 3

我使用emacs的tramp-模式来用语法/sudo::<filepath>编辑根拥有的文件。

这非常好,但我似乎无法在不通过htop或其他流程管理器手动终止子进程的情况下终止sudo会话。tramp-cleanup-*-connection命令不会结束会话。

我怎样才能让emacs结束sudo会议?理想情况下,我希望一旦所有sudo打开的缓冲区都被杀死,它就会结束会话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-22 18:17:51

我不知道为什么要说“tramp-cleanup-*-connection命令不会结束会话”;我的快速测试表明,tramp-cleanup-this-connection迫使Tramp在下次尝试执行某些操作时重新连接。(它单独缓存密码,因此不一定得到密码提示;但是您应该在*Messages*缓冲区中看到“打开连接”。)

下面是一个可以添加到kill-buffer-hook中的函数的快速尝试。虽然不太雅致,但似乎很管用。

代码语言:javascript
复制
(defun tramp-cleanup-sudo-maybe ()
  "If the current buffer is a Tramp \"/sudo:\" buffer, cleanup its connection
if there are no other sudo buffers remaining after killing this one."
  (save-match-data
    (let ((name (buffer-file-name))
          prefix buffers)
      (when (and name (string-match "\\`\\(/sudo:[^:]*:\\)" name))
        (setq prefix (match-string 1 name))
        (mapc (lambda (buf)
                (when (string-prefix-p prefix (or (buffer-file-name buf) ""))
                  (setq buffers (cons buf buffers)) ))
              (buffer-list) )
        (when (< (length buffers) 2)
          (tramp-cleanup-this-connection) ) ) )))

如果你有很多缓冲,这可能会变慢。如果您觉得需要优化它,我想您可以在您自己的alist中添加类似于每个遥控器的连接计数之类的内容(或者可能添加到一些现有的Tramp连接结构中)。或者实际上只需将缓冲区列表的长度(对于我们将要杀死的缓冲区来说是减1)存储在全局中,然后在下一次调用时,简单地减少它--只有当它达到零时,才再次扫描所有缓冲区并重新初始化变量;如果它确实是带有此前缀的最后一个sudo缓冲区,则进行清理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30402346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档