0
|
1 |
.\" Automatically generated by Pandoc 2.9.2.1
|
|
2 |
.\"
|
|
3 |
.TH "HIKARI" "1" "" "2.2.2" "hikari - Wayland Compositor"
|
|
4 |
.hy
|
|
5 |
.SH NAME
|
|
6 |
.PP
|
|
7 |
\f[B]hikari\f[R] - Wayland Compositor
|
|
8 |
.SH SYNTAX
|
|
9 |
.PP
|
|
10 |
\f[B]hikari\f[R] [-vh] [-a <executable>] [-c <config>]
|
|
11 |
.SH DESCRIPTION
|
|
12 |
.PP
|
|
13 |
\f[B]hikari\f[R] is a stacking Wayland compositor with additional tiling
|
|
14 |
capabilities, it is heavily inspired by the Calm Window manager
|
|
15 |
(cwm(1)).
|
|
16 |
Its core concepts are views, workspaces, sheets and groups.
|
|
17 |
.PP
|
|
18 |
The following options are available:
|
|
19 |
.PP
|
|
20 |
-a \f[I]<executable>\f[R] Specify autostart executable.
|
|
21 |
.PP
|
|
22 |
-c \f[I]<config>\f[R] Specify a configuration file.
|
|
23 |
.PP
|
|
24 |
-h Show this message and quit.
|
|
25 |
.PP
|
|
26 |
-v Show version and quit.
|
|
27 |
.SH CONCEPTS
|
|
28 |
.SS View
|
|
29 |
.PP
|
|
30 |
\f[I]Views\f[R] are basically the windows of a Wayland client.
|
|
31 |
Each \f[I]view\f[R] belongs to at most one sheet and can also belong to
|
|
32 |
at most one group.
|
|
33 |
A \f[I]view\f[R] can be in several states.
|
|
34 |
.IP \[bu] 2
|
|
35 |
\f[B]hidden\f[R]
|
|
36 |
.RS 2
|
|
37 |
.PP
|
|
38 |
\f[I]Hidden\f[R] \f[I]views\f[R] are not displayed on the workspace.
|
|
39 |
Hiding a \f[I]view\f[R] removes this \f[I]view\f[R] from the workspace.
|
|
40 |
.RE
|
|
41 |
.IP \[bu] 2
|
|
42 |
\f[B]tiled\f[R]
|
|
43 |
.RS 2
|
|
44 |
.PP
|
|
45 |
A \f[I]tiled\f[R] \f[I]view\f[R] is part of a layout.
|
|
46 |
They can never be \f[I]floating\f[R] or \f[I]invisible\f[R].
|
|
47 |
.RE
|
|
48 |
.IP \[bu] 2
|
|
49 |
\f[B]floating\f[R]
|
|
50 |
.RS 2
|
|
51 |
.PP
|
|
52 |
\f[I]Floating\f[R] \f[I]views\f[R] can never become part of a layout.
|
|
53 |
The floating state is indicated using a tilde in the sheet indicator.
|
|
54 |
.RE
|
|
55 |
.IP \[bu] 2
|
|
56 |
\f[B]invisible\f[R]
|
|
57 |
.RS 2
|
|
58 |
.PP
|
|
59 |
When a \f[I]view\f[R] is set into \f[I]invisible\f[R] state it will not
|
|
60 |
be displayed when switching to the containing sheet and stay hidden
|
|
61 |
until it is explicitly requested to be shown.
|
|
62 |
This can be used to keep long running \f[I]views\f[R] from cluttering
|
|
63 |
the workspace.
|
|
64 |
An \f[I]invisible\f[R] \f[I]view\f[R] can never be \f[I]tiled\f[R] and
|
|
65 |
are indicated using square brackets in the sheet indicator.
|
|
66 |
.RE
|
|
67 |
.IP \[bu] 2
|
|
68 |
\f[B]maximized\f[R] (horizontal, vertical and full)
|
|
69 |
.RS 2
|
|
70 |
.PP
|
|
71 |
Views with such a state can take up the entire horizontal and or
|
|
72 |
vertical space of a workspace.
|
|
73 |
\f[I]Tiled\f[R] \f[I]views\f[R] can also be maximized.
|
|
74 |
.RE
|
|
75 |
.IP \[bu] 2
|
|
76 |
\f[B]borrowed\f[R]
|
|
77 |
.RS 2
|
|
78 |
.PP
|
|
79 |
Borrowing happens when a workspace contains a \f[I]view\f[R] that view
|
|
80 |
that is not part of the \f[B]current sheet\f[R].
|
|
81 |
These views are called \f[I]borrowed\f[R] views and are indicated by the
|
|
82 |
sheet indicator using the string \[lq]\f[B]x\f[R] \[at]
|
|
83 |
\f[B]y\f[R]\[rq], where \f[B]x\f[R] is the sheet the \f[I]view\f[R] is a
|
|
84 |
member of and \f[B]y\f[R] is the sheet that is currently borrowing the
|
|
85 |
\f[I]view\f[R].
|
|
86 |
.RE
|
|
87 |
.IP \[bu] 2
|
|
88 |
\f[B]public\f[R]
|
|
89 |
.RS 2
|
|
90 |
.PP
|
|
91 |
\f[I]Public\f[R] views are also displayed on the lock screen, in this
|
|
92 |
case they will never accept input.
|
|
93 |
Views that display sensible information should never be marked as
|
|
94 |
\f[I]public\f[R].
|
|
95 |
The public state is indicated using an exclamation mark in the sheet
|
|
96 |
indicator.
|
|
97 |
.RE
|
|
98 |
.SS Workspace
|
|
99 |
.PP
|
|
100 |
A \f[I]workspace\f[R] is the set of views that are currently visible.
|
|
101 |
Unlike in most other Wayland compositors, \f[B]hikari\f[R] only has a
|
|
102 |
single \f[I]workspace\f[R] for each output and we only manipulate its
|
|
103 |
content using actions.
|
|
104 |
While this seems like a superficial distinction it is important to keep
|
|
105 |
in mind for some actions to make sense.
|
|
106 |
When switching to a sheet this sheet becomes the \f[B]workspace
|
|
107 |
sheet\f[R].
|
|
108 |
On startup a \f[I]workspace\f[R] sheet is \f[B]1\f[R].
|
|
109 |
Views on a \f[I]workspace\f[R] are stacked from bottom to top, where the
|
|
110 |
next view is higher up the stack and the previous view is one below.
|
|
111 |
This order can be changed by raising or lowering views individually via
|
|
112 |
actions.
|
|
113 |
Selecting a view via cycling actions automatically raises this view to
|
|
114 |
the top of the stacking order.
|
|
115 |
.PP
|
|
116 |
\f[B]hikari\f[R] provides multiple ways to \f[I]cycle\f[R] the views on
|
|
117 |
a \f[I]workspace\f[R].
|
|
118 |
Cycling is a way to navigate to a view using key bindings.
|
|
119 |
.SS Sheet
|
|
120 |
.PP
|
|
121 |
A \f[I]sheet\f[R] is a collection of views, each view can only be a
|
|
122 |
member of a single \f[I]sheet\f[R].
|
|
123 |
Switching between sheets will replace the current content of the
|
|
124 |
workspace with all the views that are a member of the selected
|
|
125 |
\f[I]sheet\f[R], this \f[I]sheet\f[R] will also become the \f[B]current
|
|
126 |
sheet\f[R].
|
|
127 |
\f[B]hikari\f[R] has 9 general purpose sheets that correspond to the
|
|
128 |
numbers \f[B]1\f[R] to \f[B]9\f[R] and a special purpose \f[I]sheet\f[R]
|
|
129 |
\f[B]0\f[R].
|
|
130 |
Views that are a member of \f[I]sheet\f[R] \f[B]0\f[R] will always be
|
|
131 |
visible but stacked below the views of the selected \f[I]sheet\f[R].
|
|
132 |
A \f[I]sheet\f[R] that contains views is called \f[B]inhabited\f[R].
|
|
133 |
.PP
|
|
134 |
When switching to a different sheet the current \f[B]current sheet\f[R]
|
|
135 |
becomes the \f[B]alternate sheet\f[R].
|
|
136 |
.SS Group
|
|
137 |
.PP
|
|
138 |
\f[I]Groups\f[R] are a bit more fine grained than sheets.
|
|
139 |
Like sheets, \f[I]groups\f[R] are a collection of views.
|
|
140 |
Unlike sheets you can have a arbitrary number of \f[I]groups\f[R] and
|
|
141 |
each \f[I]group\f[R] can have an arbitrary name.
|
|
142 |
Views from one \f[I]group\f[R] can be spread among all available sheets.
|
|
143 |
Some actions act on entire \f[I]groups\f[R] rather than individual
|
|
144 |
views.
|
|
145 |
.SS Layout
|
|
146 |
.PP
|
|
147 |
Each sheet can have at most one \f[I]layout\f[R] for tiling views.
|
|
148 |
Applying a \f[I]layout\f[R] to a sheet introduces an additional ordering
|
|
149 |
for views which is not altered by raising or lowering, which can be used
|
|
150 |
to traverse the \f[I]layout\f[R] in the expected order.
|
|
151 |
Each \f[I]layout\f[R] can be stored in one of the \f[I]layout\f[R]
|
|
152 |
register \f[B]a\f[R] to \f[B]z\f[R].
|
|
153 |
.SS View indicators
|
|
154 |
.PP
|
|
155 |
\f[I]View indicators\f[R] show information about the current view as
|
|
156 |
well as views belonging to the same group.
|
|
157 |
They outline the border of the current view as well as all view borders
|
|
158 |
belonging to the same group (obscured view borders will shine through
|
|
159 |
the obscuring view).
|
|
160 |
The focused view will also display so called \f[B]indicator bars\f[R].
|
|
161 |
Each bar holds some information, like title, sheet information, group
|
|
162 |
and its mark (if one has been set for the view).
|
|
163 |
.SS Marks
|
|
164 |
.PP
|
|
165 |
\f[I]Marks\f[R] can be used to \[lq]speed dial\[rq] views, even if they
|
|
166 |
are on a sheet other than the \f[B]current sheet\f[R] (note: such views
|
|
167 |
will become \f[B]borrowed\f[R] in the process).
|
|
168 |
\f[I]Marks\f[R] are represented by characters from \f[B]a\f[R] to
|
|
169 |
\f[B]z\f[R].
|
|
170 |
When jumping to a \f[I]mark\f[R] the view will be brought forward and
|
|
171 |
focused.
|
|
172 |
If no view is bound to a \f[I]mark\f[R] the user can specify a command
|
|
173 |
that is executed instead.
|
|
174 |
This can be used to start an application that binds itself to this
|
|
175 |
\f[I]mark\f[R].
|
|
176 |
.SS Mode
|
|
177 |
.PP
|
|
178 |
\f[B]hikari\f[R] is a modal Wayland compositor and therefore offers
|
|
179 |
several \f[I]modes\f[R] for actions like changing a views group, mark or
|
|
180 |
sheet as well a jumping to marks or grabbing input events and layout
|
|
181 |
selection.
|
|
182 |
.SH CONFIGURATION
|
|
183 |
.PP
|
|
184 |
\f[B]hikari\f[R] is configured using libucl(3) as a configuration file
|
|
185 |
format.
|
|
186 |
The configuration is located under
|
|
187 |
\f[I]$XDG_CONFIG_HOME/hikari/hikari.conf\f[R].
|
|
188 |
If this file is not found \f[B]hikari\f[R] is going to try
|
|
189 |
\f[I]hikari.conf\f[R] from the install \f[I]etc\f[R] directory.
|
|
190 |
.PP
|
|
191 |
The default configuration is going to use \f[B]$TERMINAL\f[R] as your
|
|
192 |
standard terminal application.
|
|
193 |
.PP
|
|
194 |
On startup \f[B]hikari\f[R] attempts to execute
|
|
195 |
\f[I]\[ti]/.config/hikari/autostart\f[R] to autostart applications.
|
|
196 |
.SH ACTIONS
|
|
197 |
.SS General actions
|
|
198 |
.IP \[bu] 2
|
|
199 |
\f[B]lock\f[R]
|
|
200 |
.RS 2
|
|
201 |
.PP
|
|
202 |
Lock \f[B]hikari\f[R] and turn off all outputs.
|
|
203 |
To unlock you need to enter your password and press enter.
|
|
204 |
Being able to unlock requires \f[I]hikari-unlocker\f[R] to be in the
|
|
205 |
\f[B]PATH\f[R] and running with setuid(2) root privileges (those are
|
|
206 |
required to check if the entered password is correct).
|
|
207 |
\f[I]hikari-unlocker\f[R] also needs pam.conf(5) to be aware of its
|
|
208 |
existence, therefore there must be a \f[I]hikari-unlocker\f[R] service
|
|
209 |
file in \f[I]pam.d\f[R].
|
|
210 |
.PP
|
|
211 |
The lock screen displays all views that are marked as \f[B]public\f[R]
|
|
212 |
which allows applications to provide information to the user when the
|
|
213 |
computer is locked (e.g.\ a clock).
|
|
214 |
.RE
|
|
215 |
.IP \[bu] 2
|
|
216 |
\f[B]quit\f[R]
|
|
217 |
.RS 2
|
|
218 |
.PP
|
|
219 |
Issues a quit operation to all views, allowing them to prompt their
|
|
220 |
shutdown dialog if they have any.
|
|
221 |
Issuing this operation again during shutdown will terminate
|
|
222 |
\f[B]hikari\f[R] right away.
|
|
223 |
.RE
|
|
224 |
.IP \[bu] 2
|
|
225 |
\f[B]reload\f[R]
|
|
226 |
.RS 2
|
|
227 |
.PP
|
|
228 |
Reload and apply the configuration.
|
|
229 |
.RE
|
|
230 |
.SS Group actions
|
|
231 |
.IP \[bu] 2
|
|
232 |
\f[B]group-cycle-[next|prev]\f[R]
|
|
233 |
.RS 2
|
|
234 |
.PP
|
|
235 |
Cycle to the next or previous group according to the stacking order by
|
|
236 |
cycling through the top most view of each group.
|
|
237 |
The \f[I]next\f[R] view is further up the stack and the
|
|
238 |
\f[I]previous\f[R] view is further down the stack.
|
|
239 |
Reaching each end of the stack just wraps around.
|
|
240 |
Once a view is selected it will be raised to the top of the stacking
|
|
241 |
order.
|
|
242 |
Selecting happens by releasing the modifier key.
|
|
243 |
.RE
|
|
244 |
.IP \[bu] 2
|
|
245 |
\f[B]group-cycle-view-[next|prev|first|last]\f[R]
|
|
246 |
.RS 2
|
|
247 |
.PP
|
|
248 |
Cycle through all visible views inside of a group.
|
|
249 |
Once a view is selected it will be raised to the top of the stacking
|
|
250 |
order.
|
|
251 |
Selecting happens by releasing the modifier key.
|
|
252 |
.RE
|
|
253 |
.IP \[bu] 2
|
|
254 |
\f[B]group-hide\f[R]
|
|
255 |
.RS 2
|
|
256 |
.PP
|
|
257 |
Hides all visible views of the group of the focused view.
|
|
258 |
.RE
|
|
259 |
.IP \[bu] 2
|
|
260 |
\f[B]group-lower\f[R]
|
|
261 |
.RS 2
|
|
262 |
.PP
|
|
263 |
Lowers all visible views of the group of the focused view.
|
|
264 |
.RE
|
|
265 |
.IP \[bu] 2
|
|
266 |
\f[B]group-only\f[R]
|
|
267 |
.RS 2
|
|
268 |
.PP
|
|
269 |
Hides all visible views not belonging to the group of the focused view.
|
|
270 |
.RE
|
|
271 |
.IP \[bu] 2
|
|
272 |
\f[B]group-raise\f[R]
|
|
273 |
.RS 2
|
|
274 |
.PP
|
|
275 |
Raises all visible views of the group of the focused view.
|
|
276 |
.RE
|
|
277 |
.SS Layout actions
|
|
278 |
.IP \[bu] 2
|
|
279 |
\f[B]layout-apply-[a-z]\f[R]
|
|
280 |
.RS 2
|
|
281 |
.PP
|
|
282 |
Applies the layout in the according register to the current
|
|
283 |
\f[B]workspace sheet\f[R].
|
|
284 |
If the register happens to be empty this is a no-op.
|
|
285 |
If the view that currently has focus can be tiled and is not borrowed it
|
|
286 |
will get raised to the top of the stack.
|
|
287 |
.RE
|
|
288 |
.IP \[bu] 2
|
|
289 |
\f[B]layout-cycle-view-[next|prev|first|last]\f[R]
|
|
290 |
.RS 2
|
|
291 |
.PP
|
|
292 |
Cycle to the next or previous group according to the layout order.
|
|
293 |
Once a view is selected it will be raised to the top of the stacking
|
|
294 |
order, the layout order will remain unchanged.
|
|
295 |
.RE
|
|
296 |
.IP \[bu] 2
|
|
297 |
\f[B]layout-exchange-view-[next|prev|main]\f[R]
|
|
298 |
.RS 2
|
|
299 |
.PP
|
|
300 |
Swaps the focused view with the next, previous or main view in the
|
|
301 |
layout order.
|
|
302 |
.RE
|
|
303 |
.IP \[bu] 2
|
|
304 |
\f[B]layout-reset\f[R]
|
|
305 |
.RS 2
|
|
306 |
.PP
|
|
307 |
Resets the geometry of all views in the current layout.
|
|
308 |
.RE
|
|
309 |
.IP \[bu] 2
|
|
310 |
\f[B]layout-restack-[append|prepend]\f[R]
|
|
311 |
.RS 2
|
|
312 |
.PP
|
|
313 |
Adds non-floating sheet views to an existing layout without changing
|
|
314 |
layout order of already tiled views.
|
|
315 |
If no layout is present the default layout for the current sheet is
|
|
316 |
applied.
|
|
317 |
.RE
|
|
318 |
.SS Mark actions
|
|
319 |
.IP \[bu] 2
|
|
320 |
\f[B]mark-show-[a-z]\f[R]
|
|
321 |
.RS 2
|
|
322 |
.PP
|
|
323 |
Shows the view bound to the according mark.
|
|
324 |
If no view is bound to the mark an optional command for this mark can be
|
|
325 |
executed, if none is specified this action is a no-op.
|
|
326 |
.RE
|
|
327 |
.IP \[bu] 2
|
|
328 |
\f[B]mark-switch-to-[a-z]\f[R]
|
|
329 |
.RS 2
|
|
330 |
.PP
|
|
331 |
Switches to the workspace containing the view bound to the according
|
|
332 |
mark.
|
|
333 |
If no view is bound to the mark an optional command for this mark can be
|
|
334 |
executed, if none is specified this action is a no-op.
|
|
335 |
.RE
|
|
336 |
.SS Mode actions
|
|
337 |
.IP \[bu] 2
|
|
338 |
\f[B]mode-enter-group-assign\f[R]
|
|
339 |
.RS 2
|
|
340 |
.PP
|
|
341 |
Entering \f[I]group-assign-mode\f[R] allows the user to change the group
|
|
342 |
of the currently focused view.
|
|
343 |
Groups that do no exist yet get created.
|
|
344 |
Groups that become empty get destroyed.
|
|
345 |
.RE
|
|
346 |
.IP \[bu] 2
|
|
347 |
\f[B]mode-enter-input-grab\f[R]
|
|
348 |
.RS 2
|
|
349 |
.PP
|
|
350 |
Redirect all input events directly to the focused view without the
|
|
351 |
compositor interfering.
|
|
352 |
Focus will not leave this view anymore until the mode exits or the view
|
|
353 |
closes.
|
|
354 |
To exit this mode, reissue the same key binding that started this mode.
|
|
355 |
.RE
|
|
356 |
.IP \[bu] 2
|
|
357 |
\f[B]mode-enter-layout\f[R]
|
|
358 |
.RS 2
|
|
359 |
.PP
|
|
360 |
Layout selection awaits one of the layout registers to be selected.
|
|
361 |
Valid registers range from \f[B]a\f[R] to \f[B]z\f[R] and \f[B]0\f[R] to
|
|
362 |
\f[B]9\f[R].
|
|
363 |
\f[I]ESC\f[R] cancels this mode without selecting a layout.
|
|
364 |
If the layout register happens to be empty this action is a no-op.
|
|
365 |
If the view that currently has focus can be tiled and is not borrowed it
|
|
366 |
will get raised to the top of the stack.
|
|
367 |
.RE
|
|
368 |
.IP \[bu] 2
|
|
369 |
\f[B]mode-enter-mark-assign\f[R]
|
|
370 |
.RS 2
|
|
371 |
.PP
|
|
372 |
To change the mark of a view enter mark assign mode and select a mark
|
|
373 |
between \f[B]a\f[R] and \f[B]z\f[R].
|
|
374 |
This mode turns the mark indicator bar into an input field.
|
|
375 |
The selection is finalized by pressing \f[I]Enter\f[R] or canceled by
|
|
376 |
pressing \f[I]ESC\f[R].
|
|
377 |
If a mark has already been taken the conflicting window will be
|
|
378 |
indicated.
|
|
379 |
.RE
|
|
380 |
.IP \[bu] 2
|
|
381 |
\f[B]mode-enter-mark-select\f[R]
|
|
382 |
.RS 2
|
|
383 |
.PP
|
|
384 |
Mark selection allows to bring forward a view bound to a mark by
|
|
385 |
selecting that mark.
|
|
386 |
When entering this mode \f[B]hikari\f[R] awaits the name of the mark to
|
|
387 |
be issued.
|
|
388 |
If that mark is bound to a view that view is shown, in the case that
|
|
389 |
this view is not a member of the \f[B]current sheet\f[R] it is
|
|
390 |
considered \f[B]borrowed\f[R].
|
|
391 |
If no view is bound to this mark and the mark has been configured to
|
|
392 |
execute a command when empty, this command gets executed.
|
|
393 |
.RE
|
|
394 |
.IP \[bu] 2
|
|
395 |
\f[B]mode-enter-mark-switch-select\f[R]
|
|
396 |
.RS 2
|
|
397 |
.PP
|
|
398 |
This action works just like \f[B]mode-enter-mark-select\f[R] with the
|
|
399 |
exception that is switches to the workspace of the bound view.
|
|
400 |
If the mark is not bound it stays on the same workspace.
|
|
401 |
.RE
|
|
402 |
.IP \[bu] 2
|
|
403 |
\f[B]mode-enter-move\f[R]
|
|
404 |
.RS 2
|
|
405 |
.PP
|
|
406 |
Moving around views with a pointer device is what this mode is for.
|
|
407 |
Once entered the pointer will jump to the top left corner of the focused
|
|
408 |
view and start moving the view around with the pointer.
|
|
409 |
When releasing any key this mode is canceled automatically.
|
|
410 |
.RE
|
|
411 |
.IP \[bu] 2
|
|
412 |
\f[B]mode-enter-resize\f[R]
|
|
413 |
.RS 2
|
|
414 |
.PP
|
|
415 |
Resizing around views with a pointer device is what this mode is for.
|
|
416 |
Once entered the pointer will join to the bottom right corner of the
|
|
417 |
focused view and start resizing the view with the pointer.
|
|
418 |
When releasing any key this mode is canceled automatically.
|
|
419 |
.RE
|
|
420 |
.IP \[bu] 2
|
|
421 |
\f[B]mode-enter-sheet-assign\f[R]
|
|
422 |
.RS 2
|
|
423 |
.PP
|
|
424 |
Entering this mode lets the user change the sheet of a view by pressing
|
|
425 |
the number of the target sheet.
|
|
426 |
If multiple outputs are available they can be cycled using
|
|
427 |
\f[I]TAB\f[R].
|
|
428 |
.RE
|
|
429 |
.SS Sheet actions
|
|
430 |
.IP \[bu] 2
|
|
431 |
\f[B]sheet-show-all\f[R]
|
|
432 |
.RS 2
|
|
433 |
.PP
|
|
434 |
Clears the current workspace and populates it with all views that are a
|
|
435 |
member of its current sheet.
|
|
436 |
This includes \f[B]invisible\f[R] views as well.
|
|
437 |
.RE
|
|
438 |
.IP \[bu] 2
|
|
439 |
\f[B]sheet-show-group\f[R]
|
|
440 |
.RS 2
|
|
441 |
.PP
|
|
442 |
Clears the current workspace and populates it with all views that are a
|
|
443 |
member of its current sheet and the group of the focused view.
|
|
444 |
This includes \f[B]invisible\f[R] views as well.
|
|
445 |
.RE
|
|
446 |
.IP \[bu] 2
|
|
447 |
\f[B]sheet-show-invisible\f[R]
|
|
448 |
.RS 2
|
|
449 |
.PP
|
|
450 |
Clears the current workspace and populates it with all
|
|
451 |
\f[B]invisible\f[R] views that are a member of its current sheet.
|
|
452 |
.RE
|
|
453 |
.SS View actions
|
|
454 |
.IP \[bu] 2
|
|
455 |
\f[B]view-cycle-[next|prev]\f[R]
|
|
456 |
.RS 2
|
|
457 |
.PP
|
|
458 |
Cycle through all visible views.
|
|
459 |
The \f[I]next\f[R] view is further up the stack and the
|
|
460 |
\f[I]previous\f[R] view is further down the stack.
|
|
461 |
Reaching each end of the stack just wraps around.
|
|
462 |
Once a view is selected it will be raised to the top of the stacking
|
|
463 |
order.
|
|
464 |
Selecting happens by releasing the modifier key.
|
|
465 |
.RE
|
|
466 |
.IP \[bu] 2
|
|
467 |
\f[B]view-decrease-size-[up|down|left|right]\f[R]
|
|
468 |
.RS 2
|
|
469 |
.PP
|
|
470 |
Decreases the size of the focused view by the amount of pixels set as
|
|
471 |
\f[B]step\f[R] value into the given direction
|
|
472 |
.RE
|
|
473 |
.IP \[bu] 2
|
|
474 |
\f[B]view-hide\f[R]
|
|
475 |
.RS 2
|
|
476 |
.PP
|
|
477 |
Hides the focused view.
|
|
478 |
.RE
|
|
479 |
.IP \[bu] 2
|
|
480 |
\f[B]view-increase-size-[up|down|left|right]\f[R]
|
|
481 |
.RS 2
|
|
482 |
.PP
|
|
483 |
Increases the size of the focused view by the amount of pixels set as
|
|
484 |
\f[B]step\f[R] value into the given direction
|
|
485 |
.RE
|
|
486 |
.IP \[bu] 2
|
|
487 |
\f[B]view-lower\f[R]
|
|
488 |
.RS 2
|
|
489 |
.PP
|
|
490 |
Lowers the focused view to the bottom of the stacking order.
|
|
491 |
.RE
|
|
492 |
.IP \[bu] 2
|
|
493 |
\f[B]view-move-[up|down|left|right]\f[R]
|
|
494 |
.RS 2
|
|
495 |
.PP
|
|
496 |
Moves the focused view \f[B]step\f[R] pixels into the given direction.
|
|
497 |
.RE
|
|
498 |
.IP \[bu] 2
|
|
499 |
\f[B]view-move-[center[|-left|-right]|[bottom|top]-[left|middle|right]]\f[R]
|
|
500 |
.RS 2
|
|
501 |
.PP
|
|
502 |
Moves the focused view to the given position on the output.
|
|
503 |
.RE
|
|
504 |
.IP \[bu] 2
|
|
505 |
\f[B]view-only\f[R]
|
|
506 |
.RS 2
|
|
507 |
.PP
|
|
508 |
Hides every other view except the focused one.
|
|
509 |
.RE
|
|
510 |
.IP \[bu] 2
|
|
511 |
\f[B]view-pin-to-sheet-[0-9|alternate|current]\f[R]
|
|
512 |
.RS 2
|
|
513 |
.PP
|
|
514 |
Pins the focused view to a given sheet.
|
|
515 |
If the sheet is not currently a \f[B]current sheet\f[R] or sheet
|
|
516 |
\f[B]0\f[R] the view becomes hidden.
|
|
517 |
Pinning a view to the \f[B]current sheet\f[R] makes sense for
|
|
518 |
\f[B]borrowed views\f[R] which takes this view from its original view
|
|
519 |
and pin it to the current one.
|
|
520 |
.RE
|
|
521 |
.IP \[bu] 2
|
|
522 |
\f[B]view-quit\f[R]
|
|
523 |
.RS 2
|
|
524 |
.PP
|
|
525 |
Closes the focused view.
|
|
526 |
.RE
|
|
527 |
.IP \[bu] 2
|
|
528 |
\f[B]view-raise\f[R]
|
|
529 |
.RS 2
|
|
530 |
.PP
|
|
531 |
Raises the view to the top of the stacking order.
|
|
532 |
.RE
|
|
533 |
.IP \[bu] 2
|
|
534 |
\f[B]view-reset-geometry\f[R]
|
|
535 |
.RS 2
|
|
536 |
.PP
|
|
537 |
Resetting view geometry brings a view back to its original size and
|
|
538 |
position.
|
|
539 |
This means that maximization will be undone and the view will also be
|
|
540 |
taken out of a layout if it has been a part of one before.
|
|
541 |
.RE
|
|
542 |
.IP \[bu] 2
|
|
543 |
\f[B]view-snap-[up|down|left|right]\f[R]
|
|
544 |
.RS 2
|
|
545 |
.PP
|
|
546 |
Snap the focused view into the specified direction.
|
|
547 |
Views can snap to the edge of the screen as well as to the borders of
|
|
548 |
neighboring views (in this case the \f[B]gap\f[R] setting is respected).
|
|
549 |
.RE
|
|
550 |
.IP \[bu] 2
|
|
551 |
\f[B]view-toggle-floating\f[R]
|
|
552 |
.RS 2
|
|
553 |
.PP
|
|
554 |
Toggles the floating state of the focused view.
|
|
555 |
Floating views can not be part of a layout.
|
|
556 |
If a view that is already tiled is set to floating state it will be
|
|
557 |
taken out of the layout and reset its geometry.
|
|
558 |
.RE
|
|
559 |
.IP \[bu] 2
|
|
560 |
\f[B]view-toggle-invisible\f[R]
|
|
561 |
.RS 2
|
|
562 |
.PP
|
|
563 |
Toggles the invisible state of the focused view.
|
|
564 |
A view in invisible state is not displayed if a user switches to the
|
|
565 |
sheet containing this view.
|
|
566 |
They need to be shown explicitly, either by using marks or by issuing
|
|
567 |
actions showing views in this state.
|
|
568 |
Iconified views can not be part of a layout.
|
|
569 |
If a view that is already tiled is set to invisible state it will be
|
|
570 |
taken out of the layout and reset its geometry.
|
|
571 |
.RE
|
|
572 |
.IP \[bu] 2
|
|
573 |
\f[B]view-toggle-maximize-[full|horizontal|vertical]\f[R]
|
|
574 |
.RS 2
|
|
575 |
.PP
|
|
576 |
Maximizes the focused view in the given direction.
|
|
577 |
Maximization state complement each other so maximizing a view
|
|
578 |
horizontally and then vertically adds up to a full maximization state
|
|
579 |
and so on.
|
|
580 |
.RE
|
|
581 |
.IP \[bu] 2
|
|
582 |
\f[B]view-toggle-public\f[R]
|
|
583 |
.RS 2
|
|
584 |
.PP
|
|
585 |
Toggles the public state of the focused view.
|
|
586 |
Public views are also displayed on the lock screen (note: they do not
|
|
587 |
accept any input when the screen is locked though).
|
|
588 |
These views should only contain information that should be displayed
|
|
589 |
when the screen is locked, such as clocks or the progress of a long
|
|
590 |
running process, they should never contain sensitive information.
|
|
591 |
The public state is indicated in the sheet indicator bar via
|
|
592 |
\f[B]!\f[R].
|
|
593 |
.RE
|
|
594 |
.SS VT actions
|
|
595 |
.IP \[bu] 2
|
|
596 |
\f[B]vt-switch-to-[1-9]\f[R]
|
|
597 |
.RS 2
|
|
598 |
.PP
|
|
599 |
Switches to another virtual terminal.
|
|
600 |
.RE
|
|
601 |
.SS Workspace actions
|
|
602 |
.IP \[bu] 2
|
|
603 |
\f[B]workspace-clear\f[R]
|
|
604 |
.RS 2
|
|
605 |
.PP
|
|
606 |
Clears the current workspace.
|
|
607 |
.RE
|
|
608 |
.IP \[bu] 2
|
|
609 |
\f[B]workspace-cycle-[next|prev]\f[R]
|
|
610 |
.RS 2
|
|
611 |
.PP
|
|
612 |
Cycle through available workspaces selecting the view that had focus
|
|
613 |
last.
|
|
614 |
If that view is no longer visible the first view of the \f[B]current
|
|
615 |
sheet\f[R] of that workspace is selected .
|
|
616 |
In both cases the cursor gets centered on that view.
|
|
617 |
If the \f[B]current sheet\f[R] is empty this moves the cursor into the
|
|
618 |
center of the target workspace.
|
|
619 |
.RE
|
|
620 |
.IP \[bu] 2
|
|
621 |
\f[B]workspace-show-all\f[R]
|
|
622 |
.RS 2
|
|
623 |
.PP
|
|
624 |
Clears the current workspace and populates it with all views.
|
|
625 |
This includes \f[B]invisible\f[R] views.
|
|
626 |
.RE
|
|
627 |
.IP \[bu] 2
|
|
628 |
\f[B]workspace-show-group\f[R]
|
|
629 |
.RS 2
|
|
630 |
.PP
|
|
631 |
Raises the focused view, clears the current workspace and populates it
|
|
632 |
with all views that are a member of the group of the focused view.
|
|
633 |
This includes \f[B]invisible\f[R] views.
|
|
634 |
.RE
|
|
635 |
.IP \[bu] 2
|
|
636 |
\f[B]workspace-show-invisible\f[R]
|
|
637 |
.RS 2
|
|
638 |
.PP
|
|
639 |
Clears the current workspace and populates it with all
|
|
640 |
\f[B]invisible\f[R] views that belong to that workspace.
|
|
641 |
.RE
|
|
642 |
.IP \[bu] 2
|
|
643 |
\f[B]workspace-switch-to-sheet-[0-9|alternate|current]\f[R]
|
|
644 |
.RS 2
|
|
645 |
.PP
|
|
646 |
Clears the current workspace and populates it with all views that are a
|
|
647 |
member of the specified sheet.
|
|
648 |
This action also sets the \f[B]current sheet\f[R] of the workspace to
|
|
649 |
this very sheet.
|
|
650 |
Views that are a member of sheet \f[B]0\f[R] will also be displayed on
|
|
651 |
the bottom of the stacking order.
|
|
652 |
Switching to the current sheet will reset the state of the sheet
|
|
653 |
e.g.\ hiding borrowed views, showing views that have previously been
|
|
654 |
hidden and hiding views that are in invisible state.
|
|
655 |
.RE
|
|
656 |
.IP \[bu] 2
|
|
657 |
\f[B]workspace-switch-to-sheet-[next|prev]-inhabited\f[R]
|
|
658 |
.RS 2
|
|
659 |
.PP
|
|
660 |
Switch to the next or previous sheet (excluding \f[B]00\f[R]) that
|
|
661 |
contains at least one member.
|
|
662 |
If none exists is a no-op.
|
|
663 |
This action also sets the \f[B]current sheet\f[R] of the workspace to
|
|
664 |
this sheet.
|
|
665 |
.RE
|
|
666 |
.SH USER DEFINED ACTIONS
|
|
667 |
.PP
|
|
668 |
Actions can also be user defined, this is done in the \f[I]actions\f[R]
|
|
669 |
section of the configuration file.
|
|
670 |
A user defined action consists of a name and a command that should be
|
|
671 |
run when the action has been issued.
|
|
672 |
.PP
|
|
673 |
To define an action \f[I]action-terminal\f[R] that launches sakura(1)
|
|
674 |
one needs to defined the following.
|
|
675 |
.IP
|
|
676 |
.nf
|
|
677 |
\f[C]
|
|
678 |
terminal = sakura
|
|
679 |
\f[R]
|
|
680 |
.fi
|
|
681 |
.PP
|
|
682 |
Now we can bind the newly defined \f[I]action-terminal\f[R] to a key
|
|
683 |
combination in the \f[I]bindings\f[R] section.
|
|
684 |
.SH BINDINGS
|
|
685 |
.PP
|
|
686 |
Actions can be bound to keys and mouse buttons.
|
|
687 |
The \f[I]bindings\f[R] section in the configuration file is used for
|
|
688 |
this matter.
|
|
689 |
Keys can be specified by using either key symbols or codes.
|
|
690 |
A key combination starts with a string identifying the modifiers for the
|
|
691 |
bindings.
|
|
692 |
There are 5 valid modifiers.
|
|
693 |
A valid modifier string is a combination of the following modifiers.
|
|
694 |
.IP \[bu] 2
|
|
695 |
\f[B]L\f[R] (Logo)
|
|
696 |
.IP \[bu] 2
|
|
697 |
\f[B]S\f[R] (Shift)
|
|
698 |
.IP \[bu] 2
|
|
699 |
\f[B]C\f[R] (Control)
|
|
700 |
.IP \[bu] 2
|
|
701 |
\f[B]A\f[R] (Alt)
|
|
702 |
.IP \[bu] 2
|
|
703 |
\f[B]5\f[R] (AltGR)
|
|
704 |
.PP
|
|
705 |
If we want to omit the modifier for a key binding we signal this by
|
|
706 |
using \[lq]0\[rq] instead of a modifier string.
|
|
707 |
.PP
|
|
708 |
Following the modifier string a key symbol or code can be stated.
|
|
709 |
If we are using a key symbol to identify a key combination we are using
|
|
710 |
\[lq]+\[rq] followed by the symbol in the case of a key code we are
|
|
711 |
using \[lq]-\[rq] followed by the numerical key code.
|
|
712 |
Key symbols and codes can be determined using wev(1).
|
|
713 |
.PP
|
|
714 |
Once a key combination has been identified it can be bound to an action.
|
|
715 |
.IP
|
|
716 |
.nf
|
|
717 |
\f[C]
|
|
718 |
\[dq]LS+a\[dq] = action1 # symbol binding
|
|
719 |
\[dq]LS-38\[dq] = action2 # code binding
|
|
720 |
\f[R]
|
|
721 |
.fi
|
|
722 |
.PP
|
|
723 |
The \f[I]bindings\f[R] section can contain 2 subsections
|
|
724 |
\f[I]keyboard\f[R] and \f[I]mouse\f[R] for keyboard and mouse bindings.
|
|
725 |
.PP
|
|
726 |
Valid values for mouse button names are \f[I]right\f[R],
|
|
727 |
\f[I]middle\f[R], \f[I]left\f[R], \f[I]side\f[R], \f[I]extra\f[R],
|
|
728 |
\f[I]forward\f[R], \f[I]back\f[R] and \f[I]task\f[R].
|
|
729 |
.PP
|
|
730 |
Bindings can have a dedicated \f[I]end\f[R] action that gets triggered
|
|
731 |
whenever a key is released or additional keys are pressed.
|
|
732 |
It ensures that a \f[I]begin\f[R] action definitely is followed by the
|
|
733 |
\f[I]end\f[R] action.
|
|
734 |
.IP
|
|
735 |
.nf
|
|
736 |
\f[C]
|
|
737 |
\[dq]L+t\[dq] = {
|
|
738 |
begin = action-push-to-talk-start
|
|
739 |
end = action-push-to-talk-stop
|
|
740 |
}
|
|
741 |
\f[R]
|
|
742 |
.fi
|
|
743 |
.SH MARK CONFIGURATION
|
|
744 |
.PP
|
|
745 |
Marks can be used to quickly navigate to views.
|
|
746 |
They can also execute commands when they are not currently bound to a
|
|
747 |
view.
|
|
748 |
This functionality can be used to start an application that can then
|
|
749 |
take over that mark using auto configuration.
|
|
750 |
Note that the started application does not automatically take over the
|
|
751 |
mark.
|
|
752 |
.PP
|
|
753 |
To specify commands that are issued on unassigned marks one can specify
|
|
754 |
the commands associated with the mark in the \f[I]marks\f[R] section in
|
|
755 |
the configuration file.
|
|
756 |
.IP
|
|
757 |
.nf
|
|
758 |
\f[C]
|
|
759 |
marks {
|
|
760 |
s = sakura
|
|
761 |
}
|
|
762 |
\f[R]
|
|
763 |
.fi
|
|
764 |
.SH VIEW CONFIGURATION
|
|
765 |
.PP
|
|
766 |
When an application start its views can be automatically configured by
|
|
767 |
\f[B]hikari\f[R].
|
|
768 |
Each view has a property called \f[I]id\f[R], in the \f[I]views\f[R]
|
|
769 |
section this can be used to specify certain properties you want for that
|
|
770 |
view to apply.
|
|
771 |
.IP \[bu] 2
|
|
772 |
\f[B]floating\f[R]
|
|
773 |
.RS 2
|
|
774 |
.PP
|
|
775 |
Takes a boolean to specify the view\[cq]s \f[B]floating\f[R] state on
|
|
776 |
startup.
|
|
777 |
The default value is \f[I]false\f[R].
|
|
778 |
.RE
|
|
779 |
.IP \[bu] 2
|
|
780 |
\f[B]focus\f[R]
|
|
781 |
.RS 2
|
|
782 |
.PP
|
|
783 |
Takes a boolean to specify if the view should automatically grab focus
|
|
784 |
when it appears for the first time.
|
|
785 |
This is useful for views that appear at a specified position.
|
|
786 |
The default value is \f[I]false\f[R].
|
|
787 |
.RE
|
|
788 |
.IP \[bu] 2
|
|
789 |
\f[B]group\f[R]
|
|
790 |
.RS 2
|
|
791 |
.PP
|
|
792 |
Automatically assign this view to a group (if the group does not exist
|
|
793 |
it is created automatically).
|
|
794 |
If no group is specified a group name equal to the view \f[I]id\f[R] is
|
|
795 |
chosen.
|
|
796 |
.RE
|
|
797 |
.IP \[bu] 2
|
|
798 |
\f[B]inherit\f[R]
|
|
799 |
.RS 2
|
|
800 |
.PP
|
|
801 |
Lets the user specify a list of properties which should be inherited to
|
|
802 |
child views (e.g.\ dialogs).
|
|
803 |
To inherit a property just state the name of the property as a string.
|
|
804 |
Additionally use an object to overwrite specific values if they should
|
|
805 |
differ from the parent\[cq]s configuration.
|
|
806 |
Values that are not explicitly inherited resort to their default.
|
|
807 |
If \f[B]inherit\f[R] is not specified the child view is going to use the
|
|
808 |
parent\[cq]s configuration.
|
|
809 |
.RE
|
|
810 |
.IP \[bu] 2
|
|
811 |
\f[B]invisible\f[R]
|
|
812 |
.RS 2
|
|
813 |
.PP
|
|
814 |
Takes a boolean to specify the view\[cq]s \f[B]invisible\f[R] state on
|
|
815 |
startup.
|
|
816 |
The default value is \f[I]false\f[R].
|
|
817 |
.RE
|
|
818 |
.IP \[bu] 2
|
|
819 |
\f[B]mark\f[R]
|
|
820 |
.RS 2
|
|
821 |
.PP
|
|
822 |
Assign a mark to the view.
|
|
823 |
This only takes effect if that mark is not already bound to another view
|
|
824 |
already.
|
|
825 |
.RE
|
|
826 |
.IP \[bu] 2
|
|
827 |
\f[B]position\f[R]
|
|
828 |
.RS 2
|
|
829 |
.PP
|
|
830 |
Positions a newly created view to the given coordinates.
|
|
831 |
\f[B]hikari\f[R] allows two ways to define a view position.
|
|
832 |
One way is to specify absolute position stating the \f[B]x\f[R] and
|
|
833 |
\f[B]y\f[R] coordinates as a object, the other one is by stating them as
|
|
834 |
one of the following options:
|
|
835 |
.IP \[bu] 2
|
|
836 |
\f[I]bottom-left\f[R]
|
|
837 |
.IP \[bu] 2
|
|
838 |
\f[I]bottom-middle\f[R]
|
|
839 |
.IP \[bu] 2
|
|
840 |
\f[I]bottom-right\f[R]
|
|
841 |
.IP \[bu] 2
|
|
842 |
\f[I]center\f[R]
|
|
843 |
.IP \[bu] 2
|
|
844 |
\f[I]center-left\f[R]
|
|
845 |
.IP \[bu] 2
|
|
846 |
\f[I]center-right\f[R]
|
|
847 |
.IP \[bu] 2
|
|
848 |
\f[I]top-left\f[R]
|
|
849 |
.IP \[bu] 2
|
|
850 |
\f[I]top-middle\f[R]
|
|
851 |
.IP \[bu] 2
|
|
852 |
\f[I]top-right\f[R]
|
|
853 |
.PP
|
|
854 |
This allows positioning a view relative to the output.
|
|
855 |
.RE
|
|
856 |
.IP \[bu] 2
|
|
857 |
\f[B]public\f[R]
|
|
858 |
.RS 2
|
|
859 |
.PP
|
|
860 |
Takes a boolean to specify the view\[cq]s \f[B]public\f[R] state on
|
|
861 |
startup.
|
|
862 |
The default value is \f[I]false\f[R].
|
|
863 |
.RE
|
|
864 |
.IP \[bu] 2
|
|
865 |
\f[B]sheet\f[R]
|
|
866 |
.RS 2
|
|
867 |
.PP
|
|
868 |
Takes an integer that references the sheet this view should be assigned
|
|
869 |
to.
|
|
870 |
If the \f[B]current sheet\f[R] is unequal to this sheet or \f[B]0\f[R]
|
|
871 |
this view automatically is considered to be \f[B]borrowed\f[R].
|
|
872 |
.RE
|
|
873 |
.PP
|
|
874 |
To configure views of the \f[B]systat\f[R] \f[I]id\f[R] to become a
|
|
875 |
member of the group \f[I]monitor\f[R] and automatically assign them to
|
|
876 |
sheet \f[B]0\f[R] with a given position and focus grabbing we would do
|
|
877 |
something like this.
|
|
878 |
Child views inherit the \f[B]group\f[R] and \f[B]sheet\f[R] property
|
|
879 |
while overwriting \f[B]floating\f[R] to \f[I]true\f[R], all the other
|
|
880 |
properties are set to their respective default values.
|
|
881 |
.IP
|
|
882 |
.nf
|
|
883 |
\f[C]
|
|
884 |
systat = {
|
|
885 |
group = monitor
|
|
886 |
sheet = 0
|
|
887 |
position = {
|
|
888 |
x = 1429
|
|
889 |
y = 1077
|
|
890 |
}
|
|
891 |
focus = true
|
|
892 |
|
|
893 |
inherit = [ group, sheet, { floating = true } ]
|
|
894 |
}
|
|
895 |
\f[R]
|
|
896 |
.fi
|
|
897 |
.SH LAYOUTS
|
|
898 |
.PP
|
|
899 |
\f[B]hikari\f[R] is not a tiling compositor so naturally some things
|
|
900 |
will behave a bit differently compared to traditional tiling approaches.
|
|
901 |
First and foremost, \f[B]hikari\f[R] tries to minimize operations that
|
|
902 |
will affect a lot of views at the same time e.g.\ opening a new view
|
|
903 |
will not automatically insert a view into an existing layout and resize
|
|
904 |
all of the already tiled views.
|
|
905 |
To insert a view into an existing layout the user has to issue a tiling
|
|
906 |
action.
|
|
907 |
This way opening a new view does not scramble an existing layout and the
|
|
908 |
user can actively decide when to incorporate a view into a layout.
|
|
909 |
.PP
|
|
910 |
A layout is bound to a sheet, each sheet can have at most one layout and
|
|
911 |
laying out a sheet will incorporate all of its views unless they are
|
|
912 |
\f[B]invisible\f[R] or \f[B]floating\f[R].
|
|
913 |
Resetting a layout will reset the geometry of all of the laid out views
|
|
914 |
to its original geometry (also resetting maximization).
|
|
915 |
.PP
|
|
916 |
Configuring layouts happens in the \f[I]layouts\f[R] section in the
|
|
917 |
configuration file.
|
|
918 |
Layouts are assigned to layout registers from \f[B]a\f[R] to \f[B]z\f[R]
|
|
919 |
and special layout registers \f[B]0\f[R] to \f[B]9\f[R] which correspond
|
|
920 |
to default layouts for a respective sheet.
|
|
921 |
A layout itself is a combination of splits and containers with tiling
|
|
922 |
algorithms.
|
|
923 |
.PP
|
|
924 |
Splits are used to subdivide regions of space and containers are used to
|
|
925 |
consume views and layout them according to a specific tiling algorithm.
|
|
926 |
.SS Splits
|
|
927 |
.PP
|
|
928 |
A layout subdivides the screen space using splits.
|
|
929 |
Dividing up the screen space uses a binary space partitioning approach.
|
|
930 |
One can split a region of space horizontally or vertically into to new
|
|
931 |
regions which can contain either another split or a container with a
|
|
932 |
tiling algorithm.
|
|
933 |
.PP
|
|
934 |
To split up the screen vertically into two equally sized section one has
|
|
935 |
to specify when the \f[I]left\f[R] and \f[I]right\f[R] hand side of the
|
|
936 |
split should contain.
|
|
937 |
.IP
|
|
938 |
.nf
|
|
939 |
\f[C]
|
|
940 |
{
|
|
941 |
left = ...
|
|
942 |
right = ...
|
|
943 |
}
|
|
944 |
\f[R]
|
|
945 |
.fi
|
|
946 |
.PP
|
|
947 |
Respectively to split horizontally you have to specify \f[I]top\f[R] and
|
|
948 |
\f[I]bottom\f[R].
|
|
949 |
.PP
|
|
950 |
Notice that the order in which you specify \f[I]left\f[R],
|
|
951 |
\f[I]right\f[R], \f[I]top\f[R] and \f[I]bottom\f[R] is important, since
|
|
952 |
it defined the orientation of the split.
|
|
953 |
The side of the split that gets specified first is the part the gets
|
|
954 |
filled first when tiling a sheet, it becomes the dominant part of the
|
|
955 |
split.
|
|
956 |
.PP
|
|
957 |
Sometimes splitting a region of space should not result in equally sized
|
|
958 |
subdivisions and the dominant part of the split should be scaled up or
|
|
959 |
down.
|
|
960 |
This can be done by specifying the \f[I]scale\f[R] attribute which can
|
|
961 |
vary between \f[B]0.1\f[R] to \f[B]0.9\f[R], if no \f[I]scale\f[R] is
|
|
962 |
specified this value defaults to \f[B]0.5\f[R].
|
|
963 |
.PP
|
|
964 |
To horizontally split a region on space where the top portion of the
|
|
965 |
split should take up 75% would be specified like so:
|
|
966 |
.IP
|
|
967 |
.nf
|
|
968 |
\f[C]
|
|
969 |
{
|
|
970 |
scale = 0.75
|
|
971 |
top = ...
|
|
972 |
bottom = ...
|
|
973 |
}
|
|
974 |
\f[R]
|
|
975 |
.fi
|
|
976 |
.PP
|
|
977 |
Additionally to setting a fixed \f[I]scale\f[R] value, \f[B]hikari\f[R]
|
|
978 |
allows to specify a \f[I]scale\f[R] object with \f[I]min\f[R] and
|
|
979 |
\f[I]max\f[R] values.
|
|
980 |
This is called dynamic scaling, and it uses the size of the first view
|
|
981 |
inside the container to determine the size of the entire container.
|
|
982 |
The \f[I]min\f[R] and \f[I]max\f[R] values are used to specify possible
|
|
983 |
minimum and maximum scale values for the container.
|
|
984 |
Omitting the values for \f[I]min\f[R] or \f[I]max\f[R] sets the former
|
|
985 |
to \f[B]0.1\f[R] and the latter to \f[B]0.9\f[R].
|
|
986 |
.IP
|
|
987 |
.nf
|
|
988 |
\f[C]
|
|
989 |
{
|
|
990 |
scale = {
|
|
991 |
min = 0.5
|
|
992 |
max = 0.75
|
|
993 |
}
|
|
994 |
left = single
|
|
995 |
right = stack
|
|
996 |
}
|
|
997 |
\f[R]
|
|
998 |
.fi
|
|
999 |
.SS Containers
|
|
1000 |
.PP
|
|
1001 |
Containers consume a number of views and arrange them according to a
|
|
1002 |
tiling algorithm.
|
|
1003 |
There are 6 different tiling algorithms that you can assign to a
|
|
1004 |
container.
|
|
1005 |
.IP \[bu] 2
|
|
1006 |
\f[B]empty\f[R]
|
|
1007 |
.RS 2
|
|
1008 |
.PP
|
|
1009 |
This is one of the simplest algorithms, it does not consume any views.
|
|
1010 |
This is used if a user desired to have a container of a layout to remain
|
|
1011 |
empty e.g.
|
|
1012 |
preventing the layout to cover up a portion of the workspace.
|
|
1013 |
.RE
|
|
1014 |
.IP \[bu] 2
|
|
1015 |
\f[B]single\f[R]
|
|
1016 |
.RS 2
|
|
1017 |
.PP
|
|
1018 |
Containers using the \f[B]single\f[R] layout only consume one view which
|
|
1019 |
takes up the entire container.
|
|
1020 |
.RE
|
|
1021 |
.IP \[bu] 2
|
|
1022 |
\f[B]full\f[R]
|
|
1023 |
.RS 2
|
|
1024 |
.PP
|
|
1025 |
Each view inside of a container using this algorithm will take up the
|
|
1026 |
entire size of the container.
|
|
1027 |
All of the views are stacked up on top of each other.
|
|
1028 |
.RE
|
|
1029 |
.IP \[bu] 2
|
|
1030 |
\f[B]stack\f[R]
|
|
1031 |
.RS 2
|
|
1032 |
.PP
|
|
1033 |
The \f[B]stack\f[R] algorithm tries to give every view the container
|
|
1034 |
consumes an equal amount of vertical space (excess space is given to the
|
|
1035 |
first view).
|
|
1036 |
The order in which stacking works is from top to bottom.
|
|
1037 |
.RE
|
|
1038 |
.IP \[bu] 2
|
|
1039 |
\f[B]queue\f[R]
|
|
1040 |
.RS 2
|
|
1041 |
.PP
|
|
1042 |
The \f[B]queue\f[R] algorithm tries to give every view the container
|
|
1043 |
consumes an equal amount of horizontal space (excess space is given to
|
|
1044 |
the first view).
|
|
1045 |
The order in which stacking works is from left to right.
|
|
1046 |
.RE
|
|
1047 |
.IP \[bu] 2
|
|
1048 |
\f[B]grid\f[R]
|
|
1049 |
.RS 2
|
|
1050 |
.PP
|
|
1051 |
A grid tries to give each view the containers consumes an equal amount
|
|
1052 |
of horizontal and vertical space (excess space is given to the first
|
|
1053 |
view, and therefore first row of the grid).
|
|
1054 |
If the amount of views can not be split up into equal rows and column
|
|
1055 |
the last part of the grid will not be filled.
|
|
1056 |
.RE
|
|
1057 |
.PP
|
|
1058 |
The easiest way to define a layout is by simply stating the tiling
|
|
1059 |
algorithm.
|
|
1060 |
Binding a fullscreen layout to the layout register \f[B]f\f[R] can be
|
|
1061 |
trivially achieved.
|
|
1062 |
.IP
|
|
1063 |
.nf
|
|
1064 |
\f[C]
|
|
1065 |
f = full
|
|
1066 |
\f[R]
|
|
1067 |
.fi
|
|
1068 |
.PP
|
|
1069 |
This layout does not subdivide the screen using splits in any way.
|
|
1070 |
The container takes up the entire screen space (respecting gap settings)
|
|
1071 |
and uses the \f[B]full\f[R] algorithm to arrange the views.
|
|
1072 |
.PP
|
|
1073 |
More complex layouts might demand that the user specifies the number of
|
|
1074 |
views that the container may contain up to a maximum.
|
|
1075 |
This can be achieved by specifying a container object.
|
|
1076 |
.PP
|
|
1077 |
To define a \f[B]queue\f[R] container that contains up to 4 views one
|
|
1078 |
would define it like that:
|
|
1079 |
.IP
|
|
1080 |
.nf
|
|
1081 |
\f[C]
|
|
1082 |
{
|
|
1083 |
views = 4
|
|
1084 |
layout = queue
|
|
1085 |
}
|
|
1086 |
\f[R]
|
|
1087 |
.fi
|
|
1088 |
.PP
|
|
1089 |
Just stating the tiling algorithm is a short-hand for a layout object
|
|
1090 |
with where \f[I]views\f[R] is set to 256.
|
|
1091 |
.SH UI CONFIGURATION
|
|
1092 |
.PP
|
|
1093 |
Getting everything to look right is an important aspect of feeling
|
|
1094 |
\[lq]at home\[rq].
|
|
1095 |
\f[B]hikari\f[R] offers a couple of options to tweak visuals to the
|
|
1096 |
users content.
|
|
1097 |
All of these configuration options are part of the \f[I]ui\f[R] section.
|
|
1098 |
.IP \[bu] 2
|
|
1099 |
\f[B]border\f[R]
|
|
1100 |
.RS 2
|
|
1101 |
.PP
|
|
1102 |
Defines the thickness of view borders in pixels.
|
|
1103 |
.RE
|
|
1104 |
.PP
|
|
1105 |
Standard border thickness is set to \f[B]1\f[R].
|
|
1106 |
.IP
|
|
1107 |
.nf
|
|
1108 |
\f[C]
|
|
1109 |
border = 1
|
|
1110 |
\f[R]
|
|
1111 |
.fi
|
|
1112 |
.IP \[bu] 2
|
|
1113 |
\f[B]gap\f[R]
|
|
1114 |
.RS 2
|
|
1115 |
.PP
|
|
1116 |
A gap is some extra space that is left between views when using a layout
|
|
1117 |
or snapping views.
|
|
1118 |
The value also specifies a pixel value.
|
|
1119 |
.RE
|
|
1120 |
.PP
|
|
1121 |
The standard \f[B]gap\f[R] value is 5.
|
|
1122 |
.IP
|
|
1123 |
.nf
|
|
1124 |
\f[C]
|
|
1125 |
gap = 5
|
|
1126 |
\f[R]
|
|
1127 |
.fi
|
|
1128 |
.IP \[bu] 2
|
|
1129 |
\f[B]font\f[R]
|
|
1130 |
.RS 2
|
|
1131 |
.PP
|
|
1132 |
Specifies the font that is used for indicator bars.
|
|
1133 |
.RE
|
|
1134 |
.PP
|
|
1135 |
\f[B]hikari\f[R] uses \f[I]monospace 10\f[R] as its default font
|
|
1136 |
setting.
|
|
1137 |
.IP
|
|
1138 |
.nf
|
|
1139 |
\f[C]
|
|
1140 |
font = \[dq]monospace 10\[dq]
|
|
1141 |
\f[R]
|
|
1142 |
.fi
|
|
1143 |
.IP \[bu] 2
|
|
1144 |
\f[B]step\f[R]
|
|
1145 |
.RS 2
|
|
1146 |
.PP
|
|
1147 |
The step value defines how many pixels move and resize operations should
|
|
1148 |
cover.
|
|
1149 |
.RE
|
|
1150 |
.PP
|
|
1151 |
The standard \f[B]step\f[R] value is 100.
|
|
1152 |
.IP
|
|
1153 |
.nf
|
|
1154 |
\f[C]
|
|
1155 |
step = 100
|
|
1156 |
\f[R]
|
|
1157 |
.fi
|
|
1158 |
.SS Colorschemes
|
|
1159 |
.PP
|
|
1160 |
\f[B]hikari\f[R] uses color to indicate different states of views and
|
|
1161 |
their indicator bars.
|
|
1162 |
By specifying a \f[I]colorscheme\f[R] section the user can control these
|
|
1163 |
colors.
|
|
1164 |
A colorscheme is a number of properties that can be changed
|
|
1165 |
individually.
|
|
1166 |
Colors are specified using hexadecimal RGB values (e.g.\ 0xE6DB74).
|
|
1167 |
.IP \[bu] 2
|
|
1168 |
\f[B]active\f[R]
|
|
1169 |
.RS 2
|
|
1170 |
.PP
|
|
1171 |
Indicates view focus.
|
|
1172 |
.RE
|
|
1173 |
.IP \[bu] 2
|
|
1174 |
\f[B]background\f[R]
|
|
1175 |
.RS 2
|
|
1176 |
.PP
|
|
1177 |
Specifies the background color.
|
|
1178 |
This will be obscured by a wallpaper
|
|
1179 |
.RE
|
|
1180 |
.IP \[bu] 2
|
|
1181 |
\f[B]conflict\f[R]
|
|
1182 |
.RS 2
|
|
1183 |
.PP
|
|
1184 |
Conflicts can happen when the user attempts to overwrite something (e.g.
|
|
1185 |
binding a mark to a view that is already taken up by another view) or
|
|
1186 |
does something illegal (e.g.\ defining a new group with a leading digit
|
|
1187 |
in its name).
|
|
1188 |
.RE
|
|
1189 |
.IP \[bu] 2
|
|
1190 |
\f[B]first\f[R]
|
|
1191 |
.RS 2
|
|
1192 |
.PP
|
|
1193 |
Signals that the indicated view is the topmost view of a group.
|
|
1194 |
.RE
|
|
1195 |
.IP \[bu] 2
|
|
1196 |
\f[B]foreground\f[R]
|
|
1197 |
.RS 2
|
|
1198 |
.PP
|
|
1199 |
Font color for indicator bars.
|
|
1200 |
.RE
|
|
1201 |
.IP \[bu] 2
|
|
1202 |
\f[B]grouped\f[R]
|
|
1203 |
.RS 2
|
|
1204 |
.PP
|
|
1205 |
Views that belong to the same group are indicated using this color.
|
|
1206 |
.RE
|
|
1207 |
.IP \[bu] 2
|
|
1208 |
\f[B]inactive\f[R]
|
|
1209 |
.RS 2
|
|
1210 |
.PP
|
|
1211 |
Indicates that a view does not have focus.
|
|
1212 |
.RE
|
|
1213 |
.IP \[bu] 2
|
|
1214 |
\f[B]insert\f[R]
|
|
1215 |
.RS 2
|
|
1216 |
.PP
|
|
1217 |
Indicates indicator bars that are in insert mode (e.g.\ assigning a view
|
|
1218 |
to a group) or views that have an input grab using
|
|
1219 |
\f[I]mode-enter-input-grab\f[R].
|
|
1220 |
.RE
|
|
1221 |
.IP \[bu] 2
|
|
1222 |
\f[B]selected\f[R]
|
|
1223 |
.RS 2
|
|
1224 |
.PP
|
|
1225 |
This color is used to indicate that a view is selected.
|
|
1226 |
.RE
|
|
1227 |
.PP
|
|
1228 |
These are the default settings for the \f[B]hikari\f[R] colorscheme.
|
|
1229 |
.IP
|
|
1230 |
.nf
|
|
1231 |
\f[C]
|
|
1232 |
colorscheme {
|
|
1233 |
background = 0x282C34
|
|
1234 |
foreground = 0x000000
|
|
1235 |
selected = 0xF5E094
|
|
1236 |
grouped = 0xFDAF53
|
|
1237 |
first = 0xB8E673
|
|
1238 |
conflict = 0xED6B32
|
|
1239 |
insert = 0xE3C3FA
|
|
1240 |
active = 0xFFFFFF
|
|
1241 |
inactive = 0x465457
|
|
1242 |
}
|
|
1243 |
\f[R]
|
|
1244 |
.fi
|
|
1245 |
.SH INPUTS
|
|
1246 |
.PP
|
|
1247 |
The \f[I]inputs\f[R] section is used to configure input devices.
|
|
1248 |
Device names can be determined using libinput(1).
|
|
1249 |
.SS Pointers
|
|
1250 |
.PP
|
|
1251 |
Pointers can be configured in the \f[I]pointers\f[R] subsection.
|
|
1252 |
The following options are available.
|
|
1253 |
.IP \[bu] 2
|
|
1254 |
\f[B]accel\f[R]
|
|
1255 |
.RS 2
|
|
1256 |
.PP
|
|
1257 |
Sets mouse acceleration for the pointer device to a value between
|
|
1258 |
\f[B]-1\f[R] and \f[B]1\f[R].
|
|
1259 |
.RE
|
|
1260 |
.IP \[bu] 2
|
|
1261 |
\f[B]disable-while-typing\f[R]
|
|
1262 |
.RS 2
|
|
1263 |
.PP
|
|
1264 |
Enable or disable \f[I]disable-while-typing\f[R] if available.
|
|
1265 |
This setting expects a boolean value.
|
|
1266 |
.RE
|
|
1267 |
.IP \[bu] 2
|
|
1268 |
\f[B]middle-emulation\f[R]
|
|
1269 |
.RS 2
|
|
1270 |
.PP
|
|
1271 |
Enable or disable middle click emulation if available.
|
|
1272 |
This setting expects a boolean value.
|
|
1273 |
.RE
|
|
1274 |
.IP \[bu] 2
|
|
1275 |
\f[B]natural-scrolling\f[R]
|
|
1276 |
.RS 2
|
|
1277 |
.PP
|
|
1278 |
Enable or disable \f[I]natural-scrolling\f[R] if available.
|
|
1279 |
This setting expects a boolean value.
|
|
1280 |
.RE
|
|
1281 |
.IP \[bu] 2
|
|
1282 |
\f[B]scroll-button\f[R]
|
|
1283 |
.RS 2
|
|
1284 |
.PP
|
|
1285 |
Configures the pointer scroll button.
|
|
1286 |
Valid values are \f[I]right\f[R], \f[I]middle\f[R], \f[I]left\f[R],
|
|
1287 |
\f[I]side\f[R], \f[I]extra\f[R], \f[I]forward\f[R], \f[I]back\f[R] and
|
|
1288 |
\f[I]task\f[R].
|
|
1289 |
.RE
|
|
1290 |
.IP \[bu] 2
|
|
1291 |
\f[B]scroll-method\f[R]
|
|
1292 |
.RS 2
|
|
1293 |
.PP
|
|
1294 |
Sets the pointers scroll method.
|
|
1295 |
Valid values are \f[I]no-scroll\f[R], \f[I]on-button-down\f[R].
|
|
1296 |
.RE
|
|
1297 |
.IP \[bu] 2
|
|
1298 |
\f[B]tap\f[R]
|
|
1299 |
.RS 2
|
|
1300 |
.PP
|
|
1301 |
Enable or disable \f[I]tap\f[R] if available.
|
|
1302 |
This setting expects a boolean value.
|
|
1303 |
.RE
|
|
1304 |
.IP \[bu] 2
|
|
1305 |
\f[B]tap-drag\f[R]
|
|
1306 |
.RS 2
|
|
1307 |
.PP
|
|
1308 |
Enable or disable \f[I]tap-drag\f[R] if available.
|
|
1309 |
This setting expects a boolean value.
|
|
1310 |
.RE
|
|
1311 |
.IP \[bu] 2
|
|
1312 |
\f[B]tap-drag-lock\f[R]
|
|
1313 |
.RS 2
|
|
1314 |
.PP
|
|
1315 |
Enable or disable \f[I]tap-drag-lock\f[R] if available.
|
|
1316 |
This setting expects a boolean value.
|
|
1317 |
.RE
|
|
1318 |
.PP
|
|
1319 |
Configuring the \f[I]System mouse\f[R] input device could look like
|
|
1320 |
this.
|
|
1321 |
.IP
|
|
1322 |
.nf
|
|
1323 |
\f[C]
|
|
1324 |
inputs {
|
|
1325 |
pointers {
|
|
1326 |
\[dq]System mouse\[dq] = {
|
|
1327 |
accel = 1.0
|
|
1328 |
scroll-method = on-button-down
|
|
1329 |
scroll-button = middle
|
|
1330 |
}
|
|
1331 |
}
|
|
1332 |
}
|
|
1333 |
\f[R]
|
|
1334 |
.fi
|
|
1335 |
.PP
|
|
1336 |
A special name \[lq]*\[rq] is used to address all pointers.
|
|
1337 |
Values defined for this pseudo pointer override unconfigured values for
|
|
1338 |
any other pointer.
|
|
1339 |
.SS Keyboards
|
|
1340 |
.PP
|
|
1341 |
\f[C]hikari\f[R] is using \f[C]xkb\f[R] to configure its keyboards via
|
|
1342 |
the \f[I]keyboards\f[R] section.
|
|
1343 |
\f[C]xkb\f[R] rules can be set independently or via a file using the
|
|
1344 |
\f[I]xkb\f[R] attribute.
|
|
1345 |
.PP
|
|
1346 |
To specify rules individually one can use the following options.
|
|
1347 |
Refer to xkeyboard-config(7) for possible settings.
|
|
1348 |
.IP \[bu] 2
|
|
1349 |
\f[B]rules\f[R]
|
|
1350 |
.RS 2
|
|
1351 |
.PP
|
|
1352 |
Specifies the \f[C]xkb\f[R] rules.
|
|
1353 |
The default value is \f[C]evdev\f[R].
|
|
1354 |
.RE
|
|
1355 |
.IP \[bu] 2
|
|
1356 |
\f[B]model\f[R]
|
|
1357 |
.RS 2
|
|
1358 |
.PP
|
|
1359 |
Sets the keyboard model.
|
|
1360 |
.RE
|
|
1361 |
.IP \[bu] 2
|
|
1362 |
\f[B]layout\f[R]
|
|
1363 |
.RS 2
|
|
1364 |
.PP
|
|
1365 |
Sets the keyboard layout.
|
|
1366 |
.RE
|
|
1367 |
.IP \[bu] 2
|
|
1368 |
\f[B]variant\f[R]
|
|
1369 |
.RS 2
|
|
1370 |
.PP
|
|
1371 |
Sets the keyboard variant.
|
|
1372 |
.RE
|
|
1373 |
.IP \[bu] 2
|
|
1374 |
\f[B]options\f[R]
|
|
1375 |
.RS 2
|
|
1376 |
.PP
|
|
1377 |
Sets keyboard options.
|
|
1378 |
.RE
|
|
1379 |
.PP
|
|
1380 |
Additionally \f[B]hikari\f[R] can also configure key repeat using the
|
|
1381 |
following attributes.
|
|
1382 |
.IP \[bu] 2
|
|
1383 |
\f[B]repeat-delay\f[R]
|
|
1384 |
.RS 2
|
|
1385 |
.PP
|
|
1386 |
Takes a positive integer to specify the key repeat delay in
|
|
1387 |
milliseconds.
|
|
1388 |
The default value is 600.
|
|
1389 |
.RE
|
|
1390 |
.IP \[bu] 2
|
|
1391 |
\f[B]repeat-rate\f[R]
|
|
1392 |
.RS 2
|
|
1393 |
.PP
|
|
1394 |
Takes a positive integer to specify the key repeat rate in Hz.
|
|
1395 |
The default value is 25.
|
|
1396 |
.RE
|
|
1397 |
.PP
|
|
1398 |
Configuring the \f[I]AT keyboard\f[R] input device could look like this.
|
|
1399 |
.IP
|
|
1400 |
.nf
|
|
1401 |
\f[C]
|
|
1402 |
inputs {
|
|
1403 |
keyboards {
|
|
1404 |
\[dq]*\[dq] = {
|
|
1405 |
xkb = {
|
|
1406 |
layout = \[dq]de(nodeadkeys)\[dq]
|
|
1407 |
options = \[dq]caps:escape\[dq]
|
|
1408 |
}
|
|
1409 |
repeat-rate = 25
|
|
1410 |
repeat-delay = 600
|
|
1411 |
}
|
|
1412 |
}
|
|
1413 |
}
|
|
1414 |
\f[R]
|
|
1415 |
.fi
|
|
1416 |
.PP
|
|
1417 |
A special name \[lq]*\[rq] is used to address all keyboards.
|
|
1418 |
Values defined for this pseudo keyboard override unconfigured values for
|
|
1419 |
any other pointer.
|
|
1420 |
.PP
|
|
1421 |
Keyboards can also be configured using \f[I]XKB\f[R] environment
|
|
1422 |
variables.
|
|
1423 |
\f[C]hikari\f[R] will automatically fall back to these settings if a
|
|
1424 |
keyboard is not explicitly configured.
|
|
1425 |
.IP \[bu] 2
|
|
1426 |
\f[B]XKB_DEFAULT_LAYOUT\f[R]
|
|
1427 |
.IP \[bu] 2
|
|
1428 |
\f[B]XKB_DEFAULT_MODEL\f[R]
|
|
1429 |
.IP \[bu] 2
|
|
1430 |
\f[B]XKB_DEFAULT_OPTIONS\f[R]
|
|
1431 |
.IP \[bu] 2
|
|
1432 |
\f[B]XKB_DEFAULT_RULES\f[R]
|
|
1433 |
.PP
|
|
1434 |
To specify a layout set \f[B]XKB_DEFAULT_LAYOUT\f[R] to the desired
|
|
1435 |
layout.
|
|
1436 |
This needs to happen before starting \f[B]hikari\f[R].
|
|
1437 |
.IP
|
|
1438 |
.nf
|
|
1439 |
\f[C]
|
|
1440 |
XKB_DEFAULT_LAYOUT \[dq]de(nodeadkeys),de\[dq]
|
|
1441 |
\f[R]
|
|
1442 |
.fi
|
|
1443 |
.SS Switches
|
|
1444 |
.PP
|
|
1445 |
Switches can be configured in the \f[I]switches\f[R] subsection.
|
|
1446 |
A switch just takes an action and functions like a regular key binding
|
|
1447 |
using the name of the switch as an identifier.
|
|
1448 |
The \f[I]begin\f[R] action is triggered when turning the switch on and
|
|
1449 |
\f[I]end\f[R] is triggered when turning it off.
|
|
1450 |
.IP
|
|
1451 |
.nf
|
|
1452 |
\f[C]
|
|
1453 |
inputs {
|
|
1454 |
switches {
|
|
1455 |
\[dq]Control Method Lid Switch\[dq] = lock
|
|
1456 |
}
|
|
1457 |
}
|
|
1458 |
\f[R]
|
|
1459 |
.fi
|
|
1460 |
.SH OUTPUTS
|
|
1461 |
.PP
|
|
1462 |
The \f[I]outputs\f[R] section allows users to define the background and
|
|
1463 |
position for a output using its name.
|
|
1464 |
A special name \[lq]*\[rq] is used to address all outputs.
|
|
1465 |
Values defined for this pseudo output override unconfigured values for
|
|
1466 |
any other output.
|
|
1467 |
.PP
|
|
1468 |
Backgrounds are configured via the \f[I]background\f[R] attribute which
|
|
1469 |
can be either the path to the background image, or an object which
|
|
1470 |
enables the user to define additional attributes for the background
|
|
1471 |
image.
|
|
1472 |
Background file format has to be \f[I]PNG\f[R].
|
|
1473 |
.PP
|
|
1474 |
When defining a \f[I]background\f[R] object the following attributes are
|
|
1475 |
available.
|
|
1476 |
.IP \[bu] 2
|
|
1477 |
\f[B]path\f[R]
|
|
1478 |
.RS 2
|
|
1479 |
.PP
|
|
1480 |
This attribute giving the \f[I]path\f[R] to the wallpaper image file is
|
|
1481 |
mandatory.
|
|
1482 |
.RE
|
|
1483 |
.IP \[bu] 2
|
|
1484 |
\f[B]fit\f[R]
|
|
1485 |
.RS 2
|
|
1486 |
.PP
|
|
1487 |
Specifies how the wallpaper should be displayed.
|
|
1488 |
Available options are \f[I]center\f[R], \f[I]stretch\f[R] and
|
|
1489 |
\f[I]tile\f[R].
|
|
1490 |
\f[I]stretch\f[R] is the default even when specifying the background
|
|
1491 |
image as a string.
|
|
1492 |
.RE
|
|
1493 |
.PP
|
|
1494 |
Configuring output \f[I]eDP-1\f[R] and \f[I]WL-1\f[R] could look like
|
|
1495 |
this.
|
|
1496 |
.IP
|
|
1497 |
.nf
|
|
1498 |
\f[C]
|
|
1499 |
outputs {
|
|
1500 |
\[dq]eDP-1\[dq] = {
|
|
1501 |
background = \[dq]/path/to/wallpaper\[dq]
|
|
1502 |
}
|
|
1503 |
|
|
1504 |
WL-1 = {
|
|
1505 |
background = {
|
|
1506 |
path = \[dq]/path/to/wallpaper\[dq]
|
|
1507 |
fit = center
|
|
1508 |
}
|
|
1509 |
}
|
|
1510 |
}
|
|
1511 |
\f[R]
|
|
1512 |
.fi
|
|
1513 |
.PP
|
|
1514 |
Output position can be given explicitly using the \f[I]position\f[R]
|
|
1515 |
attribute.
|
|
1516 |
If none is given during startup \f[B]hikari\f[R] will automatically
|
|
1517 |
configure the output.
|
|
1518 |
.IP
|
|
1519 |
.nf
|
|
1520 |
\f[C]
|
|
1521 |
\[dq]eDP-1\[dq] = {
|
|
1522 |
position = {
|
|
1523 |
x = 1680
|
|
1524 |
y = 0
|
|
1525 |
}
|
|
1526 |
}
|
|
1527 |
|
|
1528 |
\[dq]HDMI-A-1\[dq] = {
|
|
1529 |
position = {
|
|
1530 |
x = 0
|
|
1531 |
y = 0
|
|
1532 |
}
|
|
1533 |
}
|
|
1534 |
\f[R]
|
|
1535 |
.fi
|