generated at
「私をn個増やしなさい」タスク(clone task)
demo

tritaskの話
こういうことをよくする
第二領域的なタスクT1をrep:1でセットしている
こうすれば毎日取り組めるからねsta
が、1日n回取り組みたいことがある
このときどうするか?
従来は以下になる
T1を終わらせたあと、T1を複製してrep:1を抜いたT2をつくる
このT2をn個複製する
面倒くさい
一気につくれたらいいなぁと思った
つまり、
cloneme:1 みたいな属性をつくる
clone me
値は使わないのでなんでもいい(tritaskの慣例ではdummy値は1)
cloneme属性のついたタスクを実行すると、ユーザーに「これ何個複製します?」を尋ねる
4個とか答えると、4個複製される
で、元のタスク自体も終了する
---
これがあれば、 cloneme:1 rep:1 とつけることで、「n個繰り返すという挙動を行うタスク」を毎日繰り返す、になる
実質「毎日 "その日その時にn個増やす"」を実現できる
上記の面倒くささをだいぶ解消できている

実装のつもりが設計。が、たぶん天才
cloneme属性をつくる
.
スタートは秀丸エディタのダイアログでnを入力させたところから
helper.pyにはnを与える
他にも現在行を与える or 与えないがある
与えない場合、clone対象を調べるには「clonemeがついてる」「開始中である」まで必要
---
与えない場合は、helper.py側で全面的に処理する形になる
与える場合は、cloneme属性がそもそも要らない
単に「n個増やす(ただしrepは除く)」「元のタスクは普通に終了する」をするだけ
最初にダイアログでnを入れるところは確定
つまり「clonemeをしますよ」という操作を呼び出している
だったら先にnを全部入力しておいて、一気に実行した方がいいんじゃないか?
trita
2022/06/08 Wed vip1 clone:0 2022/06/08 Wed vip2 clone:0 2022/06/08 Wed vip3 clone:0
この回数だけやりたいなーってのを記入する.trita
2022/06/08 Wed vip1 clone:2 2022/06/08 Wed vip2 clone:3 2022/06/08 Wed vip3 clone:1
ソートすると
こうなる.trita
2 2022/06/08 Wed vip1 2 2022/06/08 Wed vip1 2 2022/06/08 Wed vip2 2 2022/06/08 Wed vip2 2 2022/06/08 Wed vip2 2 2022/06/08 Wed vip3 3 2022/06/09 Thu vip1 clone:0 3 2022/06/09 Thu vip2 clone:0 3 2022/06/09 Thu vip3 clone:0
これがいいだろ
天才stastasta
---
実装も難しくない
helpler.py側で、単に clone:ここが0じゃないタスク を全部処理すればいい
0じゃないタスクを処理したら、そのタスクの分は0にする
複製するタスクは today todo にする
これがあるのでもし未来日にclone:nが残ってたとしても、それがtodayに来るから気づける
死角なし

実装
sort.py
if args.sort: apply_holding(lines) apply_skipping(lines) apply_completion(lines) apply_duplicates(lines) lines.sort() return True
apply_cloning()
linesは破壊的
最後にソートするからappendでいい
Task
clone:n(n>1)があったら、nを0にする
Trueを返すことで「これcloneeやで」を示す
実際にcloneするのはapplyerがやる
あああああ、 self._options をto stringすることが想定されてない……stasta
そもそもTaskインスタンスからto stringすることを想定してないいやそれはしてる
tostringしとるやろ.py
def __str__(self): return '{0} {1} {2} {3} {4} {5}'.format( self._sortmark, self._date, self._dow, self._starttime, self._endtime, self._description )
ただdescritionsの中にoptionsがそのまま埋め込まれてる
横着するしかないか
descriptionsを文字列的にreplaceする
なんかlinesが更新されん
py
def apply_cloning(lines): newlines = [] for i, line in enumerate(lines): if line.find('clone:') == -1: newlines.append(line) continue task = Task(line) clonee_count = task.get_clonee_count() if clonee_count == 0: newlines.append(line) continue task.reset_clonee_count() newline = str(task) newlines.append(newline) for i in range(clonee_count): cloned_task = Task(line) cloned_task.remove_clonee_option() cloned_task.to_todaytodo() newline = str(cloned_task) newlines.append(newline) lines = newlines
このとき呼び出し元のlinesってnewlinesにならんのだっけ?
参照だし、なると思うんだけど
ならないっぽいんだがstastasta
なんでだっけ
なるだろ?
通った
だるいので通ったコード載せないけど

test
テストコードもok
trita
1 2022/06/09 Thu 00:00 00:00 ---- TODAY DONE hold:0 2 2022/06/09 Thu ---- TODAY TODO hold:0 2 2022/06/09 Thu 0 休憩 clone:0 2 2022/06/09 Thu 0 散歩 clone:0 2 2022/06/09 Thu 1 本XXXを読みたい clone:0 2 2022/06/09 Thu 2 YYYの執筆 clone:0 2 2022/06/09 Thu task1 2 2022/06/09 Thu task2 2 2022/06/09 Thu task3 3 2022/06/10 Fri ---- TOMORROW TODO hold:1
gif
まず最初に clone:★ここを指定している★
2と書いたら「今日は2回やる」の意
終わったらソートする
すると、指定した回数分だけタスクが増えている!

Diary
2022/06/09 20:25:51 できたと思うのでしばらく手元で試す
2022/06/16 21:02:41 便利sta
Tritaskで終了後に複製だけするdup属性は要らないので消した方がいいかもなー