FVWMMFL(1)
β¨ FVWMMFL(1) β FvwmMFL β¨
okay bestie, gather round, because this is the Fvwm3 front-loader module and it's genuinely one of the most fun little gremlins in the whole Fvwm family π (that's the Fvwm Modules section of the manual, and the page you're reading is literally called FVWMMFL(1), iykyk).
πΈ NAME πΈ
FvwmMFL β the Fvwm3 front-loader module. that's it, that's the name, she's iconic π
π SYNOPSIS π
FvwmMFL can only be invoked by Fvwm3. Command line invocation of the
FvwmMFL will not work.
This module has no command-line options.
so basically no cap: you cannot just roll up to a terminal and run this yourself. FvwmMFL can only be invoked by Fvwm3, and trying to launch it from a command line is just not gonna work, fr fr. also β this module has no command-line options. zero. none. no flags to memorise, no --help to poke at. it's giving low-maintenance π
π¦ DESCRIPTION π¦
so what does FvwmMFL actually do? it hands you access to Fvwm events over a unix-domain socket β¨ and the whole point of that is to let externally-written programs β we call them clients β receive information from Fvwm and then do something about that event. main character energy, honestly.
the info coming out of Fvwm3 arrives in the form of JSON packets. every packet has different fields depending on the type you asked for β so no two packets are identical, they're all a little β¨uniqueβ¨ like that.
π COMMUNICATION π
the default unix-domain socket for FvwmMFL is:
$TMPDIR/fvwmmfl/fvwm_mfl_$DISPLAY.sock
want to move it somewhere else? sure, slay. you can change the path where fvwm_mfl_$DISPLAY.sock gets created by setting the FVWMMFL_SOCKET_PATH environment variable π«Ά and FvwmMFL will create it if it doesn't already exist, and set relevant permissions. she's organised like that.
π REGISTERING INTEREST π
okay so here's the fun part β you can send commands to FvwmMFL to control which information gets sent to the client, and the command that does all that work is set π the table below (turned into a cute little list because we're being girlies today) shows every event you can subscribe to:
new_windowβ Fired when a new window is mapped and visible.mapβ Fired when a window is mapped.configure_windowβ Fired when a window is moved or resized.destroy_windowβ Fired when a window is closed.new_pageβ Fired when a new page is switched to.new_deskβ Fired when a new desk is switched to.raise_windowβ Fired when a window is raised (or changes layer).lower_windowβ Fired when a window is lowered (or changed layer).focus_changeβ Fired when a window loses/gains focus.enter_windowβ Fired when a window has the pointer moved into it.leave_Windowβ Fired when a window has pointer moved out of it.window_shadeβ Fired when a window is shaded.window_unshadeβ Fired when a window is unshaded.window_nameβ Fired when the window name changes.visible_nameβ Fired when the visible window name changes.res_classβ Fired when the class of the window is set.res_nameβ Fired when the resource of the window is set.iconifyβ Fired when a window is iconified.deiconifyβ Fired when a window is deiconified.icon_nameβ Fired when the icon name changes.visible_icon_nameβ Fired when the icon's visible name changes.icon_fileβ Fired when the path to the icon changes.icon_locationβ Fired when the icon location changes.restackβ Fired when the window stacking order changes.echoβ Fired when Fvwm receives anEchocommand.
(and yes, leave_Window really does have that capital W β we respect the original's choices here π)
so say you want to register an interest in new_window and focus_change β you'd send these commands via the socket:
set new_window
set focus_change
and when you're done with an event and want to βοΈ cut it loose, you use the unset command:
unset focus_change
periodt π
π JSON FORMAT π
every packet sent to a client is in plain JSON. the information inside each packet varies depending on the event β so yeah, it shifts, deal with it π
TODO: document each JSON structure.
(not me leaving the TODO exactly where it was β bestie, I'm not about to invent lore that isn't in the original π)
β EXAMPLE β
here's how you'd monitor for focus_change events at the shell, printing out the JSON that comes back:
echo set focus_change | nc -U /tmp/fvwm_mfl.sock 2>&1 | jq --unbuffered
Outputs:
{ "focus_change": { "window": "0x5400022", "type": 0, "hilight": {
"text_colour": 16777215, "bg_colour": 32767 } } }
look at that output. gorgeous. obsessed. π₯°
π AUTHORS π
this module first appeared in 2020. babygirl is still young, still thriving π
and that's the whole page, bestie β from $TMPDIR/fvwmmfl/fvwm_mfl_$DISPLAY.sock all the way to the JSON, you now know FvwmMFL better than half the internet. go forth and subscribe to some events πΈπ¦
this was the FVWMMFL(1) page from the Fvwm Modules manual, dated 2026-07-31 β sending you love and a working socket πβοΈ
π¦ where this page comes from
- ubuntu stonking: fvwm3 1.1.5+ds-2 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms