mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
af976c3779
In issue #611 there is a workaround implemented for an issue within xserver: https://bugs.freedesktop.org/show_bug.cgi?id=104323#c1, https://gitlab.freedesktop.org/xorg/xserver/-/issues/300. With a latest update in xkeyboard-config this workaround breaks rofi, see #1642 and https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/issues/341. This commits disabled this work-around (can be re-enabled with -xserver-i300-workaround flag). Hopefully this restores correct rofi functionality. issue: #611 #1642
2222 lines
54 KiB
Groff
2222 lines
54 KiB
Groff
.TH ROFI\-THEME 5 rofi\-theme
|
|
.SH NAME
|
|
.PP
|
|
\fBrofi\-theme\fP \- Rofi theme format files
|
|
|
|
.SH GETTING STARTED WITH THEMING
|
|
.PP
|
|
The easiest way to get started theming rofi is by modifying your existing theme.
|
|
|
|
.PP
|
|
Themes can be modified/tweaked by adding theming elements to the end of the
|
|
.br
|
|
config file. The default location of this file is \fB\fC\~/.config/rofi/config.rasi\fR,
|
|
if the file does not exists, you can create it.
|
|
|
|
.PP
|
|
A basic config:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
configuration {
|
|
modes: [ combi ];
|
|
combi\-modes: [ window, drun, run ];
|
|
}
|
|
|
|
@theme "gruvbox\-light"
|
|
|
|
/* Insert theme modifications after this */
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
For example if we want to change the \fB\fCType to filter\fR text in the entry box we
|
|
append the following:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
entry {
|
|
placeholder: "Type here";
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
In the above section, \fB\fCentry\fR indicates the widget, \fB\fCplaceholder\fR is the
|
|
property we want to modify and we set it to the string \fB\fC"Type here"\fR\&.
|
|
To find the commonly available widgets in rofi, see the 'Basic structure' section.
|
|
|
|
.PP
|
|
To change the mouse over cursor to a pointer, add:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
entry {
|
|
placeholder: "Type here";
|
|
cursor: pointer;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
For the next modification, we want to add the icon after each text element and
|
|
increase the size. First we start by modifying the \fB\fCelement\fR widget:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
|
|
element {
|
|
orientation: horizontal;
|
|
children: [ element\-text, element\-icon ];
|
|
spacing: 5px;
|
|
}
|
|
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Resulting in the following packing:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
│ element │
|
|
│ ┌─────────────────────────────────────────────┐ ┌─────────────────┐ │
|
|
│ │element─text │ │ element─icon │ │
|
|
│ └─────────────────────────────────────────────┘ └─────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The \fB\fCelement\fR (container) widget hold each entry in the \fB\fClistview\fR, we add the
|
|
two pre\-defined children in the order we want to show. We also specify the
|
|
packing direction (\fB\fCorientation\fR) and the spacing between the children
|
|
(\fB\fCspacing\fR). We specify the space between the two children in absolute pixels
|
|
(\fB\fCpx\fR).
|
|
|
|
.PP
|
|
To increase the icon\-size, we need to modify the \fB\fCelement\-icon\fR widget.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element\-icon {
|
|
size: 2.5em;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
│ element │
|
|
│ ┌─────────────────────────────────────────────┐ ┌─────────────────┐ │
|
|
│ │element─text │ │ element │ │
|
|
│ │ │ │ ─ │ │
|
|
│ │ │ │ icon │ │
|
|
│ └─────────────────────────────────────────────┘ └─────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
In this example we specify the size in the em
|
|
\[la]https://www.w3.org/Style/LieBos3e/em\[ra] unit.
|
|
|
|
.PP
|
|
Now lets change the text color of both the \fB\fCentry\fR and the \fB\fCelement\-text\fR widget to red and background to blue.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
entry, element\-text {
|
|
text\-color: red;
|
|
background\-color: rgb(0,0,255);
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Here we use two different methods of writing down the color, for \fB\fCtext\-color\fR
|
|
we used a named color, for \fB\fCbackground\-color\fR we specify it in \fB\fCrgb\fR\&.
|
|
We also specify the property for multiple widgets by passing a comma separated
|
|
list of widget names.
|
|
|
|
.PP
|
|
If you want to center the text relative to the icon, we can set this:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element\-icon {
|
|
vertical\-align: 0.5;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
│ element │
|
|
│ ┌─────────────────────────────────────────────┐ ┌─────────────────┐ │
|
|
│ │ │ │ element │ │
|
|
│ │element\-text │ │ ─ │ │
|
|
│ │ │ │ icon │ │
|
|
│ └─────────────────────────────────────────────┘ └─────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
If you want to see the complete theme, including the modification you can run:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
rofi \-dump\-theme
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH DEFAULT THEME LOADING
|
|
.PP
|
|
By default, rofi loads the default theme. This theme is \fBalways\fP loaded.
|
|
The default configuration contains:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
@theme "default"
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
To unload the default theme, and load another theme, add the \fB\fC@theme\fR statement
|
|
to your \fB\fCconfig.rasi\fR file.
|
|
|
|
.PP
|
|
If you have a theme loaded via \fB\fC@theme\fR or use the default theme, you can tweak
|
|
it by adding overriding elements at the end of your \fB\fCconfig.rasi\fR file.
|
|
|
|
.PP
|
|
For the difference between \fB\fC@import\fR and \fB\fC@theme\fR see the \fB\fCMultiple file
|
|
handling\fR section in this manpage.
|
|
|
|
.PP
|
|
To see the default theme, run the following command:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
rofi \-no\-config \-dump\-theme
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH DESCRIPTION
|
|
.PP
|
|
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.
|
|
|
|
.SH FORMAT SPECIFICATION
|
|
.SH Encoding
|
|
.PP
|
|
The encoding of the file is UTF\-8. Both unix (\fB\fC\\n\fR) and windows (\fB\fC\\r\\n\fR) newlines format are supported. But unix is
|
|
preferred.
|
|
|
|
.SH Comments
|
|
.PP
|
|
C and C++ file comments are supported.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Anything after \fB\fC//\fR and before a newline is considered a comment.
|
|
.IP \(bu 2
|
|
Everything between \fB\fC/*\fR and \fB\fC*/\fR is a comment, this comment can span multiple lines.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Comments can be nested and the C comments can be inline.
|
|
|
|
.PP
|
|
The following is valid:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
// Magic comment.
|
|
property: /* comment */ value;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
However, this is not:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
prop/*comment*/erty: value;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH White space
|
|
.PP
|
|
White space and newlines, like comments, are ignored by the parser.
|
|
|
|
.PP
|
|
This:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
property: name;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Is identical to:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
property :
|
|
name
|
|
|
|
;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH File extension
|
|
.PP
|
|
The preferred file extension for the new theme format is \fBrasi\fP\&. This is an
|
|
abbreviation for \fBr\fPofi \fBa\fPdvanced \fBs\fPtyle \fBi\fPnformation.
|
|
|
|
.SH Basic Structure
|
|
.PP
|
|
Each element has a section with defined properties. Global properties can be defined in section \fB\fC* { }\fR\&.
|
|
Sub\-section names begin with an optional hash symbol \fB\fC#\fR\&.
|
|
|
|
.PP
|
|
It is advised to define the \fIglobal properties section\fP on top of the file to
|
|
make inheritance of properties clearer.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
/* Global properties section */
|
|
* {
|
|
// list of properties
|
|
}
|
|
|
|
/* Element theme section. */
|
|
{element path} {
|
|
// list of properties
|
|
}
|
|
{elements... } {
|
|
// list of properties
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
If there are multiple sections with the same name, they are merged. Duplicate properties are overwritten and the last
|
|
parsed entry kept.
|
|
|
|
.SH Global properties section
|
|
.PP
|
|
A theme can have one or more global properties sections. If there is more than one,
|
|
they will be merged.
|
|
|
|
.PP
|
|
The global properties section denotes the defaults for each element.
|
|
Each property of this section can be referenced with \fB\fC@{identifier}\fR
|
|
(See Properties section)
|
|
|
|
.PP
|
|
A global properties section is indicated with a \fB\fC*\fR as element path.
|
|
|
|
.SH Element theme section
|
|
.PP
|
|
A theme can have multiple element theme sections.
|
|
|
|
.PP
|
|
The element path can consist of multiple names separated by whitespace or dots.
|
|
Each element may contain any number of letters, numbers and \fB\fC\-\fR\&'s.
|
|
The first element in the element path can optionally start with a \fB\fC#\fR (for
|
|
historic reasons). Multiple elements can be specified by a \fB\fC,\fR\&.
|
|
|
|
.PP
|
|
This is a valid element name:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element normal.normal {
|
|
background\-color: blue;
|
|
}
|
|
button {
|
|
background\-color: blue;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
And is identical to:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element normal normal, button {
|
|
background\-color: blue;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Each section inherits the global properties. Properties can be explicitly
|
|
inherited from their parent with the \fB\fCinherit\fR keyword.
|
|
In the following example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
window {
|
|
a: 1;
|
|
b: 2;
|
|
children: [ mainbox ];
|
|
}
|
|
mainbox {
|
|
a: inherit;
|
|
b: 4;
|
|
c: 8;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The element \fB\fCmainbox\fR will have the following set of properties (if \fB\fCmainbox\fR
|
|
is a child of \fB\fCwindow\fR):
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
a: 1;
|
|
b: 4;
|
|
c: 8;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.SH Properties Format
|
|
.PP
|
|
The properties in a section consist of:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
{identifier}: {value};
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Both fields are mandatory for a property.
|
|
|
|
.PP
|
|
The \fB\fCidentifier\fR names the specified property. Identifiers can consist of any
|
|
combination of numbers, letters and '\-'. It must not contain any whitespace.
|
|
The structure of the \fB\fCvalue\fR defines the type of the property. The current
|
|
parser does not define or enforce a certain type of a particular \fB\fCidentifier\fR\&.
|
|
When used, values with the wrong type that cannot be converted are ignored.
|
|
|
|
.PP
|
|
The current theme format supports different types:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
a string
|
|
.IP \(bu 2
|
|
an integer number
|
|
.IP \(bu 2
|
|
a fractional number
|
|
.IP \(bu 2
|
|
a boolean value
|
|
.IP \(bu 2
|
|
a color
|
|
.IP \(bu 2
|
|
image
|
|
.IP \(bu 2
|
|
text style
|
|
.IP \(bu 2
|
|
line style
|
|
.IP \(bu 2
|
|
a distance
|
|
.IP \(bu 2
|
|
a padding
|
|
.IP \(bu 2
|
|
a border
|
|
.IP \(bu 2
|
|
a position
|
|
.IP \(bu 2
|
|
a reference
|
|
.IP \(bu 2
|
|
an orientation
|
|
.IP \(bu 2
|
|
a cursor
|
|
.IP \(bu 2
|
|
a list of keywords
|
|
.IP \(bu 2
|
|
an array of values
|
|
.IP \(bu 2
|
|
an environment variable
|
|
.IP \(bu 2
|
|
Inherit
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Some of these types are a combination of other types.
|
|
|
|
.SH String
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC"[:print:]+"\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
A string is always surrounded by double quotes (\fB\fC"\fR). Between the quotes there can be any printable character.
|
|
|
|
.PP
|
|
For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
font: "Awasome 12";
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The string must be valid UTF\-8, special characters can be escaped:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
text {
|
|
content: "Line one\\n\\tIndented line two";
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The following special characters can be escaped: \fB\fC\\b\fR, \fB\fC\\f\fR, \fB\fC\\n\fR, \fB\fC\\r\fR, \fB\fC\\t\fR, \fB\fC\\v\fR, \fB\fC\\\fR and \fB\fC"\fR\&.
|
|
|
|
.SH Integer
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC[\-+]?[:digit:]+\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
An integer may contain any number.
|
|
|
|
.PP
|
|
For examples:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
lines: 12;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Real
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC[\-+]?[:digit:]+(\\.[:digit:]+)?\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
A real is an integer with an optional fraction.
|
|
|
|
.PP
|
|
For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
real: 3.4;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The following is not valid: \fB\fC\&.3\fR, \fB\fC3.\fR or scientific notation: \fB\fC3.4e\-3\fR\&.
|
|
|
|
.SH Boolean
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC(true|false)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Boolean value is either \fB\fCtrue\fR or \fB\fCfalse\fR\&. This is case\-\&sensitive.
|
|
|
|
.PP
|
|
For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
dynamic: false;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Image
|
|
.PP
|
|
\fBrofi\fP support a limited set of background\-image formats.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: url("path to image");
|
|
.IP \(bu 2
|
|
Format: url("path to image", scale);
|
|
where scale is: none, both, width, height
|
|
.IP \(bu 2
|
|
Format: linear\-gradient(stop color,stop1, color, stop2 color, ...);
|
|
.IP \(bu 2
|
|
Format: linear\-gradient(to direction, stop color,stop1, color, stop2 color, ...);
|
|
where direction is: top,left,right,bottom.
|
|
.IP \(bu 2
|
|
Format: linear\-gradient(angle, stop color,stop1, color, stop2 color, ...);
|
|
Angle in deg,rad,grad (as used in color).
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Where the \fB\fCpath\fR is a string, and \fB\fCstop\fR color is of type color.
|
|
|
|
.SH Color
|
|
.PP
|
|
\fBrofi\fP supports the color formats as specified in the CSS standard (1,2,3 and some of CSS 4)
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC#{HEX}{3}\fR (rgb)
|
|
.IP \(bu 2
|
|
Format: \fB\fC#{HEX}{4}\fR (rgba)
|
|
.IP \(bu 2
|
|
Format: \fB\fC#{HEX}{6}\fR (rrggbb)
|
|
.IP \(bu 2
|
|
Format: \fB\fC#{HEX}{8}\fR (rrggbbaa)
|
|
.IP \(bu 2
|
|
Format: \fB\fCrgb[a]({INTEGER},{INTEGER},{INTEGER}[, {PERCENTAGE}])\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fCrgb[a]({INTEGER}%,{INTEGER}%,{INTEGER}%[, {PERCENTAGE}])\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fChsl[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fChwb[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fCcmyk( {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE} ])\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{named\-color} [ / {PERCENTAGE} ]\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
The white\-space format proposed in CSS4 is also supported.
|
|
|
|
.PP
|
|
The different values are:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fC{HEX}\fR is a hexadecimal number ('0\-9a\-f' case insensitive).
|
|
.IP \(bu 2
|
|
\fB\fC{INTEGER}\fR value can be between 0 and 255 or 0\-100 when representing percentage.
|
|
.IP \(bu 2
|
|
\fB\fC{ANGLE}\fR is the angle on the color wheel, can be in \fB\fCdeg\fR, \fB\fCrad\fR, \fB\fCgrad\fR or \fB\fCturn\fR\&. When no unit is specified, degrees is assumed.
|
|
.IP \(bu 2
|
|
\fB\fC{PERCENTAGE}\fR can be between 0\-1.0, or 0%\-100%
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fB\fC{named\-color}\fR is one of the following colors:
|
|
.PP
|
|
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
|
|
|
|
.RE
|
|
|
|
.PP
|
|
For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
background\-color: #FF0000;
|
|
border\-color: rgba(0,0,1, 0.5);
|
|
text\-color: SeaGreen;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
or
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
background\-color: transparent;
|
|
text\-color: Black;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Text style
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC(bold|italic|underline|strikethrough|none)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Text style indicates how the highlighted text is emphasized. \fB\fCNone\fR indicates that no emphasis
|
|
should be applied.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCbold\fR: make the text thicker then the surrounding text.
|
|
.IP \(bu 2
|
|
\fB\fCitalic\fR: put the highlighted text in script type (slanted).
|
|
.IP \(bu 2
|
|
\fB\fCunderline\fR: put a line under the highlighted text.
|
|
.IP \(bu 2
|
|
\fB\fCstrikethrough\fR: put a line through the highlighted text.
|
|
|
|
.RE
|
|
|
|
.SH Line style
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC(dash|solid)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Indicates how a line should be drawn.
|
|
It currently supports:
|
|
* \fB\fCdash\fR: a dashed line, where the gap is the same width as the dash
|
|
* \fB\fCsolid\fR: a solid line
|
|
|
|
.SH Distance
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Integer}px\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Real}em\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Real}ch\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Real}%\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Integer}mm\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
A distance can be specified in 3 different units:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCpx\fR: Screen pixels.
|
|
.IP \(bu 2
|
|
\fB\fCem\fR: Relative to text height.
|
|
.IP \(bu 2
|
|
\fB\fCch\fR: Relative to width of a single number.
|
|
.IP \(bu 2
|
|
\fB\fCmm\fR: Actual size in millimeters (based on dpi).
|
|
.IP \(bu 2
|
|
\fB\fC%\fR: Percentage of the \fBmonitor\fP size.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Distances used in the horizontal direction use the monitor width. Distances in
|
|
the vertical direction use the monitor height.
|
|
For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
padding: 10%;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.SS Calculating sizes
|
|
.PP
|
|
Rofi supports some maths in calculating sizes. For this it uses the CSS syntax:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
width: calc( 100% \- 37px );
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
width: calc( 20% min 512 );
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
It supports the following operations:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fC+\fR : Add
|
|
.IP \(bu 2
|
|
\fB\fC\-\fR : Subtract
|
|
.IP \(bu 2
|
|
\fB\fC/\fR : Divide
|
|
.IP \(bu 2
|
|
\fB\fC*\fR : Multiply
|
|
.IP \(bu 2
|
|
\fB\fC%\fR : Modulo
|
|
.IP \(bu 2
|
|
\fB\fCmin\fR : Minimum of lvalue or rvalue;
|
|
.IP \(bu 2
|
|
\fB\fCmax\fR : Maximum of lvalue or rvalue;
|
|
.IP \(bu 2
|
|
\fB\fCfloor\fR : Round down lvalue to the next multiple of rvalue
|
|
.IP \(bu 2
|
|
\fB\fCceil\fR : Round up lvalue to the next multiple of rvalue
|
|
.IP \(bu 2
|
|
\fB\fCround\fR : Round lvalue to the next multiple of rvalue
|
|
|
|
.RE
|
|
|
|
.PP
|
|
It uses the C precedence ordering.
|
|
|
|
.SH Padding
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Integer}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Distance} {Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Distance} {Distance} {Distance}\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
If no unit is specified, pixels are assumed.
|
|
|
|
.PP
|
|
The different number of fields in the formats are parsed like:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
1 field: \fB\fCall\fR
|
|
.IP \(bu 2
|
|
2 fields: \fB\fCtop\&bottom\fR \fB\fCleft\&right\fR
|
|
.IP \(bu 2
|
|
3 fields: \fB\fCtop\fR, \fB\fCleft\&right\fR, \fB\fCbottom\fR
|
|
.IP \(bu 2
|
|
4 fields: \fB\fCtop\fR, \fB\fCright\fR, \fB\fCbottom\fR, \fB\fCleft\fR
|
|
|
|
.RE
|
|
|
|
.SH Border
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Integer}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Distance} {Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Distance} {Distance} {Distance}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Line style}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Line style} {Distance} {Line style}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Line style} {Distance} {Line style} {Distance} {Line style}\fR
|
|
.IP \(bu 2
|
|
Format: \fB\fC{Distance} {Line style} {Distance} {Line style} {Distance} {Line style} {Distance} {Line style}\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Borders are identical to padding, except that each distance field has a line
|
|
style property.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.PP
|
|
When no unit is specified, pixels are assumed.
|
|
.RE
|
|
|
|
.SH Position
|
|
.PP
|
|
Indicate a place on the window/monitor.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌─────────────┬─────────────┬─────────────┐
|
|
│ north west │ north │ north east │
|
|
├─────────────┼─────────────┼─────────────┤
|
|
│ west │ center │ east │
|
|
├─────────────┼─────────────┼─────────────┤
|
|
│ south west │ south │ south east │
|
|
└─────────────┴─────────────┴─────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC(center|east|north|west|south|north east|north west|south west|south east)\fR
|
|
|
|
.RE
|
|
|
|
.SH Visibility
|
|
.PP
|
|
It is possible to hide widgets:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
inputbar {
|
|
enabled: false;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Reference
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC@{PROPERTY NAME}\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
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:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
highlight: bold @pink;
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
But this is:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
* {
|
|
myhigh: bold #FAA;
|
|
}
|
|
|
|
window {
|
|
highlight: @myhigh;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fCvar(PROPERTY NAME, DEFAULT)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.PP
|
|
Example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
window {
|
|
width: var( width, 30%);
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
If the property \fB\fCwidth\fR is set globally (\fB\fC*{}\fR) that value is used, if the property
|
|
\fB\fCwidth\fR is not set, the default value is used.
|
|
|
|
.SH Orientation
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC(horizontal|vertical)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Specify the orientation of the widget.
|
|
|
|
.SH Cursor
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC(default|pointer|text)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Specify the type of mouse cursor that is set when the mouse pointer is over the widget.
|
|
|
|
.SH List of keywords
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC[ keyword, keyword ]\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
A list starts with a '[' and ends with a ']'. The entries in the list are comma\-separated.
|
|
The \fB\fCkeyword\fR in the list refers to an widget name.
|
|
|
|
.SH List of values
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC[ value, value, ... ]\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
An list starts with a '[' and ends with a ']'. The entries in the list are comma\-separated.
|
|
|
|
.SH Environment variable
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fC${:alnum:}\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
* {
|
|
background\-color: ${BG};
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fCenv(ENVIRONMENT, default)\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
window {
|
|
width: env(WIDTH, 40%);
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
If environment WIDTH is set, then that value is parsed, otherwise the default value (\fB\fC40%\fR).
|
|
|
|
.SH Inherit
|
|
.RS
|
|
.IP \(bu 2
|
|
Format: \fB\fCinherit\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Inherits the property from its parent widget.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
mainbox {
|
|
border\-color: inherit;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH ELEMENTS PATHS
|
|
.PP
|
|
Element paths exists of two parts, the first part refers to the actual widget by name.
|
|
Some widgets have an extra state.
|
|
|
|
.PP
|
|
For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element selected {
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Here \fB\fCelement selected\fR is the name of the widget, \fB\fCselected\fR is the state of the widget.
|
|
|
|
.PP
|
|
The difference between dots and spaces is purely cosmetic. These are all the same:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element .selected {
|
|
|
|
element.selected {
|
|
}
|
|
element selected {
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH SUPPORTED ELEMENT PATH
|
|
.SH Name
|
|
.PP
|
|
The current widgets available in \fBrofi\fP:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCwindow\fR
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCoverlay\fR: the overlay widget.
|
|
.IP \(bu 2
|
|
\fB\fCmainbox\fR: The mainbox box.
|
|
.IP \(bu 2
|
|
\fB\fCinputbar\fR: The input bar box.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCbox\fR: the horizontal @box packing the widgets
|
|
.IP \(bu 2
|
|
\fB\fCcase\-indicator\fR: the case/sort indicator @textbox
|
|
.IP \(bu 2
|
|
\fB\fCprompt\fR: the prompt @textbox
|
|
.IP \(bu 2
|
|
\fB\fCentry\fR: the main entry @textbox
|
|
.IP \(bu 2
|
|
\fB\fCnum\-rows\fR: Shows the total number of rows.
|
|
.IP \(bu 2
|
|
\fB\fCnum\-filtered\-rows\fR: Shows the total number of rows after filtering.
|
|
.IP \(bu 2
|
|
\fB\fCtextbox\-current\-entry\fR: Shows the text of the currently selected entry.
|
|
.IP \(bu 2
|
|
\fB\fCicon\-current\-entry\fR: Shows the icon of the currently selected entry.
|
|
|
|
.RE
|
|
.IP \(bu 2
|
|
\fB\fClistview\fR: The listview.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCscrollbar\fR: the listview scrollbar
|
|
.IP \(bu 2
|
|
\fB\fCelement\fR: a box in the listview holding the entries
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCelement\-icon\fR: the widget in the listview's entry showing the (optional) icon
|
|
.IP \(bu 2
|
|
\fB\fCelement\-index\fR: the widget in the listview's entry keybindable index (1,2,3..0)
|
|
.IP \(bu 2
|
|
\fB\fCelement\-text\fR: the widget in the listview's entry showing the text.
|
|
|
|
.RE
|
|
|
|
.RE
|
|
.IP \(bu 2
|
|
\fB\fCmode\-switcher\fR: the main horizontal @box packing the buttons.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCbutton\fR: the buttons @textbox for each mode
|
|
|
|
.RE
|
|
.IP \(bu 2
|
|
\fB\fCmessage\fR: The container holding the textbox.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCtextbox\fR: the message textbox
|
|
|
|
.RE
|
|
|
|
.RE
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Note that these path names match the default theme. Themes that provide a custom layout will have different
|
|
elements, and structure.
|
|
|
|
.SH State
|
|
.PP
|
|
State: State of widget
|
|
|
|
.PP
|
|
Optional flag(s) indicating state of the widget, used for theming.
|
|
|
|
.PP
|
|
These are appended after the name or class of the widget.
|
|
|
|
.SS Example:
|
|
.PP
|
|
\fB\fCbutton selected.normal { }\fR
|
|
|
|
.PP
|
|
\fB\fCelement selected.urgent { }\fR
|
|
|
|
.PP
|
|
Currently only the entrybox and scrollbar have states:
|
|
|
|
.SS Entrybox:
|
|
.PP
|
|
\fB\fC{visible modifier}.{state}\fR
|
|
|
|
.PP
|
|
Where \fB\fCvisible modifier\fR can be:
|
|
* normal: no modification
|
|
* selected: the entry is selected/highlighted by user
|
|
* alternate: the entry is at an alternating row (uneven row)
|
|
|
|
.PP
|
|
Where \fB\fCstate\fR is:
|
|
* normal: no modification
|
|
* urgent: this entry is marked urgent
|
|
* active: this entry is marked active
|
|
|
|
.PP
|
|
These can be mixed.
|
|
|
|
.PP
|
|
Example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
nametotextbox selected.active {
|
|
background\-color: #003642;
|
|
text\-color: #008ed4;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.SS Scrollbar
|
|
.PP
|
|
The scrollbar uses the \fB\fChandle\fR state when drawing the small scrollbar handle.
|
|
This allows the colors used for drawing the handle to be set independently.
|
|
|
|
.SH SUPPORTED PROPERTIES
|
|
.PP
|
|
The following properties are currently supported:
|
|
|
|
.SS all widgets:
|
|
.RS
|
|
.IP \(bu 2
|
|
\fBenabled\fP: enable/disable rendering of the widget
|
|
.IP \(bu 2
|
|
\fBpadding\fP: padding
|
|
Padding on the inside of the widget
|
|
.IP \(bu 2
|
|
\fBmargin\fP: padding
|
|
Margin on the outside of the widget
|
|
.IP \(bu 2
|
|
\fBborder\fP: border
|
|
Border around the widget (between padding and margin)/
|
|
.IP \(bu 2
|
|
\fBborder\-radius\fP: padding
|
|
Sets a radius on the corners of the borders.
|
|
.IP \(bu 2
|
|
\fBbackground\-color\fP: color
|
|
Background color
|
|
.IP \(bu 2
|
|
\fBbackground\-image\fP: image
|
|
Background image
|
|
.IP \(bu 2
|
|
\fBborder\-color\fP: color
|
|
Color of the border
|
|
.IP \(bu 2
|
|
\fBcursor\fP: cursor
|
|
Type of mouse cursor that is set when the mouse pointer is hovered over the widget.
|
|
|
|
.RE
|
|
|
|
.SS window:
|
|
.RS
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBfont\fP: string
|
|
The font used in the window
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBtransparency\fP: string
|
|
Indicating if transparency should be used and what type:
|
|
\fBreal\fP \- True transparency. Only works with a compositor.
|
|
\fBbackground\fP \- Take a screenshot of the background image and use that.
|
|
\fBscreenshot\fP \- Take a screenshot of the screen and use that.
|
|
\fBPath\fP to png file \- Use an image.
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBlocation\fP: position
|
|
The place of the anchor on the monitor
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBanchor\fP: anchor
|
|
The anchor position on the window
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBfullscreen\fP: boolean
|
|
Window is fullscreen.
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBwidth\fP: distance
|
|
The width of the window
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBx\-offset\fP: distance
|
|
.IP \(bu 2
|
|
|
|
.PP
|
|
\fBy\-offset\fP: distance
|
|
The offset of the window to the anchor point, allowing you to push the window left/right/up/down
|
|
|
|
.RE
|
|
|
|
.SS scrollbar:
|
|
.RS
|
|
.IP \(bu 2
|
|
\fBbackground\-color\fP: color
|
|
.IP \(bu 2
|
|
\fBhandle\-width\fP: distance
|
|
.IP \(bu 2
|
|
\fBhandle\-color\fP: color
|
|
.IP \(bu 2
|
|
\fBborder\-color\fP: color
|
|
|
|
.RE
|
|
|
|
.SS box:
|
|
.RS
|
|
.IP \(bu 2
|
|
\fBorientation\fP: orientation
|
|
Set the direction the elements are packed.
|
|
.IP \(bu 2
|
|
\fBspacing\fP: distance
|
|
Distance between the packed elements.
|
|
|
|
.RE
|
|
|
|
.SS textbox:
|
|
.RS
|
|
.IP \(bu 2
|
|
\fBbackground\-color\fP: color
|
|
.IP \(bu 2
|
|
\fBborder\-color\fP: the color used for the border around the widget.
|
|
.IP \(bu 2
|
|
\fBfont\fP: the font used by this textbox (string).
|
|
.IP \(bu 2
|
|
\fBstr\fP/\fBcontent\fP: the string to display by this textbox (string).
|
|
.IP \(bu 2
|
|
\fBvertical\-align\fP: Vertical alignment of the text. A number between 0 (top) and 1 (bottom).
|
|
.IP \(bu 2
|
|
\fBhorizontal\-align\fP: Horizontal alignment of the text. A number between 0 (left) and 1 (right).
|
|
.IP \(bu 2
|
|
\fBtext\-color\fP: the text color to use.
|
|
.IP \(bu 2
|
|
\fBhighlight\fP: text style {color}.
|
|
color is optional, multiple highlight styles can be added like: bold underline italic #000000;
|
|
This option is only available on the \fB\fCelement\-text\fR widget.
|
|
.IP \(bu 2
|
|
\fBwidth\fP: override the desired width for the textbox.
|
|
.IP \(bu 2
|
|
\fBcontent\fP: Set the displayed text (String).
|
|
.IP \(bu 2
|
|
\fBplaceholder\fP: Set the displayed text (String) when nothing is entered.
|
|
.IP \(bu 2
|
|
\fBplaceholder\-color\fP: Color of the placeholder text.
|
|
.IP \(bu 2
|
|
\fBblink\fP: Enable/Disable blinking on an input textbox (Boolean).
|
|
.IP \(bu 2
|
|
\fBmarkup\fP: Force markup on, beware that only valid pango markup strings are shown.
|
|
.IP \(bu 2
|
|
\fBtab\-stops\fP: array of distances
|
|
Set the location of tab stops by their distance from the beginning of the line.
|
|
Each distance should be greater than the previous one.
|
|
The text appears to the right of the tab stop position (other alignments are not supported yet).
|
|
|
|
.RE
|
|
|
|
.SS listview:
|
|
.RS
|
|
.IP \(bu 2
|
|
\fBcolumns\fP: integer
|
|
Number of columns to show (at least 1)
|
|
.IP \(bu 2
|
|
\fBfixed\-height\fP: boolean
|
|
Always show \fB\fClines\fR rows, even if fewer elements are available.
|
|
.IP \(bu 2
|
|
\fBdynamic\fP: boolean
|
|
\fB\fCTrue\fR if the size should change when filtering the list, \fB\fCFalse\fR if it should keep the original height.
|
|
.IP \(bu 2
|
|
\fBscrollbar\fP: boolean
|
|
If the scrollbar should be enabled/disabled.
|
|
.IP \(bu 2
|
|
\fBscrollbar\-width\fP: distance
|
|
Width of the scrollbar
|
|
.IP \(bu 2
|
|
\fBcycle\fP: boolean
|
|
When navigating, it should wrap around
|
|
.IP \(bu 2
|
|
\fBspacing\fP: distance
|
|
Spacing between the elements (both vertical and horizontal)
|
|
.IP \(bu 2
|
|
\fBlines\fP: integer
|
|
Number of rows to show in the list view.
|
|
.IP \(bu 2
|
|
\fBlayout\fP: orientation
|
|
Indicate how elements are stacked. Horizontal implements the dmenu style.
|
|
.IP \(bu 2
|
|
\fBreverse\fP: boolean
|
|
Reverse the ordering (top down to bottom up).
|
|
.IP \(bu 2
|
|
\fBflow\fP: orientation
|
|
The order the elements are layed out. Vertical is the original 'column' view.
|
|
.IP \(bu 2
|
|
\fBfixed\-columns\fP: boolean
|
|
Do not reduce the number of columns shown when number of visible elements is not enough to fill them all.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Each element is a \fB\fCbox\fR called \fB\fCelement\fR\&. Each \fB\fCelement\fR can contain an \fB\fCelement\-icon\fR and \fB\fCelement\-text\fR\&.
|
|
|
|
.SS listview text highlight:
|
|
.PP
|
|
The \fB\fCelement\-text\fR widget in the \fB\fClistview\fR is the one used to show the text.
|
|
On this widget set the \fB\fChighlight\fR property (only place this property is used) to change
|
|
the style of highlighting.
|
|
The \fB\fChighlight\fR property consist of the \fB\fCtext\-style\fR property and a color.
|
|
|
|
.PP
|
|
To disable highlighting:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element\-text {
|
|
highlight: None;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
To set to red underlined:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
element\-text {
|
|
highlight: underline red;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Layout
|
|
.PP
|
|
The new format allows the layout of the \fBrofi\fP 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.
|
|
|
|
.SS Basic structure
|
|
.PP
|
|
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
|
|
\[la]http://gtk.org/\[ra]\&.
|
|
|
|
.PP
|
|
The current layout of \fBrofi\fP is structured as follows:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ 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 │ │ │ │
|
|
│ │ │ └───────────────┘ └───────────────┘ └──────────────┘ └───────────────┘ │ │ │
|
|
│ │ └───────────────────────────────────────────────────────────────────────────┘ │ │
|
|
│ └───────────────────────────────────────────────────────────────────────────────┘ │
|
|
└────────────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
ci is the case\-indicator
|
|
.IP \(bu 2
|
|
fr is the num\-filtered\-rows
|
|
.IP \(bu 2
|
|
ns is the num\-rows
|
|
|
|
.RE
|
|
|
|
.RE
|
|
|
|
.SS Error message structure
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌──────────────────────────────────────────────────────────────────────────────────┐
|
|
│ window {BOX:vertical} │
|
|
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
|
|
│ │ error─message {BOX:vertical} │ │
|
|
│ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │
|
|
│ │ │ textbox │ │ │
|
|
│ │ └────────────────────────────────────────────────────────────────────────┘ │ │
|
|
│ └─────────────────────────────────────────────────────────────────────────────┘ │
|
|
└──────────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SS Advanced layout
|
|
.PP
|
|
The layout of \fBrofi\fP can be tweaked by packing the 'fixed' widgets in a custom structure.
|
|
|
|
.PP
|
|
The following widgets are fixed, as they provide core \fBrofi\fP functionality:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
prompt
|
|
.IP \(bu 2
|
|
entry
|
|
.IP \(bu 2
|
|
overlay
|
|
.IP \(bu 2
|
|
case\-indicator
|
|
.IP \(bu 2
|
|
message
|
|
.IP \(bu 2
|
|
listview
|
|
.IP \(bu 2
|
|
mode\-switcher
|
|
.IP \(bu 2
|
|
num\-rows
|
|
.IP \(bu 2
|
|
num\-filtered\-rows
|
|
|
|
.RE
|
|
|
|
.PP
|
|
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.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
mainbox
|
|
Packs: \fB\fCinputbar, message, listview, mode\-switcher\fR
|
|
.IP \(bu 2
|
|
inputbar
|
|
Packs: \fB\fCprompt,entry,case\-indicator\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Any widget name starting with \fB\fCtextbox\fR is a textbox widget, others are box widgets and can pack other widgets.
|
|
|
|
.PP
|
|
There are several special widgets that can be used by prefixing the name of the widget:
|
|
|
|
.SS textbox
|
|
.PP
|
|
This is a read\-only textbox widget. The displayed string can be set with \fB\fCcontent\fR\&.
|
|
|
|
.PP
|
|
Example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
textbox\-custom {
|
|
expand: false;
|
|
content: "My Message";
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SS Icon
|
|
.PP
|
|
This is an icon widget. The displayed icon can be set with \fB\fCfilename\fR and size with \fB\fCsize\fR\&.
|
|
If the property \fB\fCaction\fR is set, it acts as a button.
|
|
\fB\fCaction\fR can be set to a keybinding name and completes that action. (see rofi \-show keys for a list).
|
|
|
|
.PP
|
|
If the \fB\fCsquared\fR property is set to \fBfalse\fP the widget height and width are not forced to be equal.
|
|
|
|
.PP
|
|
Example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
icon\-paste {
|
|
expand: false;
|
|
filename: "gtk\-paste";
|
|
size: 24;
|
|
vertical\-align: 0.5;
|
|
action: "kb\-primary\-paste";
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SS button
|
|
.PP
|
|
This is a textbox widget that can have a 'clickable' action.
|
|
The \fB\fCaction\fR can be set to:
|
|
\fB\fCkeybinding\fR: accepts a keybinding name and completes that action. (see rofi \-show keys for a list).
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
button\-paste {
|
|
expand: false;
|
|
content: "My Clickable Message";
|
|
vertical\-align: 0.5;
|
|
action: "kb\-primary\-paste";
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SS Children
|
|
.PP
|
|
To specify children, set the \fB\fCchildren\fR
|
|
property (this always happens on the \fB\fCbox\fR child, see example below):
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
inputbar {
|
|
children: [prompt,entry,overlay,case\-indicator];
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The theme needs to be updated to match the hierarchy specified.
|
|
|
|
.PP
|
|
Below is an example of a theme emulating dmenu:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
* {
|
|
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;
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SS Padding and margin
|
|
.PP
|
|
Just like CSS, \fBrofi\fP uses the box model for each widget.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
│ margin │
|
|
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
│ │ border │ │
|
|
│ │ ┌────────────────────────────────────────────────────────┐ │ │
|
|
│ │ │ padding │ │ │
|
|
│ │ │ ┌────────────────────────────────────────────────────┐ │ │ │
|
|
│ │ │ │ content │ │ │ │
|
|
│ │ │ └────────────────────────────────────────────────────┘ │ │ │
|
|
│ │ └────────────────────────────────────────────────────────┘ │ │
|
|
│ └────────────────────────────────────────────────────────────┘ │
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Explanation of the different parts:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Content \- The content of the widget.
|
|
.IP \(bu 2
|
|
Padding \- Clears an area around the widget.
|
|
The padding shows the background color of the widget.
|
|
.IP \(bu 2
|
|
Border \- A border that goes around the padding and content.
|
|
The border use the border\-color of the widget.
|
|
.IP \(bu 2
|
|
Margin \- Clears an area outside the border.
|
|
The margin is transparent.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
The box model allows us to add a border around elements, and to define space between elements.
|
|
|
|
.PP
|
|
The size of each margin, border, and padding can be set.
|
|
For the border, a linestyle and radius can be set.
|
|
|
|
.SS Spacing
|
|
.PP
|
|
Widgets that can pack more then one child widget (currently box and listview) have the \fB\fCspacing\fR property.
|
|
This property sets the distance between the packed widgets (both horizontally and vertically).
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌───────────────────────────────────────┐
|
|
│ ┌────────┐ s ┌────────┐ s ┌────────┐ │
|
|
│ │ child │ p │ child │ p │ child │ │
|
|
│ │ │ a │ │ a │ │ │
|
|
│ │ │ c │ │ c │ │ │
|
|
│ │ │ i │ │ i │ │ │
|
|
│ │ │ n │ │ n │ │ │
|
|
│ └────────┘ g └────────┘ g └────────┘ │
|
|
└───────────────────────────────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SS Advanced box packing
|
|
.PP
|
|
More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
┌────────────────────────────────────────────────────┐
|
|
│ ┌───────────────┐ ┌────────┐ ┌───────────────┐ │
|
|
│ │ dummy │ │ child │ │ dummy │ │
|
|
│ │ expand: true; │ │ │ │ expand: true; │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ └───────────────┘ └────────┘ └───────────────┘ │
|
|
└────────────────────────────────────────────────────┘
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
If both dummy widgets are set to expand, \fB\fCchild\fR will be centered. Depending on the \fB\fCexpand\fR flag of child the
|
|
remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets
|
|
(expand disabled).
|
|
|
|
.SH DEBUGGING
|
|
.PP
|
|
To get debug information from the parser, run rofi like:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
G\_MESSAGES\_DEBUG=Parser rofi \-show run
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Syntax errors are shown in a popup and printed out to command line with the above command.
|
|
|
|
.PP
|
|
To see the elements queried during running, run:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
G\_MESSAGES\_DEBUG=Theme rofi \-show run
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
To test minor changes, part of the theme can be passed on the command line, for example to set it to full\-screen:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
rofi \-theme\-str 'window { fullscreen:true;}' \-show run
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Another syntax to modify theme properties is:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
rofi \-theme+window+fullscreen true \-show run
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
To print the current theme, run:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
rofi \-dump\-theme
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Media support
|
|
.PP
|
|
Parts of the theme can be conditionally loaded, like the CSS \fB\fC@media\fR option.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
@media ( min\-width: 120 ) {
|
|
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
It supports the following keys as constraint:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fCmin\-width\fR: load when width is bigger or equal then value.
|
|
.IP \(bu 2
|
|
\fB\fCmax\-width\fR: load when width is smaller then value.
|
|
.IP \(bu 2
|
|
\fB\fCmin\-height\fR: load when height is bigger or equal then value.
|
|
.IP \(bu 2
|
|
\fB\fCmax\-height\fR: load when height is smaller then value.
|
|
.IP \(bu 2
|
|
\fB\fCmin\-aspect\-ratio\fR load when aspect ratio is over value.
|
|
.IP \(bu 2
|
|
\fB\fCmax\-aspect\-ratio\fR: load when aspect ratio is under value.
|
|
.IP \(bu 2
|
|
\fB\fCmonitor\-id\fR: The monitor id, see rofi \-help for id's.
|
|
.IP \(bu 2
|
|
\fB\fCenabled\fR: Boolean option to enable. Supports environment variable.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
@media takes an integer number or a fraction, for integer number \fB\fCpx\fR can be added.
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
@media ( min\-width: 120 px ) {
|
|
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
@media ( enabled: env(DO\_LIGHT, false ) {
|
|
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Font Parsing
|
|
.PP
|
|
Rofi uses pango
|
|
\[la]https://pango.gnome.org/\[ra] for font rendering. The font should be specified in a format that pango
|
|
understands.
|
|
This normally is the font name followed by the font size. For example:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
mono 18
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Or
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
FontAwesome 22
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.SH Icon Handling
|
|
.PP
|
|
Rofi supports 3 ways of specifying an icon:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
Filename
|
|
.IP \(bu 2
|
|
icon\-name, this is looked up via the icon\-theme.
|
|
.IP \(bu 2
|
|
Markup String. It renders a string as an icon.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
For the first two options, GdkPixbuf is used to open and render the icons.
|
|
This in general gives support for most required image formats.
|
|
For the string option it uses Pango to render the string. The string needs to
|
|
start with a \fB\fC<span\fR tag, that allows you to set color and font.
|
|
|
|
.PP
|
|
Markup string:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
echo \-en "testing\\0icon\\x1f<span color='red'>⏻</span>" | ./rofi \-dmenu
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Getting supported icon formats:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
G\_MESSAGES\_DEBUG=Helpers.IconFetcher rofi
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
This uses the debug framework and prints out a list of supported image file
|
|
extensions.
|
|
|
|
.SH Multiple file handling
|
|
.PP
|
|
The rasi file format offers two methods of including other files.
|
|
This can be used to modify existing themes, or have multiple variations on a theme.
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
import: Import and parse a second file.
|
|
.IP \(bu 2
|
|
theme: Discard theme, and load file as a fresh theme.
|
|
|
|
.RE
|
|
|
|
.PP
|
|
Syntax:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
@import "myfile"
|
|
@theme "mytheme"
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
The specified file can either by \fIname\fP, \fIfilename\fP,\fIfull path\fP\&.
|
|
|
|
.PP
|
|
If a filename is provided, it will try to resolve it in the following order:
|
|
|
|
.RS
|
|
.IP \(bu 2
|
|
\fB\fC${XDG\_CONFIG\_HOME}/rofi/themes/\fR
|
|
.IP \(bu 2
|
|
\fB\fC${XDG\_CONFIG\_HOME}/rofi/\fR
|
|
.IP \(bu 2
|
|
\fB\fC${XDG\_DATA\_HOME}/rofi/themes/\fR
|
|
.IP \(bu 2
|
|
\fB\fC${INSTALL PREFIX}/share/rofi/themes/\fR
|
|
|
|
.RE
|
|
|
|
.PP
|
|
A name is resolved as a filename by appending the \fB\fC\&.rasi\fR extension.
|
|
|
|
.SH EXAMPLES
|
|
.PP
|
|
Several examples are installed together with \fBrofi\fP\&. These can be found in \fB\fC{datadir}/rofi/themes/\fR, where
|
|
\fB\fC{datadir}\fR is the install path of \fBrofi\fP data. When installed using a package manager, this is usually: \fB\fC/usr/share/\fR\&.
|
|
|
|
.SH SEE ALSO
|
|
.PP
|
|
rofi(1), rofi\-script(5), rofi\-theme\-selector(1)
|