Trouble getting command expansion in FvwmScript to work

I have this script where I am trying to get the viewport width for an info window, but I can’t get it to work.

WindowTitle {Info}
WindowSize  160 300

  Set $width = (GetOutput {echo $[vp.width]} 1 -1)

  ChangeTitle 1 $width

Widget 1
 Position 0 0
 Size 120 20
 Type ItemDraw
 Flags NoReliefString
 Title {}
 Case message of
  SingleClic :

I have tried 4 different things in GetOutput, but none of them seem to work:

  • echo $[vp.width]
  • echo $vp.width
  • echo $($[vp.width])
  • echo $(perl -e 'printf($[vp.width])')

I tested the perl method with numbers, so I know that using inline perl works like in the CLI.

I am starting to believe that using the command expansion that is provided with fvwm isn’t possible to use in FvwmScript. If it isn’t, I would at least want to know

GetOutput runs a command in a shell (not via fvwm), so the echo command is just the shell echo, and the shell doesn’t know how to expand variables internal to fvwm’s variable expansion. I was looking through the FvwmScript manual page, and didn’t see any way to send commands to fvwm directly, but you could do this via FvwmCommand or FvwmPrompt (depending on which one you have built).

So in theory you could call FvwmCommand 'Echo $[vp.width]' (or FvwmPrompt), to let fvwm expand the variable, but fvwm3 will output this to a logfile (only if logging is turned on), and then you’ll have to parse the tail of the log to get the value. (fvwm2 will output this to stderr which is often ~/.xsession-errors and you’ll still have to parse the file from that).

You might want to look into other xorg shell tools that allow you to get information about the current size of the view port. So maybe parsing the output of xrandr -q would work better.

So what you’re saying is that the only way of doing this at the moment is through some hacky means, but that it should theoretically be possible?

Modules can’t expand fvwm variables. Note you could send the FvwmScript parameters, and thus when you launch the script from fvwm, expand the variable, FvwmScript ScriptName $[vp.width], and then use the parameter in the script.

Thanks for the idea. I think this will be my solution to this problem

Is there any way to mark this as solved?

This isn’t an issue but a discussion, just leave it for others, it will eventually lock itself after enough time has passed.