Какой лучший плагин для рабочих областей Emacs?

По рабочей области, я имею в виду - мне нужно сохранить состояние моих открытых буферов (возможно, в указанном пользователем файле рабочей области) и быстро переключиться на другой набор открытых буферов, например. продолжить работу над файлами, связанными с другим проектом.

Есть ли плагин Emacs, который позволяет это? Какой из них вы бы порекомендовали?

Ответы

Ответ 1

Я использую комбинацию save-visited-files и workgroups. Фактически, рабочие группы, вероятно, будут делать большую часть того, что вы хотите сами по себе.

Моя конфигурация:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; workgroups for windows

(setq wg-prefix-key (kbd "C-c z")
      wg-no-confirm t
      wg-file (concat emacs-persistence-directory "workgroups")
      wg-use-faces nil
      wg-switch-on-load nil)

(defun wg-load-default ()
  "Run `wg-load' on `wg-file'."
  (interactive)
  (wg-load wg-file))

(defun wg-save-default ()
  "Run `wg-save' on `wg-file'."
  (interactive)
  (when wg-list
    (with-temp-message ""
      (wg-save wg-file))))

(with-library 'workgroups
  (define-key wg-map (kbd "C-l") 'wg-load-default)
  (define-key wg-map (kbd "C-s") 'wg-save-default)
  (workgroups-mode 1)
  (add-hook 'auto-save-hook 'wg-save-default)
  (add-hook 'kill-emacs-hook 'wg-save-default))

Ответ 2

Лично я использовал ` persp-mode ':

Перспективы для emacs, основанные на perspective-el Натана Вайзенбаума. Но перспективы были разделены между кадрами + возможность сохранения/восстановления из/в файл.

Ответ 3

desktop.el будет полезен в вашей ситуации.

Он может (скопирован со страницы введения) из буфера пакетов emacs:

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

Ответ 4

Если вы используете Linux/Gnome3, вы можете попробовать это расширение: https://extensions.gnome.org/extension/361/emacs-manager/ Это расширение позволит вам работать с разными проектами одновременно, управляя несколькими демонами emacs и сохранять/восстанавливать состояние буферов.

Ответ 5

HIROSE Yuuji revive.el неплохо поработал у меня в течение некоторого времени. Я использую стандартную конфигурацию, представленную в комментариях в revive.el. Документация хорошо написана, и оживление очень простое в использовании и настройке. В частности, revive.el имеет лучшую поддержку, чем некоторые для возрождения конфигураций, которые немного сложнее. Особенно приятно, если вы объедините его с HIROSE Yuuji windows.el. Они созданы для совместной работы. windows.el позволяет вспомнить разбиение окон и т.д. revive.el строится с прицелом на расширяемость в сторону интеграции более глубокого режима для конкретных настроек. Но для моих целей я обнаружил, что это довольно неплохо из коробки, хотя я думаю, что буду потом настраивать его, чтобы оживить w3m-окна, которые у меня сейчас нет. (Обновление: теперь я: см. Снизу).

Вот мой обновляющий конфиг. Я включаю некоторые полезные комментарии, сначала для windows.el, а затем revive.el inline:

(provide 'my-revive-config)

(require 'windows) ; use this with revive so that window splits are recallable
                   ; too

(win:startup-with-window) ; start with window 1


;;;[Key Bindings]
;;;
;;;   The default prefix key stroke for Windows is `C-c C-w'.  If it
;;; causes  you some  troubles, see  the  section  `Customizations'.
;;; Here are the default key bindings.
;;;
;;;     C-c C-w 1       Switch to window 1 (Q)
;;;     C-c C-w 2       Switch to window 2 (Q)
;;;        :
;;;     C-c C-w 9       Switch to window 9 (Q)
;;;     C-c C-w 0       Swap windows with the buffer 0 (Q)
;;;                 (Select unallocated frame(Emacs 19))
;;;     C-c C-w SPC     Switch to window previously shown (Q)
;;;     C-c C-w C-n     Switch to next window
;;;     C-c C-w C-p     Switch to previous window
;;;     C-c C-w !       Delete current window (Q)
;;;     C-c C-w C-w     Window operation menu
;;;     C-c C-w C-r     Resume menu
;;;     C-c C-w C-l     Local resume menu
;;;     C-c C-w C-s     Switch task
;;;     C-c C-w =       Show window list (Q)
;;;
;;;   The  key strokes  to  select  windows from  1    to 9 must  be
;;; frequently used, so the alternative key strokes `C-c [Num.]' are
;;; available  by default  (And  any  function  with (Q)mark can  be
;;; invoked without  C-w).  To disable these  quick key strokes, set
;;; the variable win:quick-selection to `nil' in your ~/.emacs.

(autoload 'save-current-configuration "revive" "Save status" t)
(autoload 'resume "revive" "Resume Emacs" t)
(autoload 'wipe "revive" "Wipe Emacs" t)

(define-key ctl-x-map "S" 'save-current-configuration)
(define-key ctl-x-map "F" 'resume)
(define-key ctl-x-map "K" 'wipe)

;;;
;;;[How to use]
;;;
;;;  Call `save-current-configuration' (`C-x S' if you define key as
;;; above) when you want to save current editing status and call
;;; `resume' to restore it. Numerical prefix arg to them specifies
;;; the buffer number in which the editing status will be saved.
;;; Here the buffer refers to a revive s-exp in ~/.revive.el of
;;; which there can be n
;;;
;;;     [Sample Operations]
;;;     C-u 2 C-x S     ;save status into the buffer #2
;;;     C-u 3 C-x F     ;load status from the buffer #3

Есть варианты этого, которые другие вроде revive-plus.el и слегка модифицированный клон на github, но я предпочитаю оригинал.

Обновление в понедельник, 12 января 2015 г. Теперь я могу восстановить w3m в обновлении (подробности см. в документах revive.el и, в частности, посмотрите на примеры в revive: major-mode-command-alist-default):

(setq revive:major-mode-command-alist-private
      '(("*w3m*"    . w3m)))

Обратите внимание, что вы говорите, как оживить имя буфера w3m. Даже если у вас есть несколько вкладок, нужно перечислять только первый, как указано выше.

Вот переменная w3m, которую я установил для восстановления всех вкладок из предыдущего сеанса:

(setq w3m-session-load-last-sessions t)