Как заставить недавний режим работать с сервером / клиентом emacs?

9

Мне нравится использовать recentf режим в Emacs, который выдает список файлов, которые я недавно открыл. Этот список постоянен между сеансами, поэтому я могу получить доступ к файлам, которые использовал довольно давно.

Однако недавно я начал использовать Emacsclient для подключения к серверу Emacs, который автоматически включается при его регистрации. В целом, это было большое улучшение. Однако recentfрежим начал пропускать большинство файлов, которые я открывал, каждый раз, когда перезагружал свой компьютер. Он запоминает некоторые из них, и я не вижу схемы, в которой записываются файлы.

Как я могу исправить это поведение? Как я могу записать все файлы, которые я посещаю, и запомнить их между сеансами?

Тихон Джелвис
источник
3
У меня такая же проблема, было бы здорово увидеть решение!
ученик
Я попытался это сделать emacs -nw, загрузив сервер и RecentF, затем запустив recentf-mode 1и server-startв таком порядке, и не смог воспроизвести вашу проблему. Можете ли вы опубликовать свой файл .emacs где-нибудь (например, pastebin) вместе с примером того, как вы запускаете emacs и emacsclient?
JLP
Вот мой файл .emacs . Я использую Fedora и установил Emacs с Yum; он создал модуль запуска для Emacs Client, и это то, что я использую. Лаунчер просто запускается emacsclient -c --alternate-editor="" %f. Возможно, проблема в том, что я не закрыл Emacs до выключения компьютера, но я не уверен. Ручное убийство Emacs перед выключением кажется полезным, но это не очень хорошее решение.
Тихон Джелвис
Хм, я не видел запуска сервера в вашем .emacs, я предполагаю, что он запускается с --daemon, когда вы входите в систему. Я подозреваю какую-то проблему с порядком включения недавнего запуска и запуска сервера.
JLP

Ответы:

8

У меня была точно такая же проблема, и я решил ее, сделав два изменения. Сначала, после этого поста , я создал функцию для автоматического вызова recentf-save-listпо таймеру. Таким образом, каждые несколько минут мы автоматически переписываем файл ~ / .recentf:

(run-at-time nil (* 5 60) 'recentf-save-list)

Другая вещь, которую я сделал, это добавила скрипт выключения в мой менеджер дисплеев (lightdm), который изящно закрывал сервер emacs при каждом выходе из системы или завершении работы. То, как вы это сделаете, будет зависеть от вашего диспетчера отображения, но мой сценарий просто выглядит

#!/bin/bash
emacsclient -e "(save-buffers-kill-emacs)"

Было бы также неплохо иметь ловушку, которая автоматически перезапускалась recentf-save-listкаждый раз, когда клиент «отключался» от сервера, но я не мог определить правильные ловушки.

jarvisschultz
источник
2
Это server-done-hook. Лично я используюserver-visit-hook
Tungd