用 conky 记录 TODO
conky
Table of Contents
1 前言
本来一直认为 conky 没多大用处,反而会影响我的注意力,但用 FVWM 之后发现看时间不太方便,就决定重新使用 conky,配置了一下发现还不错。另外感觉 Emacs 下的 Org 的 TODO 很不错,就写了一个脚本,可以跟 conky 配合显示待办事项。
2 conky配置
先给出我的 .conkyrc 文件,其实就只实现了显示时间的功能,本来可以显示天气的,但校园网真的很不给力,每次打开都要 n 长时间,就去掉了。
background no
cpu_avg_samples 2
net_avg_samples 2
out_to_console no
use_xft yes
xftfont Monospace:size=8
own_window_transparent no
xftalpha 0.8
mail_spool $MAIL
update_interval 1
own_window yes
own_window_transparent yes
own_window_hints undecorated,below,skip_taskbar
own_window_type override
double_buffer yes
minimum_size 260 5
maximum_width 250
draw_shades no
draw_outline no
draw_borders no
stippled_borders no
border_width 1
default_shade_color black
default_outline_color green
gap_x 10
gap_y 145
alignment top_right
use_spacer none
no_buffers yes
uppercase no
TEXT
${color gold}${font 方正少儿_GBK:size=30}${alignc}FVWM${font}${color}
${color #238EEB}${hr 2}${color}
${font DS\-Digital:style=Bold:size=45}${color #000000} ${time %l:%M:%S}${font}${color}
${color #08CEEB}${font 方正少儿_GBK:size=12}${alignc}${time %b%d 星期%a}${color}${font}
${color #03CEEB}${hr 1}${color}
${color green}${font 方正少儿_GBK:size=16} ${alignc}小呼的桌面${font}${color}
${color #038EEB}${hr 5}${color}
${color gold}${font FZShaoEr\-M11:size=12}${alignc}------------- ${color #0E8EEB}TODO ${color gold}-------------${font}${color}
${color green}${font 方正少儿_GBK:size=14}${execpi 3 cat -n ~/.todolist}${color}
3 使用 TODO
我把待办事项放在了家目录下的 .todolist 中,用 todo 命令维护其中的待办事项。
3.1 todo 脚本
下面是 todo 脚本的内容(不懂shell编程,可能写得比较差,但功能是实现了):
,#!/bin/bash
case $1 in
"-s") # 长期任务
shift
task=$*
while [[ $# > 0 ]]; do
echo "$""{color orange}" $1 "$""{color green}" >> ~/.todolist
shift
done
echo "成功添加任务:$task"
;;
"-d") # 按字符串删除
t=`sed -n /$2/p ~/.todolist`
if [ "$t" != "" ]; then
echo "要删除任务 \""$t"\"吗? 是(y)/否(n)"
read answer
if [ $answer \= "y" ]; then
sed -i /$2/d ~/.todolist
echo "Task deleted."
else
echo "Task not deleted."
fi
else
echo "不存在这个任务。"
fi
;;
"-dl") # 按行删除
shift
task=$*
while [[ $# > 0 ]]; do
sed -i $1s/.*// ~/.todolist # 将选中行变为空行
shift;
done
sed -i /^$/d ~/.todolist # 删除空行
echo "成功删除任务:$task" ;
;;
"-m") # 按字符串标记为完成
shift;
task=$*;
while [[ $# > 0 ]]; do
sed -i /$1/s/green/red/ ~/.todolist #将绿色(待办)改成红色(完成)
shift;
done
echo "成功标记任务:$task" ;
;;
"-ml") # 按行标记为完成
shift;
task=$*;
while [[ $# > 0 ]]; do
sed -i /$1/s/green/red/ ~/.todolist #将当前行的绿色(待办)改成红色(完成)
shift;
done
echo "成功标记任务:$task" ;
;;
"-a") # 添加新任务,每次可以增加多个,可以包含空格(要用'\'转义)
shift
task=$*
while [[ $# > 0 ]]; do
echo "$""{color green}" $1 "$""{color green}" >> ~/.todolist
shift
done
echo "成功添加任务:$task" ;
;;
*) # 同上
task=$*
while [[ $# > 0 ]]; do
echo "$""{color green}" $1 "$""{color green}" >> ~/.todolist
shift
done
echo "成功添加任务:$task"
esac
,#done
将上面内容复制到一个 todo 文件中,给它可执行权限,再放到 /usr/bin 目录即可:
chmod +x todo
sudo mv todo /usr/bin
3.2 todo 使用
下面是todo脚本的用法,其实脚本里已经写行很清楚了:
参数 | 用法 |
---|---|
-d item | 删除与item匹配的项 |
-dl l1[l2,l3…] | 删除第l1[l2、l3…]项 |
-m item | 将与item匹配的项标记为完成(红色) |
-ml l1[l2,l3…] | 将第l1[l2、l3…]项标记为完成(红色) |
-s item | 增加一个待办项目(橘黄色,表示长期项目) |
-a item1[item2、item3…] | 增加项目item1[item2、item3…],(绿色,表示小型项目) |
item1[item2、item3…] | (无参数)同上,增加项目(绿色) |
4 一个问题
如果从源里安装,或者编译时用 conky 的默认代码,我们的 TODO 功能并不能显示多少项目的, 因为 conky 的 execpi 的文本缓冲区默认是256个字节,所以我们要修改一下代码, 将conky的源码包解压(我用的是1.8.1版), 在 src 文件夹中的 conky.c 中,将415行(1.8.1版本):
unsigned int text_buffer_size = DEFAULT_TEXT_BUFFER_SIZE ;改为:
unsigned int text_buffer_size = DEFAULT_TEXT_BUFFER_SIZE * 10 ;这样就将缓冲区增大到原来的 10 倍,应该够用了。编译安装。
5 结束
Date: 2011-04-10 00:15:57 CST
HTML generated by org-mode 6.21b in emacs 23