Чи можу я встановити певний файл, щоб автоматично і беззвучно приймати зміни?


9

Тобто, чи можу я вказати для конкретного файлу, що я не хочу, щоб Emacs повідомляв мене про те, що файл змінився на диску, і підкаже мені про те, хочу я прийняти зміни чи ні? Я не хочу цього робити в усьому світі, лише для файлів, які я знаю, часто змінюватимуться поза Emacs (зокрема, файли Org, пов’язані з календарем).

Відповіді:


8

Це можна зробити для певного буфера за допомогою M-x auto-revert-mode( вручну ). Для файлових буферів це перевірятиме кожну auto-revert-intervalсекунду (за замовчуванням до 5) на зміни та автоматично оновлює буфер з диска.

У вашому заголовку написано "певний файл", тоді як в тілі запитання вказано тип файлу (org файли) Залежно від ваших обставин, ось декілька способів встановити цей режим для постійного отримання бажаного ефекту. Раніші методи, можливо, чистіші та ефективніші, якщо вони застосовуються до конкретного випадку використання.

Якщо ви знаєте, що вам потрібно це для кожного файлу певного типу, подумайте про додавання режиму гака до режиму настройки.

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

Якщо ви знаєте, що ви хочете, щоб він був у всьому каталозі, подумайте про його встановлення у .dir-locals.el у відповідному місці, переконайтесь, що VCS - ігноруйте файл локальних налаштувань, якщо це доречно. Цей приклад застосовуватиметься до всіх буферів в режимі org для файлів, що знаходяться в одному каталозі (та підкаталогах). Ви також можете запустити, M-x add-dir-local-variableщоб Emacs генерував та зберігав це автоматично для вас.

(
  (org-mode . ((auto-revert-mode . 1)))
 )

Якщо жоден з двох вищезгаданих підходів не підходить для вас, розгляньте локальну змінну файлу, встановлену у кожному файлі. Найкоротший, найзагальніший спосіб встановити один із них - це включити в перший рядок цільового файлу наступне:

-*- eval: (auto-revert-mode 1); -*-

У вихідних файлах текст може слідувати роздільнику коментарів (//, # тощо). Можна запустити, M-x add-file-local-variable-proplineщоб Emacs генерував це автоматично для вас, або M-x add-file-local-variableдля формату, який використовує нижню частину вашого файла замість верхньої.

Використовуйте цей метод, лише якщо ви не ділитесь файлом ні з ким іншим. З посібника GNU :

Часто помилково вказати незначні режими таким чином. Незначні режими представляють індивідуальні налаштування користувача, і може бути недоцільним нав'язувати свої налаштування іншому користувачеві, який може редагувати файл. Якщо ви хочете автоматично включити або вимкнути другорядний режим залежно від ситуації, часто краще зробити це в гачку основного режиму.


2
Чи не (auto-revert-mode 1)канонічний спосіб вмикати мінорний режим замість setq?
mbork

1
Так, ви праві. Очищення цього прикладу за одну секунду. Дякую.
Міан

1
Ласкаво просимо. (Враховуючи це, AFAIU, локальні змінні файлів найкраще підходять для випадку використання ОП.)
mbork

1
Можливо ти правий. IMO це залежить від деталей їх організації файлів. Якщо файли, які вони знають, часто змінюватимуться поза emacs, це всі org файли, або всі вони знаходяться в одному місці (наприклад, каталог Dropbox), підхід на основі режиму чи каталогу може бути більш чистим та простішим та уникатиме захаращуючи свої файли як бонус.
Міан

2
Для взаємодії з обома цими методами існують add-file-local-variableі add-dir-local-variable.
Шон Алред

3

Так. Помістіть це в кінці файлу.

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

Це передбачає Org-режим, для інших режимів використовуйте коментарі мовою, якою пояснено посилання, подане нижче.

Примітка: див. Локальні змінні у файлах у посібнику щодо довідкової інформації, інформації про безпеку та застереження, що це не завжди може бути хорошою ідеєю. Також у розділі про обертання йдеться, наприклад, про те, як змінити 5-секундний інтервал для автоматичного повернення за замовчуванням.


Це абсолютно потрібно бути в кінці? У мене є сценарій, який генерує .org файли, і я мав його поставити його майже на початку - який, здається, не працює ....
emacsomancer

1
Так, дивіться посилання. І дивіться інші відповіді на рішення першого ряду.
mbork
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.