FvwmTheme(1)

NAME
FvwmTheme - an FVWM module for managing the appearance of FVWM and its modules

SYNOPSIS
FvwmTheme is spawned by fvwm, so no command line invocation will work.

COPYRIGHT
Copyright (C) 1999 Joey Shutup. No guarantees or warranties or anything are provided or implied in any way whatsoever. Use this program at your own risk. Permission to use this program for any purpose is given, as long as the copyright is kept intact.

DESCRIPTION
FvwmTheme creates appearance resources that may be shared by FVWM and other modules. It reads an initial configuration and also reacts to configuration commands and messages sent from FVWM so that the resources can be dynamically changed.

INVOCATION
FvwmTheme must be spawned as a module by fvwm.

It is important that FvwmTheme is invoked before any other modules that use the color sets provided by FvwmTheme. Thus FvwmTheme has to be invoked with the 'ModuleSynchronous' command by inserting the line 'ModuleSynchronous Timeout 5 FvwmTheme' in the .fvwm2rc file right after the ModulePath and ImagePath have been defined. Invoking FvwmTheme from the InitFunction, StartFunction orRestartFunction or later may not work properly and can cause excessive redrawing of already running modules. It is important that the configuration lines for FvwmTheme appear in the configuration file before FvwmTheme is started. You can find a proper sample fvwm setup at the end of this document. Fvwm will search the directory specified in the ModulePath configuration option to attempt to locate FvwmTheme. It is pointless to run more than one FvwmTheme so there is no provision for using an alias name.

CONFIGURATION OPTIONS
FvwmTheme supports some configuration options.

*FvwmTheme: Colorset n options
    Will create or modify colorset n. Each colorset has four colors, an optional pixmap and an optional shape mask. The four colors are used by modules as the foreground, background, highlight and shadow colors. When a colorset is created it defaults to a foreground of black and background of gray. The background and foreground are marked as "average" and "contrast" (see later) so that just specifying a pixmap or gradient gives sensible results. Warning: The highest colorset number used determines memory consumption. Thus if you define 'Colorset 100000', the memory for 100001 colorsets will be used. Keep your colorset numbers as small as possible. options is a comma separated list containing some of the keywords: fg, Fore, Foreground, bg, Back, Background, hi, Hilite, Hilight, sh, Shade, Shadow, Pixmap, TiledPixmap, AspectPixmap, Shape, TiledShape, AspectShape, NoShape, ?Gradient, Plain and Transparent. fg, Fore and Foreground take a color name as an argument and set the foreground color. The special name Contrast may be used to select a color that contrasts well with the background color. To reset the foreground color to the default value you can simply omit the color name. bg, Back and Background take a color name as an argument and set the background color. It also sets the highlight and shadow colors to values that give a 3d effect unless these have been explicitly set with the options below. The special name Average may be used to select a color that is the average color of the pixmap. The background color is reset to the default value if the color name is omitted. hi, Hilite and Hilight take a color name as as argument and set the highlight color. If the hilight color is not explicitly set, the default is to calculate it from the background color. To switch back to the default behavior the color name can be omitted. sh, Shade and Shadow take a color name as as argument and set the shadow color. If the shadow color is not explicitly set, the default is to calculate it from the background color. To switch back to the default behavior the color name can be omitted. Pixmap, TiledPixmap and AspectPixmap take a file name as an argument, search the ImagePath and use it as the background pixmap. Any transparent parts are filled with the background color. Not specifying a file name removes any existing one from the colorset. TiledPixmap will produce repeated copies of the image with no scaling, Pixmap will cause the image to be stretched to fit whatever object the colorset is applied to and AscpectPixmap will stretch to fit but will retain the image aspect ratio. Bitmaps are not supported. Transparent tries to create a transparent background pixmap. It may be necessary to reapply this option whenever the background of one of the affected application changes. The pixmap may be used as a window background to achieve root transparency. The root background change may be detected or not, this depends on the program used to set the background. If you use fvwm-root, xsetbg (xli), FvwmBacker with a solid or a colorset colors or a recent version of Esetroot (>= 9.2) a background change should be detected. If background changes are not detected (e.g., if you use xv or xsetroot) you can force detection by using the -d option of fvwm-root:
    xv -root -quit mybg.png; fvwm-root -d
    Due to the way X implements transparency no guarantees can be made that the desired effect can be achieved. The application may even crash. If you experience any problems with this option, do not use it. Shape, TiledShape and AspectShape take a file name as an argument, search the ImagePath and use it as the shape bitmap. TiledShape will produce repeated copies of the bitmap with no scaling, Shape will cause the bitmap to be stretched to fit whatever object the colorset is applied to and AscpectShape will stretch to fit but will retain the bitmap aspect ratio. If the file is a pixmap in xpm format, the shape mask of the pixmap is used. Warning: Due to the way X11 implements shapes and the implementation of the FvwmTheme module you cannot take back making windows shaped. You may have to restart fvwm or the shaped application. ?Gradient ... will create a pixmap and stretch it to fit the window. ?Gradient may be one of Hgradient, Vgradient, Dgradient, Bgradient, Sgradient, Cgradient, Rgradient or Ygradient. The gradient types are as follows: H is horizontal; V is vertical; D is diagonal from top left to bottom right; B is a backwards diagonal from bottom left to top right; S is concentric squares; C is con-centric circles; R is a radar like pattern and Y is a Yin Yang style (but without the dots, we are not that mad). Please refer to the COLOR GRADIENTS section in the fvwm man page for the syntax of gradients. Tint and TintMask both take 2 arguments, a colour and an integer between 0 and 100. They cause the image defined using Pixmap, TiledPixmap or AspectPixmap to be tinted with the specified colour and a percentage rate given by the integer. If the image is not transparent both options work equally. If the image is transparent Tint tints the image part and the colorset background under it, TintMask tints only the image part. Unfortunately, a colorset background specified using the Transparent option cannot be tinted. Note that this option is activated only if fvwm is compiled with the XFree Xrender support (needs XFree version 4.1 or better). Run "fvwm-config --supports | grep xrender" if you are not sure. NoShape removes the shape mask from the colorset, Plain removes the background pixmap or gradient while NoTint removes the pixmap tint.

*FvwmTheme: ReadWriteColors
    Tells FvwmTheme to use read/write color cells for the foreground and background pixels. This can make changing colorsets much faster but can only be used with PseudoColor displays. This option must be specified first and it cannot be turned off. If the pixmap and shape of a colorset are unchanged modules do not redraw when the colors are changed.

COMMANDS
The following FVWM command may be executed at any time to alter the colorsets. It may be bound to a menu item or typed into a module such as FvwmConsole.

SendToModule FvwmTheme Colorset options
    The syntax is the same as the configuration option.

EXAMPLES
*FvwmTheme: Colorset 3 fg wheat, bg navy
If necessary this will create colorsets 0, 1, 2 and 3 and then change colorset 3 to have a foreground of wheat, a background of navy.
*FvwmTheme: Colorset 3 bg "navy blue"
will change the background color of colorset 3 to navy blue. The foreground and pixmap will be unchanged.
*FvwmTheme: Colorset 3 AspectPixmap \
  large_murky_dungeon.xpm
will cause depression
*FvwmTheme: Colorset 3 bg Average
will set the background color and the relief colors to match the background pixmap. This is the default setting but it must be used if a background color was specified and is now not required.
*FvwmTheme: Colorset 3 YGradient 200 3 \
  blue 1000 navy 1 blue 1000 navy
will add a Yin Yang gradient background pixmap to colorset 3. If the background is set to average it will be recomputed as will the foreground if that is set to contrast.
    .EX
 #!/bin/sh
 FvwmCommand "SendToModule FvwmTheme Colorset 7
   fg navy, bg gray"
 while true
 do
   FvwmCommand "SendToModule FvwmTheme Colorset 7
     fg gray"
   sleep 1
   FvwmCommand "SendToModule FvwmTheme Colorset 7
     fg navy"
   sleep 1
 done
will make colorset 7 blink if used with the *FvwmTheme: ReadWriteColors option. The color names used in color sets can be substituted in any fvwm command. Please refer to the COMMAND EXPANSION section in the fvwm man page and the example below for a description.

SAMPLE FVWM CONFIGURATION
Below you can find a fvwm configuration file that demonstrates the use of the FvwmTheme module. The order in which FvwmTheme and the other modules are configured and started is important.
     # where your images are
     ImagePath <put your image path here>
     #
     # FvwmTheme
     #
     # The FvwmTheme setup must be first in the config file,
     # right after the paths are set.
     #
     # Instead of the *FvwmTheme: Colorset... lines below you
     # could read in a file with these commands.  So to change
     # your color scheme you can simply copy a different file
     # over your palette file and restart fvwm:
     #
     # Read /home/my_user_name/.fvwm_palette
     #
     # 0 = Default colours
     # 1 = Inactive windows
     # 2 = Active windows
     # 3 = Inactive menu entry and menu background
     # 4 = Active menu entry
     # 5 = greyed out menu entry (only bg used)
     # 6 = module foreground and background
     # 7 = hilight colours
     *FvwmTheme: Colorset 0 fg black, bg rgb:b4/aa/94
     *FvwmTheme: Colorset 1 fg black, bg rgb:a1/b2/c8
     *FvwmTheme: Colorset 2 fg black, bg rgb:da/9a/68
     *FvwmTheme: Colorset 3 fg black, bg rgb:b4/aa/94, \
       VGradient 100 dtcolour5 rgb:b4/aa/94
     *FvwmTheme: Colorset 4 fg black, bg rgb:b4/aa/94
     *FvwmTheme: Colorset 5 fg rgb:d2/bf/a8, \
       bg rgb:b4/aa/94
     *FvwmTheme: Colorset 6 fg black, bg rgb:b4/aa/94, \
       VGradient 100 dtcolour5 rgb:b4/aa/94
     *FvwmTheme: Colorset 7 fg black, bg rgb:94/ab/bf
     # run FvwmTheme before anything else is done
     ModuleSynchronous Timeout 5 FvwmTheme
     #
     # general setup
     #
     Style * Colorset 1
     Style * HilightColorset 2
     MenuStyle * MenuColorset 3
     MenuStyle * ActiveColorset 4
     MenuStyle * GreyedColorset 5
     #
     # Applications
     #
     AddToFunc InitFunction
     + I Exec exec xterm -fg $[fg.cs0] -bg $[bg.cs0]
     #
     # module setup
     #
     # ... more FvwmPager config lines ...
     *FvwmPager: Colorset * 6
     *FvwmPager: BalloonColorset * 6
     *FvwmPager: HilightColorset * 7
     *FvwmPager: WindowColorsets 1 2
     # ... more FvwmIconMan config lines ...
     *FvwmIconMan: Colorset 6
     *FvwmIconMan: FocusColorset 2
     *FvwmIconMan: FocusAndSelectColorset 2
     *FvwmIconMan: PlainColorset 6
     *FvwmIconMan: SelectColorset 6
     *FvwmIconMan: TitleColorset 6
     # ... more FvwmButtons config lines ...
     *FvwmButtons: Colorset 6
     # sample button passing color to xterm
     *FvwmButtons: (Title xterm, \
       Action "Exec exec xterm -fg $[fg.cs6] -bg[bg.cs6]")
     # ... more FvwmWharf config lines ...
     *FvwmWharf: Colorset 6
     # ... more FvwmIdent config lines ...
     *FvwmIdent: Colorset 6
     # ... more FvwmWinList config lines ...
     *FvwmWinList: Colorset      1
     *FvwmWinList: FocusColorset 2
     *FvwmWinList: IconColorset  1
     # ... more FvwmTaskBar config lines ...
     *FvwmTaskBar: Colorset     6
     *FvwmTaskBar: IconColorset 6
     *FvwmTaskBar: TipsColorset 0
If you need to have more colors and don't want to reinvent the wheel, you may use the convention used in fvwm-themes, it defines the meaning of the first 40 colorsets for nearly all purposes:
 http://fvwm-themes.sourceforge.net/doc/colorsets

BUGS
Initialization of fvwm, FvwmTheme and the other modules is tricky. Please pay close attention to the text in the INVOCATION section. The example above demonstrates the proper way to get a FvwmTheme setup running.

AUTHOR
Prefers to remain anonymous. With help from Brad Giaccio and Dominik Vogt.