Какие альтернативные менеджеры сессий доступны для Emacs?
Я прочитал страницу в Emacs Wiki, которая содержит список плагинов менеджера сессий. Но, попробовав все это, я все еще не доволен ни одним из них.
Для сравнения, менеджер сессий VIM сохраняет и загружает сессии по имени, что для меня является одной из наиболее важных функций.
В частности, мне нужен менеджер сессий для Emacs, который:
- Управление сессиями по имени
- Сохранение вкладок, экранов, рамок и т. Д.
Я пытаюсь использовать Emacs, потому что он имеет действительно хорошие функции, но хороший менеджер сессий важен для моего рабочего процесса.
Связанные с:
5 ответов
Поскольку вам не нравится базовая функциональность desktop.el, добавьте немного элиспа:
(defvar my-desktop-session-dir
(concat (getenv "HOME") "/.emacs.d/desktop-sessions/")
"*Directory to save desktop sessions in")
(defvar my-desktop-session-name-hist nil
"Desktop session name history")
(defun my-desktop-save (&optional name)
"Save desktop with a name."
(interactive)
(unless name
(setq name (my-desktop-get-session-name "Save session as: ")))
(make-directory (concat my-desktop-session-dir name) t)
(desktop-save (concat my-desktop-session-dir name) t))
(defun my-desktop-read (&optional name)
"Read desktop with a name."
(interactive)
(unless name
(setq name (my-desktop-get-session-name "Load session: ")))
(desktop-read (concat my-desktop-session-dir name)))
(defun my-desktop-get-session-name (prompt)
(completing-read prompt (and (file-exists-p my-desktop-session-dir)
(directory-files my-desktop-session-dir))
nil nil nil my-desktop-session-name-hist))
РЕДАКТИРОВАТЬ:
Получив несколько голосов, добавьте такие тонкости, как завершение чтения и история
Уже ответил:
- Emacs: заново открывать буферы из последней сессии при запуске?
- Сохранение конфигураций окон в Emacs
Подробное объяснение ваших требований позволяет нам предоставить вам более конкретное решение.
редактировать
Режим рабочего стола позволяет вам иметь более одного сеанса - сохраненные рабочие столы не на основе имени, а на основе каталога.
Из главы Сохранение сессий Emacs:
Вы можете сохранить текущий рабочий стол и перезагрузить один, сохраненный в другом каталоге, набрав
M-x desktop-change-dir.
Более того, desktop-path
Переменная позволяет определить список каталогов для поиска сохраненных рабочих столов.
Редактировать 2
Фрагмент кода Elisp, отправленный scottfrazer, позволяет вам назвать ваш сеанс, так как в фоновом режиме он переводит имя в правильное имя каталога для режима рабочего стола.
Для буферов / вкладок, сохраняющих / восстанавливающих части вопроса: я использую 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 (eq (type-of (desktop-read)) 'symbol)
(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)
РЕДАКТИРОВАТЬ:
Я изменил "if (desktop-read)" в elscreen-restore, на "if (eq (type-of (desktop-read))) 'symbol)", потому что, если emacs уничтожается, а не закрывается обычным способом файл.emacs.desktop.lock не удаляется. Таким образом, если по какой-либо причине сеанс рабочего стола не может быть восстановлен, возвращаемое значение "(desktop-read)" является "строкой", объясняющей ошибку, а не "nil", поэтому "if" не терпит неудачу, так как должен.
Используйте разные рабочие столы, добавив их в закладки. Простой, быстрый в использовании - нажмите клавишу и Presto, другой рабочий стол. Вы можете даже ездить на велосипеде среди них, если хотите.
Используйте Cx p K (по умолчанию), чтобы установить закладку на рабочем столе. Вас попросят указать местоположение файла на рабочем столе и имя закладки для использования.
Используйте Cx j K (по умолчанию), чтобы перейти на рабочий стол с закладкой. Вам будет предложено ввести имя закладки (с дополнением).
Вам нужно Закладка +, чтобы сделать это.