本当は一番最初に書くべきコードだったdiary toolsだが、ようやく書いた。

https://github.com/reasonset/diary-tools/
にアップしている。

Diary Toolsと言ってはいるが、ほぼatnowがメインだ。diary.resumeは要は日付別のファイルをエディタで開くだけだからだ。

atnowはタブセパレートのCSVとして理解可能な日記ならぬ瞬間記だ。その瞬間に起きたことを記録していき、これにより検索し、分析することを容易にする。

記憶しておくことが困難な私には欠かせない。

そのデザインが重要なのだが、今回2つのポイントがあった。

ひとつは、atnowは他のスクリプトから呼ばれる可能性もあるため、ファイルは必ずロックされなくてはいけない。だが、それをシェルスクリプトでやるとなるとなかなかハードルが高い。だが、zshには公式モジュールとしてflockが提供されている。

### Lock diary file
(
touch "${basedir}/${atnow_date}"
zsystem flock -t 180 "${basedir}/${atnow_date}"
integer ret=$?
if ((ret)); then
{
echo -n "Can't acquire lock for ${basedir}/${atnow_date}."
((ret==2)) && echo -n " timeout."
echo
} >&2
exit 1
fi

print "${now}\t${atnow_time:-now}\t${desc}" >> "${basedir}/${atnow_date}"
)

zsh/zsystemモジュールをロードすることで使用可能だ。さすが最強のシェル。

そして、zenityの返り値を確認しなくてはいけないのでやってみて気がついたのだが、

desc=$(zenity --entry --title="Input what to do or what happen now!")
if (($?)) || [[ -z $desc ]]
then
exit 127
fi

Command substitionの結果が$?で取れるらしい。

zenityが値として何を返すのかということを今回チェックしたが、基本的に入力した内容、選択なら選択したテキストが返り、キャンセルやいいえを選択した場合、non-zero終了するらしい。

ランチャに配置して完了。

ちなみに、これをメール通知するため、muttとmsmtpをセットアップした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください