Emacs: повторно открыть буферы из последнего сеанса при запуске?
91
Каждый день я запускаю emacs и открываю те же файлы, что и накануне. Есть ли что-то, что я могу добавить в файл init.el, чтобы он снова открыл все буферы, которые я использовал, когда в последний раз выхожу из emacs?
Вы можете сохранить рабочий стол вручную с помощью команды Mx desktop-save. Вы также можете включить автоматическое сохранение рабочего стола при выходе из Emacs и автоматическое восстановление последнего сохраненного рабочего стола при запуске Emacs: используйте буфер настройки (см. Простая настройка), чтобы установить для режима сохранения рабочего стола значение t для будущих сеансов, или добавьте эта строка в вашем файле ~ / .emacs:
Отличный ответ. Однако я заметил, что Emacs меняет порядок буферов между сессиями. Есть ли способ всегда иметь один и тот же порядок буферов?
axel22
Если у кого-то есть проблемы с тем, чтобы это работало (например, у меня), вот метод диагностики проблемы: включите отладку путем M-:выполнения (setq debug-on-error t), затем позвоните, desktop-revertи он может обнаружить ошибку в отладчике. Для меня это был глобальный параметр, который должен был быть локальным буфером, что приводило к сбою восстановления кадра. (Простое использование emacs --debug-initможет также
выявить
10
Хотя я подозреваю, что вопрос был связан с функциональностью emacs для «рабочего стола» (см. Ответ выше), подход Lewap может быть полезен, если набор используемых файлов действительно является одним и тем же набором файлов. Фактически, можно пойти дальше и определить «профили», если у вас есть разные наборы регулярно используемых файлов ... Быстрый пример:
Если вы обнаружите, что регулярно переключаетесь между различными наборами регулярно используемых файлов во время работы, подумайте об использовании перспектив и заполнении каждой перспективы желаемым набором регулярно используемых файлов.
Для хранения / восстановления буферов / вкладок (в частности вкладок elscreen): я использую elscreen, и способ, которым я управляю хранением / восстановлением сеанса рабочего стола, и конфигурация вкладки elscreen - это следующий код в моем файле .emacs (используемые имена говорят сами за себя и если функции сохранения / восстановления не должны выполняться каждый раз при запуске emacs, просто закомментируйте строки с помощью "(push # 'elscreen-store kill-emacs-hook)" и "(elscreen-restore)"):
Для тех , кто идет по этому пути, просто мелочь , что вы можете заменить emacs-configuration-directoryс user-emacs-directoryкоторой Emacs уже предоставляет.
Joe
2
Есть полезные улучшения, которые вы можете внести в базовую функцию рабочего стола. Особенно удобны (IMO) методы автоматического сохранения рабочего стола во время сеанса, так как в противном случае, если ваша система выйдет из строя, вы застрянете с файлом рабочего стола, с которым вы начали этот сеанс - довольно раздражает, если вы склонны поддерживать работу Emacs в течение многих дни за раз.
(find-file-noselect "/my/file")откроет его тихо, т.е. без подъема буфера. Просто говорю.
ИЗМЕНИТЬ Эта команда не интерактивна ; Чтобы проверить это, вы должны оценить выражение, например, поместив курсор после последней скобки и нажав Cx Ce
Голосовать против - это не круто ; эта команда определенно работает и находится в рамках вопроса.
Я не голосовал против, но, возможно, ваш ответ был отклонен, потому что он не касается вопроса о том, как конкретно открывать буферы, которые были открыты в предыдущем сеансе Emacs.
Райан С. Томпсон
1
проголосовали против, потому что это не имеет ничего общего с оригинальным Q.
Ответы:
Вы можете использовать библиотеку рабочего стола Emacs :
источник
M-:
выполнения(setq debug-on-error t)
, затем позвоните,desktop-revert
и он может обнаружить ошибку в отладчике. Для меня это был глобальный параметр, который должен был быть локальным буфером, что приводило к сбою восстановления кадра. (Простое использованиеemacs --debug-init
может такжеХотя я подозреваю, что вопрос был связан с функциональностью emacs для «рабочего стола» (см. Ответ выше), подход Lewap может быть полезен, если набор используемых файлов действительно является одним и тем же набором файлов. Фактически, можно пойти дальше и определить «профили», если у вас есть разные наборы регулярно используемых файлов ... Быстрый пример:
(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.
Если вы обнаружите, что регулярно переключаетесь между различными наборами регулярно используемых файлов во время работы, подумайте об использовании перспектив и заполнении каждой перспективы желаемым набором регулярно используемых файлов.
источник
Для хранения / восстановления буферов / вкладок (в частности вкладок elscreen): я использую elscreen, и способ, которым я управляю хранением / восстановлением сеанса рабочего стола, и конфигурация вкладки elscreen - это следующий код в моем файле .emacs (используемые имена говорят сами за себя и если функции сохранения / восстановления не должны выполняться каждый раз при запуске emacs, просто закомментируйте строки с помощью "(push # 'elscreen-store kill-emacs-hook)" и "(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
сuser-emacs-directory
которой Emacs уже предоставляет.Есть полезные улучшения, которые вы можете внести в базовую функцию рабочего стола. Особенно удобны (IMO) методы автоматического сохранения рабочего стола во время сеанса, так как в противном случае, если ваша система выйдет из строя, вы застрянете с файлом рабочего стола, с которым вы начали этот сеанс - довольно раздражает, если вы склонны поддерживать работу Emacs в течение многих дни за раз.
http://www.emacswiki.org/emacs/DeskTop
В вики также есть полезная информация о сохранении данных между сеансами в целом:
http://www.emacswiki.org/emacs/SessionManagement
В частности, для настольных компьютеров я думал, что Desktop Recover выглядит особенно многообещающим, но я еще не пробовал его.
источник
(find-file-noselect "/my/file")
откроет его тихо, т.е. без подъема буфера. Просто говорю.ИЗМЕНИТЬ Эта команда не интерактивна ; Чтобы проверить это, вы должны оценить выражение, например, поместив курсор после последней скобки и нажав Cx Ce
Голосовать против - это не круто ; эта команда определенно работает и находится в рамках вопроса.
источник