June 2010 Archives

June 29, 2010

塑料的还是不够结实

自从 2008 年 4 月 1 日我把目前使用的这台 MacBook 买回家后,一直用到了今天。总体上还是令我满意的:操作系统上虽说我从一些细节上更希望用 Linux 一些,但 Mac OS X 与 Linux 也算是各有千秋;我看中 MacBook 的主要还是它的硬件。我上一台笔记本电脑 DELL XPS M1330 的差劲质量实在让我怕了,那台电脑属于 DELL 的家用机系列,没有全球保修,所以一旦出了我修不了的问题,就直接天地不应了。上次就是在学期中间电脑的屏幕坏了,实在给我带来了很多麻烦。

当时我买电脑的时候也从不同品牌的电脑之中挣扎了几下。那一阵子我用 Gentoo 用的正爽,感觉无论从速度上还是从实用性上来说,Gentoo 都能满足我。但我对硬件上的选择没有信心,几年来我用过的笔记本电脑也只有 DELL 和 Thinkpad 的。其它的像宏基什么的,我只给别人修过,具体用上去怎样我不了解。DELL 是不用考虑了,Thinkpad 系列据说对 Linux 的支持挺好的,但在我们这边没有卖的,我也从来没有见过当地人使用 Thinkpad 系列的,而且 Thinkpad 系列的行价比低到了极点,所以从硬件角度上我选择了 MacBook。我买之前一直借用当时室友买的 MacBook,因此对 Mac OS X 也算比较适应了,感觉可以用来完成日常工作,这从软件上加强了我买 MacBook 的信心。当然我买回 MacBook 不久就想着把 Gentoo 安装到 MacBook 上去,结果发现需要配置的东西实在太多——键位映射、鼠标右键、声音、无线网络这些都需要慢慢调整,我最后只能放弃了。如果有人能弄一个 gentoo-macbook 的 portage 来个一键设定就好了。

相比起我过去用过的笔记本来说,MacBook 的硬件质量还是说的过去的。当然中间出过小问题,但都不如上次在 DELL 上的那次严重。有一次我在睡觉的时候把敞开的 MacBook 放在了枕头下面,睡觉起来发现触摸版右侧边缘的地方碎裂了一小块。当时的保修期还没有过,我就去了买电脑的地方,花了一个星期的时间,把整个键盘面板都换新了,感觉不错。

用到现在,除了有时 CPU 使用频率过高,导致风扇转的嗡嗡的烦人外,硬件方面又出了一点比较严重的问题。最近几天,我发现在写程序或浏览文档的时候,光标会莫名其妙的跳到别的地方。我开始以为是我的手掌碰到了触摸板,但观察了一会怎么也觉得不对,应该是不会碰上的。而且我过去用了两年的时间,都没有发生过这种情况,现在不可能一下子手的位置就摆错了。这个问题在写程序的时候比较严重,常常时不时就把程序搞乱,让人发疯。所以在检测出问题来前,我只好小心翼翼的操作。

后来在偶然的机会,我发现了问题的所在。原来在触摸板右侧的垫放手掌的这一块上,稍微用点力往下压,就有了鼠标左键点击的结果,几乎是百试不爽。原来是这边串线了啊。可惜的是保修期过了,苹果的这个保修好像还挺麻烦,需要单独购买他们的整年服务,很麻烦,所以也就没有去修。暂时的解决的方案,就是用外置的鼠标,看看能不能把触摸板给禁用了。之前没有这方面的经验,我也不知道能不能行。

关于 MacBook 的硬件的坚固程度,我虽然相信苹果产品的品质,但心里也会经常有些惴惴。主要是在挪动的时候,总会听见一些解封之间摩擦的声音,接缝也感觉不是很紧密。相比较起来,我看到别人用的铝质外壳的 MacBook Pro 则感觉应该坚固多了吧,特别是后来出了 Unibody 的产品,这方面应该更有优势了。

June 25, 2010

无妄之灾

从小,我就对棍棒、石头一类的东西比较有兴趣。男孩子嘛,对武力这些比较喜欢,当然必不可少的就是武器了。看多了武侠片,小孩子会用一些树枝子来当刀剑,就算不是真的和别人干架,拿在手里“把玩”也很快乐。这类玩具相比较正规的玩具有个好处——成本低。买来的玩具,磕磕绊绊的出了什么故障总会心疼;这种捡来的玩具用坏了丢掉就是了。所以小时候我经常在外面往家里捡垃圾回来,像棍子、石头、电瓶、火花塞都被我捡回来过,我也没少因为这个受家里的数落。

随着年龄的增长,我渐渐的也学会了这方面的克制。小孩子拿一跟棍子在街上走路没什么,像高中生、大学生的也这样做就让人有些别扭了。尽管如此,有的时候我在路上看到了比较合心意的石头(棍子体积太大,已经不行了),也会忍不住拿回家,也算是个安慰吧。

石头当然不是拿来当工艺品来玩收藏玩升值,主要是为了满足我的一些遐想罢了。过去看过影视作品里有关于一种“法器”的描述,有的小东西里面自成空间,可以往里面放很多的东西,我就想如果有这种石头被我捡到了就有趣了。后来就是吧石头想象成“玉玺”,总想捡块石头像和氏壁那样价值连城。有的石头拿在手里确实很和手,我甚至会把它放在枕边,睡觉前也要摸摸。

最近天气暖和了,我平时去运动场的次数也少了,我就觉得放学走路回家也算是一种有氧运动了,于是这几天我都是走路回家的。昨天在路上,我在地上看到一块石头,不知道是为什么,总感觉它在路边特别显眼。

IMG_1724.JPG

本来我昨天就想把它拿上了算了,不过因为我很多年也没有做这种事了,于是就把这个念头给压下去了。不过在那种环境下,这块石头确实给我的印象很深刻。直到我走回了家,我还对这块石头念念不忘。

今天晚上月亮很圆,也很低,在这个还算晴朗的晚上感觉特别漂亮。我走在同一条路上回家,在同一个地点有看到了这块石头,顿时让我感觉跟这块石头很有缘。这次我没有压制把它带回家的欲望,就把它捡了起来,带了回去。

在回去的路上,我就感觉路上的蚊虫似乎特别关照我,身上也莫名其妙的痒。平时我在这里比较自豪的一点是,到了夏天我的同学都被蚊子咬的骂不绝口的时候,蚊子从来没有光顾我,因此在过去我从来没有发现身上被蚊虫咬过。但晚上回家后,我发现身上至少起了两个疙瘩。其中一个在手背的边缘,很痒;另一个在下巴右侧,没有感觉,但摸上去心里很别扭。

我在回家路上的时候曾经想过要把这块石头扔掉,不过最后没有执行。一来我觉得为了自己的“贪欲”把石头给拿走,离开了它的老家,却没有完成我“对它的许诺”而把它仍在半路,对石头很不公平。二来我自己也有点嘴硬,自己捡了一块谁也不要的石头,走在半路却后悔了,这不是自己打自己嘴巴吗。

把石头拿回家之后,我看了一下石头也没有什么特别的。既没有什么很有意义的形状,外形也不是很符合手掌的弧度。我弄了点肥皂把它清洗了一下后,感觉石头凉凉的,就想如果它能一直保持这种温度,倒是也挺有意思的,可惜几分钟之后我的幻想破灭了。

我还发现的一点是,这石头好像有一种淡淡的腥臭的味道,倒是稍微有点符合“臭石头”的样子,不过不是很明显。对于它要怎么处理,我还没有下狠心把它扔掉,还是暂时放在那里吧。

我之前在国内也捡过自己很中意的石头,在把玩了半年多后,似乎是有一次发神经把它往地上摔,潜意识里是想测试它的硬度,结果当然是石头摔得不那么“漂亮”了,我就把它扔掉了。似乎我很多玩具都是这样的下场,这块石头看来要“自求多福”了。

June 14, 2010

崩溃的 Windows 7 网络设定

帮别人倒腾电脑真是个累活,昨天下午同学请我帮忙设定一下 Windows 的网络。他在国内买了一台新的 DELL 笔记本,装的系统是 Windows 7。

我过去帮别的朋友在 Vista 下设定网络的时候就觉得很有有心无力的感觉了。可能是因为是自从 Windows XP 之后,我很长时间没有使用 Windows 了原因,很多参数的设定都没有什么印象了。所以那次我就搞了一下午,最后也不知道是怎么弄好的。弄完了之后的感觉是想吐,恶心的要命。这次感觉也是这样。

这次的问题是我第一次遇到的,很诡异。首先是不管是有线网络还是无线网络,都无法连上。理论上来说,有线网络只要是把 cable 插上就可以直接正常联网了。可在 Windows 7 里面竟然总是说“无 Internet 访问权限”,这是我从来没有遇到过的。有线网络也是同样的情况,不管是不是手动设置 IP 地址、DNS 地址、网管,总是一句“无 Internet 访问权限”。

在网络设置中心里面找了半天,总是也无法找到相关的地方。我怀疑过和 McAfee 的防火墙有关,但那台电脑的 McAfee 安装的有问题,无法打开界面,也无法卸载。这给排查的工作带来了很大的麻烦。结果弄到最后也没有弄好,从网上搜索了一些案例也没有什么帮助。

Windows 的网络设定的设计策略让我很迷惑,从 Windows XP 到 Windows 7,我感觉这方面的设定是越来越复杂了。真不知道 Windows 到现在还是不是面对着个人电脑,一个网络设定,还弄出个什么区域的东西,实在是有些超出了普通用户的承受范围了。很多东西都不直观,如果没有经验的人估计很容易失败。

相反,在对比了 Mac OS X 的网络设置后,Windows 这方面的设计缺陷就越发明显了。我一度以为是微软的设计人员有意的往复杂化方面来引导用户,我觉得这是完全没有必要的,更是一条歧路。

都说 Windows 简单、“傻瓜”,但在网络设定这一方面,我觉得 Windows 7 走向了相反的方向。事实上,对比起我过去的 Linux 的使用经验来,当代的 Linux 发行版的网络设定也远比 Windows 7 的网络设定方便直观。有人说微软在让 Windows 的用户“上瘾”了之后,就可以对他们予取予求了。不知道现在的设计方向,是不是有这么一点意味:)

最后说句题外话,最近的计算机水平发展的真快啊。从 Vista 开始,Windows 系统就给我一种缓慢的感觉。所以我本来以为笔记本电脑上跑 Windows 7 应该会很慢的。结果看了一下那台电脑的配置,竟然是 8 核处理器、4GB 内存,跑 Windows 7 这种规模的系统已经游刃有余了,真不知道在上面弄个 Gentoo 出来会有多快。

June 6, 2010

搜索条

MT5 有非常不错的主题,名为 pico,很符合我一贯喜爱的简约风格。我从 MT4 的时候看到介绍后就很像用了。

升级到 MT5 之后,虽然我之前做了一个三栏的白色模板,用起来一直也不错,不过在看了 pico 的缩略图之后,还是觉得想试一试。于是我就在升级不久就把主题换到了 pico。

pico 看起来一切都很不错,当然不能说是完美,但比起 MT4 之前的那些默认主题可是漂亮太多了。但它有一些我不喜欢的地方是挺致命的,其中之一就是布局有些不合理。也许是过于追求表面美感了,pico 主题的搜索框竟然在页面的下方,文章结尾的后面!

我觉得搜索框这种东西,要是方便的话,一定要放在页面的最上方,调入页面后第一眼就可以看到才好。如果要像 pico 那样,就放在页面的最下方也可以,毕竟方便人们寻找。而目前的情况是,pico 中的搜索框有些上不上下不下的。由于搜索况的下面是评论汇总,因此会把搜索框顶到最下面那一屏的上面。这样给人的第一感觉就是这个页面没有搜索功能!

我前几天看页面,觉得如果能把搜索框放在导航条上,说不定能解决问题。今天晚上有点时间,就试着捣鼓了一下。没有深入研究,只是把搜索 widget 里的代码复制到导航条里的相应位置,结果弄出了这么个东西:

pico-nav-bar-search.png

尝试了一下,是可以使用的。不过我看来看去,总觉得相当不协调。如果把按钮去掉应该能好一些,但我又不会(HTML 没怎么研究过),而且也不是很完美。总的来说,我的图形设计能力是相当的差的,只能在以后看看别人的页面设计,能不能有所启发了。

MT 升级后搜索缓存没有了

由于 MT 的效率是一个比较严重的问题,因此人们找了各种方法来提升 MT 的性能。在 MT4 中,我用了 AnySQL 的方法来缓存了搜索结果。因为 MT 的 tag 是基于搜索动态生成的,所以这个方法在第一次访问一个 tag 的时候会在硬盘上生成缓存,在一段时间之内再次访问这个 tag 时,直接从硬盘上的缓存来输出页面,速度自然就上去了。

这个方法的效果非常明显,尤其是在资源比较枯竭的主机上。我过去的 blog 在 Dreamhost 上,MT 运行的就特别缓慢,搜索更是如此。我在过去用 WP 的时候,动态的搜索完全没有这么慢,这让我非常惊讶两者之间的性能差距。而用了上面的缓存方法后,这个问题基本上立马解决了。后来我切换到了 Site5 的主机上,这个主机的资源比 DH 的好了不是一星半点,过去需要 45 分钟多才能重建全站,现在只需要 2 分钟多一点。虽然性能上有了巨大的提升,但我还是保留了搜索的缓存,毕竟能快一点是一点嘛。

升级了 MT5 之后,我发现这个方法不能用了,使用的话搜索什么的都出问题。开来 MT5 和 MT4 在一些基础的地方还是有一些不同的。这个方法的作者 AnySQL 切换到 WP 上去了,因此他没有继续更新 for MT5 的版本,所以貌似这个方法在近期就成了“绝响”。

本来我还妄想着随便改改,看看能不能凑合用着。可惜我的 Perl 荒废的实在太久了,也没有用 Perl 来写大程序的经历,所以在 debug mode 下试了半天,到最后还是抓瞎。好在现在的主机快了,影响也不是很大,也就先这么放下了。

June 5, 2010

这日子没法过了

最近上网感觉很不爽,因为突然觉得浏览器都不大好用了。

我目前机器上安装的浏览器有三个:Safari、Firefox 和 Chrome。其中时间用的最久的是 Firefox,在目前对我来说是排在第一位的。过去我一直用 Safari,因为这是系统自带的,过去用着也还不错。但自从升级到版本 4 之后,新东西倒是有一些,但效率就不敢让人恭维了。过去我的首页还是默认的 top sites,每次启动 Safari 的时候系统生成首页上的那些缩略图就足以让我的机器卡一阵子了,后来我忍无可忍把首页设定成空白了。之后发现效率越来越差,就改用了 Firefox。Chrome 是最后开始用的,自从出了 for Mac 的 beta 版我就开始试用了,因为在 Windows 下用着感觉不错,所以就希望也在 Mac 上用。但那时 Chrome for Mac 的实现还相当不完善(其实到今天我也觉得缺少一些功能),而且不能安装扩展,这让习惯了 Firefox 下的 AdBlock 之类的插件的我很不适应,所以就放弃了。

几个星期前我听说 Chrome for Mac 也支持安装扩展了,就装了那么几个,感觉好用多了。但用了一阵子之后就感觉到了很严重的效率问题,速度变得特别慢!有时候会出来一个小窗口说是某个标签没有反应,问我是把页面给 kill 掉还是继续等待。有时在我切换标签页之后要等上那么几秒钟页面内容才会出来,这让人很不爽。不知道是不是因为我的浏览方式太过另类,开了太多的标签页的缘故。

过去在用 Firefox 的时候我很少感觉我开的标签页太多了,因为它的标签栏是可以左右滚动的,每一个标签最窄也是三厘米左右。而在 Chrome 下,所有标签页都挤在标签栏里,标签多了以后标签上有什么内容也无法看到了。我在安装扩展的时候看到了一个名为 Too Many Tabs 的扩展,是用来管理标签栏的。在这个扩展在地址栏右侧的图标上会显式目前有多少标签,我经常看到上面 4、50 的数字就觉得一阵心惊肉跳,觉得 Chrome 大概不堪重负了吧。另外,这个 Too Many Tabs 的扩展是为了管理标签的,可以在里面用关键字搜索,可是往搜索框里输入中文的速度是个问题;而且在我的机器上它的速度很慢,这就太有杀伤力了,切换标签这个常用的动作有效率问题可是不可饶恕的致命伤。所以到后来我觉得这个扩展算是一个鸡肋扩展。

在使用了这么一段时间之后,我越发的觉得 Chrome 的效率不行了。我觉得应该是程序里面有 bug 的原因吧,因为我有时会发现整个标签页是卡死了的,完全不能动弹。幸好 Chrome 有多进程这个特性,我把地址复制下来再重新建立一个标签也就解决了,但这总是让人觉得不痛快。另一方面,我对 Chrome 的所谓“多进程”也感觉与我预期的有一些距离。我过去以为每个页面是严格的放进每一个进程的,这样通过 Chrome 的 Task Manager 就可以管理这些进程里面的页面,那个页面耗费了过多的资源就可以一目了然的看出来了。但几次经验告诉我这不是真得。很多时候我看到几个页面是挤在一个进程里面的,根本就无法区分,更加不可能只杀死其中的一个页面。这样这个功能就大打折扣了。

Firefox 在 Mac 下我感觉就很完善了。它除了功能齐全以外,最大的好处是稳定。我在用 Chrome 这段时间内遇到的一些问题,在 Firefox 下基本上不会出现。我现在觉得 Chrome 比较可取的地方之一就是它的多进程,如果可以把这个功能放到 Firefox 上就好了。因为我有时会发现 Firefox 的 CPU 使用比例不正常的高,有时会到 90% 以上,这时候我的 MacBook 的风扇就讨厌的响起来了。而整个 Firefox 是一个大进程,我也无法判断其中的“老鼠屎”是那个页面,因此也无法调整。但瑕不掩瑜,我之前也说过稳定是最重要的,在 Firefox 中我基本上没有遇到过像 Chrome 那样切换了标签后要等上几秒钟后才能阅读的情况。

Chrome 的另一个可取之处是它的标签的界面比较好。当然这不是说外观,之前我也写文讨论过,而是说标签拖动方面更直观、更符合 Mac 系统用户的审美观。而在 Firefox 里,拖动标签时看到的就是一个蓝色的只是条下面跟着一个模糊的缩略图,让我每次拖动的时候都小心翼翼的,需要自习看看鼠标的位置是不是放对了。

至于说 Safari,我很久之前就不用了。主要是它没有扩展的功能,有些除广告的功能就没有了。而国内网站有很多就是有很讨厌的广告在骚扰读者。我的 AdBlock 的名单已经比较符合我的日常习惯了。Chrome 下的 AdBlock 插件虽然不如 Firefox 下那么直观方便,但也勉强可以使用了。可惜 Chrome 下还没有 NoScripts 插件,所以有些站点之内的音乐自动播放就无法控制了,我只能麻烦的在选项里设定 Javascript 的页面过滤条件,也将就了。而 Safari 则这两种东西都没有,遇到这种页面也就只好抓瞎了。再加上 Safari 的效率问题也给了我一些阴影,所以我很久没有用 Safari 了。

=========

昨天我终于无法忍受 Chrome 的垃圾性能了,于是又切换到了 Firefox 下。但这次不知道为什么,Firefox 的行为让我感觉很奇怪。有时让我很抓狂的情况是:打开一个页面,鼠标就变成了小彩球转个不停,我这时候也只能 Force Quit 了。而这些页面包括阿 Gmail、VeryCD……这种情况已经发生了两次了,让我都有阴影了。

Chrome 和 Safari 慢,Firefox 会卡,真让我不知道这些浏览器还怎么用下去。

有时候我想这些现代的图形浏览器是不是太不稳定了,是不是字符界面的浏览器会好一些呢?我过去在 Emacs 里面用 view-mode 来读文档就感觉很爽。Lynx 我用着不惯,我希望可以在 Emacs 里面用,毕竟页面操作起来也方便么。可惜 W3M 不支持新版本的 Emacs,只好作罢。

June 4, 2010

图:双黄蛋

IMG_1722.jpg

昨天晚上炒菜的时候,接连打出了两个双黄蛋。感觉“双黄蛋”这个词是那么的遥远啊,回忆过去的经历,我唯一想到的是一次小学的时候在家里从厨房里看妈妈给我展示她刚打出来的双黄蛋。除了这件事,就再没有其它的了。

June 3, 2010

困扰已久的 MT5 的 bug 解决了

mt5-icon.png自从 Movable Type 5 的测试版本发布以来,我就一直希望可以用在自己的 blog 上。MT5 有一些新功能,不过我最喜欢的一点是它后台的编辑器不错。用 MT4 的后台编辑器来编辑中文简直侮辱了汉字的美感。当时费了很大的力气才把后台中文字体给整治的可以入眼,并写文记之

但当我把这个 blog 的所有文章从 MT4 导出再在 MT5 中导入后,重新发布站点时,MT5 会报告 “Wide character in subroutine entry” 错误。这个问题困扰了我很长时间,从 RC1RC3 版本都一直存在。本来我想这么重大的问题到了正式版应该就没了吧,于是我那几天就天天盼望着正式版的发布,结果却又一次让我失望了。这让我迟迟无法升级到 MT5,也让我对 MT5 正式版发布跳票又没有解决问题的 6A 非常不满。

我估计 6A 不会主动修正这个问题了,也许是他们根本没有意识到这个问题,我于是就在官方的论坛上发布了一个帖子。然后 6A 的 Beau Smith 和我一起测试了几种情况,但一直也没有找到产生问题的原因,到最后也就不了了之了。后来我看到网上的一些其它的中文 MT 用户都升级了,也没有发生我的问题,就推测应该是 Markdown 的问题。后来通过 debug mode 也证实了问题出自 Markdown。但 Markdown 在 MT5 和 MT4 中几乎没有差别,在 MT4 中用着好好的,到了 MT5 中就有问题,所以我觉得应该是 MT 自身有了变动,我也无计可施。

前几个月实在太忙,也没有写 blog 的心情,于是这里就荒废了 4 个月。昨天突然觉得很久没有去 MT 的官方网站上看看了,于是就看到了 MT 5.02 版本发布的消息。我一直不甘心用不上 MT5,就又安装了一次,结果问题依旧。这次我有些时间,于是就发狠手动测试了一下。因为在发布失败后,我看到系统其实是生成了一些文章的,所以我猜应该是我中间有哪一篇文章里有些非法字符导致了这个问题,就想试着把它找出来。我每格大约 20 篇文章就发布一次这个文章,结果大概找到了那个临界点。但看了半天也没有找出问题所在。

然后我想时间隔了那么久,中间不应该只有我一个人使用 Markdown 并遇到这种问题吧,于是就再次去 Google 搜索了一下。似乎现在用 MT 并同时使用 Markdown 的人真得不多了,我上次搜索一个结果都没有,这次找到了两个。我先看的一个是一篇日文文章。我看不懂日文,但根据文章中穿插的英文,我猜测估计是和我同样的问题。描述解决方案的日文不难,“冒頭部分に”、“追加”、“に書き換える”我大体能猜出什么意思。按照他的方法试了一次,果然整个站点毫无问题的发布成功了。再看我搜索到的第二条结果,竟然是在 MT 的官方论坛上的一个帖子,里面竟然引用了我之前发的那个帖子,说他遇到了同样的问题,并通过以下方法解决了。我看了一下他给的方法,竟然和那篇日文文章里的方法一模一样。可惜这个帖子的作者没有在我那个帖子里说一句,所以我一直也没有看到。这个帖子是在今年年初发布的,但似乎一直没有人关注,所以到今天 MT5 还是有这个 bug。我提交了一个 patch,也不知道能不能在下一个版本中改进。

6A 在日本开了分公司,我觉得充分说明了 MT 在日本的流行。其实不止是 MT,Perl 也是一样。我感觉中国程序员更偏爱 PHP,因此 WordPress 在中国基本上完全压过 MT。我在网上很少见到过有 Perl 开发者,似乎人们的精力更多的投入到 Python / PHP / Ruby 上了。相反在日本有很多 Perl 黑客,比如我上一篇文章里提到的给 Cocoa Emacs 23 做全屏补丁的 Daisuke Murase,我在他的 github repo 里看到了很多 Perl 的代码。另外,很多 MT 的资料都是日文的,可惜我看不懂,但 MT 在日本的流行是确定的。

最后我把这个 bug 的解决方案列在这里(假设 MT 安装在 mt5/ 目录里):

  1. 在 mt5/plugins/Markdown/Makrdown.pl 文件的开头部分的 use 区域加上一行 “use Encode qw(encode_utf8);
  2. 在 mt5/plugins/Markdown/Makrdown.pl 文件里找到 “my $key = md5_hex($1);” 一行(280行左右),替换成 “my $key = md5_hex(encode_utf8($1));”。

June 2, 2010

Cocoa Emacs 23 全屏

在 Mac OS X 下编译 Emacs 非常简单,从 BZR 上下载(记得要用“--stacked”参数)最新的源代码后,运行

./configure --with-ns
make
make install

就可以生成 .app 程序包。自从我知道了这个方法之后,我一直在用最新的 Emacs。

过去我用 CarbonEmacs 的时候,曾经设置过 Emacs 的全屏功能,用着一直感觉不错。后来自己编译使用 Emacs 23 后,就再也无法全屏了。上网查了一下原因,知道是因为从 Carbon 升级的 Cocoa 的过程中,有一些功能还没有完全实现,而全屏功能就是其中之一,因此我不得不遗憾的暂时放弃了这个功能。后来我发现点两次窗口最大化键也可以勉强达到全屏效果,于是就这么一直凑合着。

今天在浏览 Emacs Wiki 时看到了一篇 blog 文章的链接,文章介绍了在 Cocoa 环境下全屏的方法。按照文章中的办法,略微变通一下,果然成功了。

文章中说,日本黑客 Daisuke Murase 给 Emacs 23 添加了全屏功能。他在 github 上放了一个 Emacs 分支,但除了他添加的新功能之外,这个分支一直没有跟着主分支一起更新。所以文章的作者 Steve 从一个“官方”的 Emacs git 分支 clone 了最新的代码,并合并这两个版本,但在合并的时候发生了冲突。于是 Steve 提取了这个更新(a3585f6c2a)的 patch 并成功的更新了代码。

我在 clone Steve 提供的 Emacs git repo 时速度非常缓慢,已经超出了可以忍受的范围,只好放弃,改用从官方的 BZR repo 来下载代码。但这样我就无法(不会)用 git 来合并 Daisuke 的分支了。不过我在看 Daisuke 的 git repo 的时候,发现他提到了他的分支与主流分支的合并冲突问题,并给出了 patch 文件。把这个 patch 下载下来后,在下载下来的 Emacs trunk 目录下,运行 cat feature-fullscreen.patch | patch -p1 后就按照上面的方法正常编译 Emacs 就好了。编译完成后,用 M-x ns-toggle-fullscreen RET 就可以像过去一样全屏了。

我照样喜欢把全屏功能绑定在 command+return 键上,在 .emacs 文件中加上一行

(global-set-key (kbd "M-RET") 'ns-toggle-fullscreen)

搞定。

既然说道改动 .emacs 文件了,我前两天刚刚也修改了一下功能,就是 set-mark-command 的键位绑定。Emacs 默认对这个函数的绑定是 control+space,但在 Windows 和 Linux 系统上一般被用来切换输入法,在 Mac OS X 下我又把这个组合键设定成了 QuickSilver 的快捷键,所以这个键绑定就失效了。因为我一直用的笔记本电脑,所以我之前在选定文字的时候,就干脆用鼠标板来手动划定,勉强可用。如果要选定整个 buffer,就干脆把光标送到开头,再送到结尾也算是变相的选定了全文,操作起来就是按住 Meta 和 Shift 键,在迅速的分别按 ,. 一下就好了(或许有“正确”的全文选定办法,不过这么多年了,习惯了:-))除了用 control+space 来选定外,默认情况下用 C-@ 也可以同样的呼叫 set-mark-command,但我一直以来都觉得这个组合键的反人体工学达到了变态的程度。而 M-@ 这个组合键虽然同样需要三个键,但却更加顺手一些。M-@ 默认的绑定是 mark-word,就是选定一个词组,这些年来我从来没有用过这个功能。于是前天我“痛定思痛”,决定彻底解决这个问题,就是把这两个键绑定切换一下。于是在 .emacs 里面加上了这么两行

(global-set-key (kbd "M-@") 'set-mark-command)
(global-set-key (kbd "C-@") 'mark-word)

于是世界清净了。