什么是最好的Emacs工作区插件?

时间:2012-06-29 14:47:29

标签: linux emacs aquamacs workspace

按工作空间,我的意思是 - 我需要保存我的打开缓冲区的状态(可能在用户指定的工作区文件中)并快速切换到另一组打开的缓冲区,例如继续处理与另一个项目相关的文件。

是否有允许这样的Emacs插件?你会推荐哪一个?

6 个答案:

答案 0 :(得分:10)

我使用save-visited-filesworkgroups的组合。事实上,工作组可能会完成你想要的大部分工作。

我的配置:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 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))

答案 1 :(得分:6)

就个人而言,我一直在使用`persp-mode'

  

emacs的视角,基于Nathan Weizenbaum的perspective-el。   但是框架之间共享的视角+从/向文件保存/恢复的能力。

答案 2 :(得分:2)

desktop.el将对您的情况有所帮助。

它可以(从其介绍页面复制)从emacs包缓冲区:

保存桌面,即      - 一些全局变量      - 具有相关文件的缓冲区列表。对于每个缓冲区也          - 主要模式          - 默认目录          - 重点          - 商标&标记活跃          - 缓冲区只读          - 一些局部变量

答案 3 :(得分:2)

如果您使用的是Linux / Gnome3,可以试用此扩展程序:https://extensions.gnome.org/extension/361/emacs-manager/ 此扩展允许您通过管理多个emacs守护程序同时处理不同的项目,并保存/恢复缓冲区的状态。

答案 4 :(得分:2)

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.elslightly modified clone on github等变体,但我更喜欢原作。

2015年1月12日星期一更新:现在我可以恢复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)

答案 5 :(得分:0)

弹丸模式可能实现您的目标:

要在项目中切换缓冲区,请执行以下操作:projectile-switch-to-buffer

要切换项目:射弹切换到项目

我有这样的东西:

(global-set-key (kbd "C-x b") '(λ ()
                                (interactive)
                                (if (projectile-project-p) 
                                    (call-interactively 'projectile-switch-to-buffer)
                                (call-interactively 'ivy-switch-buffer))))

(global-set-key (kbd "C-x B") 'ivy-switch-buffer)