如何在emacs中自动关闭自动加密模式缓冲区?

Posted

技术标签:

【中文标题】如何在emacs中自动关闭自动加密模式缓冲区?【英文标题】:How to auto close an auto encryption mode buffer in emacs? 【发布时间】:2013-03-06 18:24:01 【问题描述】:

我将一些内容保存在文件“XXX.gpg”中,我使用 emacs 自动加密模式读取和编辑该文件。

在某些情况下,我忘记关闭缓冲区很长一段时间,这是一种风险。

我想让缓冲区在一段时间(不活动)后自动保存和关闭。

【问题讨论】:

【参考方案1】:

您可以使用run-with-idle-timer 来构造一个完全符合您要求的函数。

【讨论】:

jogeba:如果您不打算将其标记为答案,我是否可以建议您至少对已证明对您有帮助的答案进行投票。【参考方案2】:

这是我用的:

(defun dwim-kill-gpg-buffers ()
  (interactive)
  (let ((buffers-killed 0))
    (dolist (buffer (buffer-list))
      (with-current-buffer buffer
        (when (string-match ".*\.gpg$" (buffer-name buffer))
          (let ((current-time (second (current-time)))
                (last-displayed-time (second buffer-display-time)))
            (when (> (- current-time last-displayed-time)
                     60)
              (message "Auto killing .gpg buffer '%s'" (buffer-name buffer))
              (when (buffer-modified-p buffer)
                (save-buffer))
              (kill-buffer buffer)
              (incf buffers-killed))))))
    (unless (zerop buffers-killed)
      (message "%s .gpg buffers have been autosaved and killed" buffers-killed))))

(run-with-idle-timer 60 t 'dwim-kill-gpg-buffers)

它尽量不关闭最近显示的缓冲区,因此只要有视图切换活动,就会延迟终止缓冲区。

【讨论】:

【参考方案3】:

现在我在 ~/.emacs 中使用它:

(run-with-idle-timer 60 t (lambda ()
                         (let ((victim (get-buffer "XXX.gpg")))
                           (when victim (message "Killing buffer %s" (buffer-name victim)
                                                 (kill-buffer victim))))))

【讨论】:

以上是关于如何在emacs中自动关闭自动加密模式缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

在 Emacs 中,如何根据缓冲区名称自动启用次要模式?

Emacs 大纲模式在 grep 上自动扩展

如何在 Emacs 中禁用自动填充模式?

如何通过鼠标在“kill-emacs”之前自动调用函数?

理解 Emacs 完成模式选择

当磁盘上的文件发生更改时,如何让 Emacs 自动刷新所有缓冲区?