儿子病好了,但是臭脾气还在。
经常发狂,控制不住情绪,易暴怒,怎么劝都不行。
作息时间也没有恢复,早上4点就醒了,下午却怎么睡都不醒。
跟儿子玩“你同不同意”的游戏。儿子想玩ipad,就问我们:“你同不同意?你同不同意啊?”
某天早上,我跟儿子说:“你同不同意我亲你一下?你同不同意?”儿子可逮着机会了,得意地说:“我不同意!我不同意呀!”完全忘记了以前每天上班出门前都要两个脸蛋亲一口,再拥抱一下。
儿子病好了,但是臭脾气还在。
经常发狂,控制不住情绪,易暴怒,怎么劝都不行。
作息时间也没有恢复,早上4点就醒了,下午却怎么睡都不醒。
跟儿子玩“你同不同意”的游戏。儿子想玩ipad,就问我们:“你同不同意?你同不同意啊?”
某天早上,我跟儿子说:“你同不同意我亲你一下?你同不同意?”儿子可逮着机会了,得意地说:“我不同意!我不同意呀!”完全忘记了以前每天上班出门前都要两个脸蛋亲一口,再拥抱一下。
本文的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