【问题标题】:What is the best Emacs workspaces plugin? [closed]什么是最好的 Emacs 工作区插件? [关闭]
【发布时间】:2012-07-01 02:43:24
【问题描述】:

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

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

【问题讨论】:

标签: linux emacs aquamacs workspace


【解决方案1】:

我使用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))

【讨论】:

  • 我希望切换到另一个工作组会关闭与旧工作组关联的所有缓冲区并打开新的缓冲区,而不是只是打开新的。
  • workgroups 在缓冲区集之间没有适当的切换,加载/保存很痛苦。我很欣赏这个答案,但我认为这不是一个好的解决方案。
  • 我同意恢复 (wg-restore-workgroup) 和更新 (wg-update-workgroup) 可能会很痛苦,因为它需要纪律。你可以做一些钩子来自动化它,但它确实应该是内置的。加载和保存可以很容易地自动化,例如像我一样使用自动保存挂钩。我很久以前就不再关心开放缓冲区了。我每隔几天就会清除其中一些,并且 ido 模式使切换变得容易。我现在有 91 个缓冲区打开。
  • 我明白你的意思。实际上,我一直在寻找一个像样的工作空间和缓冲区组织模式/插件,但没有运气。工作组是我见过的最体面的东西之一,但它们缺少一些功能。
  • 这个能和IDE(eclipse) PROJ比吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我没有尝试使用多个桌面文件,它有效吗?我认为它更适合在 Emacs 重启时保存状态,它做得很好。
    • 是的,它可以:我们可以将桌面文件保存在给定目录 (desktop-save-in-directory) 中,然后将其读回(带有 desktop-read 的参数)。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      HIROSE Yuuji 的revive.el 对我来说已经很长一段时间了。我使用 revive.el 中 cmets 中提供的标准配置。该文档写得很好,并且 revive 非常易于使用和配置。特别是,revive.el 比一些更复杂的配置有更好的支持。和广濑雄二的windows.el结合起来特别好。他们被要求一起工作。 windows.el 可以调用窗口拆分等。revive.el 的构建着眼于针对特定设置的更深层次模式集成的可扩展性。但就我的使用而言,我发现它开箱即用非常好,尽管我想我接下来会对其进行调整以恢复我目前没有设置的 w3m 窗口(更新:我现在做:见底部)。

      这是我的复活配置。我包含了一些有用的 cmets,首先是 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 日星期一更新:现在我可以在 revive 中恢复 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)
      

      【讨论】:

        【解决方案6】:

        抛射模式可以实现你所想:

        在项目中切换缓冲区:projectile-switch-to-buffer

        切换项目:projectile-switch-to-project

        我有这样的事情:

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

        【讨论】:

          猜你喜欢
          • 2010-09-08
          • 2011-06-24
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          • 2010-10-09
          • 2010-11-28
          • 1970-01-01
          • 2010-10-04
          相关资源
          最近更新 更多