O Emacs não pode salvar o histórico de arquivos visitados recentes abertos na sessão atual antes do desligamento

8

Eu tenho um problema com o emacs iniciado como daemon usando o Systemd.

A cada desligamento / reinicialização, se eu não interromper o serviço emacs daemon manualmente, o histórico de arquivos abertos recentes na sessão atual é perdido. Eu acho que isso é por causa do Systemd que não pode matar corretamente o Emacs quando estiver em um estado de desligamento.

O que posso fazer para resolver este problema?

Minha configuração recente em init.el:

(use-package recentf
    :config (progn (setq recentf-auto-cleanup 'never
                         recentf-max-menu-items 50
                         recentf-max-saved-items 400
                         recentf-save-file
                         (expand-file-name "temp/.recentf" user-emacs-directory))
                   (recentf-mode t)))

Configuração do serviço Systemmac emacs:

[Unit]
Description=Emacs: the extensible, self-documenting text editor

[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"

Restart=always
User=%i
#WorkingDirectory=%h

[Install]
WantedBy=multi-user.target
Maglight
fonte
1
Você não deveria estar perguntando isso em um fórum systemd? Supondo que seu use-packagecódigo funcione em outras circunstâncias (?), Parece que o único problema é que systemdnão executa seu ExecStopcomando.
phils

Respostas:

4

Você pode salvar arquivos recentes antes do desligamento ligando para recentf-save-list

M-x recentf-save-list RET

Isso adiciona seus arquivos recentes ao histórico recente.

Se você não quiser fazer isso manualmente, poderá adicionar um cronômetro que fará isso para você a cada 5 minutos.

(run-at-time (current-time) 300 'recentf-save-list)

Adicione isso à sua configuração. Portanto, sempre que você abrir o emacs, ele chamará a função e a cada 5 minutos (ou 300 segundos) continuará chamando essa função.

Fonte: https://emacs.stackexchange.com/a/15115/5187

ChillarAnand
fonte
1

Eu sei que esse segmento é antigo, mas me deparei com o mesmo problema no MS Windows (ou seja, o Windows sabe como sair do daemon do Emacs normalmente). Eu resolvi isso para me ligando recentf-save-listpara terminal-delete-functions. Então, no meu arquivo init, tenho a seguinte linha:

(add-hook 'delete-terminal-functions (lambda (terminal) (recentf-save-list)))

Em seguida, a recentf-listsessão atual é salva sempre que você fecha o cliente Emacs. Isso foi o suficiente para mim, porque estou acostumado a fechar o Emacs antes de desligar o PC.

Wolfgang
fonte