ICESH(1) User Commands ICESH(1)
NAME
icesh - control window properties and the IceWM window manager
SYNOPSIS
icesh OPTIONS|ACTIONS+
DESCRIPTION
icesh provides two types of commands:
1. Commands to directly interact with icewm:
These are listed in the section "MANAGER ACTIONS" below. They
are easy to use, because they don't require to select one or more
windows. For example, "icesh restart" will restart icewm and
"icesh clients" lists the applications that are managed by icewm.
2. Commands that operate on a selection of windows:
See the section "WINDOW ACTIONS" below. For example, "icesh
close" is a request to close a window, but which window? Now
icesh will turn the mouse pointer into a crosshair. Click on a
window and a close request will be sent to that application.
The power of icesh lies in its ability to programmatically select
one or more windows and operate on that selection. This can be
used in scripts and in
icewm-keys(5) to define your own window
management hotkeys. For example, to immediately close all xterm
windows do "icesh -c xterm close".
There are a dozen "SELECT OPTIONS" to select windows. They start
with a '-' or a '+'. The '-' starts a new selection, while the
'+' adds more windows to an existing selection.
This selection of windows can be reduced by "FILTER OPTIONS".
These remove unwanted windows from the current selection.
Multiple filter options can be given. For example, "icesh -c
xterm -W this close" will close only those xterms that are shown
on the current workspace. The xterms on other workspaces are
filtered out by the "-W this" filter option.
There is no limit to the number of commands, selections, filters and
actions that you can give to a single icesh command. They are
processed and evaluated one by one from left to right. This makes
icesh a small declarative programming language. Have a look at some
examples near the end of this document.
OPTIONS
icesh recognizes the following options:
SELECT OPTIONS
Select options specify the window or windows to which subsequent
actions apply. If none is given, but an action does require a window,
then a selection crosshair is shown to select the desired window
interactively. The manager actions do not require window options.
The following options
select one or more client windows. If needed,
they can be repeated for successive actions.
-a,
-all Selects all client windows of the window manager.
-f,
-focus,
+f,
+focus Selects the application window that is currently focused. The
option with minus sign replaces the existing selection with the
focused window. With a plus sign the focused window is added to
an existing selection.
+g,
+group Extend the current selection with client windows that belong to
the same application window group.
-r,
-root,
+r,
+root Selects the root window. The option with minus sign replaces the
existing selection with the root window. With a plus sign the
root window is added to an existing selection.
-s,
-shown Selects all client windows that are on the current workspace.
-t,
-top Selects all toplevel windows from the display unconditionally.
This includes windows that have never been mapped and windows
with the override redirect bit set to evade management.
-w,
-window,
+w,
+window WINDOW_ID Specifies the identifier of the window,
WINDOW_ID, for which the
action applies. Special identifiers are
root for the root window
and
focus for the currently focused window. The option with
minus sign replaces the existing selection. With a plus sign the
window is added to an existing selection.
-x,
-xembed Selects all windows that are embedded using the
XEMBED protocol.
+c,
+class CLASS Extend the current selection with client windows that have a
WM_CLASS property equal to
CLASS. This is the resource instance
and class name. If
CLASS contains a period, only windows with
exactly the same
WM_CLASS property are matched. If there is no
period, windows of the same class and windows of the same
instance are selected.
+C,
+Class Extend the current selection with client windows that have a
WM_CLASS property
similar to the already selected set of windows.
-D,
-Dockapps Selects all Dockapp applications that are managed by icewm.
+P,
+Pid Extend the current selection with client windows that have the
same process identifier as one of the selected windows.
-T Selects the IceWM taskbar.
FILTER OPTIONS
The following options
filter the currently selected set of windows.
If no previous
select option was given then a
-all option is
implicitly assumed to filter all client windows.
-c,
-class CLASS Filters the set of windows on their
WM_CLASS property. This is
the resource instance and class name. If
CLASS contains a period,
only windows with exactly the same
WM_CLASS property are matched.
If there is no period, windows of the same class and windows of
the same instance (aka.
-name) are selected.
-l,
-last Filter clients and keep only the most recent client.
-m,
-machine HOST Filters clients by host name. Clients with a WM_CLIENT_MACHINE
property equal to
HOST are selected.
-n,
-name NAME Filters clients by _NET_WM_NAME or WM_NAME.
NAME matches any part
of the property value. To match at the beginning use a "^"
prefix. To match at the end use a "$" suffix.
-p,
-pid PID Filters clients by process ID. Clients with a _NET_WM_PID
property equal to
PID are selected.
-u,
-unmapped Filter clients and keep those that are currently not viewable.
These are hidden, minimized, rolled-up, or on another workspace.
-v,
-viewable Filter clients and keep only those that are currently viewable.
These clients are mapped on the current workspace.
-G,
-Gravity GRAVITY Filters clients by the window gravity field of the
WM_NORMAL_HINTS property. Clients with a gravity equal to
GRAVITY are selected. If
GRAVITY starts with an exclamation mark
then the filtering is inverted.
-L,
-Layer LAYER Filters clients by
GNOME window layer, which can either be a
layer name or a layer number. See EXPRESSIONS below. If
LAYER starts with an exclamation mark then the filtering is inverted.
-N,
-Netstate STATE Filters clients by
EWMH window state. Clients that have at least
an EWMH window state of
STATE are selected. This state refers to
details like
MINIZED or
MAXIMIZED. See EXPRESSIONS below. If
STATE starts with an exclamation mark then the filtering is
inverted. A question mark "?" filters clients with any bit set
in
STATE.
-P,
-Property PROP[=value] Filters clients by property. Clients that have a property
PROP are selected. If the optional
value is given, the match succeeds
only if
PROP is a string, window, cardinal, or atom, with a value
equal to
value. The filtering is inverted if
PROP starts with an
exclamation mark.
-R,
-Role ROLE Filters clients by WM_WINDOW_ROLE. Clients that have a
WM_WINDOW_ROLE property value equal to
ROLE are selected. The
filtering is inverted if
ROLE starts with an exclamation mark.
-W,
-Workspace WORKSPACE Filter clients by workspace. Workspace
WORKSPACE is either a
workspace name, or a workspace number counting from zero, or the
word "this" for the current workspace, or the word "All" for all
workspaces. If
WORKSPACE starts with an exclamation mark then
the filtering is inverted.
-X,
-Xinerama MONITOR Limit clients by
RandR/
Xinerama monitor. Only operate on clients
that are displayed on
MONITOR, where
MONITOR can be "All" for all
monitors, "this" for the monitor where the active window is
displayed, or a monitor number starting from zero. See the
output of "randr" or "xinerama" below.
GENERAL OPTIONS
The following options are identical for every IceWM command.
-d,
-display DISPLAY Specifies the X11 DISPLAY. If unspecified, defaults to
$DISPLAY.
-h,
--help Print a brief usage statement to
stdout and exit.
-V,
--version Print the program version to
stdout and exit.
-C,
--copying Print copying permissions to
stdout for the program and exit.
-q,
--quiet Don't complain if no matching windows could be found.
ACTIONS
icesh expects one or more action arguments. There are two kinds of
actions:
window actions and
manager actions. The first operates on
the selected windows. The second directly interacts with the
icewm window manager.
WINDOW ACTIONS
The following actions affect the selected window or windows.
activate Activate the window, aka.
to focus.
close Send a close request to the client that created the window.
kill Force an immediate close down of the client that created the
window.
id Print window identifiers for the selected windows.
pid Print process identifiers for the selected windows.
list Show window details, like geometry and names.
lower Lower the window.
raise Raise the window.
above Stack the window above others.
below Stack the window below others.
rollup Rollup the specified window.
fullscreen Set the window to fullscreen.
maximize Maximize the window.
horizontal Maximize the window only horizontally.
vertical Maximize the window only vertically.
minimize Minimize the window.
restore Restore the window to normal and clear urgency.
hide Hide the window.
unhide Reveal the window.
skip Don't show the window on the taskbar.
unskip Do show the window on the taskbar.
sticky Show the window on all workspaces.
unsticky Show the window on just one workspace.
urgent Set the urgency flag to flash the task button.
resize WIDTH HEIGHT Resize window to
WIDTH by
HEIGHT window units. For text based
applications like terminals, a window unit is the size of a
single character cell.
sizeto WIDTH HEIGHT Resize window to
WIDTH by
HEIGHT pixels. If
WIDTH or
HEIGHT ends
with a percent sign "%", then they refer to a percentage of the
desktop work area. For instance, "sizeto 50% 100%" resizes to
half the desktop width and whatever height is available above or
below the taskbar.
sizeby WIDTH HEIGHT Resize window by
WIDTH by
HEIGHT pixels. If
WIDTH or
HEIGHT ends
with a percent sign "%", then they refer to a percentage of the
current window size. For instance, "sizeby 50% 200" increases the
width by 50% and increases the height by 200 pixels.
move X Y Move the selected window or windows to the screen position
X Y.
To specify
X or
Y values relative to the right side or bottom
side precede the value with an extra minus sign, like in "move
-+10 --20". When
X or
Y end with a percent sign "%", they refer
to a percentage of the desktop work area.
moveby X Y Displace window by
X Y pixels.
center Position the window in the center of the desktop work area.
left Position the window against the left side of the desktop work
area.
right Position the window against the right side of the desktop work
area.
top Position the window against the top side of the desktop work
area.
bottom Position the window against the bottom side of the desktop work
area.
setIconTitle TITLE Set the icon title to
TITLE.
getIconTitle Print the icon title.
setWindowTitle TITLE Set the window title to
TITLE.
getWindowTitle Print the window title.
setGeometry GEOMETRY Set the window geometry to
GEOMETRY. This geometry should be
specified in a format that can be parsed by
XParseGeometry(3).
Negative offsets are with respect to the bottom or right side of
the screen. Use "+-" for a truly negative position.
getGeometry Print the window geometry.
setClass CLASS Set the resource name and class to
CLASS, which should be a
resource name and a resource class connected by a dot. To
preserve either the existing name or class, use a percentage sign
for that part.
getClass Print the resource name and class.
netState [STATE] If
STATE is omitted then it shows the
EWMH window state. If
STATE starts with a "+" then flags in
STATE are appended to the
existing
EWMH window state. If
STATE starts with a "-" then
flags in
STATE are removed from the existing
EWMH window state.
If
STATE starts with a "^" then flags in
STATE are toggled with
respect to the existing
EWMH window state. If
STATE starts with
a "=" then the
EWMH window state is set to
STATE. See EXPRESSIONS
below. A list of
EWMH flags can be found in the output of "icesh
symbols".
setLayer LAYER Move the specified window to another
window layer. See
EXPRESSIONS below for a list of
LAYER symbols.
getLayer Print the
window layer for the specified window.
setWorkspace WORKSPACE Move the specified window to another workspace. Select the root
window to change the current workspace. If
WORKSPACE is "All"
then the specified window becomes visible on all workspaces.
Specify "this" for the current workspace, "next" for the
subsequent workspace or "prev" for the preceding workspace.
getWorkspace Print the workspace for the specified window.
opacity [
OPACITY]
Print the window opacity if
OPACITY is not given, otherwise set
the window opacity to
OPACITY.
setTrayOption TRAYOPTION Set the
IceWM tray option for the specified window to
TRAYOPTION.
See
IceWM tray options, below, for
TRAYOPTION symbols.
getTrayOption Print the
IceWM tray option for the specified window.
setNormalGravity GRAVITY Set the window gravity field in the WM_NORMAL_HINTS property for
the specified window to
GRAVITY. See below for
GRAVITY symbols.
getNormalGravity Print the window gravity from the WM_NORMAL_HINTS property for
the specified window.
setWindowGravity GRAVITY Set the window gravity for the specified window to
GRAVITY. See
below for
GRAVITY symbols.
getWindowGravity Print the window gravity for the specified window.
setBitGravity GRAVITY Set the bit gravity> for the specified window to
GRAVITY. See
below for
GRAVITY symbols.
getBitGravity Print the bit gravity for the specified window.
motif [
funcs FUNCTIONS |
decor DECORATIONS |
remove]
Query, set or modify the "_MOTIF_WM_HINTS" property for the
specified window. Without arguments
motif will show the current
value, but only if the window has such a property. The property
can be removed or reset with the
remove argument. With
funcs and
decor individual fields of this property can be enabled or
disabled. If
FUNCTIONS or
DECORATIONS starts with a minus or plus
sign then the existing value is modified, otherwise it is set to
the new value. Note that if "All" is set, other set fields are
disabled and cleared fields are enabled.
borderless Hide the frame borders and title.
bordered Show the frame borders and title.
denormal Remove the WM_NORMAL_HINTS property, if it exists. This lifts
font-size restrictions on resizing, especially for terminals.
prop PROPERTY Print the value of property
PROPERTY, if it is present.
properties Print all properties and their values.
frame Print the identifier of the window frame.
extents Print the window identifier and the frame border sizes: left,
right, top and bottom.
focusmodel Print the ICCCM focus model as advertised by the client window.
This is either Locally, Passive, Globally or NoInput.
override [
0|1]
Print the override redirect status for the window, or if either 0
or 1 is given, then disable or enable the override redirect
status.
tabto label Move the windows as tabs to a frame that has "frame" label
label.
Such a frame is created if needed.
untab Move each window to its own frame, if it is currently tabbed.
loadicon image.pam Load an icon from file, which must be in the PAM image format,
with dimensions at most 256, a depth of 4, and type
RGB_ALPHA.
saveicon file000.pam Save an icon to a new file in the PAM image format. Digits are
increased to generate a unique new filename for each window.
click window-x window-y button Send a button press and release event at position (
window-x,
window-y). A negative position is relative to the bottom right
corner. The mouse pointer is warped to the position before
sending the events. The button number should be between 1 and 5
inclusive.
monitors top bottom left right This sets the monitors to use for fullscreen. Top, bottom, left,
and right are indices of the
icesh xinerama command.
spy Observe the selected windows and report any changes. This
includes focus, visibility, position, size and all window
properties. To monitor all of the protocol request messages that
client applications may send to icewm, also spy on the root
window.
stacking Sort the list of windows from topmost to bottom-most.
reverse Reverse the order of the list of windows.
MANAGER ACTIONS
The following actions control the IceWM window manager and therefore
do not require a window
select or
filter option:
listWorkspaces List the names of all workspaces.
current Show the number and name of the current workspace.
goto WORKSPACE Change the current workspace to
WORKSPACE. Specify "next" for the
subsequent workspace or "prev" for the preceding workspace.
workspaces [
COUNT]
Print the number of workspaces if
COUNT is not given, otherwise
set the number of workspaces to
COUNT.
setWorkspaceName INDEX NAME Change the name of the workspace
INDEX to
NAME, where
INDEX is a
workspace number starting from zero.
setWorkspaceNames NAME [
NAME]*
Change the workspace names to the list of
NAMEs.
addWorkspace NAME Create a new workspace with name
NAME.
desktop [
SHOWING]
If
SHOWING is 1 then set "showing the desktop" mode. If
SHOWING is 0 then turn off "showing the desktop". Print the current mode
if
SHOWING is not given.
workarea Print the dimensions of the work area for the current workspace.
This is the desktop, but minus space occupied by dock and panel
windows.
randr Summarize the
RandR configuration.
xinerama Summarize the
Xinerama configuration.
check Print information about the current window manager, like name,
version, class, locale, command, host name and pid.
clients List all managed client windows, their titles and geometries.
shown List all mapped client windows for the current desktop, their
titles and geometries.
windows List all toplevel windows, their titles and geometries.
systray List applications that are managed by the IceWM system tray.
xembed List application windows that are embedded using the
XEMBED protocol. This is another way to discover system tray
applications.
logout Let icewm execute the "LogoutCommand".
reboot Let icewm execute the "RebootCommand".
shutdown Let icewm execute the "ShutdownCommand".
cancel Let icewm cancel the logout/reboot/shutdown.
about Let icewm show the about window.
windowlist Let icewm show the window list window.
restart Let icewm restart itself.
suspend Let icewm execute the "SuspendCommand".
hibernate Let icewm execute the "HibernateCommand".
winoptions Let icewm reload the "winoptions". This only affects new
windows.
keys Let icewm reload the "keys" file.
refresh Let icewm refresh the desktop background.
guievents Monitor the
ICEWM_GUI_EVENT property and report all changes. Hit
"Ctrl+C" to abort this and continue with the next command.
delay [
time]
Stop execution for
time or 0.1 seconds.
runonce program [
arguments...]
This action is meant to be used together with the
-class option.
Only if no window is matched by
WM_CLASS then
program [
arguments...] is executed.
loop [
count]
Loop back to the beginning of the command and repeat. The
optional
count limits the number of repetitions.
pick Choose a window by a mouse button click.
sync Synchronize with the IceWM window manager. That is, wait for
icewm to process all previous actions.
symbols List all named symbols.
CONDITIONALS
Icesh supports "if-then-else" expressions. The full syntax is:
if selection
then
actions
elif selection
then
actions
else
actions
end
Where "selection" is a sequence of selection and filtering options,
which evaluates to
true when it is non-empty. That is, if one or more
windows fulfilled the condition. If it is empty, then its "actions"
clause is ignored and the subsequent "elif" or "else" clause is tried
or taken. Each clause is optional.
Whenever a selection condition evaluates to
false, the window
selection that existed before the "if" clause is immediately
restored. This also happens after an "end" clause.
EXPRESSIONS
Some of the window actions require one or two
EXPRESSION arguments.
EXPRESSION ::=
SYMBOL |
EXPRESSION { "+" | "|" }
SYMBOL Each
SYMBOL may be from one of the following applicable domains:
Window layer Named symbols of the domain
Window layer (numeric range: 0-15):
Desktop (0)
Below (2)
Normal (4)
OnTop (6)
Dock (8)
AboveDock (10)
Menu (12)
Fullscreen (14)
AboveAll (15)
These symbols are used with the
LAYER argument to the "setLayer"
action.
IceWM tray option Named symbols of the domain
IceWM tray option (numeric range:
0-2):
Ignore (0)
Minimized (1)
Exclusive (2)
These symbols are used with the
TRAYOPTION argument to the
"setTrayOption" action.
Gravity symbols Named symbols for window and bit gravity (numeric range: 0-10):
ForgetGravity (0)
NorthWestGravity (1)
NorthGravity (2)
NorthEastGravity (3)
WestGravity (4)
CenterGravity (5)
EastGravity (6)
SouthWestGravity (7)
SouthGravity (8)
SouthEastGravity (9)
StaticGravity (10)
Motif functions All (1)
Resize (2)
Move (4)
Minimize (8)
Maximize (16)
Close (32)
Motif decorations All (1)
Border (2)
Resize (4)
Title (8)
Menu (16)
Minimize (32)
Maximize (64)
EWMH window state symbols Named symbols of the domain
EWMH state (numeric range: 0-8191):
ABOVE (1)
BELOW (2)
DEMANDS_ATTENTION (4)
FOCUSED (8)
FULLSCREEN (16)
HIDDEN (32)
MAXIMIZED_HORZ (64)
MAXIMIZED_VERT (128)
MODAL (256)
SHADED (512)
SKIP_PAGER (1024)
SKIP_TASKBAR (2048)
STICKY (4096)
EXAMPLES
List all workspace names:
icesh listWorkspaces
Example output:
workspace #0: `main'
workspace #1: `web'
workspace #2: `doc'
workspace #3: `dev'
Close terminal work and activate terminal fun.
icesh -c work.XTerm close -a -c fun.XTerm activate
Print opacity for all xterms.
icesh -c XTerm opacity
Change opacity for all xterms.
icesh -c XTerm opacity 84
Move all windows on workspace "Top" to the current workspace.
icesh -W "Top" setWorkspace "this"
Restore all hidden clients, minimize all clients on the current
workspace and activate Firefox.
icesh -N HIDDEN restore -a -W "this" minimize -a -c Firefox activate
Resize the focused window to occupy the right half of the desktop
area.
icesh -f sizeto 49% 100% top right raise
Toggle the frame border of the focused window.
if icesh -f motif | grep -q 'decor:$'; then \
icesh -f motif decor All; else icesh -f motif decor ""; fi
Here is a different solution using conditionals.
icesh -f if -P _NET_FRAME_EXTENTS=0 then bordered else borderless
Here is a conditional to either toggle the visibility of a roxterm
that has a WM_ROLE value of "special" or start it with
runonce.
icesh if -c roxterm.Roxterm -R special then \
if -v then hide \
elif -u then setWorkspace this activate end \
else runonce roxterm --role=special
Collect all urxvt terminals from the fourth workspace in a single
frame on the current workspace.
icesh -W 3 -c urxvt tabto myfunnyname
Use the loop construct conditionally to wait for a certain window to
appear.
icesh -t if -n Tooltip then list else delay 0.05 loop end
ENVIRONMENT
DISPLAY The default display.
EXIT STATUS
0 The last action completed successfully.
1 The last action completed unsuccessfully, or no window met the
condition.
2 A conditional has invalid syntax.
3 The display could not be opened.
4 The X server reports an error while processing a request.
COMPLIANCE
icesh is largely compliant with the EWMH and ICCCM specifications.
Some commands, like manager actions, are specific to IceWM.
SEE ALSO
icewm(1),
wmctrl(1),
xdotool(1),
xprop(1),
xwininfo(1),
XParseGeometry(3).
BUGS
Please report bugs at <https://github.com/bbidulock/icewm/issues>.
AUTHOR
Brian Bidulock <mailto:bidulock@openss7.org>.
See
--copying for full copyright notice and copying permissions.
LICENSE
IceWM is licensed under the GNU Library General Public License. See
the
COPYING file in the distribution or use the
--copying flag to
display copying permissions.
icewm 3.6.0 2024-06-16 ICESH(1)