rofi/doc/themer.md

130 lines
3 KiB
Markdown
Raw Normal View History

# Basic Organization
2016-12-09 18:49:49 +00:00
Each widget has:
## Class
Class: Type of widget.
2016-12-09 18:49:49 +00:00
Example: textbox, scrollbar, separator
Class are prefixed with a `@`
List of classes in **rofi**:
2016-12-09 18:49:49 +00:00
* @textbox
* @scrollbar
* @window
* @separator
* @listview
* @box
2016-12-09 18:49:49 +00:00
## Name
2016-12-09 18:49:49 +00:00
Name: Internal name of the widget.
2016-12-09 18:49:49 +00:00
Sub-widgets are {Parent}.{Child}.
2016-12-09 18:49:49 +00:00
Example: listview, listview.element, listview.scrollbar
2016-12-09 18:49:49 +00:00
Names are prefixed with a `#`
2016-12-09 18:49:49 +00:00
List of names in **rofi**:
* #window
* #mainbox
* #mainbox.box: The main vertical @box
* #inputbar
* #inputbar.box: The horizontal @box packing the widgets.
* #inputbar.separator: The separator under/above the inputbar.
* #inputbar.case-indicator: The case/sort indicator @textbox
* #inputbar.prompt: The prompt @textbox
* #inputbar.entry: The main entry @textbox
* #listview
* #listview.scrollbar: The listview scrollbar
* #listview.element: The entries in the listview
* #sidebar
* #sidebar.box: The main horizontal @box packing the buttons.
* #sidebar.button: The buttons @textbox for each mode.
* #sidebar.separator: The separator under/above the sidebar.
* #message
* #message.textbox: The message textbox.
* #message.separator: The separator under/above the sidebar.
## State
State: State of widget
2016-12-09 18:49:49 +00:00
Optional flag(s) indicating state.
2016-12-09 18:49:49 +00:00
These are appended after the name or class of the widget.
2016-12-09 18:49:49 +00:00
`@textbox selected.normal { }`
`#listview.element selected.urgent { }`
2016-12-09 18:49:49 +00:00
Currently only the @entrybox has states:
2016-12-09 18:49:49 +00:00
`{visible modifier}.{state}`
2016-12-09 18:49:49 +00:00
Where `visible modifier` can be:
* normal: No modification.
* selected: The entry is selected/highlighted by user.
* alternate: The entry is at an alternating row. (uneven row)
2016-12-09 18:49:49 +00:00
Where `state` is:
* normal: No modification.
* urgent: This entry is marked urgent.
* activE: This entry is marked active.
2016-12-09 18:49:49 +00:00
These can be mixed.
2016-12-09 18:49:49 +00:00
Example:
```
@textbox selected.active {
background: #003642;
foreground: #008ed4;
}
```
2016-12-09 18:49:49 +00:00
Sets all selected textboxes marked active to the given foreground and background color.
2016-12-09 18:49:49 +00:00
# File structure
2016-12-09 18:49:49 +00:00
The file is structured as follows
```
/* Global properties, that apply as default to all widgets. */
{list of properties}
2016-12-09 18:49:49 +00:00
@{class} {optional state} {
{list of properties}
}
@{name}.{name} {optional state} {
{list of properties}
2016-12-09 18:49:49 +00:00
}
```
The global properties has to be at the top of the file, the rest can freeĺy be mixed.
Each property is constructed like:
```
{key} : {value} ;
```
Key is a simple ascii string.
Separated from value by a colon ':';
Value supports the following formats:
* string: `"{string}"`
* integer: `[0-9]+`
* double: `[0-9]+\.[0-9]`
* boolean: `true|false`
* color:
* `#[0-9a-fA-F]{6}`: hexidecimal rgb color.
* `#[0-9a-fA-F]{8}`: hexidecimal argb color.
* `argb:[0-0a-fA-F]{8}`: Old **rofi** argb color style.
* `rgba\([0-9]{1,3},[0-9]{1,3}, [0-9]{1,3}, {double}\)`: css style rgba color.
* `rgb\([0-9]{1,3},[0-9]{1,3}, [0-9]{1,3}\)`: css style rgb color.
Each property is closed by a semi-colon ';';