希望能达到这种效果:
我在一个窗口中编辑代码,左右分割。左边一个文件,右边是另一个文件。或者还有上下分割。。这是布局1.
另一个窗口中编辑配置文件。同样上下或者左右分割了窗口。这是布局2.
我需要在这两个布局之间换来换去。所以,我希望这两个布局是被记住的而且可以切换。
目前非常近似的解决办法:
用ivy-push-view。几乎80%达到了这个效果。问题是比如:布局1已经保存,左边的窗口打开的是a.c,编辑了a.c 并且从a.c跳转到了a.h。这时候我切换到布局2,又切换回布局1的时候。会重新回到保存布局1的状态(左边窗口开着的是a.c)。但是我希望的效果是布局1始终保留最后的编辑状态。ivy-push-view无法达到这个要求。
目前我自己的解决办法:
我用tmux开多个pane作为布局。在pane中开emacsclient。这样在不同pane之间切换。是会保留布局和最终编辑状态的。
不知道emacs本身有没有什么办法能解决这个问题?
也许可以试试 workgroups2 或者 rotate
(current-window-configuration) 获取当前窗口布局
(set-window-configuration) 设置当前窗口布局
这两个函数就够了,比如在两个窗口布局之间切换
(defvar window-conf nil)
(defun my/toggle-window()
(interactive)
(let ((next-window-conf window-conf))
(setq window-conf (current-window-configuration))
(if next-window-conf
(set-window-configuration next-window-conf)
(message "Remembered current window configuration"))
))
使用自带的 tab-bar-mode,然后开两个 tab,这两个 tab 对应的是你所说的两种窗口的布局。
ps:emacs 自带的有两种 tab 模式,一种是 tab-line 是类似 vscode 之类的一个 buffer 一个 tab,tab-bar-mode 是 类似 vim 的一组窗口布局是一个 tab。
(tab-bar-history-foward)
和 (tab-bar-history-backward)
可以在该 tab 的窗口布局之间前进和回退,类似winner-mode。
1 个赞
o2o
6
我的方法是用自带的tab-bar 在一个window中来回切换buffer,然后用perspective-el 记住整个frame的window布局。
我这里找不到current-window-configuration那两个函数。
找不到是什么意思,这两个函数是内置的,不会找不到的
上面那段代码你执行了吗,把报错贴出来才知道什么问题
我添加到 init.el中重启了。
M-x 有 my/toggle-window 这个函数。但是没有
(current-window-configuration) 获取当前窗口布局
(set-window-configuration) 设置当前窗口布局
这两个函数
刚才试了一下,貌似是我要的效果,我研究一下怎么弄得快一点。用tmux的pane新建,关闭,切换,还是非常快的。
试了一下。目前tabbar是要的效果。但是操作起来还是不如我之前的tmux方式快。但好歹不依赖tmux了。
另外GitHub - knu/elscreen: elscreen patched to work with recent Emacs 也可以解决这个问题,但它用起来稍微有点问题。就是在一个screen中切换buff的时候,会跳到另一个screen中。
你用 evil 吗 这个是我的 tab-bar 的快捷键。
用起来和 tmux 我觉得效率没啥区别,都是按三个键
(general-create-definer my/tab-map
:prefix "SPC TAB"
:non-normal-prefix "M-SPC TAB"
:prefix-map 'my/tab-map)
(my/tab-map
:states '(motion insert normal)
:keymaps 'override
"" '(:ignore t :which-key "Tab")
"n" #'tab-bar-new-tab
"c" #'tab-bar-close-tab
"o" #'tab-bar-close-other-tabs
"]" #'tab-bar-switch-to-next-tab
"[" #'tab-bar-switch-to-prev-tab
"{" #'tab-bar-history-back
"}" #'tab-bar-history-forward
"b" #'tab-bar-move-window-to-tab
;; move current window to a new tab (break current tab)
"l" #'tab-bar-move-tab ;; move tab to the right
"h" #'tab-bar-move-tab-backward ;; move tab to the left
"g" #'tab-bar-change-tab-group ;; make group
"TAB" #'tab-bar-switch-to-tab
"1" (my/tab-bar-go-to-tab-macro 1)
"2" (my/tab-bar-go-to-tab-macro 2)
"3" (my/tab-bar-go-to-tab-macro 3)
"4" (my/tab-bar-go-to-tab-macro 4)
"5" (my/tab-bar-go-to-tab-macro 5)
"6" (my/tab-bar-go-to-tab-macro 6)
"7" (my/tab-bar-go-to-tab-macro 7)
"8" (my/tab-bar-go-to-tab-macro 8)
"9" (my/tab-bar-go-to-tab-macro 9))
然后 window 有关的窗口创建和移动,evil 有自带的 evil-window-map;我把它绑定到了 SPC w 上来 invoke。
利用系统自带的window-configuration-to-register 不可以么?
zwwang
19
current-window-configuration应该不是interactive,M-x中不会出现
可以用api也可以用第三方插件。楼上很多人推荐的都不错。不重复了。第三方插件的特色是可以恢复一些特殊的buffer并执行一些额外的功能。如能恢复之前的pdf的特定页。
按键多少问题不大。也可能是因为刚试用的缘故。用习惯了估计也就不会觉着慢了。