Для Emacs, как сохранить то, что view-lossage собирает во внешний файл? - PullRequest
1 голос
/ 18 марта 2012

Для Emacs, как мне сохранить то, что view-lossage собирает во внешний файл?В идеале я хотел бы сохранять эти данные о нажатии клавиш во внешнем файле журнала постепенно и автоматически, то есть по умолчанию это происходит при запуске Emacs.

1 Ответ

6 голосов
/ 19 марта 2012

По крайней мере в Emacs 24 (сейчас я не могу проверить предыдущую версию) строка документации для view-lossage указывает:

Отображение последних 300 нажатий клавиш ввода.

Чтобы записать все ваши входные данные в файл, используйте `open-dribble-file '.

и Ch f open-dribble-file RET говорит мне:

open-dribble-file - это интерактивная встроенная функция в `C исходном коде '.

(open-dribble-file FILE)

Начните записывать все символы клавиатуры в файл дриблинга с именем FILE.Если FILE равен nil, закройте любой открытый файл капли.Файл закроется, когда выйдет Emacs.

Так что просто добавьте что-то вроде следующего в ваш файл .emacs:

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

Экспериментально это затирает файл, если он уже существуетпоэтому вам нужно разобраться с этим.

Вот один из подходов.Он учитывает несколько сеансов Emacs, используя make-temp-name, чтобы сгенерировать полуслучайное имя файла для файла dribble, а затем добавляет его содержимое в основной файл журнала потерь, когда 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")
...