Commit graph

79 commits

Author SHA1 Message Date
Bastien Dejean
3e60b44c29 Only allow null nodes for the PATH descriptor
Fixes #434.
2016-03-27 10:48:57 +02:00
Bastien Dejean
e8aa679cd1 Introduce receptacles
A receptacle is an unfocusable empty leaf node.

Receptacles are used for building a tree without creating windows.

Example:

    bspc node -i
    bspc node @/ -p east -i
    bspc node @/2 -p north -i

    bspc rule -a Abc:abc -o node=@/1
    bspc rule -a Ijk:ijk -o node=@/2/1
    bspc rule -a Xyz:xyz -o node=@/2/2

Fixes #259.
2016-03-26 11:47:17 +01:00
Bastien Dejean
b098530201 Zero-pad printed IDs
It seems that people expect all IDs to have the same length (#361).

And the maximum possible ID is 0x1fffffff (cf. the X11 protocol).
2016-03-23 11:24:47 +01:00
Bastien Dejean
ebad909ed1 Fail verbosely
Along the way, we also fixed the handling of the `*_padding`,
`window_gap` and `border_width` settings. The previous behavior was the
result of a bad decision (9fed780), as a response to #141. Many issues
followed: #143, #158, #260, etc. We now handle those settings as
intuitively as possible.

We also fixed a potential segfault in `cmd_node`, triggered by `bspc
node -d`[sic].

Fixes #402 #252.
2016-03-21 14:28:04 +01:00
Bastien Dejean
1e3b13465b Fix handling of ID/name frictions
It seems that `resource_base_id` isn't the lower bound of the set of
possible IDs.
2016-03-20 10:38:11 +01:00
Bastien Dejean
9ae96ebdcd Add IDs to desktops and monitors
There's no constraints on desktop and monitor names, therefore, using a
desktop or monitor name as descriptor is ambiguous.

We put an end to this ambiguity by introducing desktop and monitor IDs.

`bspc query -{M,D}` now yields IDs instead of names.

Fixes #397.
2016-03-16 15:15:27 +01:00
Bastien Dejean
a0aa6dd1fa Make the window ID printf format consistent
Fixes #361.
2016-01-04 15:17:47 +01:00
Bastien Dejean
dcc13f7e56 Skip unmapped windows in query_pointer
Fixes #353.
2015-12-31 19:08:35 +01:00
Bastien Dejean
2db4613ac2 Restore primary monitor in restore_tree 2015-12-31 12:34:24 +01:00
Bastien Dejean
28e4fe6e9b Start parsing modifiers after the last colon
Fixes #347.
2015-12-26 21:22:24 +01:00
Bastien Dejean
eb07d2fc06 Generalize window commands to nodes 2015-12-22 19:25:45 +01:00
Bastien Dejean
98e30c5fc2 Reject invalid modifiers 2015-11-29 18:57:52 +01:00
Bastien Dejean
8d7850a096 Remove non-significant characters from JSON output 2015-11-28 10:40:30 +01:00
Bastien Dejean
d3166dd399 Add *focused* modifier to desktops and monitors 2015-11-26 20:07:46 +01:00
Bastien Dejean
512e9044e3 Allow modifiers on every selector 2015-11-25 13:59:56 +01:00
Bastien Dejean
f758829169 Regularize the layer modifiers 2015-11-23 10:40:10 +01:00
Bastien Dejean
5e9c8e068f Use JSON as the output format of query -T
It is now easy to access any attribute by piping the output of
`query -T` to a JSON extractor/filter.

E.g.:
	bspc query -T -d DESKTOP_SEL | jq -r .layout

And it also makes `restore -T` more robust.
2015-11-22 14:41:00 +01:00
Bastien Dejean
1482ef007b Fix *[!]occupied* modifier 2015-11-17 11:35:40 +01:00
Bastien Dejean
b18cae7ab4 Use field designators when initializing structures 2015-11-17 11:18:21 +01:00
Bastien Dejean
c493835829 Prevent potential memory leak 2015-11-17 11:13:25 +01:00
Bastien Dejean
26cf449414 Make the modifier notation compact and uniform
We want to avoid irregular notations: STATES and FLAGS should translate
directly into modifiers.
2015-11-17 11:02:06 +01:00
Bastien Dejean
f28f33448f Make a clear distinction between states and flags 2015-11-05 14:00:49 +01:00
Bastien Dejean
26f3f45084 Add extensive documentation for the new modifiers 2015-10-27 21:48:19 +01:00
Bastien Dejean
65bc79f0c0 Add a few selector modifiers 2015-10-27 21:26:09 +01:00
Bastien Dejean
40cdd64a7b Rewrite the stacking engine
Stacking now involves 3 layers: BELOW, NORMAL and ABOVE.

In each layers, floating windows are stacked above tiled windows.

The *stack* function is now extremely simple: it just inserts an item in
a sorted list, relying on *stack_cmp* to compare clients.

Fullscreen windows are no longer special.
2015-10-26 20:56:56 +01:00
Joseph Lansdowne
85f90c51f2 add new selector modifier: unfocused 2015-01-04 19:53:18 +00:00
Bastien Dejean
c49bc92d12 Use generic BSD 2-clause license
Fixes #176
2014-10-22 11:53:03 +02:00
Bastien Dejean
0a462d1246 Check if directional focus fallback matches 2014-07-24 21:52:34 +02:00
Bastien Dejean
4907ddc382 Handle NULL node ref. in node_matches 2014-07-18 18:59:16 +02:00
Bastien Dejean
da38f30c32 Don't return NULL nodes in node_from_desc 2014-03-13 21:57:59 +01:00
Bastien Dejean
da84c486ab Replace deprecated index function
http://pubs.opengroup.org/onlinepubs/009695399/functions/index.html
2014-03-13 21:30:34 +01:00
Bastien Dejean
f98162fc38 Extend directional focusing to nearby monitors
Fixes #121
2014-02-26 20:59:08 +01:00
Bastien Dejean
42a0fdd253 Refactor error reporting
Fixes #123
2014-02-17 11:55:34 +01:00
Bastien Dejean
2c50a15455 Add desktop selector: MONITOR_SEL:^<n> 2014-02-09 10:23:01 +01:00
Bastien Dejean
eabbdd1b4f Reintroduce the *automatic* window modifier 2014-02-03 10:30:41 +01:00
Bastien Dejean
7542b5e6ff Handle NULL nodes in node_matches 2014-02-02 14:36:23 +01:00
Bastien Dejean
7cbcc64e7d Fix *restore* regression introduced by c231e8c
The lines of the output of `query -T` are now indented using tabs.

Hence, `restore_tree`'s *level* variable is now equal to the number of tabs.
2014-01-19 14:58:32 +01:00
Bastien Dejean
b9dcab1900 Remove trailing spaces in headers 2014-01-19 14:41:37 +01:00
Bastien Dejean
c231e8cf41 Indentation: convert spaces to tabs
http://lea.verou.me/2012/01/why-tabs-are-clearly-superior/
2014-01-18 16:30:00 +01:00
Bastien Dejean
edcb1f9aec Show window instance names in the output of query -T 2014-01-04 11:07:20 +01:00
Bastien Dejean
41c91cefa0 Add new desktop selector: focused:MONITOR_SEL 2013-12-31 18:39:47 +01:00
Bastien Dejean
0073eff5dc Simply treat transient windows as floating windows
http://tronche.com/gui/x/icccm/sec-4.html#WM_TRANSIENT_FOR
2013-12-29 19:53:42 +01:00
Bastien Dejean
b972f0abbd Provide padding settings for monitors
If a padding space is requested for a status bar, it concerns the
underlying monitor.
2013-12-28 10:30:49 +01:00
Bastien Dejean
48e0043f84 Implement the pseudo-tiled window state 2013-12-27 14:23:25 +01:00
Bastien Dejean
e0b6cd3cd4 *Frames* are unnecessary
The padding settings are sufficient for this.
2013-12-27 10:43:37 +01:00
Bastien Dejean
471fd2c7fc Turn {top,right,bottom,left}_padding into desktop settings 2013-12-25 10:06:02 +01:00
Bastien Dejean
d5672d09cd Don't crop splitting ratio in query -T 2013-12-16 11:55:44 +01:00
Bastien Dejean
de94ecb267 Add a floating state to desktops
Modifying the floating state of a desktop doesn't change the floating
state of the existing windows.
2013-11-03 23:01:31 +01:00
Bastien Dejean
6829eede5c Don't try to access the focused desktop of NULL 2013-10-29 14:23:58 +01:00
Bastien Dejean
08e1c85ce0 Remove tags
Tags should generalize desktops.

To accomplish this, the main node attributes: (type, ratio) would have
to become a dictionary: ((tf1, (type1, ratio1)), (tf2, (type2, ratio2),
...). (`tf<n>` being a tag field.).
2013-10-19 10:56:34 +02:00