EMACS-DOCUMENT

=============>集思广益

使用Emacs作为我的窗口管理器

大多数雇用我的公司在我入职时都会发我一份工作用的笔记本电脑. 当然我是区分的开工作与生活的边界的,因此我不会在上面安装个人软件.

然而我也不想仅仅为了记录私人笔记而带两台电脑来上班. 我的解决方法是安装一套虚拟化系统并创建一个个人用的虚拟机. (我的工作就是构建cloud software,这意味着我总是在运行一些虚拟机)

我希望经可能减少这个虚拟机对我工作的影响,因此我安装的是Server版的Ubuntu. 然而我也希望有一些图形界面,因此我还安装了其他一些东西:1

sudo apt-get install -y xinit

既然我做的最多的是用org-mode相关的额事情,下一步操作就是:

sudo apt-get install -y emacs

我试过了很多window manager,其中有一些window manager是很轻量级. 但是我所需要的只是一个运行于full-screen mode中的emacs而已(为了尽可能的利用屏幕空间).2

为了实现我的需求,我创建了一个 .xinitrc 文件,其中只有这么一句内容:

exec emacs

是的,你没看错,Emacs就是我的window manager. 我将下面配置加入到我的Emacs初始化文件 init.el 中:

(set-frame-parameter nil 'fullscreen 'fullboth)

现在我可以将屏幕分成多个window,在编辑文件时运行程序了–所有这些操作都无需用到鼠标. 而且由于Emacs是运行在图形界面下的,我还可以使用喜欢的字体,美化外围的滚动条.

new-window-manager-1.png

若我要运行的程序与Emacs兼容不是那么好,我还可以使用 M-! xterm 来调用xterm(其他程序也是一样的调用方式).

1 Web Browsing

与上世纪不同,在本世纪你根本无法离开网络应用了. 我上网一般都是为了搜索代码文档和其他的技术资料,这些工作完全可以交由那些内嵌于Emacs的基于文本的浏览器(比如 w3meww)来完成.

若浏览的网页渲染的不好(可能要执行JavaScript), 我只要按下 & 键就会调起一个外部网络浏览器来浏览当前页面3. 你可以调用图形化的浏览器来浏览特定的URL,只需要调用类似下面的函数就行了:

(start-process "" nil "xdg-open" "http://mail.google.com")

需要留意的是,在没有一个真正的window manager的情况下运行X window应用可能会让你无法再操作Emacs了,但这只是暂时的,关闭这个应用后,你又会回到Emacs中:

new-window-manager-3.png

Update: 我写了本章之后,许多人推荐了一些轻量级的window manager. 若你希望同时使用浏览器与Emacs的话,可以试试Ratpoison4 (DWM也不错).

2 Other Applications

我知道不是所有人都适应在Emacs中运行一堆shell程序, 但是目前来看,将Emacs作为我的整个Linux桌面效果还蛮不错的. 尤其是我可以将frame分割为多个windows分别运行:

我还定义了一个函数用来一次性启动所有那些我喜欢的的程序:

(defun setup-windows ()
  "Organize a series of windows for ultimate distraction."
  (interactive)
  (delete-other-windows)

  ;; Start with the Stack Overflow interface
  (sx-tab-frontpage t nil)

  ;; Put IRC on the other side
  (split-window-horizontally)
  (other-window 1)
  (circe-connect-all)

  ;; My RSS Feed goes on top:
  (split-window-vertically)
  (elfeed)

  ;; And start up the Twitter interface above that:
  (other-window 2)
  (split-window-vertically)
  (twit)

  (window-configuration-to-register ?w))

左后哪行代码会将当前的window排布信息存入一个register中,这样当我搞乱我的windows布局时,只需要按下 C-x r j w 就能回到原始的这个布局了.

new-window-manager-2.png

3 Footnotes:

Footnotes:

1

由于我主要是用我的虚拟机来记录笔记,因此我需要安装ispell或其他类似的软件:

apt-get install -y ispell

我还通过下面步骤来安装VirtualBox extensions:

sudo apt-get install -y build-essential
sudo mount /dev/cdrom /mnt
sudo /mnt/VBoxLinuxAdditions.run
2

在某次会议上记笔记时,一个做我后面的人在会后问我用的是哪个window manager. 我告诉他这是个很普通的Mac,只是运行了一个全屏的Emacs,其中打开了一些org文件,一个内嵌的 w3m 浏览器以及一个基于Emacs的twitter客户端而已.

3

随便说一下,要让EWW使用Chromium,将下面配置加到你的配置文件中:

(setq shr-external-browser "chromium-browser")
4

物如其名, Ratpoison window manager 是一个小巧的,无需鼠标操作的的窗口管理器, 但是它默认的escape key, Control-t刚好是Emacs中用来交换字符的快捷键. 没办法,我只好将交换字符的快捷键设置为设置 C-t t,这个快捷键还行. 但是交换行的快捷键设置为了 C-x C-t t, 这个快捷键若只是偶尔交换两行内容那还可以接受,但是我常常要交换多行内容,这就要人命了.

为了让Ratpoison完全与Emacs兼容,最好将它的escape key设置为Command(有些键盘可能是Window键)的键序列(比如Command-t这类键序列). 要做到这一点,只需要将下列配置放到你的 ~/.ratpoisonrc 中就行了:

escape s-t

Note: 我收到了很多这类的替代方案, Josuah Demangeon 建议使用 2wm. 虽然我依然推荐ratpoison,但是他的经历简直和我一模一样,因此我想还是附上他的email吧…何况,更多选择总是好的嘛,对吧.

TL;DR - 2wm是最小的平铺式窗口管理器

你的文章给了我灵感,于是我决定去寻找能使Emacs很好的运行于X11上的最小的窗口管理器.

我试过tinywm, 但是它完全是鼠标驱动的,而且要修改它的工作量就好像是从开发一个窗口管理器一样.

我试过了一下evilwm, 它很棒,但是我无法将它调整为我想要的那样子.

我又试了一下dwm: 这是一个很棒的窗口管理器,由suckless出品,有很多功能. 但是我觉得它的功能太多了点,而且它的体验也不像是Emacs. 幸运的是,在浏览了suckelss的网站之后, 我找到了2wm

2wm是一个完全由键盘控制的平铺式窗口管理器,它也同时支持浮动窗口.

对我来说, 2wm能让Emacs最贴近于X11,它也是最终的窗口管理器!

若你想试一下2wm,可以看看我的仓库. 我优化了一下它的快捷键使之更适于Emacs.