代码:https://gist.github.com/827296
我在dash和mksh下试过,没发现什么大问题。应该还是比较通用的。
======================
用法举例
======================
初始化
ftm init
(默认文件都存在~/.config/ftm下,可以 ftm init /path/your/dir 来制定其他目录)
新增
ftm -a 明天去买牙膏
写备注(调用默认编辑器编辑)
ftm -e 明天去买牙膏
也可以偷懒,尾部省略(要求唯一匹配)
ftm -e 明天
看备注:
ftm -c 明天去买牙膏
要买白人牌的
列出所有todo
ftm -l
列出带“买”字的todo
ftm -l 买
做完了:
ftm -d 明天去买牙膏
支持尾部省略(要求唯一匹配)
ftm -d 明天
或者,ftm -d 标记ftm -l列出的第一项
ftm -n也是显示ftm -l列出的第一项
ftm -s ERE正则表达式
搜索所有todo的备注
其他用法
ftm -h
或者直接看原文件的注释,最详细。
===================
关于这个脚本
===================
没经验,写得乱七八糟的。
语法真是诡异,fi和esac之类的倒觉得还好,我感到奇怪的是函数定义里面 { 和 } 居然是关键词。最要命的是quote和escape,大部分时间都浪费在这上面。
都用了全局变量。其实函数里面应该用local的。但是dash里面的local很诡异,比如下面的例子:
代码: 全选
f() {
local x=1
readonly x
echo $x
}
g() {
local x=2
readonly x
echo $x
}
f
g
f
代码: 全选
1
2
1
顺带一提,ftm init dir可以指定保存的目录,这个数据要记录下来。但我又不想为了这个搞一个配置文件。不知道有什么好办法?
我现在的做法是用sed修改源代码中的变量,类似:
代码: 全选
config_bang() {
readonly var_pattern="^(readonly $1=).*"
readonly new_var_pattern=$2
sed -i -r -e "s:$var_pattern:\1$new_var_pattern:" $0
}