From fc9024ab82701eb9a2a7a4a34187e37e902c58a4 Mon Sep 17 00:00:00 2001 From: nojhan Date: Sat, 12 Aug 2023 20:26:43 +0200 Subject: [PATCH] add some theme on raw --- .task/backlog.data | 6 +++ .task/pending.data | 3 +- .task/undo.data | 23 ++++++++++ twd.py => taskwarrior-deluxe.py | 74 ++++++++++++++++++++++++++------- 4 files changed, 91 insertions(+), 15 deletions(-) rename twd.py => taskwarrior-deluxe.py (81%) diff --git a/.task/backlog.data b/.task/backlog.data index 0dc8c7a..a0153cb 100644 --- a/.task/backlog.data +++ b/.task/backlog.data @@ -10,3 +10,9 @@ {"description":"semantic allow tags starting with a hash to refer to a github issue or PR","entry":"20230811T170722Z","modified":"20230811T171645Z","status":"pending","uuid":"06cf70a9-4f0e-4b32-b7bb-d1799803665c","tags":["feat"]} {"description":"semantic tags : allow tags starting with a hash to refer to a github issue or PR","entry":"20230811T170722Z","modified":"20230811T171703Z","status":"pending","uuid":"06cf70a9-4f0e-4b32-b7bb-d1799803665c","tags":["feat"]} {"description":"styling: apply configurable styles to each field and state with semantics","entry":"20230811T171937Z","modified":"20230811T171937Z","status":"pending","uuid":"17819637-4f4a-4e46-8622-12d8243c54da","tags":["feat"]} +{"description":"styling: apply configurable styles to each field and state with semantics","entry":"20230811T171937Z","modified":"20230811T202525Z","start":"20230811T202525Z","status":"pending","uuid":"17819637-4f4a-4e46-8622-12d8243c54da","tags":["feat"]} +{"description":"more themes","entry":"20230812T182344Z","modified":"20230812T182344Z","status":"pending","uuid":"9ee183d4-3413-4efa-ba68-10d709669c05","tags":["feat"]} +{"description":"more themes","entry":"20230812T182344Z","modified":"20230812T182451Z","status":"pending","uuid":"9ee183d4-3413-4efa-ba68-10d709669c05","tags":["bug","feat"]} +{"description":"more themes","entry":"20230812T182344Z","modified":"20230812T182523Z","status":"pending","uuid":"9ee183d4-3413-4efa-ba68-10d709669c05","tags":["feat"]} +{"description":"more themes","entry":"20230812T182344Z","modified":"20230812T182634Z","status":"pending","uuid":"9ee183d4-3413-4efa-ba68-10d709669c05","tags":["bug"]} +{"description":"more themes","entry":"20230812T182344Z","modified":"20230812T182638Z","status":"pending","uuid":"9ee183d4-3413-4efa-ba68-10d709669c05","tags":["feat"]} diff --git a/.task/pending.data b/.task/pending.data index ede9087..d09c808 100644 --- a/.task/pending.data +++ b/.task/pending.data @@ -4,4 +4,5 @@ [description:"sort by urgency" entry:"1691773782" modified:"1691773782" status:"pending" tags:"feat" tags_feat:"x" uuid:"4f041f52-739a-4aca-94e6-164f43e61866"] [description:"config file.s" entry:"1691773951" modified:"1691773951" status:"pending" tags:"feat" tags_feat:"x" uuid:"4d822c4a-d51e-4992-8a22-6e0167ac197a"] [description:"fix escaped add: when passing add with escapable characters, bug ensues." entry:"1691774077" modified:"1691774077" status:"pending" tags:"bug" tags_bug:"x" uuid:"79e1ba11-15ae-489f-9868-ab6adea40a91"] -[description:"styling: apply configurable styles to each field and state with semantics" entry:"1691774377" modified:"1691774377" status:"pending" tags:"feat" tags_feat:"x" uuid:"17819637-4f4a-4e46-8622-12d8243c54da"] +[description:"styling: apply configurable styles to each field and state with semantics" entry:"1691774377" modified:"1691785525" start:"1691785525" status:"pending" tags:"feat" tags_feat:"x" uuid:"17819637-4f4a-4e46-8622-12d8243c54da"] +[description:"more themes" entry:"1691864624" modified:"1691864798" status:"pending" tags:"feat" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] diff --git a/.task/undo.data b/.task/undo.data index 3f2f16c..d9f0885 100644 --- a/.task/undo.data +++ b/.task/undo.data @@ -39,3 +39,26 @@ new [description:"semantic tags : allow tags starting with a hash to refer to a time 1691774377 new [description:"styling: apply configurable styles to each field and state with semantics" entry:"1691774377" modified:"1691774377" status:"pending" tags:"feat" tags_feat:"x" uuid:"17819637-4f4a-4e46-8622-12d8243c54da"] --- +time 1691785525 +old [description:"styling: apply configurable styles to each field and state with semantics" entry:"1691774377" modified:"1691774377" status:"pending" tags:"feat" tags_feat:"x" uuid:"17819637-4f4a-4e46-8622-12d8243c54da"] +new [description:"styling: apply configurable styles to each field and state with semantics" entry:"1691774377" modified:"1691785525" start:"1691785525" status:"pending" tags:"feat" tags_feat:"x" uuid:"17819637-4f4a-4e46-8622-12d8243c54da"] +--- +time 1691864624 +new [description:"more themes" entry:"1691864624" modified:"1691864624" status:"pending" tags:"feat" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +--- +time 1691864691 +old [description:"more themes" entry:"1691864624" modified:"1691864624" status:"pending" tags:"feat" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +new [description:"more themes" entry:"1691864624" modified:"1691864691" status:"pending" tags:"bug,feat" tags_bug:"x" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +--- +time 1691864723 +old [description:"more themes" entry:"1691864624" modified:"1691864691" status:"pending" tags:"bug,feat" tags_bug:"x" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +new [description:"more themes" entry:"1691864624" modified:"1691864723" status:"pending" tags:"feat" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +--- +time 1691864794 +old [description:"more themes" entry:"1691864624" modified:"1691864723" status:"pending" tags:"feat" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +new [description:"more themes" entry:"1691864624" modified:"1691864794" status:"pending" tags:"bug" tags_bug:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +--- +time 1691864798 +old [description:"more themes" entry:"1691864624" modified:"1691864794" status:"pending" tags:"bug" tags_bug:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +new [description:"more themes" entry:"1691864624" modified:"1691864798" status:"pending" tags:"feat" tags_feat:"x" uuid:"9ee183d4-3413-4efa-ba68-10d709669c05"] +--- diff --git a/twd.py b/taskwarrior-deluxe.py similarity index 81% rename from twd.py rename to taskwarrior-deluxe.py index 4da5bef..2c0ccd7 100755 --- a/twd.py +++ b/taskwarrior-deluxe.py @@ -66,7 +66,7 @@ class task: desc = "\n".join(textwrap.wrap(desc.strip(), self.wrap_width)) if sid in touched: - title = "*"+title+"*" + title = rich.text.Text(title, style='touched') segments = [] for key in self.show_only: @@ -74,21 +74,25 @@ class task: val = task[key] segment = f"{key}: " if type(val) == str: - segments.append(segment+t) + segments.append(rich.text.Text(segment+t, style=key)) elif type(val) == list: # FIXME Columns does not fit. # g = Columns([f"+{t}" for t in val], expand = False) - g = rich.console.Group(*[f"+{t}" for t in val], fit = True) + g = rich.console.Group(*[rich.text.Text(f"+{t}", style=key) for t in val], fit = True) segments.append(g) else: - segments.append(segment+str(val)) + segments.append(rich.text.Text(segment+str(val), style=key)) # FIXME Columns does not fit. # cols = Columns(segments) cols = rich.console.Group(*segments, fit = True) grp = rich.console.Group(desc, cols, fit = True) - panel = rich.panel.Panel(grp, title = title, - title_align="left", expand = False, padding = (0,1)) + if sid in touched: + panel = rich.panel.Panel(grp, title = title, + title_align="left", expand = False, padding = (0,1), border_style = 'touched') + else: + panel = rich.panel.Panel(grp, title = title, + title_align="left", expand = False, padding = (0,1)) return panel @@ -118,7 +122,7 @@ class stack: def __call__(self, tasks): keys = self.tasker.show_only - table = rich.table.Table(box = None, show_header = False, show_lines = True, expand = True) + table = rich.table.Table(box = None, show_header = False, show_lines = True, expand = True, row_styles=['row_odd', 'row_even']) table.add_column('H') for k in keys: table.add_column(k) @@ -126,7 +130,7 @@ class stack: for task in tasks: taskers = self.tasker(task) if str(task['id']) in self.tasker.touched: - row = ['>'] + row = [rich.text.Text('▶', style = 'touched')] else: row = [''] @@ -134,14 +138,15 @@ class stack: if k in task: val = taskers[k] if type(val) == str: - row.append( val ) + row.append( rich.text.Text(val, style=k) ) elif type(val) == list: - row.append( " ".join(val) ) + # FIXME use Columns if does not expand. + row.append( rich.text.Text(" ".join(val), style=k) ) else: - row.append( str(val) ) + row.append( rich.text.Text(str(val), style=k) ) else: row.append("") - table.add_row(*[str(i) for i in row]) + table.add_row(*[t for t in row]) return table @@ -289,6 +294,43 @@ def parse_touched(out): return re.findall('[ModifyingCreated]+ task ([0-9]+)', out) +def get_themes(name = None): + themes = { + "none": { + 'touched': '', + 'id': '', + 'description': '', + 'entry': '', + 'modified': '', + 'started': '', + 'status': '', + 'uuid': '', + 'tags': '', + 'urgency': '', + 'row_odd': '', + 'row_even' : '', + }, + "nojhan": { + 'touched': '#4E9A06', + 'id': 'bold color(214)', + 'description': 'white', + 'entry': '', + 'modified': 'color(240)', + 'started': '', + 'status': 'bold italic white', + 'uuid': '', + 'tags': 'color(27)', + 'urgency': 'color(219)', + 'row_odd': 'on #262121', + 'row_even' : 'on #2d2929', + }, + } + if name: + return themes[name] + else: + return themes + + if __name__ == "__main__": parser = argparse.ArgumentParser( @@ -306,6 +348,8 @@ if __name__ == "__main__": help="Separator used for lists that are passed as options arguments.") layouts = parser.add_argument_group('layout options') + layouts.add_argument('-t', '--theme', metavar='NAME', type=str, default='none', + choices = get_themes().keys(), help="Color theme.") layouts.add_argument('--card-flat-wrap', metavar="NB", type=int, default=25, help="Number of character at which to wrap the description of Flat Cards.") @@ -331,6 +375,8 @@ if __name__ == "__main__": else: show_only = showed + theme = rich.theme.Theme(get_themes(asked.theme)) + # tasker = task.Card(show_only, touched = touched, wrap_width = asked.card_flat_wrap) tasker = task.Raw(show_only, touched = touched) @@ -343,7 +389,7 @@ if __name__ == "__main__": # sectioner = sections.Vertical(stacker, sort_on_values, group_by_status) sectioner = sections.Horizontal(stacker, sort_on_values, group_by_status) - console = Console() - console.rule("taskwarrior-fancy") + console = Console(theme = theme) + # console.rule("taskwarrior-deluxe") console.print(sectioner(jdata))