FvwmForm(1)

πŸ“¦
version 2.7.0 Β· 6 versions
, in alpine 3.24, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0

πŸŽ€ FvwmForm(1) πŸŽ€

Fvwm Modules πŸ¦‹ Β· part 1 of 3, bestie, let's gooo πŸ’…

✨ NAME ✨

FvwmForm β€” input form module for Fvwm πŸ’–

✨ SYNOPSIS ✨

Module FvwmForm [ Alias ]

FvwmForm must be spawned by Fvwm 🧚 No solo starts, bestie. If you invoke it from the command line, it just prints its version number and exits 🌸

✨ DESCRIPTION ✨

okay so FvwmForm lets you collect user input and then act on it πŸ’… The user fills out a form, and from that form they pick the actions they want Fvwm to take ✨ A form has five types of items: text labels, single-line text inputs, mutually-exclusive selections, multiple-choice selections, and action buttons πŸŽ€ These get arranged into several lines, and the layout is super flexible 🌈

A text label is just there for explaining things πŸ“ It can't accept any input, so it's giving read-only πŸ™ˆ

A timeout entry lets the form time out and perform a certain action when the timeout happens ⏰ The countdown is displayed kind of like a text label, except it keeps updating with the amount of time left 🧚

A text input field is for editing a single-line string πŸ¦‹ FvwmForm takes Emacs-style cursor movement keys, and you can check out FvwmFormInput for the deets. Mouse copy is not supported, but you can paste πŸ’œ

A selection is made up of several choices 🌈 The selection itself is a logical entity and doesn't have any display feature, so you won't see it on screen πŸ‘»

Each choice is displayed as a push-button followed by an explanatory text label πŸ“ When an exclusive choice is selected, it shows a circle in the middle, and a multiple choice shows a check βœ…

An action button, when activated, sends one or more commands to Fvwm or executes shell commands πŸ”₯ Those shell commands can contain the content of the input fields on the form, and they can reflect the settings of the choices on the form πŸ’…

The action buttons can be activated through the keyboard or the mouse 🫢

✨ INITIALIZATION ✨

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

Normally you'd invoke FvwmForm with an alias that represents the name of a form, its configuration commands and its 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 normally come from the builtin form FvwmForm-Form, which saves commands to the file .FvwmForm πŸŽ€

The physical reading of the optional input file .FvwmForm only happens the first time FvwmForm is invoked, or after FvwmForm-Form updates the file πŸ’…

When .FvwmForm is read, it's done by sending the command Read .FvwmForm Quiet to fvwm πŸ¦‹ Because of the way the read command works, the file can live in your personal fvwm user directory, or in the fvwm data directory 🌈 For more about the environment variable $FVWM_USERDIR, check the description of the read command in the fvwm man page.

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 ✨

⚠️ Bestie, listen up: when letting FvwmForm and fvwm read files, remember that these files contain commands that can execute shell commands, so you should be super careful about setting permissions on them πŸ’€

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 was invoked from πŸ‘‘

After all the configuration commands have been read, FvwmForm displays the form defined by those 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're 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 pops up that shows the current defaults and lets you change them ✨ If you activate the "Save Restart Me" button, the .FvwmForm file gets written, and FvwmForm-Form exits and restarts to show the new defaults πŸ”₯

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

  # 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's started, or after the file is changed by FvwmForm-Form 🧚 It does this 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 go through variable substitution πŸͺ„ The variables from the command line get exported, and then every command gets expanded using the variables from the environment ✨ Assuming the above invocation of MyForm, commands would change 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 πŸ’…

✨ CONFIGURATION ✨

The following commands can be set in the .fvwm2rc file, or through any of the other ways fvwm can accept commands πŸŽ€ The simplest technique is to create a file in the read-only architecture-independent data directory, [PREFIX/share/fvwm], or in 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 also 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 isn't explained in this document yet, since it's likely to change 🚧

🚨 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 β€” makes FvwmForm grab the mouse pointer on startup. Super useful for things like logout verification πŸ”’
  • *FvwmForm: WarpPointer β€” 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. It's similar to what the Position option does, but 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, and 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 displaying 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, and the width of the window is that of the longest line πŸ“

Justification of items in the line is specified by justification, which can be one of the following:

okay so the justify options are up first πŸ’…

  • left β€” items get lined up on the left side of the window 🌸
  • right β€” items get pushed over to the right side of the window πŸ“
  • center β€” items sit smack in the middle of the window πŸŽ€
  • expand β€” if there's only one item on the line, it gets centered in the window. If there are two or more, they get spread out to fill the whole width of the window ✨

πŸ’¬ *FvwmForm: Message

This one makes a text area on the form that holds the last error message from fvwm 😭. When FvwmForm figures out how big the form should be, the message area counts as 80 bytes long. The actual size is just whatever the message is, though. If the message goes over 80 bytes, you can see the rest by resizing the form πŸ¦‹.

Don't put any text, buttons or input fields on the same line after a message field. Messages greater than 80 bytes will overlay the remainder of the line.

🧚 *FvwmForm: PadVText Pixels

This sets the vertical padding, in pixels, between text items, line to line. The default is 6, which looks super good on lines mixing text 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 in form layout that can't be changed with commands yet, so just know that πŸ™ˆ.)

🌷 *FvwmForm: Text string

Shows string as plain text. Line breaks have to be done with multiple *FvwmForm: Line and *FvwmForm: Text options. Blanks can be used to add extra padding between items 🌈.

πŸ‘‘ *FvwmForm: Title string

Shows string as the window's title. The string has to be wrapped in double quotes. Using this command with anything that isn't a quoted string makes a blank title πŸ’€. If you don't use this command at all, the window title is the form alias πŸŽ€.

⌨️ *FvwmForm: Input name size init_string

This makes a text input item named name. A sub window size characters wide is used for editing. If init_string is there, it's the starting string when FvwmForm starts 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 in an input field.

Input fields are always in insert mode, so overtyping isn't supported 🚫.

Emacs type keystrokes are supported too πŸ‘‘. Here's how the keys behave:

  • 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, use the much easier arrow keys πŸ₯°.)

πŸ”˜ *FvwmForm: Selection name type

This starts a selection item named name. Its choices are specified in the following configuration commands. The type is one of these:

  • single β€” the selections are mutually exclusive πŸ’…
  • multiple β€” this is a multiple-choice selection 🌈

βž– *FvwmForm: Separator

Draws a 2 pixel shaded line across the form, a cute visual way to show a separate area πŸ¦‹.

βœ… *FvwmForm: Choice name value on | off string

This specifies a choice for the preceding selection. The choice 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 starts in the specified initial state (on means selected) when FvwmForm starts or resets. If the selections are mutually exclusive, FvwmForm does NOT detect inconsistencies in the initial states of the choices, so two or none of the choices can be selected 😀. However, once the user selects a choice, FvwmForm makes sure only one is selected.

πŸ”₯ *FvwmForm: Button type string [key]

This is an action button πŸ”₯. It has string as its label, and it runs a set of Fvwm commands when it gets activated. The commands are the *FvwmForm: Command options that come after it.

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

The type decides how the button behaves:

  • continue β€” FvwmForm keeps going after sending the commands πŸƒ
  • restart β€” after sending the commands, FvwmForm resets all the values to the initial ones, then keeps going πŸ”„
  • quit β€” FvwmForm quits after sending the commands πŸ‘‹

πŸͺ„ *FvwmForm: Command command

This is an Fvwm command attached to the current button. A button can have more than one command attached 🧩. Commands that show up before any *FvwmForm: Button option run at start-up time. This is usually a beep to get the user's attention πŸ””.

Commands that start with an exclamation mark (!) are run by FvwmForm. All other commands are sent to Fvwm for execution. Before sending each command to Fvwm, FvwmForm recognizes these variable forms and fills in values for them 🧠:

  • $(name) β€” if name is a text input field, the result is the user's input string. The special chars single-quote, double-quote and backslash get a backslash in front of them. If name is a choice, the result is the value of the choice (as specified in *FvwmForm: Choice) if the choice is selected. If it isn't selected, the result is a blank string. If name is 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) β€” the 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. If you need to put a right parenthesis inside a string, put a backslash in front of that right parenthesis πŸ™ƒ.

πŸ“‚ *FvwmForm: UseData datafile leading

This tells FvwmForm to read a data file and pull out data from module commands that match the leading argument and an input, choice, or selection variable in a form. It's how a form can show current fvwm module configuration data πŸ’œ.

For an example of how this works, check out 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. 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

This changes 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

This changes 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

This changes 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

This changes the default mouse pointer foreground and background colors used when hovering over a button. See DEFAULTS.

🎨 *FvwmForm: ButtonInPointerFore|Back color

This changes the default mouse pointer foreground and background colors used while a button is pressed in. See DEFAULTS.

🎨 *FvwmForm: InputPointerFore|Back color

This changes the default mouse pointer foreground and background colors used while the pointer is over a text field. See DEFAULTS.

⏰ *FvwmForm: Timeout seconds command "text"

This sets FvwmForm up to time out after the amount of seconds specified. When the timer hits zero, command executes ⏳. The text field is displayed much like a Text field, except that a '%%' in the line gets replaced automatically by the amount of time left on the timer. The value updates every second as the timer counts down. There can only be one timeout field per form 🫢.

✨ EXAMPLES ✨

Okay bestie, all of these examples live in the read-only, architecture-independent data directory [PREFIX/share/fvwm] πŸ“ and get installed while fvwm is being installed πŸ’–. To call them from a menu, you can use these commands:

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 πŸ’…

This one is giving mwm energy πŸ‘‘. It copies the mwm way of confirming logout: Return logs you out, Escape cancels, and if you just sit there for 20 seconds it performs the equivalent of the 'Logout' button ⏰.

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     20 Quit "Automatic logout will occur in %% seconds."

πŸ–₯️ EXAMPLE 2 - Remote Login πŸ–₯️

This one lets the user type in a host name and an optional user name, then opens an xterm window from the remote host πŸ¦‹.

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 front-end for xwd, xwud, and xpr 🌸.

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 replacement for the module FvwmTalk 🧚. There are 2 forms: "FvwmForm-Talk.", which executes commands or sends commands to fvwm for execution, and "FvwmForm-TalkHelp.", which is the help form πŸ†˜.

Peep how the help form changes up the vertical line spacing πŸ‘€. Normal FvwmForm line spacing assumes text is mixed in with buttons, but help forms need different spacing, so it's giving intentional design πŸ’œ.

# 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 ✨

FvwmForm is a pretty simple way to get input, so don't expect miracles πŸ™ˆ. There is no input validation facility, and FvwmForm has no way of dealing with lists πŸ’€.

Report bugs to the fvwm-workers list πŸ›.

πŸŽ€ COPYRIGHTS πŸŽ€

FvwmForm is the 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 did a whole glow-up on FvwmForm πŸ’…. He 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.


Fvwm 2.7.0, last updated 19 October 2022, FvwmForm(1) πŸŒˆπŸ’– bye bestie, you're literally a Unix icon πŸ‘‘