FVWMFORM(1)

Fvwm Modules presents... okay bestie, this is FvwmForm, the input form module for Fvwm πŸ’– I'm literally obsessed with how it makes asking for user input look effortless. Periodt.

✨ NAME ✨

FvwmForm β€” input form module for Fvwm. She's that girl when you need to get user input and act on it. No cap.


🌸 SYNOPSIS 🌸

Module FvwmForm [ Alias ]

okay so FvwmForm must be spawned by Fvwm. If invoked from the command line, FvwmForm prints its version number and exits. So like, she's not a standalone bestie β€” she needs her Fvwm parent, fr fr. πŸ’…


πŸ’… DESCRIPTION πŸ’…

FvwmForm provides a mechanism to get user input and act accordingly. ✨ This is achieved by means of a form that the user can fill out, and from which the user can select actions he wants Fvwm to take. A form consists of five types of items: text labels, single-line text inputs, mutually-exclusive selections, multiple-choice selections, and action buttons. These items are arranged into several lines, with a very flexible layout.

A text label only serves the purpose of explanation. It cannot accept any input. (So like, it's decoration with a job πŸ’–)

A timeout entry provides a mechanism for timing out the form and performing a certain action when the timeout occurs. The countdown is displayed similar to a text label except that it updates with the amount of time left.

A text input field can be used to edit a single-line string. FvwmForm accepts Emacs-style cursor movement keys. See FvwmFormInput for details. Mouse copy is not supported, but you can paste.

A selection consists of several choices.

The selection itself is a logical entity that doesn't have any display feature. (It's giving invisible main character energy, lowkey.)

Each choice is displayed as a push-button followed by a explanatory text label. When selected, an exclusive choice shows a circle in the middle, while a multiple choice shows a check.

An action button, when activated sends one or more commands to Fvwm or executes shell commands. The shell commands can contain the content of the input fields on the form and reflect the setting of choices on the form.

The action buttons can be activated thru keyboard or mouse.


πŸ¦‹ INITIALIZATION πŸ¦‹

FvwmForm invoked without an alias uses configuration commands starting with *FvwmForm.

Normally you would invoke FvwmForm with an alias representing the name of a form, its configuration commands and configuration file. For example, the command Module FvwmForm Rlogin uses configuration commands starting with *Rlogin, and reads the optional configuration file Rlogin.

All forms, regardless of alias, scan first for configuration commands that start with *FvwmFormDefault. These commands normally come from the builtin form FvwmForm-Form which saves commands to the file .FvwmForm.

The physical reading of the optional input file, .FvwmForm, is done only the first time FvwmForm is invoked, or after FvwmForm-Form updates the file.

When the file .FvwmForm is read, it is done by sending the command Read .FvwmForm Quiet to fvwm. Because of the way the read command works, the file can reside in your personal fvwm user directory, or be in the fvwm data directory. See the description of the read command in the fvwm man page for more information about the environment variable $FVWM_USERDIR.

Then FvwmForm reads the rest of the configuration fvwm has stored up. Fvwm stores configuration on an ongoing basis. The initial configuration comes from the .fvwm2rc file. Other sources, including Read commands can define a form.

When letting FvwmForm and fvwm read files, remember that these files contain commands that can execute shell commands, so you should be careful about setting permissions on these files. 🚨 This is not a drill, bestie β€” permissions matter.

When FvwmForm is invoked with a window context, e.g. from a window menu, all commands it sends to Fvwm will have that window context. This would allow FvwmForm to control the window it is invoked from.

After all the configuration commands have been read, FvwmForm displays the form defined by the commands.


πŸŽ€ DEFAULTS πŸŽ€

FvwmForm creates a built-in form named FvwmForm-Form that creates a file called .FvwmForm. This file contains saved default form colors and fonts. Other forms use these defaults unless they are overridden within the form.

The default creating form would normally be invoked from a "module menu". For example, if you call your module menu Module-Popup, you would add the line: AddToMenu "Module-Popup" "FvwmForm Defaults" FvwmForm FvwmForm-Form

When you select "FvwmForm Defaults" from your module menu, a form is displayed that shows the current defaults and allows you to change them. If you activate the "Save Restart Me" button, the .FvwmForm file is written and FvwmForm-Form exits and restarts to show the new defaults.

An example of what this file might contain after a save is:

# This file last created by FvwmForm-Form on Sun Nov 28 11:18:26 EST 1999.
*FvwmFormDefault: Font 10x20
*FvwmFormDefault: InputFont 8x13bold
*FvwmFormDefault: ButtonFont 10x20
*FvwmFormDefault: TimeoutFont 10x20
*FvwmFormDefault: Fore white
*FvwmFormDefault: Back cornflowerblue
*FvwmFormDefault: Colorset -1
*FvwmFormDefault: ItemFore green
*FvwmFormDefault: ItemBack gray40
*FvwmFormDefault: ItemColorset -1
*FvwmFormDefault: ButtonPointer hand2
*FvwmFormDefault: ButtonInPointer star
*FvwmFormDefault: InputPointer gumby
*FvwmFormDefault: ButtonPointerFore blue
*FvwmFormDefault: ButtonPointerBack gray
*FvwmFormDefault: ButtonInPointerFore gray
*FvwmFormDefault: ButtonInPointerBack blue
*FvwmFormDefault: InputPointerFore
*FvwmFormDefault: InputPointerBack

The commands in this file are just like any other FvwmForm command except that they start with *FvwmFormDefault.

FvwmForm only reads the file .FvwmForm the first time it is started or after the file is changed by FvwmForm-Form. It does so by sending the command *FvwmFormDefault: Read x. With "x" set to "y" or "n". "n" makes FvwmForm send a read .FvwmForm quiet command to fvwm.


🌈 VARIABLE SUBSTITUTION 🌈

If you supply variables and values on the command line used to start FvwmForm (like this):

Module FvwmForm MyForm ACTION=Browse "TITLE=Browse Form"

Then all FvwmForm input commands undergo variable substitution. The variables from the command line are exported. Then every command gets expanded using the variables from the environment. For example, assuming the above invocation of "MyForm", commands would be changed like this:

Before *MyForm: Text "$TITLE, Home $HOME, Going to $ACTION"
After *MyForm: TEXT "Browse Form, Home /home/me, Going to Browse"

Using this facility should make it possible for one form to be used for different sets of input data. So iconic. ✨


πŸ‘‘ CONFIGURATION πŸ‘‘

The following commands can be set in the .fvwm2rc file or thru any of the other ways that fvwm can accept commands. The simplest technique is to create a file in the read-only architecture-independent data directory, [PREFIX/share/fvwm] or your personal fvwm directory [$HOME/.fvwm], that matches the form alias.

In the following paragraphs the string "FvwmForm" would normally be the form alias.

FvwmForm reads commands before the form is ever displayed, and while the form is being displayed.

The following commands are accepted before the form is displayed:

  • Back
  • Button
  • ButtonFont
  • ButtonInPointer
  • ButtonInPointerFore
  • ButtonInPointerBack
  • ButtonPointer
  • ButtonPointerFore
  • ButtonPointerBack
  • Choice
  • Command
  • Colorset
  • Font
  • Fore
  • GrabServer
  • Input
  • InputFont
  • InputPointer
  • ItemBack
  • ItemColorset
  • ItemFore
  • InputPointerFore
  • InputPointerBack
  • Line
  • Message
  • PadVText
  • Position
  • Selection
  • Separator
  • Text
  • Timeout
  • TimeoutFont
  • Title
  • UseData
  • WarpPointer

The following commands are accepted while the form is displayed:

  • Map
  • Stop
  • UnMap

The Map, UnMap and Stop facility is under development and is currently not explained in this document, since it is likely to change. (iykyk β€” it's giving beta energy πŸ’€)

The order of the options DOES matter. The first background text color, *FvwmFormBack, encountered before a displayable item sets the default background color for the entire form.

Other than that, colors, fonts, text, choices and buttons can be intermixed in any order. There are no builtin limits on form size, number of items on a form, or number of fonts or colors used.

  • *FvwmForm: GrabServer β€” This option makes FvwmForm grab the mouse pointer on startup. This feature is useful for things like logout verification.
  • *FvwmForm: WarpPointer β€” This option makes FvwmForm warp the mouse pointer into its window on startup. It saves the user some mouse-travelling.
  • *FvwmForm: Geometry geometry β€” Specifies the FvwmForm window location. This is similar to what the Position option does but is more flexible.
  • *FvwmForm: Position x y β€” Puts the FvwmForm window at location (x, y) on the screen. By convention, a negative x (y) value measures distance from the right (bottom) of the screen. If this option is omitted, FvwmForm starts at the center of the screen.
  • *FvwmForm: Colorset n β€” Tells the module to use colorset n.
  • *FvwmForm: Back color β€” Specifies the background color of the FvwmForm window and any text in the window. The first background color FvwmForm reads determines the overall screen background color. Switches off the Colorset option. See DEFAULTS.
  • *FvwmForm: Fore color β€” Specifies the foreground color for displaying text labels. Switches off the Colorset option. See DEFAULTS.
  • *FvwmForm: ItemColorset n β€” Tells the module to use colorset n for items.
  • *FvwmForm: ItemBack color β€” Specifies the background color for the text input windows, and the buttons. Buttons are displayed as 3D depressable buttons. Inputs are displayed as 3D indented fields. Medium shade background colors work best. Switches off the ItemColorset option. See DEFAULTS.
  • *FvwmForm: ItemFore color β€” Specifies the foreground color for the text input strings and button text. Switches off the ItemColorset option. See DEFAULTS.
  • *FvwmForm: Font font β€” Specifies the font for displaying plain text. See DEFAULTS.
  • *FvwmForm: ButtonFont font β€” Specifies the font for text in the action buttons. See DEFAULTS.
  • *FvwmForm: InputFont font β€” Specifies the font for text input. See DEFAULTS.
  • *FvwmForm: TimeoutFont font β€” Specifies the font for display the timeout counter and related text. See DEFAULTS.
  • *FvwmForm: Line justification β€” Starts a new line. A line can contain any number of text, input, buttons and choice items. A FvwmForm window can have any number of lines. The width of the window is that of the longest line.
  • Justification β€” this is how you tell a line of items where to sit horizontally, and bestie it's literally just a vibe check for alignment. It takes one of these:
    • left β€” items hug the left side of the window. ⬅️
    • right β€” items slide all the way to the right. ➑️
    • center β€” items get placed smack in the center of the window. 🎯
    • expand β€” okay this one's iconic: if there's only one item in the line, it gets centered in the window. If there's two or more, they spread out to fill the ENTIRE width of the window. 🌈
  • *FvwmForm: Message β€” drops a text area on the form holding the last error message from fvwm. For size math purposes, the message area counts as 80 bytes long, but its actual length is whatever the message actually is. If a message goes over 80 bytes, you can peep the rest by resizing the form. πŸ’¬
Do not try to put any text, buttons, or input fields on the same line after a message field. Messages bigger than 80 bytes will straight-up overlay the rest of that line. πŸ’€
  • *FvwmForm: PadVText Pixels β€” how many pixels of vertical padding go between text items, line to line. Default is 6, which slays on lines where text is mixed in with input boxes, choices, or buttons. ✨

For straight text β€” like on a help form β€” a padding of 0 looks better. (There are lots of other padding values used in form layout that you can't currently change with commands, smh.)

  • *FvwmForm: Text string β€” displays string as plain text. Line breaks? You gotta make those happen with multiple *FvwmForm: Line and *FvwmForm: Text options. Blanks are allowed and give you extra padding between items. πŸ“
  • *FvwmForm: Title string β€” shows string as the window's title. The string must be wrapped in double quotes. Use this command with anything that isn't a quoted string and you get a blank title, periodt. If you never use this command at all, the window title defaults to the form alias. πŸ‘‘
  • *FvwmForm: Input name size init_string β€” sets up a text input item called name. A sub window that's size characters wide gets used for editing. If init_string is there, that's the initial string when FvwmForm starts up or resets itself. The default initial string is "". ⌨️

You can mouse-paste into an input field with button 2. Buttons 1 and 3 move the cursor around inside an input field. πŸ–±οΈ

Input fields are always in insert mode β€” overtyping is not supported, sorry bestie.

Emacs-type keystrokes are supported, and here's the whole map:

  • Control+a, Home and Begin move to the front of an input field. 🏁
  • Control+e and End move to the end of an input field. πŸ”š
  • Control+b and Left move left in an input field.
  • Control+f and Right move right in an input field.
  • Control+p, Up, and Shift+Tab move to a previous input field if there is one; if the form has one input field, they recall the previous value.
  • Control+n, Down, Return, Line-feed and Tab move to the next input field if there is one; if the form has one input field, Control+n and Down restore the previous input value.
  • Control+h moves backward in an input field, erasing a character.
  • Control+d and Delete delete the next character in an input field.
  • Control+k erases from the cursor to the end of an input field.
  • Control+u erases the entire input field. 🧹

When a form executes a command, all the input values get saved in a ring of input history 50 items deep. πŸŒ€

Meta(mod2)-"<" retrieves the previous value of an input field. Meta(mod2)-">" retrieves the next value of an input field.

(For forms with one input field, just use the much easier arrow keys, iykyk.)

  • *FvwmForm: Selection name type β€” kicks off a selection item named name. Its choices get specified in the following configuration commands. The type is one of these two:
    • single β€” the selections are mutually exclusive, only one at a time.
    • multiple β€” this is a multiple-choice selection, pick as many as you want. πŸ’…
  • *FvwmForm: Separator β€” draws a 2 pixel shaded line across the form so you can visually clock that a new area is starting. βž–
  • *FvwmForm: Choice name value on | off string β€” specifies a choice for a proceeding selection. The choice item has a name and a value, and these get used in commands. See *FvwmForm: Command. The string is displayed to the right of the choice button as a label. πŸ”˜

The choice takes on the specified initial state ("on" means selected) when FvwmForm starts or resets. Heads up: if the selections are mutually exclusive, FvwmForm does NOT detect inconsistencies in the initial states of the choices β€” meaning two of the choices, or none at all, can start out selected. πŸ™ˆ But once the user actually selects a choice, FvwmForm makes sure only one is selected.

  • *FvwmForm: Button type string [key] β€” this one's the main character: an action button. The button has string as its label, and executes a set of Fvwm commands when it's activated. The commands are the following *FvwmForm: Commands. πŸŽ€

The optional key gives the button a keyboard shortcut. It's either a control character written as ^@, ^A, ..., ^_, or a function key written as F1, F2, ..., F35. Control keys that are used for cursor movement in text input fields can't activate any buttons β€” except TAB (^I), RETURN (^M), and LINEFEED (^J), which can activate a button when the cursor is in the last text input field. πŸ”₯

What the button actually does is decided by type:

  • continue β€” FvwmForm keeps going after sending the commands.
  • restart β€” after sending the commands, FvwmForm resets all the values back to the initial ones, then keeps going.
  • quit β€” FvwmForm quits after sending the commands. πŸšͺ
  • *FvwmForm: Command command β€” specifies an Fvwm command tied to the current button. You can attach more than one command to a button, no problem. Commands that show up before any *FvwmForm: Button option get executed at start-up time β€” usually that's a beep to grab the user's attention. πŸ””

Commands starting with an exclamation mark (!) are executed by FvwmForm itself; all other commands get sent to Fvwm for execution. Before sending each command to Fvwm, FvwmForm recognizes variables in the following forms and supplies values to them:

  • $(name) β€” if name matches a text input field, the result is the user's input string. The special chars single-quote, double-quote and backslash get preceded by a backslash. ⚑

If name matches a choice, the result is the value of the choice (as specified in *FvwmForm: Choice) when that choice is selected. If it's not selected, the result is a blank string.

If name matches a selection, the result is a list of the selected values of all its choices, separated by spaces.

  • $(name?string) β€” if name is a text input field and its value isn't an empty string, the result is string, with recursive variable substitution applied. If the input value is empty, the result is empty. 🫧

If name is a choice and it's selected, the result is string, with recursive variable substitution applied. If the choice isn't selected, the result is empty.

  • $(name!string) β€” same as the above, except the converse conditions are taken. πŸ”„

When you use the "?" and "!" forms to pass a string, the string is delimited by a right parenthesis. Need a right parenthesis inside your string? Precede it with a backslash.

  • *FvwmForm: UseData datafile leading β€” tells FvwmForm to read a data file and extract data from module commands that match the leading argument and an input, choice, or selection variable in a form. πŸ“‚

This lets a form display current fvwm module configuration data. For an example of how this works, go examine the file FvwmForm-Rlogin, which is installed in the read-only architecture-independent data directory, [PREFIX/share/fvwm], and shown below.

For choices, the setting of the button is represented as the word "on", and all other values for a setting are treated as off.

For selections, the setting of each choice button is determined by matching the current value of the selection against each choice. Currently, this only works correctly for selections that allow a single choice. ⚠️

  • *FvwmForm: ButtonPointer pointername β€” change the default mouse pointer (hand2) used when hovering over a button. The pointername must be one of the names defined in the include file X11/cursorfont.h (without the XC_ prefix). See DEFAULTS. πŸ‘†
  • *FvwmForm: ButtonInPointer pointername β€” change the default mouse pointer (hand1) used while a button is pressed in. The pointername must be one of the names defined in the include file X11/cursorfont.h (without the XC_ prefix). See DEFAULTS. πŸ‘‡
  • *FvwmForm: InputPointer pointername β€” change the default mouse pointer (xterm) used while the pointer is over a text field. The pointername must be one of the names defined in the include file X11/cursorfont.h (without the XC_ prefix). See DEFAULTS. ✏️
  • *FvwmForm: ButtonPointerFore|Back color β€” change the default mouse pointer foreground and background colors used when hovering over a button. See DEFAULTS. 🎨
  • *FvwmForm: ButtonInPointerFore|Back color β€” change the default mouse pointer foreground and background colors used while a button is pressed in. See DEFAULTS. 🎨
  • *FvwmForm: InputPointerFore|Back color β€” change the default mouse pointer foreground and background colors used while the pointer is over a text field. See DEFAULTS. 🎨
  • *FvwmForm: Timeout tenth_of_seconds command "text" β€” set up FvwmForm to time out after the amount of tenth of seconds specified. When the timer hits zero, command executes. The text field is displayed much like a Text field, except a %% in the line gets replaced automatically by the amount of time left on the timer. The value updates every tenth of a second as the timer counts down. There can only be one timeout field per form. ⏳

🌸 EXAMPLES 🌸

All of the following "examples" are installed in the read-only architecture-independent data directory, [PREFIX/share/fvwm], during fvwm installation. πŸ“¦

The following commands create a menu to invoke the examples:

DestroyMenu Forms
AddToMenu Forms "&Q. QuitVerify" Module FvwmForm FvwmForm-QuitVerify
AddToMenu Forms "&C. Capture"    Module FvwmForm FvwmForm-Capture
AddToMenu Forms "&R. Rlogin"     Module FvwmForm FvwmForm-Rlogin
AddToMenu Forms "&T. Talk"       Module FvwmForm FvwmForm-Talk

✨ EXAMPLE 1 - QUIT VERIFY ✨

okay so this one is literally simulating the mwm way of confirming logout πŸ’« Return does the logout, Escape cancels the logout. It times out after 20 seconds and does the equivalent of the Logout button, no cap.

DestroyModuleConfig  FvwmForm-QuitVerify: *
*FvwmForm-QuitVerify: GrabServer
*FvwmForm-QuitVerify: WarpPointer
*FvwmForm-QuitVerify: Command     Beep
*FvwmForm-QuitVerify: Line        center
*FvwmForm-QuitVerify: Text        "Do you really want to logout?"
*FvwmForm-QuitVerify: Line        expand
*FvwmForm-QuitVerify: Button      quit "Logout" ^M
*FvwmForm-QuitVerify: Command     Quit
*FvwmForm-QuitVerify: Button      restart   "Restart" ^R
*FvwmForm-QuitVerify: Command     Restart
*FvwmForm-QuitVerify: Button      quit "Cancel" ^[
*FvwmForm-QuitVerify: Command     Nop
*FvwmForm-QuitVerify: Timeout     200 Quit "Automatic logout will occur in %% tenth of seconds."

✨ EXAMPLE 2 - REMOTE LOGIN ✨

this one lets the user type in a host name, an optional user name, and then it opens an xterm window from the remote host 🫢 iconic behaviour honestly

DestroyModuleConfig  FvwmForm-Rlogin: *
*FvwmForm-Rlogin: WarpPointer
*FvwmForm-Rlogin: Line         center
*FvwmForm-Rlogin: Text         "Login to Remote Host"
*FvwmForm-Rlogin: Line         center
*FvwmForm-Rlogin: Text         "Host:"
*FvwmForm-Rlogin: Input        HostName        20      ""
*FvwmForm-Rlogin: Line         center
*FvwmForm-Rlogin: Selection    UserSel single
*FvwmForm-Rlogin: Choice       Default Default on      "same user"
*FvwmForm-Rlogin: Choice       Custom  Custom  off     "user:"
*FvwmForm-Rlogin: Input        UserName        10      ""
*FvwmForm-Rlogin: Line         expand
*FvwmForm-Rlogin: Button       quit    "Login"         ^M
*FvwmForm-Rlogin: Command      Exec exec ssh $(Custom?-l $(UserName)) $(HostName) xterm -T xterm@$(HostName) -display $HOSTDISPLAY &
       # Before saving the data, remove any previously saved data:
       *FvwmForm-Rlogin: Command DestroyModuleConfig FvwmForm-RloginDefault: *
       # The "Login" button causes a login and a saving of the current data:
       *FvwmForm-Rlogin: Command !(                        /bin/echo \
         "# Created by FvwmForm-Rlogin on: `/bin/date`.";  /bin/echo \
         '*FvwmForm-RloginDefault: HostName $(HostName)';  /bin/echo \
         '*FvwmForm-RloginDefault: UserName $(UserName)';  /bin/echo \
         '*FvwmForm-RloginDefault: Default $(Default?on)'; /bin/echo \
         '*FvwmForm-RloginDefault: Custom $(Custom?on)' \
       ) > ${FVWM_USERDIR}/.FvwmForm-Rlogin
       *FvwmForm-Rlogin: Button       restart "Reset"
       *FvwmForm-Rlogin: Button       quit    "Cancel"        ^[
       *FvwmForm-Rlogin: Command      Nop
       # Tell FvwmForm to read vars from the .FvwmForm-RloginDefault file:
       *FvwmForm-Rlogin: UseData .FvwmForm-Rlogin *FvwmForm-RloginDefault

✨ EXAMPLE 3 - CAPTURE WINDOW ✨

this one is a little front-end for xwd, xwud, and xpr β€” the glow-up era of screenshotting fr fr πŸ“Έ

DestroyModuleConfig  FvwmForm-Capture: *
*FvwmForm-Capture: Line       center
*FvwmForm-Capture: Text       "Capture Window"
*FvwmForm-Capture: Line       left
*FvwmForm-Capture: Text       "File: "
*FvwmForm-Capture: Input      file            25      "/tmp/Capture"
*FvwmForm-Capture: Line       left
*FvwmForm-Capture: Text       "Printer: "
*FvwmForm-Capture: Input      printer         20      "$PRINTER"
*FvwmForm-Capture: Line       expand
*FvwmForm-Capture: Selection  PtrType single
*FvwmForm-Capture: Choice     PS      ps      on      "PostScript"
*FvwmForm-Capture: Choice     Ljet    ljet    off     "HP LaserJet"
*FvwmForm-Capture: Line       left
*FvwmForm-Capture: Text       "xwd options:"
*FvwmForm-Capture: Line       expand
*FvwmForm-Capture: Selection  Options multiple
*FvwmForm-Capture: Choice     Brd     -nobdrs off     "No border"
*FvwmForm-Capture: Choice     Frm     -frame  on      "With frame"
*FvwmForm-Capture: Choice     XYZ     -xy     off     "XY format"
*FvwmForm-Capture: Line       expand
*FvwmForm-Capture: Button     continue        "Capture"       ^M
*FvwmForm-Capture: Command    Exec exec xwd -out $(file) $(Options) &
*FvwmForm-Capture: Button     continue        "Preview"
*FvwmForm-Capture: Command    Exec exec xwud -in $(file) &
*FvwmForm-Capture: Button     continue        "Print"
*FvwmForm-Capture: Command    Exec exec xpr -device $(PtrType) $(file) | lpr -P $(printer) &
*FvwmForm-Capture: Button     quit            "Quit"

✨ EXAMPLE 4 - TALK FORM ✨

this one is a whole replacement for the module FvwmTalk, serving main character energy πŸ’… There are 2 forms: FvwmForm-Talk. which either executes commands or sends commands to fvwm for execution, and FvwmForm-TalkHelp. which is the help form.

in the help form, clock how the vertical line spacing changes. Normal FvwmForm line spacing assumes text is intermixed with buttons, but help forms require different spacing β€” iykyk 🌸

# FvwmForm-Talk - Basic replacement for FvwmTalk
DestroyModuleConfig  FvwmForm-Talk: *
*FvwmForm-Talk: WarpPointer
# Layout
*FvwmForm-Talk: Line         center
*FvwmForm-Talk: Text         "Talk to Fvwm"
*FvwmForm-Talk: Line         left
*FvwmForm-Talk: Text         "Command:"
*FvwmForm-Talk: Input        Command 80 ""
*FvwmForm-Talk: Line         left
*FvwmForm-Talk: Text         "Msg:"
*FvwmForm-Talk: Message
*FvwmForm-Talk: Line         center
# Buttons
*FvwmForm-Talk: Button       restart    "Return - Execute"         ^M
*FvwmForm-Talk: Command        $(Command)
*FvwmForm-Talk: Button       continue    "F1 - Help" F1
*FvwmForm-Talk: Command        Module FvwmForm FvwmForm-TalkHelp
*FvwmForm-Talk: Button       restart     "F3 - Reset input" F3
*FvwmForm-Talk: Command        Nop
*FvwmForm-Talk: Button       quit        "F4 - Dismiss"  F4
*FvwmForm-Talk: Command        Nop

# FvwmForm-TalkHelp - Help Text for FvwmForm-Talk
DestroyModuleConfig  FvwmForm-TalkHelp: *
*FvwmForm-TalkHelp: WarpPointer
# Layout
*FvwmForm-TalkHelp: Line    center
*FvwmForm-TalkHelp: Text    "Talk to Fvwm - Help"
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    " "
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: PadVText 0
*FvwmForm-TalkHelp: Text    "Enter commands in the
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    "Commands beginning with
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    "shell as a sub-process of the form."
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    "All other commands are sent to fvwm for execution."
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    ""
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    "Fvwm error messages are shown on the
*FvwmForm-TalkHelp: Line    left
*FvwmForm-TalkHelp: Text    ""
# Buttons
*FvwmForm-TalkHelp: Line    center
*FvwmForm-TalkHelp: Button  quit    "Return - Dismiss"         ^M
*FvwmForm-TalkHelp: Command   Nop

πŸ’€ BUGS AND LIMITATIONS πŸ’€

ngl bestie, FvwmForm is a fairly simple method of providing input. There is no input validation facility. FvwmForm has no way of dealing with lists. that's just the vibe 😭

Report bugs to the fvwm-workers list.


πŸŽ€ COPYRIGHTS πŸŽ€

FvwmForm is original work of Thomas Zuwei Feng (ztfeng@math.princeton.edu). πŸ‘‘

Copyright Feb 1995, Thomas Zuwei Feng. No guarantees or warranties are provided or implied in any way whatsoever. Use this program at your own risk. Permission to use, modify, and redistribute this program is hereby given, provided that this copyright is kept intact. 🫢


🌈 CHANGES 🌈

During the fall of 1998, Dan Espen removed all form size limits, added unlimited font and color changing, form spacing control, configuration file reading, global control of appearance, synchronous command execution, Error message display, variable substitution, configurable pointers, and lots of other damage. No additional copyright is imposed. ✨


and that's the whole page, bestie!! this one comes from the 2026-07-31 era, version FVWMFORM(1) πŸ’– go forth and make your forms absolutely iconic, slay, periodt πŸŒΈπŸ¦‹πŸ’…

πŸ“¦ where this page comes from