Какие альтернативные менеджеры сессий доступны для Emacs? - PullRequest
14 голосов
/ 11 мая 2009

Я прочитал страницу в Emacs wiki , которая содержит список плагинов диспетчера сеансов. Но, попробовав все это, я все еще не доволен ни одним из них.

Для сравнения: менеджер сеансов VIM сохраняет и загружает сессии по имени, что для меня является одной из наиболее важных функций.

В частности, мне нужен менеджер сеансов для Emacs, который:

  • Управление сессиями по имени
  • Сохранение вкладок, экранов, рамок и т. Д.

Я пытаюсь использовать Emacs, потому что он обладает действительно хорошими функциями, но хороший менеджер сеансов важен для моего рабочего процесса.


Связанный:

Ответы [ 5 ]

34 голосов
/ 11 мая 2009

Так как вам не нравится базовая функциональность 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))

EDIT

Получив несколько голосов, добавьте такие тонкости, как завершение чтения и история

4 голосов
/ 11 мая 2009

Уже ответили:

Подробное разъяснение ваших требований позволяет нам предоставить вам более конкретное решение.

Редактировать

Режим рабочего стола позволяет вам иметь более одного сеанса - сохраненные рабочие столы не имя , а основанные на каталогах.

Из главы Сохранение сеансов Emacs :

Вы можете сохранить текущий рабочий стол и перезагрузить один сохраненный в другой каталог набрав M-x desktop-change-dir.

Кроме того, переменная desktop-path позволяет вам определить список каталогов для поиска сохраненных рабочих столов.

Редактировать 2

Фрагмент кода Elisp, отправленный scottfrazer , позволяет вам назвать ваш сеанс, так как в фоновом режиме он переводит имя в правильное имя каталога для режима рабочего стола.

2 голосов
/ 05 декабря 2012

Для буферов / вкладок, сохраняющих / восстанавливающих части вопроса: Я использую 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)

EDIT

Я изменил "if (desktop-read)" в elscreen-restore, на "if (eq (type-of (desktop-read)) '' symbol)", потому что, если emacs уничтожается, а не закрывается в обычным способом файл .emacs.desktop.lock не удаляется. Таким образом, если по какой-либо причине сеанс рабочего стола не может быть восстановлен, возвращаемое значение «(desktop-read)» является «строкой», объясняющей ошибку, а не «nil», поэтому «if» не терпит неудачу, так как должен.

1 голос
/ 02 ноября 2011

Использование разных рабочих столов по , закладки им. Простой, быстрый в использовании - нажмите клавишу и Presto, другой рабочий стол. Вы можете даже ездить на велосипеде среди них, если хотите.

  • Используйте C-x p K (по умолчанию), чтобы установить настольную закладку . Вас попросят указать местоположение файла рабочего стола и имя закладки.

  • Используйте C-x j K (по умолчанию), чтобы перейти на рабочий стол с закладками. Вам будет предложено ввести имя закладки (с завершением).

Для этого вам необходимо Добавить в закладки + .

0 голосов
/ 11 мая 2009

Попробуйте Emacs для рабочего стола. иди сюда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...