Edit: TL;DR, a literal can’t contain multiple children. The opening bracket that starts the literal must be closed at the end of the literal, with no other yuck appended.

I’ve been playing with Elkowar’s Wacky Widgets in an attempt to replace tint2 on openbox. Specifically, I’ve been working on a taskbar widget. So far, I’ve managed to make a few bash scripts to generate all the necessary yuck (and png files) to create a rudimentary icon-only taskbar that updates itself every time _NET_ACTIVE_WINDOW changes. I’ve confirmed that the yuck works when I manually copy/paste the output of the bash script into eww.yuck.

Anyway, I’ve assigned this script to a deflisten variable called “tasks”. When I run “eww state” in a terminal, I confirm that “tasks” is indeed defined (and regularly updated) with yuck that looks like this.

spoiler

(box :tooltip Xfce4-terminal (eventbox :onclick ~/.config/eww/scripts/taskbaractions.sh 0x120000a 0x120000a (image :image-height 16 :path /home/prunerye/.config/eww/scripts/iconstorage/Xfce4-terminal.png))) (box :tooltip Geany (eventbox :onclick ~/.config/eww/scripts/taskbaractions.sh 0xe00010 0x120000a (image :image-height 16 :path /home/prunerye/.config/eww/scripts/iconstorage/Geany.png))) (box :tooltip Thunar (eventbox :onclick ~/.config/eww/scripts/taskbaractions.sh 0x140000d 0x120000a (image :image-height 16 :path /home/prunerye/.config/eww/scripts/iconstorage/Thunar.png)))

(Unrelated, but why doesn’t eww recognize “~/” in image filepaths?)

But when I use “tasks” to generate my taskbar widget with a literal, nothing appears, save for a slight overall change in the spacing on my topbar, though this happens inconsistently. Here is the relevent yuck.

spoiler

(defwidget task_bar [] (box :orientation “horizontal” :space-evenly true :spacing 2 :halign “start” (literal :content tasks)))

Here’s the full tree:

spoiler

(defwindow main :class “main” :monitor 0 :geometry (geometry :x “0px” :y “0px” :width “100%” :height “16px” :anchor “top center”) :vexpand false :stacking “fg” :windowtype “dock” :wm-ignore true :reserve (struts :distance “16px” :side “top”) (topbar))

(defwidget topbar [] (box :orientation “h” :space-evenly false (foo) (task_bar) (bar)))

(deflisten tasks ~/.config/eww/scripts/taskbarliteral.sh)

(defwidget task_bar [] (box :orientation “horizontal” :space-evenly true :spacing 2 :halign “start” (literal :content tasks)))

I found a possibly related closed issue at https://github.com/elkowar/eww/issues/871 but the issue doesn’t provide much detail.

Any idea what I’m doing wrong?

Edit: Lemmy does funny things with ` quotes. Click the view source button to see raw text.

Edit2: I booted up my openbox/eww setup this morning and was shocked to find a working task bar when I opened a window… but only the first window. Once I open a second window, my taskbar is blank.

Edit3: Edit2 was my eureka moment. Why would only the first window load? I now have a suspicion that eww literals are treated as parents that can’t have more than one child; when I shifted the literal’s parent “box” into the bash script, the task bar suddenly worked! The new task_bar defwidget looks like this.

spoiler

(defwidget task_bar [] (literal :content tasks))

And “tasks” is now defined as

spoiler

(box :orientation “horizontal” :space-evenly true :spacing 2 :halign “start” (box :tooltip Xfce4-terminal (eventbox :onclick ~/.config/eww/scripts/taskbaractions.sh 0x120000a 0x120000a (image :image-height 16 :path /home/prunerye/.config/eww/scripts/iconstorage/Xfce4-terminal.png))) (box :tooltip Geany (eventbox :onclick ~/.config/eww/scripts/taskbaractions.sh 0xe00010 0x120000a (image :image-height 16 :path /home/prunerye/.config/eww/scripts/iconstorage/Geany.png))) (box :tooltip Thunar (eventbox :onclick ~/.config/eww/scripts/taskbaractions.sh 0x140000d 0x120000a (image :image-height 16 :path /home/prunerye/.config/eww/scripts/iconstorage/Thunar.png))) )