2010/02/11

元旦补记

一百多年前,林则徐在虎门销烟,收缴不法财产,驱逐英国毒贩。结果英军报以军事报复,炮击虎门,攻占定海,血洗镇江,最终与清廷达成南京条约。

2009年的年底,英国公民阿克毛因走私4000克海洛因被中国政府处以死刑。英国政府抗议,首相布朗谴责,欧盟坚决反对,但最终没有任何人与组织与中国政府达成任何条约。

一百多年前的春节,国人长袍马褂,走亲访友,问候拜年,贴春联放鞭炮,吃饺子祭祖先,自有一套过法。

2010年的元旦,看电视报道浦江两岸共庆新年,一派繁华热闹自不必说。零点时分,万众瞩目的玻璃幕墙上打出的是一行大字:Happy New Year

2010/02/08

在Windows里通过在鼠标右键菜单打开Emacs

虽然通过使用IBuffer已经可以很方便地在Emacs里随机访问文件夹里的某个文件了,但有的时候还是想在文件夹里直接通过Windows鼠标右键菜单在Emacs里打开特定文件。网上有很多地方介绍了方法,但没有能直接试成功的,总需要自己再稍微做一些修改。由于颇花了些时间,值得在这里记录一下,免得日后忘掉,或者给后来人做参考:

首先要修改注册表,为文件和目录添加鼠标右键菜单:创建一个reg文件,双击导入注册表就可以了。我的reg文件的内容如下:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell]
[HKEY_CLASSES_ROOT\*\shell\openwemacs]
@="Edit with &Emacs"
[HKEY_CLASSES_ROOT\*\shell\openwemacs\command]
@="c:\\green\\emacs-22.3\\bin\\emacsclientw.exe --server-file=d:\\.emacs.d\\server\\server --alternate-editor=C:\\green\\emacs-22.3\\bin\\Emacs.bat -n \"%1\""
[HKEY_CLASSES_ROOT\Directory\shell\openwemacs]
@="Edit &with Emacs"
[HKEY_CLASSES_ROOT\Directory\shell\openwemacs\command]
@="c:\\green\\emacs-22.3\\bin\\emacsclientw.exe --server-file=d:\\.emacs.d\\server\\server --alternate-editor=C:\\green\\emacs-22.3\\bin\\Emacs.bat -n \"%1\""

emacsclientw的意义是通知emacs服务打开指定的某个文件。它通过"--server-file"来找到后台运行的emacs服务,在连接emacs服务失败之后使用"--alternate-editor"来打开指定的文件。因此其具体效果就是当有emacs实例在运行时,在该实例里打开指定文件,否则新建一个emacs实例,然后在其中打开文件。可以通过执行

"emacsclientw.exe --help"

来查看emacsclientw命令的帮助。很显然,emacs服务在启动时应该设置一个跟"--server-file"对应的标记,以便emacsclientw稍后能够检测到它。这可以通过设置全局变量"EMACS_SERVER_FILE"来完成,这里马上就会讲到它。

其次,在emacs启动的时候,顺带启动emacs服务,以便将来emacsclientw可以与之交互。这可以通过在emacs设置文件".emacs"里添加一句话来完成

(server-start)

最后要设置相应的环境变量。我不喜欢在系统环境变量里添加太多的东西,因此写了一个批处理文件,每次试图启动emacs时执行这个批处理文件,将环境变量的作用域局限在这个Shell中。如果你使用了别的路径或者文件,那么前面的注册表文件需要做相应的修改:

@echo off
set HOME=D:\
set EMACS_SERVER_FILE=D:\.emacs.d\server
set PATH=C:\green\unixUtils;%PATH%
start c:\green\emacs-22.3\bin\runemacs.exe %1 %2 %3 %4

跟直接用runemacs打开文件不同,使用上述方法可以只在一个emacs的实例里打开多个文件,这不光使得emacs窗口更加紧凑,在某些情况下还会有额外的便利(比如使用”desktop”插件时)。上述方法的一个缺点是当emacsclientw连接emacs服务失败时,在启动一个新的emacs实例之前会跳出一个错误对话框。不过没什么影响,直接点掉就可以了。几个参考链接:

Setting up Emacs on Windows | irisquest.net
EmacsWiki: Emacs Client
How to create a right-click context shell shortcut "edit with Emacs"? - Stack Overflow

2010/02/04

对话练习

转自乔妈博客。我的博文越来越少,越来越短了......

我:乔,刚才谁给你打电话了
乔:爸爸
我:爸爸想你吗
乔:想你
我:爸爸在哪里
乔:上海
我:爸爸干吗了
乔:上班
我:上班干吗
乔:赚币
我:赚币给谁
乔:乔
我:给乔干吗用
乔:买包包!
注:“包包”是面包而不是背包