Como faço para o recentf-mode trabalhar com o servidor / cliente emacs?

9

Eu gosto de usar o recentf modo no Emacs, que produz uma lista de arquivos que abri recentemente. Essa lista é persistente entre as sessões, para que eu possa acessar os arquivos que usei há bastante tempo.

No entanto, recentemente comecei a usar o Emacsclient para conectar-se a um servidor Emacs que é ativado automaticamente quando eu o registro. No geral, essa foi uma grande melhoria. No entanto, o recentfmodo começou a perder a maioria dos arquivos que eu abri sempre que reiniciei o computador. Ele lembra alguns deles e não consigo ver um padrão no qual os arquivos são gravados.

Como posso corrigir esse comportamento? Como posso gravar todos os arquivos que visito e lembrá-los entre as sessões?

Tikhon Jelvis
fonte
3
Eu tenho o mesmo problema, seria ótimo ver uma solução!
estudante de
Tentei fazer isso usando o emacs -nwservidor de carregamento e o recentf, executando recentf-mode 1e server-startnessa ordem e não consegui reproduzir o seu problema. Você pode postar seu arquivo .emacs em algum lugar (como um pastebin) junto com um exemplo de como você está iniciando o emacs e o emacsclient?
jlp
Aqui está o meu arquivo .emacs . Estou usando o Fedora e instalei o Emacs com o Yum; Ele criou um lançador para o Emacs Client e é isso que eu uso. O lançador apenas roda emacsclient -c --alternate-editor="" %f. O problema pode estar no fato de eu não fechar o Emacs antes de desligar o computador, mas não tenho certeza. Matar manualmente o Emacs antes de desligar parece ajudar, mas essa não é uma ótima solução.
Tikhon Jelvis
Hmmm, não vi o servidor iniciar no seu .emacs, presumo que ele esteja começando com --daemon quando você efetuar login. Estou suspeitando de algum tipo de problema de pedido ao ativar o recentf e iniciar o servidor.
jlp

Respostas:

8

Eu estava tendo exatamente o mesmo problema e resolvi-o fazendo duas alterações. Primeiro após este post , criei uma função para chamar automaticamente recentf-save-listem um timer. Assim, a cada poucos minutos, reescrevemos automaticamente o arquivo ~ / .recentf:

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

A outra coisa que fiz foi adicionar um script de desligamento ao meu gerenciador de exibição (lightdm) que fechava normalmente o servidor emacs toda vez que eu saía ou desligava. A maneira como você faz isso dependerá do seu gerenciador de exibição, mas meu script simplesmente se parece com

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

Também seria bom ter um gancho que fosse executado novamente novamente recentf-save-listsempre que um cliente "desconectasse" do servidor, mas eu não conseguia descobrir os ganchos adequados.

jarvisschultz
fonte
2
É server-done-hook. Pessoalmente, eu uso #server-visit-hook
1868 de tungd