Buffers de salvamento automático que não estão visitando arquivos

7

Costumo fazer algo como:

Cx b foobarbaz RET

para obter um novo buffer para anotações, etc. Adoraria que o emacs apenas fizesse snapshots e despejasse todos os buffers abertos no disco ocasionalmente. Existe muita documentação disponível para melhorar a funcionalidade de salvamento automático e backup, mas todas estão relacionadas aos buffers que estão visitando um arquivo.

Eu gostaria que o emacs periodicamente capturasse / salve TODOS os buffers no disco. Isso certamente fará com que alguns buffers ruidosos de 'saída' sejam gravados no disco, mas quem se importa? O espaço em disco é barato.

Existe algo embutido para fazer isso? No momento, se meu computador (ou emacs) travar, geralmente perco muitas anotações que fiz em vários buffers.

Chris Clark
fonte
save-some-bufferspossui uma opção para buffers que não visitam arquivos - talvez você possa se casar com isso com um timer e uma função personalizada, que save-some-buffersaceita como argumento - consulte a string de documento. Provavelmente já existe algo que faz isso - por exemplo, Google "save-some-buffers" auto saveetc .; e veja a função auto-save-modeem simple.elpara algumas idéias. Minha lembrança é que auto-save-buffers aprimorado pode ter feito algo assim: github.com/kentaro/auto-save-buffers-enhanced/blob/master/...
lawlist
Em que sistema operacional você está e qual é a sua versão do emacs? Estou no RHEL 5,10 e emacs 25 (versão dev do git) e eu não me lembro emacs quebrando uma vez, provavelmente desde 24,4 ..
Kaushal Modi
11
Para fazer anotações rápidas que salvam automaticamente, sugiro o deftpacote.
Kaushal Modi
Irá verificar hábil - parece ótimo.
Chris Clark

Respostas:

6

Isso não responde à sua pergunta conforme a proposta, portanto, sinta-se à vontade para ignorar ou reduzir o voto.

  1. Duvido que você realmente queira que o Emacs salve todos os buffers em disco, incluindo todos os buffers internos, normalmente invisíveis. Porque você iria querer aquilo?

  2. Não se trata do espaço em disco. É sobre o barulho. Deseja realmente extrair coisas de um diretório em que seus arquivos importantes possam ser misturados com essas coisas? Ou você deseja pescar pérolas ocasionais em um diretório temporário (cujo objetivo é esconder o ruído)?

  3. Buffers que possuem nomes como *...*(não iniciando com um caractere de espaço) geralmente são apenas de saída (por exemplo, *info*) ou para interação temporária (por exemplo *scratch*). Para esses buffers, minha recomendação seria deixar as coisas como estão. Você sempre pode salvar qualquer buffer sob demanda usando C-x C-w, se realmente precisar.

  4. O que me leva ao que suspeito ser o seu caso de uso real: " buffer [s] para fazer anotações etc. ". A resposta aqui é usar em C-x C-fvez de C-x b. IOW, sim, visite-os como buffers de arquivo. Se você nunca salvar o buffer, não haverá arquivo criado - exceto um arquivo de salvamento automático , que provavelmente é exatamente o que você deseja e precisa.

    Ao visitar um buffer como um arquivo, você controla automaticamente qual modo principal é usado por padrão (usando auto-mode-alist). Isso é tão importante para anotações quanto para código de programação.

    Em particular, eu sugeriria que, se você usar *scratch*para interação temporária com Lisp, poderá reconsiderar. Muitos usuários (inclusive eu) descobriram que isso ajuda a usar C-x C-f foo.el(ou qualquer outro *.elnome de arquivo). Uma razão é que você obtém arquivos de salvamento automático gratuitamente (e arquivos de backup, se você salvar o buffer). Outro motivo é que você obtém o modo Emacs-Lisp em vez do modo de interação Lisp. Uma terceira razão é que sim, você pode querer salvar seu trabalho "temporário". E como você diz, o espaço em disco é barato.

E o # 4 conflitante com o que eu disse no # 1? Você não deseja misturar arquivos de rabiscos temporários com arquivos importantes e não deseja retirar a pérola ocasional de um diretório de arquivos temporários. A resposta aqui é que depende de você organizar as coisas para que esse efeito seja minimizado. Trabalhar com esses arquivos de rascunho em um diretório específico pode ajudar, assim como o uso de uma convenção de nomenclatura (especialmente um prefixo) que ajuda a distinguir esses arquivos.

Outra coisa que pode ajudar: Dired . Você pode usar ~e #para marcar arquivos de backup e salvamento automático para exclusão (depois xpara excluí-los). E se você usar uma convenção de nomenclatura para seus arquivos temporários presumivelmente temporários, poderá usar %ou semelhante para marcar todos eles para exclusão. Você pode até executar uma função periodicamente para limpar esses arquivos. E você pode renomear facilmente qualquer um que realmente queira manter por mais tempo.

Portanto, meu conselho é talvez reconsiderar como você está interagindo com esses buffers temporários e para anotações. Considere usar buffers de arquivo, que são salvos automaticamente. Em suma, use C-x C-f foobarbaz.txt RET( .elou qualquer outra coisa) em vez de C-x b foobarbaz RET.

Desenhou
fonte
11
Eu acho que você quis dizer "Em suma, use C-x C-f" em vez de "Em suma, use C-x b" no último parágrafo. (Eu não posso sugerir uma edição diretamente porque essa mudança é menos de 6 caracteres.)
YoungFrog
11
Nas últimas semanas, tentei adquirir o hábito de Cx Cf, e tem funcionado muito bem. Combinado ao melhor uso dos favoritos e do Helm, sou capaz de acessar um diretório de notas e criar um novo arquivo de rascunho rapidamente. Adquiri o hábito Cx b <gibberish> original pela dica eficaz do emacs nº 5 do Yegge, mas se houver alguma chance de o buffer persistir, acho que você está certo em adquirir o hábito de usar um arquivo adequado. Obrigado!
Chris Clark
11
Ainda bem que ajudou.
Tirou