rofi/doc/themer.md
2016-12-09 19:49:49 +01:00

1.3 KiB

Each widget has:

  • Class: Type of widget.

Example: textbox, scrollbar, separator

Class are prefixed with a @

  • Name: Internal name of the widget.

Sub-widgets are {Parent}.{Child}.

Example: Listview, Listview.Even, Listview.Uneven, Listview.Scrollbar

Names are prefixed with a #

  • State: State of widget

Optional flag(s) indicating state. Multiple flags can be set.

Example: Highlight Active Urgent

States are prefixed with a !

So to set color of Even entry in listview that is highlighted and urgent:

@textbox #Listview.Even !Urgent !Highlight

Or to indicate all textboxes

@textbox !Highlight

Class is manditory, name is optional. Name is split on .s.

Internally:

The theme is represented like a tree:

class --> name --> name --> state -> state

The states are sorted alphabetically

So @textbox #Listview.Even !Urgent !Highlight becomes:

textbox->listview->even -> highlight -> urgent.

When searching for entries the tree is traversed until deepest node is found. Missing states are skipped. Then from there properties are searched going up again.

Properties are in the form of:

name: value Each property ends with ; Each property has a type. (Boolean, Integer, String, Color)

A block is enclosed by {}

@textbox #Listview.Even !Urgent !Highlight {
   padding: 3;
   foreground: #aarrggbb; 
}