This document attempts to aggregate the functionality of FVWM3 across a common and consistent command set.
There is a hierarchical organisation to identifying windows within FVWM3.
Screen --> Desktops --> Windows
This is equivalent to a monitor attached to a computer. Screens are numbered automatically, although can also be named. The name of a monitor is taken from RandR.
RandR is used in identifying attached monitors, to get their rotation, size, position and name. FVWM3 maintains a runtime list of monitors. Customised behaviour about monitors which are attached/detached will be exposed to the user.
A desktop is attached to a screen. These are viewports into a monitor, of which there could be many. Desktops are containers which hold windows. Desktops are separate from each attached screen, although it would be possible to have one "global" desktop which operated across all screens.
Desktops are linear in their arrangement. There is no concept of pages within a desktop (as there is with FVWM2).
Desktops can be named -- and since desktops are unique per screen, desktops can have the same name across screens.
Created by applications, and belonging to one or more desktops on a particular screen.
Windows can have names, or user-defined labels.
The following diagram shows a typical hierarchy:
Screen1 Screen2
+---------------------------------------+ +-----------------------------------+
| Desktop1 Desktop2 | | Desktop1 |
| +---------------+ +---------------+ | | +--------------------------------+|
| | +------+ | | +---------+ | | | | ||
| | | W1 | | | | | | | | | ||
| | | | | | | W3 | | | | | +----------------------+ ||
| | +------+ | | | | | | | | | | ||
| | +---------+ | | | | | | | | | | ||
| | | W2 | | | +---------+ | | | | | | ||
| | +---------+ | | | | | | | | ||
| +---------------+ +---------------+ | | | | | ||
| Desktop3 | | | | W1 | ||
| +-----------------------------------+ | | | | | ||
| | +--------------------------------+| | | | | | ||
| | | || | | | | | ||
| | | W4 || | | | +----------------------+ ||
| | +--------------------------------+| | | | ||
| +-----------------------------------+ | | +--------------------------------+|
+---------------------------------------+ +-----------------------------------+
There's two screens. Specifying how to access W4
could be done like this:
Screen1:Desktop 4.W4
Hence in the general case, the following specifier format would be consistent:
<screen>:<desktop>.<window>
Commands tend to operate on either screens, desktops, or windows. Sometimes, there will be target states which affect screens, desktops, or windows.
-s
-- this specifies the source, either ascreen
,desktop
, orwindow
-t
-- this specifies the target, either ascreen
,desktop
, orwindow
- To move Window W4 to screen 2 (current desktop):
move-window -s screen1:desktop3.W4 -tscreen2:
- To swap two windows (position/size) -- W4 and W1:
select-window -s screen1:desktop3.W4 -t screen1:desktop1.W1
Things which move things...
- Windows
- Pointer
Bindings:
- Key
- Mouse
Contextual:
- Desktop
- Window
- Styles: decor, etc.