i3wm 工作区如何快速创建 Emacs 窗口


平铺窗口管理器为了提升显示空间的利用率,一般都有工作区( workspace )的功能,比如 i3wmqtile 默认定义了10个工作区。工作区可以隔离不同的应用,让我们专注当前的工作区,避免无关应用的干扰。

但如果某个程序需要在多个工作区之间共享使用,这种隔离反而变成了一种负担,导致我们需要频繁地在不同工作区之间切换,比如在只有浏览器的 i3wm 工作区开一个 Emacs 窗口来记笔记的时候。

想了一下,这种情况有几种解决办法:

  1. 在工作区之间移动应用

  2. 把应用放到 scratchpad 中,这样在所有的工作区都能够通过下拉 scratchpad 把应用找出来

  3. 如果应用支持多窗口,在任意工作区按需创建新的窗口

第一种方法相对来说过于繁琐,后两种方法里,我更习惯用第三种方法。那么如何实现呢?

我们都知道, Emacs 中可以通过命令 M-x make-frame-command (C-x 5 2) 来分出一个新的窗口,那有没有办法在没有 Emacs 窗口的工作区中触发执行这个命令呢?

好在 Emacs 有一种本机的 C/S 机制, Emacs 打开 server 功能之后, emacsclient 客户端就可以连接进来。

基于此,再结合 i3wm 的绑定按键功能,我们就可以实现快速创建 Emacs 窗口,具体做法是:

  1. 在 Emacs 配置中开启 server 功能: (server-start)

  2. i3wm 绑定按键来执行命令: bindsym $mod+e exec --no-startup-id emacsclient --eval '(make-frame-command)' ,注意必须指定 --no-startup-id 选项才比较可靠

然后重启 Emacs (或者直接 eval (server-start) )且重新加载 i3wm 的配置,就可以通过 mod+e 按键来快速地创建 Emacs 窗口了:

/img/2021-08-29-i3wm-emacs-frame.gif
快速创建 Emacs 窗口
i3wm  Emacs 

也可以看看

comments powered by Disqus