For Emacs, how to store what view-lossage collects into an external file?

江枫思渺然 提交于 2019-11-30 20:54:18

问题


For Emacs, how do I store what view-lossage collects into an external file? Ideally I'd like to store these keystroke data into an external log file incrementally and automatically, meaning it is done so by default when Emacs is started.


回答1:


In Emacs 24 at least (I can't check a prior version right now), the docstring for view-lossage states:

Display last 300 input keystrokes.

To record all your input on a file, use `open-dribble-file'.

And C-hf open-dribble-file RET tells me:

open-dribble-file is an interactive built-in function in `C source code'.

(open-dribble-file FILE)

Start writing all keyboard characters to a dribble file called FILE. If FILE is nil, close any open dribble file. The file will be closed when Emacs exits.

So simply add something like the following to your .emacs file:

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

Experimentally this clobbers the file if it already exists, so you'll need to deal with that.

Here's one approach. It accounts for multiple Emacs sessions by using make-temp-name to generate a semi-random filename for the dribble file, and then appends the contents of that to a primary lossage log file when Emacs exists. (If Emacs crashes, it would leave behind the temp file for you to deal with manually.)

(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")


来源:https://stackoverflow.com/questions/9761401/for-emacs-how-to-store-what-view-lossage-collects-into-an-external-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!