5
2
2011
5

只让Emacs以守护进程模式运行

这里又写到废话了,如果你想直接要一个可以运行的办法,请直接跳转到III的第二个脚本。

I. Why?

众所周知,Emacs如此庞然大物,在不进行任何配置的情况下,启动速度还说得过去,要是.emacs里面有上几千几百行的,那这个速度就……

II. What?

咳咳,不说伤心往事了,其实Emacs最近的版本提供了“守护进程”(什么?你居然不知道守护进程?你用的是Windows吧?),也就是让它在后台运行,如果再次运行,找到了守护进程的话,就可以立刻进入运行状态。

III. How?

要启动Emacs的守护进程,就用 emacs --daemon。

要用这个daemon运行,就执行 emacsclient -a "" -c。

这里,-c指GUI模式,-t指终端模式,指定-nw后会覆盖-c语义。如果它没找到守护进程,就会调用 emacs --daemon ,然后重试。

但是每次运行都得入终端或者用“运行”,太麻烦了,点菜单的话进入的还是 emacs ,就把daemon忽略了……

好吧,我去alias一下,可是发现只在终端下有用,555,没办法了么,不过嘛,办法还是有的,当然不是改启动器,很简单,就是在/usr/bin下写一个emacs同名脚本,执行emacsclient,这招我常用,也很实用。

(注意,这里的操作全部需要root权限。另外,所建立的emacs脚本必须用chmod +x emacs赋予执行权限)

首先,进/usr/bin,把emacs重命名成run-emacs(mv emacs run-emacs,当然也可以随你所愿,比如emacsserver啥的,我用的是emacs-23)。然后建立一个脚本,写入如下内容。

#!/bin/sh
emacsclient -a '' "$@" -c

然后,试试从菜单启动,哇,瞬时启动诶!!

不过当你心情很好地重启后,却发现不能启动了……哦,想想前面提到的,emacsclient是用emacs --daemon启动守护进程的!这样,emacs已经被我们重写了,指向的是emacsclient,但是emacsclient没有--daemon参数,所以,怎么办?很简单,建立一个if判断。

#!/bin/sh
if [[ "$1" = "--daemon" ]] #可以处理$1为空的现象
then
    run-emacs --daemon
else
    emacsclient -a '' "$@" -c
fi

哈哈,这下就完美了,如果没有启动,也可以自动切到run-emacs上。

IV. Notes

但是我们要说的是,Emacs的守护进程相当笨,它居然不会自动检查.emacs或其他配置有没有修改(其实这也很简单,对吧?),但是当我们折腾Emacs时,总是会改写.emacs,然后需要重启emacs看效果,怎么办?这也没办法,只能先pkill掉run-emacs,然后再运行emacs。

这次没好好写,大家谅解。

Over~

Category: 技术 | Tags: | Read Count: 5055

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Powered by Chito | Hosted at is-Programmer | Theme: Aeros 2.0 by TheBuckmaker.com