Hello Arnaud. Please excuse the long delay. Arnaud Daby-Seesaram writes: > "pelzflorian (Florian Pelz)" writes: >> I am not sure if program-file or scheme-file should be preferred. > > I think that in our use case, program-file is better, because it does > not require to call Guile explicitly in the Sway configuration (all we > care about is that the serialised script "behaves like a menu program"). Not sure, because program-file calls guile with --no-auto-compile. Maybe someone else has an opinion. Also it does not really matter. >>>> Another more thing. I try (bar (sway-bar)), but it prints an empty bar >>>> configuration to .config/sway/config. In patch 6, you added >>>> no-serialization. Did this break it? >[…] >> (bar (sway-bar >> (position 'top))) >> >> is fine. Not sure what defaults are best. > > Yes, this is arbitrary in my code. Rationale behind my choice: > > At first, I wanted to make the default value match that of the default > Sway configuration file. However, this would force some fields to be > mandatory (namely status-command, colors and position). As users may > not want to specify these fields in their Sway configuration, > I preferred to make everything optional. I agree to better keep the sway-bar record simple. Maybe a more complete sway-bar should be the default value for bar rather than optional, because it is what upstream does, although then I would disagree with Hilton (?) and actually I prefer no bar. >> Arnaud Daby-Seesaram writes: >>>>> (receive (from to pid) >>>>> ((@@ (ice-9 popen) open-process) OPEN_BOTH wmenu) >>>> >>>> Better use @ instead of @@. >>> Unfortunately, `open-process' is not exported in `(ice-9 popen)', so I >>> kept @@. >>> >> >> Not sure if exported open-pipe* would be better. open-process is >> checked in guile tests, but not exported, that is right. But maybe a >> red flag not to use it. > > I first tried to use (open-pipe wmenu OPEN_BOTH). However, I needed > to close the port to wmenu before reading its output. I do not know how > to do that with `open-pipe'. > > > Best, In vain I tried rewriting code to use open-pipe* until I looked at the source : > static void read_items(struct menu *menu) { > char buf[sizeof menu->input]; > while (fgets(buf, sizeof buf, stdin)) { > char *p = strchr(buf, '\n'); > if (p) { > *p = '\0'; > } > menu_add_item(menu, strdup(buf), false); > } > } Well, I guess the port must be closed or wmenu does not leave the while loop. No other way. But perhaps use pipeline from (ice-9 popen), which is public, unlike open-process.