Skip to content

Tag Highlighting breaks when there are more than 2 tags #6

@TheKamboy

Description

@TheKamboy

I'm using a slightly modified version of the catppuccin config, and I have issues with highlighting with tags. I believe it is with the color highlighting.

Tags not next to each other

With Config

Image

Without Config

Image

Tags next to each other

With Config

CRASH

kamfurdev@hp-garuda in ~/.config/dooit via  v3.13.3
󰛓 ❯ dooit
╭──────────────────────────────────────────────────────── Traceback (most recent call last) ────────────────────────────────────────────────────────╮
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/model_tree.py:158 in on_mount                              │
│                                                                                                                                                   │
│   155 │   │   self.refresh_options()                                                           ╭─────────────────── locals ───────────────────╮   │
│   156 │                                                                                        │ self = TodosTree(id='TodosTree_Workspace_3') │   │
│   157 │   def on_mount(self):                                                                  ╰──────────────────────────────────────────────╯   │
│ ❱ 158 │   │   self.force_refresh()                                                                                                                │
│   159 │                                                                                                                                           │
│   160 │   @require_highlighted_node                                                                                                               │
│   161 │   def start_sort(self):                                                                                                                   │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/_decorators.py:17 in wrapper                               │
│                                                                                                                                                   │
│   14 │   │   highlighted_id = self.node.id if self.highlighted is not None else None                                                              │
│   15 │   │   highlighted_index = self.highlighted                                                                                                 │
│   16 │   │                                                                                                                                        │
│ ❱ 17 │   │   func(self, *args, **kwargs)                                                                                                          │
│   18 │   │                                                                                                                                        │
│   19 │   │   try:                                                                                                                                 │
│   20 │   │   │   if highlighted_id is None:                                                                                                       │
│                                                                                                                                                   │
│ ╭───────────────────────── locals ──────────────────────────╮                                                                                     │
│ │              args = ()                                    │                                                                                     │
│ │    highlighted_id = None                                  │                                                                                     │
│ │ highlighted_index = None                                  │                                                                                     │
│ │            kwargs = {}                                    │                                                                                     │
│ │              self = TodosTree(id='TodosTree_Workspace_3') │                                                                                     │
│ ╰───────────────────────────────────────────────────────────╯                                                                                     │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/model_tree.py:129 in force_refresh                         │
│                                                                                                                                                   │
│   126 │                                                                                        ╭─────────────────── locals ───────────────────╮   │
│   127 │   @fix_highlight                                                                       │ self = TodosTree(id='TodosTree_Workspace_3') │   │
│   128 │   def force_refresh(self) -> None:                                                     ╰──────────────────────────────────────────────╯   │
│ ❱ 129 │   │   self._force_refresh()                                                                                                               │
│   130 │   │   self.get_column_width.cache_clear()                                                                                                 │
│   131 │                                                                                                                                           │
│   132 │   def _force_refresh(self) -> None:                                                                                                       │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/model_tree.py:155 in _force_refresh                        │
│                                                                                                                                                   │
│   152 │   │                                                                                                                                       │
│   153 │   │   has_options = bool(options)                                                                                                         │
│   154 │   │   self.empty_message.display = not has_options                                                                                        │
│ ❱ 155 │   │   self.refresh_options()                                                                                                              │
│   156 │                                                                                                                                           │
│   157 │   def on_mount(self):                                                                                                                     │
│   158 │   │   self.force_refresh()                                                                                                                │
│                                                                                                                                                   │
│ ╭────────────────────── locals ───────────────────────╮                                                                                           │
│ │ has_options = True                                  │                                                                                           │
│ │ highlighted = None                                  │                                                                                           │
│ │     options = [Option(prompt='', id='Todo_7')]      │                                                                                           │
│ │        self = TodosTree(id='TodosTree_Workspace_3') │                                                                                           │
│ ╰─────────────────────────────────────────────────────╯                                                                                           │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/model_tree.py:220 in refresh_options                       │
│                                                                                                                                                   │
│   217 │   def refresh_options(self) -> None:                                                   ╭─────────────────── locals ───────────────────╮   │
│   218 │   │   for i in self._options:                                                          │    i = Option(prompt='', id='Todo_7')        │   │
│   219 │   │   │   assert i.id is not None                                                      │ self = TodosTree(id='TodosTree_Workspace_3') │   │
│ ❱ 220 │   │   │   new_prompt = self._renderers[i.id].prompt                                    ╰──────────────────────────────────────────────╯   │
│   221 │   │   │   if i.prompt != new_prompt:                                                                                                      │
│   222 │   │   │   │   i.set_prompt(self._renderers[i.id].prompt)                                                                                  │
│   223                                                                                                                                             │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/renderers/base_renderer.py:40 in prompt                          │
│                                                                                                                                                   │
│    37 │                                                                                                                                           │
│    38 │   @property                                                                                                                               │
│    39 │   def prompt(self) -> RenderableType:                                                                                                     │
│ ❱  40 │   │   return self.make_renderable()                                                                                                       │
│    41 │                                                                                                                                           │
│    42 │   @property                                                                                                                               │
│    43 │   def model(self) -> ModelType:                                                                                                           │
│                                                                                                                                                   │
│ ╭─────────────────────────────────────── locals ────────────────────────────────────────╮                                                         │
│ │ self = <dooit.ui.widgets.renderers.todo_renderer.TodoRender object at 0x72165a0d60d0> │                                                         │
│ ╰───────────────────────────────────────────────────────────────────────────────────────╯                                                         │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/renderers/base_renderer.py:72 in make_renderable                 │
│                                                                                                                                                   │
│    69 │   │   │   attr = item.value                                                                                                               │
│    70 │   │   │   component = self._get_component(attr)                                                                                           │
│    71 │   │   │                                                                                                                                   │
│ ❱  72 │   │   │   if len(component.render()) > self._get_max_width(attr):                                                                         │
│    73 │   │   │   │   self.tree.get_column_width.cache_clear()                                                                                    │
│    74 │   │   │                                                                                                                                   │
│    75 │   │   │   if component.is_editing:                                                                                                        │
│                                                                                                                                                   │
│ ╭─────────────────────────────────────────────────── locals ───────────────────────────────────────────────────╮                                  │
│ │      attr = 'description'                                                                                    │                                  │
│ │ component = <dooit.ui.widgets.inputs.model_inputs.TodoDescription object at 0x72165a0d6210>                  │                                  │
│ │ formatter = <dooit.ui.api.api_components.formatters.model_formatters.TodoFormatter object at 0x72165b24e120> │                                  │
│ │      item = <TodoWidget.description: 'description'>                                                          │                                  │
│ │    layout = [                                                                                                │                                  │
│ │             │   <TodoWidget.status: 'status'>,                                                               │                                  │
│ │             │   <TodoWidget.urgency: 'urgency'>,                                                             │                                  │
│ │             │   <TodoWidget.description: 'description'>,                                                     │                                  │
│ │             │   <TodoWidget.due: 'due'>                                                                      │                                  │
│ │             ]                                                                                                │                                  │
│ │      nest = 0                                                                                                │                                  │
│ │  rendered = <text '' [Span(0, 0, 'bold #f38ba8')] ''>                                                        │                                  │
│ │       row = [<text '\uf10c' [Span(0, 1, '#f9e2af')] ''>, <text '' [Span(0, 0, 'bold #f38ba8')] ''>]          │                                  │
│ │      self = <dooit.ui.widgets.renderers.todo_renderer.TodoRender object at 0x72165a0d60d0>                   │                                  │
│ │     table = <rich.table.Table object at 0x72165a0d6990>                                                      │                                  │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯                                  │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/renderers/base_renderer.py:56 in _get_max_width                  │
│                                                                                                                                                   │
│    53 │   │   return max(len(component.value) + 1, len(rendered))                                                                                 │
│    54 │                                                                                                                                           │
│    55 │   def _get_max_width(self, attr: str) -> int:                                                                                             │
│ ❱  56 │   │   return self.tree.get_column_width(attr)                                                                                             │
│    57 │                                                                                                                                           │
│    58 │   def make_renderable(self) -> Table:                                                                                                     │
│    59 │   │   layout = self.table_layout                                                                                                          │
│                                                                                                                                                   │
│ ╭─────────────────────────────────────── locals ────────────────────────────────────────╮                                                         │
│ │ attr = 'description'                                                                  │                                                         │
│ │ self = <dooit.ui.widgets.renderers.todo_renderer.TodoRender object at 0x72165a0d60d0> │                                                         │
│ ╰───────────────────────────────────────────────────────────────────────────────────────╯                                                         │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/model_tree.py:56 in get_column_width                       │
│                                                                                                                                                   │
│    53 │                                                                                        ╭─────────────────── locals ───────────────────╮   │
│    54 │   @cache                                                                               │ attr = 'description'                         │   │
│    55 │   def get_column_width(self, attr: str) -> int:                                        │ self = TodosTree(id='TodosTree_Workspace_3') │   │
│ ❱  56 │   │   return max(i._get_attr_width(attr) for i in self._renderers.values())            ╰──────────────────────────────────────────────╯   │
│    57 │                                                                                                                                           │
│    58 │   @property                                                                                                                               │
│    59 │   def formatter(self) -> "ModelFormatterBase":                                                                                            │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/trees/model_tree.py:56 in <genexpr>                              │
│                                                                                                                                                   │
│    53 │                                                                                                                                           │
│    54 │   @cache                                                                                                                                  │
│    55 │   def get_column_width(self, attr: str) -> int:                                                                                           │
│ ❱  56 │   │   return max(i._get_attr_width(attr) for i in self._renderers.values())                                                               │
│    57 │                                                                                                                                           │
│    58 │   @property                                                                                                                               │
│    59 │   def formatter(self) -> "ModelFormatterBase":                                                                                            │
│                                                                                                                                                   │
│ ╭─────────────────────────────────────── locals ────────────────────────────────────────╮                                                         │
│ │   .0 = <dict_valueiterator object at 0x721659eac680>                                  │                                                         │
│ │ attr = 'description'                                                                  │                                                         │
│ │    i = <dooit.ui.widgets.renderers.todo_renderer.TodoRender object at 0x72165a0d60d0> │                                                         │
│ ╰───────────────────────────────────────────────────────────────────────────────────────╯                                                         │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/widgets/renderers/base_renderer.py:49 in _get_attr_width                 │
│                                                                                                                                                   │
│    46 │   def _get_attr_width(self, attr: str) -> int:                                                                                            │
│    47 │   │   component = self._get_component(attr)                                                                                               │
│    48 │   │   formatter = self.tree.formatter                                                                                                     │
│ ❱  49 │   │   rendered: str = getattr(formatter, attr).format_value(                                                                              │
│    50 │   │   │   component.model_value, component.model                                                                                          │
│    51 │   │   )                                                                                                                                   │
│    52                                                                                                                                             │
│                                                                                                                                                   │
│ ╭─────────────────────────────────────────────────── locals ───────────────────────────────────────────────────╮                                  │
│ │      attr = 'description'                                                                                    │                                  │
│ │ component = <dooit.ui.widgets.inputs.model_inputs.TodoDescription object at 0x72165a0d6210>                  │                                  │
│ │ formatter = <dooit.ui.api.api_components.formatters.model_formatters.TodoFormatter object at 0x72165b24e120> │                                  │
│ │      self = <dooit.ui.widgets.renderers.todo_renderer.TodoRender object at 0x72165a0d60d0>                   │                                  │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯                                  │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/dooit/ui/api/api_components/formatters/formatter_store.py:129 in format_value     │
│                                                                                                                                                   │
│   126 │   │   │   │   value = str(res)                                                                                                            │
│   127 │   │                                                                                                                                       │
│   128 │   │   if value:                                                                                                                           │
│ ❱ 129 │   │   │   return Text.from_markup(value)                                                                                                  │
│   130 │   │                                                                                                                                       │
│   131 │   │   return Text("-", justify="center", style="dim")                                                                                     │
│   132                                                                                                                                             │
│                                                                                                                                                   │
│ ╭───────────────────────────────────────────────── locals ──────────────────────────────────────────────────╮                                     │
│ │  model = <dooit.api.todo.Todo object at 0x72165a0c0890>                                                   │                                     │
│ │ params = {'api': <dooit.ui.api.dooit_api.DooitAPI object at 0x72165b24d550>}                              │                                     │
│ │    res = None                                                                                             │                                     │
│ │   self = <dooit.ui.api.api_components.formatters.formatter_store.FormatterStore object at 0x72165b24e270> │                                     │
│ │  value = 'tags are [#b4befe[#b4befe]\uf02b \uf02b re[/#b4befe]ally[/#b4befe] @cool'                       │                                     │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯                                     │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/rich/text.py:287 in from_markup                                                   │
│                                                                                                                                                   │
│ /home/kamfurdev/.local/share/mamba/lib/python3.13/site-packages/rich/markup.py:167 in render                                                      │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
MarkupError: closing tag '[/#b4befe]' at position 46 doesn't match any open tag

Without Config

Image

If dooit crashes with tags next to each other, I either have to remove the config, or remove the tags using an SQL editor.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions