2016-12-19 02:10:33 -05:00
|
|
|
# Basic Organization
|
2016-12-09 13:49:49 -05:00
|
|
|
|
|
|
|
Each widget has:
|
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
## Class
|
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
Class: Type of widget.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
|
|
|
Example: textbox, scrollbar, separator
|
|
|
|
|
|
|
|
Class are prefixed with a `@`
|
|
|
|
|
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
List of classes in **rofi**:
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
* @textbox
|
|
|
|
* @scrollbar
|
|
|
|
* @window
|
|
|
|
* @separator
|
|
|
|
* @listview
|
|
|
|
* @box
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
## Name
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Name: Internal name of the widget.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Sub-widgets are {Parent}.{Child}.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Example: listview, listview.element, listview.scrollbar
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Names are prefixed with a `#`
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
List of names in **rofi**:
|
|
|
|
|
2016-12-20 03:17:19 -05:00
|
|
|
* `#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.
|
2016-12-13 12:05:40 -05:00
|
|
|
|
|
|
|
## State
|
|
|
|
|
|
|
|
State: State of widget
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
Optional flag(s) indicating state.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
These are appended after the name or class of the widget.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
`@textbox selected.normal { }`
|
2016-12-13 12:10:42 -05:00
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
`#listview.element selected.urgent { }`
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Currently only the @entrybox has states:
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
`{visible modifier}.{state}`
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Where `visible modifier` can be:
|
|
|
|
* normal: No modification.
|
|
|
|
* selected: The entry is selected/highlighted by user.
|
2016-12-19 02:10:33 -05:00
|
|
|
* alternate: The entry is at an alternating row. (uneven row)
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Where `state` is:
|
2016-12-13 12:10:42 -05:00
|
|
|
* normal: No modification.
|
|
|
|
* urgent: This entry is marked urgent.
|
|
|
|
* activE: This entry is marked active.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
These can be mixed.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Example:
|
2016-12-13 12:10:42 -05:00
|
|
|
```
|
2016-12-19 02:10:33 -05:00
|
|
|
@textbox selected.active {
|
2016-12-13 12:05:40 -05:00
|
|
|
background: #003642;
|
|
|
|
foreground: #008ed4;
|
|
|
|
}
|
2016-12-13 12:10:42 -05:00
|
|
|
```
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
Sets all selected textboxes marked active to the given foreground and background color.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
# File structure
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:10:42 -05:00
|
|
|
The file is structured as follows
|
|
|
|
|
|
|
|
```
|
2016-12-13 12:05:40 -05:00
|
|
|
/* Global properties, that apply as default to all widgets. */
|
|
|
|
{list of properties}
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
@{class} {optional state} {
|
|
|
|
{list of properties}
|
|
|
|
}
|
|
|
|
@{name}.{name} {optional state} {
|
|
|
|
{list of properties}
|
2016-12-09 13:49:49 -05:00
|
|
|
}
|
2016-12-13 12:10:42 -05:00
|
|
|
```
|
2016-12-13 12:05:40 -05:00
|
|
|
|
2016-12-16 03:28:13 -05:00
|
|
|
The global properties an freeĺy be mixed between entries.
|
2016-12-13 12:20:09 -05:00
|
|
|
|
|
|
|
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`
|
2016-12-19 02:10:33 -05:00
|
|
|
* color:
|
2016-12-13 12:20:09 -05:00
|
|
|
* `#[0-9a-fA-F]{6}`: hexidecimal rgb color.
|
|
|
|
* `#[0-9a-fA-F]{8}`: hexidecimal argb color.
|
2016-12-19 02:10:33 -05:00
|
|
|
* `argb:[0-0a-fA-F]{8}`: Old **rofi** argb color style.
|
2016-12-13 12:20:09 -05:00
|
|
|
* `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.
|
2016-12-13 12:21:31 -05:00
|
|
|
|
|
|
|
Each property is closed by a semi-colon `;`;
|
2016-12-19 02:10:33 -05:00
|
|
|
|
|
|
|
The following properties are currently supports:
|
|
|
|
|
2017-01-03 08:25:24 -05:00
|
|
|
* all widgets:
|
|
|
|
* spacing: distance
|
|
|
|
* padding: distance
|
|
|
|
* padding: distance distance
|
|
|
|
* padding: distance distance distance
|
|
|
|
* padding: distance distance distance distance
|
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
* window:
|
|
|
|
* font: string
|
|
|
|
* background: color
|
|
|
|
* foreground: color
|
|
|
|
* border-width: integer
|
2016-12-19 11:49:52 -05:00
|
|
|
* transparency: string
|
|
|
|
- real
|
|
|
|
- background
|
|
|
|
- screenshot
|
|
|
|
- Path to png file
|
2016-12-19 02:10:33 -05:00
|
|
|
|
|
|
|
* separator:
|
|
|
|
* line-style: string
|
|
|
|
* foreground: color
|
|
|
|
|
|
|
|
* scrollbar
|
|
|
|
* foreground: color
|
|
|
|
|
|
|
|
* box
|
|
|
|
|
|
|
|
* textbox:
|
|
|
|
* background: color
|
|
|
|
* foreground: color
|
|
|
|
|
|
|
|
* listview:
|
|
|
|
* columns: integer
|
|
|
|
* fixed-height: boolean
|
2017-01-03 08:25:24 -05:00
|
|
|
* dynamic: boolean
|
2016-12-19 02:10:33 -05:00
|
|
|
* scrollbar: boolean
|
|
|
|
* scrollbar-width: integer
|
|
|
|
* cycle: boolean
|
2016-12-20 03:17:19 -05:00
|
|
|
|
|
|
|
|
|
|
|
## Resolving properties
|
|
|
|
|
|
|
|
|
|
|
|
Current matching does:
|
|
|
|
|
|
|
|
1. Find exact name match, with exact state match.
|
|
|
|
|
|
|
|
If found return
|
|
|
|
|
|
|
|
1. Find exact class match, with exact state match.
|
|
|
|
|
|
|
|
If found return
|
|
|
|
|
|
|
|
1. Find fuzzy name match, with fuzzy state.
|
|
|
|
|
|
|
|
If found is not root node, return
|
|
|
|
|
|
|
|
1. Find fuzzy class match, with fuzzy state.
|
|
|
|
|
|
|
|
return
|
|
|
|
|