2

对于 Emacs,如何将view-lossage收集到的内容存储到外部文件中?理想情况下,我希望将这些击键数据以增量方式和自动方式存储到外部日志文件中,这意味着在启动 Emacs 时默认这样做。

4

1 回答 1

7

至少在 Emacs 24 中(我现在无法检查以前的版本),view-lossage状态的文档字符串:

显示最后 300 次输入击键。

要将所有输入记录在文件中,请使用“open-dribble-file”。

C-hf open-dribble-file RET告诉我:

open-dribble-file 是“C 源代码”中的交互式内置函数。

(打开运球文件文件)

开始将所有键盘字符写入名为 FILE 的 dribble 文件。如果 FILE 为 nil,则关闭任何打开的 dribble 文件。当 Emacs 退出时,该文件将被关闭。

因此,只需将以下内容添加到您的 .emacs 文件中:

(open-dribble-file (expand-file-name "~/.emacs.d/lossage.txt"))

如果文件已经存在,这会在实验上破坏文件,因此您需要处理它。

这是一种方法。make-temp-name它通过使用为 dribble 文件生成半随机文件名来处理多个 Emacs 会话,然后在 Emacs 存在时将其内容附加到主丢失日志文件中。(如果 Emacs 崩溃,它会留下临时文件供您手动处理。)

(defmacro my-persistent-dribble-file (file)
  "Append the dribble-file for this session to persistent lossage log FILE."
  `(let* ((persistent-file (expand-file-name ,file))
          (temporary-file (make-temp-name (concat persistent-file "-")))
          (persistent-arg (shell-quote-argument persistent-file))
          (temporary-arg (shell-quote-argument temporary-file))
          (append-dribble-command (format
                                   "cat %s >>%s && rm %s"
                                   temporary-arg persistent-arg temporary-arg)))
     (open-dribble-file temporary-file)
     (eval `(add-hook 'kill-emacs-hook
                      (lambda () (shell-command ,append-dribble-command))))))

(my-persistent-dribble-file "~/.emacs.d/lossage")
于 2012-03-18T20:17:47.630 回答