大家都是怎样管理 window layout 的?

我发现有相似功能的包很多, persp,window-purpose,eyebrowse 等等。你用的什么包?有没有什么 best practices?

不管理。因为屏幕只有13寸,日常最多开两个Frame,不分割window。使用frame不使用window是因为使用window无法同时查看多个应用程序窗口。

用 spacemacs 的 project layouts,一个 project 一个 layout

1 个赞

这个办法不错,能不能具体说说怎样操作的?比如怎样保存 project layout?

SPC p l 创建一个 project layout

SPC l s/S save current open layouts (to a file)

SPC l L load layouts from file

1 个赞

SPC p l 在我这是别的函数:

你那里绑定的函数名是什么?

应该是类似的,只不过我用 helm

我的绑定是: (spacemacs/helm-persp-switch-project ARG)

1 个赞

另外我写了一个可以左右移动 layout 的配置:

还有一个类似于 spacemacs/alternate-buffer 的函数,可以切换到上一个激活的 layout

1 个赞

左右移动是指?是在同一个 frame 下切换吗?

比如,这是 layout 列表:

prjA | prjB | prjC | prjD

现在 想让 prjB 挪到最后面去,变成:

prjA | prjC | prjD | prjB

那么首选选中 prjB,然后按两下 > 就可以了

我有这个需要是因为,我通常打开的 layout(project) 比较多,也比较固定,所以我切换 project 都不看 layout 列表中的显示,预先背下来每个 layout 的索引,直接 SPC l n (n 是自然数,我实际配置的是 s-n)切换就可以了,但是有的时候我需要临时打开别的项目,这样就把我背下来的那个默认的 layout 列表顺序打乱,我就需要调整一下某个 layout 在列表中的顺序

2 个赞

这个好像和 eyebrowse 提供的功能有点相似

非常感谢!学到了不少东西

我只用了 persp-mode,persp-mode 里也可以再套 eyebrowse,但是感觉这样太复杂了

是的,确实有点。我还混合了 window-purpose 用 :joy: ,因为有时我不想弹出窗口破坏我当前的布局

我正在寻觅这个功能! 感觉用layout太复杂了,我只想不破坏一个临时出现的窗口布局,不需要保存成layout(就算保存了,可能以后我也就忘了),不知道该怎么实现,楼主有没有什么好的经验?

就用 window-purpose 就行,spacemacs develop 中已经集成了这个包。

可以为每个窗口定义一个 purpose,不满足 purpose 的 buffer 不会出现在这个窗口。

谢谢!

我看了一下 window-purpose, 用到这两个函数实现了:

purpose-save-window-layout: save current layout (by name)
purpose-load-window-layout: load layout (by name)

第一个函数还是把 layout 保存到了本地。 第二个函数根据 layout 的名字载入保存过的layout。

感觉载入layout时还是会记不住保存过的layout都是干啥的啊。


刚看到论坛里也有讨论这个功能的,Emacs暂存窗口layoutivy-push-view保存的是

一个类似于 {} bufname1 bufname2 xxx这样的一个view

不仅有“layout”的名字,还列出了buffer,似乎更加好用。

Mac,用karabiner把右command映射成单按ESC,组合Hyper(就是下面的C-H-M(-S)-[1234]),然后设置下面的keybinding:

  • 右command+1234切换layouts
  • 左command+1-9切换/创建workspace
  • option-1234... 切换窗口
  (global-set-key (kbd "C-H-M-!") 'spacemacs/[email protected] )
  (global-set-key (kbd "[email protected]") 'spacemacs/[email protected] )
  (global-set-key (kbd "C-H-M-#") 'spacemacs/[email protected] )
  (global-set-key (kbd "C-H-M-$") 'spacemacs/[email protected] )

  (global-set-key (kbd "H-1") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-1-and-exit)
  (global-set-key (kbd "H-2") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-2-and-exit)
  (global-set-key (kbd "H-3") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-3-and-exit)
  (global-set-key (kbd "H-4") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-4-and-exit)
  (global-set-key (kbd "H-5") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-5-and-exit)
  (global-set-key (kbd "H-6") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-6-and-exit)
  (global-set-key (kbd "H-7") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-7-and-exit)
  (global-set-key (kbd "H-8") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-8-and-exit)
  (global-set-key (kbd "H-9") 'spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-9-and-exit)

我现在用 spacemacs 默认的 layout 管理,主要是基于 project 进行管理

  1. SPC p l 创建基于项目的 layout
  2. SPC l 1, 2, 3... 切换 layout,或者用 SPC l TAB 切换为上一个 layout
  3. SPC l w 1, 2, 3... 切换工作区,如果数字没有对应的工作区,就会自动创建一个。工作区默认是匿名的。
  4. SPC 1, 2, 3... 切换窗口

modeline 最左侧显示 layout 名,然后是工作区(子 layout),最后是窗口号。

试用一段后表示 spacemacs (develop branch) 的默认已经够我用的了。

3 个赞

SPC p l 创建的 layout 在重启 spacemacs 后就没有了,能将其保存吗?