概要
TODO管理ツール 作業時間計測用Plugin開発
内容
母艦エディタを秀丸からSublime Text2に乗り換え中につきマクロを移植してます。
下記の記事で行なっていたTODO管理用の仕組みをSublime Text2+PythonのPluginで実装します。
※Python始めたのは一昨日からなので記述は適当かもしれません
http://d.hatena.ne.jp/tbpg/20120328/1332954094
仕様
タスクは以下の項目からなる。タスク全体をyamlとして管理している都合上、
1行だけ読み取ると中途半端な書式になってます。
"title", "summary", "estimate", "from_date", "to_date", "diff_date" =>タイトル,要約,作業見積もり(1時間単位),開始時間,終了時間,作業時間
実サンプルは以下
- 作業準備,アクティビティの割り当て メールチェック,0.5,2013/05/24 01:03:55,2013/05/24 01:09:02,
プラグインコード
import sublime, sublime_plugin import datetime import time import re class CalculateTodoCommand(sublime_plugin.TextCommand): def run(self, edit): ret = "" region_of_line = "" for region in self.view.sel(): region_of_line = self.view.line(region) todo = TodoCalculator(self.view.substr(region_of_line)) todo.diff_date() ret = todo.get_columns() ret_str = " - " + ",".join(self) self.view.replace(edit, region_of_line, ret_str) return class TodoCalculator: def __init__(self, todo): self.todo = re.sub(r'^.*- ', '', todo) self.columns = self.todo.split(",") # yyyy/mm/dd hh:mi:ss形式の文字列からdatetimeを取得 def get_datetime(self, date_text): return datetime.datetime(*time.strptime(date_text,'%Y/%m/%d %H:%M:%S')[:6]) # 1行のTODOをカラムリストに分割 def get_columns(self): return self.columns # 差分時間の取得 def get_diff_date(self): return self.columns[self.DIFF_DATE_INDEX] def diff_date(self): columns = self.get_columns() datetime_from = self.get_datetime(self.get_from_date()) datetime_to = self.get_datetime(self.get_to_date()) datetime_diff = datetime_to - datetime_from self.columns[self.DIFF_DATE_INDEX] = str(datetime_diff) KEYS = ["title", "summary", "estimate", "from_date", "to_date", "diff_date"] for column in KEYS: def _column(self, index=KEYS.index(column)): print KEYS[index] return self.columns[index] # get_xxxメソッドの追加 setattr(TodoCalculator, "get_" + column, _column) # XXX定数の追加 setattr(TodoCalculator, column.upper() + "_INDEX", KEYS.index(column)) date_keys = ["from_date", "to_date"] for date in date_keys: def _set_now(self, index=KEYS.index(date)): self.columns[index] = datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S") # get_xxxメソッドの追加 setattr(TodoCalculator, "set_now_" + date, _set_now)
出力結果
- 準備,日次 作業準備 アクィテビティの割当 メールチェック 常時対応 日記 Evernote整理,0.5,2013/05/24 01:03:55,2013/05/24 01:09:02,0:05:07