summaryrefslogtreecommitdiffstats
path: root/mkdocs/docs/1.7.1/rofi-theme.5.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'mkdocs/docs/1.7.1/rofi-theme.5.markdown')
-rw-r--r--mkdocs/docs/1.7.1/rofi-theme.5.markdown1198
1 files changed, 1198 insertions, 0 deletions
diff --git a/mkdocs/docs/1.7.1/rofi-theme.5.markdown b/mkdocs/docs/1.7.1/rofi-theme.5.markdown
new file mode 100644
index 00000000..f1822449
--- /dev/null
+++ b/mkdocs/docs/1.7.1/rofi-theme.5.markdown
@@ -0,0 +1,1198 @@
+# ROFI-THEME 5 rofi-theme
+
+## NAME
+
+**rofi-theme** - Rofi theme format files
+
+## DEFAULT THEME LOADING
+
+By default, rofi loads the default theme. This theme is **always** loaded.
+In the default (always loaded) configuration it does:
+
+```css
+@theme "default"
+```
+
+To unload the default theme, and load another theme, add `@theme` to your
+`config.rasi` file.
+
+If you have a theme loaded by `@theme` or use the default theme, you can tweak
+it by adding overriding elements at the end of your `config.rasi` file.
+
+For the difference between `@import` and `@theme` see the `Multiple file
+handling` section in this manpage.
+
+To see the default theme, run the following command:
+
+```bash
+rofi -no-config -dump-theme
+```
+
+## DESCRIPTION
+
+The need for a new theme format was motivated by the fact that the way rofi handled widgets has changed. From a very
+static drawing of lines and text to a nice structured form of packing widgets. This change made it possible to provide a
+more flexible theme framework. The old theme format and config file are not flexible enough to expose these options in a
+user-friendly way. Therefore, a new file format has been created, replacing the old one.
+
+## FORMAT SPECIFICATION
+
+## Encoding
+
+The encoding of the file is utf-8. Both unix (`\n`) and windows (`\r\n`) newlines format are supported. But unix is
+preferred.
+
+## Comments
+
+C and C++ file comments are supported.
+
+* Anything after `// ` and before a newline is considered a comment.
+* Everything between `/*` and `*/` is a comment.
+
+Comments can be nested and the C comments can be inline.
+
+The following is valid:
+
+```css
+// Magic comment.
+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
+ property :
+name
+
+;
+```
+
+## File extension
+
+The preferred file extension for the new theme format is **rasi**. This is an
+abbreviation for **r**ofi **a**dvanced **s**tyle **i**nformation.
+
+## Basic Structure
+
+Each element has a section with defined properties. Global properties can be defined in section `* { }`.
+Sub-section names begin with a hash symbol `#`.
+
+It is advised to define the *global properties section* on top of the file to
+make inheritance of properties clearer.
+
+```css
+/* Global properties section */
+* {
+ // list of properties
+}
+
+/* Element theme section. */
+{element path} {
+ // list of properties
+}
+{elements... } {
+ // list of properties
+}
+```
+
+If there are multiple sections with the same name, they are merged. Duplicate properties are overwritten and the last
+parsed entry kept.
+
+## Global properties section
+
+A theme can have one or more global properties sections. If there is more than one,
+they will be merged.
+
+The global properties section denotes the defaults for each element.
+Each property of this section can be referenced with `@{identifier}`
+(See Properties section)
+
+A global properties section is indicated with a `*` as element path.
+
+## Element theme section
+
+A theme can have multiple element theme sections.
+
+The element path can consist of multiple names separated by whitespace or dots.
+Each element may contain any number of letters, numbers and `-`'s.
+The first element in the element path should always start with a `#`.
+Multiple elements can be specified by a `,`.
+
+This is a valid element name:
+
+```css
+element normal.normal {
+ background-color: blue;
+}
+button {
+ background-color: blue;
+}
+```
+
+And is identical to:
+
+```css
+element normal normal, button {
+ background-color: blue;
+}
+```
+
+Each section inherits the global properties. Properties can be explicitly inherited from their parent with the
+`inherit` keyword.
+In the following example:
+
+```css
+window {
+ a: 1;
+ b: 2;
+ children: [ mainbox ];
+}
+mainbox {
+ a: inherit;
+ b: 4;
+ c: 8;
+}
+```
+
+The element `mainbox` will have the following set of properties (if `mainbox` is a child of `window`):
+
+```css
+a: 1;
+b: 4;
+c: 8;
+```
+
+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.
+
+## Properties Format
+
+The properties in a section consist of:
+
+```css
+{identifier}: {value};
+```
+
+Both fields are mandatory for a property.
+
+The `identifier` names the specified property. Identifiers can consist of any
+combination of numbers, letters and '-'. It must not contain any whitespace.
+The structure of the `value` defines the type of the property. The current
+parser does not define or enforce a certain type of a particular `identifier`.
+When used, values with the wrong type that cannot be converted are ignored.
+
+The current theme format supports different types:
+
+ * a string
+ * an integer number
+ * a fractional number
+ * a boolean value
+ * a color
+ * image
+ * text style
+ * line style
+ * a distance
+ * a padding
+ * a border
+ * a position
+ * a reference
+ * an orientation
+ * a cursor
+ * a list of keywords
+ * an environment variable
+ * Inherit
+
+Some of these types are a combination of other types.
+
+## String
+
+* Format: `"[:print:]+"`
+
+A string is always surrounded by double quotes (`"`). Between the quotes there can be any printable character.
+
+For example:
+
+```css
+font: "Awasome 12";
+```
+
+The string must be valid UTF-8.
+
+## Integer
+
+* Format: `[-+]?[:digit:]+`
+
+An integer may contain any number.
+
+For examples:
+
+```css
+lines: 12;
+```
+
+## Real
+
+* Format: `[-+]?[:digit:]+(\.[:digit:]+)?`
+
+A real is an integer with an optional fraction.
+
+For example:
+
+```css
+real: 3.4;
+```
+
+The following is not valid: `.3`, `3.` or scientific notation: `3.4e-3`.
+
+## Boolean
+
+* Format: `(true|false)`
+
+Boolean value is either `true` or `false`. This is case-sensitive.
+
+
+For example:
+
+```css
+dynamic: false;
+```
+
+## Image
+
+**rofi** support a limited set of background-image formats.
+
+* Format: url("path to image");
+* Format: url("path to image", scale);
+ where scale is: none, both, width, height
+* Format: linear-gradient(stop color,stop1, color, stop2 color, ...);
+* Format: linear-gradient(to direction, stop color,stop1, color, stop2 color, ...);
+ where direction is: top,left,right,bottom.
+* Format: linear-gradient(angle, stop color,stop1, color, stop2 color, ...);
+ Angle in deg,rad,grad (as used in color).
+
+Where the `path` is a string, and `stop` color is of type color.
+
+## Color
+
+**rofi** supports the color formats as specified in the CSS standard (1,2,3 and some of CSS 4)
+
+* Format: `#{HEX}{3}` (rgb)
+* Format: `#{HEX}{4}` (rgba)
+* Format: `#{HEX}{6}` (rrggbb)
+* Format: `#{HEX}{8}` (rrggbbaa)
+* Format: `rgb[a]({INTEGER},{INTEGER},{INTEGER}[, {PERCENTAGE}])`
+* Format: `rgb[a]({INTEGER}%,{INTEGER}%,{INTEGER}%[, {PERCENTAGE}])`
+* Format: `hsl[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])`
+* Format: `hwb[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])`
+* Format: `cmyk( {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE} ])`
+* Format: `{named-color} [ / {PERCENTAGE} ]`
+
+The white-space format proposed in CSS4 is also supported.
+
+The different values are:
+
+ * `{HEX}` is a hexadecimal number ('0-9a-f' case insensitive).
+ * `{INTEGER}` value can be between 0 and 255 or 0-100 when representing percentage.
+ * `{ANGLE}` is the angle on the color wheel, can be in `deg`, `rad`, `grad` or `turn`. When no unit is specified, degrees is assumed.
+ * `{PERCENTAGE}` can be between 0-1.0, or 0%-100%
+ * `{named-color}` is one of the following colors:
+
+ AliceBlue, AntiqueWhite, Aqua, Aquamarine, Azure, Beige, Bisque, Black, BlanchedAlmond, Blue, BlueViolet, Brown,
+ BurlyWood, CadetBlue, Chartreuse, Chocolate, Coral, CornflowerBlue, Cornsilk, Crimson, Cyan, DarkBlue, DarkCyan,
+ DarkGoldenRod, DarkGray, DarkGrey, DarkGreen, DarkKhaki, DarkMagenta, DarkOliveGreen, DarkOrange, DarkOrchid, DarkRed,
+ DarkSalmon, DarkSeaGreen, DarkSlateBlue, DarkSlateGray, DarkSlateGrey, DarkTurquoise, DarkViolet, DeepPink, DeepSkyBlue,
+ DimGray, DimGrey, DodgerBlue, FireBrick, FloralWhite, ForestGreen, Fuchsia, Gainsboro, GhostWhite, Gold, GoldenRod,
+ Gray, Grey, Green, GreenYellow, HoneyDew, HotPink, IndianRed, Indigo, Ivory, Khaki, Lavender, LavenderBlush, LawnGreen,
+ LemonChiffon, LightBlue, LightCoral, LightCyan, LightGoldenRodYellow, LightGray, LightGrey, LightGreen, LightPink,
+ LightSalmon, LightSeaGreen, LightSkyBlue, LightSlateGray, LightSlateGrey, LightSteelBlue, LightYellow, Lime, LimeGreen,
+ Linen, Magenta, Maroon, MediumAquaMarine, MediumBlue, MediumOrchid, MediumPurple, MediumSeaGreen, MediumSlateBlue,
+ MediumSpringGreen, MediumTurquoise, MediumVioletRed, MidnightBlue, MintCream, MistyRose, Moccasin, NavajoWhite, Navy,
+ OldLace, Olive, OliveDrab, Orange, OrangeRed, Orchid, PaleGoldenRod, PaleGreen, PaleTurquoise, PaleVioletRed,
+ PapayaWhip, PeachPuff, Peru, Pink, Plum, PowderBlue, Purple, RebeccaPurple, Red, RosyBrown, RoyalBlue, SaddleBrown,
+ Salmon, SandyBrown, SeaGreen, SeaShell, Sienna, Silver, SkyBlue, SlateBlue, SlateGray, SlateGrey, Snow, SpringGreen,
+ SteelBlue, Tan, Teal, Thistle, Tomato, Turquoise, Violet, Wheat, White, WhiteSmoke, Yellow, YellowGreen,transparent
+
+
+
+For example:
+
+```css
+background-color: #FF0000;
+border-color: rgba(0,0,1, 0.5);
+text-color: SeaGreen;
+```
+or
+
+```css
+background-color: transparent;
+text-color: Black;
+```
+
+## Text style
+
+* Format: `(bold|italic|underline|strikethrough|none)`
+
+Text style indicates how the highlighted text is emphasized. `None` indicates that no emphasis
+should be applied.
+
+ * `bold`: make the text thicker then the surrounding text.
+ * `italic`: put the highlighted text in script type (slanted).
+ * `underline`: put a line under the highlighted text.
+ * `strikethrough`: put a line through the highlighted text.
+
+## Line style
+
+* Format: `(dash|solid)`
+
+Indicates how a line should be drawn.
+It currently supports:
+ * `dash`: a dashed line, where the gap is the same width as the dash
+ * `solid`: a solid line
+
+## Distance
+
+* Format: `{Integer}px`
+* Format: `{Real}em`
+* Format: `{Real}ch`
+* Format: `{Real}%`
+* Format: `{Integer}mm`
+
+A distance can be specified in 3 different units:
+
+* `px`: Screen pixels.
+* `em`: Relative to text height.
+* `ch`: Relative to width of a single number.
+* `mm`: Actual size in millimeters (based on dpi).
+* `%`: 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, it defines a padding of 192 pixels on the left
+and right side and 108 pixels on the top and bottom.
+
+### Calculating sizes
+
+Rofi supports some maths in calculating sizes. For this it uses the CSS syntax:
+
+```css
+width: calc( 100% - 37px );
+```
+
+It supports the following operations:
+
+* `+` : Add
+* `-` : Subtract
+* `/` : Divide
+* `*` : Multiply
+* `%` : Multiply
+* `min` : Minimum of l or rvalue;
+* `max` : Maximum of l or rvalue;
+
+It uses the C precedence ordering.
+
+## Padding
+
+* Format: `{Integer}`
+* Format: `{Distance}`
+* Format: `{Distance} {Distance}`
+* Format: `{Distance} {Distance} {Distance}`
+* Format: `{Distance} {Distance} {Distance} {Distance}`
+
+If no unit is specified, pixels are assumed.
+
+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`
+
+
+## Border
+
+* 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}`
+
+Borders are identical to padding, except that each distance field has a line
+style property.
+
+> When no unit is specified, pixels are assumed.
+
+## Position
+
+Indicate a place on the window/monitor.
+
+* Format: `(center|east|north|west|south|north east|north west|south west|south east)`
+
+```
+
+north west | north | north east
+-------------|-------------|------------
+ west | center | east
+-------------|-------------|------------
+south west | south | south east
+```
+
+## Visibility
+
+It is possible to hide widgets:
+
+inputbar {
+ enabled: false;
+}
+
+## Reference
+
+* Format: `@{PROPERTY NAME}`
+
+A reference can point to another reference. Currently, the maximum number of redirects is 20.
+A property always refers to another property. It cannot be used for a subpart of the property.
+For example, this is not valid:
+
+```css
+highlight: bold @pink;
+```
+
+But this is:
+
+```css
+* {
+ myhigh: bold #FAA;
+}
+
+window {
+ highlight: @myhigh;
+}
+```
+
+* Format: `var(PROPERTY NAME, DEFAULT)`
+
+A reference can point to another reference. Currently, the maximum number of redirects is 20.
+A property always refers to another property. It cannot be used for a subpart of the property.
+
+Example:
+
+```css
+window {
+ width: var( width, 30%);
+}
+```
+
+If the property `width` is set globally (`*{}`) that value is used, if the property
+`width` is not set, the default value is used.
+
+
+## Orientation
+
+ * Format: `(horizontal|vertical)`
+
+Specify the orientation of the widget.
+
+## Cursor
+
+ * Format: `(default|pointer|text)`
+
+Specify the type of mouse cursor that is set when the mouse pointer is over the widget.
+
+## List of keywords
+
+* Format: `[ keyword, keyword ]`
+
+A list starts with a '[' and ends with a ']'. The entries in the list are comma-separated.
+The `keyword` in the list refers to an widget name.
+
+## Environment variable
+
+* Format: `${:alnum:}`
+
+This will parse the environment variable as the property value. (that then can be any of the above types).
+The environment variable should be an alphanumeric string without white-space.
+
+```css
+* {
+ background-color: ${BG};
+}
+```
+
+* Format: `env(ENVIRONMENT, default)`
+
+This will parse the environment variable as the property value. (that then can be any of the above types).
+The environment variable should be an alphanumeric string without white-space.
+If the environment value is not found, the default value is used.
+
+```css
+window {
+ width: env(WIDTH, 40%);
+}
+```
+
+If environment WIDTH is set, then that value is parsed, otherwise the default value (`40%`).
+
+## Inherit
+
+ * Format: `inherit`
+
+Inherits the property from its parent widget.
+
+```css
+mainbox {
+ border-color: inherit;
+}
+```
+
+
+## ELEMENTS PATHS
+
+Element paths exists of two parts, the first part refers to the actual widget by name.
+Some widgets have an extra state.
+
+For example:
+
+```css
+element selected {
+}
+```
+
+Here `element selected` is the name of the widget, `selected` is the state of the widget.
+
+The difference between dots and spaces is purely cosmetic. These are all the same:
+
+```css
+element .selected {
+
+element.selected {
+}
+element selected {
+}
+```
+
+## SUPPORTED ELEMENT PATH
+
+## Name
+
+The current widgets available in **rofi**:
+
+* `window`
+ * `overlay`: the overlay widget.
+ * `mainbox`: The mainbox box.
+ * `inputbar`: The input bar box.
+ * `box`: the horizontal @box packing the widgets
+ * `case-indicator`: the case/sort indicator @textbox
+ * `prompt`: the prompt @textbox
+ * `entry`: the main entry @textbox
+ * `num-rows`: Shows the total number of rows.
+ * `num-filtered-rows`: Shows the total number of rows after filtering.
+ * `listview`: The listview.
+ * `scrollbar`: the listview scrollbar
+ * `element`: a box in the listview holding the entries
+ * `element-icon`: the widget in the listview's entry showing the (optional) icon
+ * `element-index`: the widget in the listview's entry keybindable index (1,2,3..0)
+ * `element-text`: the widget in the listview's entry showing the text.
+ * `mode-switcher`: the main horizontal @box packing the buttons.
+ * `button`: the buttons @textbox for each mode
+ * `message`: The container holding the textbox.
+ * `textbox`: the message textbox
+
+Note that these path names match the default theme. Themes that provide a custom layout will have different
+elements, and structure.
+
+
+## State
+
+State: State of widget
+
+Optional flag(s) indicating state of the widget, used for theming.
+
+These are appended after the name or class of the widget.
+
+### Example:
+
+`button selected.normal { }`
+
+`element selected.urgent { }`
+
+Currently only the entrybox and scrollbar have states:
+
+### Entrybox:
+
+`{visible modifier}.{state}`
+
+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)
+
+Where `state` is:
+ * normal: no modification
+ * urgent: this entry is marked urgent
+ * active: this entry is marked active
+
+These can be mixed.
+
+Example:
+
+```css
+nametotextbox selected.active {
+ background-color: #003642;
+ text-color: #008ed4;
+}
+```
+
+Sets all selected textboxes marked active to the given text and background color.
+Note that a state modifies the original element, it therefore contains all the properties of that element.
+
+### Scrollbar
+
+The scrollbar uses the `handle` state when drawing the small scrollbar handle.
+This allows the colors used for drawing the handle to be set independently.
+
+
+## SUPPORTED PROPERTIES
+
+The following properties are currently supported:
+
+### all widgets:
+
+* **enabled**: enable/disable the widget
+* **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)/
+* **border-radius**: padding
+ Sets a radius on the corners of the borders.
+* **background-color**: color
+ Background color
+* **background-image**: image
+ Background image
+* **border-color**: color
+ Color of the border
+* **cursor**: cursor
+ Type of mouse cursor that is set when the mouse pointer is hovered over the widget.
+
+### window:
+
+* **font**: string
+ The font used in the window
+
+* **transparency**: string
+ Indicating if transparency should be used and what type:
+ **real** - True transparency. Only works with a compositor.
+ **background** - Take a screenshot of the background image and use that.
+ **screenshot** - Take a screenshot of the screen and use that.
+ **Path** to png file - Use an image.
+
+* **location**: position
+ The place of the anchor on the monitor
+* **anchor**: anchor
+ The anchor position on the window
+* **fullscreen**: boolean
+ Window is fullscreen.
+* **width**: distance
+ The width of the window
+* **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
+
+
+### scrollbar:
+
+* **background-color**: color
+* **handle-width**: distance
+* **handle-color**: color
+* **border-color**: color
+
+### box:
+
+* **orientation**: orientation
+ Set the direction the elements are packed.
+* **spacing**: distance
+ Distance between the packed elements.
+
+### textbox:
+
+* **background-color**: color
+* **border-color**: the color used for the border around the widget.
+* **font**: the font used by this textbox (string).
+* **str**: the string to display by this textbox (string).
+* **vertical-align**: Vertical alignment of the text. A number between 0 (top) and 1 (bottom).
+* **horizontal-align**: Horizontal alignment of the text. A number between 0 (left) and 1 (right).
+* **text-color**: the text color to use.
+* **highlight**: text style {color}.
+ color is optional, multiple highlight styles can be added like: bold underline italic #000000;
+ This option is only available on the `element-text` widget.
+* **width**: override the desired width for the textbox.
+* **content**: Set the displayed text (String).
+* **placeholder**: Set the displayed text (String) when nothing is entered.
+* **placeholder-color**: Color of the placeholder text.
+* **blink**: Enable/Disable blinking on an input textbox (Boolean).
+* **markup**: Force markup on, beware that only valid pango markup strings are shown.
+
+### listview:
+* **columns**: integer
+ Number of columns to show (at least 1)
+* **fixed-height**: boolean
+ Always show `lines` rows, even if fewer elements are available.
+* **dynamic**: boolean
+ `True` if the size should change when filtering the list, `False` if it should keep the original height.
+* **scrollbar**: boolean
+ If the scrollbar should be enabled/disabled.
+* **scrollbar-width**: distance
+ Width of the scrollbar
+* **cycle**: boolean
+ When navigating, it should wrap around
+* **spacing**: distance
+ Spacing between the elements (both vertical and horizontal)
+* **lines**: integer
+ Number of rows to show in the list view.
+* **layout**: orientation
+ Indicate how elements are stacked. Horizontal implements the dmenu style.
+* **reverse**: boolean
+ Reverse the ordering (top down to bottom up).
+* **fixed-columns**: boolean
+ Do not reduce the number of columns shown when number of visible elements is not enough to fill them all.
+
+Each element is a `box` called `element`. Each `element` can contain an `element-icon` and `element-text`.
+
+### listview text highlight:
+
+The `element-text` widget in the `listview` is the one used to show the text.
+On this widget set the `highlight` property (only place this property is used) to change
+the style of highlighting.
+The `highlight` property consist of the `text-style` property and a color.
+
+To disable highlighting:
+
+```css
+ element-text {
+ highlight: None;
+ }
+```
+
+To set to red underlined:
+
+```css
+ element-text {
+ highlight: underline red;
+ }
+```
+
+## Layout
+
+The new format allows the layout of the **rofi** window to be tweaked extensively.
+For each widget, the themer can specify padding, margin, border, font, and more.
+It even allows, as an advanced feature, to pack widgets in a custom structure.
+
+### Basic structure
+
+The whole view is made out of boxes that pack other boxes or widgets.
+The box can be vertical or horizontal. This is loosely inspired by [GTK](http://gtk.org/).
+
+The current layout of **rofi** is structured as follows:
+
+```
+|------------------------------------------------------------------------------------|
+| window {BOX:vertical} |
+| |-------------------------------------------------------------------------------| |
+| | mainbox {BOX:vertical} | |
+| | |---------------------------------------------------------------------------| | |
+| | | inputbar {BOX:horizontal} | | |
+| | | |---------| |-| |---------------------------------|---| |---| |---| |---| | | |
+| | | | prompt | |:| | entry |#fr| | / | |#ns| |ci | | | |
+| | | |---------| |_| |---------------------------------|---| |---| |---| |---| | | |
+| | |---------------------------------------------------------------------------| | |
+| | | |
+| | |---------------------------------------------------------------------------| | |
+| | | message | | |
+| | | |-----------------------------------------------------------------------| | | |
+| | | | textbox | | | |
+| | | |-----------------------------------------------------------------------| | | |
+| | |---------------------------------------------------------------------------| | |
+| | | |
+| | |-----------------------------------------------------------------------------| |
+| | | listview | |
+| | | |------------------------------------------------------------------------] | |
+| | | | element | | |
+| | | | |-----------------| |------------------------------------------------] | | |
+| | | | |element-icon | |element-text | | | |
+| | | | |-----------------| |------------------------------------------------| | | |
+| | | |------------------------------------------------------------------------] | |
+| | |-----------------------------------------------------------------------------| |
+| | | |
+| | |---------------------------------------------------------------------------| | |
+| | | mode-switcher {BOX:horizontal} | | |
+| | | |---------------| |---------------| |--------------| |---------------| | | |
+| | | | Button | | Button | | Button | | Button | | | |
+| | | |---------------| |---------------| |--------------| |---------------| | | |
+| | |---------------------------------------------------------------------------| | |
+| |-------------------------------------------------------------------------------| |
+|------------------------------------------------------------------------------------|
+
+
+```
+> * ci is the case-indicator
+> * fr is the num-filtered-rows
+> * ns is the num-rows
+
+### Error message structure
+
+```
+|-----------------------------------------------------------------------------------|
+| window {BOX:vertical} |
+| |------------------------------------------------------------------------------| |
+| | error-message {BOX:vertical} | |
+| | |-------------------------------------------------------------------------| | |
+| | | textbox | | |
+| | |-------------------------------------------------------------------------| | |
+| |------------------------------------------------------------------------------| |
+|-----------------------------------------------------------------------------------|
+
+
+```
+
+### Advanced layout
+
+The layout of **rofi** can be tweaked by packing the 'fixed' widgets in a custom structure.
+
+The following widgets are fixed, as they provide core **rofi** functionality:
+
+ * prompt
+ * entry
+ * overlay
+ * case-indicator
+ * message
+ * listview
+ * mode-switcher
+ * num-rows
+ * num-filtered-rows
+
+The following keywords are defined and can be used to automatically pack a subset of the widgets.
+These are used in the default theme as depicted in the figure above.
+
+ * mainbox
+ Packs: `inputbar, message, listview, mode-switcher`
+ * inputbar
+ Packs: `prompt,entry,case-indicator`
+
+Any widget name starting with `textbox` is a textbox widget, others are box widgets and can pack other widgets.
+
+There are several special widgets that can be used by prefixing the name of the widget:
+
+#### textbox
+
+This is a read-only textbox widget. The displayed string can be set with `content`.
+
+
+Example:
+
+```css
+textbox-custom {
+ expand: false;
+ content: "My Message";
+}
+```
+
+#### Icon
+
+This is an icon widget. The displayed icon can be set with `filename` and size with `size`.
+If the property `action` is set, it acts as a button.
+`action` can be set to a keybinding name and completes that action. (see rofi -show keys for a list).
+
+If the `squared` property is set to **false** the widget height and width are not forced to be equal.
+
+Example:
+
+```css
+icon-paste {
+ expand: false;
+ filename: "gtk-paste";
+ size: 24;
+ vertical-align: 0.5;
+ action: "kb-primary-paste";
+}
+```
+
+
+#### button
+
+This is a textbox widget that can have a 'clickable' action.
+The `action` can be set to:
+`keybinding`: accepts a keybinding name and completes that action. (see rofi -show keys for a list).
+
+```css
+button-paste {
+ expand: false;
+ content: "My Clickable Message";
+ vertical-align: 0.5;
+ action: "kb-primary-paste";
+}
+```
+
+
+#### Children
+
+To specify children, set the `children`
+property (this always happens on the `box` child, see example below):
+
+```css
+inputbar {
+ children: [prompt,entry,overlay,case-indicator];
+}
+```
+
+The theme needs to be updated to match the hierarchy specified.
+
+Below is an example of a theme emulating dmenu:
+
+```css
+* {
+ background-color: Black;
+ text-color: White;
+ border-color: White;
+ font: "Times New Roman 12";
+}
+
+window {
+ anchor: north;
+ location: north;
+ width: 100%;
+ padding: 4px;
+ children: [ horibox ];
+}
+
+horibox {
+ orientation: horizontal;
+ children: [ prompt, entry, listview ];
+}
+
+listview {
+ layout: horizontal;
+ spacing: 5px;
+ lines: 10;
+}
+
+entry {
+ expand: false;
+ width: 10em;
+}
+
+element {
+ padding: 0px 2px;
+}
+element selected {
+ background-color: SteelBlue;
+}
+```
+
+
+### Padding and margin
+
+Just like CSS, **rofi** uses the box model for each widget.
+
+```
+|-------------------------------------------------------------------|
+| margin |
+| |-------------------------------------------------------------| |
+| | border | |
+| | |---------------------------------------------------------| | |
+| | | padding | | |
+| | | |-----------------------------------------------------| | | |
+| | | | content | | | |
+| | | |-----------------------------------------------------| | | |
+| | |---------------------------------------------------------| | |
+| |-------------------------------------------------------------| |
+|-------------------------------------------------------------------|
+```
+
+Explanation of the different parts:
+
+ * Content - The content of the widget.
+ * Padding - Clears an area around the widget.
+ The padding shows the background color of the widget.
+ * Border - A border that goes around the padding and content.
+ The border use the border-color of the widget.
+ * Margin - Clears an area outside the border.
+ The margin is transparent.
+
+The box model allows us to add a border around elements, and to define space between elements.
+
+The size of each margin, border, and padding can be set.
+For the border, a linestyle and radius can be set.
+
+### Spacing
+
+Widgets that can pack more then one child widget (currently box and listview) have the `spacing` property.
+This property sets the distance between the packed widgets (both horizontally and vertically).
+
+```
+|---------------------------------------|
+| |--------| s |--------| s |-------| |
+| | child | p | child | p | child | |
+| | | a | | a | | |