Какие альтернативные менеджеры сеансов доступны для Emacs?
Я прочитал страницу в Emacs wiki, которая содержит список плагинов диспетчера сеансов. Но, пробовав все это, я до сих пор не доволен ни одним из них.
Для сравнения, диспетчер сеансов VIM сохраняет и загружает сеансы по имени, что является одной из самых важных функций для меня.
В частности, я хочу, чтобы диспетчер сеансов для Emacs:
- Управление сеансами по имени
- Сохранение вкладок, экранов, фреймов и т.д.
Я пытаюсь использовать Emacs, потому что у него действительно хорошие функции, но хороший менеджер сеансов очень важен для моего рабочего процесса.
по теме:
Ответы
Ответ 1
Поскольку вам не нравятся базовые функции desktop.el, добавьте вокруг него некоторый elisp:
(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))
ИЗМЕНИТЬ
Получение некоторых голосов, поэтому добавьте такие тонкости, как завершение чтения и история
Ответ 2
Уже ответил:
Подробное описание ваших требований позволяет нам предоставить более конкретное решение для вас.
Edit
Режим рабочего стола позволяет вам иметь более одного сеанса с сохраненными рабочими столами не имя, а директорию.
Из раздела Сохранение сеансов Emacs:
Вы можете сохранить текущий рабочий стол и перезагрузите сохраненную в другом каталоге набрав M-x desktop-change-dir.
Кроме того, переменная desktop-path
позволяет вам определить список каталогов для поиска сохраненных рабочих столов.
Изменить 2
фрагмент кода Elisp, посланный scottfrazer, позволяет вам назвать ваш сеанс, так как в фоновом режиме он переводит имя в соответствующее имя каталога для режима Desktop.
Ответ 3
Для буферов/вкладок, в которых хранятся/восстанавливаются части вопроса: Я использую elscreen и способ управления хранением/восстановлением рабочего стола, а настройка elscreen tab - следующий код в моем .emacs файл (используемые имена не требуют пояснений и если функции сохранения/восстановления не должны выполняться каждый раз, когда emacs начинает просто комментировать строки с помощью "(push # 'elscreen-store kill-emacs-hook)" и "(elscreen- восстановление)" ):
(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 (read-read))", потому что, если emacs убит, а не закрыт в обычный способ, файл .emacs.desktop.lock не удаляется. Таким образом, если по какой-либо причине сеанс рабочего стола не может быть восстановлен, возвращаемое значение "(desktop-read)" является "строкой", объясняя ошибку, а не "nil", поэтому "if" не прерывается, поскольку следует.
Ответ 4
Используйте разные рабочие столы с помощью закладки. Простой, быстрый в использовании - нажмите ключ и престо, другой рабочий стол. Вы можете даже выбирать между ними, если хотите.
-
Используйте C-x p K (по умолчанию), чтобы установить заставку рабочего стола. Вам будет предложено указать расположение файла рабочего стола и имя закладки.
-
Используйте C-x j K (по умолчанию), чтобы перейти к закладок на рабочем столе. Вам будет предложено указать имя закладки (с завершением).
Для этого вам нужно Закладка +.
Ответ 5
Попробуйте рабочий стол Emacs.
Перейдите сюда