TODO管理用のコマンドをざっくり書いてみた
昨日仕事していて、パソコンで使うTODOアプリがあんまり便利なのないなーって思ったので、適当なの作った。
ちなみにXubuntuで今はお仕事の資料を書いている。LibreOfficeそこそこ使えるじゃん。
要件
- コマンドでTODOを追加できる
- シンプルにテキストで管理しておきたい
- Linuxで動けばいいや
パッと書きたいときに追加できるのが重要でEmacsをいちいち立ち上げるのもかったるいので、コマンドにしたかった。
ざっくり書いたコード
#!/usr/bin/gosh (use gauche.parseopt) (use file.util) (use util.match) (define-constant *todo-file* (string-append (home-directory) "/.my-todo")) (define-constant *oport* (open-output-file *todo-file* :if-exists :append :if-does-not-exist :create)) (define-constant *iport* (open-input-file *todo-file*)) (define (add-todo content) (write content *oport*) (newline *oport*) (flush *oport*)) (define (todo-list) (display(port->string *iport*))) (define (main args) (let-args (cdr args) ((mode "m|mode=s") ;; (help "h|help" => (cut show-help (car args))) . content) (match mode ["add" (add-todo (string->symbol (car content)))] ["list" (todo-list)] [else (error mode content)] ) (close-input-port *iport*) (close-output-port *oport*)))
追記
ばばろあお兄さんから盛大にツッコまれたので直してみた。
#!/usr/bin/gosh (use gauche.parseopt) (use file.util) (use util.match) (define-constant *todo-file* (string-append (home-directory) "/.my-todo")) (define (add-todo content) (call-with-output-file *todo-file* (^p (write content p) (newline p) (flush p)) :if-exists :append)) (define (todo-list) (for-each (cut print <>) (call-with-input-file *todo-file* (^p (let loop ((ls '()) (line (read-line p))) (if (eof-object? line) ls (loop (cons line ls) (read-line p)))))))) (define (main args) (let-args (cdr args) ((mode "m|mode=s") . content) (match mode ["add" (add-todo (car content))] ["list" (todo-list)] [else (error mode content)] )))
@ayato_p 突っ込みたいところが多くてめんどくさくなっちゃって(ゝω∂)☆
2013-06-27 18:57:35 via twicca to @ayato_p
今後
- データを一件ずつ削除できるようにしたい(とりあえず、消すときはあまりパッと消せる必要もないのでEmacs開いて消してる)
- 優先順位付けもしたい
- web上でデータ管理したい(コマンドで追加したりするのは変えない)
- git cloneみたいなコマンドのスタイルにしたい(かも)
- 相変わらずエラー処理適当すぎるので綺麗にする