Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

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

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

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

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

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

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

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

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

exec emacs

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

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

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


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

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

Web Browsing

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

若浏览的网页渲染的不好(可能要执行javascript), 我只要按下 & 键就会调起一个外部网络浏览器来浏览当前页面[fn:4]. 你可以调用图形化的浏览器来浏览特定的URL,只需要调用类似下面的函数就行了: (start-process "" nil "xdg-open" "http://mail.google.com")

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


使用Emacs作为我的窗口管理器.org
Update: 我写了本章之后,许多人推荐了一些轻量级的window manager. 若你希望同时使用浏览器与Emacs的话,可以试试Ratpoison[fn:5] (DWM也不错). Other Applications

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

IRC Twitter RSS Feed Reader Stack Exchange Google Talk/Jabber

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

(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 就能回到原始的这个布局了.


使用Emacs作为我的窗口管理器.org
Footnotes: [fn: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 [fn:2]

当我阅读那些window manager项目的修改日志时总是感觉很好笑.

一开始他们总是说其他window manger都太臃肿了,这个window manager的目标是精简而高效.

然后随着项目的发展,就会有人提到说这个window manager需要启动菜单,最小化窗口时需要有半透明的图像,要有dock和panel…一下子这个项目又变得跟其他竞争者一样臃肿了.

这也没什么… 编写window manager是一件很好玩的事情.

[fn:3]

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

[fn:4]

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

(setq shr-external-browser "chromium-browser") [fn:5]

物如其名, 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.


Viewing all articles
Browse latest Browse all 11063

Trending Articles