Почему перезагрузка уведомлений в emacs медленная, когда файлы изменяются извне? - PullRequest
3 голосов
/ 28 августа 2010

Когда файл (с управлением версиями) обновляется, emacs не показывает статус мгновенно. С TextMate, если что-то меняется с файлом, который я редактирую, он сразу же уведомляет меня.

  • Есть ли способ сделать уведомление мгновенным?
  • M-x load-file - единственный способ проверить, что-то изменилось?

ДОБАВЛЕНО

(custom-set-variables
 '(auto-revert-interval 1))
(global-auto-revert-mode 1)

Он устанавливает 1 секунду для интервала возврата, и, кажется, работает довольно хорошо.

Ответы [ 2 ]

2 голосов
/ 28 августа 2010

Вы должны заглянуть в "auto-revert-mode".Как следует из названия, он будет автоматически возвращать буферы, если основной файл был изменен.

Обратите внимание, что вы все равно не получите мгновенных уведомлений;вместо этого Emacs будет фактически «опрашивать» файлы очень часто (настраивается через «auto-revert-interval»; я думаю, что я использую пять секунд для большинства вещей и одну секунду для файлов журналов, которые я тщательно отслеживаю).1005 *

У меня все включено, вот так:

(defvar running-on-windows
   (memq system-type '(windows-nt cygwin32 cygwin))
   "True if and only if we're running on Windows.  Both Win32 and
Cygwin count.")

(when (fboundp 'global-auto-revert-mode)

  ;; All the "reverting buffer foo" messages are _really_ distracting.
  (setq auto-revert-verbose nil)

  (global-auto-revert-mode 1)

  ;; just as the docs warn, this can really make Emacs sluggish.
  (if running-on-windows
      (if (fboundp 'lwarn)
          (lwarn
           'global-auto-revert-mode
           :warning
           "I just turned on global-auto-revert-mode.  It's nifty,
but it's REALLY SLOW when you have buffers that are visiting
remote files.  And despite its documentation, it does NOT ignore
those files, if you're using windows, and the file name begins
with a drive letter and a colon."))
    (setq global-auto-revert-non-file-buffers t)))
0 голосов
/ 28 августа 2010

Перезагрузка буфера содержимого из копии на диске называется возвращением в Emacs, и вас может заинтересовать раздел «Возвращение» в руководстве.

Если вы делаете свою версиюуправление от Emacs, оно должно позаботиться о возврате при обновлении.

По умолчанию Emacs проверяет обновление файла, когда вы вносите первое изменение после сохранения.Я использую, когда я изменил файл извне.

(defun revert-files (&rest files)
  "Reload all specified files from disk.
Only files that are currently visited in some buffer are reverted.
Do not ask confirmation unless the buffer is modified."
  (save-excursion
    (let ((revert-without-query '("")))
      (dolist (file-name files)
        (message "Considering whether to revert file %s" file-name)
        (let ((buf (find-buffer-visiting file-name)))
          (when buf
            (message "Reverting file in buffer %s" (buffer-name buf))
            (set-buffer buf)
            (revert-buffer t nil t)))))))

Вот скрипт, который вызывает его из команды оболочки (он может быть вызван из скрипта-обертки для операций контроля версий).*

Предупреждение. Я удалил некоторые фрагменты кода, поскольку скопировал его, поэтому возможны опечатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...