简易todo记事本

实现简易todo

shell脚本用于写入todo,conky读取写入的文件进行展示

conky

Conky是Linux下的桌面美化工具,可以把一些系统信息,以各种酷炫的形式,显示到你的桌面上
这里直接给出配置文件,具体每一项的含义请自行百度

default_color white
double_buffer yes
no_buffers yes
update_interval 1.0
total_run_times 0
own_window yes
own_window_type normal
own_window_transparent yes

own_window_colour 000000
own_window_argb_visual yes
own_window_argb_value 0
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

double_buffer yes
draw_shades yes
draw_outline no
draw_borders no
draw_graph_borders n0
minimum_size 296 5
maximum_width 406
default_color ffffff
default_shade_color 000000
default_outline_color 000000
alignment top_right
gap_x 30
gap_y 120
cpu_avg_samples 2
override_utf8_locale no
uppercase no # set to yes if you want all text to be in uppercase
use_spacer no
use_xft yes
xftfont WenQuanYi Zen Hei:pixelsize=15
override_utf8_locale yes
use_spacer no
minimum_size 300 5
TEXT
${font LCD:style=Bold:pixelsize=50}${alignc}${time %H:%M:%S}
${font WenQuanYi Zen Hei:pixelsize=28}${color }${time %Y年%b%d日 星期%a}${alignc}
${font WenQuanYi Zen Hei:pixelsize=18}
${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}

shell编程介绍

case循环

每个 case 分支用 ) 开始,用两个分号 ;; 表示 break

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

获取参数

通过 $n 的形式来获取参数的值,当n>=10时,需要使用 ${n} 来获取参数
特殊字符:

参数处理说明
$#传递到脚本或函数的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

shift

shift命令用于对参数的移动(左移)
执行shift后,$#就会减1

sed -i(sed命令nb)

sed -i就是直接对文本文件进行操作的,支持正则替换
sed -i $1s/.*// ~/.todolist:将某行替换成空
sed -i $1s/green/red/ ~/.todolist:将某行的green替换成red

最终脚本和效果

脚本

#!/bin/bash
help()
{
    cat <<- EOF
Author: m0yuqi
Desc: Add to-do items
Usage: todo [-a to-do] [-d line_num] [-m line_num][ls]
Optional arguments:
    -a          add new to-do(allow multipe to-do)
    -d          delete a to-do by line number(allow multipe to-do)
    -m          mark a to-do finshed by line number
    ls          list all to-do items
EOF
    exit 0
}
case $1 in
    "-h")   help;;

    "-a")   #添加to-do,可以添加多个
            shift
            task=$*
            while [[ $# > 0 ]]; do
                echo "$""{color orange}" $1 "$""{color green}" >> ~/.todolist
                echo "成功添加to-do:$1"
                shift
            done;;

    "-d") # 按行删除
            shift
            task=$*
            while [[ $# > 0 ]]; do
                sed -i $1s/.*// ~/.todolist # 将选中行变为空行
                echo "成功删除to-do line:$1" ;
                shift
            done
            sed -i /^$/d ~/.todolist;; # 删除空行

    "-m") # 按行标记为完成
            shift
            task=$*
            while [[ $# > 0 ]]; do
                sed -i $1s/green/red/ ~/.todolist #将当前行的绿色(待办)改成红色(完成)
                echo "成功完成todo line:$1"
                shift
            done;;
    "ls")
        cat -n ~/.todolist;;
    *)      help;;

esac

效果图

JMpNrD.png

tag(s): none
show comments
Edit with markdown