2017-01-10 11:34:48 -05:00
|
|
|
# Theme format 3.0
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Rofi is now at the 3rd version of it theming format. Where previous formats was
|
|
|
|
a basic version with an extension. This format is a full rewrite. Internally in
|
|
|
|
**rofi** the way the interface is build up is changed in the past releases.
|
|
|
|
Instead of having widgets placed on a canvas and moved when needed, widgets are
|
|
|
|
now placed in containers that hierarchically recompute the locations. This
|
|
|
|
change also allowed for a better theming format. The new format is loosely
|
|
|
|
modelled after [css](https://en.wikipedia.org/wiki/Cascading_Style_Sheets).
|
|
|
|
This will hopefully be familiar and make it easier for people to get started
|
|
|
|
with theming.
|
|
|
|
|
|
|
|
This file is organized as follow, first we give the specification of the file
|
|
|
|
format. In the second part we will list the possible options. In the final
|
|
|
|
section a few examples are shown.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
## File Format Specification
|
|
|
|
|
|
|
|
### Encoding
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
The encoding of the file is ascii. Both unix (`\n`) and windows (`\r\n`)
|
|
|
|
newlines format are supported. But unix is preferred.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
### Comments
|
|
|
|
|
|
|
|
C and C++ file comments are support.
|
|
|
|
|
|
|
|
* Anything after `// ` and before a newline is considered a comment.
|
2017-01-16 02:41:17 -05:00
|
|
|
* Everything between `/*` and `*/` is a comment.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Comments can be nested and the C++ comments inline.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
The following is valid:
|
|
|
|
```css
|
2017-01-10 12:32:59 -05:00
|
|
|
// Magic comment.
|
2017-01-10 11:34:48 -05:00
|
|
|
property: /* comment */ value;
|
|
|
|
```
|
|
|
|
|
|
|
|
However this is not:
|
|
|
|
```css
|
|
|
|
prop/*comment*/erty: value;
|
|
|
|
```
|
|
|
|
|
|
|
|
### White space
|
|
|
|
|
|
|
|
White space and newlines, like comments, are ignored by the parser.
|
|
|
|
|
|
|
|
This:
|
|
|
|
|
|
|
|
```css
|
|
|
|
property: name;
|
|
|
|
```
|
|
|
|
|
|
|
|
Is identical to:
|
|
|
|
|
|
|
|
```css
|
2017-01-18 03:43:44 -05:00
|
|
|
property :
|
2017-01-10 11:34:48 -05:00
|
|
|
name
|
|
|
|
|
|
|
|
;
|
|
|
|
```
|
|
|
|
|
2017-01-16 02:41:17 -05:00
|
|
|
### File extension
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
The preferred file extension for the new theme format is **rasi**. This is an
|
|
|
|
abbreviation for **r**ofi **a**advanced **s**tyle **i**nformation (Or the nick
|
|
|
|
of the user that helped form the new specification).
|
2017-01-16 02:41:17 -05:00
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
### Basic Structure
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
At the top level of the file there sections.
|
|
|
|
There exist two type of sections:
|
|
|
|
* Global properties section.
|
|
|
|
* Element theme section.
|
|
|
|
|
|
|
|
The *global properties section* should always be the first section, it is
|
|
|
|
followed by one or more *element theme sections*. All sections are optional.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
```
|
|
|
|
/* Global properties section */
|
|
|
|
* {
|
2017-01-18 03:43:44 -05:00
|
|
|
// list of properties
|
2017-01-10 11:34:48 -05:00
|
|
|
}
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
/* Element theme section. */
|
2017-01-10 11:34:48 -05:00
|
|
|
#{element path} {
|
2017-01-18 03:43:44 -05:00
|
|
|
// list of properties
|
|
|
|
}
|
|
|
|
#{elements... } {
|
|
|
|
// list of properties
|
2017-01-10 11:34:48 -05:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Global properties section
|
|
|
|
|
|
|
|
Each theme has one, optional, global properties list.
|
|
|
|
If present, the global properties section has the be the first section in the file.
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
The global properties section is special, as the properties here denote the
|
|
|
|
defaults for each element. Reference properties (see properties section) can
|
|
|
|
only link to properties in this section.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
The section may only contain a `*` before the brace open..
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
#### Element theme section
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
A theme can have multiple element theme sections.
|
|
|
|
|
|
|
|
The element path can consist of multiple names separated by whitespace or dots.
|
2017-01-10 13:05:24 -05:00
|
|
|
Each element may contain any number of letters, numbers and '-'.
|
2017-01-18 03:43:44 -05:00
|
|
|
The first element should always start with a `#``.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
This is a valid element name:
|
|
|
|
|
|
|
|
```css
|
|
|
|
#window mainbox listview element normal.normal {
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
And is identical to:
|
|
|
|
|
|
|
|
```css
|
|
|
|
#window.mainbox.listview.element normal.normal {
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Each section inherits the properties of it parents. If the property is
|
|
|
|
specified both in the parent, or the global section, as in the child, the
|
|
|
|
childs property has priority.
|
|
|
|
So `#window mainbox` will contain all properties of `#window` and `#window
|
|
|
|
mainbox`.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
In the following example:
|
|
|
|
```css
|
|
|
|
#window {
|
|
|
|
a: 1;
|
|
|
|
b: 2;
|
|
|
|
}
|
|
|
|
#window mainbox {
|
|
|
|
b: 4;
|
|
|
|
c: 8;
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
The element `#window mainbox` will have the following set of properties:
|
|
|
|
|
|
|
|
```css
|
|
|
|
a: 1;
|
|
|
|
b: 4;
|
|
|
|
c: 8;
|
|
|
|
```
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
If multiple sections are defined with the same name, they are merged by the
|
|
|
|
parser. If multiple properties with the same name are defined in one section,
|
|
|
|
the last encountered property is used.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
#### Properties
|
|
|
|
|
|
|
|
The properties in a section consist of:
|
|
|
|
|
|
|
|
```css
|
|
|
|
{identifier}: {value};
|
|
|
|
```
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Both fields are manditory for a property.
|
|
|
|
|
|
|
|
The `identifier` names the property specified. Identifier can consist of any
|
|
|
|
combination of numbers, letters and '-'. It may not contain any whitespace.
|
|
|
|
The structure of the `value` defines the type of the property.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
The current theme format support different type:
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
* a string.
|
2017-01-11 17:19:29 -05:00
|
|
|
* an integer number.
|
|
|
|
* a fractional number.
|
2017-01-10 11:34:48 -05:00
|
|
|
* a boolean value.
|
|
|
|
* a color.
|
|
|
|
* text style.
|
2017-01-18 03:43:44 -05:00
|
|
|
* *line style*.
|
2017-01-10 11:34:48 -05:00
|
|
|
* a distance.
|
|
|
|
* a padding.
|
|
|
|
* a border.
|
|
|
|
* a position.
|
|
|
|
* a reference.
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Some of these types are a combination of other types.
|
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
##### String
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `"[:print:]+"`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
A string is always surrounded by quotes ('"'), between the quotes it can have any printable character.
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
```css
|
|
|
|
font: "Awasome 12";
|
|
|
|
```
|
|
|
|
|
|
|
|
###### Integer
|
|
|
|
|
2017-01-11 17:19:29 -05:00
|
|
|
* Format: `[-+]?[:digit:]+`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
An integer may contain any number.
|
|
|
|
|
|
|
|
For examples:
|
|
|
|
|
|
|
|
```css
|
|
|
|
lines: 12;
|
|
|
|
```
|
|
|
|
|
|
|
|
##### Real
|
|
|
|
|
2017-01-11 17:19:29 -05:00
|
|
|
* Format: `[-+]?[:digit:]+(\.[:digit:]+)?`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
A real is an integer with an optional fraction.
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
```css
|
|
|
|
real: 3.4;
|
|
|
|
```
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
The following is not valid: `.3`, `3.` or scientific notation: `3.4e-3`.
|
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
##### Boolean
|
|
|
|
|
2017-01-10 12:32:59 -05:00
|
|
|
* Format: `(true|false)`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Boolean value is either `true` or `false`. This is case-sensitive.
|
|
|
|
|
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
For example:
|
|
|
|
|
|
|
|
```css
|
|
|
|
dynamic: false;
|
|
|
|
```
|
|
|
|
|
|
|
|
##### Color
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `#{HEX}{6}`
|
|
|
|
* Format: `#{HEX}{8}`
|
|
|
|
* Format: `rgb({INTEGER},{INTEGER},{INTEGER})`
|
|
|
|
* Format: `rgba({INTEGER},{INTEGER},{INTEGER}, {REAL})`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
Where '{HEX}' is a hexidecimal number ('0-9a-f'). The '{INTEGER}' value can be between 0 and 255, the '{Real}' value
|
|
|
|
between 0.0 and 1.0.
|
|
|
|
|
|
|
|
|
|
|
|
The first formats specify the color as RRGGBB (R = red, G = green, B = Blue), the second adds an alpha (A) channel:
|
2017-01-10 13:05:24 -05:00
|
|
|
AARRGGB.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
```css
|
|
|
|
background: #FF0000;
|
|
|
|
foreground: rgba(0,0,1, 0.5);
|
|
|
|
```
|
|
|
|
|
|
|
|
##### Text style
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `(bold|italic|underline|none)`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Text style indicates how the text should be displayed. None indicates no style
|
|
|
|
should be applied.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
##### Line style
|
|
|
|
|
2017-01-10 12:32:59 -05:00
|
|
|
* Format: `(dash|solid)`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
Indicates how a line should be drawn.
|
2017-01-18 03:43:44 -05:00
|
|
|
It currently supports:
|
|
|
|
* `dash`: A dashed line. Where the gap is the same width as the dash.
|
|
|
|
* `solid`: A solid line.
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
##### Distance
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `{Integer}px`
|
|
|
|
* Format: `{Real}em`
|
|
|
|
* Format: `{Real}%`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
A distance can be specified in 3 different units:
|
|
|
|
* `px`: Screen pixels.
|
|
|
|
* `em`: Relative to text width.
|
|
|
|
* `%`: Percentage of the **monitor** size.
|
|
|
|
Distances used in the horizontal direction use the monitor width. Distances in
|
|
|
|
the vertical direction use the monitor height.
|
|
|
|
For example:
|
|
|
|
```css
|
|
|
|
padding: 10%;
|
|
|
|
```
|
|
|
|
On a full-hd (1920x1080) monitor defines a padding of 192 pixels on the left
|
|
|
|
and right side and 108 pixels on the top and bottom.
|
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
##### Padding
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `{Integer}`
|
|
|
|
* Format: `{Distance}`
|
|
|
|
* Format: `{Distance} {Distance}`
|
|
|
|
* Format: `{Distance} {Distance} {Distance}`
|
|
|
|
* Format: `{Distance} {Distance} {Distance} {Distance}`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
If no unit is set, it assumes pixels.
|
|
|
|
|
|
|
|
The different number of fields in the formats are parsed like:
|
|
|
|
* 1 field: `all`
|
|
|
|
* 2 fields: `top&bottom` `left&right`
|
|
|
|
* 3 fields: `top`, `left&right`, `bottom`
|
|
|
|
* 4 fields: `top`, `right`, `bottom`, `left`
|
|
|
|
|
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
###### Border
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `{Integer}`
|
|
|
|
* Format: `{Distance}`
|
|
|
|
* Format: `{Distance} {Distance}`
|
|
|
|
* Format: `{Distance} {Distance} {Distance}`
|
|
|
|
* Format: `{Distance} {Distance} {Distance} {Distance}`
|
|
|
|
* Format: `{Distance} {Line style}`
|
|
|
|
* Format: `{Distance} {Line style} {Distance} {Line style}`
|
|
|
|
* Format: `{Distance} {Line style} {Distance} {Line style} {Distance} {Line style}`
|
|
|
|
* Format: `{Distance} {Line style} {Distance} {Line style} {Distance} {Line style} {Distance} {Line style}`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
Border are identical to padding, except that each distance field has a line
|
|
|
|
style property.
|
|
|
|
|
2017-01-10 11:34:48 -05:00
|
|
|
###### Position
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `(center|east|north|west|northeast|northweast|south|southwest|southeast)`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
###### Reference
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
* Format: `@{PROPERTY NAME}`
|
2017-01-10 11:34:48 -05:00
|
|
|
|
|
|
|
A reference can point to another reference. Currently the maximum number of redirects is 20.
|
|
|
|
|
2017-01-10 12:32:59 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
## Elements Paths
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
Element paths exists of two parts, the first part refers to the actual widget by name.
|
|
|
|
Some widgets have an extra state.
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
For example:
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
```css
|
|
|
|
#window mainbox listview element .selected {
|
|
|
|
}
|
|
|
|
```
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
Here `#window mainbox listview element` is the name of the widget, `selected` is the state of the widget.
|
2016-12-13 12:05:40 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
The difference between dots and spaces is purely cosmetic. These are all the same:
|
|
|
|
```css
|
|
|
|
#window mainbox listview element .selected {
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.selected {
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected {
|
|
|
|
}
|
|
|
|
```
|
2016-12-13 12:05:40 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
### Name
|
|
|
|
|
|
|
|
The current widgets exist in **rofi**:
|
|
|
|
|
|
|
|
* `#window`
|
|
|
|
* `#window.box`: The container holding the window.
|
|
|
|
* `#window.overlay`: The overlay widget.
|
|
|
|
* `#window.mainbox`
|
|
|
|
* `#window.mainbox.box`: The main vertical @box
|
|
|
|
* `#window.mainbox.inputbar`
|
|
|
|
* `#window.mainbox.inputbar.box`: The horizontal @box packing the widgets.
|
|
|
|
* `#window.mainbox.inputbar.case-indicator`: The case/sort indicator @textbox
|
|
|
|
* `#window.mainbox.inputbar.prompt`: The prompt @textbox
|
|
|
|
* `#window.mainbox.inputbar.entry`: The main entry @textbox
|
|
|
|
* `#window.mainbox.listview`
|
|
|
|
* `#window.mainbox.listview.box`: The listview container.
|
|
|
|
* `#window.mainbox.listview.scrollbar`: The listview scrollbar
|
|
|
|
* `#window.mainbox.listview.element`: The entries in the listview
|
|
|
|
* `#window.mainbox.sidebar`
|
|
|
|
* `#window.mainbox.sidebar.box`: The main horizontal @box packing the buttons.
|
|
|
|
* `#window.mainbox.sidebar.button`: The buttons @textbox for each mode.
|
|
|
|
* `#window.mainbox.message`
|
|
|
|
* `#window.mainbox.message.textbox`: The message textbox.
|
|
|
|
* `#window.mainbox.message.box`: The box containing the message.
|
|
|
|
|
2017-01-17 02:42:48 -05:00
|
|
|
Or in a graphical depiction:
|
|
|
|
|
|
|
|
![Structure](structure.svg)
|
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
### State
|
2016-12-13 12:05:40 -05:00
|
|
|
|
|
|
|
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
|
|
|
|
2017-01-05 03:40:10 -05:00
|
|
|
`#window.mainbox.sidebar.button selected.normal { }`
|
2016-12-13 12:10:42 -05:00
|
|
|
|
2017-01-05 03:40:10 -05:00
|
|
|
`#window.mainbox.listview.element selected.urgent { }`
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-05 03:40:10 -05:00
|
|
|
Currently only the entrybox and scrollbar 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
|
|
|
```
|
2017-01-05 03:40:10 -05:00
|
|
|
#name.to.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
|
|
|
|
2017-01-05 03:40:10 -05:00
|
|
|
The scrollbar when drawing uses the `handle` state when drawing the small scrollbar handle.
|
|
|
|
Allowing overriding of color.
|
|
|
|
|
2016-12-13 12:05:40 -05:00
|
|
|
|
2017-01-10 13:05:24 -05:00
|
|
|
### Supported properties
|
2016-12-19 02:10:33 -05:00
|
|
|
|
|
|
|
The following properties are currently supports:
|
|
|
|
|
2017-01-03 08:25:24 -05:00
|
|
|
* all widgets:
|
2017-01-10 13:05:24 -05:00
|
|
|
* padding: padding
|
|
|
|
Padding on the inside of the widget.
|
|
|
|
* margin: padding
|
|
|
|
Margin on the outside of the widget.
|
|
|
|
* border: border
|
|
|
|
Border around the widget (between padding and margin)/
|
2017-02-21 06:46:27 -05:00
|
|
|
* border-radius: padding
|
|
|
|
Sets a radius on the corners of the borders.
|
2017-01-05 03:40:10 -05:00
|
|
|
* background: color
|
2017-01-10 13:05:24 -05:00
|
|
|
Background color.
|
2017-01-05 03:40:10 -05:00
|
|
|
* foreground: color
|
2017-01-10 13:05:24 -05:00
|
|
|
Foreground color.
|
|
|
|
* index: integer (This one does not inherits it value from the parent widget)
|
2017-01-03 08:25:24 -05:00
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
* window:
|
|
|
|
* font: string
|
2016-12-19 11:49:52 -05:00
|
|
|
* transparency: string
|
|
|
|
- real
|
|
|
|
- background
|
|
|
|
- screenshot
|
|
|
|
- Path to png file
|
2017-01-06 13:04:25 -05:00
|
|
|
* position: position
|
2017-01-10 13:05:24 -05:00
|
|
|
The place of the anchor on the monitor.
|
2017-01-06 13:04:25 -05:00
|
|
|
* anchor: anchor
|
2017-01-10 13:05:24 -05:00
|
|
|
The anchor position on the window.
|
|
|
|
* fullscreen: boolean
|
|
|
|
Window is fullscreen.
|
2017-01-11 18:31:42 -05:00
|
|
|
* x-offset: distance
|
|
|
|
* y-offset: distance
|
|
|
|
The offset of the window to the anchor point.
|
|
|
|
Allowing you to push the window left/right/up/down.
|
2017-01-10 13:05:24 -05:00
|
|
|
|
2016-12-19 02:10:33 -05:00
|
|
|
|
|
|
|
* scrollbar
|
|
|
|
* foreground: color
|
2017-01-06 09:36:06 -05:00
|
|
|
* handle-width: distance
|
2017-01-10 13:05:24 -05:00
|
|
|
* handle-color: color
|
2017-01-05 03:40:10 -05:00
|
|
|
* foreground: color
|
2016-12-19 02:10:33 -05:00
|
|
|
|
|
|
|
* box
|
2017-01-05 03:40:10 -05:00
|
|
|
* spacing: distance
|
2016-12-19 02:10:33 -05:00
|
|
|
|
2017-01-05 03:40:10 -05:00
|
|
|
* textbox:
|
2017-01-10 13:05:24 -05:00
|
|
|
* background: color
|
|
|
|
* foreground: color
|
|
|
|
* text: The text color to use (falls back to foreground if not set)
|
2017-01-08 18:09:02 -05:00
|
|
|
* highlight: highlight {color}
|
2016-12-19 02:10:33 -05:00
|
|
|
|
|
|
|
* 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
|
2017-01-05 03:40:10 -05:00
|
|
|
* scrollbar-width: distance
|
2016-12-19 02:10:33 -05:00
|
|
|
* cycle: boolean
|
2017-01-05 03:40:10 -05:00
|
|
|
* spacing: distance
|
2016-12-20 03:17:19 -05:00
|
|
|
|
2017-01-16 02:41:17 -05:00
|
|
|
|
|
|
|
## Examples
|
|
|
|
|
|
|
|
### Arthur
|
|
|
|
|
|
|
|
A simple theme showing basic theming and transparent background:
|
|
|
|
|
2017-01-20 03:40:40 -05:00
|
|
|
![example arthur](example-arthur.png)
|
|
|
|
|
2017-01-16 02:41:17 -05:00
|
|
|
```css
|
|
|
|
* {
|
|
|
|
foreground: #ffeedd;
|
|
|
|
background: rgba(0,0,0,0);
|
|
|
|
dark: #1c1c1c;
|
|
|
|
// Black
|
|
|
|
black: #3d352a;
|
|
|
|
lightblack: #554444;
|
|
|
|
//
|
|
|
|
// Red
|
|
|
|
red: #cd5c5c;
|
|
|
|
lightred: #cc5533;
|
|
|
|
//
|
|
|
|
// Green
|
|
|
|
green: #86af80;
|
|
|
|
lightgreen: #88cc22;
|
|
|
|
//
|
|
|
|
// Yellow
|
|
|
|
yellow: #e8ae5b;
|
|
|
|
lightyellow: #ffa75d;
|
|
|
|
//
|
|
|
|
// Blue
|
|
|
|
blue: #6495ed;
|
|
|
|
lightblue: #87ceeb;
|
|
|
|
//
|
|
|
|
// Magenta
|
|
|
|
magenta: #deb887;
|
|
|
|
lightmagenta: #996600;
|
|
|
|
//
|
|
|
|
// Cyan
|
|
|
|
cyan: #b0c4de;
|
|
|
|
lightcyan: #b0c4de;
|
|
|
|
//
|
|
|
|
// White
|
|
|
|
white: #bbaa99;
|
|
|
|
lightwhite: #ddccbb;
|
|
|
|
//
|
|
|
|
// Bold, Italic, Underline
|
|
|
|
highlight: bold #ffffff;
|
|
|
|
}
|
|
|
|
#window {
|
|
|
|
location: center;
|
|
|
|
anchor: north;
|
|
|
|
y-offset: -5em;
|
|
|
|
}
|
|
|
|
#window box {
|
|
|
|
padding: 10px;
|
|
|
|
border: 1px;
|
|
|
|
foreground: @magenta;
|
|
|
|
background: #cc1c1c1c;
|
|
|
|
}
|
|
|
|
|
|
|
|
#window mainbox inputbar {
|
|
|
|
background: @lightblack;
|
|
|
|
text: @lightgreen;
|
|
|
|
padding: 4px;
|
|
|
|
}
|
|
|
|
#window mainbox inputbar box {
|
|
|
|
border: 0px 0px 2px 0px;
|
|
|
|
}
|
|
|
|
#window mainbox box {
|
|
|
|
spacing: 0.3em;
|
|
|
|
}
|
|
|
|
|
|
|
|
#window mainbox listview {
|
|
|
|
dynamic: false;
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected normal {
|
|
|
|
background: @blue;
|
|
|
|
}
|
|
|
|
#window mainbox listview element normal active {
|
|
|
|
foreground: @lightblue;
|
|
|
|
}
|
|
|
|
#window mainbox listview element normal urgent {
|
|
|
|
foreground: @lightred;
|
|
|
|
}
|
|
|
|
#window mainbox listview element alternate normal {
|
|
|
|
}
|
|
|
|
#window mainbox listview element alternate active {
|
|
|
|
foreground: @lightblue;
|
|
|
|
}
|
|
|
|
#window mainbox listview element alternate urgent {
|
|
|
|
foreground: @lightred;
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected active {
|
|
|
|
background: @lightblue;
|
|
|
|
foreground: @dark;
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected urgent {
|
|
|
|
background: @lightred;
|
|
|
|
foreground: @dark;
|
|
|
|
}
|
|
|
|
#window mainbox listview element normal normal {
|
|
|
|
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Sidebar
|
|
|
|
|
|
|
|
The previous theme modified to behave like a sidebar, positioned on the left of the screen.
|
|
|
|
|
2017-01-20 03:40:40 -05:00
|
|
|
![example sidebar](example-sidebar.png)
|
|
|
|
|
2017-01-16 02:41:17 -05:00
|
|
|
```css
|
|
|
|
* {
|
|
|
|
foreground: #ffeedd;
|
|
|
|
background: rgba(0,0,0,0);
|
|
|
|
dark: #1c1c1c;
|
|
|
|
// Black
|
|
|
|
black: #3d352a;
|
|
|
|
lightblack: #554444;
|
|
|
|
//
|
|
|
|
// Red
|
|
|
|
red: #cd5c5c;
|
|
|
|
lightred: #cc5533;
|
|
|
|
//
|
|
|
|
// Green
|
|
|
|
green: #86af80;
|
|
|
|
lightgreen: #88cc22;
|
|
|
|
//
|
|
|
|
// Yellow
|
|
|
|
yellow: #e8ae5b;
|
|
|
|
lightyellow: #ffa75d;
|
|
|
|
//
|
|
|
|
// Blue
|
|
|
|
blue: #6495ed;
|
|
|
|
lightblue: #87ceeb;
|
|
|
|
//
|
|
|
|
// Magenta
|
|
|
|
magenta: #deb887;
|
|
|
|
lightmagenta: #996600;
|
|
|
|
//
|
|
|
|
// Cyan
|
|
|
|
cyan: #b0c4de;
|
|
|
|
lightcyan: #b0c4de;
|
|
|
|
//
|
|
|
|
// White
|
|
|
|
white: #bbaa99;
|
|
|
|
lightwhite: #ddccbb;
|
|
|
|
//
|
|
|
|
// Bold, Italic, Underline
|
|
|
|
highlight: bold #ffffff;
|
|
|
|
}
|
|
|
|
#window {
|
|
|
|
width: 30em;
|
|
|
|
location: west;
|
|
|
|
anchor: west;
|
|
|
|
}
|
|
|
|
#window box {
|
|
|
|
border: 0px 2px 0px 0px;
|
|
|
|
foreground: @lightwhite;
|
|
|
|
background: #ee1c1c1c;
|
|
|
|
}
|
|
|
|
|
|
|
|
#window mainbox sidebar box {
|
|
|
|
border: 2px 0px 0px 0px;
|
|
|
|
background: @lightblack;
|
|
|
|
padding: 10px;
|
|
|
|
}
|
|
|
|
#window mainbox sidebar selected {
|
|
|
|
foreground: @lightgreen;
|
|
|
|
text: @lightgreen;
|
|
|
|
}
|
|
|
|
#window mainbox inputbar {
|
|
|
|
background: @lightblack;
|
|
|
|
text: @lightgreen;
|
|
|
|
padding: 4px;
|
|
|
|
}
|
|
|
|
#window mainbox inputbar box {
|
|
|
|
border: 0px 0px 2px 0px;
|
|
|
|
}
|
|
|
|
#window mainbox box {
|
|
|
|
spacing: 1em;
|
|
|
|
}
|
|
|
|
#window mainbox listview box {
|
|
|
|
padding: 0em 0.4em 0em 1em;
|
|
|
|
}
|
|
|
|
#window mainbox listview {
|
|
|
|
dynamic: false;
|
|
|
|
lines: 0;
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected normal {
|
|
|
|
background: @blue;
|
|
|
|
}
|
|
|
|
#window mainbox listview element normal active {
|
|
|
|
foreground: @lightblue;
|
|
|
|
}
|
|
|
|
#window mainbox listview element normal urgent {
|
|
|
|
foreground: @lightred;
|
|
|
|
}
|
|
|
|
#window mainbox listview element alternate normal {
|
|
|
|
}
|
|
|
|
#window mainbox listview element alternate active {
|
|
|
|
foreground: @lightblue;
|
|
|
|
}
|
|
|
|
#window mainbox listview element alternate urgent {
|
|
|
|
foreground: @lightred;
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected active {
|
|
|
|
background: @lightblue;
|
|
|
|
foreground: @dark;
|
|
|
|
}
|
|
|
|
#window mainbox listview element selected urgent {
|
|
|
|
background: @lightred;
|
|
|
|
foreground: @dark;
|
|
|
|
}
|
|
|
|
#window mainbox listview element normal normal {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
### Paper Float
|
|
|
|
|
2017-01-18 03:43:44 -05:00
|
|
|
A theme that shows a floating inputbar.
|
2017-01-16 02:41:17 -05:00
|
|
|
|
2017-01-20 03:40:40 -05:00
|
|
|
![example paper float](example-paper-float.png)
|
|
|
|
|
2017-01-16 02:41:17 -05:00
|
|
|
> TODO: cleanup this theme.
|
|
|
|
|
|
|
|
```css
|
|
|
|
|
|
|
|
* {
|
|
|
|
blue: #0000FF;
|
|
|
|
white: #FFFFFF;
|
|
|
|
black: #000000;
|
|
|
|
grey: #eeeeee;
|
|
|
|
|
|
|
|
spacing: 2;
|
|
|
|
background: #00000000;
|
|
|
|
anchor: north;
|
|
|
|
location: center;
|
|
|
|
}
|
|
|
|
#window {
|
|
|
|
transparency: "screenshot";
|
|
|
|
background: #00000000;
|
|
|
|
border: 0;
|
|
|
|
padding: 0% 0% 1em 0%;
|
|
|
|
foreground: #FF444444;
|
|
|
|
x-offset: 0;
|
|
|
|
y-offset: -10%;
|
|
|
|
}
|
|
|
|
#window.mainbox {
|
|
|
|
padding: 0px;
|
|
|
|
}
|
|
|
|
#window.mainbox.box {
|
|
|
|
border: 0;
|
|
|
|
spacing: 1%;
|
|
|
|
}
|
|
|
|
#window.mainbox.message.box {
|
2017-01-18 03:43:44 -05:00
|
|
|
border: 2px;
|
|
|
|
padding: 1em;
|
|
|
|
background: @white;
|
2017-01-16 02:41:17 -05:00
|
|
|
foreground: @back;
|
|
|
|
}
|
|
|
|
#window.mainbox.message.normal {
|
|
|
|
foreground: #FF002B36;
|
|
|
|
padding: 0;
|
|
|
|
border: 0;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview {
|
|
|
|
fixed-height: 1;
|
|
|
|
border: 2px;
|
|
|
|
padding: 1em;
|
|
|
|
reverse: false;
|
|
|
|
|
|
|
|
columns: 1;
|
2017-01-18 03:43:44 -05:00
|
|
|
background: @white;
|
2017-01-16 02:41:17 -05:00
|
|
|
}
|
|
|
|
#window.mainbox.listview.element {
|
|
|
|
border: 0;
|
|
|
|
padding: 2px;
|
|
|
|
highlight: bold ;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.normal.normal {
|
|
|
|
foreground: #FF002B36;
|
|
|
|
background: #00F5F5F5;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.normal.urgent {
|
|
|
|
foreground: #FFD75F00;
|
|
|
|
background: #FFF5F5F5;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.normal.active {
|
|
|
|
foreground: #FF005F87;
|
|
|
|
background: #FFF5F5F5;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.selected.normal {
|
|
|
|
foreground: #FFF5F5F5;
|
|
|
|
background: #FF4271AE;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.selected.urgent {
|
|
|
|
foreground: #FFF5F5F5;
|
|
|
|
background: #FFD75F00;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.selected.active {
|
|
|
|
foreground: #FFF5F5F5;
|
|
|
|
background: #FF005F87;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.alternate.normal {
|
|
|
|
foreground: #FF002B36;
|
|
|
|
background: #FFD0D0D0;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.alternate.urgent {
|
|
|
|
foreground: #FFD75F00;
|
|
|
|
background: #FFD0D0D0;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.element.alternate.active {
|
|
|
|
foreground: #FF005F87;
|
|
|
|
background: #FFD0D0D0;
|
|
|
|
}
|
|
|
|
#window.mainbox.listview.scrollbar {
|
|
|
|
border: 0;
|
|
|
|
padding: 0;
|
|
|
|
}
|
|
|
|
#window.mainbox.inputbar {
|
|
|
|
spacing: 0;
|
|
|
|
}
|
|
|
|
#window.mainbox.inputbar.box {
|
|
|
|
border: 2px;
|
|
|
|
padding: 0.5em 1em;
|
|
|
|
background: @grey;
|
|
|
|
index: 0;
|
|
|
|
}
|
|
|
|
#window.mainbox.inputbar.normal {
|
|
|
|
foreground: #FF002B36;
|
|
|
|
background: #00F5F5F5;
|
|
|
|
}
|
|
|
|
|
|
|
|
#window.mainbox.sidebar.box {
|
|
|
|
border: 2px;
|
|
|
|
padding: 0.5em 1em;
|
|
|
|
background: @grey;
|
|
|
|
index: 10;
|
|
|
|
}
|
|
|
|
#window.mainbox.sidebar.button selected {
|
|
|
|
text: #FF4271AE;
|
|
|
|
}
|
|
|
|
```
|