十月 29, 2007

select-gud-interaction-window

最近尝试在Emacs里面调用gdb调试程序,使用了gdb-many-windows这个特性,一个frame上开5个window(参见截图)。窗口多了切换便成了问题,很快就放弃使用C-x o,而用了鼠标。而来发现可以使用windmove,只要在.emacs文件里面加上:

(windmove-default-keybindings)

然后就可以使用Shift加方向键来移动光标到不同窗口。然而,好多快捷键只有当光标在GUD interaction buffer时才有效,我就写了一个命令,并绑定在F9上,一键返回GUD interaction buffer所在的window。

(defun select-gud-interaction-window ()
(interactive)
(if (and (boundp 'gud-comint-buffer)
gud-comint-buffer
(window-live-p (get-buffer-window gud-comint-buffer)))
(select-window (get-buffer-window gud-comint-buffer))
(message "GUD interaction window is inactive")))

(define-key global-map [(f9)] 'select-gud-interaction-window)

更多emacs配置参见我的.emacs文件

十月 27, 2007

Reading blog considered harmful

blog订阅多了,精读是不可能了,大多数都是一扫而过,甚至只瞄一眼标题。遇到感兴趣的,便多看两眼,然而文章一长,又失去了耐性。每天看似阅读量很大,实则收获很少,反而浪费了很多时间,还养成了一个阅读的坏习惯。

很难拿起大部头的书逐字逐句阅读,心里急得很,就盼着赶紧翻到最后一页了事,那份心急火燎的心态,如同忙着将blog未读数清零一样。收获,甚至享受阅读,早就抛到九霄云外了。

还记得忙得没时间看blog的那几天,感觉很充实。

十月 26, 2007

GMail IMAP on Moto E398

虽然在web界面上还看不到IMAP的选项,但是在我的Moto E398上已经可以用了。设置在“信息=>邮件信息=>邮件信息设置”里面,参数设置参见GMail的帮助:Configuring other mail clients。如果不想浪费钱的话,还要设置仅未读邮件:是,接受日期范围:1天,附件:无

说点闲话,其实我是个手机盲,很多功能都不会用,用cmnet方式上网一直不知道怎么弄,用ucweb上网又始终无法登录gmail和google docs,古怪的是,igoogle能登录进去(remember the milk也可以)。手机的邮件功能倒是使用cmnet方式,支持POP3和IMAP4,记得以前POP3收GMail是可以的,但最近死活连不上。看到GMail支持IMAP的消息可把我乐坏了,今天抱着试试看的心态,没想到居然成功了。问题是,像我这样每天看电脑比看老婆时间还长的人,有必要在手机上查看邮件吗?!

另,开始学习mutt,用这款传说中牛人都在用的邮件客户端搭配GMail IMAP。更重要的,终于可以在GNU Screen里增加一个非Shell的window啦!啦啦啦!!!(这个真的重要吗?不重要吗?……)

十月 21, 2007

pdftotext: convert pdf to txt

pdftotext是一个将PDF文件转换成文本文件的命令行工具。使用方法非常简单:

$ pdftotext a.pdf a.txt

pdftotext还提供了几个选项,来微调转换过程。如:

-nopgbrk
去掉换页符
-enc <string>
指定输出文件的编码
-eol <string>
指定换行符,可以是unixdos,或mac

我的手机E398只能看文本文件,不能看PDF,所以我用pdftotext转换了几个文件,命令行如下:

$ pdftotext -nopgbrk -enc Latin1 -eol dos a.pdf a.txt

这几个文件都是英文的,虽然pdftotext手册上说缺省的输出编码是Latin1,但在我的Fedora 7上却是unicode,到了E398上出现很多乱码,所以显示指定了编码。至于换行符,我猜moto-txt是用的dos,所以也指定了一下。

更多编码可以在/usr/share/poppler/unicodeMap/目录(以Fedora 7为例)下找到,中文可以使用GBK

十月 15, 2007

GNU Screen

机缘巧合,终于下定决心学习闻名已久的GNU Screen。Screen有两大主要功能——多窗口管理器,以及attach/detach功能。

多窗口功能是我学习它的主要原因,在Cygwin下一直用rxvt,可惜没有tab功能,经常要开好几个窗口。有了Screen,只要一个窗口运行Screen,在Screen里面可以运行多个命令行程序,当然主要还是Shell。然后可以像Emacs切换buffer一样,切换到相应的Shell。这个功能本来的设计目的是解决登录远程机器只有一个终端的问题。

attach/detach主要也是用于登录远程机器,所谓detach即Screen退出但在Screen里面运行的程序仍在运行,detach之后即使从远程机器logout也没关系,下次登录后可以运行Screen去attach上次detach的东西,这样,前面的所有窗口及里面运行的程序又回来了。我很少需要登录远程机器,但我想到了另一个应用场景。在启动Netmeeting后,Cygwin X窗口会消失,退出Netmeeting后,X又回来了。利用Screen的attach功能,我们可以在X窗口消失后,启动一个非X的Shell,然后运行screen -x命令连接到X里面的Screen,查看里面的应用程序运行状况,而不必等到冗长的会议结束。

和Emacs一样,没有配置过的Screen也能用,但不太方便。我的配置比较简单,都是网上拿来的。