Go
Todoist
Peco

Go言語でTodoistのCLIクライアントを作ってみた

More than 1 year has passed since last update.

ブログのコピペです。

Go言語でTodoistのCLIクライアントを作ってみた

Todoist というWebアプリケーションのタスク管理ツールが大好きで一年くらい使っている。

以前はddksr/cliistを使用してCLIで操作できていたのだが、Todoist APIのバージョンアップに伴い、使用できなくなってしまった。

アップデートをするようなのだが、いつになるか待つのも面倒だし、Go言語触ってみたかったので練習がてら新しくTodoistのCLIクライアントを作ってみたので紹介。

作成メモみたいなのはまた今度書く。


レポジトリ

sachaos/todoist: Todoist CLI Client. I ❤️ Todoist and CLI.


使い方


タスク一覧

$ todoist l

64302291 p1 #Movie A CLOCKWORK ORANGE
64302368 p1 #Movie The Shining
64302395 p1 #Movie Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb
64302507 p1 #Movie 2001:A Space Odyssey
64302581 p1 #Inbox Do something
64302602 p1 #Personal Read a book
64303204 p1 #Movie test movie
64303294 p1 #Personal something do


タスク作成

$ todoist add "3 idiots"


タスク削除

$ todoist list

...
64308215 p1 #Inbox 3 idiots

$ todoist close 64308215


デモ (with peco)


タスクの追加

pecoでプロジェクトを選択する。

Add task


タスクのクローズ

pecoでタスク一覧から選択してクローズする。

Close task


pecoと組み合わせると便利

単純なサブコマンドを用意しているので、シェルスクリプトでよしなに組み合わせてくださいというスタンスです。peco使えば楽になり、生活が潤う。

<C-x> t p: プロジェクト選択

<C-x> t l: ラベル選択
<C-x> t c: タスクを選択してクローズ

# todoist find project

function peco-todoist-project () {
local SELECTED_PROJECT="$(todoist projects | peco | head -n1 | cut -d ' ' -f 1)"
if [ -n "$SELECTED_PROJECT" ]; then
if
[ -n "$LBUFFER" ]; then
local new_left="${LBUFFER%\ } $SELECTED_PROJECT"
else
local new_left="$SELECTED_PROJECT"
fi
BUFFER=${new_left}${RBUFFER}
CURSOR=${#new_left}
fi
}
zle -N peco-todoist-project
bindkey "^xtp" peco-todoist-project

# todoist find labels
function peco-todoist-labels () {
local SELECTED_LABELS="$(todoist labels | peco | cut -d ' ' -f 1 | tr '\n' ',' | sed -e 's/,$//')"
if [ -n "$SELECTED_LABELS" ]; then
if
[ -n "$LBUFFER" ]; then
local new_left="${LBUFFER%\ } $SELECTED_LABELS"
else
local new_left="$SELECTED_LABELS"
fi
BUFFER=${new_left}${RBUFFER}
CURSOR=${#new_left}
fi
}
zle -N peco-todoist-labels
bindkey "^xtl" peco-todoist-labels

# todoist close
function peco-todoist-close() {
local SELECTED_ITEMS="$(todoist list | peco | cut -d ' ' -f 1 | tr '\n' ' ')"
if [ -n "$SELECTED_ITEMS" ]; then
BUFFER="todoist close $(echo "$SELECTED_ITEMS" | tr '\n' ' ')"
CURSOR=$#BUFFER
fi
zle accept-line
}
zle -N peco-todoist-close
bindkey "^xtc" peco-todoist-close


小並感

Go言語、いろいろ自分でゴリゴリ書かないといけない部分がありつつも、周辺ツールが非常に整っていて、開発しやすいなと思いました。