给go项目生成TAGS文件

本文的go项目特指包含go开发工具和程序库的代码,获取方式参见这里

go项目包含多种编程语言写成的代码,如C,汇编,go等等,甚至包括C和go的混合体(文件后缀名为goc)。其中的C也不是标准的C,而是被称为Plan 9 C,其中会影响到etags的就是它使用unicode中的middle dot作为symbol名字的一部分,如runtime·makechan_c。它实际是一个函数名,感觉上runtime像是一个名字空间。

让etags认识middle dot的方法很简单,只需修改emacs/lib-src/etags.c,在mitk指向的字符串最后加上它就可以了。如下:

*midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789·";

在Emacs里输入middle dot的方法是:C-x 8 RET MIDDLE DOT RET。或者直接从某个源文件里面复制。

然后重新编译

$ cd emacs/lib-src/
$ make etags

现在,就可以使用如下脚本给go项目生成TAGS文件了。

#!/usr/bin/env bash

SRC_DIR=$1

if [ ! -e "$SRC_DIR/src/all.bash" ]
then
    echo "\`$SRC_DIR' is not top directory of go source code"
    exit 1
fi

pushd "$SRC_DIR"

find src -name "*.go" | \
etags --language=none \
    --regex='/type[ \t]+[^ \t]+[ \t]/' \
    --regex='/func[ \t]+[^( \t]+[( \t]/' \
    --regex='/func[ \t]+([ \t]*[^( \t]*[ \t]+\*?\([^) \t]+\)[ \t]*)[ \t]*\([^( \t]+\)[( \t]/\1.\2/' -
find src -name "*.[hc]" | etags -a -
find src -name "*.goc" | etags --language=c -a -
find src -name "*.s" | etags -a --language=none \
    --regex='/TEXT [^(]+/' -
find include -name "*.h" | etags -a -
popd

番茄工作法

相对于David Allen的GTD,番茄工作法 (The Pomodoro Technique) 要简单得多,但是我仍然无法一下子将其完全实践起来,而是采用了渐进的方式,逐步熟悉。

首先,早上把当天要做的事情列出来,做完一个划掉一个,有新出来的事情,就添加到列表最后。今天没有完成的,搬到明天的列表上。

习惯了之后开始计时。没找到合适的计时器,在办公室里又不可能真的弄个闹钟叮叮当当,一度使用firefox插件Stopwatch。我采用默认的25分钟作为一个工作单元,中间休息5分钟,下午3点之后休息半小时。当然由于工作特点,不可能完全遵守其时间安排,毕竟有时候中断之后重新在大脑中恢复工作现场代价非常高昂,所有也有连续工作四五十分钟的时候。

本子上操作熟练后就想着数字化,初步选择evernote做记录,orgmode做计时。

evernote的效果如图(点击图片看大图),checkbox正好合适,只不过X变成了勾。竖线用来分隔估算时间的次数,竖线越多表示对任务消耗时间的估计失败的次数越多。

Evernote实现番茄工作法  (Pomodoro technique)

Evernote实现番茄工作法 (Pomodoro technique)

orgmode做计时需要一个小小的调整,即在mode line上只显示最近一次开始任务后消耗的时间。当然到时提醒功能仍然是没有的。

(setq org-clock-modeline-total 'current)

除了上述的划线打叉之外,番茄工作法还包括其它一些实践活动,将会陆续添加进来。就目前来看,对提升我的工作效率还算是效果显著啊!