【发布时间】:2012-07-01 02:43:24
【问题描述】:
通过工作区,我的意思是 - 我需要保存我打开的缓冲区的状态(可能在用户指定的工作区文件中)并快速切换到另一组打开的缓冲区,例如继续处理与另一个项目相关的文件。
是否有允许这样做的 Emacs 插件?你会推荐哪一个?
【问题讨论】:
-
一个现代的方法是眉毛:github.com/wasamasa/eyebrowse
标签: linux emacs aquamacs workspace
通过工作区,我的意思是 - 我需要保存我打开的缓冲区的状态(可能在用户指定的工作区文件中)并快速切换到另一组打开的缓冲区,例如继续处理与另一个项目相关的文件。
是否有允许这样做的 Emacs 插件?你会推荐哪一个?
【问题讨论】:
标签: linux emacs aquamacs workspace
我使用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))
【讨论】:
workgroups 在缓冲区集之间没有适当的切换,加载/保存很痛苦。我很欣赏这个答案,但我认为这不是一个好的解决方案。
就我个人而言,我一直在使用`persp-mode':
emacs 的观点,基于 Nathan Weizenbaum 的
perspective-el。 但是框架之间共享的视角+从/到文件保存/恢复的能力。
【讨论】:
desktop.el 将对您的情况有所帮助。
它可以(从它的介绍页面复制)来自 emacs 包缓冲区:
保存桌面,即 - 一些全局变量 - 带有关联文件的缓冲区列表。对于每个缓冲区也 - 主要模式 - 默认目录 - 重点 - 标记和标记激活 - 缓冲区只读 - 一些局部变量
【讨论】:
desktop-save-in-directory) 中,然后将其读回(带有 desktop-read 的参数)。
如果你使用的是 Linux/Gnome3,你可以试试这个扩展:https://extensions.gnome.org/extension/361/emacs-manager/ 此扩展将允许您通过管理多个 emacs 守护进程并保存/恢复缓冲区状态来同时处理不同的项目。
【讨论】:
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.el 和 slightly 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)
【讨论】:
抛射模式可以实现你所想:
在项目中切换缓冲区: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)
【讨论】: