Todos os dias eu inicio o emacs e abro exatamente os mesmos arquivos que abri no dia anterior. Existe algo que eu possa adicionar ao arquivo init.el para que ele reabra todos os buffers que eu estava usando quando fechei o emacs pela última vez?
Todos os dias eu inicio o emacs e abro exatamente os mesmos arquivos que abri no dia anterior. Existe algo que eu possa adicionar ao arquivo init.el para que ele reabra todos os buffers que eu estava usando quando fechei o emacs pela última vez?
Respostas:
Você pode usar a biblioteca Emacs Desktop :
Você pode salvar a área de trabalho manualmente com o comando Mx desktop-save. Você também pode habilitar o salvamento automático da área de trabalho ao sair do Emacs e a restauração automática da última área de trabalho salva quando o Emacs for iniciado: use o buffer de personalização (consulte Personalização fácil) para definir o modo de salvamento da área de trabalho para t para sessões futuras, ou adicionar esta linha em seu arquivo ~ / .emacs:
(desktop-save-mode 1)
M-:
executando e (setq debug-on-error t)
, em seguida, chame desktop-revert
e pode detectar o erro ofensivo no depurador. Para mim, era a configuração global que deveria ser local do buffer, causando falha na restauração do quadro. (Apenas usar emacs --debug-init
pode detectar o problema também, mas usei o método anterior.)
Embora eu suspeite que a questão esteja procurando a funcionalidade de "área de trabalho" do emacs (veja a resposta acima), a abordagem de Lewap pode ser útil se o conjunto de arquivos que alguém usa realmente é exatamente o mesmo conjunto de arquivos. Na verdade, pode-se dar um passo adiante e definir 'perfis' se tivermos conjuntos diferentes de arquivos usados regularmente ... Exemplo rápido:
(let ((profile
(read-from-minibuffer "Choose a profile (acad,dist,lisp,comp,rpg): ")
))
(cond
((string-match "acad" profile)
(dired "/home/thomp/acad")
(dired "/home/thomp/acad/papers")
)
((string-match "lisp" profile)
(setup-slime)
(lisp-miscellany)
(open-lisp-dirs)
)
((string-match "rpg" profile)
(find-file "/home/thomp/comp/lisp/rp-geneval/README")
(dired "/home/thomp/comp/lisp/rp-geneval/rp-geneval")
... etc.
Se você descobrir que alterna regularmente entre diferentes conjuntos de arquivos usados regularmente à medida que trabalha, considere usar perspectivas e preencher cada uma delas com o conjunto desejado de arquivos usados regularmente.
Para armazenar / restaurar os buffers / guias (especificamente as guias da tela eletrônica): Eu uso a tela e a forma como gerencio o armazenamento / restauração da sessão da área de trabalho e a configuração da guia da tela é o seguinte código em meu arquivo .emacs (os nomes usados são autoexplicativos e se as funções de armazenamento / restauração não devem ser executadas toda vez que o emacs inicia, apenas comente as linhas com "(push # 'elscreen-store kill-emacs-hook)" e "(elscreen-restore)"):
(defvar emacs-configuration-directory
"~/.emacs.d/"
"The directory where the emacs configuration files are stored.")
(defvar elscreen-tab-configuration-store-filename
(concat emacs-configuration-directory ".elscreen")
"The file where the elscreen tab configuration is stored.")
(defun elscreen-store ()
"Store the elscreen tab configuration."
(interactive)
(if (desktop-save emacs-configuration-directory)
(with-temp-file elscreen-tab-configuration-store-filename
(insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
"Restore the elscreen tab configuration."
(interactive)
(if (desktop-read)
(let ((screens (reverse
(read
(with-temp-buffer
(insert-file-contents elscreen-tab-configuration-store-filename)
(buffer-string))))))
(while screens
(setq screen (car (car screens)))
(setq buffers (split-string (cdr (car screens)) ":"))
(if (eq screen 0)
(switch-to-buffer (car buffers))
(elscreen-find-and-goto-by-buffer (car buffers) t t))
(while (cdr buffers)
(switch-to-buffer-other-window (car (cdr buffers)))
(setq buffers (cdr buffers)))
(setq screens (cdr screens))))))
(elscreen-restore)
emacs-configuration-directory
pelo user-emacs-directory
que o Emacs já fornece.
Existem aprimoramentos úteis que você pode fazer no recurso básico da área de trabalho. Particularmente úteis (IMO) são métodos de salvar automaticamente a área de trabalho durante a sessão, caso contrário, se o seu sistema travar, você ficará preso com o arquivo da área de trabalho com o qual iniciou aquela sessão - muito chato se você tende a manter o Emacs funcionando por muitos dias de cada vez.
http://www.emacswiki.org/emacs/DeskTop
O wiki também tem informações úteis sobre a persistência de dados entre as sessões em geral:
http://www.emacswiki.org/emacs/SessionManagement
Especificamente para desktops, achei que Desktop Recover parecia particularmente promissor, mas ainda não experimentei.
(find-file-noselect "/my/file")
irá abri-lo silenciosamente, ou seja, sem aumentar o buffer. Apenas dizendo.
EDITAR Este comando não é interativo ; Para testá-lo, você deve avaliar a expressão, por exemplo, posicionando o cursor após o último parêntese e pressionando Cx Ce
Votar negativamente não é legal ; este comando definitivamente funciona e está no escopo da questão.