NAME¶
FvwmTheme - an fvwm module for managing the appearance of fvwm and its modules
SYNOPSIS¶
ModuleSynchronous Timeout 5 FvwmTheme
FvwmTheme can only be invoked by fvwm. Command line invocation of the
FvwmTheme module will not work.
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¶
Starting with 2.5.1, FvwmTheme is obsolete, please read fvwm man page about the
built-in colorsets solution. However, all options are still the same, so this
man page defines the exact Colorset syntax.
FvwmTheme must be spawned as a module by fvwm.
It is highly suggested that FvwmTheme is invoked before any other modules that
use the colorsets 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
ImagePath has
been defined. Invoking FvwmTheme from the
InitFunction,
StartFunction or
RestartFunction or later can cause excessive
redrawing of already running modules. It is highly suggested 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. 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
- Creates or modifies 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 is
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, fgsh, Pixmap, TiledPixmap, AspectPixmap, Transparent,
RootTransparent, Shape, TiledShape, AspectShape, NoShape, ?Gradient, Tint,
fgTint, bgTint, Alpha, fgAlpha, Dither, NoDither, IconTint, IconAlpha,
NoShape and Plain.
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. If the
pixmap is tinted with the Tint option, the tint is not taken in
account in the computation of the average color. You should use the
bgTint option to get the "real" average color. The
background color is reset to the default value if the color name is
omitted.
hi, Hilite and Hilight take a color name as an
argument and set the highlight color. If the highlight 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 an 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.
fgsh takes a color name as an argument and sets the color used by the
shadowing font effect. See the FONT SHADOW EFFECTS section of the
fvwm man page. By default this color is computed from the foreground and
background colors. To switch back to the default 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 produces repeated copies of the image with no scaling,
Pixmap causes the image to be stretched to fit whatever object the
colorset is applied to and AspectPixmap stretches to fit but
retains the image aspect ratio.
Transparent tries to create a transparent background pixmap. The
pixmap may be used as a window background to achieve root transparency.
For this you should use the ParentalRelativity fvwm style. 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.
Using outline move and resize (see the OpaqueMoveSize command and the
ResizeOpaque style) as well as setting the
WindowShadeShrinks style may help. The transparency achieved with
Transparent depends on whether the colorset is applied to the
foreground or the background of a window. In the second case the
transparency is relative to the parent window of the window on which the
colorset is defined. For example:
Colorset 12 VGradient 200 grey30 grey60
Colorset 17 Transparent
*FvwmIconMan: Colorset 12
*FvwmIconMan: PlainColorset 17
gives an IconMan with a vertical grey gradient background and the buttons
use the background (by transparency). To obtain a (root) transparent
IconMan:
Colorset 12 Transparent
Colorset 17 Transparent
Colorset 18 Transparent
Colorset 19 Transparent
...
*FvwmIconMan: Colorset 12
*FvwmIconMan: PlainColorset 17
*FvwmIconMan: FocusColorset 18
*FvwmIconMan: IconColorset 19
The Colorset IconMan option defines the IconMan window background, but the
PlainColorset and the FocusColorset are drawn on the foreground. So, the
transparency of the IconMan buttons is achieved by drawing nothing. Now if
this IconMan is swallowed in an FvwmButtons as:
FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" 'FvwmIconMan')
then, IconMan become a child of FvwmButtons and it is transparent relative
to FvwmButtons. So, in this case IconMan uses Colorset 10 as background.
If you want root transparency use the RootTransparent option.
FvwmButtons, FvwmIconMan, FvwmIdent, FvwmScroll and FvwmTaskBar are
relatively simple. There is one main colorset option which defines the
background of the window and the other colorsets (if any) are drawn on the
foreground. The case of FvwmWinList and FvwmProxy are simpler. With
FvwmWinList all the colorsets are drawn on the foreground and with
FvwmProxy the two colorsets refer to the window backgrounds. FvwmPager is
more complicated as almost everything in the pager are windows with some
parental relations (the mini windows are the child and the desktops are
the parents and all this is complicated by the hilighted page). So, the
colorsets apply to the background of these windows. You should experiment.
For FvwmForm and FvwmScript the situation is similar. There is a main
window (a child of the root window) which corresponds to the main colorset
and most of the widgets are windows which are children of the main window.
Tint may work or not with the Transparent option. When the
colorset is drawn on the foreground Tint should work. In the other
cases, tinting works in some exceptional cases (and may be very slow).
Tinting may work with fvwm menu (without animation). In the other case
tinting may work if your X server has backing store enabled (try xdpyinfo
to see if this the case). But, there is a chance that the backing store
support of your X server does not work well with the terrible hack used to
Tint the ParentRelative Pixmap. So, to get tinted root transparency it is
more safe to use the RootTransparent option.
RootTransparent [ buffer ] creates a root transparent
background. To make this option work, you must use an Esetroot compatible
program, fvwm-root with the --retain-pixmap option or FvwmBacker with the
RetainPixmap option (and colorset or solid backgrounds). The buffer
keyword is useful only when the Tint option is used too. This
speeds up creation of windows which use the colorset (useful for fvwm
menus) at the cost of memory usage. It also speeds up opaque move and
resize which can be unacceptably slow without buffer. However, this
option may add a lot of memory to your X server (depending on the size of
the image used to set the background). In summary, using outline move and
resize for modules which use such a colorset may be a good idea.
Shape, TiledShape and AspectShape take a file name as
an argument, search the ImagePath and use it as the shape bitmap.
TiledShape produces repeated copies of the bitmap with no scaling,
Shape causes the bitmap to be stretched to fit whatever object the
colorset is applied to and AspectShape stretches to fit but retains
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 ... creates a pixmap and stretches 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 concentric 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 takes 2 arguments, a color and a percentage between 0 and 100.
It causes the image defined using ?Pixmap or ?Gradient to be
tinted with the specified color using the percentage. If the image is
transparent Tint tints only the image part. Unfortunately, a
colorset background specified using the Transparent option can give
strange results. See the Transparent option for details. With no
arguments this option removes the tint.
fgTint takes 2 arguments, a color and a percentage between 0 and 100.
It causes the color defined using fg to be tinted with the
specified color using the percentage. With no arguments this option
removes the tint.
bgTint takes 2 arguments, a color and a percentage between 0 and 100.
It causes the color defined using bg to be tinted with the
specified color using the percentage. If the sh and hi
colors are not specified, they are recomputed from the tinted bg color.
With no arguments this option removes the tint.
Alpha takes a percentage between 0 and 100 as an argument. It causes
fvwm to merge the image defined using ?Pixmap or ?Gradient
with the bg color using the percentage. If the percentage is 0 the
image is hidden and if it is 100 the image is displayed as usual (no
merge). The default is 100 and it is restored if no argument is given.
fgAlpha takes a percentage between 0 and 100 as an argument. It
causes fvwm to merge the text and the colorset background using the
percentage. If the percentage is 0 the text is hidden and if it is 100 the
text is displayed as usual (no merge). This option has an effect only with
fonts loaded by Xft, see the FONT NAMES AND FONT LOADING section of
fvwm man page. The default is 100 and it is restored if no argument is
given.
Dither causes fvwm to dither the image defined using ?Pixmap
or ?Gradient. This is useful only with displays with depth less
than or equal to 16 (i.e., on displays which can only display less than
65537 colors at once). The dithering effect lets you simulate having more
colors available that you actually have. NoDither causes fvwm to do
not dither the images. Dither is the default if the depth is less
than or equal to 8 (a screen with 256 colors or less). In depth 15 (32768
colors) and 16 (65536 colors), the default is NoDither, however
this effect can be useful with images which contain a lot of close colors.
For example a fine gradient will look more smooth.
IconTint takes 2 arguments, a color and a percentage between 0 and
100. It causes fvwm or a module to tint the "icons" which are
rendered into the colorset background with the specified color using a
percentage. Here "icons" means, fvwm Icons, fvwm menu icons,
MiniIcons which represent applications in various modules, images loaded
by modules (e.g., images specified by the Icon FvwmButtons button
option) ...etc. With no arguments this option removes the icon tint.
IconAlpha takes a percentage between 0 and 100 as an argument. It
causes fvwm to merge the "icons" which are rendered into the
colorset background using this percentage. The default is 100 and it is
restored if no argument is given.
Note: It is equivalent to use "Tint a_color rate" and
"Alpha a" if a = 100 and the bg color is a_color. This
equivalence does not hold for IconAlpha and IconTint as the background can
be an image or a gradient (and not a uniform color background). However,
in some cases you can achieve (almost) the same effect by using IconTint
in the place of IconAlpha. This is preferable as, in general, IconAlpha
generates more redrawing than IconTint.
NoShape removes the shape mask from the colorset while Plain
removes the background pixmap or gradient.
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 creates colorsets 0, 1, 2 and 3 and then changes colorset 3 to
have a foreground of wheat, a background of navy.
*FvwmTheme: Colorset 3 bg "navy blue"
changes the background color of colorset 3 to navy blue. The foreground and
pixmap are unchanged.
*FvwmTheme: Colorset 3 AspectPixmap large_murky_dungeon.xpm
Causes depression.
*FvwmTheme: Colorset 3 bg Average
Sets 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
Adds a Yin Yang gradient background pixmap to colorset 3. If the background is
set to average it is recomputed along with the foreground if that is set to
contrast.
#!/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
Makes colorset 7 blink.
The color names used in colorsets 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/.fvwm_palette
#
# 0 = Default colors
# 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 colors
*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 dtcolor5 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 dtcolor5 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.
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.