カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

todo.txt を快適に扱える様に Makefile でタスク定義をするなどした

昨日の記事でも言った様に、 僕は今 todo.txt ベースのタスク管理にチャレンジしているんだけれども、 todo.txt を Vim で、

を使って操作するのみでは、ちょっとだけ手が届かない感が有ったので、 とりあえず Makefile にタスク定義して、少しだけ便利にする、 と言った様なコトを今日行なっていました。

それで、一応出来上がった Makefile は下記の通りで、これは MSYS2 で使える GNU 系の toolchain と、 the platinum searcher (pt) 、あと fzy 辺りに依存してます:

Q         = 
FLAGS       = 
CONTEXTS  = everyday later next repeat wait wip
PROJECTS  = Business Buy Cleanup Creations Development \
                       eBooks Environment Event Gadgets Game Kernel \
                       Learn Life Mobile Product Services Software \
                       Web WebService WebSite 

.PHONY: search todo done
_search:
   @cd Inbox && pt $(FLAGS) '$(QUERY)' . | sed 's![^:]\+:!!'

_tasks:
   @$(MAKE) -s FLAGS="-i" QUERY="$(QUERY)" _search | grep -vP '\d+:x'

_done:
   @$(MAKE) -s FLAGS="-i" QUERY="$(QUERY)" _search | grep -P '\d+:x'

.PHONY: _colorful
_colorful:
   @cat - \
      | sed 's!^\([0-9]\):!0\1:!' \
      | sed 's!^\([0-9][0-9]\):!0\1:!' \
      | echo -e "$$( cat - | sed 's!^\([0-9]\+\):!\\e[1;30m\1\\e[0m !' )" \
      | echo -e "$$( cat - | sed 's!+\([^ +]\+\)!\\e[1;34m+\1\\e[0m!g' )" \
      | echo -e "$$( cat - | sed 's!@\([^ @]\+\)!\\e[1;32m@\1\\e[0m!g' )" \
      | echo -e "$$( cat - | sed 's!\([a-zA-Z]\+\):\([^ :]\+\)!\\e[1;33m\1\\e[0m:\\e[1;36m\2\\e[0m!' )"


.PHONY: _context _project
_context:
   @cd Inbox && pt '@' . | tr " " "\n" | grep '@' | sed 's!.*@\([^ ]\+\).*!\1!' | sort | uniq 

_project:
   @cd Inbox && pt '+' . | tr " " "\n" | grep '\+' | sed 's!.*+\([^ ]\+\).*!\1!' | sort | uniq | grep -v '\+\+'

.PHONY: $(CONTEXTS) $(PROJECTS)
$(CONTEXTS): %:
   @$(MAKE) -s FLAGS="-i" QUERY="@$@" _tasks | make -s _colorful

$(PROJECTS): %:
   @$(MAKE) -s FLAGS="-i" QUERY="\+$@" _tasks | make -s _colorful

.PHONY: edit
edit:
  vim Inbox/todo.txt

.PHONY: search tasks done
search:
   @$(MAKE) -s QUERY=$(Q) _search | make -s _colorful

tasks:
   @$(MAKE) -s QUERY=$(Q) _tasks | make -s _colorful

done:
   @$(MAKE) -s QUERY=$(Q) _done | make -s _colorful

select:
   @bash -c '$(MAKE) -s Q="$$( ( $(MAKE) -s _context | sed "s!^!@!" ; $(MAKE) -s _project | sed "s!^!+!" ) | fzy | tr "\+" "\\\+" )" tasks'


progress:
   @cd Projects/Learn && bash -c 'echo -e "\\e[1mRemain:\\e[0m \\e[1;33m$$(cat todo.txt | grep -vP "^x" | wc -l | cut -d" " -f1)/$$( wc -l todo.txt| cut -d" " -f1 )\\e[0m"'
   @cd Projects/Learn && bash -c 'echo -e "\\e[1m  Done:\\e[0m \\e[1;34m$$(( 100 * $$( cat todo.txt | grep -P "^x" | wc -l | cut -d" " -f1) / $$( wc -l todo.txt | cut -d" " -f1) ))%\\e[0m"'

ちなみにこの Makefile 、完全に俺得仕様になっているので、他の方が再利用するのはちょっと難しいと思うんですが、 基本的にメインのタスクでは、

pt で検索して sedecho を使って Terminal Emulator での出力を colorful にする

という流れのコトしか行なっていないので、ま、その辺りの処理の流し方ぐらいは、 まぁまだ誰かしらの参考になるんじゃないかなぁ、とは思います。はい。


ま、この Makefile 、公開しても誰得な気がするんですが、 とりあえず今日はこれぐらいしか作ってないので、一応は公開しておきます。はい。