aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Tiefenbruck <mark@fluxbox.org>2008-08-20 12:26:12 (GMT)
committerMark Tiefenbruck <mark@fluxbox.org>2008-08-20 12:26:12 (GMT)
commit4bf00f68573f3ad172b879e78ad441e74a916e66 (patch)
treea79a73aec7b643f0252d1f678e0a8c1703070576
parent0fea3e3c8640888e4ae6e76775f309f290134aab (diff)
downloadfluxbox-4bf00f68573f3ad172b879e78ad441e74a916e66.zip
fluxbox-4bf00f68573f3ad172b879e78ad441e74a916e66.tar.bz2
fix match limits in apps file, plus some documentation
-rw-r--r--doc/asciidoc/fluxbox-keys.txt7
-rw-r--r--doc/asciidoc/fluxbox.190
-rw-r--r--doc/asciidoc/fluxbox.txt122
-rw-r--r--doc/fluxbox-keys.55
-rw-r--r--doc/fluxbox.1.in90
-rw-r--r--src/ClientPattern.hh2
-rw-r--r--src/FocusableList.cc8
-rw-r--r--src/Remember.cc10
-rw-r--r--src/WorkspaceCmd.cc3
9 files changed, 153 insertions, 184 deletions
diff --git a/doc/asciidoc/fluxbox-keys.txt b/doc/asciidoc/fluxbox-keys.txt
index b3b458a..8ba93ca 100644
--- a/doc/asciidoc/fluxbox-keys.txt
+++ b/doc/asciidoc/fluxbox-keys.txt
@@ -208,8 +208,8 @@ These commands ordinarily affect only the currently focused window. The
208 208
209*SetDecor* 'decor':: 209*SetDecor* 'decor'::
210 Sets which window decorations will be shown. 'decor' has the same format 210 Sets which window decorations will be shown. 'decor' has the same format
211 as the `[Deco]' parameter in the apps file. See man fluxbox section 211 as the `[Deco]' parameter in the apps file. See `man fluxbox' section
212 APPLICATION SETTINGS for more info. 212 APPLICATIONS for more info.
213 213
214*ToggleDecor*:: 214*ToggleDecor*::
215 Toggles the presence of the window decorations (title bar, window 215 Toggles the presence of the window decorations (title bar, window
@@ -556,9 +556,6 @@ properties specified in the 'pattern'. A 'pattern' looks like this:
556 556
557(['propertyname'[!]=]'regexp') ... 557(['propertyname'[!]=]'regexp') ...
558 558
559That is, one or more match definitions, followed by an optional limit on the
560number of windows to match.
561
562Match definitions are enclosed in parentheses *(*...*)*, and if no 559Match definitions are enclosed in parentheses *(*...*)*, and if no
563'propertyname' is given then *Name* is assumed. The 'regexp' can contain any 560'propertyname' is given then *Name* is assumed. The 'regexp' can contain any
564regular expression, or the special value *[current]*, which matches the 561regular expression, or the special value *[current]*, which matches the
diff --git a/doc/asciidoc/fluxbox.1 b/doc/asciidoc/fluxbox.1
index 4d14f71..0272673 100644
--- a/doc/asciidoc/fluxbox.1
+++ b/doc/asciidoc/fluxbox.1
@@ -1,11 +1,11 @@
1.\" Title: fluxbox 1.\" Title: fluxbox
2.\" Author: 2.\" Author:
3.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> 3.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
4.\" Date: 08/19/2008 4.\" Date: 08/20/2008
5.\" Manual: 5.\" Manual:
6.\" Source: 6.\" Source:
7.\" 7.\"
8.TH "FLUXBOX" "1" "08/19/2008" "" "" 8.TH "FLUXBOX" "1" "08/20/2008" "" ""
9.\" disable hyphenation 9.\" disable hyphenation
10.nh 10.nh
11.\" disable justification (adjust text to left margin only) 11.\" disable justification (adjust text to left margin only)
@@ -1199,40 +1199,44 @@ The default installation of fluxbox provides some of these style files\. See flu
1199In addition to the style file, the overlay file, whose location is specified by session\.screen0\.styleOverlay (default: ~/\.fluxbox/overlay ) can be used to set style resources that override all styles\. For more information about which parts of fluxbox can be controlled by the overlay file, see fluxstyle(1)\. 1199In addition to the style file, the overlay file, whose location is specified by session\.screen0\.styleOverlay (default: ~/\.fluxbox/overlay ) can be used to set style resources that override all styles\. For more information about which parts of fluxbox can be controlled by the overlay file, see fluxstyle(1)\.
1200.sp 1200.sp
1201.SH "APPLICATIONS" 1201.SH "APPLICATIONS"
1202It is possible to force an application to always have the same dimensions, position, and other settings when it is first launched\. This is done using either the window\-menu `Remember\&...\fI submenu, or by directly using the ~/\.fluxbox/apps file\. Be careful about editing the apps file while fluxbox is running\. Your changes may be overwritten\. Following is a listing of the valid entries for the `apps\fR file\. The `Remember\&...\fI submenu has entries for most options that store the current state in the `apps\fR file for future use\. 1202It is possible to force an application to always have the same dimensions, position, and other settings when it is first launched\. The easiest way to do this is to use the `Remember\&...\' submenu of the window menu, which can usually be opened with a right click on the titlebar\. More advanced features require manually editing the ~/\.fluxbox/apps file, where these settings are saved\.
1203.sp 1203.sp
1204The format of a line in the `apps\' file is: 1204The format of a section in the `apps\' file is:
1205.sp 1205.sp
1206.sp 1206.sp
1207.RS 4 1207.RS 4
1208.nf 1208.nf
1209[app] (app\-name) {count \- optional} 1209[app] (Property=\'value\') \.\.\. {count \- optional}
1210 [Property1] {value1} 1210 [Setting1] {value1}
1211 [Property2] {value2} 1211 [Setting2] {value2}
1212 \.\.\. 1212 \.\.\.
1213[end] 1213[end]
1214.fi 1214.fi
1215.RE 1215.RE
1216Each app\-name can be a string, or a regular expression\. By default the name is matched against a window\'s WM_CLASS property (the first string in it, called the "instance")\. You can match against the title, instance name (default), class name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it\. You can also specify multiple matches, which must ALL match for the properties to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. Settings associated with an [app] line will not be applied to transient windows\. [transient] may be used instead to match them\. 1216Property can be one of the following tags:
1217.sp
1218o name \- the name of the window (the first field of WM_CLASS) o class \- class of the window (the second field of WM_CLASS) o title \- title of the window (the WM_NAME property) o role \- role of the window (the WM_WINDOW_ROLE property)
1219.sp
1220You can find out the value for these fields for a particular window by running xprop(1)\. The window title should be used only as a last resort, since it often changes after the window opens\. Each \fIvalue\fR can be a string or a regular expression\. All values are case sensitive\.
1221.sp
1222You can specify multiple properties, which must ALL match for the settings to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. Settings associated with an [app] line will not be applied to transient windows\. [transient] may be used instead to match them\.
1217.sp 1223.sp
1218.sp 1224.sp
1219.RS 4 1225.RS 4
1220.nf 1226.nf
1221# match a standard xterm 1227# match a standard xterm
1222[app] (xterm) 1228[app] (name=xterm)
1223# match an xterm started like: xterm \-name myshell 1229# match an xterm started like: xterm \-name myshell
1224[app] (myshell) 1230[app] (name=myshell)
1225# match any one Firefox window (the instance name is "Gecko")
1226[app] (class=Firefox\-bin) {1}
1227# match the gaim buddy list window 1231# match the gaim buddy list window
1228[app] (role=buddy_list) 1232[app] (role=buddy_list)
1229# match an rdesktop window to a particular host 1233# match an rdesktop window to a particular host
1230[app] (title=rdesktop \- hostname\.*) 1234[app] (title=rdesktop \- hostname\.*)
1231# match gaim IRC windows 1235# match pidgin IRC windows
1232[app] (gaim) (title=#\.*) 1236[app] (pidgin) (title=#\.*)
1233.fi 1237.fi
1234.RE 1238.RE
1235The following are the properties that can be defined in each [app] entry\. Each name must be enclosed in square brackets, and the value is generally in curly brackets: 1239The following are the settings that can be defined in each [app] entry\. Each name must be enclosed in square brackets, and the value is generally in curly brackets:
1236.sp 1240.sp
1237.sp 1241.sp
1238.RS 4 1242.RS 4
@@ -1244,7 +1248,7 @@ The following are the properties that can be defined in each [app] entry\. Each
1244.RE 1248.RE
1245.sp 1249.sp
1246.RS 4 1250.RS 4
1247\h'-04'\(bu\h'+03'[Position] (\fBrefspot\fR)) {X Y}: Position the application at a particular spot: 1251\h'-04'\(bu\h'+03'[Position] (\fBrefspot\fR) {X Y}: Position the application at a particular spot:
1248.sp 1252.sp
1249.RS 4 1253.RS 4
1250\h'-04'\(bu\h'+03'TOPLEFT 1254\h'-04'\(bu\h'+03'TOPLEFT
@@ -1309,7 +1313,7 @@ is positioned (X,Y) pixels from the lower right of the screen\.
1309.RE 1313.RE
1310.sp 1314.sp
1311.RS 4 1315.RS 4
1312\h'-04'\(bu\h'+03'[FocusHidden] {yes|no}: Hides the app from the window cycling list used Next/PrevWindow key bindings\. 1316\h'-04'\(bu\h'+03'[FocusHidden] {yes|no}: Hides the app from the window cycling list used by Next/PrevWindow key bindings\.
1313.RE 1317.RE
1314.sp 1318.sp
1315.RS 4 1319.RS 4
@@ -1356,56 +1360,40 @@ enabled, focus enabled\.
1356.RE 1360.RE
1357The apps file also allows you to specify applications that should be started only valid option is (screen=NN), where NN is the screen number on which the command should be run\. 1361The apps file also allows you to specify applications that should be started only valid option is (screen=NN), where NN is the screen number on which the command should be run\.
1358.sp 1362.sp
1359Finally, you can set windows to group together by using the `apps\' file\. This can be achieved with regular expressions using: 1363Finally, you can set windows to group together by using the `apps\' file\. Just place a [group] tag around several [app] tags, with an [end] tag to indicate the end of the group\. If you place (workspace) after the [group] tag, a new window will only get grouped with other windows on the current workspace\. You can also specify dimensions, positions, etc\. for the group as for normal app entries\. Here is a short example of an `apps\' file:
1360.sp
1361.sp
1362.RS 4
1363.nf
1364[app] (property=expr) \.\.\. {number}
1365.fi
1366.RE
1367Property can be one of the following tags:
1368.sp
1369o name \- the name of the window (the first field of WM_CLASS) o class \- class of the window (the second field of WM_CLASS) o title \- title of the window ( WM_NAME property) o role \- role of the window (the WM_WINDOW_ROLE property)
1370.sp
1371If no `property\' is specified, the name property is assumed\. You can find out the value for these fields for a particular window by running xprop(1)\.
1372.sp
1373You can also place [group] tag around several [app] tags, with an [end] tag to indicate the end of the group\. If you place (workspace) after the [group] tag, a new window will only get grouped with other windows on the current workspace\. You can also specify dimensions, positions, etc\. for the group as for normal app entries\. Here is a short example of an `apps\' file:
1374.sp 1364.sp
1375.sp 1365.sp
1376.RS 4 1366.RS 4
1377.nf 1367.nf
1378 [startup] {xterm} 1368 [startup] {xterm}
1379 # match anything ending with term, up to 2 instances 1369 # match anything ending with term, up to 2 instances
1380 [app] (\.*[tT]erm) {2} 1370 [app] (name=\.*[tT]erm) {2}
1381 # match anything with `gaim\' in the title 1371 [Workspace] {1}
1382 [app] (title=\.*gaim\.*)
1383 [app] (kate)
1384 [Dimensions] {1022 747}
1385 [Position] (WINCENTER) {0 0}
1386 [Close] {yes}
1387 [end] 1372 [end]
1388 [app] (konqueror) 1373 [app] (name=kate)
1389 [Workspace] {1} 1374 [Dimensions] {1022 747}
1390 [Dimensions] {1006 749} 1375 [Position] (WINCENTER) {0 0}
1391 [Position] {16 0} 1376 [Close] {yes}
1392 [Jump] {yes} 1377 [end]
1378 [app] (name=konqueror)
1379 [Workspace] {1}
1380 [Dimensions] {1006 749}
1381 [Position] {16 0}
1382 [Jump] {yes}
1393 [end] 1383 [end]
1394 # start all aterms without decorations 1384 # start all aterms without decorations
1395 [app] (aterm) 1385 [app] (name=aterm)
1396 [Deco] {NONE} 1386 [Deco] {NONE}
1397 [end] 1387 [end]
1398 # a group with the gimp dock and toolbox 1388 # a group with the gimp dock and toolbox
1399 # appears on layer 4 (bottom) 1389 # appears on layer 4 (bottom)
1400 [group] 1390 [group]
1401 [app] (gimp) (role=gimp\-dock) 1391 [app] (name=gimp) (role=gimp\-dock)
1402 [app] (gimp) (role=gimp\-toolbox) 1392 [app] (name=gimp) (role=gimp\-toolbox)
1403 [Layer] {4} 1393 [Layer] {4}
1404 [end] 1394 [end]
1405.fi 1395.fi
1406.RE 1396.RE
1407Parameters in the `apps\' file are case\-sensitive\. Application names are taken from the first X window WM_CLASS attribute by default (WM_NAME = title, WM_WINDOW_ROLE = role)\. You can see this attribute by using the xprop command\. Take care when using regular expressions\. If you are not familiar with regular expressions you can disable this feature by specifying \-\-disable\-regexp during configure\. Plain strings will then be matched\.
1408.sp
1409.SH "THE SLIT" 1397.SH "THE SLIT"
1410The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\. 1398The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\.
1411.sp 1399.sp
diff --git a/doc/asciidoc/fluxbox.txt b/doc/asciidoc/fluxbox.txt
index e357fd4..7ca1456 100644
--- a/doc/asciidoc/fluxbox.txt
+++ b/doc/asciidoc/fluxbox.txt
@@ -1115,28 +1115,33 @@ of fluxbox can be controlled by the overlay file, see fluxstyle(1).
1115APPLICATIONS 1115APPLICATIONS
1116------------ 1116------------
1117It is possible to force an application to always have the same dimensions, 1117It is possible to force an application to always have the same dimensions,
1118position, and other settings when it is first launched. This is done using 1118position, and other settings when it is first launched. The easiest way to do
1119either the window-menu `Remember...' submenu, or by directly using the 1119this is to use the `Remember...' submenu of the window menu, which can usually
1120~/.fluxbox/apps file. Be careful about editing the apps file while fluxbox is 1120be opened with a right click on the titlebar. More advanced features require
1121running. Your changes may be overwritten. Following is a listing of the valid 1121manually editing the ~/.fluxbox/apps file, where these settings are saved.
1122entries for the `apps' file. The `Remember...' submenu has entries for most
1123options that store the current state in the `apps' file for future use.
1124 1122
1125The format of a line in the `apps' file is: 1123The format of a section in the `apps' file is:
1126 1124
1127.................................... 1125....................................
1128[app] (app-name) {count - optional} 1126[app] (Property='value') ... {count - optional}
1129 [Property1] {value1} 1127 [Setting1] {value1}
1130 [Property2] {value2} 1128 [Setting2] {value2}
1131 ... 1129 ...
1132[end] 1130[end]
1133.................................... 1131....................................
1134 1132
1135Each app-name can be a string, or a regular expression. By default the name 1133Property can be one of the following tags:
1136is matched against a window's WM_CLASS property (the first string in it, called 1134
1137the "instance"). You can match against the title, instance name (default), class 1135o name - the name of the window (the first field of WM_CLASS)
1138name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it. You can 1136o class - class of the window (the second field of WM_CLASS)
1139also specify multiple matches, which must ALL match for the properties to be 1137o title - title of the window (the WM_NAME property)
1138o role - role of the window (the WM_WINDOW_ROLE property)
1139
1140You can find out the value for these fields for a particular window by running
1141xprop(1). The window title should be used only as a last resort, since it often changes after the window opens. Each 'value' can be a string or a regular
1142expression. All values are case sensitive.
1143
1144You can specify multiple properties, which must ALL match for the settings to be
1140applied. If a count is supplied in curly brackets at the end of the app line, 1145applied. If a count is supplied in curly brackets at the end of the app line,
1141then the entry will only match at most that many at any time (default is to 1146then the entry will only match at most that many at any time (default is to
1142match all matching windows). Settings associated with an [app] line will not be 1147match all matching windows). Settings associated with an [app] line will not be
@@ -1144,22 +1149,20 @@ applied to transient windows. [transient] may be used instead to match them.
1144 1149
1145................................................................... 1150...................................................................
1146# match a standard xterm 1151# match a standard xterm
1147[app] (xterm) 1152[app] (name=xterm)
1148# match an xterm started like: xterm -name myshell 1153# match an xterm started like: xterm -name myshell
1149[app] (myshell) 1154[app] (name=myshell)
1150# match any one Firefox window (the instance name is "Gecko")
1151[app] (class=Firefox-bin) {1}
1152# match the gaim buddy list window 1155# match the gaim buddy list window
1153[app] (role=buddy_list) 1156[app] (role=buddy_list)
1154# match an rdesktop window to a particular host 1157# match an rdesktop window to a particular host
1155[app] (title=rdesktop - hostname.*) 1158[app] (title=rdesktop - hostname.*)
1156# match gaim IRC windows 1159# match pidgin IRC windows
1157[app] (gaim) (title=#.*) 1160[app] (pidgin) (title=#.*)
1158................................................................... 1161...................................................................
1159 1162
1160The following are the properties that can be defined in each [app] entry. 1163The following are the settings that can be defined in each [app] entry. Each
1161Each name must be enclosed in square brackets, and the value is generally in 1164name must be enclosed in square brackets, and the value is generally in curly
1162curly brackets: 1165brackets:
1163 1166
1164- [Workspace] \{0-N\}: 1167- [Workspace] \{0-N\}:
1165 Forces the application to open on the workspace specified. Workspaces are 1168 Forces the application to open on the workspace specified. Workspaces are
@@ -1168,7 +1171,7 @@ curly brackets:
1168- [Dimensions] \{Width Height\}: 1171- [Dimensions] \{Width Height\}:
1169 Open the application with the specified width and height, in pixels. 1172 Open the application with the specified width and height, in pixels.
1170 1173
1171- [Position] (*refspot*)) {X Y}: 1174- [Position] (*refspot*) {X Y}:
1172 Position the application at a particular spot: 1175 Position the application at a particular spot:
1173 + 1176 +
1174 * TOPLEFT 1177 * TOPLEFT
@@ -1202,7 +1205,7 @@ curly brackets:
1202 Hides the app from the icon bar 1205 Hides the app from the icon bar
1203 1206
1204- [FocusHidden] {yes|no}: 1207- [FocusHidden] {yes|no}:
1205 Hides the app from the window cycling list used Next/PrevWindow key 1208 Hides the app from the window cycling list used by Next/PrevWindow key
1206 bindings. 1209 bindings.
1207 1210
1208- [Hidden] {yes|no}: 1211- [Hidden] {yes|no}:
@@ -1245,64 +1248,43 @@ on fluxbox startup using [startup] (options) {command} lines. Currently, the
1245only valid option is (screen=NN), where NN is the screen number on which the 1248only valid option is (screen=NN), where NN is the screen number on which the
1246command should be run. 1249command should be run.
1247 1250
1248Finally, you can set windows to group together by using the `apps' file. This 1251Finally, you can set windows to group together by using the `apps' file. Just
1249can be achieved with regular expressions using: 1252place a [group] tag around several [app] tags, with an [end] tag to indicate the
1250 1253end of the group. If you place (workspace) after the [group] tag, a new window
1251 [app] (property=expr) ... {number} 1254will only get grouped with other windows on the current workspace. You can also
1252 1255specify dimensions, positions, etc. for the group as for normal app entries.
1253Property can be one of the following tags: 1256Here is a short example of an `apps' file:
1254
1255o name - the name of the window (the first field of WM_CLASS)
1256o class - class of the window (the second field of WM_CLASS)
1257o title - title of the window ( WM_NAME property)
1258o role - role of the window (the WM_WINDOW_ROLE property)
1259
1260If no `property' is specified, the name property is assumed. You can find out
1261the value for these fields for a particular window by running xprop(1).
1262
1263You can also place [group] tag around several [app] tags, with an [end] tag to
1264indicate the end of the group. If you place (workspace) after the [group] tag, a
1265new window will only get grouped with other windows on the current workspace.
1266You can also specify dimensions, positions, etc. for the group as for normal app
1267entries. Here is a short example of an `apps' file:
1268 1257
1269......................................................... 1258.........................................................
1270 [startup] {xterm} 1259 [startup] {xterm}
1271 # match anything ending with term, up to 2 instances 1260 # match anything ending with term, up to 2 instances
1272 [app] (.*[tT]erm) {2} 1261 [app] (name=.*[tT]erm) {2}
1273 # match anything with `gaim' in the title 1262 [Workspace] {1}
1274 [app] (title=.*gaim.*)
1275 [app] (kate)
1276 [Dimensions] {1022 747}
1277 [Position] (WINCENTER) {0 0}
1278 [Close] {yes}
1279 [end] 1263 [end]
1280 [app] (konqueror) 1264 [app] (name=kate)
1281 [Workspace] {1} 1265 [Dimensions] {1022 747}
1282 [Dimensions] {1006 749} 1266 [Position] (WINCENTER) {0 0}
1283 [Position] {16 0} 1267 [Close] {yes}
1284 [Jump] {yes} 1268 [end]
1269 [app] (name=konqueror)
1270 [Workspace] {1}
1271 [Dimensions] {1006 749}
1272 [Position] {16 0}
1273 [Jump] {yes}
1285 [end] 1274 [end]
1286 # start all aterms without decorations 1275 # start all aterms without decorations
1287 [app] (aterm) 1276 [app] (name=aterm)
1288 [Deco] {NONE} 1277 [Deco] {NONE}
1289 [end] 1278 [end]
1290 # a group with the gimp dock and toolbox 1279 # a group with the gimp dock and toolbox
1291 # appears on layer 4 (bottom) 1280 # appears on layer 4 (bottom)
1292 [group] 1281 [group]
1293 [app] (gimp) (role=gimp-dock) 1282 [app] (name=gimp) (role=gimp-dock)
1294 [app] (gimp) (role=gimp-toolbox) 1283 [app] (name=gimp) (role=gimp-toolbox)
1295 [Layer] {4} 1284 [Layer] {4}
1296 [end] 1285 [end]
1297......................................................... 1286.........................................................
1298 1287
1299Parameters in the `apps' file are case-sensitive. Application names are taken
1300from the first X window WM_CLASS attribute by default (WM_NAME = title,
1301WM_WINDOW_ROLE = role). You can see this attribute by using the xprop
1302command. Take care when using regular expressions. If you are not familiar with
1303regular expressions you can disable this feature by specifying --disable-regexp
1304during configure. Plain strings will then be matched.
1305
1306THE SLIT 1288THE SLIT
1307-------- 1289--------
1308The slit is a special fluxbox window frame that can contain dockable 1290The slit is a special fluxbox window frame that can contain dockable
diff --git a/doc/fluxbox-keys.5 b/doc/fluxbox-keys.5
index 6509712..61fa49a 100644
--- a/doc/fluxbox-keys.5
+++ b/doc/fluxbox-keys.5
@@ -252,7 +252,8 @@ window is visible on all workspaces\.
252.RS 4 252.RS 4
253Sets which window decorations will be shown\. 253Sets which window decorations will be shown\.
254\fIdecor\fR 254\fIdecor\fR
255has the same format as the `[Deco]\' parameter in the apps file\. See man fluxbox section APPLICATION SETTINGS for more info\. 255has the same format as the `\fI parameter in the apps file\. See `man fluxbox\fR
256section APPLICATIONS for more info\.
256.RE 257.RE
257.PP 258.PP
258\fBToggleDecor\fR 259\fBToggleDecor\fR
@@ -775,8 +776,6 @@ Many of the more advanced commands take a \fIpattern\fR argument, which allows y
775.sp 776.sp
776([\fIpropertyname\fR[!]=]\fIregexp\fR) \&... 777([\fIpropertyname\fR[!]=]\fIregexp\fR) \&...
777.sp 778.sp
778That is, one or more match definitions, followed by an optional limit on the number of windows to match\.
779.sp
780Match definitions are enclosed in parentheses \fB(\fR\&...\fB)\fR, and if no \fIpropertyname\fR is given then \fBName\fR is assumed\. The \fIregexp\fR can contain any regular expression, or the special value \fB[current]\fR, which matches the corresponding value of the currently focused window\. See \fIregex(7)\fR for more information on acceptable regular expressions\. 779Match definitions are enclosed in parentheses \fB(\fR\&...\fB)\fR, and if no \fIpropertyname\fR is given then \fBName\fR is assumed\. The \fIregexp\fR can contain any regular expression, or the special value \fB[current]\fR, which matches the corresponding value of the currently focused window\. See \fIregex(7)\fR for more information on acceptable regular expressions\.
781.sp 780.sp
782You can use \fB=\fR to test for equality or \fB!=\fR to test for inequality\. 781You can use \fB=\fR to test for equality or \fB!=\fR to test for inequality\.
diff --git a/doc/fluxbox.1.in b/doc/fluxbox.1.in
index 4d14f71..0272673 100644
--- a/doc/fluxbox.1.in
+++ b/doc/fluxbox.1.in
@@ -1,11 +1,11 @@
1.\" Title: fluxbox 1.\" Title: fluxbox
2.\" Author: 2.\" Author:
3.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> 3.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
4.\" Date: 08/19/2008 4.\" Date: 08/20/2008
5.\" Manual: 5.\" Manual:
6.\" Source: 6.\" Source:
7.\" 7.\"
8.TH "FLUXBOX" "1" "08/19/2008" "" "" 8.TH "FLUXBOX" "1" "08/20/2008" "" ""
9.\" disable hyphenation 9.\" disable hyphenation
10.nh 10.nh
11.\" disable justification (adjust text to left margin only) 11.\" disable justification (adjust text to left margin only)
@@ -1199,40 +1199,44 @@ The default installation of fluxbox provides some of these style files\. See flu
1199In addition to the style file, the overlay file, whose location is specified by session\.screen0\.styleOverlay (default: ~/\.fluxbox/overlay ) can be used to set style resources that override all styles\. For more information about which parts of fluxbox can be controlled by the overlay file, see fluxstyle(1)\. 1199In addition to the style file, the overlay file, whose location is specified by session\.screen0\.styleOverlay (default: ~/\.fluxbox/overlay ) can be used to set style resources that override all styles\. For more information about which parts of fluxbox can be controlled by the overlay file, see fluxstyle(1)\.
1200.sp 1200.sp
1201.SH "APPLICATIONS" 1201.SH "APPLICATIONS"
1202It is possible to force an application to always have the same dimensions, position, and other settings when it is first launched\. This is done using either the window\-menu `Remember\&...\fI submenu, or by directly using the ~/\.fluxbox/apps file\. Be careful about editing the apps file while fluxbox is running\. Your changes may be overwritten\. Following is a listing of the valid entries for the `apps\fR file\. The `Remember\&...\fI submenu has entries for most options that store the current state in the `apps\fR file for future use\. 1202It is possible to force an application to always have the same dimensions, position, and other settings when it is first launched\. The easiest way to do this is to use the `Remember\&...\' submenu of the window menu, which can usually be opened with a right click on the titlebar\. More advanced features require manually editing the ~/\.fluxbox/apps file, where these settings are saved\.
1203.sp 1203.sp
1204The format of a line in the `apps\' file is: 1204The format of a section in the `apps\' file is:
1205.sp 1205.sp
1206.sp 1206.sp
1207.RS 4 1207.RS 4
1208.nf 1208.nf
1209[app] (app\-name) {count \- optional} 1209[app] (Property=\'value\') \.\.\. {count \- optional}
1210 [Property1] {value1} 1210 [Setting1] {value1}
1211 [Property2] {value2} 1211 [Setting2] {value2}
1212 \.\.\. 1212 \.\.\.
1213[end] 1213[end]
1214.fi 1214.fi
1215.RE 1215.RE
1216Each app\-name can be a string, or a regular expression\. By default the name is matched against a window\'s WM_CLASS property (the first string in it, called the "instance")\. You can match against the title, instance name (default), class name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it\. You can also specify multiple matches, which must ALL match for the properties to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. Settings associated with an [app] line will not be applied to transient windows\. [transient] may be used instead to match them\. 1216Property can be one of the following tags:
1217.sp
1218o name \- the name of the window (the first field of WM_CLASS) o class \- class of the window (the second field of WM_CLASS) o title \- title of the window (the WM_NAME property) o role \- role of the window (the WM_WINDOW_ROLE property)
1219.sp
1220You can find out the value for these fields for a particular window by running xprop(1)\. The window title should be used only as a last resort, since it often changes after the window opens\. Each \fIvalue\fR can be a string or a regular expression\. All values are case sensitive\.
1221.sp
1222You can specify multiple properties, which must ALL match for the settings to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. Settings associated with an [app] line will not be applied to transient windows\. [transient] may be used instead to match them\.
1217.sp 1223.sp
1218.sp 1224.sp
1219.RS 4 1225.RS 4
1220.nf 1226.nf
1221# match a standard xterm 1227# match a standard xterm
1222[app] (xterm) 1228[app] (name=xterm)
1223# match an xterm started like: xterm \-name myshell 1229# match an xterm started like: xterm \-name myshell
1224[app] (myshell) 1230[app] (name=myshell)
1225# match any one Firefox window (the instance name is "Gecko")
1226[app] (class=Firefox\-bin) {1}
1227# match the gaim buddy list window 1231# match the gaim buddy list window
1228[app] (role=buddy_list) 1232[app] (role=buddy_list)
1229# match an rdesktop window to a particular host 1233# match an rdesktop window to a particular host
1230[app] (title=rdesktop \- hostname\.*) 1234[app] (title=rdesktop \- hostname\.*)
1231# match gaim IRC windows 1235# match pidgin IRC windows
1232[app] (gaim) (title=#\.*) 1236[app] (pidgin) (title=#\.*)
1233.fi 1237.fi
1234.RE 1238.RE
1235The following are the properties that can be defined in each [app] entry\. Each name must be enclosed in square brackets, and the value is generally in curly brackets: 1239The following are the settings that can be defined in each [app] entry\. Each name must be enclosed in square brackets, and the value is generally in curly brackets:
1236.sp 1240.sp
1237.sp 1241.sp
1238.RS 4 1242.RS 4
@@ -1244,7 +1248,7 @@ The following are the properties that can be defined in each [app] entry\. Each
1244.RE 1248.RE
1245.sp 1249.sp
1246.RS 4 1250.RS 4
1247\h'-04'\(bu\h'+03'[Position] (\fBrefspot\fR)) {X Y}: Position the application at a particular spot: 1251\h'-04'\(bu\h'+03'[Position] (\fBrefspot\fR) {X Y}: Position the application at a particular spot:
1248.sp 1252.sp
1249.RS 4 1253.RS 4
1250\h'-04'\(bu\h'+03'TOPLEFT 1254\h'-04'\(bu\h'+03'TOPLEFT
@@ -1309,7 +1313,7 @@ is positioned (X,Y) pixels from the lower right of the screen\.
1309.RE 1313.RE
1310.sp 1314.sp
1311.RS 4 1315.RS 4
1312\h'-04'\(bu\h'+03'[FocusHidden] {yes|no}: Hides the app from the window cycling list used Next/PrevWindow key bindings\. 1316\h'-04'\(bu\h'+03'[FocusHidden] {yes|no}: Hides the app from the window cycling list used by Next/PrevWindow key bindings\.
1313.RE 1317.RE
1314.sp 1318.sp
1315.RS 4 1319.RS 4
@@ -1356,56 +1360,40 @@ enabled, focus enabled\.
1356.RE 1360.RE
1357The apps file also allows you to specify applications that should be started only valid option is (screen=NN), where NN is the screen number on which the command should be run\. 1361The apps file also allows you to specify applications that should be started only valid option is (screen=NN), where NN is the screen number on which the command should be run\.
1358.sp 1362.sp
1359Finally, you can set windows to group together by using the `apps\' file\. This can be achieved with regular expressions using: 1363Finally, you can set windows to group together by using the `apps\' file\. Just place a [group] tag around several [app] tags, with an [end] tag to indicate the end of the group\. If you place (workspace) after the [group] tag, a new window will only get grouped with other windows on the current workspace\. You can also specify dimensions, positions, etc\. for the group as for normal app entries\. Here is a short example of an `apps\' file:
1360.sp
1361.sp
1362.RS 4
1363.nf
1364[app] (property=expr) \.\.\. {number}
1365.fi
1366.RE
1367Property can be one of the following tags:
1368.sp
1369o name \- the name of the window (the first field of WM_CLASS) o class \- class of the window (the second field of WM_CLASS) o title \- title of the window ( WM_NAME property) o role \- role of the window (the WM_WINDOW_ROLE property)
1370.sp
1371If no `property\' is specified, the name property is assumed\. You can find out the value for these fields for a particular window by running xprop(1)\.
1372.sp
1373You can also place [group] tag around several [app] tags, with an [end] tag to indicate the end of the group\. If you place (workspace) after the [group] tag, a new window will only get grouped with other windows on the current workspace\. You can also specify dimensions, positions, etc\. for the group as for normal app entries\. Here is a short example of an `apps\' file:
1374.sp 1364.sp
1375.sp 1365.sp
1376.RS 4 1366.RS 4
1377.nf 1367.nf
1378 [startup] {xterm} 1368 [startup] {xterm}
1379 # match anything ending with term, up to 2 instances 1369 # match anything ending with term, up to 2 instances
1380 [app] (\.*[tT]erm) {2} 1370 [app] (name=\.*[tT]erm) {2}
1381 # match anything with `gaim\' in the title 1371 [Workspace] {1}
1382 [app] (title=\.*gaim\.*)
1383 [app] (kate)
1384 [Dimensions] {1022 747}
1385 [Position] (WINCENTER) {0 0}
1386 [Close] {yes}
1387 [end] 1372 [end]
1388 [app] (konqueror) 1373 [app] (name=kate)
1389 [Workspace] {1} 1374 [Dimensions] {1022 747}
1390 [Dimensions] {1006 749} 1375 [Position] (WINCENTER) {0 0}
1391 [Position] {16 0} 1376 [Close] {yes}
1392 [Jump] {yes} 1377 [end]
1378 [app] (name=konqueror)
1379 [Workspace] {1}
1380 [Dimensions] {1006 749}
1381 [Position] {16 0}
1382 [Jump] {yes}
1393 [end] 1383 [end]
1394 # start all aterms without decorations 1384 # start all aterms without decorations
1395 [app] (aterm) 1385 [app] (name=aterm)
1396 [Deco] {NONE} 1386 [Deco] {NONE}
1397 [end] 1387 [end]
1398 # a group with the gimp dock and toolbox 1388 # a group with the gimp dock and toolbox
1399 # appears on layer 4 (bottom) 1389 # appears on layer 4 (bottom)
1400 [group] 1390 [group]
1401 [app] (gimp) (role=gimp\-dock) 1391 [app] (name=gimp) (role=gimp\-dock)
1402 [app] (gimp) (role=gimp\-toolbox) 1392 [app] (name=gimp) (role=gimp\-toolbox)
1403 [Layer] {4} 1393 [Layer] {4}
1404 [end] 1394 [end]
1405.fi 1395.fi
1406.RE 1396.RE
1407Parameters in the `apps\' file are case\-sensitive\. Application names are taken from the first X window WM_CLASS attribute by default (WM_NAME = title, WM_WINDOW_ROLE = role)\. You can see this attribute by using the xprop command\. Take care when using regular expressions\. If you are not familiar with regular expressions you can disable this feature by specifying \-\-disable\-regexp during configure\. Plain strings will then be matched\.
1408.sp
1409.SH "THE SLIT" 1397.SH "THE SLIT"
1410The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\. 1398The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\.
1411.sp 1399.sp
diff --git a/src/ClientPattern.hh b/src/ClientPattern.hh
index 611adeb..4e25cb5 100644
--- a/src/ClientPattern.hh
+++ b/src/ClientPattern.hh
@@ -74,6 +74,8 @@ public:
74 bool addTerm(const std::string &str, WinProperty prop, bool negate = false); 74 bool addTerm(const std::string &str, WinProperty prop, bool negate = false);
75 75
76 void addMatch() { ++m_nummatches; } 76 void addMatch() { ++m_nummatches; }
77 void removeMatch() { --m_nummatches; }
78 void resetMatches() { m_nummatches = 0; }
77 79
78 // whether this pattern has identical matching criteria 80 // whether this pattern has identical matching criteria
79 bool operator ==(const ClientPattern &pat) const; 81 bool operator ==(const ClientPattern &pat) const;
diff --git a/src/FocusableList.cc b/src/FocusableList.cc
index d15e10a..98492b8 100644
--- a/src/FocusableList.cc
+++ b/src/FocusableList.cc
@@ -156,10 +156,12 @@ void FocusableList::checkUpdate(Focusable &win) {
156 if (contains(win)) { 156 if (contains(win)) {
157 if (!m_pat->match(win)) { 157 if (!m_pat->match(win)) {
158 m_list.remove(&win); 158 m_list.remove(&win);
159 m_pat->removeMatch();
159 m_removesig.notify(&win); 160 m_removesig.notify(&win);
160 } 161 }
161 } else if (m_pat->match(win)) { 162 } else if (m_pat->match(win)) {
162 insertFromParent(win); 163 insertFromParent(win);
164 m_pat->addMatch();
163 m_addsig.notify(&win); 165 m_addsig.notify(&win);
164 } 166 }
165} 167}
@@ -194,9 +196,10 @@ void FocusableList::addMatching() {
194 const Focusables list = m_parent->clientList(); 196 const Focusables list = m_parent->clientList();
195 Focusables::const_iterator it = list.begin(), it_end = list.end(); 197 Focusables::const_iterator it = list.begin(), it_end = list.end();
196 for (; it != it_end; ++it) { 198 for (; it != it_end; ++it) {
197 if (m_pat->match(**it)) 199 if (m_pat->match(**it)) {
198 pushBack(**it); 200 pushBack(**it);
199 else // we still want to watch it, in case it changes to match 201 m_pat->addMatch();
202 } else // we still want to watch it, in case it changes to match
200 attachSignals(**it); 203 attachSignals(**it);
201 } 204 }
202} 205}
@@ -279,6 +282,7 @@ void FocusableList::reset() {
279 detachSignals(*m_list.back()); 282 detachSignals(*m_list.back());
280 m_list.pop_back(); 283 m_list.pop_back();
281 } 284 }
285 m_pat->resetMatches();
282 if (m_parent) 286 if (m_parent)
283 addMatching(); 287 addMatching();
284 m_resetsig.notify(0); 288 m_resetsig.notify(0);
diff --git a/src/Remember.cc b/src/Remember.cc
index 43437f4..a1f5d62 100644
--- a/src/Remember.cc
+++ b/src/Remember.cc
@@ -1373,6 +1373,16 @@ void Remember::updateClientClose(WinClient &winclient) {
1373 checkReload(); // reload if it's changed 1373 checkReload(); // reload if it's changed
1374 Application *app = find(winclient); 1374 Application *app = find(winclient);
1375 1375
1376 if (app) {
1377 Patterns::iterator it = m_pats->begin();
1378 for (; it != m_pats->end(); it++) {
1379 if (it->second == app) {
1380 it->first->removeMatch();
1381 break;
1382 }
1383 }
1384 }
1385
1376 if (app && (app->save_on_close_remember && app->save_on_close)) { 1386 if (app && (app->save_on_close_remember && app->save_on_close)) {
1377 1387
1378 for (int attrib = 0; attrib < REM_LASTATTRIB; attrib++) { 1388 for (int attrib = 0; attrib < REM_LASTATTRIB; attrib++) {
diff --git a/src/WorkspaceCmd.cc b/src/WorkspaceCmd.cc
index 592b34b..41c7832 100644
--- a/src/WorkspaceCmd.cc
+++ b/src/WorkspaceCmd.cc
@@ -69,8 +69,7 @@ FbTk::Command<void> *WindowListCmd::parse(const string &command, const string &a
69 if (tokens.size() > 1) { 69 if (tokens.size() > 1) {
70 FocusableList::parseArgs(tokens[1], opts, pat); 70 FocusableList::parseArgs(tokens[1], opts, pat);
71 71
72 filter = FbTk::CommandParser<bool>::instance().parse(pat, 72 filter = FbTk::CommandParser<bool>::instance().parse(pat, trusted);
73 trusted);
74 } 73 }
75 74
76 return new WindowListCmd(FbTk::RefCount<FbTk::Command<void> >(cmd), opts, 75 return new WindowListCmd(FbTk::RefCount<FbTk::Command<void> >(cmd), opts,