rofi/search/search_index.json

1 line
1.3 MiB

{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Welcome to Rofi Documentation This website holds the web-version of the manpages for rofi and several guides that have been published over the past years. The manpages are grouped on rofi version. Downloads Installation Themes User scripts (wiki) Development version Rofi manpage Themes Dmenu Script Debugging Keys Stable Rofi manpage Themes Dmenu Script Debugging Keys Guides Transparency Positioning Plugins Dynamic Theme","title":"Home"},{"location":"#welcome-to-rofi-documentation","text":"This website holds the web-version of the manpages for rofi and several guides that have been published over the past years. The manpages are grouped on rofi version. Downloads Installation Themes User scripts (wiki)","title":"Welcome to Rofi Documentation"},{"location":"#development-version","text":"Rofi manpage Themes Dmenu Script Debugging Keys","title":"Development version"},{"location":"#stable","text":"Rofi manpage Themes Dmenu Script Debugging Keys","title":"Stable"},{"location":"#guides","text":"Transparency Positioning Plugins Dynamic Theme","title":"Guides"},{"location":"CONFIG/","text":"This page does not describe all of ROFI 's configuration options, just the most common usecase. For the full configuration options, check the manpages. Where does the configuration live Rofi's configurations, custom themes live in ${XDG_CONFIG_HOME}/rofi/ , on most systems this is ~/.config/rofi/ . The name of the main configuration file is config.rasi . ( ~/.config/rofi/config.rasi ). Create an empty configuration file Open ~/.config/rofi/config.rasi in your favorite text editor and add the following block: configuration { } You can now set the options in the configuration block. Create a configuration file from current setup If you do not want to start from scratch, or want to migrate from older configuration format, you can get tell rofi to dumps it configuration: rofi -dump-config > ~/.config/rofi/config.rasi This will have all the possible settings and their current value. If a value is the default value, the entry will be commented. For example: configuration { /* modes: \"window,run,ssh,drun\";*/ /* font: \"mono 12\";*/ /* location: 0;*/ /* yoffset: 0;*/ /* xoffset: 0;*/ /* fixed-num-lines: true;*/ ... cut ... /* ml-row-down: \"ScrollDown\";*/ /* me-select-entry: \"MousePrimary\";*/ /* me-accept-entry: \"MouseDPrimary\";*/ /* me-accept-custom: \"Control+MouseDPrimary\";*/ } To create a copy of the current theme, you can run: rofi -dump-theme > ~/.config/rofi/current.rasi Configuration file format 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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ; Data types ROFI 's configuration supports several data formats: String A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: ml-row-down: \"ScrollDown\"; Number An integer may contain any full number. For example: eh: 2; Boolean Boolean value is either true or false . This is case-sensitive. For example: show-icons: true; This is equal to the -show-icons option on the commandline, and show-icons: false; is equal to -no-show-icons . Character Character value is always surrounded by single quotes (') and should contain a single character. It supports escaping. matching-negate-char: '-'; List This is not supported by the old configuration system, but can be used in the rasi format. A list starts with a '[' and ends with a ']'. The entries in the list are comma-separated. The entry in the list single ASCII words. combi-modes: [window,drun]; For older versions you have : combi-modes: \"window,drun\"; Get a list of all possible options There are 2 ways to get a list of all options: Dump the configuration file explained above. ( rofi -dump-config ) Look at output of rofi -h . To see what values an option support check the manpage, it describes most of them. NOTE: not all options might be in the manpage, as options can be added at run-time. (f.e. by plugins). Splitting configuration over multiple files It is possible to split configuration over multiple files using imports. For example in ~/.config/rofi/config.rasi configuration { } @import \"myConfig\" @theme \"MyTheme\" Rofi will first parse the config block in ~/.config/rofi/config.rasi , then parse ~/.config/rofi/myConfig.rasi and then load the theme myTheme . More information can be obtained from the rofi-theme(5) manpage. Imports can be nested.","title":"Configuration"},{"location":"CONFIG/#where-does-the-configuration-live","text":"Rofi's configurations, custom themes live in ${XDG_CONFIG_HOME}/rofi/ , on most systems this is ~/.config/rofi/ . The name of the main configuration file is config.rasi . ( ~/.config/rofi/config.rasi ).","title":"Where does the configuration live"},{"location":"CONFIG/#create-an-empty-configuration-file","text":"Open ~/.config/rofi/config.rasi in your favorite text editor and add the following block: configuration { } You can now set the options in the configuration block.","title":"Create an empty configuration file"},{"location":"CONFIG/#create-a-configuration-file-from-current-setup","text":"If you do not want to start from scratch, or want to migrate from older configuration format, you can get tell rofi to dumps it configuration: rofi -dump-config > ~/.config/rofi/config.rasi This will have all the possible settings and their current value. If a value is the default value, the entry will be commented. For example: configuration { /* modes: \"window,run,ssh,drun\";*/ /* font: \"mono 12\";*/ /* location: 0;*/ /* yoffset: 0;*/ /* xoffset: 0;*/ /* fixed-num-lines: true;*/ ... cut ... /* ml-row-down: \"ScrollDown\";*/ /* me-select-entry: \"MousePrimary\";*/ /* me-accept-entry: \"MouseDPrimary\";*/ /* me-accept-custom: \"Control+MouseDPrimary\";*/ } To create a copy of the current theme, you can run: rofi -dump-theme > ~/.config/rofi/current.rasi","title":"Create a configuration file from current setup"},{"location":"CONFIG/#configuration-file-format","text":"","title":"Configuration file format"},{"location":"CONFIG/#encoding","text":"The encoding of the file is utf-8. Both Unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But Unix is preferred.","title":"Encoding"},{"location":"CONFIG/#comments","text":"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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"CONFIG/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"CONFIG/#data-types","text":"ROFI 's configuration supports several data formats:","title":"Data types"},{"location":"CONFIG/#string","text":"A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: ml-row-down: \"ScrollDown\";","title":"String"},{"location":"CONFIG/#number","text":"An integer may contain any full number. For example: eh: 2;","title":"Number"},{"location":"CONFIG/#boolean","text":"Boolean value is either true or false . This is case-sensitive. For example: show-icons: true; This is equal to the -show-icons option on the commandline, and show-icons: false; is equal to -no-show-icons .","title":"Boolean"},{"location":"CONFIG/#character","text":"Character value is always surrounded by single quotes (') and should contain a single character. It supports escaping. matching-negate-char: '-';","title":"Character"},{"location":"CONFIG/#list","text":"This is not supported by the old configuration system, but can be used in the rasi format. A list starts with a '[' and ends with a ']'. The entries in the list are comma-separated. The entry in the list single ASCII words. combi-modes: [window,drun]; For older versions you have : combi-modes: \"window,drun\";","title":"List"},{"location":"CONFIG/#get-a-list-of-all-possible-options","text":"There are 2 ways to get a list of all options: Dump the configuration file explained above. ( rofi -dump-config ) Look at output of rofi -h . To see what values an option support check the manpage, it describes most of them. NOTE: not all options might be in the manpage, as options can be added at run-time. (f.e. by plugins).","title":"Get a list of all possible options"},{"location":"CONFIG/#splitting-configuration-over-multiple-files","text":"It is possible to split configuration over multiple files using imports. For example in ~/.config/rofi/config.rasi configuration { } @import \"myConfig\" @theme \"MyTheme\" Rofi will first parse the config block in ~/.config/rofi/config.rasi , then parse ~/.config/rofi/myConfig.rasi and then load the theme myTheme . More information can be obtained from the rofi-theme(5) manpage. Imports can be nested.","title":"Splitting configuration over multiple files"},{"location":"COPYING/","text":"MIT/X11 License Modified 2013-2023 Qball Cow qball@gmpclient.org Copyright (c) 2012 Sean Pringle sean.pringle@gmail.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"INSTALL/","text":"Installation guide This guide explains how to install rofi using its build system and how you can make debug builds. Rofi uses autotools (GNU Build system), for more information see here . You can also use Meson as an alternative. DEPENDENCY For building C compiler that supports the c99 standard. (gcc or clang) make autoconf automake (1.11.3 or up) pkg-config flex 2.5.39 or higher bison check (Can be disabled using the --disable-check configure flag) check is used for build-time tests and does not affect functionality. Developer packages of the external libraries glib-compile-resources External libraries libpango >= 1.50 libpangocairo libcairo libcairo-xcb libglib2.0 >= 2.72 gmodule-2.0 gio-unix-2.0 libgdk-pixbuf-2.0 libstartup-notification-1.0 libxkbcommon >= 0.4.1 libxkbcommon-x11 libxcb (sometimes split, you need libxcb, libxcb-xkb and libxcb-randr libxcb-xinerama) xcb-util xcb-util-wm (sometimes split as libxcb-ewmh and libxcb-icccm) xcb-util-cursor xcb-imdkit (optional, 1.0.3 or up preferred) On debian based systems, the developer packages are in the form of: <package>-dev on rpm based <package>-devel . Install from a release When downloading from the github release page, make sure to grab the archive rofi-{version}.tar.[g|x]z . The auto-attached files source code (zip|tar.gz) by github do not contain a valid release. It misses a setup build system and includes irrelevant files. Autotools Create a build directory and enter it: mkdir build && cd build Check dependencies and configure build system: ../configure Build Rofi: make The actual install, execute as root (if needed): make install The default installation prefix is: /usr/local/ use ./configure --prefix={prefix} to install into another location. Meson Check dependencies and configure build system: meson setup build Build Rofi: ninja -C build The actual install, execute as root (if needed): ninja -C build install The default installation prefix is: /usr/local/ use meson setup build --prefix={prefix} to install into another location. Install a checkout from git The GitHub Pages version of these directions may be out of date. Please use INSTALL.md from the online repo or your local repository. If you don't have a checkout: git clone --recursive https://github.com/DaveDavenport/rofi cd rofi/ If you already have a checkout: cd rofi/ git pull git submodule update --init For Autotools you have an extra step, to generate build system: autoreconf -i From this point, use the same steps you use for a release. Options for configure When you run the configure step there are several options you can configure. For Autotools, you can see the full list with ./configure --help . For Meson, before the initial setup, you can see rofi options in meson_options.txt and Meson options with meson setup --help . Meson's built-in options can be set using regular command line arguments, like so: meson setup build --option=value . Rofi-specific options can be set using the -D argument, like so: meson setup build -Doption=value . After the build dir is set up by meson setup build , the meson configure build command can be used to configure options, by the same means. The most useful one to set is the installation prefix: # Autotools ../configure --prefix=<installation path> # Meson meson setup build --prefix <installation path> f.e. # Autotools ../configure --prefix=/usr/ # Meson meson setup build --prefix /usr Install locally or to install locally: # Autotools ../configure --prefix=${HOME}/.local/ # Meson meson setup build --prefix ${HOME}/.local Options for make When you run make you can tweak the build process a little. Verbose output Show the commands called: # Autotools make V=1 # Meson ninja -C build -v Debug build Compile with debug symbols and no optimization, this is useful for making backtraces: # Autotools make CFLAGS=\"-O0 -g3\" clean rofi # Meson meson configure build --debug ninja -C build Get a backtrace Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. # Autotools gdb rofi core # Meson (because it uses a separate build directory) gdb build/rofi core Where the core file is located and what its exact name is different on each distributions. Please consult the relevant documentation. For more information see the rofi-debugging(5) manpage. Install distribution Debian or Ubuntu apt install rofi Fedora dnf install rofi ArchLinux pacman -S rofi Gentoo An ebuild is available, x11-misc/rofi . It's up to date, but you may need to enable ~arch to get the latest release: echo 'x11-misc/rofi ~amd64' >> /etc/portage/package.accept_keywords for amd64 or: echo 'x11-misc/rofi ~x86' >> /etc/portage/package.accept_keywords for i386. To install it, simply issue emerge rofi . openSUSE On both openSUSE Leap and openSUSE Tumbleweed rofi can be installed using: sudo zypper install rofi FreeBSD sudo pkg install rofi macOS On macOS rofi can be installed via MacPorts : sudo port install rofi","title":"Installation"},{"location":"INSTALL/#installation-guide","text":"This guide explains how to install rofi using its build system and how you can make debug builds. Rofi uses autotools (GNU Build system), for more information see here . You can also use Meson as an alternative.","title":"Installation guide"},{"location":"INSTALL/#dependency","text":"","title":"DEPENDENCY"},{"location":"INSTALL/#for-building","text":"C compiler that supports the c99 standard. (gcc or clang) make autoconf automake (1.11.3 or up) pkg-config flex 2.5.39 or higher bison check (Can be disabled using the --disable-check configure flag) check is used for build-time tests and does not affect functionality. Developer packages of the external libraries glib-compile-resources","title":"For building"},{"location":"INSTALL/#external-libraries","text":"libpango >= 1.50 libpangocairo libcairo libcairo-xcb libglib2.0 >= 2.72 gmodule-2.0 gio-unix-2.0 libgdk-pixbuf-2.0 libstartup-notification-1.0 libxkbcommon >= 0.4.1 libxkbcommon-x11 libxcb (sometimes split, you need libxcb, libxcb-xkb and libxcb-randr libxcb-xinerama) xcb-util xcb-util-wm (sometimes split as libxcb-ewmh and libxcb-icccm) xcb-util-cursor xcb-imdkit (optional, 1.0.3 or up preferred) On debian based systems, the developer packages are in the form of: <package>-dev on rpm based <package>-devel .","title":"External libraries"},{"location":"INSTALL/#install-from-a-release","text":"When downloading from the github release page, make sure to grab the archive rofi-{version}.tar.[g|x]z . The auto-attached files source code (zip|tar.gz) by github do not contain a valid release. It misses a setup build system and includes irrelevant files.","title":"Install from a release"},{"location":"INSTALL/#autotools","text":"Create a build directory and enter it: mkdir build && cd build Check dependencies and configure build system: ../configure Build Rofi: make The actual install, execute as root (if needed): make install The default installation prefix is: /usr/local/ use ./configure --prefix={prefix} to install into another location.","title":"Autotools"},{"location":"INSTALL/#meson","text":"Check dependencies and configure build system: meson setup build Build Rofi: ninja -C build The actual install, execute as root (if needed): ninja -C build install The default installation prefix is: /usr/local/ use meson setup build --prefix={prefix} to install into another location.","title":"Meson"},{"location":"INSTALL/#install-a-checkout-from-git","text":"The GitHub Pages version of these directions may be out of date. Please use INSTALL.md from the online repo or your local repository. If you don't have a checkout: git clone --recursive https://github.com/DaveDavenport/rofi cd rofi/ If you already have a checkout: cd rofi/ git pull git submodule update --init For Autotools you have an extra step, to generate build system: autoreconf -i From this point, use the same steps you use for a release.","title":"Install a checkout from git"},{"location":"INSTALL/#options-for-configure","text":"When you run the configure step there are several options you can configure. For Autotools, you can see the full list with ./configure --help . For Meson, before the initial setup, you can see rofi options in meson_options.txt and Meson options with meson setup --help . Meson's built-in options can be set using regular command line arguments, like so: meson setup build --option=value . Rofi-specific options can be set using the -D argument, like so: meson setup build -Doption=value . After the build dir is set up by meson setup build , the meson configure build command can be used to configure options, by the same means. The most useful one to set is the installation prefix: # Autotools ../configure --prefix=<installation path> # Meson meson setup build --prefix <installation path> f.e. # Autotools ../configure --prefix=/usr/ # Meson meson setup build --prefix /usr","title":"Options for configure"},{"location":"INSTALL/#install-locally","text":"or to install locally: # Autotools ../configure --prefix=${HOME}/.local/ # Meson meson setup build --prefix ${HOME}/.local","title":"Install locally"},{"location":"INSTALL/#options-for-make","text":"When you run make you can tweak the build process a little.","title":"Options for make"},{"location":"INSTALL/#verbose-output","text":"Show the commands called: # Autotools make V=1 # Meson ninja -C build -v","title":"Verbose output"},{"location":"INSTALL/#debug-build","text":"Compile with debug symbols and no optimization, this is useful for making backtraces: # Autotools make CFLAGS=\"-O0 -g3\" clean rofi # Meson meson configure build --debug ninja -C build","title":"Debug build"},{"location":"INSTALL/#get-a-backtrace","text":"Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. # Autotools gdb rofi core # Meson (because it uses a separate build directory) gdb build/rofi core Where the core file is located and what its exact name is different on each distributions. Please consult the relevant documentation. For more information see the rofi-debugging(5) manpage.","title":"Get a backtrace"},{"location":"INSTALL/#install-distribution","text":"","title":"Install distribution"},{"location":"INSTALL/#debian-or-ubuntu","text":"apt install rofi","title":"Debian or Ubuntu"},{"location":"INSTALL/#fedora","text":"dnf install rofi","title":"Fedora"},{"location":"INSTALL/#archlinux","text":"pacman -S rofi","title":"ArchLinux"},{"location":"INSTALL/#gentoo","text":"An ebuild is available, x11-misc/rofi . It's up to date, but you may need to enable ~arch to get the latest release: echo 'x11-misc/rofi ~amd64' >> /etc/portage/package.accept_keywords for amd64 or: echo 'x11-misc/rofi ~x86' >> /etc/portage/package.accept_keywords for i386. To install it, simply issue emerge rofi .","title":"Gentoo"},{"location":"INSTALL/#opensuse","text":"On both openSUSE Leap and openSUSE Tumbleweed rofi can be installed using: sudo zypper install rofi","title":"openSUSE"},{"location":"INSTALL/#freebsd","text":"sudo pkg install rofi","title":"FreeBSD"},{"location":"INSTALL/#macos","text":"On macOS rofi can be installed via MacPorts : sudo port install rofi","title":"macOS"},{"location":"downloads/","text":"Downloads Development For development no tarball is released. Please follow the Installation instructions for obtaining and compiling development version. 1.7.5 tar.gz tar.xz 1.7.4 tar.gz tar.xz 1.7.3 tar.gz tar.xz 1.7.2 tar.gz tar.xz 1.7.1 tar.gz tar.xz 1.7.0 tar.gz tar.xz","title":"Downloads"},{"location":"downloads/#downloads","text":"","title":"Downloads"},{"location":"downloads/#development","text":"For development no tarball is released. Please follow the Installation instructions for obtaining and compiling development version.","title":"Development"},{"location":"downloads/#175","text":"tar.gz tar.xz","title":"1.7.5"},{"location":"downloads/#174","text":"tar.gz tar.xz","title":"1.7.4"},{"location":"downloads/#173","text":"tar.gz tar.xz","title":"1.7.3"},{"location":"downloads/#172","text":"tar.gz tar.xz","title":"1.7.2"},{"location":"downloads/#171","text":"tar.gz tar.xz","title":"1.7.1"},{"location":"downloads/#170","text":"tar.gz tar.xz","title":"1.7.0"},{"location":"1.7.0/rofi-script.5/","text":"ROFI-SCRIPT 5 rofi-script NAME rofi script mode - Rofi format for scriptable modi. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modi \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"1.7.0/rofi-script.5/#rofi-script-5-rofi-script","text":"","title":"ROFI-SCRIPT 5 rofi-script"},{"location":"1.7.0/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable modi.","title":"NAME"},{"location":"1.7.0/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"1.7.0/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modi \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"1.7.0/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"1.7.0/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"1.7.0/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"1.7.0/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"1.7.0/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow.","title":"Passing mode options"},{"location":"1.7.0/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"1.7.0/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"1.7.0/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"1.7.0/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.0/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.0/rofi-theme.5/","text":"ROFI-THEME 5 rofi-theme NAME rofi-theme - Rofi theme format files 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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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. /* 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: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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: font: \"Awasome 12\"; The string must be valid UTF-8. Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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: 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: 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: highlight: bold @pink; But this is: * { myhigh: bold #FAA; } window { highlight: @myhigh; } 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. * { background-color: ${BG}; } Inherit Format: inherit Inherits the property from its parent widget. 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: 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: 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: 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: element-text { highlight: None; } To set to red underlined: 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 . 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 | | | | |-----------------------------------------------------------------------------| | | | | | | | |---------------------------------------------------------------------------| | | | | | 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 | | | | | | |-----------------| |-------------------------------------------------| | | | | | | |element-icon | |element-text | | | | | | | |-----------------| |-------------------------------------------------| | | | | | |-------------------------------------------------------------------------| | | | |------------------------------------------------------------------------------| | |-----------------------------------------------------------------------------------| 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: 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: 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). 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): 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: * { 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 | | | | | | c | | c | | | | | | i | | i | | | | | | n | | n | | | | |--------| g |--------| g |-------| | |---------------------------------------| Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: |--------------------------------------------| | |-----------| |--------| |-----------| | | | dummy | | child | | dummy | | | | expand: y | | | | expand: y | | | | | | | | | | | | | | | | | | | | | | | | | | | |-----------| |--------| |-----------| | |--------------------------------------------| If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). DEBUGGING To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension. EXAMPLES Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"1.7.0/rofi-theme.5/#rofi-theme-5-rofi-theme","text":"","title":"ROFI-THEME 5 rofi-theme"},{"location":"1.7.0/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"1.7.0/rofi-theme.5/#description","text":"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.","title":"DESCRIPTION"},{"location":"1.7.0/rofi-theme.5/#format-specification","text":"","title":"FORMAT SPECIFICATION"},{"location":"1.7.0/rofi-theme.5/#encoding","text":"The encoding of the file is utf-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"1.7.0/rofi-theme.5/#comments","text":"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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"1.7.0/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"1.7.0/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation.","title":"File extension"},{"location":"1.7.0/rofi-theme.5/#basic-structure","text":"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. /* 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.","title":"Basic Structure"},{"location":"1.7.0/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"1.7.0/rofi-theme.5/#element-theme-section","text":"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: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"1.7.0/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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.","title":"Properties Format"},{"location":"1.7.0/rofi-theme.5/#string","text":"Format: \"[:print:]+\" A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8.","title":"String"},{"location":"1.7.0/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"1.7.0/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"1.7.0/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"1.7.0/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"1.7.0/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"1.7.0/rofi-theme.5/#text-style","text":"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.","title":"Text style"},{"location":"1.7.0/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"1.7.0/rofi-theme.5/#distance","text":"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: 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.","title":"Distance"},{"location":"1.7.0/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: 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.","title":"Calculating sizes"},{"location":"1.7.0/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"1.7.0/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"1.7.0/rofi-theme.5/#position","text":"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","title":"Position"},{"location":"1.7.0/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"1.7.0/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { myhigh: bold #FAA; } window { highlight: @myhigh; }","title":"Reference"},{"location":"1.7.0/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"1.7.0/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"1.7.0/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"1.7.0/rofi-theme.5/#environment-variable","text":"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. * { background-color: ${BG}; }","title":"Environment variable"},{"location":"1.7.0/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"1.7.0/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"ELEMENTS PATHS"},{"location":"1.7.0/rofi-theme.5/#supported-element-path","text":"","title":"SUPPORTED ELEMENT PATH"},{"location":"1.7.0/rofi-theme.5/#name_1","text":"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.","title":"Name"},{"location":"1.7.0/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"1.7.0/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example:"},{"location":"1.7.0/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox:"},{"location":"1.7.0/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"1.7.0/rofi-theme.5/#supported-properties","text":"The following properties are currently supported:","title":"SUPPORTED PROPERTIES"},{"location":"1.7.0/rofi-theme.5/#all-widgets","text":"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.","title":"all widgets:"},{"location":"1.7.0/rofi-theme.5/#window","text":"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","title":"window:"},{"location":"1.7.0/rofi-theme.5/#scrollbar_1","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar:"},{"location":"1.7.0/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box:"},{"location":"1.7.0/rofi-theme.5/#textbox","text":"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.","title":"textbox:"},{"location":"1.7.0/rofi-theme.5/#listview","text":"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 .","title":"listview:"},{"location":"1.7.0/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight:"},{"location":"1.7.0/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"1.7.0/rofi-theme.5/#basic-structure_1","text":"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 . 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 | | | | |-----------------------------------------------------------------------------| | | | | | | | |---------------------------------------------------------------------------| | | | | | mode-switcher {BOX:horizontal} | | | | | | |---------------| |---------------| |--------------| |---------------| | | | | | | | Button | | Button | | Button | | Button | | | | | | | |---------------| |---------------| |--------------| |---------------| | | | | | |---------------------------------------------------------------------------| | | | |-------------------------------------------------------------------------------| | |------------------------------------------------------------------------------------| ci is the case-indicator fr is the num-filtered-rows ns is the num-rows","title":"Basic structure"},{"location":"1.7.0/rofi-theme.5/#error-message-structure","text":"|-----------------------------------------------------------------------------------| | window {BOX:vertical} | | |------------------------------------------------------------------------------| | | | error-message {BOX:vertical} | | | | |-------------------------------------------------------------------------| | | | | | textbox | | | | | | |-----------------| |-------------------------------------------------| | | | | | | |element-icon | |element-text | | | | | | | |-----------------| |-------------------------------------------------| | | | | | |-------------------------------------------------------------------------| | | | |------------------------------------------------------------------------------| | |-----------------------------------------------------------------------------------|","title":"Error message structure"},{"location":"1.7.0/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"1.7.0/rofi-theme.5/#textbox_1","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"textbox"},{"location":"1.7.0/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"1.7.0/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"1.7.0/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"1.7.0/rofi-theme.5/#padding-and-margin","text":"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.","title":"Padding and margin"},{"location":"1.7.0/rofi-theme.5/#spacing","text":"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 | | | | | | c | | c | | | | | | i | | i | | | | | | n | | n | | | | |--------| g |--------| g |-------| | |---------------------------------------|","title":"Spacing"},{"location":"1.7.0/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: |--------------------------------------------| | |-----------| |--------| |-----------| | | | dummy | | child | | dummy | | | | expand: y | | | | expand: y | | | | | | | | | | | | | | | | | | | | | | | | | | | |-----------| |--------| |-----------| | |--------------------------------------------| If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"1.7.0/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run To print the current theme, run: rofi -dump-theme","title":"DEBUGGING"},{"location":"1.7.0/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { }","title":"Media support"},{"location":"1.7.0/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22","title":"Font Parsing"},{"location":"1.7.0/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"1.7.0/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"EXAMPLES"},{"location":"1.7.0/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.0/rofi.1/","text":"ROFI 1 rofi NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modi for different types of actions. rofi can also function as (drop-in) replacement for dmenu(1) . Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the run dialog: rofi -show run Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see KEY BINDINGS ) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modi is shown. -modi mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modi \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modi \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modi \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -fallback-application-icon Specify an icon to be used when the application icon in run/drun are not yet loaded or is not available. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines (See the -lines option.) -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modi option) To show sidebar, use: rofi -show run -sidebar-mode -lines 0 -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } Combi settings -combi-modi mode1 , mode2 The modi to combine in combi mode. For syntax to -combi-modi , see -modi . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modi \"window,run,ssh\" -modi combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. History and Sorting -disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Dmenu specific -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -lines 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -async-pre-read number Reads the first number entries blocking, then switches to async mode. This makes it feel more 'snappy'. default : 25 -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } } Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal-emulator) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) DMENU REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS rofi has the following key bindings: Control-v, Insert : Paste from clipboard Control-Shift-v, Shift-Insert : Paste primary selection Control-u : Clear the line Control-a : Beginning of line Control-e : End of line Control-f, Right : Forward one character Alt-f, Control-Right : Forward one word Control-b, Left : Back one character Alt-b, Control-Left : Back one word Control-d, Delete : Delete character Control-Alt-d : Delete word Control-h, Backspace, Shift-Backspace : Backspace (delete previous character) Control-Alt-h : Delete previous word Control-j,Control-m,Enter : Accept entry Control-n,Down : Select next entry Control-p,Up : Select previous entry Page Up : Go to previous page Page Down : Go to next page Control-Page Up : Go to previous column Control-Page Down : Go to next column Control-Enter : Use entered text as a command (in ssh/run modi ) Shift-Enter : Launch the application in a terminal (in run mode) Control-Shift-Enter : As Control-Enter and run the command in terminal (in run mode) Shift-Enter : Return the selected entry and move to the next item while keeping rofi open. (in dmenu) Shift-Right : Switch to the next mode. The list can be customized with the -modi argument. Shift-Left : Switch to the previous mode. The list can be customized with the -modi argument. Control-Tab : Switch to the next mode. The list can be customized with the -modi argument. Control-Shift-Tab : Switch to the previous mode. The list can be customized with the -modi argument. Control-space : Set selected item as input text. Shift-Del : Delete entry from history. grave : Toggle case sensitivity. Alt-grave : Toggle sorting. Alt-Shift-S : Take a screenshot and store it in the Pictures directory. Control-l : File complete for run dialog. This list might not be complete, to get a full list of all key bindings supported in your rofi, see rofi -h . The options starting with -kb are keybindings. Key bindings can be modified using the configuration systems. Multiple keys can be bound to one action by comma separating them. For example -kb-primary-paste \"Conctrol+v,Insert\" To get a searchable list of key bindings, run rofi -show keys . A key binding starting with ! will act when all keys have been released. Available Modi window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modi to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modi in one list. Specify which modi are included with the -combi-modi option. When using the combi mode, a !bang can be used to filter the results by modi. All modi that match the bang as a prefix are included. For example, say you have specified -combi-modi run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modi are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modi. FAQ The text in the window switcher is not nicely aligned. Try using a mono-space font. The window is completely black. Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\" EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modi run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modi run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modi combi -show combi -combi-modi run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modi combi,window -show combi -combi-modi run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys Use qalc to get a simple calculator in rofi : rofi -show calc -modi \"calc:qalc +u8 -nocurrencies\" i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat), DEBUGGING To debug, it is smart to first try disabling your custom configuration: -no-config Disable parsing of configuration. This runs rofi in stock mode. If you run custom C plugins, you can disable them using: -no-plugins Disables the loading of plugins. To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Dialogs.DMenu: The dmenu mode. Dialogs.Run: The run mode. Dialogs.DRun: The desktop file run mode. Dialogs.Window: The window mode. Dialogs.Script: The script mode. Dialogs.Combi: The script mode. Dialogs.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. The output of this can provide useful information when writing an issue. More information (possibly outdated) see this wiki entry. ISSUE TRACKER The rofi issue tracker can be found here When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-theme(5) , rofi-script(5) , rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"1.7.0/rofi.1/#rofi-1-rofi","text":"","title":"ROFI 1 rofi"},{"location":"1.7.0/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"1.7.0/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"1.7.0/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"1.7.0/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modi for different types of actions. rofi can also function as (drop-in) replacement for dmenu(1) .","title":"USAGE"},{"location":"1.7.0/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the run dialog: rofi -show run","title":"Running rofi"},{"location":"1.7.0/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"Emulating dmenu"},{"location":"1.7.0/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"1.7.0/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"1.7.0/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see KEY BINDINGS ) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modi is shown. -modi mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modi \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modi \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modi \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -fallback-application-icon Specify an icon to be used when the application icon in run/drun are not yet loaded or is not available. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched.","title":"General"},{"location":"1.7.0/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"1.7.0/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines (See the -lines option.) -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modi option) To show sidebar, use: rofi -show run -sidebar-mode -lines 0 -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"1.7.0/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"1.7.0/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"1.7.0/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"1.7.0/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } }","title":"Window switcher settings"},{"location":"1.7.0/rofi.1/#combi-settings","text":"-combi-modi mode1 , mode2 The modi to combine in combi mode. For syntax to -combi-modi , see -modi . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modi \"window,run,ssh\" -modi combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator.","title":"Combi settings"},{"location":"1.7.0/rofi.1/#history-and-sorting","text":"-disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History and Sorting"},{"location":"1.7.0/rofi.1/#dmenu-specific","text":"-sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -lines 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -async-pre-read number Reads the first number entries blocking, then switches to async mode. This makes it feel more 'snappy'. default : 25 -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible.","title":"Dmenu specific"},{"location":"1.7.0/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line.","title":"Message dialog"},{"location":"1.7.0/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } }","title":"File browser settings"},{"location":"1.7.0/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled","title":"Other"},{"location":"1.7.0/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal-emulator) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command )","title":"PATTERN"},{"location":"1.7.0/rofi.1/#dmenu-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU REPLACEMENT"},{"location":"1.7.0/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"1.7.0/rofi.1/#key-bindings","text":"rofi has the following key bindings: Control-v, Insert : Paste from clipboard Control-Shift-v, Shift-Insert : Paste primary selection Control-u : Clear the line Control-a : Beginning of line Control-e : End of line Control-f, Right : Forward one character Alt-f, Control-Right : Forward one word Control-b, Left : Back one character Alt-b, Control-Left : Back one word Control-d, Delete : Delete character Control-Alt-d : Delete word Control-h, Backspace, Shift-Backspace : Backspace (delete previous character) Control-Alt-h : Delete previous word Control-j,Control-m,Enter : Accept entry Control-n,Down : Select next entry Control-p,Up : Select previous entry Page Up : Go to previous page Page Down : Go to next page Control-Page Up : Go to previous column Control-Page Down : Go to next column Control-Enter : Use entered text as a command (in ssh/run modi ) Shift-Enter : Launch the application in a terminal (in run mode) Control-Shift-Enter : As Control-Enter and run the command in terminal (in run mode) Shift-Enter : Return the selected entry and move to the next item while keeping rofi open. (in dmenu) Shift-Right : Switch to the next mode. The list can be customized with the -modi argument. Shift-Left : Switch to the previous mode. The list can be customized with the -modi argument. Control-Tab : Switch to the next mode. The list can be customized with the -modi argument. Control-Shift-Tab : Switch to the previous mode. The list can be customized with the -modi argument. Control-space : Set selected item as input text. Shift-Del : Delete entry from history. grave : Toggle case sensitivity. Alt-grave : Toggle sorting. Alt-Shift-S : Take a screenshot and store it in the Pictures directory. Control-l : File complete for run dialog. This list might not be complete, to get a full list of all key bindings supported in your rofi, see rofi -h . The options starting with -kb are keybindings. Key bindings can be modified using the configuration systems. Multiple keys can be bound to one action by comma separating them. For example -kb-primary-paste \"Conctrol+v,Insert\" To get a searchable list of key bindings, run rofi -show keys . A key binding starting with ! will act when all keys have been released.","title":"KEY BINDINGS"},{"location":"1.7.0/rofi.1/#available-modi","text":"","title":"Available Modi"},{"location":"1.7.0/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"1.7.0/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"1.7.0/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"1.7.0/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"1.7.0/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"1.7.0/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"1.7.0/rofi.1/#script","text":"Allows custom scripted Modi to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"1.7.0/rofi.1/#combi","text":"Combines multiple modi in one list. Specify which modi are included with the -combi-modi option. When using the combi mode, a !bang can be used to filter the results by modi. All modi that match the bang as a prefix are included. For example, say you have specified -combi-modi run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modi are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modi.","title":"combi"},{"location":"1.7.0/rofi.1/#faq","text":"","title":"FAQ"},{"location":"1.7.0/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font.","title":"The text in the window switcher is not nicely aligned."},{"location":"1.7.0/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black."},{"location":"1.7.0/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"1.7.0/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modi run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modi run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modi combi -show combi -combi-modi run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modi combi,window -show combi -combi-modi run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys Use qalc to get a simple calculator in rofi : rofi -show calc -modi \"calc:qalc +u8 -nocurrencies\"","title":"EXAMPLES"},{"location":"1.7.0/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"1.7.0/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"1.7.0/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"1.7.0/rofi.1/#support","text":"rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"1.7.0/rofi.1/#debugging","text":"To debug, it is smart to first try disabling your custom configuration: -no-config Disable parsing of configuration. This runs rofi in stock mode. If you run custom C plugins, you can disable them using: -no-plugins Disables the loading of plugins. To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Dialogs.DMenu: The dmenu mode. Dialogs.Run: The run mode. Dialogs.DRun: The desktop file run mode. Dialogs.Window: The window mode. Dialogs.Script: The script mode. Dialogs.Combi: The script mode. Dialogs.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. The output of this can provide useful information when writing an issue. More information (possibly outdated) see this wiki entry.","title":"DEBUGGING"},{"location":"1.7.0/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"1.7.0/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-theme(5) , rofi-script(5) , rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.0/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.1/rofi-script.5/","text":"ROFI-SCRIPT 5 rofi-script NAME rofi script mode - Rofi format for scriptable modi. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modi \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"1.7.1/rofi-script.5/#rofi-script-5-rofi-script","text":"","title":"ROFI-SCRIPT 5 rofi-script"},{"location":"1.7.1/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable modi.","title":"NAME"},{"location":"1.7.1/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"1.7.1/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modi \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"1.7.1/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"1.7.1/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"1.7.1/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"1.7.1/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"1.7.1/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow.","title":"Passing mode options"},{"location":"1.7.1/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"1.7.1/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"1.7.1/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"1.7.1/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.1/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.1/rofi-theme.5/","text":"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: @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: 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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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. /* 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: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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: font: \"Awasome 12\"; The string must be valid UTF-8. Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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: 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: 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: highlight: bold @pink; But this is: * { 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: 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. * { 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. 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. 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: 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: 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: 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: element-text { highlight: None; } To set to red underlined: 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 . 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: 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: 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). 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): 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: * { 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 | | | | | | c | | c | | | | | | i | | i | | | | | | n | | n | | | | |--------| g |--------| g |-------| | |---------------------------------------| Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: |----------------------------------------------------| | |---------------| |--------| |---------------| | | | dummy | | child | | dummy | | | | expand: true; | | | | expand: true; | | | | | | | | | | | | | | | | | | | | | | | | | | | |---------------| |--------| |---------------| | |----------------------------------------------------| If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). DEBUGGING To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension. EXAMPLES Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"1.7.1/rofi-theme.5/#rofi-theme-5-rofi-theme","text":"","title":"ROFI-THEME 5 rofi-theme"},{"location":"1.7.1/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"1.7.1/rofi-theme.5/#default-theme-loading","text":"By default, rofi loads the default theme. This theme is always loaded. In the default (always loaded) configuration it does: @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: rofi -no-config -dump-theme","title":"DEFAULT THEME LOADING"},{"location":"1.7.1/rofi-theme.5/#description","text":"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.","title":"DESCRIPTION"},{"location":"1.7.1/rofi-theme.5/#format-specification","text":"","title":"FORMAT SPECIFICATION"},{"location":"1.7.1/rofi-theme.5/#encoding","text":"The encoding of the file is utf-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"1.7.1/rofi-theme.5/#comments","text":"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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"1.7.1/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"1.7.1/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation.","title":"File extension"},{"location":"1.7.1/rofi-theme.5/#basic-structure","text":"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. /* 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.","title":"Basic Structure"},{"location":"1.7.1/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"1.7.1/rofi-theme.5/#element-theme-section","text":"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: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"1.7.1/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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.","title":"Properties Format"},{"location":"1.7.1/rofi-theme.5/#string","text":"Format: \"[:print:]+\" A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8.","title":"String"},{"location":"1.7.1/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"1.7.1/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"1.7.1/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"1.7.1/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"1.7.1/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"1.7.1/rofi-theme.5/#text-style","text":"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.","title":"Text style"},{"location":"1.7.1/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"1.7.1/rofi-theme.5/#distance","text":"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: 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.","title":"Distance"},{"location":"1.7.1/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: 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.","title":"Calculating sizes"},{"location":"1.7.1/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"1.7.1/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"1.7.1/rofi-theme.5/#position","text":"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","title":"Position"},{"location":"1.7.1/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"1.7.1/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { 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: 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.","title":"Reference"},{"location":"1.7.1/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"1.7.1/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"1.7.1/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"1.7.1/rofi-theme.5/#environment-variable","text":"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. * { 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. window { width: env(WIDTH, 40%); } If environment WIDTH is set, then that value is parsed, otherwise the default value ( 40% ).","title":"Environment variable"},{"location":"1.7.1/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"1.7.1/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"ELEMENTS PATHS"},{"location":"1.7.1/rofi-theme.5/#supported-element-path","text":"","title":"SUPPORTED ELEMENT PATH"},{"location":"1.7.1/rofi-theme.5/#name_1","text":"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.","title":"Name"},{"location":"1.7.1/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"1.7.1/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example:"},{"location":"1.7.1/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox:"},{"location":"1.7.1/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"1.7.1/rofi-theme.5/#supported-properties","text":"The following properties are currently supported:","title":"SUPPORTED PROPERTIES"},{"location":"1.7.1/rofi-theme.5/#all-widgets","text":"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.","title":"all widgets:"},{"location":"1.7.1/rofi-theme.5/#window","text":"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","title":"window:"},{"location":"1.7.1/rofi-theme.5/#scrollbar_1","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar:"},{"location":"1.7.1/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box:"},{"location":"1.7.1/rofi-theme.5/#textbox","text":"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.","title":"textbox:"},{"location":"1.7.1/rofi-theme.5/#listview","text":"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 .","title":"listview:"},{"location":"1.7.1/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight:"},{"location":"1.7.1/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"1.7.1/rofi-theme.5/#basic-structure_1","text":"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 . 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","title":"Basic structure"},{"location":"1.7.1/rofi-theme.5/#error-message-structure","text":"|-----------------------------------------------------------------------------------| | window {BOX:vertical} | | |------------------------------------------------------------------------------| | | | error-message {BOX:vertical} | | | | |-------------------------------------------------------------------------| | | | | | textbox | | | | | |-------------------------------------------------------------------------| | | | |------------------------------------------------------------------------------| | |-----------------------------------------------------------------------------------|","title":"Error message structure"},{"location":"1.7.1/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"1.7.1/rofi-theme.5/#textbox_1","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"textbox"},{"location":"1.7.1/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"1.7.1/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"1.7.1/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"1.7.1/rofi-theme.5/#padding-and-margin","text":"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.","title":"Padding and margin"},{"location":"1.7.1/rofi-theme.5/#spacing","text":"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 | | | | | | c | | c | | | | | | i | | i | | | | | | n | | n | | | | |--------| g |--------| g |-------| | |---------------------------------------|","title":"Spacing"},{"location":"1.7.1/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: |----------------------------------------------------| | |---------------| |--------| |---------------| | | | dummy | | child | | dummy | | | | expand: true; | | | | expand: true; | | | | | | | | | | | | | | | | | | | | | | | | | | | |---------------| |--------| |---------------| | |----------------------------------------------------| If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"1.7.1/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run To print the current theme, run: rofi -dump-theme","title":"DEBUGGING"},{"location":"1.7.1/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { }","title":"Media support"},{"location":"1.7.1/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22","title":"Font Parsing"},{"location":"1.7.1/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"1.7.1/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"EXAMPLES"},{"location":"1.7.1/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.1/rofi.1/","text":"ROFI 1 rofi NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modi for different types of actions. rofi can also function as (drop-in) replacement for dmenu(1) . Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the run dialog: rofi -show run Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see KEY BINDINGS ) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modi is shown. -modi mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modi \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modi \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modi \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -application-fallback-icon Specify an icon to be used when the application icon in run/drun are not yet loaded or is not available. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modi option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } Combi settings -combi-modi mode1 , mode2 The modi to combine in combi mode. For syntax to -combi-modi , see -modi . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modi \"window,run,ssh\" -modi combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. History and Sorting -disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Dmenu specific -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -async-pre-read number Reads the first number entries blocking, then switches to async mode. This makes it feel more 'snappy'. default : 25 -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } } Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal-emulator) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) DMENU REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS rofi has the following key bindings: Control-v, Insert : Paste from clipboard Control-Shift-v, Shift-Insert : Paste primary selection Control-u : Clear the line Control-a : Beginning of line Control-e : End of line Control-f, Right : Forward one character Alt-f, Control-Right : Forward one word Control-b, Left : Back one character Alt-b, Control-Left : Back one word Control-d, Delete : Delete character Control-Alt-d : Delete word Control-h, Backspace, Shift-Backspace : Backspace (delete previous character) Control-Alt-h : Delete previous word Control-j,Control-m,Enter : Accept entry Control-n,Down : Select next entry Control-p,Up : Select previous entry Page Up : Go to previous page Page Down : Go to next page Control-Page Up : Go to previous column Control-Page Down : Go to next column Control-Enter : Use entered text as a command (in ssh/run modi ) Shift-Enter : Launch the application in a terminal (in run mode) Control-Shift-Enter : As Control-Enter and run the command in terminal (in run mode) Shift-Enter : Return the selected entry and move to the next item while keeping rofi open. (in dmenu) Shift-Right : Switch to the next mode. The list can be customized with the -modi argument. Shift-Left : Switch to the previous mode. The list can be customized with the -modi argument. Control-Tab : Switch to the next mode. The list can be customized with the -modi argument. Control-Shift-Tab : Switch to the previous mode. The list can be customized with the -modi argument. Control-space : Set selected item as input text. Shift-Del : Delete entry from history. grave : Toggle case sensitivity. Alt-grave : Toggle sorting. Alt-Shift-S : Take a screenshot and store it in the Pictures directory. Control-l : File complete for run dialog. This list might not be complete, to get a full list of all key bindings supported in your rofi, see rofi -h . The options starting with -kb are keybindings. Key bindings can be modified using the configuration systems. Multiple keys can be bound to one action by comma separating them. For example -kb-primary-paste \"Conctrol+v,Insert\" To get a searchable list of key bindings, run rofi -show keys . A key binding starting with ! will act when all keys have been released. You can bind certain events to key-actions: Timeout You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } } Input change When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } } Available Modi window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modi to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modi in one list. Specify which modi are included with the -combi-modi option. When using the combi mode, a !bang can be used to filter the results by modi. All modi that match the bang as a prefix are included. For example, say you have specified -combi-modi run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modi are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modi. FAQ The text in the window switcher is not nicely aligned. Try using a mono-space font. The window is completely black. Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\" EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modi run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modi run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modi combi -show combi -combi-modi run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modi combi,window -show combi -combi-modi run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys Use qalc to get a simple calculator in rofi : rofi -show calc -modi \"calc:qalc +u8 -nocurrencies\" i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat), DEBUGGING To debug, it is smart to first try disabling your custom configuration: -no-config Disable parsing of configuration. This runs rofi in stock mode. If you run custom C plugins, you can disable them using: -no-plugins Disables the loading of plugins. To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Dialogs.DMenu: The dmenu mode. Dialogs.Run: The run mode. Dialogs.DRun: The desktop file run mode. Dialogs.Window: The window mode. Dialogs.Script: The script mode. Dialogs.Combi: The script mode. Dialogs.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. The output of this can provide useful information when writing an issue. More information (possibly outdated) see this wiki entry. ISSUE TRACKER The rofi issue tracker can be found here When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-theme(5) , rofi-script(5) , rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"1.7.1/rofi.1/#rofi-1-rofi","text":"","title":"ROFI 1 rofi"},{"location":"1.7.1/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"1.7.1/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"1.7.1/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"1.7.1/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modi for different types of actions. rofi can also function as (drop-in) replacement for dmenu(1) .","title":"USAGE"},{"location":"1.7.1/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the run dialog: rofi -show run","title":"Running rofi"},{"location":"1.7.1/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"Emulating dmenu"},{"location":"1.7.1/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"1.7.1/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"1.7.1/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see KEY BINDINGS ) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modi is shown. -modi mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modi \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modi \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modi \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -application-fallback-icon Specify an icon to be used when the application icon in run/drun are not yet loaded or is not available. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched.","title":"General"},{"location":"1.7.1/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"1.7.1/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modi option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"1.7.1/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"1.7.1/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"1.7.1/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"1.7.1/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } }","title":"Window switcher settings"},{"location":"1.7.1/rofi.1/#combi-settings","text":"-combi-modi mode1 , mode2 The modi to combine in combi mode. For syntax to -combi-modi , see -modi . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modi \"window,run,ssh\" -modi combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator.","title":"Combi settings"},{"location":"1.7.1/rofi.1/#history-and-sorting","text":"-disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History and Sorting"},{"location":"1.7.1/rofi.1/#dmenu-specific","text":"-sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -async-pre-read number Reads the first number entries blocking, then switches to async mode. This makes it feel more 'snappy'. default : 25 -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible.","title":"Dmenu specific"},{"location":"1.7.1/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line.","title":"Message dialog"},{"location":"1.7.1/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } }","title":"File browser settings"},{"location":"1.7.1/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled","title":"Other"},{"location":"1.7.1/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal-emulator) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command )","title":"PATTERN"},{"location":"1.7.1/rofi.1/#dmenu-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU REPLACEMENT"},{"location":"1.7.1/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"1.7.1/rofi.1/#key-bindings","text":"rofi has the following key bindings: Control-v, Insert : Paste from clipboard Control-Shift-v, Shift-Insert : Paste primary selection Control-u : Clear the line Control-a : Beginning of line Control-e : End of line Control-f, Right : Forward one character Alt-f, Control-Right : Forward one word Control-b, Left : Back one character Alt-b, Control-Left : Back one word Control-d, Delete : Delete character Control-Alt-d : Delete word Control-h, Backspace, Shift-Backspace : Backspace (delete previous character) Control-Alt-h : Delete previous word Control-j,Control-m,Enter : Accept entry Control-n,Down : Select next entry Control-p,Up : Select previous entry Page Up : Go to previous page Page Down : Go to next page Control-Page Up : Go to previous column Control-Page Down : Go to next column Control-Enter : Use entered text as a command (in ssh/run modi ) Shift-Enter : Launch the application in a terminal (in run mode) Control-Shift-Enter : As Control-Enter and run the command in terminal (in run mode) Shift-Enter : Return the selected entry and move to the next item while keeping rofi open. (in dmenu) Shift-Right : Switch to the next mode. The list can be customized with the -modi argument. Shift-Left : Switch to the previous mode. The list can be customized with the -modi argument. Control-Tab : Switch to the next mode. The list can be customized with the -modi argument. Control-Shift-Tab : Switch to the previous mode. The list can be customized with the -modi argument. Control-space : Set selected item as input text. Shift-Del : Delete entry from history. grave : Toggle case sensitivity. Alt-grave : Toggle sorting. Alt-Shift-S : Take a screenshot and store it in the Pictures directory. Control-l : File complete for run dialog. This list might not be complete, to get a full list of all key bindings supported in your rofi, see rofi -h . The options starting with -kb are keybindings. Key bindings can be modified using the configuration systems. Multiple keys can be bound to one action by comma separating them. For example -kb-primary-paste \"Conctrol+v,Insert\" To get a searchable list of key bindings, run rofi -show keys . A key binding starting with ! will act when all keys have been released. You can bind certain events to key-actions:","title":"KEY BINDINGS"},{"location":"1.7.1/rofi.1/#timeout","text":"You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } }","title":"Timeout"},{"location":"1.7.1/rofi.1/#input-change","text":"When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } }","title":"Input change"},{"location":"1.7.1/rofi.1/#available-modi","text":"","title":"Available Modi"},{"location":"1.7.1/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"1.7.1/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"1.7.1/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"1.7.1/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"1.7.1/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"1.7.1/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"1.7.1/rofi.1/#script","text":"Allows custom scripted Modi to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"1.7.1/rofi.1/#combi","text":"Combines multiple modi in one list. Specify which modi are included with the -combi-modi option. When using the combi mode, a !bang can be used to filter the results by modi. All modi that match the bang as a prefix are included. For example, say you have specified -combi-modi run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modi are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modi.","title":"combi"},{"location":"1.7.1/rofi.1/#faq","text":"","title":"FAQ"},{"location":"1.7.1/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font.","title":"The text in the window switcher is not nicely aligned."},{"location":"1.7.1/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black."},{"location":"1.7.1/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"1.7.1/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modi run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modi run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modi combi -show combi -combi-modi run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modi combi,window -show combi -combi-modi run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys Use qalc to get a simple calculator in rofi : rofi -show calc -modi \"calc:qalc +u8 -nocurrencies\"","title":"EXAMPLES"},{"location":"1.7.1/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"1.7.1/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"1.7.1/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"1.7.1/rofi.1/#support","text":"rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"1.7.1/rofi.1/#debugging","text":"To debug, it is smart to first try disabling your custom configuration: -no-config Disable parsing of configuration. This runs rofi in stock mode. If you run custom C plugins, you can disable them using: -no-plugins Disables the loading of plugins. To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Dialogs.DMenu: The dmenu mode. Dialogs.Run: The run mode. Dialogs.DRun: The desktop file run mode. Dialogs.Window: The window mode. Dialogs.Script: The script mode. Dialogs.Combi: The script mode. Dialogs.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. The output of this can provide useful information when writing an issue. More information (possibly outdated) see this wiki entry.","title":"DEBUGGING"},{"location":"1.7.1/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"1.7.1/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-theme(5) , rofi-script(5) , rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.1/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.2/rofi-script.5/","text":"ROFI-SCRIPT 5 rofi-script NAME rofi script mode - Rofi format for scriptable modi. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modi \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"1.7.2/rofi-script.5/#rofi-script-5-rofi-script","text":"","title":"ROFI-SCRIPT 5 rofi-script"},{"location":"1.7.2/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable modi.","title":"NAME"},{"location":"1.7.2/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"1.7.2/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modi \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"1.7.2/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"1.7.2/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"1.7.2/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"1.7.2/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"1.7.2/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow.","title":"Passing mode options"},{"location":"1.7.2/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"1.7.2/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"1.7.2/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"1.7.2/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.2/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.2/rofi-theme.5/","text":"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: @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: 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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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. /* 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: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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: font: \"Awasome 12\"; The string must be valid UTF-8. Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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: 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: 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: highlight: bold @pink; But this is: * { 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: 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. * { 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. 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. 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: 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: 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: 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: element-text { highlight: None; } To set to red underlined: 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 . 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: 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: 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). 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): 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: * { 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 | | | | | | c | | c | | | | | | i | | i | | | | | | n | | n | | | | |--------| g |--------| g |-------| | |---------------------------------------| Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: |----------------------------------------------------| | |---------------| |--------| |---------------| | | | dummy | | child | | dummy | | | | expand: true; | | | | expand: true; | | | | | | | | | | | | | | | | | | | | | | | | | | | |---------------| |--------| |---------------| | |----------------------------------------------------| If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). DEBUGGING To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension. EXAMPLES Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"1.7.2/rofi-theme.5/#rofi-theme-5-rofi-theme","text":"","title":"ROFI-THEME 5 rofi-theme"},{"location":"1.7.2/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"1.7.2/rofi-theme.5/#default-theme-loading","text":"By default, rofi loads the default theme. This theme is always loaded. In the default (always loaded) configuration it does: @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: rofi -no-config -dump-theme","title":"DEFAULT THEME LOADING"},{"location":"1.7.2/rofi-theme.5/#description","text":"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.","title":"DESCRIPTION"},{"location":"1.7.2/rofi-theme.5/#format-specification","text":"","title":"FORMAT SPECIFICATION"},{"location":"1.7.2/rofi-theme.5/#encoding","text":"The encoding of the file is utf-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"1.7.2/rofi-theme.5/#comments","text":"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: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"1.7.2/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"1.7.2/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation.","title":"File extension"},{"location":"1.7.2/rofi-theme.5/#basic-structure","text":"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. /* 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.","title":"Basic Structure"},{"location":"1.7.2/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"1.7.2/rofi-theme.5/#element-theme-section","text":"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: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"1.7.2/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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.","title":"Properties Format"},{"location":"1.7.2/rofi-theme.5/#string","text":"Format: \"[:print:]+\" A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8.","title":"String"},{"location":"1.7.2/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"1.7.2/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"1.7.2/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"1.7.2/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"1.7.2/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"1.7.2/rofi-theme.5/#text-style","text":"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.","title":"Text style"},{"location":"1.7.2/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"1.7.2/rofi-theme.5/#distance","text":"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: 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.","title":"Distance"},{"location":"1.7.2/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: 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.","title":"Calculating sizes"},{"location":"1.7.2/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"1.7.2/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"1.7.2/rofi-theme.5/#position","text":"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","title":"Position"},{"location":"1.7.2/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"1.7.2/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { 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: 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.","title":"Reference"},{"location":"1.7.2/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"1.7.2/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"1.7.2/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"1.7.2/rofi-theme.5/#environment-variable","text":"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. * { 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. window { width: env(WIDTH, 40%); } If environment WIDTH is set, then that value is parsed, otherwise the default value ( 40% ).","title":"Environment variable"},{"location":"1.7.2/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"1.7.2/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"ELEMENTS PATHS"},{"location":"1.7.2/rofi-theme.5/#supported-element-path","text":"","title":"SUPPORTED ELEMENT PATH"},{"location":"1.7.2/rofi-theme.5/#name_1","text":"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.","title":"Name"},{"location":"1.7.2/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"1.7.2/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example:"},{"location":"1.7.2/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox:"},{"location":"1.7.2/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"1.7.2/rofi-theme.5/#supported-properties","text":"The following properties are currently supported:","title":"SUPPORTED PROPERTIES"},{"location":"1.7.2/rofi-theme.5/#all-widgets","text":"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.","title":"all widgets:"},{"location":"1.7.2/rofi-theme.5/#window","text":"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","title":"window:"},{"location":"1.7.2/rofi-theme.5/#scrollbar_1","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar:"},{"location":"1.7.2/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box:"},{"location":"1.7.2/rofi-theme.5/#textbox","text":"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.","title":"textbox:"},{"location":"1.7.2/rofi-theme.5/#listview","text":"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 .","title":"listview:"},{"location":"1.7.2/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight:"},{"location":"1.7.2/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"1.7.2/rofi-theme.5/#basic-structure_1","text":"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 . 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","title":"Basic structure"},{"location":"1.7.2/rofi-theme.5/#error-message-structure","text":"|-----------------------------------------------------------------------------------| | window {BOX:vertical} | | |------------------------------------------------------------------------------| | | | error-message {BOX:vertical} | | | | |-------------------------------------------------------------------------| | | | | | textbox | | | | | |-------------------------------------------------------------------------| | | | |------------------------------------------------------------------------------| | |-----------------------------------------------------------------------------------|","title":"Error message structure"},{"location":"1.7.2/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"1.7.2/rofi-theme.5/#textbox_1","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"textbox"},{"location":"1.7.2/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"1.7.2/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"1.7.2/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"1.7.2/rofi-theme.5/#padding-and-margin","text":"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.","title":"Padding and margin"},{"location":"1.7.2/rofi-theme.5/#spacing","text":"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 | | | | | | c | | c | | | | | | i | | i | | | | | | n | | n | | | | |--------| g |--------| g |-------| | |---------------------------------------|","title":"Spacing"},{"location":"1.7.2/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: |----------------------------------------------------| | |---------------| |--------| |---------------| | | | dummy | | child | | dummy | | | | expand: true; | | | | expand: true; | | | | | | | | | | | | | | | | | | | | | | | | | | | |---------------| |--------| |---------------| | |----------------------------------------------------| If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"1.7.2/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run To print the current theme, run: rofi -dump-theme","title":"DEBUGGING"},{"location":"1.7.2/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { }","title":"Media support"},{"location":"1.7.2/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22","title":"Font Parsing"},{"location":"1.7.2/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"1.7.2/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"EXAMPLES"},{"location":"1.7.2/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.2/rofi.1/","text":"ROFI 1 rofi NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modi for different types of actions. rofi can also function as (drop-in) replacement for dmenu(1) . Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the run dialog: rofi -show run Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see KEY BINDINGS ) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modi is shown. -modi mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modi \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modi \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modi \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -application-fallback-icon Specify an icon to be used when the application icon in run/drun are not yet loaded or is not available. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modi option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } Combi settings -combi-modi mode1 , mode2 The modi to combine in combi mode. For syntax to -combi-modi , see -modi . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modi \"window,run,ssh\" -modi combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. History and Sorting -disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Dmenu specific -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -async-pre-read number Reads the first number entries blocking, then switches to async mode. This makes it feel more 'snappy'. default : 25 -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } } Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal-emulator) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) DMENU REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS rofi has the following key bindings: Control-v, Insert : Paste from clipboard Control-Shift-v, Shift-Insert : Paste primary selection Control-u : Clear the line Control-a : Beginning of line Control-e : End of line Control-f, Right : Forward one character Alt-f, Control-Right : Forward one word Control-b, Left : Back one character Alt-b, Control-Left : Back one word Control-d, Delete : Delete character Control-Alt-d : Delete word Control-h, Backspace, Shift-Backspace : Backspace (delete previous character) Control-Alt-h : Delete previous word Control-j,Control-m,Enter : Accept entry Control-n,Down : Select next entry Control-p,Up : Select previous entry Page Up : Go to previous page Page Down : Go to next page Control-Page Up : Go to previous column Control-Page Down : Go to next column Control-Enter : Use entered text as a command (in ssh/run modi ) Shift-Enter : Launch the application in a terminal (in run mode) Control-Shift-Enter : As Control-Enter and run the command in terminal (in run mode) Shift-Enter : Return the selected entry and move to the next item while keeping rofi open. (in dmenu) Shift-Right : Switch to the next mode. The list can be customized with the -modi argument. Shift-Left : Switch to the previous mode. The list can be customized with the -modi argument. Control-Tab : Switch to the next mode. The list can be customized with the -modi argument. Control-Shift-Tab : Switch to the previous mode. The list can be customized with the -modi argument. Control-space : Set selected item as input text. Shift-Del : Delete entry from history. grave : Toggle case sensitivity. Alt-grave : Toggle sorting. Alt-Shift-S : Take a screenshot and store it in the Pictures directory. Control-l : File complete for run dialog. This list might not be complete, to get a full list of all key bindings supported in your rofi, see rofi -h . The options starting with -kb are keybindings. Key bindings can be modified using the configuration systems. Multiple keys can be bound to one action by comma separating them. For example -kb-primary-paste \"Conctrol+v,Insert\" To get a searchable list of key bindings, run rofi -show keys . A key binding starting with ! will act when all keys have been released. You can bind certain events to key-actions: Timeout You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } } Input change When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } } Available Modi window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modi to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modi in one list. Specify which modi are included with the -combi-modi option. When using the combi mode, a !bang can be used to filter the results by modi. All modi that match the bang as a prefix are included. For example, say you have specified -combi-modi run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modi are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modi. FAQ The text in the window switcher is not nicely aligned. Try using a mono-space font. The window is completely black. Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\" EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modi run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modi run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modi combi -show combi -combi-modi run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modi combi,window -show combi -combi-modi run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys Use qalc to get a simple calculator in rofi : rofi -show calc -modi \"calc:qalc +u8 -nocurrencies\" i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat), DEBUGGING To debug, it is smart to first try disabling your custom configuration: -no-config Disable parsing of configuration. This runs rofi in stock mode. If you run custom C plugins, you can disable them using: -no-plugins Disables the loading of plugins. To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Dialogs.DMenu: The dmenu mode. Dialogs.Run: The run mode. Dialogs.DRun: The desktop file run mode. Dialogs.Window: The window mode. Dialogs.Script: The script mode. Dialogs.Combi: The script mode. Dialogs.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. The output of this can provide useful information when writing an issue. More information (possibly outdated) see this wiki entry. ISSUE TRACKER The rofi issue tracker can be found here When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-theme(5) , rofi-script(5) , rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"1.7.2/rofi.1/#rofi-1-rofi","text":"","title":"ROFI 1 rofi"},{"location":"1.7.2/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"1.7.2/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"1.7.2/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"1.7.2/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modi for different types of actions. rofi can also function as (drop-in) replacement for dmenu(1) .","title":"USAGE"},{"location":"1.7.2/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the run dialog: rofi -show run","title":"Running rofi"},{"location":"1.7.2/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"Emulating dmenu"},{"location":"1.7.2/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"1.7.2/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"1.7.2/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see KEY BINDINGS ) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modi is shown. -modi mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modi \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modi \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modi \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -application-fallback-icon Specify an icon to be used when the application icon in run/drun are not yet loaded or is not available. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched.","title":"General"},{"location":"1.7.2/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"1.7.2/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modi option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"1.7.2/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"1.7.2/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"1.7.2/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"1.7.2/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } }","title":"Window switcher settings"},{"location":"1.7.2/rofi.1/#combi-settings","text":"-combi-modi mode1 , mode2 The modi to combine in combi mode. For syntax to -combi-modi , see -modi . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modi \"window,run,ssh\" -modi combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator.","title":"Combi settings"},{"location":"1.7.2/rofi.1/#history-and-sorting","text":"-disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History and Sorting"},{"location":"1.7.2/rofi.1/#dmenu-specific","text":"-sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -async-pre-read number Reads the first number entries blocking, then switches to async mode. This makes it feel more 'snappy'. default : 25 -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible.","title":"Dmenu specific"},{"location":"1.7.2/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line.","title":"Message dialog"},{"location":"1.7.2/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } }","title":"File browser settings"},{"location":"1.7.2/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled","title":"Other"},{"location":"1.7.2/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal-emulator) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command )","title":"PATTERN"},{"location":"1.7.2/rofi.1/#dmenu-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU REPLACEMENT"},{"location":"1.7.2/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"1.7.2/rofi.1/#key-bindings","text":"rofi has the following key bindings: Control-v, Insert : Paste from clipboard Control-Shift-v, Shift-Insert : Paste primary selection Control-u : Clear the line Control-a : Beginning of line Control-e : End of line Control-f, Right : Forward one character Alt-f, Control-Right : Forward one word Control-b, Left : Back one character Alt-b, Control-Left : Back one word Control-d, Delete : Delete character Control-Alt-d : Delete word Control-h, Backspace, Shift-Backspace : Backspace (delete previous character) Control-Alt-h : Delete previous word Control-j,Control-m,Enter : Accept entry Control-n,Down : Select next entry Control-p,Up : Select previous entry Page Up : Go to previous page Page Down : Go to next page Control-Page Up : Go to previous column Control-Page Down : Go to next column Control-Enter : Use entered text as a command (in ssh/run modi ) Shift-Enter : Launch the application in a terminal (in run mode) Control-Shift-Enter : As Control-Enter and run the command in terminal (in run mode) Shift-Enter : Return the selected entry and move to the next item while keeping rofi open. (in dmenu) Shift-Right : Switch to the next mode. The list can be customized with the -modi argument. Shift-Left : Switch to the previous mode. The list can be customized with the -modi argument. Control-Tab : Switch to the next mode. The list can be customized with the -modi argument. Control-Shift-Tab : Switch to the previous mode. The list can be customized with the -modi argument. Control-space : Set selected item as input text. Shift-Del : Delete entry from history. grave : Toggle case sensitivity. Alt-grave : Toggle sorting. Alt-Shift-S : Take a screenshot and store it in the Pictures directory. Control-l : File complete for run dialog. This list might not be complete, to get a full list of all key bindings supported in your rofi, see rofi -h . The options starting with -kb are keybindings. Key bindings can be modified using the configuration systems. Multiple keys can be bound to one action by comma separating them. For example -kb-primary-paste \"Conctrol+v,Insert\" To get a searchable list of key bindings, run rofi -show keys . A key binding starting with ! will act when all keys have been released. You can bind certain events to key-actions:","title":"KEY BINDINGS"},{"location":"1.7.2/rofi.1/#timeout","text":"You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } }","title":"Timeout"},{"location":"1.7.2/rofi.1/#input-change","text":"When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } }","title":"Input change"},{"location":"1.7.2/rofi.1/#available-modi","text":"","title":"Available Modi"},{"location":"1.7.2/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"1.7.2/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"1.7.2/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"1.7.2/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"1.7.2/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"1.7.2/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"1.7.2/rofi.1/#script","text":"Allows custom scripted Modi to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"1.7.2/rofi.1/#combi","text":"Combines multiple modi in one list. Specify which modi are included with the -combi-modi option. When using the combi mode, a !bang can be used to filter the results by modi. All modi that match the bang as a prefix are included. For example, say you have specified -combi-modi run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modi are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modi.","title":"combi"},{"location":"1.7.2/rofi.1/#faq","text":"","title":"FAQ"},{"location":"1.7.2/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font.","title":"The text in the window switcher is not nicely aligned."},{"location":"1.7.2/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black."},{"location":"1.7.2/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"1.7.2/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modi run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modi run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modi combi -show combi -combi-modi run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modi combi,window -show combi -combi-modi run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys Use qalc to get a simple calculator in rofi : rofi -show calc -modi \"calc:qalc +u8 -nocurrencies\"","title":"EXAMPLES"},{"location":"1.7.2/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"1.7.2/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"1.7.2/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"1.7.2/rofi.1/#support","text":"rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"1.7.2/rofi.1/#debugging","text":"To debug, it is smart to first try disabling your custom configuration: -no-config Disable parsing of configuration. This runs rofi in stock mode. If you run custom C plugins, you can disable them using: -no-plugins Disables the loading of plugins. To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Dialogs.DMenu: The dmenu mode. Dialogs.Run: The run mode. Dialogs.DRun: The desktop file run mode. Dialogs.Window: The window mode. Dialogs.Script: The script mode. Dialogs.Combi: The script mode. Dialogs.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. The output of this can provide useful information when writing an issue. More information (possibly outdated) see this wiki entry.","title":"DEBUGGING"},{"location":"1.7.2/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"1.7.2/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-theme(5) , rofi-script(5) , rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.2/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Quentin Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.3/rofi-debugging.5/","text":"ROFI DEBUGGING 5 rofi debugging NAME Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins Get the relevant information for an issue Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this. Timing traces To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets Debug domains To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager. Creating a backtrace. First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl . SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services","title":"Debugging"},{"location":"1.7.3/rofi-debugging.5/#rofi-debugging-5-rofi-debugging","text":"","title":"ROFI DEBUGGING 5 rofi debugging"},{"location":"1.7.3/rofi-debugging.5/#name","text":"Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins","title":"NAME"},{"location":"1.7.3/rofi-debugging.5/#get-the-relevant-information-for-an-issue","text":"Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this.","title":"Get the relevant information for an issue"},{"location":"1.7.3/rofi-debugging.5/#timing-traces","text":"To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets","title":"Timing traces"},{"location":"1.7.3/rofi-debugging.5/#debug-domains","text":"To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager.","title":"Debug domains"},{"location":"1.7.3/rofi-debugging.5/#creating-a-backtrace","text":"First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl .","title":"Creating a backtrace."},{"location":"1.7.3/rofi-debugging.5/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.3/rofi-debugging.5/#author","text":"Qball Cow qball@blame.services","title":"AUTHOR"},{"location":"1.7.3/rofi-dmenu.5/","text":"ROFI-DMENU 5 rofi-dmenu NAME rofi dmenu mode - Rofi dmenu emulation DESCRIPTION To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). BASIC CONCEPT In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects an row, this is printed out to standard out, allow the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next. USAGE By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu DMENU DROP-IN REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu DMENU VS SCRIPT MODE Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information. DMENU SPECIFIC COMMANDLINE FLAGS A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \" -ellipsize-mode (start|middle|end) Set ellipsize mode on the listview. default \"end\" PARSING ROW OPTIONS Extra options for individual rows can be also set. See the rofi-script(5) manpage for details; the syntax and supported features are identical. RETURN VALUE 0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Dmenu"},{"location":"1.7.3/rofi-dmenu.5/#rofi-dmenu-5-rofi-dmenu","text":"","title":"ROFI-DMENU 5 rofi-dmenu"},{"location":"1.7.3/rofi-dmenu.5/#name","text":"rofi dmenu mode - Rofi dmenu emulation","title":"NAME"},{"location":"1.7.3/rofi-dmenu.5/#description","text":"To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"DESCRIPTION"},{"location":"1.7.3/rofi-dmenu.5/#basic-concept","text":"In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects an row, this is printed out to standard out, allow the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next.","title":"BASIC CONCEPT"},{"location":"1.7.3/rofi-dmenu.5/#usage","text":"By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu","title":"USAGE"},{"location":"1.7.3/rofi-dmenu.5/#dmenu-drop-in-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU DROP-IN REPLACEMENT"},{"location":"1.7.3/rofi-dmenu.5/#dmenu-vs-script-mode","text":"Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information.","title":"DMENU VS SCRIPT MODE"},{"location":"1.7.3/rofi-dmenu.5/#dmenu-specific-commandline-flags","text":"A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \" -ellipsize-mode (start|middle|end) Set ellipsize mode on the listview. default \"end\"","title":"DMENU SPECIFIC COMMANDLINE FLAGS"},{"location":"1.7.3/rofi-dmenu.5/#parsing-row-options","text":"Extra options for individual rows can be also set. See the rofi-script(5) manpage for details; the syntax and supported features are identical.","title":"PARSING ROW OPTIONS"},{"location":"1.7.3/rofi-dmenu.5/#return-value","text":"0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding.","title":"RETURN VALUE"},{"location":"1.7.3/rofi-dmenu.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7)","title":"SEE ALSO"},{"location":"1.7.3/rofi-dmenu.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.3/rofi-keys.5/","text":"ROFI-KEYS 5 rofi-keys NAME rofi keys - Rofi Key and Mouse bindings DESCRIPTION rofi supports overriding of any of it key and mouse binding. Setting binding Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; } Unsetting a binding To unset a binding, pass an empty string. configuration { kb-clear-line: \"\"; } Keyboard Bindings kb-primary-paste : Paste primary selection Default : Control+V,Shift+Insert kb-secondary-paste Paste clipboard Default : Control+v,Insert kb-secondary-copy Copy current selection to clipboard Default : Control+c kb-clear-line Clear input line Default : Control+w kb-move-front Beginning of line Default : Control+a kb-move-end End of line Default : Control+e kb-move-word-back Move back one word Default : Alt+b,Control+Left kb-move-word-forward Move forward one word Default : Alt+f,Control+Right kb-move-char-back Move back one char Default : Left,Control+b kb-move-char-forward Move forward one char Default : Right,Control+f kb-remove-word-back Delete previous word Default : Control+Alt+h,Control+BackSpace kb-remove-word-forward Delete next word Default : Control+Alt+d kb-remove-char-forward Delete next char Default : Delete,Control+d kb-remove-char-back Delete previous char Default : BackSpace,Shift+BackSpace,Control+h kb-remove-to-eol Delete till the end of line Default : Control+k kb-remove-to-sol Delete till the start of line Default : Control+u kb-accept-entry Accept entry Default : Control+j,Control+m,Return,KP_Enter kb-accept-custom Use entered text as command (in ssh/run modes) Default : Control+Return kb-accept-custom-alt Use entered text as command (in ssh/run modes) Default : Control+Shift+Return kb-accept-alt Use alternate accept command. Default : Shift+Return kb-delete-entry Delete entry from history Default : Shift+Delete kb-mode-next Switch to the next mode. Default : Shift+Right,Control+Tab kb-mode-previous Switch to the previous mode. Default : Shift+Left,Control+ISO_Left_Tab kb-mode-complete Start completion for mode. Default : Control+l kb-row-left Go to the previous column Default : Control+Page_Up kb-row-right Go to the next column Default : Control+Page_Down kb-row-up Select previous entry Default : Up,Control+p kb-row-down Select next entry Default : Down,Control+n kb-row-tab Go to next row, if one left, accept it, if no left next mode. Default : kb-element-next Go to next row. Default : Tab kb-element-prev Go to previous row. Default : ISO_Left_Tab kb-page-prev Go to the previous page Default : Page_Up kb-page-next Go to the next page Default : Page_Down kb-row-first Go to the first entry Default : Home,KP_Home kb-row-last Go to the last entry Default : End,KP_End kb-row-select Set selected item as input text Default : Control+space kb-screenshot Take a screenshot of the rofi window Default : Alt+S kb-ellipsize Toggle between ellipsize modes for displayed data Default : Alt+period kb-toggle-case-sensitivity Toggle case sensitivity Default : grave,dead_grave kb-toggle-sort Toggle sort Default : Alt+grave kb-cancel Quit rofi Default : Escape,Control+g,Control+bracketleft kb-custom-1 Custom keybinding 1 Default : Alt+1 kb-custom-2 Custom keybinding 2 Default : Alt+2 kb-custom-3 Custom keybinding 3 Default : Alt+3 kb-custom-4 Custom keybinding 4 Default : Alt+4 kb-custom-5 Custom Keybinding 5 Default : Alt+5 kb-custom-6 Custom keybinding 6 Default : Alt+6 kb-custom-7 Custom Keybinding 7 Default : Alt+7 kb-custom-8 Custom keybinding 8 Default : Alt+8 kb-custom-9 Custom keybinding 9 Default : Alt+9 kb-custom-10 Custom keybinding 10 Default : Alt+0 kb-custom-11 Custom keybinding 11 Default : Alt+exclam kb-custom-12 Custom keybinding 12 Default : Alt+at kb-custom-13 Custom keybinding 13 Default : Alt+numbersign kb-custom-14 Custom keybinding 14 Default : Alt+dollar kb-custom-15 Custom keybinding 15 Default : Alt+percent kb-custom-16 Custom keybinding 16 Default : Alt+dead_circumflex kb-custom-17 Custom keybinding 17 Default : Alt+ampersand kb-custom-18 Custom keybinding 18 Default : Alt+asterisk kb-custom-19 Custom Keybinding 19 Default : Alt+parenleft kb-select-1 Select row 1 Default : Super+1 kb-select-2 Select row 2 Default : Super+2 kb-select-3 Select row 3 Default : Super+3 kb-select-4 Select row 4 Default : Super+4 kb-select-5 Select row 5 Default : Super+5 kb-select-6 Select row 6 Default : Super+6 kb-select-7 Select row 7 Default : Super+7 kb-select-8 Select row 8 Default : Super+8 kb-select-9 Select row 9 Default : Super+9 kb-select-10 Select row 10 Default : Super+0 Mouse Bindings ml-row-left Go to the previous column Default : ScrollLeft ml-row-right Go to the next column Default : ScrollRight ml-row-up Select previous entry Default : ScrollUp ml-row-down Select next entry Default : ScrollDown me-select-entry Select hovered row Default : MousePrimary me-accept-entry Accept hovered row Default : MouseDPrimary me-accept-custom Accept hovered row with custom action Default : Control+MouseDPrimary SEE ALSO rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Keys"},{"location":"1.7.3/rofi-keys.5/#rofi-keys-5-rofi-keys","text":"","title":"ROFI-KEYS 5 rofi-keys"},{"location":"1.7.3/rofi-keys.5/#name","text":"rofi keys - Rofi Key and Mouse bindings","title":"NAME"},{"location":"1.7.3/rofi-keys.5/#description","text":"rofi supports overriding of any of it key and mouse binding.","title":"DESCRIPTION"},{"location":"1.7.3/rofi-keys.5/#setting-binding","text":"Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; }","title":"Setting binding"},{"location":"1.7.3/rofi-keys.5/#unsetting-a-binding","text":"To unset a binding, pass an empty string. configuration { kb-clear-line: \"\"; }","title":"Unsetting a binding"},{"location":"1.7.3/rofi-keys.5/#keyboard-bindings","text":"","title":"Keyboard Bindings"},{"location":"1.7.3/rofi-keys.5/#kb-primary-paste","text":"Paste primary selection Default : Control+V,Shift+Insert","title":"kb-primary-paste:"},{"location":"1.7.3/rofi-keys.5/#kb-secondary-paste","text":"Paste clipboard Default : Control+v,Insert","title":"kb-secondary-paste"},{"location":"1.7.3/rofi-keys.5/#kb-secondary-copy","text":"Copy current selection to clipboard Default : Control+c","title":"kb-secondary-copy"},{"location":"1.7.3/rofi-keys.5/#kb-clear-line","text":"Clear input line Default : Control+w","title":"kb-clear-line"},{"location":"1.7.3/rofi-keys.5/#kb-move-front","text":"Beginning of line Default : Control+a","title":"kb-move-front"},{"location":"1.7.3/rofi-keys.5/#kb-move-end","text":"End of line Default : Control+e","title":"kb-move-end"},{"location":"1.7.3/rofi-keys.5/#kb-move-word-back","text":"Move back one word Default : Alt+b,Control+Left","title":"kb-move-word-back"},{"location":"1.7.3/rofi-keys.5/#kb-move-word-forward","text":"Move forward one word Default : Alt+f,Control+Right","title":"kb-move-word-forward"},{"location":"1.7.3/rofi-keys.5/#kb-move-char-back","text":"Move back one char Default : Left,Control+b","title":"kb-move-char-back"},{"location":"1.7.3/rofi-keys.5/#kb-move-char-forward","text":"Move forward one char Default : Right,Control+f","title":"kb-move-char-forward"},{"location":"1.7.3/rofi-keys.5/#kb-remove-word-back","text":"Delete previous word Default : Control+Alt+h,Control+BackSpace","title":"kb-remove-word-back"},{"location":"1.7.3/rofi-keys.5/#kb-remove-word-forward","text":"Delete next word Default : Control+Alt+d","title":"kb-remove-word-forward"},{"location":"1.7.3/rofi-keys.5/#kb-remove-char-forward","text":"Delete next char Default : Delete,Control+d","title":"kb-remove-char-forward"},{"location":"1.7.3/rofi-keys.5/#kb-remove-char-back","text":"Delete previous char Default : BackSpace,Shift+BackSpace,Control+h","title":"kb-remove-char-back"},{"location":"1.7.3/rofi-keys.5/#kb-remove-to-eol","text":"Delete till the end of line Default : Control+k","title":"kb-remove-to-eol"},{"location":"1.7.3/rofi-keys.5/#kb-remove-to-sol","text":"Delete till the start of line Default : Control+u","title":"kb-remove-to-sol"},{"location":"1.7.3/rofi-keys.5/#kb-accept-entry","text":"Accept entry Default : Control+j,Control+m,Return,KP_Enter","title":"kb-accept-entry"},{"location":"1.7.3/rofi-keys.5/#kb-accept-custom","text":"Use entered text as command (in ssh/run modes) Default : Control+Return","title":"kb-accept-custom"},{"location":"1.7.3/rofi-keys.5/#kb-accept-custom-alt","text":"Use entered text as command (in ssh/run modes) Default : Control+Shift+Return","title":"kb-accept-custom-alt"},{"location":"1.7.3/rofi-keys.5/#kb-accept-alt","text":"Use alternate accept command. Default : Shift+Return","title":"kb-accept-alt"},{"location":"1.7.3/rofi-keys.5/#kb-delete-entry","text":"Delete entry from history Default : Shift+Delete","title":"kb-delete-entry"},{"location":"1.7.3/rofi-keys.5/#kb-mode-next","text":"Switch to the next mode. Default : Shift+Right,Control+Tab","title":"kb-mode-next"},{"location":"1.7.3/rofi-keys.5/#kb-mode-previous","text":"Switch to the previous mode. Default : Shift+Left,Control+ISO_Left_Tab","title":"kb-mode-previous"},{"location":"1.7.3/rofi-keys.5/#kb-mode-complete","text":"Start completion for mode. Default : Control+l","title":"kb-mode-complete"},{"location":"1.7.3/rofi-keys.5/#kb-row-left","text":"Go to the previous column Default : Control+Page_Up","title":"kb-row-left"},{"location":"1.7.3/rofi-keys.5/#kb-row-right","text":"Go to the next column Default : Control+Page_Down","title":"kb-row-right"},{"location":"1.7.3/rofi-keys.5/#kb-row-up","text":"Select previous entry Default : Up,Control+p","title":"kb-row-up"},{"location":"1.7.3/rofi-keys.5/#kb-row-down","text":"Select next entry Default : Down,Control+n","title":"kb-row-down"},{"location":"1.7.3/rofi-keys.5/#kb-row-tab","text":"Go to next row, if one left, accept it, if no left next mode. Default :","title":"kb-row-tab"},{"location":"1.7.3/rofi-keys.5/#kb-element-next","text":"Go to next row. Default : Tab","title":"kb-element-next"},{"location":"1.7.3/rofi-keys.5/#kb-element-prev","text":"Go to previous row. Default : ISO_Left_Tab","title":"kb-element-prev"},{"location":"1.7.3/rofi-keys.5/#kb-page-prev","text":"Go to the previous page Default : Page_Up","title":"kb-page-prev"},{"location":"1.7.3/rofi-keys.5/#kb-page-next","text":"Go to the next page Default : Page_Down","title":"kb-page-next"},{"location":"1.7.3/rofi-keys.5/#kb-row-first","text":"Go to the first entry Default : Home,KP_Home","title":"kb-row-first"},{"location":"1.7.3/rofi-keys.5/#kb-row-last","text":"Go to the last entry Default : End,KP_End","title":"kb-row-last"},{"location":"1.7.3/rofi-keys.5/#kb-row-select","text":"Set selected item as input text Default : Control+space","title":"kb-row-select"},{"location":"1.7.3/rofi-keys.5/#kb-screenshot","text":"Take a screenshot of the rofi window Default : Alt+S","title":"kb-screenshot"},{"location":"1.7.3/rofi-keys.5/#kb-ellipsize","text":"Toggle between ellipsize modes for displayed data Default : Alt+period","title":"kb-ellipsize"},{"location":"1.7.3/rofi-keys.5/#kb-toggle-case-sensitivity","text":"Toggle case sensitivity Default : grave,dead_grave","title":"kb-toggle-case-sensitivity"},{"location":"1.7.3/rofi-keys.5/#kb-toggle-sort","text":"Toggle sort Default : Alt+grave","title":"kb-toggle-sort"},{"location":"1.7.3/rofi-keys.5/#kb-cancel","text":"Quit rofi Default : Escape,Control+g,Control+bracketleft","title":"kb-cancel"},{"location":"1.7.3/rofi-keys.5/#kb-custom-1","text":"Custom keybinding 1 Default : Alt+1","title":"kb-custom-1"},{"location":"1.7.3/rofi-keys.5/#kb-custom-2","text":"Custom keybinding 2 Default : Alt+2","title":"kb-custom-2"},{"location":"1.7.3/rofi-keys.5/#kb-custom-3","text":"Custom keybinding 3 Default : Alt+3","title":"kb-custom-3"},{"location":"1.7.3/rofi-keys.5/#kb-custom-4","text":"Custom keybinding 4 Default : Alt+4","title":"kb-custom-4"},{"location":"1.7.3/rofi-keys.5/#kb-custom-5","text":"Custom Keybinding 5 Default : Alt+5","title":"kb-custom-5"},{"location":"1.7.3/rofi-keys.5/#kb-custom-6","text":"Custom keybinding 6 Default : Alt+6","title":"kb-custom-6"},{"location":"1.7.3/rofi-keys.5/#kb-custom-7","text":"Custom Keybinding 7 Default : Alt+7","title":"kb-custom-7"},{"location":"1.7.3/rofi-keys.5/#kb-custom-8","text":"Custom keybinding 8 Default : Alt+8","title":"kb-custom-8"},{"location":"1.7.3/rofi-keys.5/#kb-custom-9","text":"Custom keybinding 9 Default : Alt+9","title":"kb-custom-9"},{"location":"1.7.3/rofi-keys.5/#kb-custom-10","text":"Custom keybinding 10 Default : Alt+0","title":"kb-custom-10"},{"location":"1.7.3/rofi-keys.5/#kb-custom-11","text":"Custom keybinding 11 Default : Alt+exclam","title":"kb-custom-11"},{"location":"1.7.3/rofi-keys.5/#kb-custom-12","text":"Custom keybinding 12 Default : Alt+at","title":"kb-custom-12"},{"location":"1.7.3/rofi-keys.5/#kb-custom-13","text":"Custom keybinding 13 Default : Alt+numbersign","title":"kb-custom-13"},{"location":"1.7.3/rofi-keys.5/#kb-custom-14","text":"Custom keybinding 14 Default : Alt+dollar","title":"kb-custom-14"},{"location":"1.7.3/rofi-keys.5/#kb-custom-15","text":"Custom keybinding 15 Default : Alt+percent","title":"kb-custom-15"},{"location":"1.7.3/rofi-keys.5/#kb-custom-16","text":"Custom keybinding 16 Default : Alt+dead_circumflex","title":"kb-custom-16"},{"location":"1.7.3/rofi-keys.5/#kb-custom-17","text":"Custom keybinding 17 Default : Alt+ampersand","title":"kb-custom-17"},{"location":"1.7.3/rofi-keys.5/#kb-custom-18","text":"Custom keybinding 18 Default : Alt+asterisk","title":"kb-custom-18"},{"location":"1.7.3/rofi-keys.5/#kb-custom-19","text":"Custom Keybinding 19 Default : Alt+parenleft","title":"kb-custom-19"},{"location":"1.7.3/rofi-keys.5/#kb-select-1","text":"Select row 1 Default : Super+1","title":"kb-select-1"},{"location":"1.7.3/rofi-keys.5/#kb-select-2","text":"Select row 2 Default : Super+2","title":"kb-select-2"},{"location":"1.7.3/rofi-keys.5/#kb-select-3","text":"Select row 3 Default : Super+3","title":"kb-select-3"},{"location":"1.7.3/rofi-keys.5/#kb-select-4","text":"Select row 4 Default : Super+4","title":"kb-select-4"},{"location":"1.7.3/rofi-keys.5/#kb-select-5","text":"Select row 5 Default : Super+5","title":"kb-select-5"},{"location":"1.7.3/rofi-keys.5/#kb-select-6","text":"Select row 6 Default : Super+6","title":"kb-select-6"},{"location":"1.7.3/rofi-keys.5/#kb-select-7","text":"Select row 7 Default : Super+7","title":"kb-select-7"},{"location":"1.7.3/rofi-keys.5/#kb-select-8","text":"Select row 8 Default : Super+8","title":"kb-select-8"},{"location":"1.7.3/rofi-keys.5/#kb-select-9","text":"Select row 9 Default : Super+9","title":"kb-select-9"},{"location":"1.7.3/rofi-keys.5/#kb-select-10","text":"Select row 10 Default : Super+0","title":"kb-select-10"},{"location":"1.7.3/rofi-keys.5/#mouse-bindings","text":"","title":"Mouse Bindings"},{"location":"1.7.3/rofi-keys.5/#ml-row-left","text":"Go to the previous column Default : ScrollLeft","title":"ml-row-left"},{"location":"1.7.3/rofi-keys.5/#ml-row-right","text":"Go to the next column Default : ScrollRight","title":"ml-row-right"},{"location":"1.7.3/rofi-keys.5/#ml-row-up","text":"Select previous entry Default : ScrollUp","title":"ml-row-up"},{"location":"1.7.3/rofi-keys.5/#ml-row-down","text":"Select next entry Default : ScrollDown","title":"ml-row-down"},{"location":"1.7.3/rofi-keys.5/#me-select-entry","text":"Select hovered row Default : MousePrimary","title":"me-select-entry"},{"location":"1.7.3/rofi-keys.5/#me-accept-entry","text":"Accept hovered row Default : MouseDPrimary","title":"me-accept-entry"},{"location":"1.7.3/rofi-keys.5/#me-accept-custom","text":"Accept hovered row with custom action Default : Control+MouseDPrimary","title":"me-accept-custom"},{"location":"1.7.3/rofi-keys.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5)","title":"SEE ALSO"},{"location":"1.7.3/rofi-keys.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.3/rofi-script.5/","text":"ROFI-SCRIPT 5 rofi-script NAME rofi script mode - Rofi format for scriptable mode. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. ROFI_DATA Environment get set when script sets data option in header. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"1.7.3/rofi-script.5/#rofi-script-5-rofi-script","text":"","title":"ROFI-SCRIPT 5 rofi-script"},{"location":"1.7.3/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable mode.","title":"NAME"},{"location":"1.7.3/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"1.7.3/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"1.7.3/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"1.7.3/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"1.7.3/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"1.7.3/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"1.7.3/rofi-script.5/#rofi_data","text":"Environment get set when script sets data option in header.","title":"ROFI_DATA"},{"location":"1.7.3/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget.","title":"Passing mode options"},{"location":"1.7.3/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"1.7.3/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"1.7.3/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"1.7.3/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.3/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.3/rofi-theme.5/","text":"ROFI-THEME 5 rofi-theme NAME rofi-theme - Rofi theme format files GETTING STARTED WITH THEMING The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 We can also specify the color and width of the cursor. You could, for example, create a crimson block cursor like this: entry { cursor-color: rgb(220,20,60); cursor-width: 8px; } By default, the cursor-color will be the same as the text-color . The cursor-width will always default to 2 pixels. If you want to see the complete theme, including the modification you can run: rofi -dump-theme DEFAULT THEME LOADING By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: 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, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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 an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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 array of values 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: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ and \" . Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the 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: 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: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide * : Multiply % : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|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: highlight: bold @pink; But this is: * { 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: 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. List of values Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated. 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. * { 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. 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. 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: 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: 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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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: 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 rendering of 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 / content : 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. text-transform : text style {color} for the whole text. 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-markup : If true, placeholder text supports pango markup for stylizing. 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. tab-stops : 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). cursor-width : The width of the cursor. cursor-color : The color used to draw the cursor. cursor-outline : Enable a border (outline) around the cursor. (Boolean) cursor-outline-width : The width of the border around the cursor. (Double) cursor-outline-color : The color to use for the cursor outline. (Color) text-outline : Enable a border (outline) around the text. (Boolean) text-outline-width : The width of the border around the text. (Double) text-outline-color : The color to use for the text outline. (Color) 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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to be unhidden. The list is still present and hitting accept will activate the first entry. 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: element-text { highlight: None; } To set to red underlined: 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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows Error message structure \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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: 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: 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). 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): 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: * { 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). DEBUGGING To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false ) { } Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 Icon Handling Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions. Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension. EXAMPLES Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"1.7.3/rofi-theme.5/#rofi-theme-5-rofi-theme","text":"","title":"ROFI-THEME 5 rofi-theme"},{"location":"1.7.3/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"1.7.3/rofi-theme.5/#getting-started-with-theming","text":"The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 We can also specify the color and width of the cursor. You could, for example, create a crimson block cursor like this: entry { cursor-color: rgb(220,20,60); cursor-width: 8px; } By default, the cursor-color will be the same as the text-color . The cursor-width will always default to 2 pixels. If you want to see the complete theme, including the modification you can run: rofi -dump-theme","title":"GETTING STARTED WITH THEMING"},{"location":"1.7.3/rofi-theme.5/#default-theme-loading","text":"By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: rofi -no-config -dump-theme","title":"DEFAULT THEME LOADING"},{"location":"1.7.3/rofi-theme.5/#description","text":"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.","title":"DESCRIPTION"},{"location":"1.7.3/rofi-theme.5/#format-specification","text":"","title":"FORMAT SPECIFICATION"},{"location":"1.7.3/rofi-theme.5/#encoding","text":"The encoding of the file is UTF-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"1.7.3/rofi-theme.5/#comments","text":"C and C++ file comments are supported. Anything after // and before a newline is considered a comment. Everything between /* and */ is a comment, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"1.7.3/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"1.7.3/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation.","title":"File extension"},{"location":"1.7.3/rofi-theme.5/#basic-structure","text":"Each element has a section with defined properties. Global properties can be defined in section * { } . Sub-section names begin with an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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.","title":"Basic Structure"},{"location":"1.7.3/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"1.7.3/rofi-theme.5/#element-theme-section","text":"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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"1.7.3/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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 array of values an environment variable Inherit Some of these types are a combination of other types.","title":"Properties Format"},{"location":"1.7.3/rofi-theme.5/#string","text":"Format: \"[:print:]+\" A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ and \" .","title":"String"},{"location":"1.7.3/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"1.7.3/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"1.7.3/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"1.7.3/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"1.7.3/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"1.7.3/rofi-theme.5/#text-style","text":"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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the text.","title":"Text style"},{"location":"1.7.3/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"1.7.3/rofi-theme.5/#distance","text":"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: 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.","title":"Distance"},{"location":"1.7.3/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide * : Multiply % : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of rvalue It uses the C precedence ordering.","title":"Calculating sizes"},{"location":"1.7.3/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"1.7.3/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"1.7.3/rofi-theme.5/#position","text":"Indicate a place on the window/monitor. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|south east)","title":"Position"},{"location":"1.7.3/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"1.7.3/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { 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: 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.","title":"Reference"},{"location":"1.7.3/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"1.7.3/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"1.7.3/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"1.7.3/rofi-theme.5/#list-of-values","text":"Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated.","title":"List of values"},{"location":"1.7.3/rofi-theme.5/#environment-variable","text":"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. * { 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. window { width: env(WIDTH, 40%); } If environment WIDTH is set, then that value is parsed, otherwise the default value ( 40% ).","title":"Environment variable"},{"location":"1.7.3/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"1.7.3/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"ELEMENTS PATHS"},{"location":"1.7.3/rofi-theme.5/#supported-element-path","text":"","title":"SUPPORTED ELEMENT PATH"},{"location":"1.7.3/rofi-theme.5/#name_1","text":"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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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.","title":"Name"},{"location":"1.7.3/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"1.7.3/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example:"},{"location":"1.7.3/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox:"},{"location":"1.7.3/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"1.7.3/rofi-theme.5/#supported-properties","text":"The following properties are currently supported:","title":"SUPPORTED PROPERTIES"},{"location":"1.7.3/rofi-theme.5/#all-widgets","text":"enabled : enable/disable rendering of 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.","title":"all widgets:"},{"location":"1.7.3/rofi-theme.5/#window","text":"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","title":"window:"},{"location":"1.7.3/rofi-theme.5/#scrollbar_1","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar:"},{"location":"1.7.3/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box:"},{"location":"1.7.3/rofi-theme.5/#textbox","text":"background-color : color border-color : the color used for the border around the widget. font : the font used by this textbox (string). str / content : 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. text-transform : text style {color} for the whole text. 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-markup : If true, placeholder text supports pango markup for stylizing. 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. tab-stops : 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). cursor-width : The width of the cursor. cursor-color : The color used to draw the cursor. cursor-outline : Enable a border (outline) around the cursor. (Boolean) cursor-outline-width : The width of the border around the cursor. (Double) cursor-outline-color : The color to use for the cursor outline. (Color) text-outline : Enable a border (outline) around the text. (Boolean) text-outline-width : The width of the border around the text. (Double) text-outline-color : The color to use for the text outline. (Color)","title":"textbox:"},{"location":"1.7.3/rofi-theme.5/#listview","text":"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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to be unhidden. The list is still present and hitting accept will activate the first entry. Each element is a box called element . Each element can contain an element-icon and element-text .","title":"listview:"},{"location":"1.7.3/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight:"},{"location":"1.7.3/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"1.7.3/rofi-theme.5/#basic-structure_1","text":"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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows","title":"Basic structure"},{"location":"1.7.3/rofi-theme.5/#error-message-structure","text":"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Error message structure"},{"location":"1.7.3/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"1.7.3/rofi-theme.5/#textbox_1","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"textbox"},{"location":"1.7.3/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"1.7.3/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"1.7.3/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"1.7.3/rofi-theme.5/#padding-and-margin","text":"Just like CSS, rofi uses the box model for each widget. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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.","title":"Padding and margin"},{"location":"1.7.3/rofi-theme.5/#spacing","text":"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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Spacing"},{"location":"1.7.3/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"1.7.3/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme","title":"DEBUGGING"},{"location":"1.7.3/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false ) { }","title":"Media support"},{"location":"1.7.3/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22","title":"Font Parsing"},{"location":"1.7.3/rofi-theme.5/#icon-handling","text":"Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions.","title":"Icon Handling"},{"location":"1.7.3/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"1.7.3/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"EXAMPLES"},{"location":"1.7.3/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.3/rofi.1/","text":"ROFI 1 rofi NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below. Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A very useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running. Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) . Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -list-keybindings List all known keybindings without trying to parse them. This can be used to look for duplicate bindings. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The time (in ms) boundary filter may take before switch from instant to delayed filter mode. Default: 300 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } } Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modes option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} Example to run applications in a dedicated cgroup with systemd. Requires a shell to escape and interpolate the unit name correctly. \"bash -c 'systemd-run --user --unit=app-rofi-\\$(systemd-escape {cmd})-\\$RANDOM {cmd}'\" -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length is negative, the entry will be unchanged. If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line. You can prefer the icon theme above the window set icon with the 'prefer-icon-theme' setting: configuration { window { prefer-icon-theme: true; } } or pass -window-prefer-icon-theme true on command line. Combi settings -combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled. History and Sorting -disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; /** Show hidden files. */ show-hidden: false; } } The show-hidden can also be triggered with the kb-delete-entry keybinding. Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted: Timeout You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } } Input change When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } } Available Modes window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes. FAQ The text in the window switcher is not nicely aligned. Try using a mono-space font or tabs + the tab-stops setting.. The window is completely black. Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\" Why do I see different icons for run,drun and window mode Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name. EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: * GitHub Discussions * IRC (#rofi on irc.libera.chat), DEBUGGING For more information see rofi-debugging(5) manpage. ISSUE TRACKER The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"1.7.3/rofi.1/#rofi-1-rofi","text":"","title":"ROFI 1 rofi"},{"location":"1.7.3/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"1.7.3/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"1.7.3/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"1.7.3/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below.","title":"USAGE"},{"location":"1.7.3/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A very useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running.","title":"Running rofi"},{"location":"1.7.3/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) .","title":"Emulating dmenu"},{"location":"1.7.3/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"1.7.3/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"1.7.3/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -list-keybindings List all known keybindings without trying to parse them. This can be used to look for duplicate bindings. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The time (in ms) boundary filter may take before switch from instant to delayed filter mode. Default: 300 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } }","title":"General"},{"location":"1.7.3/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"1.7.3/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modes option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"1.7.3/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"1.7.3/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"1.7.3/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} Example to run applications in a dedicated cgroup with systemd. Requires a shell to escape and interpolate the unit name correctly. \"bash -c 'systemd-run --user --unit=app-rofi-\\$(systemd-escape {cmd})-\\$RANDOM {cmd}'\" -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"1.7.3/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length is negative, the entry will be unchanged. If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line. You can prefer the icon theme above the window set icon with the 'prefer-icon-theme' setting: configuration { window { prefer-icon-theme: true; } } or pass -window-prefer-icon-theme true on command line.","title":"Window switcher settings"},{"location":"1.7.3/rofi.1/#combi-settings","text":"-combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled.","title":"Combi settings"},{"location":"1.7.3/rofi.1/#history-and-sorting","text":"-disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History and Sorting"},{"location":"1.7.3/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line.","title":"Message dialog"},{"location":"1.7.3/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; /** Show hidden files. */ show-hidden: false; } } The show-hidden can also be triggered with the kb-delete-entry keybinding.","title":"File browser settings"},{"location":"1.7.3/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled","title":"Other"},{"location":"1.7.3/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command )","title":"PATTERN"},{"location":"1.7.3/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"1.7.3/rofi.1/#key-bindings","text":"Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted:","title":"KEY BINDINGS"},{"location":"1.7.3/rofi.1/#timeout","text":"You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } }","title":"Timeout"},{"location":"1.7.3/rofi.1/#input-change","text":"When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } }","title":"Input change"},{"location":"1.7.3/rofi.1/#available-modes","text":"","title":"Available Modes"},{"location":"1.7.3/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"1.7.3/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"1.7.3/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"1.7.3/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"1.7.3/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"1.7.3/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"1.7.3/rofi.1/#script","text":"Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"1.7.3/rofi.1/#combi","text":"Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes.","title":"combi"},{"location":"1.7.3/rofi.1/#faq","text":"","title":"FAQ"},{"location":"1.7.3/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font or tabs + the tab-stops setting..","title":"The text in the window switcher is not nicely aligned."},{"location":"1.7.3/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black."},{"location":"1.7.3/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"1.7.3/rofi.1/#why-do-i-see-different-icons-for-rundrun-and-window-mode","text":"Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name.","title":"Why do I see different icons for run,drun and window mode"},{"location":"1.7.3/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys","title":"EXAMPLES"},{"location":"1.7.3/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"1.7.3/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"1.7.3/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"1.7.3/rofi.1/#support","text":"rofi support can be obtained: * GitHub Discussions * IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"1.7.3/rofi.1/#debugging","text":"For more information see rofi-debugging(5) manpage.","title":"DEBUGGING"},{"location":"1.7.3/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"1.7.3/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5)","title":"SEE ALSO"},{"location":"1.7.3/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.4/rofi-debugging.5/","text":"ROFI DEBUGGING 5 rofi debugging NAME Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins Get the relevant information for an issue Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this. Timing traces To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets Debug domains To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager. Creating a backtrace. First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl . SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services","title":"Debugging"},{"location":"1.7.4/rofi-debugging.5/#rofi-debugging-5-rofi-debugging","text":"","title":"ROFI DEBUGGING 5 rofi debugging"},{"location":"1.7.4/rofi-debugging.5/#name","text":"Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins","title":"NAME"},{"location":"1.7.4/rofi-debugging.5/#get-the-relevant-information-for-an-issue","text":"Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this.","title":"Get the relevant information for an issue"},{"location":"1.7.4/rofi-debugging.5/#timing-traces","text":"To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets","title":"Timing traces"},{"location":"1.7.4/rofi-debugging.5/#debug-domains","text":"To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager.","title":"Debug domains"},{"location":"1.7.4/rofi-debugging.5/#creating-a-backtrace","text":"First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl .","title":"Creating a backtrace."},{"location":"1.7.4/rofi-debugging.5/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.4/rofi-debugging.5/#author","text":"Qball Cow qball@blame.services","title":"AUTHOR"},{"location":"1.7.4/rofi-dmenu.5/","text":"ROFI-DMENU 5 rofi-dmenu NAME rofi dmenu mode - Rofi dmenu emulation DESCRIPTION To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). BASIC CONCEPT In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects an row, this is printed out to standard out, allow the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next. USAGE By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu DMENU DROP-IN REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu DMENU VS SCRIPT MODE Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information. DMENU SPECIFIC COMMANDLINE FLAGS A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \" RETURN VALUE 0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Dmenu"},{"location":"1.7.4/rofi-dmenu.5/#rofi-dmenu-5-rofi-dmenu","text":"","title":"ROFI-DMENU 5 rofi-dmenu"},{"location":"1.7.4/rofi-dmenu.5/#name","text":"rofi dmenu mode - Rofi dmenu emulation","title":"NAME"},{"location":"1.7.4/rofi-dmenu.5/#description","text":"To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"DESCRIPTION"},{"location":"1.7.4/rofi-dmenu.5/#basic-concept","text":"In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects an row, this is printed out to standard out, allow the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next.","title":"BASIC CONCEPT"},{"location":"1.7.4/rofi-dmenu.5/#usage","text":"By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu","title":"USAGE"},{"location":"1.7.4/rofi-dmenu.5/#dmenu-drop-in-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU DROP-IN REPLACEMENT"},{"location":"1.7.4/rofi-dmenu.5/#dmenu-vs-script-mode","text":"Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information.","title":"DMENU VS SCRIPT MODE"},{"location":"1.7.4/rofi-dmenu.5/#dmenu-specific-commandline-flags","text":"A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \"","title":"DMENU SPECIFIC COMMANDLINE FLAGS"},{"location":"1.7.4/rofi-dmenu.5/#return-value","text":"0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding.","title":"RETURN VALUE"},{"location":"1.7.4/rofi-dmenu.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7)","title":"SEE ALSO"},{"location":"1.7.4/rofi-dmenu.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.4/rofi-keys.5/","text":"ROFI-KEYS 5 rofi-keys NAME rofi keys - Rofi Key and Mouse bindings DESCRIPTION rofi supports overriding of any of it key and mouse binding. Setting binding Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; } Keyboard Bindings kb-primary-paste : Paste primary selection Default : Control+V,Shift+Insert kb-secondary-paste Paste clipboard Default : Control+v,Insert kb-clear-line Clear input line Default : Control+w kb-move-front Beginning of line Default : Control+a kb-move-end End of line Default : Control+e kb-move-word-back Move back one word Default : Alt+b,Control+Left kb-move-word-forward Move forward one word Default : Alt+f,Control+Right kb-move-char-back Move back one char Default : Left,Control+b kb-move-char-forward Move forward one char Default : Right,Control+f kb-remove-word-back Delete previous word Default : Control+Alt+h,Control+BackSpace kb-remove-word-forward Delete next word Default : Control+Alt+d kb-remove-char-forward Delete next char Default : Delete,Control+d kb-remove-char-back Delete previous char Default : BackSpace,Shift+BackSpace,Control+h kb-remove-to-eol Delete till the end of line Default : Control+k kb-remove-to-sol Delete till the start of line Default : Control+u kb-accept-entry Accept entry Default : Control+j,Control+m,Return,KP_Enter kb-accept-custom Use entered text as command (in ssh/run modes) Default : Control+Return kb-accept-custom-alt Use entered text as command (in ssh/run modes) Default : Control+Shift+Return kb-accept-alt Use alternate accept command. Default : Shift+Return kb-delete-entry Delete entry from history Default : Shift+Delete kb-mode-next Switch to the next mode. Default : Shift+Right,Control+Tab kb-mode-previous Switch to the previous mode. Default : Shift+Left,Control+ISO_Left_Tab kb-mode-complete Start completion for mode. Default : Control+l kb-row-left Go to the previous column Default : Control+Page_Up kb-row-right Go to the next column Default : Control+Page_Down kb-row-up Select previous entry Default : Up,Control+p kb-row-down Select next entry Default : Down,Control+n kb-row-tab Go to next row, if one left, accept it, if no left next mode. Default : kb-element-next Go to next row. Default : Tab kb-element-prev Go to previous row. Default : ISO_Left_Tab kb-page-prev Go to the previous page Default : Page_Up kb-page-next Go to the next page Default : Page_Down kb-row-first Go to the first entry Default : Home,KP_Home kb-row-last Go to the last entry Default : End,KP_End kb-row-select Set selected item as input text Default : Control+space kb-screenshot Take a screenshot of the rofi window Default : Alt+S kb-ellipsize Toggle between ellipsize modes for displayed data Default : Alt+period kb-toggle-case-sensitivity Toggle case sensitivity Default : grave,dead_grave kb-toggle-sort Toggle sort Default : Alt+grave kb-cancel Quit rofi Default : Escape,Control+g,Control+bracketleft kb-custom-1 Custom keybinding 1 Default : Alt+1 kb-custom-2 Custom keybinding 2 Default : Alt+2 kb-custom-3 Custom keybinding 3 Default : Alt+3 kb-custom-4 Custom keybinding 4 Default : Alt+4 kb-custom-5 Custom Keybinding 5 Default : Alt+5 kb-custom-6 Custom keybinding 6 Default : Alt+6 kb-custom-7 Custom Keybinding 7 Default : Alt+7 kb-custom-8 Custom keybinding 8 Default : Alt+8 kb-custom-9 Custom keybinding 9 Default : Alt+9 kb-custom-10 Custom keybinding 10 Default : Alt+0 kb-custom-11 Custom keybinding 11 Default : Alt+exclam kb-custom-12 Custom keybinding 12 Default : Alt+at kb-custom-13 Custom keybinding 13 Default : Alt+numbersign kb-custom-14 Custom keybinding 14 Default : Alt+dollar kb-custom-15 Custom keybinding 15 Default : Alt+percent kb-custom-16 Custom keybinding 16 Default : Alt+dead_circumflex kb-custom-17 Custom keybinding 17 Default : Alt+ampersand kb-custom-18 Custom keybinding 18 Default : Alt+asterisk kb-custom-19 Custom Keybinding 19 Default : Alt+parenleft kb-select-1 Select row 1 Default : Super+1 kb-select-2 Select row 2 Default : Super+2 kb-select-3 Select row 3 Default : Super+3 kb-select-4 Select row 4 Default : Super+4 kb-select-5 Select row 5 Default : Super+5 kb-select-6 Select row 6 Default : Super+6 kb-select-7 Select row 7 Default : Super+7 kb-select-8 Select row 8 Default : Super+8 kb-select-9 Select row 9 Default : Super+9 kb-select-10 Select row 10 Default : Super+0 Mouse Bindings ml-row-left Go to the previous column Default : ScrollLeft ml-row-right Go to the next column Default : ScrollRight ml-row-up Select previous entry Default : ScrollUp ml-row-down Select next entry Default : ScrollDown me-select-entry Select hovered row Default : MousePrimary me-accept-entry Accept hovered row Default : MouseDPrimary me-accept-custom Accept hovered row with custom action Default : Control+MouseDPrimary SEE ALSO rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Keys"},{"location":"1.7.4/rofi-keys.5/#rofi-keys-5-rofi-keys","text":"","title":"ROFI-KEYS 5 rofi-keys"},{"location":"1.7.4/rofi-keys.5/#name","text":"rofi keys - Rofi Key and Mouse bindings","title":"NAME"},{"location":"1.7.4/rofi-keys.5/#description","text":"rofi supports overriding of any of it key and mouse binding.","title":"DESCRIPTION"},{"location":"1.7.4/rofi-keys.5/#setting-binding","text":"Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; }","title":"Setting binding"},{"location":"1.7.4/rofi-keys.5/#keyboard-bindings","text":"","title":"Keyboard Bindings"},{"location":"1.7.4/rofi-keys.5/#kb-primary-paste","text":"Paste primary selection Default : Control+V,Shift+Insert","title":"kb-primary-paste:"},{"location":"1.7.4/rofi-keys.5/#kb-secondary-paste","text":"Paste clipboard Default : Control+v,Insert","title":"kb-secondary-paste"},{"location":"1.7.4/rofi-keys.5/#kb-clear-line","text":"Clear input line Default : Control+w","title":"kb-clear-line"},{"location":"1.7.4/rofi-keys.5/#kb-move-front","text":"Beginning of line Default : Control+a","title":"kb-move-front"},{"location":"1.7.4/rofi-keys.5/#kb-move-end","text":"End of line Default : Control+e","title":"kb-move-end"},{"location":"1.7.4/rofi-keys.5/#kb-move-word-back","text":"Move back one word Default : Alt+b,Control+Left","title":"kb-move-word-back"},{"location":"1.7.4/rofi-keys.5/#kb-move-word-forward","text":"Move forward one word Default : Alt+f,Control+Right","title":"kb-move-word-forward"},{"location":"1.7.4/rofi-keys.5/#kb-move-char-back","text":"Move back one char Default : Left,Control+b","title":"kb-move-char-back"},{"location":"1.7.4/rofi-keys.5/#kb-move-char-forward","text":"Move forward one char Default : Right,Control+f","title":"kb-move-char-forward"},{"location":"1.7.4/rofi-keys.5/#kb-remove-word-back","text":"Delete previous word Default : Control+Alt+h,Control+BackSpace","title":"kb-remove-word-back"},{"location":"1.7.4/rofi-keys.5/#kb-remove-word-forward","text":"Delete next word Default : Control+Alt+d","title":"kb-remove-word-forward"},{"location":"1.7.4/rofi-keys.5/#kb-remove-char-forward","text":"Delete next char Default : Delete,Control+d","title":"kb-remove-char-forward"},{"location":"1.7.4/rofi-keys.5/#kb-remove-char-back","text":"Delete previous char Default : BackSpace,Shift+BackSpace,Control+h","title":"kb-remove-char-back"},{"location":"1.7.4/rofi-keys.5/#kb-remove-to-eol","text":"Delete till the end of line Default : Control+k","title":"kb-remove-to-eol"},{"location":"1.7.4/rofi-keys.5/#kb-remove-to-sol","text":"Delete till the start of line Default : Control+u","title":"kb-remove-to-sol"},{"location":"1.7.4/rofi-keys.5/#kb-accept-entry","text":"Accept entry Default : Control+j,Control+m,Return,KP_Enter","title":"kb-accept-entry"},{"location":"1.7.4/rofi-keys.5/#kb-accept-custom","text":"Use entered text as command (in ssh/run modes) Default : Control+Return","title":"kb-accept-custom"},{"location":"1.7.4/rofi-keys.5/#kb-accept-custom-alt","text":"Use entered text as command (in ssh/run modes) Default : Control+Shift+Return","title":"kb-accept-custom-alt"},{"location":"1.7.4/rofi-keys.5/#kb-accept-alt","text":"Use alternate accept command. Default : Shift+Return","title":"kb-accept-alt"},{"location":"1.7.4/rofi-keys.5/#kb-delete-entry","text":"Delete entry from history Default : Shift+Delete","title":"kb-delete-entry"},{"location":"1.7.4/rofi-keys.5/#kb-mode-next","text":"Switch to the next mode. Default : Shift+Right,Control+Tab","title":"kb-mode-next"},{"location":"1.7.4/rofi-keys.5/#kb-mode-previous","text":"Switch to the previous mode. Default : Shift+Left,Control+ISO_Left_Tab","title":"kb-mode-previous"},{"location":"1.7.4/rofi-keys.5/#kb-mode-complete","text":"Start completion for mode. Default : Control+l","title":"kb-mode-complete"},{"location":"1.7.4/rofi-keys.5/#kb-row-left","text":"Go to the previous column Default : Control+Page_Up","title":"kb-row-left"},{"location":"1.7.4/rofi-keys.5/#kb-row-right","text":"Go to the next column Default : Control+Page_Down","title":"kb-row-right"},{"location":"1.7.4/rofi-keys.5/#kb-row-up","text":"Select previous entry Default : Up,Control+p","title":"kb-row-up"},{"location":"1.7.4/rofi-keys.5/#kb-row-down","text":"Select next entry Default : Down,Control+n","title":"kb-row-down"},{"location":"1.7.4/rofi-keys.5/#kb-row-tab","text":"Go to next row, if one left, accept it, if no left next mode. Default :","title":"kb-row-tab"},{"location":"1.7.4/rofi-keys.5/#kb-element-next","text":"Go to next row. Default : Tab","title":"kb-element-next"},{"location":"1.7.4/rofi-keys.5/#kb-element-prev","text":"Go to previous row. Default : ISO_Left_Tab","title":"kb-element-prev"},{"location":"1.7.4/rofi-keys.5/#kb-page-prev","text":"Go to the previous page Default : Page_Up","title":"kb-page-prev"},{"location":"1.7.4/rofi-keys.5/#kb-page-next","text":"Go to the next page Default : Page_Down","title":"kb-page-next"},{"location":"1.7.4/rofi-keys.5/#kb-row-first","text":"Go to the first entry Default : Home,KP_Home","title":"kb-row-first"},{"location":"1.7.4/rofi-keys.5/#kb-row-last","text":"Go to the last entry Default : End,KP_End","title":"kb-row-last"},{"location":"1.7.4/rofi-keys.5/#kb-row-select","text":"Set selected item as input text Default : Control+space","title":"kb-row-select"},{"location":"1.7.4/rofi-keys.5/#kb-screenshot","text":"Take a screenshot of the rofi window Default : Alt+S","title":"kb-screenshot"},{"location":"1.7.4/rofi-keys.5/#kb-ellipsize","text":"Toggle between ellipsize modes for displayed data Default : Alt+period","title":"kb-ellipsize"},{"location":"1.7.4/rofi-keys.5/#kb-toggle-case-sensitivity","text":"Toggle case sensitivity Default : grave,dead_grave","title":"kb-toggle-case-sensitivity"},{"location":"1.7.4/rofi-keys.5/#kb-toggle-sort","text":"Toggle sort Default : Alt+grave","title":"kb-toggle-sort"},{"location":"1.7.4/rofi-keys.5/#kb-cancel","text":"Quit rofi Default : Escape,Control+g,Control+bracketleft","title":"kb-cancel"},{"location":"1.7.4/rofi-keys.5/#kb-custom-1","text":"Custom keybinding 1 Default : Alt+1","title":"kb-custom-1"},{"location":"1.7.4/rofi-keys.5/#kb-custom-2","text":"Custom keybinding 2 Default : Alt+2","title":"kb-custom-2"},{"location":"1.7.4/rofi-keys.5/#kb-custom-3","text":"Custom keybinding 3 Default : Alt+3","title":"kb-custom-3"},{"location":"1.7.4/rofi-keys.5/#kb-custom-4","text":"Custom keybinding 4 Default : Alt+4","title":"kb-custom-4"},{"location":"1.7.4/rofi-keys.5/#kb-custom-5","text":"Custom Keybinding 5 Default : Alt+5","title":"kb-custom-5"},{"location":"1.7.4/rofi-keys.5/#kb-custom-6","text":"Custom keybinding 6 Default : Alt+6","title":"kb-custom-6"},{"location":"1.7.4/rofi-keys.5/#kb-custom-7","text":"Custom Keybinding 7 Default : Alt+7","title":"kb-custom-7"},{"location":"1.7.4/rofi-keys.5/#kb-custom-8","text":"Custom keybinding 8 Default : Alt+8","title":"kb-custom-8"},{"location":"1.7.4/rofi-keys.5/#kb-custom-9","text":"Custom keybinding 9 Default : Alt+9","title":"kb-custom-9"},{"location":"1.7.4/rofi-keys.5/#kb-custom-10","text":"Custom keybinding 10 Default : Alt+0","title":"kb-custom-10"},{"location":"1.7.4/rofi-keys.5/#kb-custom-11","text":"Custom keybinding 11 Default : Alt+exclam","title":"kb-custom-11"},{"location":"1.7.4/rofi-keys.5/#kb-custom-12","text":"Custom keybinding 12 Default : Alt+at","title":"kb-custom-12"},{"location":"1.7.4/rofi-keys.5/#kb-custom-13","text":"Custom keybinding 13 Default : Alt+numbersign","title":"kb-custom-13"},{"location":"1.7.4/rofi-keys.5/#kb-custom-14","text":"Custom keybinding 14 Default : Alt+dollar","title":"kb-custom-14"},{"location":"1.7.4/rofi-keys.5/#kb-custom-15","text":"Custom keybinding 15 Default : Alt+percent","title":"kb-custom-15"},{"location":"1.7.4/rofi-keys.5/#kb-custom-16","text":"Custom keybinding 16 Default : Alt+dead_circumflex","title":"kb-custom-16"},{"location":"1.7.4/rofi-keys.5/#kb-custom-17","text":"Custom keybinding 17 Default : Alt+ampersand","title":"kb-custom-17"},{"location":"1.7.4/rofi-keys.5/#kb-custom-18","text":"Custom keybinding 18 Default : Alt+asterisk","title":"kb-custom-18"},{"location":"1.7.4/rofi-keys.5/#kb-custom-19","text":"Custom Keybinding 19 Default : Alt+parenleft","title":"kb-custom-19"},{"location":"1.7.4/rofi-keys.5/#kb-select-1","text":"Select row 1 Default : Super+1","title":"kb-select-1"},{"location":"1.7.4/rofi-keys.5/#kb-select-2","text":"Select row 2 Default : Super+2","title":"kb-select-2"},{"location":"1.7.4/rofi-keys.5/#kb-select-3","text":"Select row 3 Default : Super+3","title":"kb-select-3"},{"location":"1.7.4/rofi-keys.5/#kb-select-4","text":"Select row 4 Default : Super+4","title":"kb-select-4"},{"location":"1.7.4/rofi-keys.5/#kb-select-5","text":"Select row 5 Default : Super+5","title":"kb-select-5"},{"location":"1.7.4/rofi-keys.5/#kb-select-6","text":"Select row 6 Default : Super+6","title":"kb-select-6"},{"location":"1.7.4/rofi-keys.5/#kb-select-7","text":"Select row 7 Default : Super+7","title":"kb-select-7"},{"location":"1.7.4/rofi-keys.5/#kb-select-8","text":"Select row 8 Default : Super+8","title":"kb-select-8"},{"location":"1.7.4/rofi-keys.5/#kb-select-9","text":"Select row 9 Default : Super+9","title":"kb-select-9"},{"location":"1.7.4/rofi-keys.5/#kb-select-10","text":"Select row 10 Default : Super+0","title":"kb-select-10"},{"location":"1.7.4/rofi-keys.5/#mouse-bindings","text":"","title":"Mouse Bindings"},{"location":"1.7.4/rofi-keys.5/#ml-row-left","text":"Go to the previous column Default : ScrollLeft","title":"ml-row-left"},{"location":"1.7.4/rofi-keys.5/#ml-row-right","text":"Go to the next column Default : ScrollRight","title":"ml-row-right"},{"location":"1.7.4/rofi-keys.5/#ml-row-up","text":"Select previous entry Default : ScrollUp","title":"ml-row-up"},{"location":"1.7.4/rofi-keys.5/#ml-row-down","text":"Select next entry Default : ScrollDown","title":"ml-row-down"},{"location":"1.7.4/rofi-keys.5/#me-select-entry","text":"Select hovered row Default : MousePrimary","title":"me-select-entry"},{"location":"1.7.4/rofi-keys.5/#me-accept-entry","text":"Accept hovered row Default : MouseDPrimary","title":"me-accept-entry"},{"location":"1.7.4/rofi-keys.5/#me-accept-custom","text":"Accept hovered row with custom action Default : Control+MouseDPrimary","title":"me-accept-custom"},{"location":"1.7.4/rofi-keys.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5)","title":"SEE ALSO"},{"location":"1.7.4/rofi-keys.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.4/rofi-script.5/","text":"ROFI-SCRIPT 5 rofi-script NAME rofi script mode - Rofi format for scriptable mode. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. ROFI_DATA Environment get set when script sets data option in header. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"1.7.4/rofi-script.5/#rofi-script-5-rofi-script","text":"","title":"ROFI-SCRIPT 5 rofi-script"},{"location":"1.7.4/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable mode.","title":"NAME"},{"location":"1.7.4/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"1.7.4/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"1.7.4/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"1.7.4/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"1.7.4/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"1.7.4/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"1.7.4/rofi-script.5/#rofi_data","text":"Environment get set when script sets data option in header.","title":"ROFI_DATA"},{"location":"1.7.4/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget.","title":"Passing mode options"},{"location":"1.7.4/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"1.7.4/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"1.7.4/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"1.7.4/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.4/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.4/rofi-theme.5/","text":"ROFI-THEME 5 rofi-theme NAME rofi-theme - Rofi theme format files GETTING STARTED WITH THEMING The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If you want to see the complete theme, including the modification you can run: rofi -dump-theme DEFAULT THEME LOADING By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: 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, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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 an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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 array of values 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: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ and \" . Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the 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: 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: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide * : Multiply % : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|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: highlight: bold @pink; But this is: * { 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: 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. List of values Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated. 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. * { 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. 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. 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: 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: 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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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: 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 rendering of 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 / content : 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. text-transform : text style {color} for the whole text. 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. tab-stops : 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). 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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to show up. 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: element-text { highlight: None; } To set to red underlined: 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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows Error message structure \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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: 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: 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). 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): 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: * { 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). DEBUGGING To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false ) { } Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 Icon Handling Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions. Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension. EXAMPLES Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"1.7.4/rofi-theme.5/#rofi-theme-5-rofi-theme","text":"","title":"ROFI-THEME 5 rofi-theme"},{"location":"1.7.4/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"1.7.4/rofi-theme.5/#getting-started-with-theming","text":"The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If you want to see the complete theme, including the modification you can run: rofi -dump-theme","title":"GETTING STARTED WITH THEMING"},{"location":"1.7.4/rofi-theme.5/#default-theme-loading","text":"By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: rofi -no-config -dump-theme","title":"DEFAULT THEME LOADING"},{"location":"1.7.4/rofi-theme.5/#description","text":"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.","title":"DESCRIPTION"},{"location":"1.7.4/rofi-theme.5/#format-specification","text":"","title":"FORMAT SPECIFICATION"},{"location":"1.7.4/rofi-theme.5/#encoding","text":"The encoding of the file is UTF-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"1.7.4/rofi-theme.5/#comments","text":"C and C++ file comments are supported. Anything after // and before a newline is considered a comment. Everything between /* and */ is a comment, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"1.7.4/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"1.7.4/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation.","title":"File extension"},{"location":"1.7.4/rofi-theme.5/#basic-structure","text":"Each element has a section with defined properties. Global properties can be defined in section * { } . Sub-section names begin with an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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.","title":"Basic Structure"},{"location":"1.7.4/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"1.7.4/rofi-theme.5/#element-theme-section","text":"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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"1.7.4/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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 array of values an environment variable Inherit Some of these types are a combination of other types.","title":"Properties Format"},{"location":"1.7.4/rofi-theme.5/#string","text":"Format: \"[:print:]+\" A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ and \" .","title":"String"},{"location":"1.7.4/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"1.7.4/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"1.7.4/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"1.7.4/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"1.7.4/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"1.7.4/rofi-theme.5/#text-style","text":"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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the text.","title":"Text style"},{"location":"1.7.4/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"1.7.4/rofi-theme.5/#distance","text":"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: 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.","title":"Distance"},{"location":"1.7.4/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide * : Multiply % : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of rvalue It uses the C precedence ordering.","title":"Calculating sizes"},{"location":"1.7.4/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"1.7.4/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"1.7.4/rofi-theme.5/#position","text":"Indicate a place on the window/monitor. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|south east)","title":"Position"},{"location":"1.7.4/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"1.7.4/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { 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: 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.","title":"Reference"},{"location":"1.7.4/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"1.7.4/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"1.7.4/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"1.7.4/rofi-theme.5/#list-of-values","text":"Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated.","title":"List of values"},{"location":"1.7.4/rofi-theme.5/#environment-variable","text":"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. * { 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. window { width: env(WIDTH, 40%); } If environment WIDTH is set, then that value is parsed, otherwise the default value ( 40% ).","title":"Environment variable"},{"location":"1.7.4/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"1.7.4/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"ELEMENTS PATHS"},{"location":"1.7.4/rofi-theme.5/#supported-element-path","text":"","title":"SUPPORTED ELEMENT PATH"},{"location":"1.7.4/rofi-theme.5/#name_1","text":"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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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.","title":"Name"},{"location":"1.7.4/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"1.7.4/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example:"},{"location":"1.7.4/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox:"},{"location":"1.7.4/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"1.7.4/rofi-theme.5/#supported-properties","text":"The following properties are currently supported:","title":"SUPPORTED PROPERTIES"},{"location":"1.7.4/rofi-theme.5/#all-widgets","text":"enabled : enable/disable rendering of 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.","title":"all widgets:"},{"location":"1.7.4/rofi-theme.5/#window","text":"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","title":"window:"},{"location":"1.7.4/rofi-theme.5/#scrollbar_1","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar:"},{"location":"1.7.4/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box:"},{"location":"1.7.4/rofi-theme.5/#textbox","text":"background-color : color border-color : the color used for the border around the widget. font : the font used by this textbox (string). str / content : 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. text-transform : text style {color} for the whole text. 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. tab-stops : 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).","title":"textbox:"},{"location":"1.7.4/rofi-theme.5/#listview","text":"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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to show up. Each element is a box called element . Each element can contain an element-icon and element-text .","title":"listview:"},{"location":"1.7.4/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight:"},{"location":"1.7.4/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"1.7.4/rofi-theme.5/#basic-structure_1","text":"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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows","title":"Basic structure"},{"location":"1.7.4/rofi-theme.5/#error-message-structure","text":"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Error message structure"},{"location":"1.7.4/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"1.7.4/rofi-theme.5/#textbox_1","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"textbox"},{"location":"1.7.4/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"1.7.4/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"1.7.4/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"1.7.4/rofi-theme.5/#padding-and-margin","text":"Just like CSS, rofi uses the box model for each widget. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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.","title":"Padding and margin"},{"location":"1.7.4/rofi-theme.5/#spacing","text":"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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Spacing"},{"location":"1.7.4/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"1.7.4/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme","title":"DEBUGGING"},{"location":"1.7.4/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false ) { }","title":"Media support"},{"location":"1.7.4/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22","title":"Font Parsing"},{"location":"1.7.4/rofi-theme.5/#icon-handling","text":"Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions.","title":"Icon Handling"},{"location":"1.7.4/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"1.7.4/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"EXAMPLES"},{"location":"1.7.4/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.4/rofi.1/","text":"ROFI 1 rofi NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below. Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A very useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running. Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) . Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The limit of elements that is used to switch from instant to delayed filter mode. Default: 8192 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } } Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modes option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line. Combi settings -combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled. History and Sorting -disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } } Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted: Timeout You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } } Input change When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } } Available Modes window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes. FAQ The text in the window switcher is not nicely aligned. Try using a mono-space font or tabs + the tab-stops setting.. The window is completely black. Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\" Why do I see different icons for run,drun and window mode Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name. EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat), DEBUGGING For more information see rofi-debugging(5) manpage. ISSUE TRACKER The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"1.7.4/rofi.1/#rofi-1-rofi","text":"","title":"ROFI 1 rofi"},{"location":"1.7.4/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"1.7.4/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"1.7.4/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"1.7.4/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below.","title":"USAGE"},{"location":"1.7.4/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A very useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running.","title":"Running rofi"},{"location":"1.7.4/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) .","title":"Emulating dmenu"},{"location":"1.7.4/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"1.7.4/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"1.7.4/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The limit of elements that is used to switch from instant to delayed filter mode. Default: 8192 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } }","title":"General"},{"location":"1.7.4/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"1.7.4/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modes option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"1.7.4/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"1.7.4/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"1.7.4/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"1.7.4/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line.","title":"Window switcher settings"},{"location":"1.7.4/rofi.1/#combi-settings","text":"-combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled.","title":"Combi settings"},{"location":"1.7.4/rofi.1/#history-and-sorting","text":"-disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History and Sorting"},{"location":"1.7.4/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line.","title":"Message dialog"},{"location":"1.7.4/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } }","title":"File browser settings"},{"location":"1.7.4/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled","title":"Other"},{"location":"1.7.4/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command )","title":"PATTERN"},{"location":"1.7.4/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"1.7.4/rofi.1/#key-bindings","text":"Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted:","title":"KEY BINDINGS"},{"location":"1.7.4/rofi.1/#timeout","text":"You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } }","title":"Timeout"},{"location":"1.7.4/rofi.1/#input-change","text":"When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } }","title":"Input change"},{"location":"1.7.4/rofi.1/#available-modes","text":"","title":"Available Modes"},{"location":"1.7.4/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"1.7.4/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"1.7.4/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"1.7.4/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"1.7.4/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"1.7.4/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"1.7.4/rofi.1/#script","text":"Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"1.7.4/rofi.1/#combi","text":"Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes.","title":"combi"},{"location":"1.7.4/rofi.1/#faq","text":"","title":"FAQ"},{"location":"1.7.4/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font or tabs + the tab-stops setting..","title":"The text in the window switcher is not nicely aligned."},{"location":"1.7.4/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black."},{"location":"1.7.4/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"1.7.4/rofi.1/#why-do-i-see-different-icons-for-rundrun-and-window-mode","text":"Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name.","title":"Why do I see different icons for run,drun and window mode"},{"location":"1.7.4/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys","title":"EXAMPLES"},{"location":"1.7.4/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"1.7.4/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"1.7.4/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"1.7.4/rofi.1/#support","text":"rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"1.7.4/rofi.1/#debugging","text":"For more information see rofi-debugging(5) manpage.","title":"DEBUGGING"},{"location":"1.7.4/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"1.7.4/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5)","title":"SEE ALSO"},{"location":"1.7.4/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.5/rofi-debugging.5/","text":"ROFI DEBUGGING 5 rofi debugging NAME Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins Get the relevant information for an issue Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this. Timing traces To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets Debug domains To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager. Creating a backtrace. First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl . SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services","title":"Debugging"},{"location":"1.7.5/rofi-debugging.5/#rofi-debugging-5-rofi-debugging","text":"","title":"ROFI DEBUGGING 5 rofi debugging"},{"location":"1.7.5/rofi-debugging.5/#name","text":"Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins","title":"NAME"},{"location":"1.7.5/rofi-debugging.5/#get-the-relevant-information-for-an-issue","text":"Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this.","title":"Get the relevant information for an issue"},{"location":"1.7.5/rofi-debugging.5/#timing-traces","text":"To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets","title":"Timing traces"},{"location":"1.7.5/rofi-debugging.5/#debug-domains","text":"To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager.","title":"Debug domains"},{"location":"1.7.5/rofi-debugging.5/#creating-a-backtrace","text":"First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl .","title":"Creating a backtrace."},{"location":"1.7.5/rofi-debugging.5/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.5/rofi-debugging.5/#author","text":"Qball Cow qball@blame.services","title":"AUTHOR"},{"location":"1.7.5/rofi-dmenu.5/","text":"ROFI-DMENU 5 rofi-dmenu NAME rofi dmenu mode - Rofi dmenu emulation DESCRIPTION To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). BASIC CONCEPT In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects a row, this is printed out to standard out, allowing the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next. USAGE By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu DMENU DROP-IN REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu DMENU VS SCRIPT MODE Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information. DMENU SPECIFIC COMMANDLINE FLAGS A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \" RETURN VALUE 0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Dmenu"},{"location":"1.7.5/rofi-dmenu.5/#rofi-dmenu-5-rofi-dmenu","text":"","title":"ROFI-DMENU 5 rofi-dmenu"},{"location":"1.7.5/rofi-dmenu.5/#name","text":"rofi dmenu mode - Rofi dmenu emulation","title":"NAME"},{"location":"1.7.5/rofi-dmenu.5/#description","text":"To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"DESCRIPTION"},{"location":"1.7.5/rofi-dmenu.5/#basic-concept","text":"In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects a row, this is printed out to standard out, allowing the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next.","title":"BASIC CONCEPT"},{"location":"1.7.5/rofi-dmenu.5/#usage","text":"By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu","title":"USAGE"},{"location":"1.7.5/rofi-dmenu.5/#dmenu-drop-in-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU DROP-IN REPLACEMENT"},{"location":"1.7.5/rofi-dmenu.5/#dmenu-vs-script-mode","text":"Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information.","title":"DMENU VS SCRIPT MODE"},{"location":"1.7.5/rofi-dmenu.5/#dmenu-specific-commandline-flags","text":"A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \"","title":"DMENU SPECIFIC COMMANDLINE FLAGS"},{"location":"1.7.5/rofi-dmenu.5/#return-value","text":"0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding.","title":"RETURN VALUE"},{"location":"1.7.5/rofi-dmenu.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7)","title":"SEE ALSO"},{"location":"1.7.5/rofi-dmenu.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.5/rofi-keys.5/","text":"ROFI-KEYS 5 rofi-keys NAME rofi keys - Rofi Key and Mouse bindings DESCRIPTION rofi supports overriding of any of it key and mouse binding. Setting binding Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; } Keyboard Bindings kb-primary-paste : Paste primary selection Default : Control+V,Shift+Insert kb-secondary-paste Paste clipboard Default : Control+v,Insert kb-clear-line Clear input line Default : Control+w kb-move-front Beginning of line Default : Control+a kb-move-end End of line Default : Control+e kb-move-word-back Move back one word Default : Alt+b,Control+Left kb-move-word-forward Move forward one word Default : Alt+f,Control+Right kb-move-char-back Move back one char Default : Left,Control+b kb-move-char-forward Move forward one char Default : Right,Control+f kb-remove-word-back Delete previous word Default : Control+Alt+h,Control+BackSpace kb-remove-word-forward Delete next word Default : Control+Alt+d kb-remove-char-forward Delete next char Default : Delete,Control+d kb-remove-char-back Delete previous char Default : BackSpace,Shift+BackSpace,Control+h kb-remove-to-eol Delete till the end of line Default : Control+k kb-remove-to-sol Delete till the start of line Default : Control+u kb-accept-entry Accept entry Default : Control+j,Control+m,Return,KP_Enter kb-accept-custom Use entered text as command (in ssh/run modes) Default : Control+Return kb-accept-custom-alt Use entered text as command (in ssh/run modes) Default : Control+Shift+Return kb-accept-alt Use alternate accept command. Default : Shift+Return kb-delete-entry Delete entry from history Default : Shift+Delete kb-mode-next Switch to the next mode. Default : Shift+Right,Control+Tab kb-mode-previous Switch to the previous mode. Default : Shift+Left,Control+ISO_Left_Tab kb-mode-complete Start completion for mode. Default : Control+l kb-row-left Go to the previous column Default : Control+Page_Up kb-row-right Go to the next column Default : Control+Page_Down kb-row-up Select previous entry Default : Up,Control+p kb-row-down Select next entry Default : Down,Control+n kb-row-tab Go to next row, if one left, accept it, if no left next mode. Default : kb-element-next Go to next row. Default : Tab kb-element-prev Go to previous row. Default : ISO_Left_Tab kb-page-prev Go to the previous page Default : Page_Up kb-page-next Go to the next page Default : Page_Down kb-row-first Go to the first entry Default : Home,KP_Home kb-row-last Go to the last entry Default : End,KP_End kb-row-select Set selected item as input text Default : Control+space kb-screenshot Take a screenshot of the rofi window Default : Alt+S kb-ellipsize Toggle between ellipsize modes for displayed data Default : Alt+period kb-toggle-case-sensitivity Toggle case sensitivity Default : grave,dead_grave kb-toggle-sort Toggle sort Default : Alt+grave kb-cancel Quit rofi Default : Escape,Control+g,Control+bracketleft kb-custom-1 Custom keybinding 1 Default : Alt+1 kb-custom-2 Custom keybinding 2 Default : Alt+2 kb-custom-3 Custom keybinding 3 Default : Alt+3 kb-custom-4 Custom keybinding 4 Default : Alt+4 kb-custom-5 Custom Keybinding 5 Default : Alt+5 kb-custom-6 Custom keybinding 6 Default : Alt+6 kb-custom-7 Custom Keybinding 7 Default : Alt+7 kb-custom-8 Custom keybinding 8 Default : Alt+8 kb-custom-9 Custom keybinding 9 Default : Alt+9 kb-custom-10 Custom keybinding 10 Default : Alt+0 kb-custom-11 Custom keybinding 11 Default : Alt+exclam kb-custom-12 Custom keybinding 12 Default : Alt+at kb-custom-13 Custom keybinding 13 Default : Alt+numbersign kb-custom-14 Custom keybinding 14 Default : Alt+dollar kb-custom-15 Custom keybinding 15 Default : Alt+percent kb-custom-16 Custom keybinding 16 Default : Alt+dead_circumflex kb-custom-17 Custom keybinding 17 Default : Alt+ampersand kb-custom-18 Custom keybinding 18 Default : Alt+asterisk kb-custom-19 Custom Keybinding 19 Default : Alt+parenleft kb-select-1 Select row 1 Default : Super+1 kb-select-2 Select row 2 Default : Super+2 kb-select-3 Select row 3 Default : Super+3 kb-select-4 Select row 4 Default : Super+4 kb-select-5 Select row 5 Default : Super+5 kb-select-6 Select row 6 Default : Super+6 kb-select-7 Select row 7 Default : Super+7 kb-select-8 Select row 8 Default : Super+8 kb-select-9 Select row 9 Default : Super+9 kb-select-10 Select row 10 Default : Super+0 Mouse Bindings ml-row-left Go to the previous column Default : ScrollLeft ml-row-right Go to the next column Default : ScrollRight ml-row-up Select previous entry Default : ScrollUp ml-row-down Select next entry Default : ScrollDown me-select-entry Select hovered row Default : MousePrimary me-accept-entry Accept hovered row Default : MouseDPrimary me-accept-custom Accept hovered row with custom action Default : Control+MouseDPrimary SEE ALSO rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Keys"},{"location":"1.7.5/rofi-keys.5/#rofi-keys-5-rofi-keys","text":"","title":"ROFI-KEYS 5 rofi-keys"},{"location":"1.7.5/rofi-keys.5/#name","text":"rofi keys - Rofi Key and Mouse bindings","title":"NAME"},{"location":"1.7.5/rofi-keys.5/#description","text":"rofi supports overriding of any of it key and mouse binding.","title":"DESCRIPTION"},{"location":"1.7.5/rofi-keys.5/#setting-binding","text":"Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; }","title":"Setting binding"},{"location":"1.7.5/rofi-keys.5/#keyboard-bindings","text":"","title":"Keyboard Bindings"},{"location":"1.7.5/rofi-keys.5/#kb-primary-paste","text":"Paste primary selection Default : Control+V,Shift+Insert","title":"kb-primary-paste:"},{"location":"1.7.5/rofi-keys.5/#kb-secondary-paste","text":"Paste clipboard Default : Control+v,Insert","title":"kb-secondary-paste"},{"location":"1.7.5/rofi-keys.5/#kb-clear-line","text":"Clear input line Default : Control+w","title":"kb-clear-line"},{"location":"1.7.5/rofi-keys.5/#kb-move-front","text":"Beginning of line Default : Control+a","title":"kb-move-front"},{"location":"1.7.5/rofi-keys.5/#kb-move-end","text":"End of line Default : Control+e","title":"kb-move-end"},{"location":"1.7.5/rofi-keys.5/#kb-move-word-back","text":"Move back one word Default : Alt+b,Control+Left","title":"kb-move-word-back"},{"location":"1.7.5/rofi-keys.5/#kb-move-word-forward","text":"Move forward one word Default : Alt+f,Control+Right","title":"kb-move-word-forward"},{"location":"1.7.5/rofi-keys.5/#kb-move-char-back","text":"Move back one char Default : Left,Control+b","title":"kb-move-char-back"},{"location":"1.7.5/rofi-keys.5/#kb-move-char-forward","text":"Move forward one char Default : Right,Control+f","title":"kb-move-char-forward"},{"location":"1.7.5/rofi-keys.5/#kb-remove-word-back","text":"Delete previous word Default : Control+Alt+h,Control+BackSpace","title":"kb-remove-word-back"},{"location":"1.7.5/rofi-keys.5/#kb-remove-word-forward","text":"Delete next word Default : Control+Alt+d","title":"kb-remove-word-forward"},{"location":"1.7.5/rofi-keys.5/#kb-remove-char-forward","text":"Delete next char Default : Delete,Control+d","title":"kb-remove-char-forward"},{"location":"1.7.5/rofi-keys.5/#kb-remove-char-back","text":"Delete previous char Default : BackSpace,Shift+BackSpace,Control+h","title":"kb-remove-char-back"},{"location":"1.7.5/rofi-keys.5/#kb-remove-to-eol","text":"Delete till the end of line Default : Control+k","title":"kb-remove-to-eol"},{"location":"1.7.5/rofi-keys.5/#kb-remove-to-sol","text":"Delete till the start of line Default : Control+u","title":"kb-remove-to-sol"},{"location":"1.7.5/rofi-keys.5/#kb-accept-entry","text":"Accept entry Default : Control+j,Control+m,Return,KP_Enter","title":"kb-accept-entry"},{"location":"1.7.5/rofi-keys.5/#kb-accept-custom","text":"Use entered text as command (in ssh/run modes) Default : Control+Return","title":"kb-accept-custom"},{"location":"1.7.5/rofi-keys.5/#kb-accept-custom-alt","text":"Use entered text as command (in ssh/run modes) Default : Control+Shift+Return","title":"kb-accept-custom-alt"},{"location":"1.7.5/rofi-keys.5/#kb-accept-alt","text":"Use alternate accept command. Default : Shift+Return","title":"kb-accept-alt"},{"location":"1.7.5/rofi-keys.5/#kb-delete-entry","text":"Delete entry from history Default : Shift+Delete","title":"kb-delete-entry"},{"location":"1.7.5/rofi-keys.5/#kb-mode-next","text":"Switch to the next mode. Default : Shift+Right,Control+Tab","title":"kb-mode-next"},{"location":"1.7.5/rofi-keys.5/#kb-mode-previous","text":"Switch to the previous mode. Default : Shift+Left,Control+ISO_Left_Tab","title":"kb-mode-previous"},{"location":"1.7.5/rofi-keys.5/#kb-mode-complete","text":"Start completion for mode. Default : Control+l","title":"kb-mode-complete"},{"location":"1.7.5/rofi-keys.5/#kb-row-left","text":"Go to the previous column Default : Control+Page_Up","title":"kb-row-left"},{"location":"1.7.5/rofi-keys.5/#kb-row-right","text":"Go to the next column Default : Control+Page_Down","title":"kb-row-right"},{"location":"1.7.5/rofi-keys.5/#kb-row-up","text":"Select previous entry Default : Up,Control+p","title":"kb-row-up"},{"location":"1.7.5/rofi-keys.5/#kb-row-down","text":"Select next entry Default : Down,Control+n","title":"kb-row-down"},{"location":"1.7.5/rofi-keys.5/#kb-row-tab","text":"Go to next row, if one left, accept it, if no left next mode. Default :","title":"kb-row-tab"},{"location":"1.7.5/rofi-keys.5/#kb-element-next","text":"Go to next row. Default : Tab","title":"kb-element-next"},{"location":"1.7.5/rofi-keys.5/#kb-element-prev","text":"Go to previous row. Default : ISO_Left_Tab","title":"kb-element-prev"},{"location":"1.7.5/rofi-keys.5/#kb-page-prev","text":"Go to the previous page Default : Page_Up","title":"kb-page-prev"},{"location":"1.7.5/rofi-keys.5/#kb-page-next","text":"Go to the next page Default : Page_Down","title":"kb-page-next"},{"location":"1.7.5/rofi-keys.5/#kb-row-first","text":"Go to the first entry Default : Home,KP_Home","title":"kb-row-first"},{"location":"1.7.5/rofi-keys.5/#kb-row-last","text":"Go to the last entry Default : End,KP_End","title":"kb-row-last"},{"location":"1.7.5/rofi-keys.5/#kb-row-select","text":"Set selected item as input text Default : Control+space","title":"kb-row-select"},{"location":"1.7.5/rofi-keys.5/#kb-screenshot","text":"Take a screenshot of the rofi window Default : Alt+S","title":"kb-screenshot"},{"location":"1.7.5/rofi-keys.5/#kb-ellipsize","text":"Toggle between ellipsize modes for displayed data Default : Alt+period","title":"kb-ellipsize"},{"location":"1.7.5/rofi-keys.5/#kb-toggle-case-sensitivity","text":"Toggle case sensitivity Default : grave,dead_grave","title":"kb-toggle-case-sensitivity"},{"location":"1.7.5/rofi-keys.5/#kb-toggle-sort","text":"Toggle sort Default : Alt+grave","title":"kb-toggle-sort"},{"location":"1.7.5/rofi-keys.5/#kb-cancel","text":"Quit rofi Default : Escape,Control+g,Control+bracketleft","title":"kb-cancel"},{"location":"1.7.5/rofi-keys.5/#kb-custom-1","text":"Custom keybinding 1 Default : Alt+1","title":"kb-custom-1"},{"location":"1.7.5/rofi-keys.5/#kb-custom-2","text":"Custom keybinding 2 Default : Alt+2","title":"kb-custom-2"},{"location":"1.7.5/rofi-keys.5/#kb-custom-3","text":"Custom keybinding 3 Default : Alt+3","title":"kb-custom-3"},{"location":"1.7.5/rofi-keys.5/#kb-custom-4","text":"Custom keybinding 4 Default : Alt+4","title":"kb-custom-4"},{"location":"1.7.5/rofi-keys.5/#kb-custom-5","text":"Custom Keybinding 5 Default : Alt+5","title":"kb-custom-5"},{"location":"1.7.5/rofi-keys.5/#kb-custom-6","text":"Custom keybinding 6 Default : Alt+6","title":"kb-custom-6"},{"location":"1.7.5/rofi-keys.5/#kb-custom-7","text":"Custom Keybinding 7 Default : Alt+7","title":"kb-custom-7"},{"location":"1.7.5/rofi-keys.5/#kb-custom-8","text":"Custom keybinding 8 Default : Alt+8","title":"kb-custom-8"},{"location":"1.7.5/rofi-keys.5/#kb-custom-9","text":"Custom keybinding 9 Default : Alt+9","title":"kb-custom-9"},{"location":"1.7.5/rofi-keys.5/#kb-custom-10","text":"Custom keybinding 10 Default : Alt+0","title":"kb-custom-10"},{"location":"1.7.5/rofi-keys.5/#kb-custom-11","text":"Custom keybinding 11 Default : Alt+exclam","title":"kb-custom-11"},{"location":"1.7.5/rofi-keys.5/#kb-custom-12","text":"Custom keybinding 12 Default : Alt+at","title":"kb-custom-12"},{"location":"1.7.5/rofi-keys.5/#kb-custom-13","text":"Custom keybinding 13 Default : Alt+numbersign","title":"kb-custom-13"},{"location":"1.7.5/rofi-keys.5/#kb-custom-14","text":"Custom keybinding 14 Default : Alt+dollar","title":"kb-custom-14"},{"location":"1.7.5/rofi-keys.5/#kb-custom-15","text":"Custom keybinding 15 Default : Alt+percent","title":"kb-custom-15"},{"location":"1.7.5/rofi-keys.5/#kb-custom-16","text":"Custom keybinding 16 Default : Alt+dead_circumflex","title":"kb-custom-16"},{"location":"1.7.5/rofi-keys.5/#kb-custom-17","text":"Custom keybinding 17 Default : Alt+ampersand","title":"kb-custom-17"},{"location":"1.7.5/rofi-keys.5/#kb-custom-18","text":"Custom keybinding 18 Default : Alt+asterisk","title":"kb-custom-18"},{"location":"1.7.5/rofi-keys.5/#kb-custom-19","text":"Custom Keybinding 19 Default : Alt+parenleft","title":"kb-custom-19"},{"location":"1.7.5/rofi-keys.5/#kb-select-1","text":"Select row 1 Default : Super+1","title":"kb-select-1"},{"location":"1.7.5/rofi-keys.5/#kb-select-2","text":"Select row 2 Default : Super+2","title":"kb-select-2"},{"location":"1.7.5/rofi-keys.5/#kb-select-3","text":"Select row 3 Default : Super+3","title":"kb-select-3"},{"location":"1.7.5/rofi-keys.5/#kb-select-4","text":"Select row 4 Default : Super+4","title":"kb-select-4"},{"location":"1.7.5/rofi-keys.5/#kb-select-5","text":"Select row 5 Default : Super+5","title":"kb-select-5"},{"location":"1.7.5/rofi-keys.5/#kb-select-6","text":"Select row 6 Default : Super+6","title":"kb-select-6"},{"location":"1.7.5/rofi-keys.5/#kb-select-7","text":"Select row 7 Default : Super+7","title":"kb-select-7"},{"location":"1.7.5/rofi-keys.5/#kb-select-8","text":"Select row 8 Default : Super+8","title":"kb-select-8"},{"location":"1.7.5/rofi-keys.5/#kb-select-9","text":"Select row 9 Default : Super+9","title":"kb-select-9"},{"location":"1.7.5/rofi-keys.5/#kb-select-10","text":"Select row 10 Default : Super+0","title":"kb-select-10"},{"location":"1.7.5/rofi-keys.5/#mouse-bindings","text":"","title":"Mouse Bindings"},{"location":"1.7.5/rofi-keys.5/#ml-row-left","text":"Go to the previous column Default : ScrollLeft","title":"ml-row-left"},{"location":"1.7.5/rofi-keys.5/#ml-row-right","text":"Go to the next column Default : ScrollRight","title":"ml-row-right"},{"location":"1.7.5/rofi-keys.5/#ml-row-up","text":"Select previous entry Default : ScrollUp","title":"ml-row-up"},{"location":"1.7.5/rofi-keys.5/#ml-row-down","text":"Select next entry Default : ScrollDown","title":"ml-row-down"},{"location":"1.7.5/rofi-keys.5/#me-select-entry","text":"Select hovered row Default : MousePrimary","title":"me-select-entry"},{"location":"1.7.5/rofi-keys.5/#me-accept-entry","text":"Accept hovered row Default : MouseDPrimary","title":"me-accept-entry"},{"location":"1.7.5/rofi-keys.5/#me-accept-custom","text":"Accept hovered row with custom action Default : Control+MouseDPrimary","title":"me-accept-custom"},{"location":"1.7.5/rofi-keys.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5)","title":"SEE ALSO"},{"location":"1.7.5/rofi-keys.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.5/rofi-script.5/","text":"ROFI-SCRIPT 5 rofi-script NAME rofi script mode - Rofi format for scriptable mode. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. ROFI_DATA Environment get set when script sets data option in header. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"1.7.5/rofi-script.5/#rofi-script-5-rofi-script","text":"","title":"ROFI-SCRIPT 5 rofi-script"},{"location":"1.7.5/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable mode.","title":"NAME"},{"location":"1.7.5/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"1.7.5/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"1.7.5/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"1.7.5/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"1.7.5/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"1.7.5/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"1.7.5/rofi-script.5/#rofi_data","text":"Environment get set when script sets data option in header.","title":"ROFI_DATA"},{"location":"1.7.5/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget.","title":"Passing mode options"},{"location":"1.7.5/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. meta : Specify invisible search terms. nonselectable : If true the row cannot activated. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched. multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"1.7.5/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"1.7.5/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"1.7.5/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.5/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"1.7.5/rofi-theme.5/","text":"ROFI-THEME 5 rofi-theme NAME rofi-theme - Rofi theme format files GETTING STARTED WITH THEMING The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If you want to see the complete theme, including the modification you can run: rofi -dump-theme DEFAULT THEME LOADING By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: 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, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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 an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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 array of values 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: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ and \" . Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the 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: 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: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide * : Multiply % : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|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: highlight: bold @pink; But this is: * { 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: 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. List of values Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated. 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. * { 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. 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. 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: 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: 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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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: 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 rendering of 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 / content : 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. text-transform : text style {color} for the whole text. 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. tab-stops : 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). 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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to show up. 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: element-text { highlight: None; } To set to red underlined: 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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows Error message structure \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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: 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: 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). 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): 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: * { 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). DEBUGGING To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false ) { } Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 Icon Handling Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions. Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension. EXAMPLES Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"1.7.5/rofi-theme.5/#rofi-theme-5-rofi-theme","text":"","title":"ROFI-THEME 5 rofi-theme"},{"location":"1.7.5/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"1.7.5/rofi-theme.5/#getting-started-with-theming","text":"The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If you want to see the complete theme, including the modification you can run: rofi -dump-theme","title":"GETTING STARTED WITH THEMING"},{"location":"1.7.5/rofi-theme.5/#default-theme-loading","text":"By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: rofi -no-config -dump-theme","title":"DEFAULT THEME LOADING"},{"location":"1.7.5/rofi-theme.5/#description","text":"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.","title":"DESCRIPTION"},{"location":"1.7.5/rofi-theme.5/#format-specification","text":"","title":"FORMAT SPECIFICATION"},{"location":"1.7.5/rofi-theme.5/#encoding","text":"The encoding of the file is UTF-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"1.7.5/rofi-theme.5/#comments","text":"C and C++ file comments are supported. Anything after // and before a newline is considered a comment. Everything between /* and */ is a comment, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"1.7.5/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"1.7.5/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation.","title":"File extension"},{"location":"1.7.5/rofi-theme.5/#basic-structure","text":"Each element has a section with defined properties. Global properties can be defined in section * { } . Sub-section names begin with an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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.","title":"Basic Structure"},{"location":"1.7.5/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"1.7.5/rofi-theme.5/#element-theme-section","text":"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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"1.7.5/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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 array of values an environment variable Inherit Some of these types are a combination of other types.","title":"Properties Format"},{"location":"1.7.5/rofi-theme.5/#string","text":"Format: \"[:print:]+\" A string is always surrounded by double quotes ( \" ). Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ and \" .","title":"String"},{"location":"1.7.5/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"1.7.5/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"1.7.5/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"1.7.5/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"1.7.5/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"1.7.5/rofi-theme.5/#text-style","text":"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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the text.","title":"Text style"},{"location":"1.7.5/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"1.7.5/rofi-theme.5/#distance","text":"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: 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.","title":"Distance"},{"location":"1.7.5/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide * : Multiply % : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of rvalue It uses the C precedence ordering.","title":"Calculating sizes"},{"location":"1.7.5/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"1.7.5/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"1.7.5/rofi-theme.5/#position","text":"Indicate a place on the window/monitor. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|south east)","title":"Position"},{"location":"1.7.5/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"1.7.5/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { 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: 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.","title":"Reference"},{"location":"1.7.5/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"1.7.5/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"1.7.5/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"1.7.5/rofi-theme.5/#list-of-values","text":"Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated.","title":"List of values"},{"location":"1.7.5/rofi-theme.5/#environment-variable","text":"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. * { 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. window { width: env(WIDTH, 40%); } If environment WIDTH is set, then that value is parsed, otherwise the default value ( 40% ).","title":"Environment variable"},{"location":"1.7.5/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"1.7.5/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"ELEMENTS PATHS"},{"location":"1.7.5/rofi-theme.5/#supported-element-path","text":"","title":"SUPPORTED ELEMENT PATH"},{"location":"1.7.5/rofi-theme.5/#name_1","text":"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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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.","title":"Name"},{"location":"1.7.5/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"1.7.5/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example:"},{"location":"1.7.5/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox:"},{"location":"1.7.5/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"1.7.5/rofi-theme.5/#supported-properties","text":"The following properties are currently supported:","title":"SUPPORTED PROPERTIES"},{"location":"1.7.5/rofi-theme.5/#all-widgets","text":"enabled : enable/disable rendering of 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.","title":"all widgets:"},{"location":"1.7.5/rofi-theme.5/#window","text":"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","title":"window:"},{"location":"1.7.5/rofi-theme.5/#scrollbar_1","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar:"},{"location":"1.7.5/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box:"},{"location":"1.7.5/rofi-theme.5/#textbox","text":"background-color : color border-color : the color used for the border around the widget. font : the font used by this textbox (string). str / content : 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. text-transform : text style {color} for the whole text. 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. tab-stops : 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).","title":"textbox:"},{"location":"1.7.5/rofi-theme.5/#listview","text":"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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to show up. Each element is a box called element . Each element can contain an element-icon and element-text .","title":"listview:"},{"location":"1.7.5/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight:"},{"location":"1.7.5/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"1.7.5/rofi-theme.5/#basic-structure_1","text":"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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows","title":"Basic structure"},{"location":"1.7.5/rofi-theme.5/#error-message-structure","text":"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Error message structure"},{"location":"1.7.5/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"1.7.5/rofi-theme.5/#textbox_1","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"textbox"},{"location":"1.7.5/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"1.7.5/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"1.7.5/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"1.7.5/rofi-theme.5/#padding-and-margin","text":"Just like CSS, rofi uses the box model for each widget. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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.","title":"Padding and margin"},{"location":"1.7.5/rofi-theme.5/#spacing","text":"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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Spacing"},{"location":"1.7.5/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"1.7.5/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme","title":"DEBUGGING"},{"location":"1.7.5/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false ) { }","title":"Media support"},{"location":"1.7.5/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22","title":"Font Parsing"},{"location":"1.7.5/rofi-theme.5/#icon-handling","text":"Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions.","title":"Icon Handling"},{"location":"1.7.5/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"1.7.5/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"EXAMPLES"},{"location":"1.7.5/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"1.7.5/rofi.1/","text":"ROFI 1 rofi NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below. Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A very useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running. Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) . Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The limit of elements that is used to switch from instant to delayed filter mode. Default: 8192 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } } Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modes option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line. Combi settings -combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled. History and Sorting -disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } } Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted: Timeout You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } } Input change When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } } Available Modes window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes. FAQ The text in the window switcher is not nicely aligned. Try using a mono-space font or tabs + the tab-stops setting.. The window is completely black. Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\" Why do I see different icons for run,drun and window mode Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name. EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat), DEBUGGING For more information see rofi-debugging(5) manpage. ISSUE TRACKER The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"1.7.5/rofi.1/#rofi-1-rofi","text":"","title":"ROFI 1 rofi"},{"location":"1.7.5/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"1.7.5/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"1.7.5/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"1.7.5/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below.","title":"USAGE"},{"location":"1.7.5/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A very useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running.","title":"Running rofi"},{"location":"1.7.5/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) .","title":"Emulating dmenu"},{"location":"1.7.5/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"1.7.5/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"1.7.5/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The limit of elements that is used to switch from instant to delayed filter mode. Default: 8192 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } }","title":"General"},{"location":"1.7.5/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"1.7.5/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. (See -modes option) To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num -m name -monitor num -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"1.7.5/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"1.7.5/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -parse-known-hosts -no-parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"1.7.5/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"1.7.5/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length and window width are negative, field length is width - len . If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line.","title":"Window switcher settings"},{"location":"1.7.5/rofi.1/#combi-settings","text":"-combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled.","title":"Combi settings"},{"location":"1.7.5/rofi.1/#history-and-sorting","text":"-disable-history -no-disable-history (re-enable history) Disable history -sort to enable -no-sort to disable Enable, disable sorting. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sorting method. There are 2 sorting methods: levenshtein (Default) fzf sorting. -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History and Sorting"},{"location":"1.7.5/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line.","title":"Message dialog"},{"location":"1.7.5/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; } }","title":"File browser settings"},{"location":"1.7.5/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -click-to-exit -no-click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled","title":"Other"},{"location":"1.7.5/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command )","title":"PATTERN"},{"location":"1.7.5/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"1.7.5/rofi.1/#key-bindings","text":"Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted:","title":"KEY BINDINGS"},{"location":"1.7.5/rofi.1/#timeout","text":"You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } }","title":"Timeout"},{"location":"1.7.5/rofi.1/#input-change","text":"When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } }","title":"Input change"},{"location":"1.7.5/rofi.1/#available-modes","text":"","title":"Available Modes"},{"location":"1.7.5/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"1.7.5/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"1.7.5/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"1.7.5/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are two advanced options to tweak the behaviour: configuration { drun { /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"1.7.5/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"1.7.5/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"1.7.5/rofi.1/#script","text":"Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"1.7.5/rofi.1/#combi","text":"Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes.","title":"combi"},{"location":"1.7.5/rofi.1/#faq","text":"","title":"FAQ"},{"location":"1.7.5/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font or tabs + the tab-stops setting..","title":"The text in the window switcher is not nicely aligned."},{"location":"1.7.5/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black."},{"location":"1.7.5/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: ` ` Case insensitive and no sorting. `-` Case sensitivity enabled, no sorting. `+` Case insensitive and Sorting enabled `\u00b1` Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"1.7.5/rofi.1/#why-do-i-see-different-icons-for-rundrun-and-window-mode","text":"Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name.","title":"Why do I see different icons for run,drun and window mode"},{"location":"1.7.5/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys","title":"EXAMPLES"},{"location":"1.7.5/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"1.7.5/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"1.7.5/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"1.7.5/rofi.1/#support","text":"rofi support can be obtained: * GitHub Discussions * Forum (Reddit) * IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"1.7.5/rofi.1/#debugging","text":"For more information see rofi-debugging(5) manpage.","title":"DEBUGGING"},{"location":"1.7.5/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"1.7.5/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5)","title":"SEE ALSO"},{"location":"1.7.5/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"current/rofi-debugging.5/","text":"rofi-debugging(5) NAME Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins Get the relevant information for an issue Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this. Timing traces To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets Debug domains To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager. Creating a backtrace First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl . SEE ALSO rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-keys(5),rofi-theme-selector(1) AUTHOR Qball Cow qball@blame.services","title":"Debugging"},{"location":"current/rofi-debugging.5/#rofi-debugging5","text":"","title":"rofi-debugging(5)"},{"location":"current/rofi-debugging.5/#name","text":"Debugging rofi. When reporting an issue with rofi crashing, or misbehaving. It helps to do some small test to help pin-point the problem. First try disabling your custom configuration: -no-config This disables the parsing of the configuration files. This runs rofi in stock mode. If you run custom C plugins, you can disable the plugins using: -no-plugins","title":"NAME"},{"location":"current/rofi-debugging.5/#get-the-relevant-information-for-an-issue","text":"Please pastebin the output of the following commands: rofi -help rofi -dump-config rofi -dump-theme rofi -help provides us with the configuration files parsed, the exact version, monitor layout and more useful information. The rofi -dump-config and rofi -dump-theme output gives us rofi interpretation of your configuration and theme. Please check the output for identifiable information and remove this.","title":"Get the relevant information for an issue"},{"location":"current/rofi-debugging.5/#timing-traces","text":"To get a timing trace, enable the Timings debug domain. G_MESSAGES_DEBUG=Timings rofi -show drun It will show a trace with (useful) timing information at relevant points during the execution. This will help debugging when rofi is slow to start. Example trace: (process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 (process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 (process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale (process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI (process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop (process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings (process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display (process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB (process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display (process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe (process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config (process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi (process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start (process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done (process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display (process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup (process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard (process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window (process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc (process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface (process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup (process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font (process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup (process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes (process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen (process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class (process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification (process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done (process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window (process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE (process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check (process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start (process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop (process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) (process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) (process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history (process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history (process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. (process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 (process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification (process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor (process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start (process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done (process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 (process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets","title":"Timing traces"},{"location":"current/rofi-debugging.5/#debug-domains","text":"To further debug the plugin, you can get a trace with (lots of) debug information. This debug output can be enabled for multiple parts in rofi using the glib debug framework. Debug domains can be enabled by setting the G_MESSAGES_DEBUG environment variable. At the time of creation of this page, the following debug domains exist: all: Show debug information from all domains. X11Helper: The X11 Helper functions. View: The main window view functions. Widgets.Box: The Box widget. Modes.DMenu: The dmenu mode. Modes.Run: The run mode. Modes.DRun: The desktop file run mode. Modes.Window: The window mode. Modes.Script: The script mode. Modes.Combi: The script mode. Modes.Ssh: The ssh mode. Rofi: The main application. Timings: Get timing output. Theme: Theme engine debug output. (warning lots of output). Widgets.Icon: The Icon widget. Widgets.Box: The box widget. Widgets.Container: The container widget. Widgets.Window: The window widget. Helpers.IconFetcher: Information about icon lookup. For full list see man rofi . Example: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun To get specific output from the Desktop file run dialog. To redirect the debug output to a file ( ~/rofi.log ) add: rofi -show drun -log ~/rofi.log Specifying the logfile automatically enabled all log domains. This can be useful when rofi is launched from a window manager.","title":"Debug domains"},{"location":"current/rofi-debugging.5/#creating-a-backtrace","text":"First make sure you compile rofi with debug symbols: make CFLAGS=\"-O0 -g3\" clean rofi Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way to go is to enable core file. (ulimit -c unlimited in bash) then make rofi crash. You can then load the core in GDB. gdb rofi core Then type inside gdb: thread apply all bt The output trace is useful when reporting crashes. Some distribution have systemd-coredump , this way you can easily get a backtrace via coredumpctl .","title":"Creating a backtrace"},{"location":"current/rofi-debugging.5/#see-also","text":"rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-keys(5),rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"current/rofi-debugging.5/#author","text":"Qball Cow qball@blame.services","title":"AUTHOR"},{"location":"current/rofi-dmenu.5/","text":"rofi-dmenu(5) NAME rofi dmenu mode - Rofi dmenu emulation DESCRIPTION To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings). BASIC CONCEPT In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects a row, this is printed out to standard out, allowing the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next. USAGE By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu DMENU DROP-IN REPLACEMENT If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu DMENU VS SCRIPT MODE Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information. DMENU SPECIFIC COMMANDLINE FLAGS A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \" -ellipsize-mode (start|middle|end) Set ellipsize mode on the listview. default \"end\" PARSING ROW OPTIONS Extra options for individual rows can be also set. See the rofi-script(5) manpage for details; the syntax and supported features are identical. RETURN VALUE 0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding. SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Dmenu"},{"location":"current/rofi-dmenu.5/#rofi-dmenu5","text":"","title":"rofi-dmenu(5)"},{"location":"current/rofi-dmenu.5/#name","text":"rofi dmenu mode - Rofi dmenu emulation","title":"NAME"},{"location":"current/rofi-dmenu.5/#description","text":"To integrate rofi into scripts as simple selection dialogs, rofi supports emulating dmenu(1) (A dynamic menu for X11). The website for dmenu can be found here . rofi does not aim to be 100% compatible with dmenu . There are simply too many flavors of dmenu . The idea is that the basic usage command-line flags are obeyed, theme-related flags are not. Besides, rofi offers some extended features (like multi-select, highlighting, message bar, extra key bindings).","title":"DESCRIPTION"},{"location":"current/rofi-dmenu.5/#basic-concept","text":"In dmenu mode, rofi reads data from standard in, splits them into separate entries and displays them. If the user selects a row, this is printed out to standard out, allowing the script to process it further. By default separation of rows is done on new lines, making it easy to pipe the output a one application into rofi and the output of rofi into the next.","title":"BASIC CONCEPT"},{"location":"current/rofi-dmenu.5/#usage","text":"By launching rofi with the -dmenu flag it will go into dmenu emulation mode. ls | rofi -dmenu","title":"USAGE"},{"location":"current/rofi-dmenu.5/#dmenu-drop-in-replacement","text":"If argv[0] (calling command) is dmenu, rofi will start in dmenu mode. This way, it can be used as a drop-in replacement for dmenu. Just copy or symlink rofi to dmenu in $PATH . ln -s /usr/bin/rofi /usr/bin/dmenu","title":"DMENU DROP-IN REPLACEMENT"},{"location":"current/rofi-dmenu.5/#dmenu-vs-script-mode","text":"Script mode is used to extend rofi , dmenu mode is used to extend a script. The two do share much of the same input format. Please see the rofi-script(5) manpage for more information.","title":"DMENU VS SCRIPT MODE"},{"location":"current/rofi-dmenu.5/#dmenu-specific-commandline-flags","text":"A lot of these options can also be modified by the script using special input. See the rofi-script(5) manpage for more information about this syntax. -sep separator Separator for dmenu . Example: To show a list of 'a' to 'e' with '|' as a separator: echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p prompt Specify the prompt to show in dmenu mode. For example, select 'monkey', a,b,c,d, or e. echo \"a|b|c|d|e\" | rofi -sep '|' -dmenu -p \"monkey\" Default: dmenu -l number of lines to show Maximum number of lines the menu may show before scrolling. rofi -dmenu -l 25 Default: 15 -i Makes dmenu searches case-insensitive -a X Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify: A single row: '5' A range of (last 3) rows: '-3:' 4 rows starting from row 7: '7:11' (or in legacy notation: '7-10') A set of rows: '2,0,-9' Or any combination: '5,-3:,7:11,2,0,-9' -u X Urgent row, mark X as urgent. See -a option for details. -only-match Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. -no-custom Only return a selected item, do not allow custom entry. This mode returns directly when no entries given. -format format Allows the output of dmenu to be customized (N is the total number of input entries): 's' selected string 'i' index (0 - (N-1)) 'd' index (1 - N) 'q' quote string 'p' Selected string stripped from Pango markup (Needs to be a valid string) 'f' filter string (user input) 'F' quoted filter string (user input) Default: 's' -select string Select first line that matches the given string -mesg string Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here -dump Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. -input file Reads from file instead of stdin. -password Hide the input text. This should not be considered secure! -markup-rows Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here for details about Pango markup. -multi-select Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. -sync Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior. Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump , -only-match or -auto-select . -window-title title Set name used for the window title. Will be shown as Rofi - title -w windowid Position rofi over the window with the given X11 window ID. -keep-right Set ellipsize mode to start. So, the end of the string is visible. -display-columns A comma seperated list of columns to show. -display-column-separator The column separator. This is a regex. default : '\\t' -ballot-selected-str string When multi-select is enabled, prefix this string when element is selected. default : \"\u2611 \" -ballot-unselected-str string When multi-select is enabled, prefix this string when element is not selected. default : \"\u2610 \" -ellipsize-mode (start|middle|end) Set ellipsize mode on the listview. default \"end\"","title":"DMENU SPECIFIC COMMANDLINE FLAGS"},{"location":"current/rofi-dmenu.5/#parsing-row-options","text":"Extra options for individual rows can be also set. See the rofi-script(5) manpage for details; the syntax and supported features are identical.","title":"PARSING ROW OPTIONS"},{"location":"current/rofi-dmenu.5/#return-value","text":"0 : Row has been selected accepted by user. 1 : User cancelled the selection. 10-28 : Row accepted by custom keybinding.","title":"RETURN VALUE"},{"location":"current/rofi-dmenu.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7)","title":"SEE ALSO"},{"location":"current/rofi-dmenu.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"current/rofi-keys.5/","text":"rofi-keys(5) NAME rofi keys - Rofi Key and Mouse bindings DESCRIPTION rofi supports overriding of any of it key and mouse binding. Setting binding Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; } Unsetting a binding To unset a binding, pass an empty string. configuration { kb-clear-line: \"\"; } Keyboard Bindings kb-primary-paste Paste primary selection Default: Control+V,Shift+Insert kb-secondary-paste Paste clipboard Default: Control+v,Insert kb-secondary-copy Copy current selection to clipboard Default: Control+c kb-clear-line Clear input line Default: Control+w kb-move-front Beginning of line Default: Control+a kb-move-end End of line Default: Control+e kb-move-word-back Move back one word Default: Alt+b,Control+Left kb-move-word-forward Move forward one word Default: Alt+f,Control+Right kb-move-char-back Move back one char Default: Left,Control+b kb-move-char-forward Move forward one char Default: Right,Control+f kb-remove-word-back Delete previous word Default: Control+Alt+h,Control+BackSpace kb-remove-word-forward Delete next word Default: Control+Alt+d kb-remove-char-forward Delete next char Default: Delete,Control+d kb-remove-char-back Delete previous char Default: BackSpace,Shift+BackSpace,Control+h kb-remove-to-eol Delete till the end of line Default: Control+k kb-remove-to-sol Delete till the start of line Default: Control+u kb-accept-entry Accept entry Default: Control+j,Control+m,Return,KP_Enter kb-accept-custom Use entered text as command (in ssh/run modes) Default: Control+Return kb-accept-custom-alt Use entered text as command (in ssh/run modes) Default: Control+Shift+Return kb-accept-alt Use alternate accept command. Default: Shift+Return kb-delete-entry Delete entry from history Default: Shift+Delete kb-mode-next Switch to the next mode. Default: Shift+Right,Control+Tab kb-mode-previous Switch to the previous mode. Default: Shift+Left,Control+ISO_Left_Tab kb-mode-complete Start completion for mode. Default: Control+l kb-row-left Go to the previous column Default: Control+Page_Up kb-row-right Go to the next column Default: Control+Page_Down kb-row-up Select previous entry Default: Up,Control+p kb-row-down Select next entry Default: Down,Control+n kb-row-tab Go to next row, if one left, accept it, if no left next mode. Default: kb-element-next Go to next row. Default: Tab kb-element-prev Go to previous row. Default: ISO_Left_Tab kb-page-prev Go to the previous page Default: Page_Up kb-page-next Go to the next page Default: Page_Down kb-row-first Go to the first entry Default: Home,KP_Home kb-row-last Go to the last entry Default: End,KP_End kb-row-select Set selected item as input text Default: Control+space kb-screenshot Take a screenshot of the rofi window Default: Alt+S kb-ellipsize Toggle between ellipsize modes for displayed data Default: Alt+period kb-toggle-case-sensitivity Toggle case sensitivity Default: grave,dead_grave kb-toggle-sort Toggle filtered menu sort Default: Alt+grave kb-cancel Quit rofi Default: Escape,Control+g,Control+bracketleft kb-custom-1 Custom keybinding 1 Default: Alt+1 kb-custom-2 Custom keybinding 2 Default: Alt+2 kb-custom-3 Custom keybinding 3 Default: Alt+3 kb-custom-4 Custom keybinding 4 Default: Alt+4 kb-custom-5 Custom Keybinding 5 Default: Alt+5 kb-custom-6 Custom keybinding 6 Default: Alt+6 kb-custom-7 Custom Keybinding 7 Default: Alt+7 kb-custom-8 Custom keybinding 8 Default: Alt+8 kb-custom-9 Custom keybinding 9 Default: Alt+9 kb-custom-10 Custom keybinding 10 Default: Alt+0 kb-custom-11 Custom keybinding 11 Default: Alt+exclam kb-custom-12 Custom keybinding 12 Default: Alt+at kb-custom-13 Custom keybinding 13 Default: Alt+numbersign kb-custom-14 Custom keybinding 14 Default: Alt+dollar kb-custom-15 Custom keybinding 15 Default: Alt+percent kb-custom-16 Custom keybinding 16 Default: Alt+dead_circumflex kb-custom-17 Custom keybinding 17 Default: Alt+ampersand kb-custom-18 Custom keybinding 18 Default: Alt+asterisk kb-custom-19 Custom Keybinding 19 Default: Alt+parenleft kb-select-1 Select row 1 Default: Super+1 kb-select-2 Select row 2 Default: Super+2 kb-select-3 Select row 3 Default: Super+3 kb-select-4 Select row 4 Default: Super+4 kb-select-5 Select row 5 Default: Super+5 kb-select-6 Select row 6 Default: Super+6 kb-select-7 Select row 7 Default: Super+7 kb-select-8 Select row 8 Default: Super+8 kb-select-9 Select row 9 Default: Super+9 kb-select-10 Select row 10 Default: Super+0 kb-entry-history-up Go up in the entry history. Default: Control+Up kb-entry-history-down Go down in the entry history. Default: Control+Down Mouse Bindings ml-row-left Go to the previous column Default: ScrollLeft ml-row-right Go to the next column Default: ScrollRight ml-row-up Select previous entry Default: ScrollUp ml-row-down Select next entry Default: ScrollDown me-select-entry Select hovered row Default: MousePrimary me-accept-entry Accept hovered row Default: MouseDPrimary me-accept-custom Accept hovered row with custom action Default: Control+MouseDPrimary SEE ALSO rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Keys"},{"location":"current/rofi-keys.5/#rofi-keys5","text":"","title":"rofi-keys(5)"},{"location":"current/rofi-keys.5/#name","text":"rofi keys - Rofi Key and Mouse bindings","title":"NAME"},{"location":"current/rofi-keys.5/#description","text":"rofi supports overriding of any of it key and mouse binding.","title":"DESCRIPTION"},{"location":"current/rofi-keys.5/#setting-binding","text":"Bindings can be done on the commandline (-{bindingname}): rofi -show run -kb-accept-entry 'Control+Shift+space' or via the configuration file: configuration { kb-accept-entry: \"Control+Shift+space\"; } The key can be set by its name (see above) or its keycode: configuration { kb-accept-entry: \"Control+Shift+[65]\"; } An easy way to look up keycode is xev(1). Multiple keys can be specified for an action as a comma separated list: configuration { kb-accept-entry: \"Control+Shift+space,Return\"; } By Default rofi reacts on pressing, to act on the release of all keys prepend the binding with ! : configuration { kb-accept-entry: \"!Control+Shift+space,Return\"; }","title":"Setting binding"},{"location":"current/rofi-keys.5/#unsetting-a-binding","text":"To unset a binding, pass an empty string. configuration { kb-clear-line: \"\"; }","title":"Unsetting a binding"},{"location":"current/rofi-keys.5/#keyboard-bindings","text":"kb-primary-paste Paste primary selection Default: Control+V,Shift+Insert kb-secondary-paste Paste clipboard Default: Control+v,Insert kb-secondary-copy Copy current selection to clipboard Default: Control+c kb-clear-line Clear input line Default: Control+w kb-move-front Beginning of line Default: Control+a kb-move-end End of line Default: Control+e kb-move-word-back Move back one word Default: Alt+b,Control+Left kb-move-word-forward Move forward one word Default: Alt+f,Control+Right kb-move-char-back Move back one char Default: Left,Control+b kb-move-char-forward Move forward one char Default: Right,Control+f kb-remove-word-back Delete previous word Default: Control+Alt+h,Control+BackSpace kb-remove-word-forward Delete next word Default: Control+Alt+d kb-remove-char-forward Delete next char Default: Delete,Control+d kb-remove-char-back Delete previous char Default: BackSpace,Shift+BackSpace,Control+h kb-remove-to-eol Delete till the end of line Default: Control+k kb-remove-to-sol Delete till the start of line Default: Control+u kb-accept-entry Accept entry Default: Control+j,Control+m,Return,KP_Enter kb-accept-custom Use entered text as command (in ssh/run modes) Default: Control+Return kb-accept-custom-alt Use entered text as command (in ssh/run modes) Default: Control+Shift+Return kb-accept-alt Use alternate accept command. Default: Shift+Return kb-delete-entry Delete entry from history Default: Shift+Delete kb-mode-next Switch to the next mode. Default: Shift+Right,Control+Tab kb-mode-previous Switch to the previous mode. Default: Shift+Left,Control+ISO_Left_Tab kb-mode-complete Start completion for mode. Default: Control+l kb-row-left Go to the previous column Default: Control+Page_Up kb-row-right Go to the next column Default: Control+Page_Down kb-row-up Select previous entry Default: Up,Control+p kb-row-down Select next entry Default: Down,Control+n kb-row-tab Go to next row, if one left, accept it, if no left next mode. Default: kb-element-next Go to next row. Default: Tab kb-element-prev Go to previous row. Default: ISO_Left_Tab kb-page-prev Go to the previous page Default: Page_Up kb-page-next Go to the next page Default: Page_Down kb-row-first Go to the first entry Default: Home,KP_Home kb-row-last Go to the last entry Default: End,KP_End kb-row-select Set selected item as input text Default: Control+space kb-screenshot Take a screenshot of the rofi window Default: Alt+S kb-ellipsize Toggle between ellipsize modes for displayed data Default: Alt+period kb-toggle-case-sensitivity Toggle case sensitivity Default: grave,dead_grave kb-toggle-sort Toggle filtered menu sort Default: Alt+grave kb-cancel Quit rofi Default: Escape,Control+g,Control+bracketleft kb-custom-1 Custom keybinding 1 Default: Alt+1 kb-custom-2 Custom keybinding 2 Default: Alt+2 kb-custom-3 Custom keybinding 3 Default: Alt+3 kb-custom-4 Custom keybinding 4 Default: Alt+4 kb-custom-5 Custom Keybinding 5 Default: Alt+5 kb-custom-6 Custom keybinding 6 Default: Alt+6 kb-custom-7 Custom Keybinding 7 Default: Alt+7 kb-custom-8 Custom keybinding 8 Default: Alt+8 kb-custom-9 Custom keybinding 9 Default: Alt+9 kb-custom-10 Custom keybinding 10 Default: Alt+0 kb-custom-11 Custom keybinding 11 Default: Alt+exclam kb-custom-12 Custom keybinding 12 Default: Alt+at kb-custom-13 Custom keybinding 13 Default: Alt+numbersign kb-custom-14 Custom keybinding 14 Default: Alt+dollar kb-custom-15 Custom keybinding 15 Default: Alt+percent kb-custom-16 Custom keybinding 16 Default: Alt+dead_circumflex kb-custom-17 Custom keybinding 17 Default: Alt+ampersand kb-custom-18 Custom keybinding 18 Default: Alt+asterisk kb-custom-19 Custom Keybinding 19 Default: Alt+parenleft kb-select-1 Select row 1 Default: Super+1 kb-select-2 Select row 2 Default: Super+2 kb-select-3 Select row 3 Default: Super+3 kb-select-4 Select row 4 Default: Super+4 kb-select-5 Select row 5 Default: Super+5 kb-select-6 Select row 6 Default: Super+6 kb-select-7 Select row 7 Default: Super+7 kb-select-8 Select row 8 Default: Super+8 kb-select-9 Select row 9 Default: Super+9 kb-select-10 Select row 10 Default: Super+0 kb-entry-history-up Go up in the entry history. Default: Control+Up kb-entry-history-down Go down in the entry history. Default: Control+Down","title":"Keyboard Bindings"},{"location":"current/rofi-keys.5/#mouse-bindings","text":"ml-row-left Go to the previous column Default: ScrollLeft ml-row-right Go to the next column Default: ScrollRight ml-row-up Select previous entry Default: ScrollUp ml-row-down Select next entry Default: ScrollDown me-select-entry Select hovered row Default: MousePrimary me-accept-entry Accept hovered row Default: MouseDPrimary me-accept-custom Accept hovered row with custom action Default: Control+MouseDPrimary","title":"Mouse Bindings"},{"location":"current/rofi-keys.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5)","title":"SEE ALSO"},{"location":"current/rofi-keys.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"current/rofi-script.5/","text":"rofi-script(5) NAME rofi script mode - Rofi format for scriptable mode. DESCRIPTION rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi. USAGE To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique. API Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes. Environment Rofi sets the following environment variable when executing the script: ROFI_RETV An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ). ROFI_INFO Environment get set when selected entry get set with the property value of the 'info' row option, if set. ROFI_DATA Environment get set when script sets data option in header. Passing mode options Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget. The theme property cannot change the interface while running, it is only usable for small changes in, for example background color, of widgets that get updated during display like the row color of the listview. Parsing row options Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. display : Replace the displayed string. (Original string will still be used for filtering) meta : Specify invisible search terms used for filtering. nonselectable : If true the row cannot activated. permanent : If true the row always shows, independent of filter. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched for filtering. urgent : Set urgent flag on entry (true/false) active : Set active flag on entry (true/false) multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\" Executing external program If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 ) DASH shell If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github. Script locations To specify a script there are the following options: Specify an absolute path to the script. The script is executable and located in your $PATH Scripts located in the following location are loaded on startup: The script is in $XDG_CONFIG_PATH/rofi/scripts/ , this is usually ~/.config/rofi/scripts/ . SEE ALSO rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1) AUTHOR Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Script"},{"location":"current/rofi-script.5/#rofi-script5","text":"","title":"rofi-script(5)"},{"location":"current/rofi-script.5/#name","text":"rofi script mode - Rofi format for scriptable mode.","title":"NAME"},{"location":"current/rofi-script.5/#description","text":"rofi supports modes that use simple scripts in the background to generate a list and process the result from user actions. This provide a simple interface to make simple extensions to rofi.","title":"DESCRIPTION"},{"location":"current/rofi-script.5/#usage","text":"To specify a script mode, set a mode with the following syntax: \"{name}:{executable}\" For example: rofi -show fb -modes \"fb:file_browser.sh\" The name should be unique.","title":"USAGE"},{"location":"current/rofi-script.5/#api","text":"Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline ( \\n ) (This can be changed by the script). If the user selects an option, rofi calls the executable with the text of that option as the first argument. If the script returns no entries, rofi quits. A simple script would be: #!/usr/bin/env bash if [ x\"$@\" = x\"quit\" ] then exit 0 fi echo \"reload\" echo \"quit\" This shows two entries, reload and quit. When the quit entry is selected, rofi closes.","title":"API"},{"location":"current/rofi-script.5/#environment","text":"Rofi sets the following environment variable when executing the script:","title":"Environment"},{"location":"current/rofi-script.5/#rofi_retv","text":"An integer number with the current state: 0 : Initial call of script. 1 : Selected an entry. 2 : Selected a custom entry. 10-28 : Custom keybinding 1-19 ( need to be explicitly enabled by script ).","title":"ROFI_RETV"},{"location":"current/rofi-script.5/#rofi_info","text":"Environment get set when selected entry get set with the property value of the 'info' row option, if set.","title":"ROFI_INFO"},{"location":"current/rofi-script.5/#rofi_data","text":"Environment get set when script sets data option in header.","title":"ROFI_DATA"},{"location":"current/rofi-script.5/#passing-mode-options","text":"Extra options, like setting the prompt, can be set by the script. Extra options are lines that start with a NULL character ( \\0 ) followed by a key, separator ( \\x1f ) and value. For example to set the prompt: echo -en \"\\0prompt\\x1fChange prompt\\n\" The following extra options exists: prompt : Update the prompt text. message : Update the message text. markup-rows : If 'true' renders markup in the row. urgent : Mark rows as urgent. (for syntax see the urgent option in dmenu mode) active : Mark rows as active. (for syntax see the active option in dmenu mode) delim : Set the delimiter for for next rows. Default is '\\n' and this option should finish with this. Only call this on first call of script, it is remembered for consecutive calls. no-custom : If set to 'true'; only accept listed entries, ignore custom input. use-hot-keys : If set to true, it enabled the Custom keybindings for script. Warning this breaks the normal rofi flow. keep-selection : If set, the selection is not moved to the first entry, but the current position is maintained. The filter is cleared. new-selection : If keep-selection is set, this allows you to override the selected entry (absolute position). data : Passed data to the next execution of the script via ROFI_DATA . theme : Small theme snippet to f.e. change the background color of a widget. The theme property cannot change the interface while running, it is only usable for small changes in, for example background color, of widgets that get updated during display like the row color of the listview.","title":"Passing mode options"},{"location":"current/rofi-script.5/#parsing-row-options","text":"Extra options for individual rows can be set. The extra option can be specified following the same syntax as mode option, but following the entry. For example: echo -en \"aap\\0icon\\x1ffolder\\n\" The following options are supported: icon : Set the icon for that row. display : Replace the displayed string. (Original string will still be used for filtering) meta : Specify invisible search terms used for filtering. nonselectable : If true the row cannot activated. permanent : If true the row always shows, independent of filter. info : Info that, on selection, gets placed in the ROFI_INFO environment variable. This entry does not get searched for filtering. urgent : Set urgent flag on entry (true/false) active : Set active flag on entry (true/false) multiple entries can be passed using the \\x1f separator. echo -en \"aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n\"","title":"Parsing row options"},{"location":"current/rofi-script.5/#executing-external-program","text":"If you want to launch an external program from the script, you need to make sure it is launched in the background. If not rofi will wait for its output (to display). In bash the best way to do this is using coproc . coproc ( myApp > /dev/null 2>&1 )","title":"Executing external program"},{"location":"current/rofi-script.5/#dash-shell","text":"If you use the dash shell for your script, take special care with how dash handles escaped values for the separators. See issue #1201 on github.","title":"DASH shell"},{"location":"current/rofi-script.5/#script-locations","text":"To specify a script there are the following options: Specify an absolute path to the script. The script is executable and located in your $PATH Scripts located in the following location are loaded on startup: The script is in $XDG_CONFIG_PATH/rofi/scripts/ , this is usually ~/.config/rofi/scripts/ .","title":"Script locations"},{"location":"current/rofi-script.5/#see-also","text":"rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"current/rofi-script.5/#author","text":"Qball Cow qball@gmpclient.org Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"current/rofi-theme.5/","text":"rofi-theme(5) NAME rofi-theme - Rofi theme format files Getting started with theming The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the\\ config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 We can also specify the color and width of the cursor. You could, for example, create a crimson block cursor like this: entry { cursor-color: rgb(220,20,60); cursor-width: 8px; } By default, the cursor-color will be the same as the text-color . The cursor-width will always default to 2 pixels. If you want to see the complete theme, including the modification you can run: rofi -dump-theme Default theme loading By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: 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, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value; White space White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: 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. If a theme file is split over multiple files, include files can have the: rasinc extension. Basic Structure Each element has a section with defined properties. Global properties can be defined in section * { } . Sub-section names begin with an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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: {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 array of values an environment variable Inherit Some of these types are a combination of other types. String Format: ([\"'])[:print:]+\\1 Strings are always surrounded by double ( \" ) or single ( ' , apostrophe) quotes. Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two 'Quoted text'\"; } text { content: 'Line one\\n\\tIndented line two \"Quoted text\"'; } text { content: \"Line one\\n\\tIndented line two \\\"Quoted text\\\"\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ , \" and ' (double quotes inside single-quotes or in reverse don't need escape). Integer Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12; Real Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: 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: 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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or 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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the 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: {Real}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: 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: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide - : Multiply modulo : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|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: highlight: bold @pink; But this is: * { 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: 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. List of values Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated. 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. * { 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. 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. 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: 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: element .selected { element.selected { } element selected { } Supported element paths Base widgets The default widgets available in rofi and the default hierarchic: 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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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: 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. Widget properties The following properties are currently supported: all widgets enabled : enable/disable rendering of 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 Properties 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 / content : 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. text-transform : text style {color} for the whole text. 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-markup : If true, placeholder text supports pango markup for stylizing. 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. tab-stops : 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). cursor-width : The width of the cursor. cursor-color : The color used to draw the cursor. cursor-outline : Enable a border (outline) around the cursor. (Boolean) cursor-outline-width : The width of the border around the cursor. (Double) cursor-outline-color : The color to use for the cursor outline. (Color) text-outline : Enable a border (outline) around the text. (Boolean) text-outline-width : The width of the border around the text. (Double) text-outline-color : The color to use for the text outline. (Color) 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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to be unhidden. The list is still present and hitting accept will activate the first entry. Listview widget The listview widget is special container widget. It has the following fixed children widgets: 0 or more element widgets of the type box. An optional scrollbar widget. This can be enabled using the scrollbar property. These cannot be changed using the children property. Each Entry displayed by listview is captured by a box called element . An element widget can contain the following special child widgets: element-icon : An icon widget showing the icon associated to the entry. element-text : A textbox widget showing the text associated to the entry. element-index : A textbox widget that shows the shortcut keybinding number. By default the element-icon and element-text child widgets are added to the element . This can be modified using the children property or the [no]-show-icons option. A child added with another name is treated the same as the special widget described in the advanced layout section. 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: element-text { highlight: None; } To set to red underlined: 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 layout 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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows Error message structure \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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 widget This is a read-only textbox widget. The displayed string can be set with content . Example: 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: 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). 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): 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: * { 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. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Advanced box packing More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled). Debugging To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme Media support Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable or DMENU to detect if in dmenu mode. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false )) { } @media ( enabled: DMENU) { } Conflicting constraints It is possible to define conflicting constraints in the theme. These conflicts are not explicitly reported. The most common example is forcing a specific window size, for example by enabling full-screen mode, having number of lines set in the listview and having the listview expand to available space. There is clearly a conflict in these 3 constraints. In this case, listview will not limit to the number of lines, but tries to fill the available space. It is up to the theme designer to make sure the theme handles this correctly. Font Parsing Rofi uses pango 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: mono 18 Or FontAwesome 22 From the pango manpage: The string must have the form \\[FAMILY-LIST] \\[STYLE-OPTIONS] \\[SIZE] \\[VARIATIONS] where FAMILY-LIST is a comma-separated list of families optionally terminated by a comma, STYLE_OPTIONS is a whitespace-separated list of words where each word describes one of style, variant, weight, stretch, or gravity, and SIZE is a decimal number (size in points) or optionally followed by the unit modifier \u201cpx\u201d for absolute size. VARIATIONS is a comma-separated list of font variation specifications of the form \u201c axis =value\u201d (the = sign is optional). The following words are understood as styles: \"Normal\u201d, \u201cRoman\u201d, \u201cOblique\u201d, \u201cItalic\u201d. The following words are understood as variants: \u201cSmall-Caps\u201d, \u201cAll-Small-Caps\u201d, \u201cPetite-Caps\u201d, \u201cAll-Petite-Caps\u201d, \u201cUnicase\u201d, \u201cTitle-Caps\u201d. The following words are understood as weights: \u201cThin\u201d, \u201cUltra-Light\u201d, \u201cExtra-Light\u201d, \u201cLight\u201d, \u201cSemi-Light\u201d, \u201cDemi-Light\u201d, \u201cBook\u201d, \u201cRegular\u201d, \u201cMedium\u201d, \u201cSemi-Bold\u201d, \u201cDemi-Bold\u201d, \u201cBold\u201d, \u201cUltra-Bold\u201d, \u201cExtra-Bold\u201d, \u201cHeavy\u201d, \u201cBlack\u201d, \u201cUltra-Black\u201d, \u201cExtra-Black\u201d. The following words are understood as stretch values: \u201cUltra-Condensed\u201d, \u201cExtra-Condensed\u201d, \u201cCondensed\u201d, \u201cSemi-Condensed\u201d, \u201cSemi-Expanded\u201d, \u201cExpanded\u201d, \u201cExtra-Expanded\u201d, \u201cUltra-Expanded\u201d. The following words are understood as gravity values: \u201cNot-Rotated\u201d, \u201cSouth\u201d, \u201cUpside-Down\u201d, \u201cNorth\u201d, \u201cRotated-Left\u201d, \u201cEast\u201d, \u201cRotated-Right\u201d, \u201cWest\u201d. Any one of the options may be absent. If FAMILY-LIST is absent, then the family_name field of the resulting font description will be initialized to NULL. If STYLE-OPTIONS is missing, then all style options will be set to the default values. If SIZE is missing, the size in the resulting font description will be set to 0. A typical example: \"Cantarell Italic Light 15 `wght`=200\" Icon Handling Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions. Multiple file handling 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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: If path is absolute and file exists, it will open the file. This includes expansion of '~' or '~user' On an @import or @theme it looks in the directory of the file that tried to include it. ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved (if it has no valid extension) as a filename by appending the .rasi extension. Examples Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ . SEE ALSO rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"Themes"},{"location":"current/rofi-theme.5/#rofi-theme5","text":"","title":"rofi-theme(5)"},{"location":"current/rofi-theme.5/#name","text":"rofi-theme - Rofi theme format files","title":"NAME"},{"location":"current/rofi-theme.5/#getting-started-with-theming","text":"The easiest way to get started theming rofi is by modifying your existing theme. Themes can be modified/tweaked by adding theming elements to the end of the\\ config file. The default location of this file is ~/.config/rofi/config.rasi , if the file does not exists, you can create it. A basic config: configuration { modes: [ combi ]; combi-modes: [ window, drun, run ]; } @theme \"gruvbox-light\" /* Insert theme modifications after this */ For example if we want to change the Type to filter text in the entry box we append the following: entry { placeholder: \"Type here\"; } In the above section, entry indicates the widget, placeholder is the property we want to modify and we set it to the string \"Type here\" . To find the commonly available widgets in rofi, see the 'Basic structure' section. To change the mouse over cursor to a pointer, add: entry { placeholder: \"Type here\"; cursor: pointer; } For the next modification, we want to add the icon after each text element and increase the size. First we start by modifying the element widget: element { orientation: horizontal; children: [ element-text, element-icon ]; spacing: 5px; } Resulting in the following packing: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element\u2500icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 The element (container) widget hold each entry in the listview , we add the two pre-defined children in the order we want to show. We also specify the packing direction ( orientation ) and the spacing between the children ( spacing ). We specify the space between the two children in absolute pixels ( px ). To increase the icon-size, we need to modify the element-icon widget. element-icon { size: 2.5em; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502element\u2500text \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 In this example we specify the size in the em unit. Now lets change the text color of both the entry and the element-text widget to red and background to blue. entry, element-text { text-color: red; background-color: rgb(0,0,255); } Here we use two different methods of writing down the color, for text-color we used a named color, for background-color we specify it in rgb . We also specify the property for multiple widgets by passing a comma separated list of widget names. If you want to center the text relative to the icon, we can set this: element-text { vertical-align: 0.5; } \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 element \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502element-text \u2502 \u2502 \u2500 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 icon \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 We can also specify the color and width of the cursor. You could, for example, create a crimson block cursor like this: entry { cursor-color: rgb(220,20,60); cursor-width: 8px; } By default, the cursor-color will be the same as the text-color . The cursor-width will always default to 2 pixels. If you want to see the complete theme, including the modification you can run: rofi -dump-theme","title":"Getting started with theming"},{"location":"current/rofi-theme.5/#default-theme-loading","text":"By default, rofi loads the default theme. This theme is always loaded. The default configuration contains: @theme \"default\" To unload the default theme, and load another theme, add the @theme statement to your config.rasi file. If you have a theme loaded via @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: rofi -no-config -dump-theme","title":"Default theme loading"},{"location":"current/rofi-theme.5/#description","text":"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.","title":"Description"},{"location":"current/rofi-theme.5/#format-specification","text":"","title":"Format specification"},{"location":"current/rofi-theme.5/#encoding","text":"The encoding of the file is UTF-8. Both unix ( \\n ) and windows ( \\r\\n ) newlines format are supported. But unix is preferred.","title":"Encoding"},{"location":"current/rofi-theme.5/#comments","text":"C and C++ file comments are supported. Anything after // and before a newline is considered a comment. Everything between /* and */ is a comment, this comment can span multiple lines. Comments can be nested and the C comments can be inline. The following is valid: // Magic comment. property: /* comment */ value; However, this is not: prop/*comment*/erty: value;","title":"Comments"},{"location":"current/rofi-theme.5/#white-space","text":"White space and newlines, like comments, are ignored by the parser. This: property: name; Is identical to: property : name ;","title":"White space"},{"location":"current/rofi-theme.5/#file-extension","text":"The preferred file extension for the new theme format is rasi . This is an abbreviation for r ofi a dvanced s tyle i nformation. If a theme file is split over multiple files, include files can have the: rasinc extension.","title":"File extension"},{"location":"current/rofi-theme.5/#basic-structure","text":"Each element has a section with defined properties. Global properties can be defined in section * { } . Sub-section names begin with an optional hash symbol # . It is advised to define the global properties section on top of the file to make inheritance of properties clearer. /* 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.","title":"Basic Structure"},{"location":"current/rofi-theme.5/#global-properties-section","text":"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.","title":"Global properties section"},{"location":"current/rofi-theme.5/#element-theme-section","text":"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 can optionally start with a # (for historic reasons). Multiple elements can be specified by a , . This is a valid element name: element normal.normal { background-color: blue; } button { background-color: blue; } And is identical to: 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: 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 ): 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.","title":"Element theme section"},{"location":"current/rofi-theme.5/#properties-format","text":"The properties in a section consist of: {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 array of values an environment variable Inherit Some of these types are a combination of other types.","title":"Properties Format"},{"location":"current/rofi-theme.5/#string","text":"Format: ([\"'])[:print:]+\\1 Strings are always surrounded by double ( \" ) or single ( ' , apostrophe) quotes. Between the quotes there can be any printable character. For example: font: \"Awasome 12\"; The string must be valid UTF-8, special characters can be escaped: text { content: \"Line one\\n\\tIndented line two 'Quoted text'\"; } text { content: 'Line one\\n\\tIndented line two \"Quoted text\"'; } text { content: \"Line one\\n\\tIndented line two \\\"Quoted text\\\"\"; } The following special characters can be escaped: \\b , \\f , \\n , \\r , \\t , \\v , \\ , \" and ' (double quotes inside single-quotes or in reverse don't need escape).","title":"String"},{"location":"current/rofi-theme.5/#integer","text":"Format: [-+]?[:digit:]+ An integer may contain any number. For examples: lines: 12;","title":"Integer"},{"location":"current/rofi-theme.5/#real","text":"Format: [-+]?[:digit:]+(\\.[:digit:]+)? A real is an integer with an optional fraction. For example: real: 3.4; The following is not valid: .3 , 3. or scientific notation: 3.4e-3 .","title":"Real"},{"location":"current/rofi-theme.5/#boolean","text":"Format: (true|false) Boolean value is either true or false . This is case-sensitive. For example: dynamic: false;","title":"Boolean"},{"location":"current/rofi-theme.5/#image","text":"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.","title":"Image"},{"location":"current/rofi-theme.5/#color","text":"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: background-color: #FF0000; border-color: rgba(0,0,1, 0.5); text-color: SeaGreen; or background-color: transparent; text-color: Black;","title":"Color"},{"location":"current/rofi-theme.5/#text-style","text":"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 text. strikethrough : put a line through the text. The following options are available on pango 1.50.0 and up: uppercase : Uppercase the text. lowercase : Lowercase the text. The following option is disabled as pango crashes on this if there is eel upsizing or wrapping. This will be re-enabled once fixed: capitalize : Capitalize the text.","title":"Text style"},{"location":"current/rofi-theme.5/#line-style","text":"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","title":"Line style"},{"location":"current/rofi-theme.5/#distance","text":"Format: {Integer}px Format: {Real}em Format: {Real}ch Format: {Real}% Format: {Real}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: 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.","title":"Distance"},{"location":"current/rofi-theme.5/#calculating-sizes","text":"Rofi supports some maths in calculating sizes. For this it uses the CSS syntax: width: calc( 100% - 37px ); width: calc( 20% min 512 ); It supports the following operations: + : Add - : Subtract / : Divide - : Multiply modulo : Modulo min : Minimum of lvalue or rvalue; max : Maximum of lvalue or rvalue; floor : Round down lvalue to the next multiple of rvalue ceil : Round up lvalue to the next multiple of rvalue round : Round lvalue to the next multiple of rvalue It uses the C precedence ordering.","title":"Calculating sizes"},{"location":"current/rofi-theme.5/#padding","text":"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","title":"Padding"},{"location":"current/rofi-theme.5/#border","text":"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.","title":"Border"},{"location":"current/rofi-theme.5/#position","text":"Indicate a place on the window/monitor. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 north west \u2502 north \u2502 north east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 west \u2502 center \u2502 east \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 south west \u2502 south \u2502 south east \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Format: (center|east|north|west|south|north east|north west|south west|south east)","title":"Position"},{"location":"current/rofi-theme.5/#visibility","text":"It is possible to hide widgets: inputbar { enabled: false; }","title":"Visibility"},{"location":"current/rofi-theme.5/#reference","text":"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: highlight: bold @pink; But this is: * { 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: 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.","title":"Reference"},{"location":"current/rofi-theme.5/#orientation","text":"Format: (horizontal|vertical) Specify the orientation of the widget.","title":"Orientation"},{"location":"current/rofi-theme.5/#cursor","text":"Format: (default|pointer|text) Specify the type of mouse cursor that is set when the mouse pointer is over the widget.","title":"Cursor"},{"location":"current/rofi-theme.5/#list-of-keywords","text":"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.","title":"List of keywords"},{"location":"current/rofi-theme.5/#list-of-values","text":"Format: [ value, value, ... ] An list starts with a '[' and ends with a ']'. The entries in the list are comma-separated.","title":"List of values"},{"location":"current/rofi-theme.5/#environment-variable","text":"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. * { 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. window { width: env(WIDTH, 40%); } If environment WIDTH is set, then that value is parsed, otherwise the default value ( 40% ).","title":"Environment variable"},{"location":"current/rofi-theme.5/#inherit","text":"Format: inherit Inherits the property from its parent widget. mainbox { border-color: inherit; }","title":"Inherit"},{"location":"current/rofi-theme.5/#elements-paths","text":"Element paths exists of two parts, the first part refers to the actual widget by name. Some widgets have an extra state. For example: 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: element .selected { element.selected { } element selected { }","title":"Elements paths"},{"location":"current/rofi-theme.5/#supported-element-paths","text":"","title":"Supported element paths"},{"location":"current/rofi-theme.5/#base-widgets","text":"The default widgets available in rofi and the default hierarchic: 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. textbox-current-entry : Shows the text of the currently selected entry. icon-current-entry : Shows the icon of the currently selected entry. 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.","title":"Base widgets"},{"location":"current/rofi-theme.5/#state","text":"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.","title":"State"},{"location":"current/rofi-theme.5/#example","text":"button selected.normal { } element selected.urgent { } Currently only the entrybox and scrollbar have states:","title":"Example"},{"location":"current/rofi-theme.5/#entrybox","text":"{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: 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.","title":"Entrybox"},{"location":"current/rofi-theme.5/#scrollbar","text":"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.","title":"Scrollbar"},{"location":"current/rofi-theme.5/#widget-properties","text":"The following properties are currently supported:","title":"Widget properties"},{"location":"current/rofi-theme.5/#all-widgets","text":"enabled : enable/disable rendering of 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.","title":"all widgets"},{"location":"current/rofi-theme.5/#window","text":"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","title":"window"},{"location":"current/rofi-theme.5/#scrollbar-properties","text":"background-color : color handle-width : distance handle-color : color border-color : color","title":"scrollbar Properties"},{"location":"current/rofi-theme.5/#box","text":"orientation : orientation Set the direction the elements are packed. spacing : distance Distance between the packed elements.","title":"box"},{"location":"current/rofi-theme.5/#textbox","text":"background-color : color border-color : the color used for the border around the widget. font : the font used by this textbox (string). str / content : 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. text-transform : text style {color} for the whole text. 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-markup : If true, placeholder text supports pango markup for stylizing. 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. tab-stops : 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). cursor-width : The width of the cursor. cursor-color : The color used to draw the cursor. cursor-outline : Enable a border (outline) around the cursor. (Boolean) cursor-outline-width : The width of the border around the cursor. (Double) cursor-outline-color : The color to use for the cursor outline. (Color) text-outline : Enable a border (outline) around the text. (Boolean) text-outline-width : The width of the border around the text. (Double) text-outline-color : The color to use for the text outline. (Color)","title":"textbox"},{"location":"current/rofi-theme.5/#listview","text":"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). flow : orientation The order the elements are layed out. Vertical is the original 'column' view. fixed-columns : boolean Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. require-input : boolean Listview requires user input to be unhidden. The list is still present and hitting accept will activate the first entry.","title":"listview"},{"location":"current/rofi-theme.5/#listview-widget","text":"The listview widget is special container widget. It has the following fixed children widgets: 0 or more element widgets of the type box. An optional scrollbar widget. This can be enabled using the scrollbar property. These cannot be changed using the children property. Each Entry displayed by listview is captured by a box called element . An element widget can contain the following special child widgets: element-icon : An icon widget showing the icon associated to the entry. element-text : A textbox widget showing the text associated to the entry. element-index : A textbox widget that shows the shortcut keybinding number. By default the element-icon and element-text child widgets are added to the element . This can be modified using the children property or the [no]-show-icons option. A child added with another name is treated the same as the special widget described in the advanced layout section.","title":"Listview widget"},{"location":"current/rofi-theme.5/#listview-text-highlight","text":"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: element-text { highlight: None; } To set to red underlined: element-text { highlight: underline red; }","title":"listview text highlight"},{"location":"current/rofi-theme.5/#layout","text":"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.","title":"Layout"},{"location":"current/rofi-theme.5/#basic-layout-structure","text":"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 . The current layout of rofi is structured as follows: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 mainbox {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 inputbar {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 prompt \u2502 \u2502:\u2502 \u2502 entry \u2502 \u2502#fr\u2502 \u2502 / \u2502 \u2502#ns\u2502 \u2502ci \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 message \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 listview \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 element \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502element\u2500icon \u2502 \u2502element\u2500text \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 mode\u2500switcher {BOX:horizontal} \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 Button \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 ci is the case-indicator fr is the num-filtered-rows ns is the num-rows","title":"Basic layout structure"},{"location":"current/rofi-theme.5/#error-message-structure","text":"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 window {BOX:vertical} \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 error\u2500message {BOX:vertical} \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 textbox \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Error message structure"},{"location":"current/rofi-theme.5/#advanced-layout","text":"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:","title":"Advanced layout"},{"location":"current/rofi-theme.5/#textbox-widget","text":"This is a read-only textbox widget. The displayed string can be set with content . Example: textbox-custom { expand: false; content: \"My Message\"; }","title":"Textbox widget"},{"location":"current/rofi-theme.5/#icon","text":"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: icon-paste { expand: false; filename: \"gtk-paste\"; size: 24; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"Icon"},{"location":"current/rofi-theme.5/#button","text":"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). button-paste { expand: false; content: \"My Clickable Message\"; vertical-align: 0.5; action: \"kb-primary-paste\"; }","title":"button"},{"location":"current/rofi-theme.5/#children","text":"To specify children, set the children property (this always happens on the box child, see example below): 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: * { 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; }","title":"Children"},{"location":"current/rofi-theme.5/#padding-and-margin","text":"Just like CSS, rofi uses the box model for each widget. \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 margin \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 border \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 padding \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 content \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 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.","title":"Padding and margin"},{"location":"current/rofi-theme.5/#spacing","text":"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). \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 s \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 child \u2502 p \u2502 child \u2502 p \u2502 child \u2502 \u2502 \u2502 \u2502 \u2502 a \u2502 \u2502 a \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 c \u2502 \u2502 c \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 i \u2502 \u2502 i \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 n \u2502 \u2502 n \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 g \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518","title":"Spacing"},{"location":"current/rofi-theme.5/#advanced-box-packing","text":"More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502 \u2502 dummy \u2502 \u2502 child \u2502 \u2502 dummy \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 expand: true; \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 If both dummy widgets are set to expand, child will be centered. Depending on the expand flag of child the remaining space will be equally divided between both dummy and child widget (expand enabled), or both dummy widgets (expand disabled).","title":"Advanced box packing"},{"location":"current/rofi-theme.5/#debugging","text":"To get debug information from the parser, run rofi like: G_MESSAGES_DEBUG=Parser rofi -show run Syntax errors are shown in a popup and printed out to command line with the above command. To see the elements queried during running, run: G_MESSAGES_DEBUG=Theme rofi -show run To test minor changes, part of the theme can be passed on the command line, for example to set it to full-screen: rofi -theme-str 'window { fullscreen:true;}' -show run Another syntax to modify theme properties is: rofi -theme+window+fullscreen true -show run To print the current theme, run: rofi -dump-theme","title":"Debugging"},{"location":"current/rofi-theme.5/#media-support","text":"Parts of the theme can be conditionally loaded, like the CSS @media option. @media ( min-width: 120 ) { } It supports the following keys as constraint: min-width : load when width is bigger or equal then value. max-width : load when width is smaller then value. min-height : load when height is bigger or equal then value. max-height : load when height is smaller then value. min-aspect-ratio load when aspect ratio is over value. max-aspect-ratio : load when aspect ratio is under value. monitor-id : The monitor id, see rofi -help for id's. enabled : Boolean option to enable. Supports environment variable or DMENU to detect if in dmenu mode. @media takes an integer number or a fraction, for integer number px can be added. @media ( min-width: 120 px ) { } @media ( enabled: env(DO_LIGHT, false )) { } @media ( enabled: DMENU) { }","title":"Media support"},{"location":"current/rofi-theme.5/#conflicting-constraints","text":"It is possible to define conflicting constraints in the theme. These conflicts are not explicitly reported. The most common example is forcing a specific window size, for example by enabling full-screen mode, having number of lines set in the listview and having the listview expand to available space. There is clearly a conflict in these 3 constraints. In this case, listview will not limit to the number of lines, but tries to fill the available space. It is up to the theme designer to make sure the theme handles this correctly.","title":"Conflicting constraints"},{"location":"current/rofi-theme.5/#font-parsing","text":"Rofi uses pango 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: mono 18 Or FontAwesome 22 From the pango manpage: The string must have the form \\[FAMILY-LIST] \\[STYLE-OPTIONS] \\[SIZE] \\[VARIATIONS] where FAMILY-LIST is a comma-separated list of families optionally terminated by a comma, STYLE_OPTIONS is a whitespace-separated list of words where each word describes one of style, variant, weight, stretch, or gravity, and SIZE is a decimal number (size in points) or optionally followed by the unit modifier \u201cpx\u201d for absolute size. VARIATIONS is a comma-separated list of font variation specifications of the form \u201c axis =value\u201d (the = sign is optional). The following words are understood as styles: \"Normal\u201d, \u201cRoman\u201d, \u201cOblique\u201d, \u201cItalic\u201d. The following words are understood as variants: \u201cSmall-Caps\u201d, \u201cAll-Small-Caps\u201d, \u201cPetite-Caps\u201d, \u201cAll-Petite-Caps\u201d, \u201cUnicase\u201d, \u201cTitle-Caps\u201d. The following words are understood as weights: \u201cThin\u201d, \u201cUltra-Light\u201d, \u201cExtra-Light\u201d, \u201cLight\u201d, \u201cSemi-Light\u201d, \u201cDemi-Light\u201d, \u201cBook\u201d, \u201cRegular\u201d, \u201cMedium\u201d, \u201cSemi-Bold\u201d, \u201cDemi-Bold\u201d, \u201cBold\u201d, \u201cUltra-Bold\u201d, \u201cExtra-Bold\u201d, \u201cHeavy\u201d, \u201cBlack\u201d, \u201cUltra-Black\u201d, \u201cExtra-Black\u201d. The following words are understood as stretch values: \u201cUltra-Condensed\u201d, \u201cExtra-Condensed\u201d, \u201cCondensed\u201d, \u201cSemi-Condensed\u201d, \u201cSemi-Expanded\u201d, \u201cExpanded\u201d, \u201cExtra-Expanded\u201d, \u201cUltra-Expanded\u201d. The following words are understood as gravity values: \u201cNot-Rotated\u201d, \u201cSouth\u201d, \u201cUpside-Down\u201d, \u201cNorth\u201d, \u201cRotated-Left\u201d, \u201cEast\u201d, \u201cRotated-Right\u201d, \u201cWest\u201d. Any one of the options may be absent. If FAMILY-LIST is absent, then the family_name field of the resulting font description will be initialized to NULL. If STYLE-OPTIONS is missing, then all style options will be set to the default values. If SIZE is missing, the size in the resulting font description will be set to 0. A typical example: \"Cantarell Italic Light 15 `wght`=200\"","title":"Font Parsing"},{"location":"current/rofi-theme.5/#icon-handling","text":"Rofi supports 3 ways of specifying an icon: Filename icon-name, this is looked up via the icon-theme. Markup String. It renders a string as an icon. 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 <span tag, that allows you to set color and font. Markup string: echo -en \"testing\\0icon\\x1f<span color='red'>\u23fb</span>\" | ./rofi -dmenu Getting supported icon formats: G_MESSAGES_DEBUG=Helpers.IconFetcher rofi This uses the debug framework and prints out a list of supported image file extensions.","title":"Icon Handling"},{"location":"current/rofi-theme.5/#multiple-file-handling","text":"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. import: Import and parse a second file. theme: Discard theme, and load file as a fresh theme. Syntax: @import \"myfile\" @theme \"mytheme\" The specified file can either by name , filename , full path . If a filename is provided, it will try to resolve it in the following order: If path is absolute and file exists, it will open the file. This includes expansion of '~' or '~user' On an @import or @theme it looks in the directory of the file that tried to include it. ${XDG_CONFIG_HOME}/rofi/themes/ ${XDG_CONFIG_HOME}/rofi/ ${XDG_DATA_HOME}/rofi/themes/ ${INSTALL PREFIX}/share/rofi/themes/ A name is resolved (if it has no valid extension) as a filename by appending the .rasi extension.","title":"Multiple file handling"},{"location":"current/rofi-theme.5/#examples","text":"Several examples are installed together with rofi . These can be found in {datadir}/rofi/themes/ , where {datadir} is the install path of rofi data. When installed using a package manager, this is usually: /usr/share/ .","title":"Examples"},{"location":"current/rofi-theme.5/#see-also","text":"rofi(1), rofi-script(5), rofi-theme-selector(1)","title":"SEE ALSO"},{"location":"current/rofi.1/","text":"rofi(1) NAME rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more SYNOPSIS rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ] DESCRIPTION rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more. USAGE rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below. Running rofi To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running. Emulating dmenu rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) . Display Error message rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options. CONFIGURATION There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options: General -help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -list-keybindings List all known keybindings without trying to parse them. This can be used to look for duplicate bindings. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The time (in ms) boundary filter may take before switch from instant to delayed filter mode. Default: 300 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } } Matching -matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment url : The url in case of a link type desktop file Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-' Filtered menu sort -[no]-sort Enable, disable sort for filtered menu. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sort method. There are 2 methods: levenshtein (Default) fzf Layout and Theming IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom (See -modes option). To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num , -m name , -monitor num , -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0 PATTERN setting -terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh SSH settings -ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -[no-]parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled Run settings -run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} Example to run applications in a dedicated cgroup with systemd. Requires a shell to escape and interpolate the unit name correctly. \"bash -c 'systemd-run --user --unit=app-rofi-\\$(systemd-escape {cmd})-\\$RANDOM {cmd}'\" -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd} Window switcher settings -window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length is negative, the entry will be unchanged. If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line. You can prefer the icon theme above the window set icon with the 'prefer-icon-theme' setting: configuration { window { prefer-icon-theme: true; } } or pass -window-prefer-icon-theme true on command line. Combi settings -combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled. History -[no-]disable-history Disable or re-enable history -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high) Message dialog -e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. Passing -e - reads (blocking) from standard in and displays this. File browser settings File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; /** Show hidden files. */ show-hidden: false; /** return 1 on cancel. */ cancel-returns-1: true; /** command */ command: \"xdg-open\"; } } These options can also be passed on the commandline, for example: rofi -filebrowser-cancel-returns-1 true -show filebrowser The show-hidden can also be triggered with the kb-delete-entry keybinding. Recursive Browser settings Recursive file browser behavior can be controlled via the following options: configuration { recursivebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** return 1 on cancel. */ cancel-returns-1: true; /** filter entries using regex */ filter-regex: \"(.*cache.*|.*\\.o)\"; /** command */ command: \"xdg-open\"; } } Entry history The number of previous inputs for the entry box can be modified by setting max-history on the entry box. configuration { entry { max-history: 30; } } By default the file is stored in the systems cache directory, in a file called rofi-entry-history.txt . Other -drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -[no-]click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled PATTERN To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) It processes the string as follows: {key} is replaced by its value, if {key} is not set it is removed. If the {key} is in between [] all the text between [] is removed if {key} is not set. Otherwise key is replaced and the [] are removed. For example: {ssh-client} [-p {port}] {host} THEMING Please see rofi-theme(5) manpage for more information on theming. KEY BINDINGS Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted: Timeout You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } } Input change When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } } Available Modes window Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. windowcd Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input. run Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument. drun Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are a few advanced options to tweak the behaviour: configuration { drun { /** Scan the current users desktop for desktop files. */ scan-desktop: true; /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } } ssh Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them. keys Shows a searchable list of key bindings. script Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information. combi Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes. FAQ The text in the window switcher is not nicely aligned Try using a mono-space font or tabs + the tab-stops setting.. The window is completely black Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\"). What does the icon in the top right show? The indicator shows: Case insensitive and no sorting. - Case sensitivity enabled, no sorting. + Case insensitive and Sorting enabled \u00b1 Sorting and Case sensitivity enabled\" Why do I see different icons for run,drun and window mode Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name. EXAMPLES Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys i3 In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released. LICENSE MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WEBSITE rofi website can be found here SUPPORT rofi support can be obtained: GitHub Discussions IRC (#rofi on irc.libera.chat), DEBUGGING For more information see rofi-debugging(5) manpage. ISSUE TRACKER The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first. SEE ALSO rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5) AUTHOR Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"Rofi"},{"location":"current/rofi.1/#rofi1","text":"","title":"rofi(1)"},{"location":"current/rofi.1/#name","text":"rofi - A window switcher, application launcher, ssh dialog, dmenu replacement and more","title":"NAME"},{"location":"current/rofi.1/#synopsis","text":"rofi [ -show mode ]|[ -dmenu ]|[ -e msg ] [ CONFIGURATION ]","title":"SYNOPSIS"},{"location":"current/rofi.1/#description","text":"rofi is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to filter, tokenized search and more.","title":"DESCRIPTION"},{"location":"current/rofi.1/#usage","text":"rofi 's main functionality is to assist in your workflow, allowing you to quickly switch between windows, start applications or log into a remote machine via ssh . There are different modes for different types of actions. rofi is a standalone application and should not be integrated into scripts. For integration into scripts it has a special mode that functions as a (drop-in) replacement for dmenu(1) . See emulating dmenu below.","title":"USAGE"},{"location":"current/rofi.1/#running-rofi","text":"To launch rofi directly in a certain mode, specify a mode with rofi -show <mode> . To show the drun dialog: rofi -show drun A useful setup in minimalistic window managers is to combine drun , run with window mode: rofi -show combi -modes combi -combi-modes \"window,drun,run\" In this setup it first list all open applications, then all installed applications. So if you type firefox and hit return, it will switch to the running firefox, or launch it when it is not running.","title":"Running rofi"},{"location":"current/rofi.1/#emulating-dmenu","text":"rofi can emulate dmenu(1) (a dynamic menu for X11) when launched with the -dmenu flag. For more information see rofi-dmenu(5) .","title":"Emulating dmenu"},{"location":"current/rofi.1/#display-error-message","text":"rofi error dialog can also be called from the command line. rofi -e \"my message\" Markup support can be enabled, see CONFIGURATION options.","title":"Display Error message"},{"location":"current/rofi.1/#configuration","text":"There are currently three methods of setting configuration options (evaluated in order below): System configuration file (for example /etc/rofi.rasi ). It first checks XDG_CONFIG_DIRS , and then SYSCONFDIR (that is passed at compile time). It loads the first config file it finds, it does not merge multiple system configuration files. Rasi theme file: The new theme format can be used to set configuration values. Command-line options: Arguments passed to rofi . To get a template config file, run: rofi -dump-config > config.rasi This will contain (commented) all current configuration options, modified options are uncommented. To get a template config file that sets the icon-theme run: rofi -icon-theme hicolor -dump-config . It is strongly recommended to use this as a starting point for your configuration. An empty configuration section in the config file looks like: configuration { // set config options here } Most of the configuration options mentioned below (beside options like -show , -dump-config that apply to a single run) can be set here. For example to set the dpi value to 72: configuration { dpi: 72; } The configuration system supports the following types: string integer (signed and unsigned) char boolean lists For the syntax of these options, see the rofi-theme(5) manpage. For use on the command line, Boolean options have a non-default command-line syntax. Example to enable option X: -X To disable option X: -no-X Below is a list of the most important options:","title":"CONFIGURATION"},{"location":"current/rofi.1/#general","text":"-help The help option shows the full list of command-line options and the current set values. These include dynamic (run-time generated) options. -version Show the rofi version and exit. -dump-config Dump the current active configuration, in rasi format, to stdout and exit. Information about the rasi format can be found in the rofi-theme(5) manpage. -dump-theme Dump the current active theme, in rasi format, to stdout and exit. -rasi-validate filename Try to parse the file and return 0 when successful, non-zero when failed. -list-keybindings List all known keybindings without trying to parse them. This can be used to look for duplicate bindings. -threads num Specify the number of threads rofi should use: 0: Autodetect the number of supported hardware threads. 1: Disable threading 2..n: Specify the maximum number of threads to use in the thread pool. Default: Autodetect -display display The X server to contact. Default is $DISPLAY . -dmenu Run rofi in dmenu mode. This allows for interactive scripts. In dmenu mode, rofi reads from STDIN, and output to STDOUT. A simple example, displaying three pre-defined options: echo -e \"Option #1\\nOption #2\\nOption #3\" | rofi -dmenu Or get the options from a script: ~/my_script.sh | rofi -dmenu See the rofi-dmenu(5) manpage for more information. -show mode Open rofi in a certain mode. Available modes are window , run , drun , ssh , combi . The special argument keys can be used to open a searchable list of supported key bindings (see the rofi-keys(5) manpage) To show the run-dialog: rofi -show run If -show is the last option passed to rofi, the first enabled modes is shown. -modes mode1,mode2 Specify an ordered, comma-separated list of modes to enable. Enabled modes can be changed at runtime. Default key is Ctrl+Tab . If no modes are specified, all configured modes will be enabled. To only show the run and ssh launcher: rofi -modes \"run,ssh\" -show run Custom modes can be added using the internal script mode. Each such mode has two parameters: <name>:<script> Example: Have a mode called 'Workspaces' using the i3_switch_workspaces.sh script: rofi -modes \"window,run,ssh,Workspaces:i3_switch_workspaces.sh\" -show Workspaces Notes: The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. TIP : The name is allowed to contain spaces: rofi -modes \"My File Browser:fb.sh\" -show \"My File Browser\" -case-sensitive Start in case-sensitive mode. This option can be changed at run-time using the -kb-toggle-case-sensitivity key binding. -cycle Cycle through the result list. Default is 'true'. -filter filter Filter the list by setting text in input bar to filter -config filename Load an alternative configuration file. -cache-dir filename Directory that is used to place temporary files, like history. -scroll-method method Select the scrolling method. 0: Per page, 1: continuous. -normalize-match Normalize the string before matching, so o will match \u00f6 , and \u00e9 matches e . This is not a perfect implementation, but works. For now, it disables highlighting of the matched part. -no-lazy-grab Disables lazy grab, this forces the keyboard being grabbed before gui is shown. -no-plugins Disable plugin loading. -plugin-path directory Specify the directory where rofi should look for plugins. -show-icons Show application icons in drun and window modes. -icon-theme Specify icon theme to be used. If not specified default theme from DE is used, Adwaita and gnome themes act as fallback themes. -markup Use Pango markup to format output wherever possible. -normal-window Make rofi react like a normal application window. Useful for scripts like Clerk that are basically an application. -[no-]steal-focus Make rofi steal focus on launch and restore close to window that held it when launched. -refilter-timeout-limit The time (in ms) boundary filter may take before switch from instant to delayed filter mode. Default: 300 A fallback icon can be specified for each mode: configuration { <mode>{ fallback-icon: \"<icon name>\"; } } Example configuration { run,drun { fallback-icon: \"application-x-addon\"; } }","title":"General"},{"location":"current/rofi.1/#matching","text":"-matching method Specify the matching algorithm used. Currently, the following methods are supported: normal : match the int string regex : match a regex input glob : match a glob pattern fuzzy : do a fuzzy match prefix : match prefix Default: normal Note: glob matching might be slow for larger lists -tokenize Tokenize the input. -drun-categories category1 , category2 Only show desktop files that are present in the listed categories. -drun-match-fields field1 , field2 ,... When using drun , match only with the specified Desktop entry fields. The different fields are: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment all : all the above Default: name,generic,exec,categories,keywords -drun-display-format The format string for the drun dialog: name : the application's name generic : the application's generic name exec : the application's executable categories : the application's categories comment : the application comment url : The url in case of a link type desktop file Pango markup can be used to formatting the output. Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] Note: Only fields enabled in -drun-match-fields can be used in the format string. -[no-]drun-show-actions Show actions present in the Desktop files. Default: false -window-match-fields field1 , field2 ,... When using window mode, match only with the specified fields. The different fields are: title : window's title class : window's class role : window's role name : window's name desktop : window's current desktop all : all the above Default: all -matching-negate-char char Set the character used to negate the query (i.e. if it does not match the next keyword). Set to '\\x0' to disable. Default: '-'","title":"Matching"},{"location":"current/rofi.1/#filtered-menu-sort","text":"-[no]-sort Enable, disable sort for filtered menu. This setting can be changed at runtime (see -kb-toggle-sort ). -sorting-method 'method' to specify the sort method. There are 2 methods: levenshtein (Default) fzf","title":"Filtered menu sort"},{"location":"current/rofi.1/#layout-and-theming","text":"IMPORTANT: In newer rofi releases, all the theming options have been moved into the new theme format. They are no longer normal rofi options that can be passed directly on the command line (there are too many). Small snippets can be passed on the command line: rofi -theme-str 'window {width: 50%;}' to override a single setting. They are merged into the current theme. They can also be appended at the end of the rofi config file to override parts of the theme. Most of the following options are deprecated and should not be used. Please use the new theme format to customize rofi . More information about the new format can be found in the rofi-theme(5) manpage. -location Specify where the window should be located. The numbers map to the following locations on screen: 1 2 3 8 0 4 7 6 5 Default: 0 -fixed-num-lines Keep a fixed number of visible lines. -sidebar-mode Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom (See -modes option). To show sidebar, use: rofi -show run -sidebar-mode -hover-select Automatically select the entry the mouse is hovering over. This option is best combined with custom mouse bindings. To utilize hover-select and accept an entry in a single click, use: rofi -show run -hover-select -me-select-entry '' -me-accept-entry MousePrimary -eh number Set row height (in chars) Default: 1 -auto-select When one entry is left, automatically select it. -m num , -m name , -monitor num , -monitor name Select monitor to display rofi on. It accepts as input: primary (if primary output is set), the xrandr output name, or integer number (in order of detection). Negative numbers are handled differently: -1 : the currently focused monitor. -2 : the currently focused window (that is, rofi will be displayed on top of the focused window). -3 : Position of mouse (overrides the location setting to get normal context menu behavior.) -4 : the monitor with the focused window. -5 : the monitor that shows the mouse pointer. Default: -5 See rofi -h output for the detected monitors, their position, and size. -theme filename Path to the new theme file format. This overrides the old theme settings. -theme-str string Allow theme parts to be specified on the command line as an override. For example: rofi -theme-str '#window { fullscreen: true; }' This option can be specified multiple times. This is now the method to tweak the theme via the command line. -dpi number Override the default DPI setting. If set to 0 , it tries to auto-detect based on X11 screen size (similar to i3 and GTK). If set to 1 , it tries to auto-detect based on the size of the monitor that rofi is displayed on (similar to latest Qt 5). -selected-row selected row Select a certain row. Default: 0","title":"Layout and Theming"},{"location":"current/rofi.1/#pattern-setting","text":"-terminal Specify which terminal to start. rofi -terminal xterm Pattern: {terminal} Default: x-terminal-emulator -ssh-client client Override the used ssh client. Pattern: {ssh-client} Default: ssh","title":"PATTERN setting"},{"location":"current/rofi.1/#ssh-settings","text":"-ssh-command cmd Set the command to execute when starting an ssh session. The pattern {host} is replaced by the selected ssh entry. Pattern: {ssh-client} Default: {terminal} -e {ssh-client} {host} -parse-hosts Parse the /etc/hosts file for entries. Default: disabled -[no-]parse-known-hosts Parse the ~/.ssh/known_hosts file for entries. Default: enabled","title":"SSH settings"},{"location":"current/rofi.1/#run-settings","text":"-run-command cmd Set command ( {cmd} ) to execute when running an application. See PATTERN . Default: {cmd} Example to run applications in a dedicated cgroup with systemd. Requires a shell to escape and interpolate the unit name correctly. \"bash -c 'systemd-run --user --unit=app-rofi-\\$(systemd-escape {cmd})-\\$RANDOM {cmd}'\" -run-shell-command cmd Set command to execute when running an application in a shell. See PATTERN . Default: {terminal} -e {cmd} -run-list-command cmd If set, use an external tool to generate a list of executable commands. Uses run-command . Default: {cmd}","title":"Run settings"},{"location":"current/rofi.1/#window-switcher-settings","text":"-window-format format Format what is being displayed for windows. format : {field[:len]} field : w : desktop name t : title of window n : name r : role c : class len : maximum field length (0 for auto-size). If length is negative, the entry will be unchanged. If length is positive, the entry will be truncated or padded to fill that length. default: {w} {c} {t} -window-command cmd Set command to execute on selected window for an alt action ( -kb-accept-alt ). See PATTERN . Default: \"wmctrl -i -R {window}\" -window-thumbnail Show window thumbnail (if available) as icon in the window switcher. You can stop rofi from exiting when closing a window (allowing multiple to be closed in a row). configuration { window { close-on-delete: false; } } You can hide the currently active window with the 'hide-active-window' setting: configuration { window { hide-active-window: true; } } or pass -window-hide-active-window true on command line. You can prefer the icon theme above the window set icon with the 'prefer-icon-theme' setting: configuration { window { prefer-icon-theme: true; } } or pass -window-prefer-icon-theme true on command line.","title":"Window switcher settings"},{"location":"current/rofi.1/#combi-settings","text":"-combi-modes mode1 , mode2 The modes to combine in combi mode. For syntax to -combi-modes , see -modes . To get one merge view, of window , run , and ssh : rofi -show combi -combi-modes \"window,run,ssh\" -modes combi NOTE : The i3 window manager dislikes commas in the command when specifying an exec command. For that case, # can be used as a separator. -combi-display-format The format string for entries in the combi dialog: mode : the mode display name text : the entry text Pango markup can be used to formatting the output. Default: {mode} {text} Note: This setting is ignored if combi-hide-mode-prefix is enabled.","title":"Combi settings"},{"location":"current/rofi.1/#history","text":"-[no-]disable-history Disable or re-enable history -max-history-size number Maximum number of entries to store in history. Defaults to 25. (WARNING: can cause slowdowns when set too high)","title":"History"},{"location":"current/rofi.1/#message-dialog","text":"-e message Pops up a message dialog (used internally for showing errors) with message . Message can be multi-line. Passing -e - reads (blocking) from standard in and displays this.","title":"Message dialog"},{"location":"current/rofi.1/#file-browser-settings","text":"File browser behavior can be controlled via the following options: configuration { filebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** * Sorting method. Can be set to: * - \"name\" * - \"mtime\" (modification time) * - \"atime\" (access time) * - \"ctime\" (change time) */ sorting-method: \"name\"; /** Group directories before files. */ directories-first: true; /** Show hidden files. */ show-hidden: false; /** return 1 on cancel. */ cancel-returns-1: true; /** command */ command: \"xdg-open\"; } } These options can also be passed on the commandline, for example: rofi -filebrowser-cancel-returns-1 true -show filebrowser The show-hidden can also be triggered with the kb-delete-entry keybinding.","title":"File browser settings"},{"location":"current/rofi.1/#recursive-browser-settings","text":"Recursive file browser behavior can be controlled via the following options: configuration { recursivebrowser { /** Directory the file browser starts in. */ directory: \"/some/directory\"; /** return 1 on cancel. */ cancel-returns-1: true; /** filter entries using regex */ filter-regex: \"(.*cache.*|.*\\.o)\"; /** command */ command: \"xdg-open\"; } }","title":"Recursive Browser settings"},{"location":"current/rofi.1/#entry-history","text":"The number of previous inputs for the entry box can be modified by setting max-history on the entry box. configuration { entry { max-history: 30; } } By default the file is stored in the systems cache directory, in a file called rofi-entry-history.txt .","title":"Entry history"},{"location":"current/rofi.1/#other","text":"-drun-use-desktop-cache Build and use a cache with the content of desktop files. Usable for systems with slow hard drives. -drun-reload-desktop-cache If drun-use-desktop-cache is enabled, rebuild a cache with the content of desktop files. -drun-url-launcher command Command to open a Desktop Entry that is a Link. -pid path Make rofi create a pid file and check this on startup. The pid file prevents multiple rofi instances from running simultaneously. This is useful when running rofi from a key-binding daemon. -replace If rofi is already running, based on pid file, try to kill that instance. -display-{mode} string Set the name to use for mode. This is used as prompt and in combi-browser. It is now preferred to use the configuration file: configuration { {mode} { display-name: *string*; } } -[no-]click-to-exit Click the mouse outside the rofi window to exit. Default: enabled -xserver-i300-workaround Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker. Default: disabled","title":"Other"},{"location":"current/rofi.1/#pattern","text":"To launch commands (for example, when using the ssh launcher), the user can enter the used command-line. The following keys can be used that will be replaced at runtime: {host} : the host to connect to {terminal} : the configured terminal (see -terminal) {ssh-client} : the configured ssh client (see -ssh-client) {cmd} : the command to execute {window} : the window ID of the selected window (in window-command ) It processes the string as follows: {key} is replaced by its value, if {key} is not set it is removed. If the {key} is in between [] all the text between [] is removed if {key} is not set. Otherwise key is replaced and the [] are removed. For example: {ssh-client} [-p {port}] {host}","title":"PATTERN"},{"location":"current/rofi.1/#theming","text":"Please see rofi-theme(5) manpage for more information on theming.","title":"THEMING"},{"location":"current/rofi.1/#key-bindings","text":"Please see the rofi-keys(5) manpage for the keybindings and how to set them up. The keybinding can also be used for actions, when the action is executed the mentioned keystroke is inserted:","title":"KEY BINDINGS"},{"location":"current/rofi.1/#timeout","text":"You can configure an action to be taken when rofi has not been interacted with for a certain amount of seconds. You can specify a keybinding to trigger after X seconds. configuration { timeout { delay: 15; action: \"kb-cancel\"; } }","title":"Timeout"},{"location":"current/rofi.1/#input-change","text":"When the input of the textbox changes: configuration { inputchange { action: \"kb-row-first\"; } }","title":"Input change"},{"location":"current/rofi.1/#available-modes","text":"","title":"Available Modes"},{"location":"current/rofi.1/#window","text":"Show a list of all the windows and allow switching between them. Pressing the delete-entry binding ( shift-delete ) will close the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"window"},{"location":"current/rofi.1/#windowcd","text":"Shows a list of the windows on the current desktop and allows switching between them. Pressing the delete-entry binding ( shift-delete ) will kill the window. Pressing the accept-custom binding ( control-enter or shift-enter ) will run a command on the window. (See option window-command ); If there is no match, it will try to launch the input.","title":"windowcd"},{"location":"current/rofi.1/#run","text":"Shows a list of executables in $PATH and can launch them (optional in a terminal). Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application with a file as the first argument.","title":"run"},{"location":"current/rofi.1/#drun","text":"Same as the run launches, but the list is created from the installed desktop files. It automatically launches them in a terminal if specified in the Desktop File. Pressing the delete-entry binding ( shift-delete ) will remove this entry from the run history. Pressing the accept-custom binding ( control-enter ) will run the command as entered in the entry box. Pressing the accept-alt binding ( shift-enter ) will run the command in a terminal. When pressing the mode-complete binding ( Control-l ), you can use the File Browser mode to launch the application passing a file as argument if specified in the desktop file. The DRUN mode tries to follow the XDG Desktop Entry Specification and should be compatible with applications using this standard. Some applications create invalid desktop files, rofi will discard these entries. See the debugging section for more info on DRUN mode, this will print why desktop files are discarded. There are a few advanced options to tweak the behaviour: configuration { drun { /** Scan the current users desktop for desktop files. */ scan-desktop: true; /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }","title":"drun"},{"location":"current/rofi.1/#ssh","text":"Shows a list of SSH targets based on your ssh config file, and allows to quickly ssh into them.","title":"ssh"},{"location":"current/rofi.1/#keys","text":"Shows a searchable list of key bindings.","title":"keys"},{"location":"current/rofi.1/#script","text":"Allows custom scripted Modes to be added, see the rofi-script(5) manpage for more information.","title":"script"},{"location":"current/rofi.1/#combi","text":"Combines multiple modes in one list. Specify which modes are included with the -combi-modes option. When using the combi mode, a !bang can be used to filter the results by modes. All modes that match the bang as a prefix are included. For example, say you have specified -combi-modes run,window,windowcd . If your query begins with the bang !w , only results from the window and windowcd modes are shown, even if the rest of the input text would match results from run . If no match, the input is handled by the first combined modes.","title":"combi"},{"location":"current/rofi.1/#faq","text":"","title":"FAQ"},{"location":"current/rofi.1/#the-text-in-the-window-switcher-is-not-nicely-aligned","text":"Try using a mono-space font or tabs + the tab-stops setting..","title":"The text in the window switcher is not nicely aligned"},{"location":"current/rofi.1/#the-window-is-completely-black","text":"Check quotes used on the command-line: you might have used \u201c (\"smart quotes\") instead of \" (\"machine quotes\").","title":"The window is completely black"},{"location":"current/rofi.1/#what-does-the-icon-in-the-top-right-show","text":"The indicator shows: Case insensitive and no sorting. - Case sensitivity enabled, no sorting. + Case insensitive and Sorting enabled \u00b1 Sorting and Case sensitivity enabled\"","title":"What does the icon in the top right show?"},{"location":"current/rofi.1/#why-do-i-see-different-icons-for-rundrun-and-window-mode","text":"Each of these modes uses different methods of resolving the icon: Window: It first uses the icon that the application exposes via the X11 Server, if none is set it does a lookup of the window Class name in the icon theme. drun: It uses the icon set in the desktop file. run: It does a lookup using the executable name.","title":"Why do I see different icons for run,drun and window mode"},{"location":"current/rofi.1/#examples","text":"Some basic usage examples of rofi : Show the run dialog: rofi -modes run -show run Show the run dialog, and allow switching to Desktop File run dialog ( drun ): rofi -modes run,drun -show run Combine the run and Desktop File run dialog ( drun ): rofi -modes combi -show combi -combi-modes run,drun Combine the run and Desktop File run dialog ( drun ), and allow switching to window switcher: rofi -modes combi,window -show combi -combi-modes run,drun Pop up a text message claiming that this is the end: rofi -e \"This is the end\" Pop up a text message in red, bold font claiming that this is still the end: rofi -e \"<span color='red'><b>This is still the end</b></span>\" -markup Show all key bindings: rofi -show keys","title":"EXAMPLES"},{"location":"current/rofi.1/#i3","text":"In i3 you want to bind rofi to be launched on key release. Otherwise, it cannot grab the keyboard. See also the i3 manual : Some tools (such as import or xdotool ) might be unable to run upon a KeyPress event, because the keyboard/pointer is still grabbed. For these situations, the --release flag can be used, as it will execute the command after the keys have been released.","title":"i3"},{"location":"current/rofi.1/#license","text":"MIT/X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"LICENSE"},{"location":"current/rofi.1/#website","text":"rofi website can be found here","title":"WEBSITE"},{"location":"current/rofi.1/#support","text":"rofi support can be obtained: GitHub Discussions IRC (#rofi on irc.libera.chat),","title":"SUPPORT"},{"location":"current/rofi.1/#debugging","text":"For more information see rofi-debugging(5) manpage.","title":"DEBUGGING"},{"location":"current/rofi.1/#issue-tracker","text":"The rofi issue tracker can be found here Before creating an issue, consider posting a question on the discussion forum first. When creating an issue, please read this first.","title":"ISSUE TRACKER"},{"location":"current/rofi.1/#see-also","text":"rofi-sensible-terminal(1) , dmenu(1) , rofi-debugging(5) , rofi-theme(5) , rofi-script(5) , rofi-keys(5) , rofi-theme-selector(1) , rofi-dmenu(5)","title":"SEE ALSO"},{"location":"current/rofi.1/#author","text":"Qball Cow qball@blame.services Rasmus Steinke rasi@xssn.at Morgane Glidic sardemff7+rofi@sardemff7.net Original code based on work by: Sean Pringle sean.pringle@gmail.com For a full list of authors, check the AUTHORS file.","title":"AUTHOR"},{"location":"guides/DynamicThemes/dynamic_themes/","text":"Dynamic Theme A new addition in rofi 1.7.5 that did not get a lot of attention is support for the enabled keyword in the media statement and supporting environment values. Or more practical, you can modify your theme based on environment variables. @media ( enabled: env(DO_X, false)) { listview { orientation: vertical; } } You can now enable this part of the theme by running rofi with DO_X set. DO_X=true rofi -show combi Image browser example In the current release, there is a fullscreen_preview as an example. In this theme we are going to modify the filebrowser view with a preview widget that we can enable. Lets start with the basic theme. * { background-color: transparent; text-color: white; } window { fullscreen: true; background-color: black/80%; padding: 4em; children: [ wrap, listview-split]; spacing: 1em; } /** We add an extra child to this if PREVIEW=true */ listview-split { orientation: horizontal; spacing: 0.4em; children: [listview]; } wrap { expand: false; orientation: vertical; children: [ inputbar, message ]; background-image: linear-gradient(white/5%, white/40%); border-color: lightblue; border: 3px; border-radius: 0.4em; } icon-ib { expand: false; filename: \"system-search\"; vertical-align: 0.5; horizontal-align: 0.5; size: 1em; } inputbar { spacing: 0.4em; padding: 0.4em; children: [ icon-ib, entry ]; } entry { placeholder: \"Search\"; placeholder-color: grey; } message { background-color: red/20%; border-color: lightsalmon; border: 3px 0px 0px 0px; padding: 0.4em; spacing: 0.4em; } listview { flow: horizontal; fixed-columns: true; columns: 7; lines: 5; spacing: 1.0em; } element { orientation: vertical; padding: 0.1em; background-image: linear-gradient(white/5%, white/20%); border-color: lightblue /15%; border: 3px; border-radius: 0.4em; children: [element-icon, element-text ]; } element-icon { size: calc(((100% - 8em) / 7 )); horizontal-align: 0.5; vertical-align: 0.5; } element-text { horizontal-align: 0.5; vertical-align: 0.5; padding: 0.2em; } element selected { background-image: linear-gradient(white/25%, white/10%); border-color: lightblue; border: 3px; border-radius: 0.4em; } When running this theme: rofi -theme fullscreen-preview.rasi -show filebrowser We already prepared the place where we are going to add a 2nd widget. Now lets, at the end of the theme, add the extra element in a media block. @media ( enabled: env(PREVIEW, false)) { The variable is PREVIEW , if it is not set false is used. Otherwise the content of PREVIEW is parsed. These will be merged into the theme on load: /** * Launching rofi with environment PREVIEW set to true * will split the screen and show a preview widget. */ @media ( enabled: env(PREVIEW, false)) { // preview widget icon-current-entry { expand: true; size: 80%; } // override the children of `listview-split` listview-split { children: [listview, icon-current-entry]; } // Reduce to 4 columns listview { columns: 4; } } Now if we run it: PREVIEW=true rofi -theme fullscreen-preview.rasi -show filebrowser It looks like this: We can add more sections; for example for text only we hide the images: @media ( enabled: env(NO_IMAGE, false)) { listview { columns: 1; spacing: 0.4em; } element { children: [ element-text ]; } element-text { horizontal-align: 0.0; } } Wallpaper picker If you run latest git version, you can now easily make a wallpaper picker: PREVIEW=true rofi -theme fullscreen-preview.rasi -show filebrowser -filebrowser-command 'feh --bg-scale' -filebrowser-directory ~/Wallpapers/","title":"Dynamic Theme"},{"location":"guides/DynamicThemes/dynamic_themes/#dynamic-theme","text":"A new addition in rofi 1.7.5 that did not get a lot of attention is support for the enabled keyword in the media statement and supporting environment values. Or more practical, you can modify your theme based on environment variables. @media ( enabled: env(DO_X, false)) { listview { orientation: vertical; } } You can now enable this part of the theme by running rofi with DO_X set. DO_X=true rofi -show combi","title":"Dynamic Theme"},{"location":"guides/DynamicThemes/dynamic_themes/#image-browser-example","text":"In the current release, there is a fullscreen_preview as an example. In this theme we are going to modify the filebrowser view with a preview widget that we can enable. Lets start with the basic theme. * { background-color: transparent; text-color: white; } window { fullscreen: true; background-color: black/80%; padding: 4em; children: [ wrap, listview-split]; spacing: 1em; } /** We add an extra child to this if PREVIEW=true */ listview-split { orientation: horizontal; spacing: 0.4em; children: [listview]; } wrap { expand: false; orientation: vertical; children: [ inputbar, message ]; background-image: linear-gradient(white/5%, white/40%); border-color: lightblue; border: 3px; border-radius: 0.4em; } icon-ib { expand: false; filename: \"system-search\"; vertical-align: 0.5; horizontal-align: 0.5; size: 1em; } inputbar { spacing: 0.4em; padding: 0.4em; children: [ icon-ib, entry ]; } entry { placeholder: \"Search\"; placeholder-color: grey; } message { background-color: red/20%; border-color: lightsalmon; border: 3px 0px 0px 0px; padding: 0.4em; spacing: 0.4em; } listview { flow: horizontal; fixed-columns: true; columns: 7; lines: 5; spacing: 1.0em; } element { orientation: vertical; padding: 0.1em; background-image: linear-gradient(white/5%, white/20%); border-color: lightblue /15%; border: 3px; border-radius: 0.4em; children: [element-icon, element-text ]; } element-icon { size: calc(((100% - 8em) / 7 )); horizontal-align: 0.5; vertical-align: 0.5; } element-text { horizontal-align: 0.5; vertical-align: 0.5; padding: 0.2em; } element selected { background-image: linear-gradient(white/25%, white/10%); border-color: lightblue; border: 3px; border-radius: 0.4em; } When running this theme: rofi -theme fullscreen-preview.rasi -show filebrowser We already prepared the place where we are going to add a 2nd widget. Now lets, at the end of the theme, add the extra element in a media block. @media ( enabled: env(PREVIEW, false)) { The variable is PREVIEW , if it is not set false is used. Otherwise the content of PREVIEW is parsed. These will be merged into the theme on load: /** * Launching rofi with environment PREVIEW set to true * will split the screen and show a preview widget. */ @media ( enabled: env(PREVIEW, false)) { // preview widget icon-current-entry { expand: true; size: 80%; } // override the children of `listview-split` listview-split { children: [listview, icon-current-entry]; } // Reduce to 4 columns listview { columns: 4; } } Now if we run it: PREVIEW=true rofi -theme fullscreen-preview.rasi -show filebrowser It looks like this: We can add more sections; for example for text only we hide the images: @media ( enabled: env(NO_IMAGE, false)) { listview { columns: 1; spacing: 0.4em; } element { children: [ element-text ]; } element-text { horizontal-align: 0.0; } }","title":"Image browser example"},{"location":"guides/DynamicThemes/dynamic_themes/#wallpaper-picker","text":"If you run latest git version, you can now easily make a wallpaper picker: PREVIEW=true rofi -theme fullscreen-preview.rasi -show filebrowser -filebrowser-command 'feh --bg-scale' -filebrowser-directory ~/Wallpapers/","title":"Wallpaper picker"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/","text":"This guide is taken from the 1.4.0 release preview posts. The information might be outdated, but in general should still be correct and a good starting point for writing a plugin. Links have been updated. A recent plugin that can be used as example can be found here . Build system Rofi uses autotools as build system. While there are many opinions about the pre/cons off all the different options out there (to many to go into in this blog post), we will stick to autotools for now. To make life easier I create a template project here This includes the 2 files for the build system and the C template. Configure.ac First we are going to update the configure.ac file: AC_INIT([rofi-plugin-template], [0.0.1], [https://my-neat-plugin.org//],[],[https://support.my-neat-plugin.org/]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_MACRO_DIRS([m4]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects dist-xz]) AM_SILENT_RULES([yes]) AC_PROG_CC([clang gcc cc]) AC_PROG_CC_C99 AM_PROG_CC_C_O AC_USE_SYSTEM_EXTENSIONS AM_PROG_AR AM_CFLAGS=\"-Wall -Wextra -Wparentheses -Winline -pedantic -Wunreachable-code\" PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.40 gio-unix-2.0 gmodule-2.0 ]) PKG_CHECK_MODULES([rofi], [rofi]) [rofi_PLUGIN_INSTALL_DIR]=\"`$PKG_CONFIG --variable=pluginsdir rofi`\" AC_SUBST([rofi_PLUGIN_INSTALL_DIR]) LT_INIT([disable-static]) AC_SUBST([AM_CFLAGS]) AC_CONFIG_FILES([Makefile ]) AC_OUTPUT Basically the only thing here we need to change is the name of the plugin, the website and the support site. AC_INIT([rofi-file-browser], [0.0.1], [https://davedavenport.github.io/rofi/],[],[https://reddit.org/r/qtools/]) Makefile.am We need to make a similar change in the Makefile.am file, this is important so each plugin has a unique name. (if they are all called myplugin, it would be hard to install more then one plugin.) ACLOCAL_AMFLAGS=-I m4 plugindir=@rofi_PLUGIN_INSTALL_DIR@ plugin_LTLIBRARIES = myplugin.la myplugin_la_SOURCES=\\ src/myplugin.c myplugin_la_CFLAGS= @glib_CFLAGS@ @rofi_CFLAGS@ myplugin_la_LIBADD= @glib_LIBS@ @rofi_LIBS@ myplugin_la_LDFLAGS= -module -avoid-version So we do a search and replace from myplugin to file_browser : ACLOCAL_AMFLAGS=-I m4 plugindir=${libdir}/rofi/ plugin_LTLIBRARIES = file_browser.la file_browser_la_SOURCES=\\ src/file_browser.c file_browser_la_CFLAGS= @glib_CFLAGS@ @rofi_CFLAGS@ file_browser_la_LIBADD= @glib_LIBS@ @rofi_LIBS@ file_browser_la_LDFLAGS= -module -avoid-version As you noticed I also changed the name of the c template file. This is not needed. Building the system Now that we have this setup, it is easy to build: Generate the build system: autoreconf -i Create a build directory. mkdir build cd build Run configure ../configure build make install make install You can now test the plugin by calling: rofi -show myplugin -modi myplugin If we start changing the template, the name to use will change. Edit the C template The first thing todo is personalize the template. Below I have modified it so it is called file-browser: /** * rofi-file-browser * * MIT/X11 License * Copyright (c) 2017 Qball Cow <qball@gmpclient.org> * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * \"Software\"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <gmodule.h> #include <rofi/mode.h> #include <rofi/helper.h> #include <rofi/mode-private.h> #include <stdint.h> G_MODULE_EXPORT Mode mode; /** * The internal data structure holding the private data of the TEST Mode. */ typedef struct { char **array; unsigned int array_length; } FileBrowserModePrivateData; static void get_file_browser ( Mode *sw ) { /** * Get the entries to display. * this gets called on plugin initialization. */ } static int file_browser_mode_init ( Mode *sw ) { /** * Called on startup when enabled (in modi list) */ if ( mode_get_private_data ( sw ) == NULL ) { FileBrowserModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) ); mode_set_private_data ( sw, (void *) pd ); // Load content. get_file_browser ( sw ); } return TRUE; } static unsigned int file_browser_mode_get_num_entries ( const Mode *sw ) { const FileBrowserModePrivateData *pd = (const FileBrowserModePrivateData *) mode_get_private_data ( sw ); return pd->array_length; } static ModeMode file_browser_mode_result ( Mode *sw, int mretv, char **input, unsigned int selected_line ) { ModeMode retv = MODE_EXIT; FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( mretv & MENU_NEXT ) { retv = NEXT_DIALOG; } else if ( mretv & MENU_PREVIOUS ) { retv = PREVIOUS_DIALOG; } else if ( mretv & MENU_QUICK_SWITCH ) { retv = ( mretv & MENU_LOWER_MASK ); } else if ( ( mretv & MENU_OK ) ) { retv = RELOAD_DIALOG; } else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) { retv = RELOAD_DIALOG; } return retv; } static void file_browser_mode_destroy ( Mode *sw ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( pd != NULL ) { g_free ( pd ); mode_set_private_data ( sw, NULL ); } } static char *_get_display_value ( const Mode *sw, unsigned int selected_line, G_GNUC_UNUSED int *state, G_GNUC_UNUSED GList **attr_list, int get_entry ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Only return the string if requested, otherwise only set state. return get_entry ? g_strdup(\"n/a\"): NULL; } static int file_browser_token_match ( const Mode *sw, GRegex **tokens, unsigned int index ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Call default matching function. return helper_token_match ( tokens, pd->array[index]); } Mode mode = { .abi_version = ABI_VERSION, .name = \"file_browser\", .cfg_name_key = \"display-file_browser\", ._init = file_browser_mode_init, ._get_num_entries = file_browser_mode_get_num_entries, ._result = file_browser_mode_result, ._destroy = file_browser_mode_destroy, ._token_match = file_browser_token_match, ._get_display_value = _get_display_value, ._get_message = NULL, ._get_completion = NULL, ._preprocess_input = NULL, .private_data = NULL, .free = NULL, }; If we now rebuild the plugin, we need to run the following command: rofi -show file_browser -modi file_browser The mode description The mode is defined by the Mode structure, every mode in rofi has one of the plugins. Mode mode = { .abi_version = ABI_VERSION, .name = \"file_browser\", .cfg_name_key = \"display-file_browser\", ._init = file_browser_mode_init, ._get_num_entries = file_browser_mode_get_num_entries, ._result = file_browser_mode_result, ._destroy = file_browser_mode_destroy, ._token_match = file_browser_token_match, ._get_display_value = _get_display_value, ._get_message = NULL, ._get_completion = NULL, ._preprocess_input = NULL, .private_data = NULL, .free = NULL, }; The ABI_VERSION is defined in rofi header file, so that rofi can detect what ABI the plugin was compiled against. Not every function needs to be implemented, in the plugin we show the minimum set. Lets modify each of the above functions to implement something useful. FileBrowserModePrivateData This is a structure that holds all the private data of this mode. We are going to extend this so it can hold the state of information we want to view. We want to differentiate between 3 different rows: Go one level up Directory Regular file So we add an enum: enum FBFileType { UP, DIRECTORY, RFILE, }; We need a structure that hold each entry. It should have a name we are going to show the user. This will hold an utf-8 string. (rofi will only display utf-8). It should hold the path to the entry. This will be in the file-systems encoding. The type it holds. typedef struct { char *name; char *path; enum FBFileType type; } FBFile; Then in the private data we hold all the relevant information. The current directory to show. Array of all the FBFile we want to show. The length of the array. typedef struct { GFile *current_dir; FBFile *array; unsigned int array_length; } FileBrowserModePrivateData; Initialization Now that we have the data structure to hold our information, we need to initialize it and fill it. static int file_browser_mode_init ( Mode *sw ) { if ( mode_get_private_data ( sw ) == NULL ) { FileBrowserModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) ); mode_set_private_data ( sw, (void *) pd ); pd->current_dir = g_file_new_for_path(g_get_home_dir () ); get_file_browser ( sw ); } return TRUE; } The function first checked if we already initialized the private data. You can include a mode multiple times, and we normally don't want it initialized multiple times. We then create a, zero initialized, FileBrowserModePrivateData structure and set this on the mode. Set the current directory to the users home directory and call get_file_browser that will load in the entries. We will discuss this one later. Destroying On shutdown we want to cleanup, so there is also a destroy function. static void file_browser_mode_destroy ( Mode *sw ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( pd != NULL ) { g_object_unref ( pd->current_dir ); free_list ( pd ); g_free ( pd ); mode_set_private_data ( sw, NULL ); } } This does the exact opposite. For completeness: static void free_list ( FileBrowserModePrivateData *pd ) { for ( unsigned int i = 0; i < pd->array_length; i++ ) { FBFile *fb = & ( pd->array[i] ); g_free ( fb->name ); g_free ( fb->path ); } g_free (pd->array); pd->array = NULL; pd->array_length = 0; } Loading the entries Lets dive deeper into the get_file_browser function. static void get_file_browser ( Mode *sw ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); We want to get access to the private data structure. char *cdir = g_file_get_path ( pd->current_dir ); DIR *dir = opendir ( cdir ); if ( dir ) { struct dirent *rd = NULL; while ((rd = readdir (dir)) != NULL ) { We open the directory and we iterate over each entry. We then want to skip over hidden files (starting with a .) and insert a special up node for going up one directory. For this we do not need a path, and we show \"..\" to the user. if ( g_strcmp0 ( rd->d_name, \"..\" ) == 0 ){ pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile)); pd->array[pd->array_length].name = g_strdup ( \"..\" ); pd->array[pd->array_length].path = NULL; pd->array[pd->array_length].type = UP; pd->array_length++; continue; } else if ( rd->d_name[0] == '.' ) { continue; } We do a similar filtering act for the rest of the files, we skip fifo , blk , character and socket files. switch ( rd->d_type ) { case DT_BLK: case DT_CHR: case DT_FIFO: case DT_UNKNOWN: case DT_SOCK: break; case DT_REG: case DT_DIR: pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile)); pd->array[pd->array_length].name = g_strdup ( rd->d_name ); pd->array[pd->array_length].path = g_build_filename ( pd->current_dir, rd->d_name, NULL ); pd->array[pd->array_length].type = (rd->d_type == DT_DIR)? DIRECTORY: RFILE; pd->array_length++; } } closedir ( dir ); } We then sort the list in a way the user expects this. g_qsort_with_data ( pd->array, pd->array_length, sizeof (FBFile ), compare, NULL ); } Qsort here uses the following sort function: static gint compare ( gconstpointer a, gconstpointer b, gpointer data ) { FBFile *fa = (FBFile*)a; FBFile *fb = (FBFile*)b; if ( fa->type != fb->type ){ return (fa->type - fb->type); } return g_strcmp0 ( fa->name, fb->name ); } Showing the entries When showing each entry, rofi calls the _get_display_value function. It calls them in two situations, to get the state and the display string. Or just to get the new state. If you need to return a string (should always be malloced), the get_entry parameter is set to 1. We currently show the name, and prepend an icon using the Awesome Font. static char *_get_display_value ( const Mode *sw, unsigned int selected_line, G_GNUC_UNUSED int *state, G_GNUC_UNUSED GList **attr_list, int get_entry ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Only return the string if requested, otherwise only set state. if ( !get_entry ) return NULL; if ( pd->array[selected_line].type == DIRECTORY ){ return g_strdup_printf ( \"\uf114 %s\", pd->array[selected_line].name); } else if ( pd->array[selected_line].type == UP ){ return g_strdup( \"\uf148 ..\"); } else { return g_strdup_printf ( \"\uf016 %s\", pd->array[selected_line].name); } return g_strdup(\"n/a\"); } The selected_line setting will always be within range 0 and the result of .get_num_entries . static unsigned int file_browser_mode_get_num_entries ( const Mode *sw ) { const FileBrowserModePrivateData *pd = (const FileBrowserModePrivateData *) mode_get_private_data ( sw ); return pd->array_length; } The attr_list argument is there for more advanced markup of the string. Filtering the entries When filtering we want to filter on the file name, we luckily store this entry in FBFile::name . To use rofi 's matching algorithm we can use the helper_token_match function. static int file_browser_token_match ( const Mode *sw, GRegex **tokens, unsigned int index ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Call default matching function. return helper_token_match ( tokens, pd->array[index].name); } The index setting will always be within range 0 and the result of .get_num_entries . Running it Now we should be able to build it, install it and run it and see the result. rofi -show file_browser -modi file_browser Handling selected entries This is just an example and can probably be implemented nicer. Here it also shows some rudimentary parts in rofi , that show some of the ugly details, that will be cleaned up in the future. static ModeMode file_browser_mode_result ( Mode *sw, int mretv, char **input, unsigned int selected_line ) { ModeMode retv = MODE_EXIT; FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( mretv & MENU_NEXT ) { retv = NEXT_DIALOG; } else if ( mretv & MENU_PREVIOUS ) { retv = PREVIOUS_DIALOG; } else if ( mretv & MENU_QUICK_SWITCH ) { retv = ( mretv & MENU_LOWER_MASK ); This is the user pressing enter on the entry. We handle it differently for each type. } else if ( ( mretv & MENU_OK ) ) { if ( selected_line < pd->array_length ) { if ( pd->array[selected_line].type == UP ) { GFile *new = g_file_get_parent ( pd->current_dir ); if ( new ){ g_object_unref ( pd->current_dir ); pd->current_dir = new; free_list (pd); get_file_browser ( sw ); return RESET_DIALOG; } } else if ( pd->array[selected_line].type == DIRECTORY ) { GFile *new = g_file_new_for_path ( pd->array[selected_line].path ); g_object_unref ( pd->current_dir ); pd->current_dir = new; free_list (pd); get_file_browser ( sw ); return RESET_DIALOG; } else if ( pd->array[selected_line].type == RFILE ) { char *d = g_strescape ( pd->array[selected_line].path,NULL ); char *cmd = g_strdup_printf(\"xdg-open '%s'\", d ); g_free(d); char *cdir = g_file_get_path ( pd->current_dir ); helper_execute_command ( cdir,cmd, FALSE ); g_free ( cdir ); g_free ( cmd ); return MODE_EXIT; } } retv = RELOAD_DIALOG; Handle custom entry that does not match an entry: } else if ( (mretv&MENU_CUSTOM_INPUT) && *input ) { char *p = rofi_expand_path ( *input ); char *dir = g_filename_from_utf8 ( p, -1, NULL, NULL, NULL ); g_free (p); if ( g_file_test ( dir, G_FILE_TEST_EXISTS ) ) { if ( g_file_test ( dir, G_FILE_TEST_IS_DIR ) ){ g_object_unref ( pd->current_dir ); pd->current_dir = g_file_new_for_path ( dir ); g_free ( dir ); free_list (pd); get_file_browser ( sw ); return RESET_DIALOG; } } g_free ( dir ); retv = RELOAD_DIALOG; We do not support delete , just reload. } else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) { retv = RELOAD_DIALOG; } return retv; } The RESET_DIALOG will clear the input bar and reload the view, RELOAD_DIALOG will reload the view and re-filter based on the current text. Note: rofi_expand_path will expand ~ and ~me/ into it full absolute path. Note: helper_execute_command will spawn command.","title":"Plugins"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#build-system","text":"Rofi uses autotools as build system. While there are many opinions about the pre/cons off all the different options out there (to many to go into in this blog post), we will stick to autotools for now. To make life easier I create a template project here This includes the 2 files for the build system and the C template.","title":"Build system"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#configureac","text":"First we are going to update the configure.ac file: AC_INIT([rofi-plugin-template], [0.0.1], [https://my-neat-plugin.org//],[],[https://support.my-neat-plugin.org/]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_MACRO_DIRS([m4]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects dist-xz]) AM_SILENT_RULES([yes]) AC_PROG_CC([clang gcc cc]) AC_PROG_CC_C99 AM_PROG_CC_C_O AC_USE_SYSTEM_EXTENSIONS AM_PROG_AR AM_CFLAGS=\"-Wall -Wextra -Wparentheses -Winline -pedantic -Wunreachable-code\" PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.40 gio-unix-2.0 gmodule-2.0 ]) PKG_CHECK_MODULES([rofi], [rofi]) [rofi_PLUGIN_INSTALL_DIR]=\"`$PKG_CONFIG --variable=pluginsdir rofi`\" AC_SUBST([rofi_PLUGIN_INSTALL_DIR]) LT_INIT([disable-static]) AC_SUBST([AM_CFLAGS]) AC_CONFIG_FILES([Makefile ]) AC_OUTPUT Basically the only thing here we need to change is the name of the plugin, the website and the support site. AC_INIT([rofi-file-browser], [0.0.1], [https://davedavenport.github.io/rofi/],[],[https://reddit.org/r/qtools/])","title":"Configure.ac"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#makefileam","text":"We need to make a similar change in the Makefile.am file, this is important so each plugin has a unique name. (if they are all called myplugin, it would be hard to install more then one plugin.) ACLOCAL_AMFLAGS=-I m4 plugindir=@rofi_PLUGIN_INSTALL_DIR@ plugin_LTLIBRARIES = myplugin.la myplugin_la_SOURCES=\\ src/myplugin.c myplugin_la_CFLAGS= @glib_CFLAGS@ @rofi_CFLAGS@ myplugin_la_LIBADD= @glib_LIBS@ @rofi_LIBS@ myplugin_la_LDFLAGS= -module -avoid-version So we do a search and replace from myplugin to file_browser : ACLOCAL_AMFLAGS=-I m4 plugindir=${libdir}/rofi/ plugin_LTLIBRARIES = file_browser.la file_browser_la_SOURCES=\\ src/file_browser.c file_browser_la_CFLAGS= @glib_CFLAGS@ @rofi_CFLAGS@ file_browser_la_LIBADD= @glib_LIBS@ @rofi_LIBS@ file_browser_la_LDFLAGS= -module -avoid-version As you noticed I also changed the name of the c template file. This is not needed.","title":"Makefile.am"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#building-the-system","text":"Now that we have this setup, it is easy to build: Generate the build system: autoreconf -i Create a build directory. mkdir build cd build Run configure ../configure build make install make install You can now test the plugin by calling: rofi -show myplugin -modi myplugin If we start changing the template, the name to use will change.","title":"Building the system"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#edit-the-c-template","text":"The first thing todo is personalize the template. Below I have modified it so it is called file-browser: /** * rofi-file-browser * * MIT/X11 License * Copyright (c) 2017 Qball Cow <qball@gmpclient.org> * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * \"Software\"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <gmodule.h> #include <rofi/mode.h> #include <rofi/helper.h> #include <rofi/mode-private.h> #include <stdint.h> G_MODULE_EXPORT Mode mode; /** * The internal data structure holding the private data of the TEST Mode. */ typedef struct { char **array; unsigned int array_length; } FileBrowserModePrivateData; static void get_file_browser ( Mode *sw ) { /** * Get the entries to display. * this gets called on plugin initialization. */ } static int file_browser_mode_init ( Mode *sw ) { /** * Called on startup when enabled (in modi list) */ if ( mode_get_private_data ( sw ) == NULL ) { FileBrowserModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) ); mode_set_private_data ( sw, (void *) pd ); // Load content. get_file_browser ( sw ); } return TRUE; } static unsigned int file_browser_mode_get_num_entries ( const Mode *sw ) { const FileBrowserModePrivateData *pd = (const FileBrowserModePrivateData *) mode_get_private_data ( sw ); return pd->array_length; } static ModeMode file_browser_mode_result ( Mode *sw, int mretv, char **input, unsigned int selected_line ) { ModeMode retv = MODE_EXIT; FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( mretv & MENU_NEXT ) { retv = NEXT_DIALOG; } else if ( mretv & MENU_PREVIOUS ) { retv = PREVIOUS_DIALOG; } else if ( mretv & MENU_QUICK_SWITCH ) { retv = ( mretv & MENU_LOWER_MASK ); } else if ( ( mretv & MENU_OK ) ) { retv = RELOAD_DIALOG; } else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) { retv = RELOAD_DIALOG; } return retv; } static void file_browser_mode_destroy ( Mode *sw ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( pd != NULL ) { g_free ( pd ); mode_set_private_data ( sw, NULL ); } } static char *_get_display_value ( const Mode *sw, unsigned int selected_line, G_GNUC_UNUSED int *state, G_GNUC_UNUSED GList **attr_list, int get_entry ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Only return the string if requested, otherwise only set state. return get_entry ? g_strdup(\"n/a\"): NULL; } static int file_browser_token_match ( const Mode *sw, GRegex **tokens, unsigned int index ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Call default matching function. return helper_token_match ( tokens, pd->array[index]); } Mode mode = { .abi_version = ABI_VERSION, .name = \"file_browser\", .cfg_name_key = \"display-file_browser\", ._init = file_browser_mode_init, ._get_num_entries = file_browser_mode_get_num_entries, ._result = file_browser_mode_result, ._destroy = file_browser_mode_destroy, ._token_match = file_browser_token_match, ._get_display_value = _get_display_value, ._get_message = NULL, ._get_completion = NULL, ._preprocess_input = NULL, .private_data = NULL, .free = NULL, }; If we now rebuild the plugin, we need to run the following command: rofi -show file_browser -modi file_browser","title":"Edit the C template"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#the-mode-description","text":"The mode is defined by the Mode structure, every mode in rofi has one of the plugins. Mode mode = { .abi_version = ABI_VERSION, .name = \"file_browser\", .cfg_name_key = \"display-file_browser\", ._init = file_browser_mode_init, ._get_num_entries = file_browser_mode_get_num_entries, ._result = file_browser_mode_result, ._destroy = file_browser_mode_destroy, ._token_match = file_browser_token_match, ._get_display_value = _get_display_value, ._get_message = NULL, ._get_completion = NULL, ._preprocess_input = NULL, .private_data = NULL, .free = NULL, }; The ABI_VERSION is defined in rofi header file, so that rofi can detect what ABI the plugin was compiled against. Not every function needs to be implemented, in the plugin we show the minimum set. Lets modify each of the above functions to implement something useful.","title":"The mode description"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#filebrowsermodeprivatedata","text":"This is a structure that holds all the private data of this mode. We are going to extend this so it can hold the state of information we want to view. We want to differentiate between 3 different rows: Go one level up Directory Regular file So we add an enum: enum FBFileType { UP, DIRECTORY, RFILE, }; We need a structure that hold each entry. It should have a name we are going to show the user. This will hold an utf-8 string. (rofi will only display utf-8). It should hold the path to the entry. This will be in the file-systems encoding. The type it holds. typedef struct { char *name; char *path; enum FBFileType type; } FBFile; Then in the private data we hold all the relevant information. The current directory to show. Array of all the FBFile we want to show. The length of the array. typedef struct { GFile *current_dir; FBFile *array; unsigned int array_length; } FileBrowserModePrivateData;","title":"FileBrowserModePrivateData"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#initialization","text":"Now that we have the data structure to hold our information, we need to initialize it and fill it. static int file_browser_mode_init ( Mode *sw ) { if ( mode_get_private_data ( sw ) == NULL ) { FileBrowserModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) ); mode_set_private_data ( sw, (void *) pd ); pd->current_dir = g_file_new_for_path(g_get_home_dir () ); get_file_browser ( sw ); } return TRUE; } The function first checked if we already initialized the private data. You can include a mode multiple times, and we normally don't want it initialized multiple times. We then create a, zero initialized, FileBrowserModePrivateData structure and set this on the mode. Set the current directory to the users home directory and call get_file_browser that will load in the entries. We will discuss this one later.","title":"Initialization"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#destroying","text":"On shutdown we want to cleanup, so there is also a destroy function. static void file_browser_mode_destroy ( Mode *sw ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( pd != NULL ) { g_object_unref ( pd->current_dir ); free_list ( pd ); g_free ( pd ); mode_set_private_data ( sw, NULL ); } } This does the exact opposite. For completeness: static void free_list ( FileBrowserModePrivateData *pd ) { for ( unsigned int i = 0; i < pd->array_length; i++ ) { FBFile *fb = & ( pd->array[i] ); g_free ( fb->name ); g_free ( fb->path ); } g_free (pd->array); pd->array = NULL; pd->array_length = 0; }","title":"Destroying"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#loading-the-entries","text":"Lets dive deeper into the get_file_browser function. static void get_file_browser ( Mode *sw ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); We want to get access to the private data structure. char *cdir = g_file_get_path ( pd->current_dir ); DIR *dir = opendir ( cdir ); if ( dir ) { struct dirent *rd = NULL; while ((rd = readdir (dir)) != NULL ) { We open the directory and we iterate over each entry. We then want to skip over hidden files (starting with a .) and insert a special up node for going up one directory. For this we do not need a path, and we show \"..\" to the user. if ( g_strcmp0 ( rd->d_name, \"..\" ) == 0 ){ pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile)); pd->array[pd->array_length].name = g_strdup ( \"..\" ); pd->array[pd->array_length].path = NULL; pd->array[pd->array_length].type = UP; pd->array_length++; continue; } else if ( rd->d_name[0] == '.' ) { continue; } We do a similar filtering act for the rest of the files, we skip fifo , blk , character and socket files. switch ( rd->d_type ) { case DT_BLK: case DT_CHR: case DT_FIFO: case DT_UNKNOWN: case DT_SOCK: break; case DT_REG: case DT_DIR: pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile)); pd->array[pd->array_length].name = g_strdup ( rd->d_name ); pd->array[pd->array_length].path = g_build_filename ( pd->current_dir, rd->d_name, NULL ); pd->array[pd->array_length].type = (rd->d_type == DT_DIR)? DIRECTORY: RFILE; pd->array_length++; } } closedir ( dir ); } We then sort the list in a way the user expects this. g_qsort_with_data ( pd->array, pd->array_length, sizeof (FBFile ), compare, NULL ); } Qsort here uses the following sort function: static gint compare ( gconstpointer a, gconstpointer b, gpointer data ) { FBFile *fa = (FBFile*)a; FBFile *fb = (FBFile*)b; if ( fa->type != fb->type ){ return (fa->type - fb->type); } return g_strcmp0 ( fa->name, fb->name ); }","title":"Loading the entries"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#showing-the-entries","text":"When showing each entry, rofi calls the _get_display_value function. It calls them in two situations, to get the state and the display string. Or just to get the new state. If you need to return a string (should always be malloced), the get_entry parameter is set to 1. We currently show the name, and prepend an icon using the Awesome Font. static char *_get_display_value ( const Mode *sw, unsigned int selected_line, G_GNUC_UNUSED int *state, G_GNUC_UNUSED GList **attr_list, int get_entry ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Only return the string if requested, otherwise only set state. if ( !get_entry ) return NULL; if ( pd->array[selected_line].type == DIRECTORY ){ return g_strdup_printf ( \"\uf114 %s\", pd->array[selected_line].name); } else if ( pd->array[selected_line].type == UP ){ return g_strdup( \"\uf148 ..\"); } else { return g_strdup_printf ( \"\uf016 %s\", pd->array[selected_line].name); } return g_strdup(\"n/a\"); } The selected_line setting will always be within range 0 and the result of .get_num_entries . static unsigned int file_browser_mode_get_num_entries ( const Mode *sw ) { const FileBrowserModePrivateData *pd = (const FileBrowserModePrivateData *) mode_get_private_data ( sw ); return pd->array_length; } The attr_list argument is there for more advanced markup of the string.","title":"Showing the entries"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#filtering-the-entries","text":"When filtering we want to filter on the file name, we luckily store this entry in FBFile::name . To use rofi 's matching algorithm we can use the helper_token_match function. static int file_browser_token_match ( const Mode *sw, GRegex **tokens, unsigned int index ) { FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); // Call default matching function. return helper_token_match ( tokens, pd->array[index].name); } The index setting will always be within range 0 and the result of .get_num_entries .","title":"Filtering the entries"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#running-it","text":"Now we should be able to build it, install it and run it and see the result. rofi -show file_browser -modi file_browser","title":"Running it"},{"location":"guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins/#handling-selected-entries","text":"This is just an example and can probably be implemented nicer. Here it also shows some rudimentary parts in rofi , that show some of the ugly details, that will be cleaned up in the future. static ModeMode file_browser_mode_result ( Mode *sw, int mretv, char **input, unsigned int selected_line ) { ModeMode retv = MODE_EXIT; FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw ); if ( mretv & MENU_NEXT ) { retv = NEXT_DIALOG; } else if ( mretv & MENU_PREVIOUS ) { retv = PREVIOUS_DIALOG; } else if ( mretv & MENU_QUICK_SWITCH ) { retv = ( mretv & MENU_LOWER_MASK ); This is the user pressing enter on the entry. We handle it differently for each type. } else if ( ( mretv & MENU_OK ) ) { if ( selected_line < pd->array_length ) { if ( pd->array[selected_line].type == UP ) { GFile *new = g_file_get_parent ( pd->current_dir ); if ( new ){ g_object_unref ( pd->current_dir ); pd->current_dir = new; free_list (pd); get_file_browser ( sw ); return RESET_DIALOG; } } else if ( pd->array[selected_line].type == DIRECTORY ) { GFile *new = g_file_new_for_path ( pd->array[selected_line].path ); g_object_unref ( pd->current_dir ); pd->current_dir = new; free_list (pd); get_file_browser ( sw ); return RESET_DIALOG; } else if ( pd->array[selected_line].type == RFILE ) { char *d = g_strescape ( pd->array[selected_line].path,NULL ); char *cmd = g_strdup_printf(\"xdg-open '%s'\", d ); g_free(d); char *cdir = g_file_get_path ( pd->current_dir ); helper_execute_command ( cdir,cmd, FALSE ); g_free ( cdir ); g_free ( cmd ); return MODE_EXIT; } } retv = RELOAD_DIALOG; Handle custom entry that does not match an entry: } else if ( (mretv&MENU_CUSTOM_INPUT) && *input ) { char *p = rofi_expand_path ( *input ); char *dir = g_filename_from_utf8 ( p, -1, NULL, NULL, NULL ); g_free (p); if ( g_file_test ( dir, G_FILE_TEST_EXISTS ) ) { if ( g_file_test ( dir, G_FILE_TEST_IS_DIR ) ){ g_object_unref ( pd->current_dir ); pd->current_dir = g_file_new_for_path ( dir ); g_free ( dir ); free_list (pd); get_file_browser ( sw ); return RESET_DIALOG; } } g_free ( dir ); retv = RELOAD_DIALOG; We do not support delete , just reload. } else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) { retv = RELOAD_DIALOG; } return retv; } The RESET_DIALOG will clear the input bar and reload the view, RELOAD_DIALOG will reload the view and re-filter based on the current text. Note: rofi_expand_path will expand ~ and ~me/ into it full absolute path. Note: helper_execute_command will spawn command.","title":"Handling selected entries"},{"location":"guides/Positioning/theme3-positioning/","text":"Positioning Rofi on the monitor In the current theme format you set these properties on the window widget. The first, location, determines where rofi is placed on the monitor, the second what point of the rofi window connects there. This sounds complicated, but it ain't. location setting The location setting determines the place of the window on the monitor. The location setting supports the following values: north northeast northwest south southeast southwest east west center This is depicted in the diagram below: anchor setting The anchor sets what point of the rofi window is placed at the specified location . The anchor settings supports the same values as the location setting. If you want the middle of the rofi window to be always located at the center of the monitor set both location and anchor to center . If the rofi window resizes, its center will stay at the center. If you set the anchor to north the top of the rofi window is at the center of the monitor, and the window will grow down. If you set the anchor and location to south , rofi is located at the bottom center and the window grows up. Note that if you set the anchor to south and the location to north the rofi window will be placed above the monitor and might not be visible. In another blog post we will explain how the dynamic sizing behaviour of rofi can be tweaked or disabled. So the following theme setting will place the top of the rofi window in the center of the monitor: window { location: center; anchor: north; } As depicted here, RED is the location (center of screen), GREEN is the anchor on rofi window (north): Quick hint, if you want to quickly test out changes to the theme, without editing the file, run rofi like: rofi -show run -theme-str \"window { location: center; anchor: north;}\"","title":"Positioning"},{"location":"guides/Positioning/theme3-positioning/#positioning-rofi-on-the-monitor","text":"In the current theme format you set these properties on the window widget. The first, location, determines where rofi is placed on the monitor, the second what point of the rofi window connects there. This sounds complicated, but it ain't.","title":"Positioning Rofi on the monitor"},{"location":"guides/Positioning/theme3-positioning/#location-setting","text":"The location setting determines the place of the window on the monitor. The location setting supports the following values: north northeast northwest south southeast southwest east west center This is depicted in the diagram below:","title":"location setting"},{"location":"guides/Positioning/theme3-positioning/#anchor-setting","text":"The anchor sets what point of the rofi window is placed at the specified location . The anchor settings supports the same values as the location setting. If you want the middle of the rofi window to be always located at the center of the monitor set both location and anchor to center . If the rofi window resizes, its center will stay at the center. If you set the anchor to north the top of the rofi window is at the center of the monitor, and the window will grow down. If you set the anchor and location to south , rofi is located at the bottom center and the window grows up. Note that if you set the anchor to south and the location to north the rofi window will be placed above the monitor and might not be visible. In another blog post we will explain how the dynamic sizing behaviour of rofi can be tweaked or disabled. So the following theme setting will place the top of the rofi window in the center of the monitor: window { location: center; anchor: north; } As depicted here, RED is the location (center of screen), GREEN is the anchor on rofi window (north): Quick hint, if you want to quickly test out changes to the theme, without editing the file, run rofi like: rofi -show run -theme-str \"window { location: center; anchor: north;}\"","title":"anchor setting"},{"location":"guides/Transparency/theme3-transparency/","text":"Transparency within rofi The images in this guide are outdated, but the principals still hold. Rofi window is build up by first drawing the background, and then each widget above it, with the correct transparency factor. Remember the general widget structure: This means if you set every widget to be 30% transparent on a white background: it will look like: The transparency applies one on top of the other, so while they all are 30%, in the end it will be less transparent. Try it yourself rofi -theme-str '@theme \"/dev/null\" window { background-color: white; }* { padding:5; background-color: rgba(20,20,20,0.5);}' -show run This can sometimes be difficult when creating themes with a nice transparent background. The trick to make this work nicely is the following. Specify fully transparent background on the highest level. * { background: transparent; } Then set the background on the window box. window { background: #cc1c1c1c; } Now if you only set the background on widgets you want differently colored, it nicely works out. Transparency on the window This determines how transparency on the window is handled. This is set the be transparency option on the window widget. The option takes a string. There are basically 4 options: No transparency or \"real\" The background of the window is black and fully transparent, and everything is drawn on top of this. This means that if you have a composite manager (ARGB window), you get a fully transparent background, otherwise fully black. This is the preferred option if you have a composite manager running. This image is actually partially transparent (won't show here clearly as block background is white.) Fake transparency or \"screenshot\" This tries to emulate a transparent window by taking a screenshot of the window before showing and then drawing everything on top of this. While this is not an ideal solution (it won't update if something changes in the background) it is often a very usable facsimile. Note: It can get very slow, especially on high resolution (4k) monitors. Background transparency or \"background\" This uses the background image (the root window image). This is, in my opinion, mostly useful when used fullscreen. Picture If instead of one of the above option, you specify a path to a png file this is used as background image. This can create a theme where you use paper as background.","title":"Transparency"},{"location":"guides/Transparency/theme3-transparency/#transparency-within-rofi","text":"The images in this guide are outdated, but the principals still hold. Rofi window is build up by first drawing the background, and then each widget above it, with the correct transparency factor. Remember the general widget structure: This means if you set every widget to be 30% transparent on a white background: it will look like: The transparency applies one on top of the other, so while they all are 30%, in the end it will be less transparent. Try it yourself rofi -theme-str '@theme \"/dev/null\" window { background-color: white; }* { padding:5; background-color: rgba(20,20,20,0.5);}' -show run This can sometimes be difficult when creating themes with a nice transparent background. The trick to make this work nicely is the following. Specify fully transparent background on the highest level. * { background: transparent; } Then set the background on the window box. window { background: #cc1c1c1c; } Now if you only set the background on widgets you want differently colored, it nicely works out.","title":"Transparency within rofi"},{"location":"guides/Transparency/theme3-transparency/#transparency-on-the-window","text":"This determines how transparency on the window is handled. This is set the be transparency option on the window widget. The option takes a string. There are basically 4 options:","title":"Transparency on the window"},{"location":"guides/Transparency/theme3-transparency/#no-transparency-or-real","text":"The background of the window is black and fully transparent, and everything is drawn on top of this. This means that if you have a composite manager (ARGB window), you get a fully transparent background, otherwise fully black. This is the preferred option if you have a composite manager running. This image is actually partially transparent (won't show here clearly as block background is white.)","title":"No transparency or \"real\""},{"location":"guides/Transparency/theme3-transparency/#fake-transparency-or-screenshot","text":"This tries to emulate a transparent window by taking a screenshot of the window before showing and then drawing everything on top of this. While this is not an ideal solution (it won't update if something changes in the background) it is often a very usable facsimile. Note: It can get very slow, especially on high resolution (4k) monitors.","title":"Fake transparency or \"screenshot\""},{"location":"guides/Transparency/theme3-transparency/#background-transparency-or-background","text":"This uses the background image (the root window image). This is, in my opinion, mostly useful when used fullscreen.","title":"Background transparency or \"background\""},{"location":"guides/Transparency/theme3-transparency/#picture","text":"If instead of one of the above option, you specify a path to a png file this is used as background image. This can create a theme where you use paper as background.","title":"Picture"},{"location":"themes/themes/","text":"Included Themes Below is a list of themes shipped with rofi. Use rofi-theme-selector to select and use one of these themes. Default theme Adapta-Nokto android_notification Arc-Dark Arc arthur blue c64 DarkBlue dmenu docu fancy2 fancy fullscreen-preview glue_pro_blue gruvbox-dark-hard gruvbox-dark gruvbox-dark-soft gruvbox-light-hard gruvbox-light gruvbox-light-soft iggy Indego lb material Monokai paper-float Paper purple sidebar sidebar-v2 solarized_alternate solarized","title":"Themes"},{"location":"themes/themes/#included-themes","text":"Below is a list of themes shipped with rofi. Use rofi-theme-selector to select and use one of these themes.","title":"Included Themes"},{"location":"themes/themes/#default-theme","text":"","title":"Default theme"},{"location":"themes/themes/#adapta-nokto","text":"","title":"Adapta-Nokto"},{"location":"themes/themes/#android_notification","text":"","title":"android_notification"},{"location":"themes/themes/#arc-dark","text":"","title":"Arc-Dark"},{"location":"themes/themes/#arc","text":"","title":"Arc"},{"location":"themes/themes/#arthur","text":"","title":"arthur"},{"location":"themes/themes/#blue","text":"","title":"blue"},{"location":"themes/themes/#c64","text":"","title":"c64"},{"location":"themes/themes/#darkblue","text":"","title":"DarkBlue"},{"location":"themes/themes/#dmenu","text":"","title":"dmenu"},{"location":"themes/themes/#docu","text":"","title":"docu"},{"location":"themes/themes/#fancy2","text":"","title":"fancy2"},{"location":"themes/themes/#fancy","text":"","title":"fancy"},{"location":"themes/themes/#fullscreen-preview","text":"","title":"fullscreen-preview"},{"location":"themes/themes/#glue_pro_blue","text":"","title":"glue_pro_blue"},{"location":"themes/themes/#gruvbox-dark-hard","text":"","title":"gruvbox-dark-hard"},{"location":"themes/themes/#gruvbox-dark","text":"","title":"gruvbox-dark"},{"location":"themes/themes/#gruvbox-dark-soft","text":"","title":"gruvbox-dark-soft"},{"location":"themes/themes/#gruvbox-light-hard","text":"","title":"gruvbox-light-hard"},{"location":"themes/themes/#gruvbox-light","text":"","title":"gruvbox-light"},{"location":"themes/themes/#gruvbox-light-soft","text":"","title":"gruvbox-light-soft"},{"location":"themes/themes/#iggy","text":"","title":"iggy"},{"location":"themes/themes/#indego","text":"","title":"Indego"},{"location":"themes/themes/#lb","text":"","title":"lb"},{"location":"themes/themes/#material","text":"","title":"material"},{"location":"themes/themes/#monokai","text":"","title":"Monokai"},{"location":"themes/themes/#paper-float","text":"","title":"paper-float"},{"location":"themes/themes/#paper","text":"","title":"Paper"},{"location":"themes/themes/#purple","text":"","title":"purple"},{"location":"themes/themes/#sidebar","text":"","title":"sidebar"},{"location":"themes/themes/#sidebar-v2","text":"","title":"sidebar-v2"},{"location":"themes/themes/#solarized_alternate","text":"","title":"solarized_alternate"},{"location":"themes/themes/#solarized","text":"","title":"solarized"}]}