175 Commits

Author SHA1 Message Date
ede969e9ce filebrowser: include entries of d_type DT_UNKNOWN
workaround for https://github.com/davatorium/rofi/issues/1954
2025-06-03 03:42:43 +00:00
81e9d6ca1f run-{shell-,}command: expand {app_id} inside the template string 2025-06-03 03:42:43 +00:00
c0c861372e add default.nix
build this project from NixOS with `nix-build`
2025-06-03 03:42:43 +00:00
lbonn
07955bf9b3 Rofi 1.7.9+wayland1 2025-05-18 20:20:30 +02:00
lbonn
9f458ad2e7 Fix a merge conflict resolution error 2025-05-18 20:20:19 +02:00
lbonn
5596ecaca4 Merge tag '1.7.9' into wayland 2025-05-18 20:03:28 +02:00
Qball
b5e1494fcc Bump release to 1.7.9 2025-05-18 19:01:00 +02:00
Qball
4b41e4e8df [MKDocs] Update Downloads page with missing releases. 2025-05-18 12:12:15 +02:00
Qball
c873b37119 [MKDocs] More updates to menu structure. 2025-05-18 11:48:43 +02:00
Qball
709faac842 Add rofi-actions to website and update releasenotes. 2025-05-18 11:43:33 +02:00
Qball
54411627a9 More releasenote updates. 2025-05-17 19:24:15 +02:00
Qball
c645bdeab9 Add initial release notes for 1.7.9. 2025-05-17 15:07:31 +02:00
Amos Bird
b35f516556 Add -imdkit config to toggle imdkit at runtime (#2124) 2025-04-26 16:16:51 +02:00
Qball
f0ccf4c186 [Widget] Add 2 workaround for error in corner radius drawing
* Disable AA (works on nvidia)
* Disable nvidia workaround.
2025-03-30 15:04:22 +02:00
Qball Cow
d948e33e68 [rofi-sensible-terminal] Add ghostty
fixes: #2110
2025-03-09 12:47:13 +01:00
J0hannes101
56fd08ed58 [scrollbar] Add theming for rounded corners (#2108)
* [scrollbar] Add theming for rounded corners

* rename "rounded-corners" to "handle-rounded-corners"
2025-03-08 18:34:39 +01:00
Qball
a993ceadf4 [DOC] Fix indenting of sub-bullets as mkdocs interpets them differently
issue: #2112
2025-03-06 11:26:18 +01:00
elig0n
8b13ae350d Fix typo in fullscreen-preview.rasi (#2113) 2025-03-06 11:13:34 +01:00
J0hannes101
e70e3906cc Add theming to hide text cursor if no text is put in (#2106)
* Add theming to hide text cursor if no text is put in

* rename "hide-empty-cursor" to "hide-cursor-on-empty"

* update docs
2025-02-25 18:50:25 +01:00
Qball
22a0e39b9b [Build] Update dependencies for sr.ht. 2025-02-21 17:10:21 +01:00
J0hannes101
a84f04a14b [DRUN] Add option to exclude categories from drun #2102 (#2104)
* Add option to exclude categories from drun

* Fix memory leak when both -drun-categories and -drun-exclude-categories are used

* update docs
2025-02-21 16:28:21 +01:00
lbonn
3bec3fac59 Wayland: remove some dead code
Found with Codacy https://app.codacy.com/gh/davatorium/rofi/pull-requests/2099
2025-02-20 19:08:45 +01:00
Qball Cow
8639783f5f [XCB] Don't keep casting from int to double to int 2025-02-20 10:08:35 +01:00
Qball Cow
5d77a9bb33 [Helper] Add a rofi_fallthrough macro to tell compiler fallthrough is intentional 2025-02-20 09:59:53 +01:00
Qball
47053f30d2 [View] xcb_clear_area fixed wrong argument order. 2025-02-18 21:15:14 +01:00
lbonn
183b0b5d75 Wayland: fix key repeat rate
Fixes #81
2025-02-16 19:35:07 +01:00
Qball
c609e5e085 [DRun] Better handling of corrupted cache file. 2025-02-13 21:04:29 +01:00
lbonn
cebb0fd1a7 Merge remote-tracking branch 'upstream/next' into wayland 2025-02-13 09:35:15 +01:00
Emil
32a0374fb1 Fix broken Pango link (#2096) 2025-02-12 21:36:05 +01:00
Qball
f2f22e7edc [NKUtils] Drop support for binding Meta key.
fixes: #2095
2025-02-12 19:50:44 +01:00
Dave Davenport
88456b6adc [WIP] [View] Allow cycling through matching methods (#2091)
* [View] Allow cycling through matching methods

* [Doc] Fix documentation and test for keybindings

* [Helper] Allow selecting different matching modes for cycling at runtime.

* [View] Fix bool to gboolean

* [Doc] Small type fix, theme cleanup

* [Overlay] Make timeout configurable.

* [Helper] Reduce scope of variable.
2025-02-09 17:34:57 +01:00
Qball Cow
1942c527a8 Update script to avoid possible issues. 2025-02-09 11:15:36 +01:00
Qball Cow
00b15de450 Update codeql flow version 2025-02-09 11:09:16 +01:00
Qball Cow
995cd3c048 Fix wrong pointer -replace and small cleanup. 2025-02-09 11:00:59 +01:00
Qball Cow
f43d578264 [Textbox] Small signedness fixes for password mask code. 2025-02-08 21:37:20 +01:00
Zebra2711
1c144cc901 [dmenu] Modified textbox password masking (#2067)
* Modified textbox password masking

Use Unicode Character “●” (U+25CF) inteads '*'

* [dmenu] change password mask via theme config file

* revert wrong delete lib

* Fix cursor position

* Correct cursor positioning for UTF-8 paste in textboxes, remove unused variables.

* [Revert] Fix pasting UTF-8 characters. It causes the cursor position to move incorrectly.

* Make everything work again

* fix memory leak
2025-02-08 17:01:35 +01:00
phanium
0c3cbd0cfb feat: add smartcase support like vim (#2060) 2025-01-27 17:52:32 +01:00
Qball
3724b4dd31 [Mode] Fix wrong documentation header. 2025-01-26 21:40:24 +01:00
Qball Cow
fb326c1b61 Revert "[Window] Allow active window to be sorted on top."
This reverts commit 8542b3ee7e.
2025-01-26 20:13:21 +01:00
Qball Cow
e068ddbc01 [Mode] Add some wrappers and use object via accessors.
* Make sure file is only shown once in parsed list, not twice.
2025-01-26 20:07:04 +01:00
Qball
613bc5814c Merge remote-tracking branch 'github/next' into next 2025-01-24 11:33:02 +01:00
giomatfois62
bc67d8a8a6 [WIP] Execute custom user commands or scripts on a variety of rofi events (#2053)
* Implemented custom user command execution on the following menu events: entry selected, entry accepted, menu canceled, menu error, mode changed, screenshot taken

* fixed different signedness comparison warning and compare unfiltered entry index in selection_changed_user_callback

* track previously selected line in RofiViewState

* added documentation about custom scripts to run on certain actions

---------

Co-authored-by: Matteo <giomatfois62@yahoo.it>
2025-01-24 11:19:48 +01:00
Qball
168b5d6381 Merge remote-tracking branch 'github/next' into next 2025-01-22 18:19:30 +01:00
Tiou Lims
5870040256 Add option to enable the kb-delete-entry in script mode (#2087)
* Add option to enable the `kb-delete-entry` in script mode

* Remove `use-delete` option
2025-01-22 18:12:27 +01:00
lbonn
03a3a58d54 Review files exported in tarballs 2025-01-22 10:06:48 +01:00
lbonn
369818666b Rofi 1.7.8+wayland1 2025-01-20 20:00:32 +01:00
lbonn
e22d8ff75f Add tag in gh artifacts names 2025-01-20 20:00:30 +01:00
lbonn
42c384aec0 Merge tag '1.7.8' into wayland 2025-01-20 19:41:23 +01:00
Qball
8542b3ee7e [Window] Allow active window to be sorted on top.
fixes: #2048
2025-01-20 18:27:19 +01:00
Qball
5b95abce92 [Lexer] Allow for optional imports.
Adds the `?import` syntax.

fixes: #2078
2025-01-20 14:34:53 +01:00
Qball
56fbb62bd3 Bump to 1.7.8-dev release. 2025-01-19 10:43:57 +01:00
Qball
68a27ff317 Release 1.7.8 2025-01-19 10:41:47 +01:00
Qball
40a084949d [Doc] Update releasenotes. 2025-01-16 18:36:04 +01:00
Faule Socke
4cdca24995 Fix buffer overflow in rofi -e after reading from stdin (#2082) 2025-01-16 18:22:28 +01:00
Qball
329a5dd6a5 [Doc] Add first version of 1.7.8 releasenotes. 2025-01-13 19:21:05 +01:00
Qball Cow
4287ff444a [DRun] Reduce DBus timeout to 1500ms add option to disable DBusActivatable.
Issue: #2077
2025-01-09 12:53:37 +01:00
Qball
b8932b36ce [CI] Do explicit compare with 'true'?
Why is CI a pain like this.
2025-01-07 19:54:04 +01:00
Qball
829310b290 [CI] Fix typo in conditional. 2025-01-07 19:42:46 +01:00
Qball
53fd39b6ee [CI] Only make dist on one build. 2025-01-07 19:34:56 +01:00
Qball
ff56b4b954 [CI] Fix identical name? 2025-01-07 19:19:03 +01:00
Qball
6c1c029e98 [CI] Bump upload action to v4 2025-01-07 19:12:21 +01:00
lbonn
5df2d3a137 Merge remote-tracking branch 'upstream/next' into wayland 2025-01-07 13:24:51 +01:00
Qball
60181710dc [Widget] Actually remove ADD operator from border drawing.
Issue: #2076
2025-01-06 18:38:55 +01:00
Qball
5a016a3b17 [widget] Remove the ADD operator.
Issue: #2076
2025-01-06 18:37:03 +01:00
Qball
bbe85035c9 Add 1.7.7 docs to README. 2025-01-06 17:46:06 +01:00
lbonn
5cf3d34ba4 Set -dev version 2025-01-05 15:31:04 +01:00
lbonn
96df6d233e Rofi 1.7.7+wayland1 2025-01-05 15:26:18 +01:00
lbonn
3550af6d5b Fix imdkit detection
config.h needs to be included before ifdef check...
2025-01-05 14:38:29 +01:00
lbonn
fab79016fb Fix a shadowing warning 2025-01-05 14:01:36 +01:00
lbonn
57c53bdc16 Merge tag '1.7.7' into wayland 2025-01-05 14:01:24 +01:00
Qball
085e5eaccd Mark as dev version 2025-01-04 20:02:02 +01:00
Qball
c8d0bd3156 Release 1.7.7 2025-01-04 20:00:20 +01:00
Qball Cow
3500cdb540 First version release notes 1.7.8 2025-01-04 10:10:25 +01:00
Qball
3b1e483a6c [Widget] Don't use cairo_push/pop_group as it causes issues.
Seems to happen on nvidia systems, rendering to PNG surface is fine,
problem is with rendering to screen.
Hopefully this patch fixes it.

Issue: #2068
2025-01-03 22:28:49 +01:00
Qball
496101ac36 Revert "[window] Check bitmask, not full comparison"
This reverts commit 5185895643.
2025-01-03 19:48:56 +01:00
Qball
de4e10a7de [Config] Remove character data type as it aliases with string.
Internal character option will now use the first ascii char from the
string type.
2025-01-03 13:12:05 +01:00
Qball
de85539eb7 [Doc] Refer to releasenotes for updates in Changelog file. 2025-01-02 21:31:01 +01:00
Qball
e8ecd86bc0 [Doc] Update theme documentation with import resolving update.
Resolve both .rasi and .rasinc and what order

Issue: #2069
2025-01-02 21:09:20 +01:00
Qball
ec5c6fe7c8 [Themes] Update themes to import without rasi(nc) extensions.
Issue: #2069
2025-01-02 21:04:29 +01:00
Qball
25c1adbb2a [Theme] Fix resolving of 'rasinc' extension when no extension is given.
Was an unresolved TODO in code.

Fixes: #2069
2025-01-02 21:01:14 +01:00
Qball
d8e9a1981f Be more diligent trying to resolve -config 2024-12-31 12:00:03 +01:00
Qball Cow
f9491690fd Use FALSE instead of false. 2024-12-29 15:10:47 +01:00
Qball Cow
39f231b5ff Resolve -config argument identical to a -theme argument.
fixes: #2040
2024-12-29 10:34:50 +01:00
Qball Cow
b955b9aff9 [DRun] If indicated by .desktop file, launch via dbus activation.
fixes: #1924
2024-12-29 10:26:39 +01:00
Qball
b5861f8626 [Website] Update website links and headers. 2024-12-27 11:22:05 +01:00
Qball
33a50843f7 Set things ready for 1.7.7 development.
Add website entry.
2024-12-27 11:16:27 +01:00
Qball
554c0d6d49 Release 1.7.6 2024-12-27 11:08:42 +01:00
Qball Cow
ec6df03950 [Releasenotes] Small update to releasenotes 2024-12-26 14:49:33 +01:00
lbonn
7adea592a0 [Doc] Update release notes (#1958)
* [Doc] Update release notes

* [ReleaseNotes] Update releasenotes.

* [Doc] Update release notes

* [Doc] Update release notes

* Update release notes with latest change + known issue.

---------

Co-authored-by: Dave Davenport <qball@blame.services>
Co-authored-by: Laurent Bonnans <laurent.bonnans@smart-steel-technologies.com>
2024-12-26 14:49:22 +01:00
Qball
54ebfa7484 [CI] Update doxygen-coverage. 2024-12-23 14:15:48 +01:00
Qball
8b9afa39c8 [Doc] More doxygen file updates for CI. 2024-12-23 13:51:24 +01:00
Qball
53a80627e7 [Doc] Update doxygen file to remove obsolete entries. 2024-12-23 13:45:43 +01:00
Qball
98924ddcb7 [CI] Add dev package of libgdk-pixbuf-2.0 2024-12-23 13:27:59 +01:00
Qball
151b91092e [CI] add libgdk-pixbuf-2.0 to dependency list. 2024-12-23 13:26:16 +01:00
SWarrener
0abd88784b Fixing incorrect link in INSTALL.md 2024-11-29 17:01:37 +01:00
Dave Davenport
405f5231d8 [DOC] Add mouse button names to documentation. 2024-11-27 10:09:01 +01:00
lbonn
0a0cc5f6d7 Remove duplicated disable history code 2024-11-10 20:49:42 +01:00
lbonn
2baa809d8a Merge remote-tracking branch 'upstream/next' into wayland 2024-11-06 18:51:32 +01:00
lbonn
c38dc9a1d9 Re-indent recursivebrowser.c with clang-format 2024-11-04 10:12:06 +01:00
Dave Davenport
08989ab4fc [Doc] Clarify documentation for User Script directory.
Fixes: #2043
2024-10-26 12:07:47 +02:00
Dave Davenport
9d785b5ce1 Add -Wshadow to build system. (#2042)
* Add -Wshadow to build system.

Issue: #2036

* Take out unintended change

* [Icon] Add more descriptive variable name.
2024-10-20 12:54:13 +02:00
Dave Davenport
df7d8b65f0 [textbox] Fix aliasing variable name. (thanks to xsy420)
Issue: #2036
2024-10-18 22:01:09 +02:00
Onur
142e78071c Update rofi-sensible-terminal to include foot 2024-10-06 13:23:32 +02:00
Dave Davenport
186b0e7be0 [Textbox] Use FontMetrics font height (if available) to get height 2024-10-03 17:32:53 +02:00
Dave Davenport
f15aae9bd6 Merge remote-tracking branch 'origin/next' into next 2024-09-26 18:03:43 +02:00
Dave Davenport
35a4af12ff [Website] Update 1.7.3 docs.
Issue: #2033
2024-09-26 18:02:47 +02:00
Qball Cow
7402e451e2 [Theme] Fixes recursion in double_inside
fixes: #2021
2024-09-01 09:56:03 +02:00
Amos Bird
558ab34aa3 Try to support modifiers in XIM again (#2015) 2024-08-02 18:39:36 +02:00
Dave Davenport
21e57a6b7d [autoconf] Fix missing dependency. 2024-07-30 20:14:02 +02:00
Amos Bird
8eb8ff3b6f Better XIM interaction by filtering modifiers (#2000) 2024-07-09 20:51:23 +02:00
Amos Bird
8b612f08cf Fix ime and enable build option (#1999) 2024-07-09 17:53:02 +02:00
lbonn
8604addae2 [Autotools] Ship missing files for meson build 2024-07-08 23:17:40 +02:00
lbonn
a7c03695c4 Fix some compiler warnings
* -Wno-inline in autoconf builds (was already in meson builds)
* Use non-deprecated name for g_spawn_check_wait_status
* Update libgwater
2024-07-08 23:17:40 +02:00
Dave Davenport
8f06e0a370 #1995: Disable history in password mode, move disabling into create_view. 2024-07-07 20:34:24 +02:00
Dave Davenport
3b0f2b43f9 [config] Set filebrowser as default completer. 2024-06-27 21:32:39 +02:00
lbonn
d88b475bad [Wayland] Add missing methods in wl_data_device_listener 2024-06-24 23:26:56 +02:00
giomatfois62
75ae2a41f0 [WIP] xdg thumbnails fetching with fallback on mimetype icons (#1939)
* implemented xdg thumbnails fetching with fallback on mimetype icons for menu entries in filebrowser mode

* included original license text

* added md5 header and source file

* implemented xdg compatible thumbnail's creation

* added -preview-cmd string option to program settings

* support custom command to create images for entries with thumbnail:// prefix

* fix custom thumbnailer command crash caused by null uri when entry is not a valid filename

* check entry_name is not NULL or empty when generating thumbnails;
use snprintf to avoid static analyzer complains

* avoid using gstrvbuilder to build thumbnailer command args

* fixed static analyzer complain about always wrong condition

* use g_spawn_check_exit_status to avoid bump to glib 2.70

* removed md5-c dependency and use glib checksum implementation

* fixed meson build after md5-c library removal

* support thumbnail generation in recursivebrowser mode

* restored check rofi_icon_fetcher_file_is_image

* create thumbnail directories if not existing

* use g_malloc0, g_strdup and g_strdup_printf

* fixed formatting with clang-format

* don't wait for jobs in execution when finalizing the icon fetcher worker threadpool

* destroy and rebuild the icon fetcher worker threadpool when the current page is changed

* added query_started boolean member to IconFetcherEntry;
check if an icon fetcher query was started on an IconFetcherEntry and submit the query again otherwise

* force icon cache lookup even if the item has a valid icon_fetch_uid (the fetching job could have been discarded before starting)

* search binaries in PATH when executing thumbnailer command

* mark icon query as not started in threadpool item free_func

* added listview page_changed_callback; rebuild icon fetcher threadpool in page_changed_callback

* [listview] Add missing code documentation param

* Create rofi-thumbnails.5.markdown

* Updated documentation with apparmor issues and workaround

* [Doc] Ship rofi-thumbnails.5

With some formatting fixes

* use a more compact thumbnailer example

---------

Co-authored-by: giomatfois62 <giomatfois62@yahoo.it>
Co-authored-by: Dave Davenport <DaveDavenport@users.noreply.github.com>
Co-authored-by: lbonn <github@lbonnans.net>
2024-06-21 18:47:38 +02:00
Istvan Petres
5133f50f30 Add -transient-window mode (#1988)
* Add -transient-window mode

This will add a new mode for the rofi window so when you run it with
-transient-window

instead of
-normal-window

it will get the currently focused window and then use that as the parent window and set itself as transient of that window.  It is useful so that when you  use a keyboard shortcut to start rofi it will always popup on the window you are working on and so it doesn't make you refocus/move your head on large monitors :)

* Fixed other windows to be focusable in transient mode

and added print_help_msg for this new -transient-window option.

* Added -transient-window option to doc too
2024-06-09 18:57:29 +02:00
lbonn
93ad86da10 [Wayland] Fix touchpad scrolling
Magic values were determined empirically...

Fixes #134
2024-06-07 00:14:29 +02:00
Nikita Zlobin
bd0ba45db8 Fix scrolling for vertical layout with horizontal packing
Current scrolling effect looks interesting, but impractical, when with
multiple columns.

Signed-off-by: Dave Davenport <qball@gmpclient.org>
2024-06-06 18:42:55 +02:00
Nikita Zlobin
753cd1e9e1 Place continuous scroll center in middle column
Signed-off-by: Dave Davenport <qball@gmpclient.org>
2024-06-06 18:42:55 +02:00
Qball Cow
dee97eb540 [Script] Fix keep-selection add keep-filter
Fixes: #1962
2024-05-12 21:35:26 +02:00
Qball Cow
9580c4a191 [RecursiveBrowser] Make implementation not recursive.
Do stat when DT_UNKNOWN is given back when reading directory.

Issue: #1954
2024-05-12 13:41:32 +02:00
Samuel Dionne-Riel
b04bedca44 wayland/display: Fix mmap use
> From version 7 onwards, the fd must be mapped with MAP_PRIVATE by the recipient, as MAP_SHARED may fail.

 - https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_keyboard

Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com>
2024-05-05 21:05:47 +02:00
lbonn
51dec9d65b Merge remote-tracking branch 'upstream/next' into wayland 2024-05-04 12:29:49 +02:00
ortango
5b9939b287 Add border_width to window coordinates (#1969)
* Update xcb.c

window coors relative to border_width.

* Add border_width to window coordinates

Normalize the geometry between reparenting and non- window managers.

* remove WM_ROOT_WINDOW_OFFSET

* remove WM_ROOT_WINDOW_OFFSET
* only translate reparent
2024-04-25 16:14:39 +02:00
Robin Candau
812ad0277f Update documentation with the new rofi-wayland Arch package 2024-04-23 07:45:18 +02:00
Dave Davenport
9b6e70b365 [IconFetcher] Don't check for extension for image file.
Issue: 1977
2024-04-18 22:32:50 +02:00
martinsifrar
4f098751cd [IconFetcher] Fix failing decode of animated GIFs. (#1975) 2024-04-15 12:56:09 +02:00
Dave Davenport
6c38a49d54 [Doc] Fix typo, thx to @Nickwiz 2024-03-16 11:53:12 +01:00
Dave Davenport
94f8c88336 [github] update lock config. 2024-03-15 10:29:04 +01:00
Qball Cow
81e06d7157 [github] bump lock-threads flow version 2024-03-13 07:18:08 +01:00
Dave Davenport
839ee0d7d9 [Doc] Fix copy/paste error in template. 2024-03-11 15:49:19 +01:00
Dave Davenport
76154cc1ff [Doc] Fix typo in issue template. 2024-03-11 15:48:25 +01:00
Dave Davenport
1063b6ec05 [Run] Store display and exec string 2024-03-11 12:32:12 +01:00
Dave Davenport
04f16052a9 [Run] Don't re-quote history items. 2024-03-11 12:04:08 +01:00
lbonn
9cae4a9b61 [Modes] Remove dead code in mode implems (#1960)
NEXT, PREVIOUS and QUICK_SWITCH are handled in mode.c since
96cd34d24f (#1184)
2024-03-11 11:07:29 +01:00
Dave Davenport
af6fb83a51 [View] Work around GThreadPool 1 pointer bug.
* Also fix typo in icon fetcher.
2024-03-08 09:38:15 +01:00
Dave Davenport
0bf0c51827 [Github] Bump checkout to v4 2024-03-08 09:16:29 +01:00
lbonn
47ae31eb5d [Wayland] Fix CodeQL overflow warning 2024-03-06 11:54:20 +01:00
lbonn
d8ba203f6e [Wayland] Handle clipboard pasting more securely
Only receive clipboard offers when pasting instead of storing the data
indefinitely.

This is also more performant by default as it is not doing unnecessary
work.
2024-03-06 10:19:24 +01:00
lbonn
1c41373f52 Set -dev version 2024-03-05 17:37:56 +01:00
lbonn
32d229bb47 Bump to 1.7.5+wayland3 2024-03-05 17:15:44 +01:00
lbonn
433f9664e9 [Doc] Switch to pandoc and remove generated files (#1955)
* [Build] Add missing dist files from libnkutils

* [Doc] Switch to pandoc and remove generated files

* [Doc] Rewrite markdown for conversion to man

* convert existing markup to use definition list (a bit hacky...)
* rewrite title to pandoc man metadata
* reduce heading nesting to match most man pages
* inline code displayed as bold, also common man style

* [Doc] New installation with autoconf and meson

- autoconf:
  * generate in source directory if pandoc found
  * install from source directory

- meson:
  * generate and install with build directory if pandoc found
  * try to install from source directory if pandoc not found
  * bail otherwise

* [Doc] Make pandoc filter 2.9 compatible

Man pages look better with pandoc >= 2.17
2024-03-05 16:22:47 +01:00
Dave Davenport
3d29715e1e [IconFetcher] Don't free on removal from thread-pool 2024-03-02 19:38:05 +01:00
lbonn
be7c088eea [Doc] Fix -global-kb docs
And revert erroneous change in historical docs
2024-03-01 18:40:17 +01:00
lbonn
ccea31234a [WaylandWindow] Remove a scary log
Happens when destroy() is called without previous init()
2024-03-01 18:26:23 +01:00
Dave Davenport
8061e4e7c2 Add an item-free method to the thread-pool 2024-03-01 15:28:48 +01:00
lbonn
37b8e9fb99 [Wayland] Fix axis events handling
This was very buggy, we were counting the events twice...

* always use pointer frame, it's available since v5
* drop axis handler
* use axis_discrete or axis_120 (v >= 8) instead
* fail on some protocol minimum version checks
* simplify output protocol version check

Fixes #120
2024-03-01 11:27:45 +01:00
lbonn
217d6c46d4 [Wayland] Fix last missing non-strict prototype 2024-02-29 10:30:52 +01:00
Qball Cow
42d6bb9af4 [Window] write code so clang-check does not complain about leak.
Does not solve the possible, but very unlikely leak, but keeps
clang-check happy.
2024-02-29 00:00:36 +01:00
Dave Davenport
afc65ac125 [script|dmenu] Add option to make row permanent.
fixes: #1952
2024-02-28 20:47:18 +01:00
lbonn
2a8380f260 [Config] Rename global-kbindings to global-kb 2024-02-28 12:02:53 +01:00
lbonn
1d9819fe50 [Build] Fix deprecated format() in meson.build
In Wayland builds
2024-02-28 09:32:55 +01:00
lbonn
ccb8385d93 Merge remote-tracking branch 'upstream/next' into wayland 2024-02-28 09:31:31 +01:00
lbonn
0cec298f91 [Wayland] Make bindings inhibitor opt-in
Fixes #119
2024-02-28 09:29:04 +01:00
Qball Cow
f2c0f75fd2 [run] fix missing doxygen and add explanation. 2024-02-28 00:54:23 +01:00
Qball Cow
ee1b68aea6 [Run] When passing raw entry, pass it unquoted to history
fixes: #1951
2024-02-28 00:46:23 +01:00
Dave Davenport
eae65b2c07 Replace deprecated g_memdup by g_memdup2 2024-02-27 20:53:26 +01:00
Dave Davenport
3a97e0cb91 Replace deprecated by g_memdup to g_memdup2 2024-02-27 20:47:51 +01:00
Dave Davenport
1c41c36488 Bump glib version to 2.72 2024-02-27 20:46:34 +01:00
lbonn
aa193c3be6 [Build] Bump minimal meson version to 0.59.0 (#1947)
To remove some deprecated invocations.

0.47.0 (2018-07-02) -> 0.59.0 (2021-07-18)
2024-02-27 20:42:50 +01:00
lbonn
b847cb35f1 [Wayland] Update layer shell protocol
version 2 -> 5
2024-02-27 15:28:35 +01:00
lbonn
d53738170c [Wayland] Inhibit compositor shortcuts
... with the dedicated wayland protocol.

This way, rofi can re-use compositor bindings. The canonical example is
window switching with Alt-Tab.
2024-02-27 14:09:18 +01:00
lbonn
2ddef0f8ac [Wayland] Fix implicit deps in view-internal.h 2024-02-27 13:41:03 +01:00
lbonn
d2ad9fe828 [Wayland] Fix remaining non-strict C prototypes 2024-02-27 13:34:41 +01:00
lbonn
6c1a425d87 [WaylandWindow] Fix missing escaping 2024-02-27 13:31:02 +01:00
lbonn
54a2c45120 Merge remote-tracking branch 'upstream/next' into wayland 2024-02-27 13:29:54 +01:00
Aleksei Bavshin
cb6fd22118 [WaylandWindow] Unmap surface before sending activation request
Fixes lbonn/rofi#117
2024-02-26 19:32:40 +01:00
Qball Cow
43790b3eda Fix compiler warnings in window mode. 2024-02-25 23:39:05 +01:00
Qball Cow
2bbaa36b7a Fix some compiler warnings. 2024-02-25 23:33:22 +01:00
Qball Cow
058aac887f Small indent 2024-02-25 22:24:58 +01:00
Qball Cow
2d35397195 [RUN] shell escape command before processing it further. 2024-02-22 09:13:05 +01:00
Qball Cow
118e3a4df4 Revert "[config] By default escape run command."
This reverts commit 83ecbfe127.
2024-02-22 08:51:04 +01:00
Qball Cow
83ecbfe127 [config] By default escape run command. 2024-02-22 08:45:04 +01:00
161 changed files with 21971 additions and 7929 deletions

View File

@@ -2,6 +2,8 @@ image: ubuntu/lts
packages: packages:
- meson - meson
- ninja-build - ninja-build
- autoconf
- automake
- build-essential - build-essential
- libpango1.0-dev - libpango1.0-dev
- libstartup-notification0-dev - libstartup-notification0-dev
@@ -13,10 +15,14 @@ packages:
- libxcb-xkb-dev - libxcb-xkb-dev
- libxcb-xrm-dev - libxcb-xrm-dev
- libxcb-cursor-dev - libxcb-cursor-dev
- libxcb-imdkit-dev
- libxcb-keysyms1
- libxkbcommon-dev - libxkbcommon-dev
- libxkbcommon-dev - libxkbcommon-dev
- libxkbcommon-x11-dev - libxkbcommon-x11-dev
- libgdk-pixbuf2.0-dev - libgdk-pixbuf2.0-dev
- ninja-build
- pandoc
- check - check
- flex - flex
- bison - bison
@@ -38,4 +44,4 @@ tasks:
- dist: | - dist: |
ninja -C rofi/builddir dist ninja -C rofi/builddir dist
artifacts: artifacts:
- rofi/builddir/meson-dist/rofi-1.7.5-dev.tar.xz - rofi/builddir/meson-dist/rofi-1.7.8-dev.tar.xz

12
.gitattributes vendored
View File

@@ -1,9 +1,11 @@
*gitignore export-ignore .build.yml export-ignore
.gitattributes export-ignore .gitattributes export-ignore
.gitmodules export-ignore .gitignore export-ignore
.gitlab-ci.yml export-ignore .mailmap export-ignore
.travis.yml export-ignore
.github export-ignore .github export-ignore
.gitlab-ci.yml export-ignore
.gitmodules export-ignore
.travis.yml export-ignore
releasenotes export-ignore releasenotes export-ignore
doc/*.png export-ignore doc/*.png export-ignore
doc/help-output.txt export-ignore doc/help-output.txt export-ignore
@@ -12,5 +14,5 @@ doc/Notes export-ignore
doc/old-theme-convert-output.rasi export-ignore doc/old-theme-convert-output.rasi export-ignore
doc/test_xr.txt export-ignore doc/test_xr.txt export-ignore
doc/create_screenshot.sh export-ignore doc/create_screenshot.sh export-ignore
doc/README.md export-ignore mkdocs export-ignore
script/*.jpg export-ignore script/*.jpg export-ignore

View File

@@ -16,7 +16,7 @@ body:
consider youre wrong and still fill the full report. Any report consider youre wrong and still fill the full report. Any report
missing required informations will be labeled as “Incomplete Report - missing required informations will be labeled as “Incomplete Report -
Please follow the guidelines” and will be closed. If you ask a Please follow the guidelines” and will be closed. If you ask a
question, enter dummy information in required fields to get passed the question, enter dummy information in required fields to get past the
checks or in general completely ignore the guidelines, the issue will checks or in general completely ignore the guidelines, the issue will
be closed and locked as spam. be closed and locked as spam.
@@ -37,21 +37,26 @@ body:
- type: input - type: input
attributes: attributes:
label: "Configuration" label: "Configuration"
description: "Please use https://gist.github.com and include output of `rofi -dump-config`." description: |
Please use https://gist.github.com and include output of `rofi -dump-config`.
n/a is not a valid config.
placeholder: "Gist URL" placeholder: "Gist URL"
validations: validations:
required: true required: true
- type: input - type: input
attributes: attributes:
label: "Theme" label: "Theme"
description: "Please use https://gist.github.com and include output of `rofi -dump-theme`." description: |
Please use https://gist.github.com and include output of `rofi -dump-theme`.
n/a is not a valid theme.
placeholder: "Gist URL" placeholder: "Gist URL"
validations: validations:
required: true required: true
- type: input - type: input
attributes: attributes:
label: "Timing report" label: "Timing report"
description: "Please use https://gist.github.com and include output of your command with G_MESSAGES_DEBUG=Timings set." description: |
Please use https://gist.github.com and include output of your command with G_MESSAGES_DEBUG=Timings set.
placeholder: "Gist URL" placeholder: "Gist URL"
validations: validations:
required: false required: false

View File

@@ -2,6 +2,9 @@ name: Autotools Build
description: Builds Rofi using Autotools description: Builds Rofi using Autotools
inputs: inputs:
do-release:
description: Do a make dist and upload
required: true
cc: cc:
description: Compiler to use description: Compiler to use
required: true required: true
@@ -45,9 +48,10 @@ runs:
make make
make check make check
- id: upload - id: upload
uses: actions/upload-artifact@v3 if: ${{ inputs.do-release == 'true' }}
uses: actions/upload-artifact@v4
with: with:
name: tarballs name: tarballs ${{ github.sha }}
path: | path: |
builddir/*.tar.gz builddir/*.tar.gz
builddir/*.tar.xz builddir/*.tar.xz

View File

@@ -8,14 +8,14 @@ runs:
run: meson dist -C builddir --include-subprojects --formats xztar,gztar --no-tests run: meson dist -C builddir --include-subprojects --formats xztar,gztar --no-tests
shell: bash shell: bash
- id: upload - id: upload
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v4
with: with:
name: tarballs name: release_tarballs-${{ github.ref_name }}
path: | path: |
builddir/meson-dist/*.tar.xz builddir/meson-dist/*.tar.xz
builddir/meson-dist/*.tar.gz builddir/meson-dist/*.tar.gz
- id: create_release - id: create_release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v2
with: with:
draft: true draft: true
files: | files: |

View File

@@ -32,7 +32,9 @@ runs:
libxkbcommon-dev \ libxkbcommon-dev \
libxkbcommon-dev \ libxkbcommon-dev \
libxkbcommon-x11-dev \ libxkbcommon-x11-dev \
libgdk-pixbuf-2.0-dev \
ninja-build \ ninja-build \
pandoc \
python3-pip \ python3-pip \
python3-setuptools \ python3-setuptools \
python3-wheel \ python3-wheel \

View File

@@ -51,7 +51,7 @@ jobs:
build-meson-gcc-xcb: build-meson-gcc-xcb:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
submodules: recursive submodules: recursive
- uses: ./.github/actions/setup - uses: ./.github/actions/setup

View File

@@ -37,7 +37,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v2 uses: github/codeql-action/init@v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@@ -52,6 +52,6 @@ jobs:
cc: gcc cc: gcc
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@v3
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"

View File

@@ -20,7 +20,8 @@ configuration {
} }
``` ```
You can now set the options in the `configuration` block.
You can now set the options in the `configuration` block.
## Create a configuration file from current setup ## Create a configuration file from current setup
@@ -35,6 +36,7 @@ This will have all the possible settings and their current value.
If a value is the default value, the entry will be commented. If a value is the default value, the entry will be commented.
For example: For example:
```css ```css
configuration { configuration {
/* modes: "window,run,ssh,drun";*/ /* modes: "window,run,ssh,drun";*/
@@ -68,8 +70,8 @@ newlines format are supported. But Unix is preferred.
C and C++ file comments are supported. C and C++ file comments are supported.
- Anything after `// ` and before a newline is considered a comment. - Anything after `//` and before a newline is considered a comment.
- Everything between `/*` and `*/` is a comment. - Everything between `/*` and `*/` is a comment.
Comments can be nested and the C comments can be inline. Comments can be nested and the C comments can be inline.
@@ -124,12 +126,12 @@ For example:
#### Number #### Number
An integer may contain any full number. An integer may contain any full number.
For example: For example:
```css ```css
eh: 2; eh: 2;
``` ```
#### Boolean #### Boolean
@@ -144,15 +146,6 @@ show-icons: true;
This is equal to the `-show-icons` option on the commandline, and `show-icons: This is equal to the `-show-icons` option on the commandline, and `show-icons:
false;` is equal to `-no-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.
```css
matching-negate-char: '-';
```
#### List #### List
This is not supported by the old configuration system, but can be used in the This is not supported by the old configuration system, but can be used in the
@@ -164,6 +157,7 @@ comma-separated. The entry in the list single ASCII words.
```css ```css
combi-modes: [window,drun]; combi-modes: [window,drun];
``` ```
For older versions you have : For older versions you have :
```css ```css

View File

@@ -1,5 +1,5 @@
MIT/X11 License MIT/X11 License
Modified 2013-2023 Qball Cow <qball@gmpclient.org> Modified 2013-2024 Qball Cow <qball@gmpclient.org>
Copyright (c) 2012 Sean Pringle <sean.pringle@gmail.com> Copyright (c) 2012 Sean Pringle <sean.pringle@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining

View File

@@ -1,3 +1,5 @@
For newer release ChangeLogs please see the releasenotes.
v1.7.3: Sturtled! v1.7.3: Sturtled!
- [Help] Print out the parsed config/theme files in -help output. - [Help] Print out the parsed config/theme files in -help output.
- [Keybindings] Fix keybindings being modified by -theme-str - [Keybindings] Fix keybindings being modified by -theme-str

View File

@@ -1,32 +1,29 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [ "$*" = "quit" ] if [ "$*" = "quit" ]; then
then exit 0
exit 0
fi fi
if [ "$@" ] if [ "$@" ]; then
then # Override the previously set prompt.
# Override the previously set prompt. echo -en "\x00prompt\x1fChange prompt\n"
echo -en "\x00prompt\x1fChange prompt\n" for a in {1..10}; do
for a in {1..10} echo "$a"
do done
echo "$a" echo "quit"
done
echo "quit"
else else
echo -en "\x00prompt\x1ftesting\n" echo -en "\x00prompt\x1ftesting\n"
echo -en "\0urgent\x1f0,2\n" echo -en "\0urgent\x1f0,2\n"
echo -en "\0active\x1f1\n" echo -en "\0active\x1f1\n"
echo -en "\0markup-rows\x1ftrue\n" echo -en "\0markup-rows\x1ftrue\n"
echo -en "\0message\x1fSpecial <b>bold</b>message\n" echo -en "\0message\x1fSpecial <b>bold</b>message\n"
echo -en "aap\0icon\x1ffolder\n" echo -en "aap\0icon\x1ffolder\n"
echo -en "blob\0icon\x1ffolder\x1fdisplay\x1fblub\n" echo -en "blob\0icon\x1ffolder\x1fdisplay\x1fblub\n"
echo "noot" echo "noot"
echo "mies" echo "mies"
echo -en "-------------\0nonselectable\x1ftrue\n" echo -en "-------------\0nonselectable\x1ftrue\x1fpermanent\x1ftrue\n"
echo "testing" echo "testing"
echo "<b>Bold</b>" echo "<b>Bold</b>"
echo "quit" echo "quit"
fi fi

View File

@@ -42,7 +42,7 @@ You can also use [Meson](https://mesonbuild.com/) as an alternative.
- libcairo-xcb - libcairo-xcb
- libglib2.0 >= 2.68 - libglib2.0 >= 2.72
- gmodule-2.0 - gmodule-2.0
- gio-unix-2.0 - gio-unix-2.0
@@ -140,7 +140,7 @@ The GitHub Pages version of these directions may be out of date. Please use
If you don't have a checkout: If you don't have a checkout:
```bash ```bash
git clone --recursive https://github.com/DaveDavenport/rofi git clone --recursive https://github.com/lbonn/rofi
cd rofi/ cd rofi/
``` ```
@@ -270,7 +270,7 @@ https://pkgs.alpinelinux.org/packages?name=rofi-wayland
### ArchLinux ### ArchLinux
https://aur.archlinux.org/packages/rofi-lbonn-wayland-git/ https://archlinux.org/packages/extra/x86_64/rofi-wayland
### Fedora ### Fedora

View File

@@ -172,22 +172,61 @@ rofi_LDADD=\
$(LIBS) $(LIBS)
## ##
# Manpage # Manpages
## ##
.PHONY: generate-manpage
if FOUND_PANDOC
generate-manpage: doc/rofi.1\
doc/rofi-sensible-terminal.1\
doc/rofi-theme-selector.1\
doc/rofi-actions.5\
doc/rofi-debugging.5\
doc/rofi-dmenu.5\
doc/rofi-keys.5\
doc/rofi-script.5\
doc/rofi-theme.5 \
doc/rofi-thumbnails.5
doc/rofi.1: doc/rofi.1.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-sensible-terminal.1: doc/rofi-sensible-terminal.1.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-theme-selector.1: doc/rofi-theme-selector.1.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-debugging.5: doc/rofi-debugging.5.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-dmenu.5: doc/rofi-dmenu.5.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-keys.5: doc/rofi-keys.5.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-script.5: doc/rofi-script.5.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-theme.5: doc/rofi-theme.5.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
doc/rofi-thumbnails.5: doc/rofi-thumbnails.5.markdown
pandoc --standalone --to=man --lua-filter=$(top_srcdir)/doc/man_filter.lua -f markdown-tex_math_dollars -o ./$@ ./$<
endif
dist_man1_MANS=\ dist_man1_MANS=\
doc/rofi.1\ doc/rofi.1\
doc/rofi-theme-selector.1\ doc/rofi-sensible-terminal.1\
doc/rofi-sensible-terminal.1 doc/rofi-theme-selector.1
dist_man5_MANS=\ dist_man5_MANS=\
doc/rofi-theme.5\
doc/rofi-debugging.5\ doc/rofi-debugging.5\
doc/rofi-keys.5\
doc/rofi-dmenu.5\ doc/rofi-dmenu.5\
doc/rofi-script.5 doc/rofi-keys.5\
doc/rofi-script.5\
doc/rofi-theme.5\
doc/rofi-thumbnails.5
EXTRA_DIST += \ EXTRA_DIST += \
doc/rofi-theme.5.markdown \ doc/rofi-theme.5.markdown \
doc/rofi-thumbnails.5.markdown \
doc/rofi-debugging.5.markdown \ doc/rofi-debugging.5.markdown \
doc/rofi-script.5.markdown \ doc/rofi-script.5.markdown \
doc/rofi-keys.5.markdown \ doc/rofi-keys.5.markdown \
@@ -254,19 +293,7 @@ EXTRA_DIST+=\
doc/default_configuration.rasi\ doc/default_configuration.rasi\
doc/default_theme.rasi\ doc/default_theme.rasi\
Changelog Changelog
##
# Indent
##
update-manpage: $(top_srcdir)/doc/rofi-theme-selector.1.markdown $(top_srcdir)/doc/rofi.1.markdown $(top_srcdir)/doc/rofi-theme.5.markdown $(top_srcdir)/doc/rofi-script.5.markdown ${top_srcdir}/doc/rofi-sensible-terminal.1.markdown ${top_srcdir}/doc/rofi-keys.5.markdown ${top_srcdir}/doc/rofi-dmenu.5.markdown $(top_srcdir)/doc/rofi-debugging.5.markdown
go-md2man -in $(top_srcdir)/doc/rofi.1.markdown -out $(top_srcdir)/doc/rofi.1
go-md2man -in $(top_srcdir)/doc/rofi-theme-selector.1.markdown -out $(top_srcdir)/doc/rofi-theme-selector.1
go-md2man -in $(top_srcdir)/doc/rofi-theme.5.markdown -out $(top_srcdir)/doc/rofi-theme.5
go-md2man -in $(top_srcdir)/doc/rofi-debugging.5.markdown -out $(top_srcdir)/doc/rofi-debugging.5
go-md2man -in $(top_srcdir)/doc/rofi-keys.5.markdown -out $(top_srcdir)/doc/rofi-keys.5
go-md2man -in $(top_srcdir)/doc/rofi-script.5.markdown -out $(top_srcdir)/doc/rofi-script.5
go-md2man -in $(top_srcdir)/doc/rofi-dmenu.5.markdown -out $(top_srcdir)/doc/rofi-dmenu.5
go-md2man -in $(top_srcdir)/doc/rofi-sensible-terminal.1.markdown -out $(top_srcdir)/doc/rofi-sensible-terminal.1
## ##
# Rofi test program # Rofi test program
@@ -647,6 +674,7 @@ desktop_DATA=\
data/rofi-theme-selector.desktop data/rofi-theme-selector.desktop
EXTRA_DIST += \ EXTRA_DIST += \
doc/man_filter.lua \
doc/meson.build \ doc/meson.build \
subprojects/libgwater/mpd/meson.build \ subprojects/libgwater/mpd/meson.build \
subprojects/libgwater/nl/meson.build \ subprojects/libgwater/nl/meson.build \
@@ -656,6 +684,8 @@ EXTRA_DIST += \
subprojects/libgwater/wayland-server/meson.build \ subprojects/libgwater/wayland-server/meson.build \
subprojects/libgwater/meson.build \ subprojects/libgwater/meson.build \
subprojects/libgwater/win/meson.build \ subprojects/libgwater/win/meson.build \
subprojects/libnkutils/bindings/meson.build \
subprojects/libnkutils/core/meson.build \
subprojects/libnkutils/meson.build \ subprojects/libnkutils/meson.build \
subprojects/libnkutils/meson_options.txt \ subprojects/libnkutils/meson_options.txt \
subprojects/libgwater/wayland/libgwater-wayland.h \ subprojects/libgwater/wayland/libgwater-wayland.h \
@@ -669,6 +699,7 @@ EXTRA_DIST += \
subprojects/libgwater/alsa-mixer/libgwater-alsa-mixer.h \ subprojects/libgwater/alsa-mixer/libgwater-alsa-mixer.h \
subprojects/libgwater/alsa-mixer/libgwater-alsa-mixer.c \ subprojects/libgwater/alsa-mixer/libgwater-alsa-mixer.c \
data/rofi.png\ data/rofi.png\
meson-dist-script \
meson_options.txt \ meson_options.txt \
meson.build meson.build

View File

@@ -10,7 +10,7 @@
<h1 align="center"> Rofi </h1> <h1 align="center"> Rofi </h1>
<p align="center"><i>A window switcher, Application launcher and dmenu replacement</i>.</p> <p align="center"><i>A window switcher, Application launcher and dmenu replacement</i>.</p>
https://user-images.githubusercontent.com/84911063/139428874-fe182dd6-82c6-49b8-8da1-920ddda3d1ed.mp4 <https://user-images.githubusercontent.com/84911063/139428874-fe182dd6-82c6-49b8-8da1-920ddda3d1ed.mp4>
**This is a fork of [Rofi](https://github.com/davatorium/rofi) with added support for Wayland via the [layer shell protocol](https://github.com/swaywm/wlr-protocols).** **This is a fork of [Rofi](https://github.com/davatorium/rofi) with added support for Wayland via the [layer shell protocol](https://github.com/swaywm/wlr-protocols).**
**For more information, see the [Wayland support section](#wayland-support)** **For more information, see the [Wayland support section](#wayland-support)**
@@ -33,15 +33,15 @@ provided by an external script.
Rofi is not: Rofi is not:
- A UI toolkit. - A UI toolkit.
- A library to be used in other applications. - A library to be used in other applications.
- An application that can support every possible use-case. It tries to be - An application that can support every possible use-case. It tries to be
generic enough to be usable by everybody. generic enough to be usable by everybody.
- Specific functionality can be added using scripts or plugins, many exists. - Specific functionality can be added using scripts or plugins, many exists.
- Just a dmenu replacement. The dmenu functionality is a nice 'extra' to - Just a dmenu replacement. The dmenu functionality is a nice 'extra' to
**rofi**, not its main purpose. **rofi**, not its main purpose.
## Table of Contents ## Table of Contents
@@ -50,7 +50,7 @@ Rofi is not:
- [Modes](#modes) - [Modes](#modes)
- [Manpages](#manpage) - [Manpages](#manpage)
- [Installation](#installation) - [Installation](#installation)
- [Quickstart](#quickstart) - [Quickstart](#quickstart)
- [Usage](#usage) - [Usage](#usage)
- [Configuration](#configuration) - [Configuration](#configuration)
- [Themes](#themes) - [Themes](#themes)
@@ -61,47 +61,47 @@ Rofi is not:
Its main features are: Its main features are:
- Fully configurable keyboard navigation - Fully configurable keyboard navigation
- Type to filter - Type to filter
- Tokenized: type any word in any order to filter - Tokenized: type any word in any order to filter
- Case insensitive (togglable) - Case insensitive (togglable)
- Support for fuzzy-, regex-, prefix-, and glob-matching - Support for fuzzy-, regex-, prefix-, and glob-matching
- UTF-8 enabled - UTF-8 enabled
- UTF-8-aware string collating - UTF-8-aware string collating
- International keyboard support (\`e -> è) - International keyboard support (\`e -> è)
- RTL language support - RTL language support
- Cairo drawing and Pango font rendering - Cairo drawing and Pango font rendering
- Built-in modes: - Built-in modes:
- Window switcher mode - Window switcher mode
- EWMH compatible WM - EWMH compatible WM
- Work arounds for i3,bspwm - Work arounds for i3,bspwm
- Application launcher - Application launcher
- Desktop file application launcher - Desktop file application launcher
- SSH launcher mode - SSH launcher mode
- File browser - File browser
- Combi mode, allowing several modes to be merged into one list - Combi mode, allowing several modes to be merged into one list
- History-based ordering — last 25 choices are ordered on top based on use - History-based ordering — last 25 choices are ordered on top based on use
(optional) (optional)
- Levenshtein distance or fzf like sorting of matches (optional) - Levenshtein distance or fzf like sorting of matches (optional)
- Drop-in dmenu replacement - Drop-in dmenu replacement
- Many added improvements - Many added improvements
- Easily extensible using scripts and plugins - Easily extensible using scripts and plugins
- Advanced Theming - Advanced Theming
## Modes ## Modes
@@ -111,22 +111,22 @@ extended by scripts (either called from
Below is a list of the different modes: Below is a list of the different modes:
- **run**: launch applications from $PATH, with option to launch in terminal. - **run**: launch applications from $PATH, with option to launch in terminal.
- **drun**: launch applications based on desktop files. It tries to be - **drun**: launch applications based on desktop files. It tries to be
compliant to the XDG standard. compliant to the XDG standard.
- **window**: Switch between windows on an EWMH compatible window manager. - **window**: Switch between windows on an EWMH compatible window manager.
- **ssh**: Connect to a remote host via ssh. - **ssh**: Connect to a remote host via ssh.
- **filebrowser**: A basic file-browser for opening files. - **filebrowser**: A basic file-browser for opening files.
- **keys**: list internal keybindings. - **keys**: list internal keybindings.
- **script**: Write (limited) custom mode using simple scripts. - **script**: Write (limited) custom mode using simple scripts.
- **combi**: Combine multiple modes into one. - **combi**: Combine multiple modes into one.
**Rofi** is known to work on Linux and BSD. **Rofi** is known to work on Linux and BSD.
@@ -171,6 +171,7 @@ For more up to date information, please see the manpages. The other sections and
- [rofi-debugging](doc/rofi-debugging.5.markdown) - [rofi-debugging](doc/rofi-debugging.5.markdown)
- [rofi-script](doc/rofi-script.5.markdown) - [rofi-script](doc/rofi-script.5.markdown)
- [rofi-theme-selector](doc/rofi-theme-selector.1.markdown) - [rofi-theme-selector](doc/rofi-theme-selector.1.markdown)
- [rofi-thumbnails](doc/rofi-thumbnails.5.markdown)
- [rofi-keys](doc/rofi-keys.5.markdown) - [rofi-keys](doc/rofi-keys.5.markdown)
- [rofi-dmenu](doc/rofi-dmenu.5.markdown) - [rofi-dmenu](doc/rofi-dmenu.5.markdown)
@@ -211,11 +212,11 @@ launcher:
``` ```
The modes to combine in combi mode. The modes to combine in combi mode.
For syntax to `-combi-modes `, see `-modes`. For syntax to `-combi-modes`, see `-modes`.
To get one merge view, of `window`,`run`, and `ssh`: To get one merge view, of `window`,`run`, and `ssh`:
```bash ```bash
rofi -show combi -combi-modes "window,run,ssh" -modes combi rofi -show combi -combi-modes "window,run,ssh" -modes combi
``` ```
### Configuration ### Configuration
@@ -255,9 +256,9 @@ Default theme:
![default](https://raw.githubusercontent.com/davatorium/rofi/next/releasenotes/1.4.0/rofi-no-fzf.png) ![default](https://raw.githubusercontent.com/davatorium/rofi/next/releasenotes/1.4.0/rofi-no-fzf.png)
## Wiki ## Wiki
| ❗ **The upstream rofi Wiki is currently unmaintained and might contain outdated data ** | | ❗ **The upstream rofi Wiki is currently unmaintained and might contain outdated data** |
| --- | | --- |
[Go to upstream rofi wiki](https://github.com/davatorium/rofi/wiki) . [Go to upstream rofi wiki](https://github.com/davatorium/rofi/wiki) .

View File

@@ -46,6 +46,21 @@ Settings config = {
/** Whether to load and show icons */ /** Whether to load and show icons */
.show_icons = FALSE, .show_icons = FALSE,
/** Custom command to generate preview icons */
.preview_cmd = NULL,
/** Custom command to call when menu selection changes */
.on_selection_changed = NULL,
/** Custom command to call when menu mode changes */
.on_mode_changed = NULL,
/** Custom command to call when menu entry is accepted */
.on_entry_accepted = NULL,
/** Custom command to call when menu is canceled */
.on_menu_canceled = NULL,
/** Custom command to call when menu finds errors */
.on_menu_error = NULL,
/** Custom command to call when menu screenshot is taken */
.on_screenshot_taken = NULL,
/** Terminal to use. (for ssh and open in terminal) */ /** Terminal to use. (for ssh and open in terminal) */
.terminal_emulator = "rofi-sensible-terminal", .terminal_emulator = "rofi-sensible-terminal",
.ssh_client = "ssh", .ssh_client = "ssh",
@@ -89,6 +104,8 @@ Settings config = {
.sorting_method = "normal", .sorting_method = "normal",
/** Case sensitivity of the search */ /** Case sensitivity of the search */
.case_sensitive = FALSE, .case_sensitive = FALSE,
/** Case smart of the search */
.case_smart = FALSE,
/** Cycle through in the element list */ /** Cycle through in the element list */
.cycle = TRUE, .cycle = TRUE,
/** Height of an element in #chars */ /** Height of an element in #chars */
@@ -111,6 +128,8 @@ Settings config = {
.drun_match_fields = "name,generic,exec,categories,keywords", .drun_match_fields = "name,generic,exec,categories,keywords",
/** Only show entries in this category */ /** Only show entries in this category */
.drun_categories = NULL, .drun_categories = NULL,
/** Exclude entries in this category */
.drun_exclude_categories = NULL,
/** Desktop entry show actions */ /** Desktop entry show actions */
.drun_show_actions = FALSE, .drun_show_actions = FALSE,
/** Desktop format display */ /** Desktop format display */
@@ -130,6 +149,7 @@ Settings config = {
.scroll_method = 0, .scroll_method = 0,
.window_format = "{w} {c} {t}", .window_format = "{w} {c} {t}",
.click_to_exit = TRUE, .click_to_exit = TRUE,
.global_kb = FALSE,
.theme = NULL, .theme = NULL,
.plugin_path = PLUGIN_PATH, .plugin_path = PLUGIN_PATH,
.max_history_size = 25, .max_history_size = 25,
@@ -159,5 +179,7 @@ Settings config = {
/** workaround for broken xserver (#300 on xserver, #611) */ /** workaround for broken xserver (#300 on xserver, #611) */
.xserver_i300_workaround = FALSE, .xserver_i300_workaround = FALSE,
/** What browser to use for completion */ /** What browser to use for completion */
.completer_mode = "recursivebrowser", .completer_mode = "filebrowser",
/** Whether to enable imdkit, see #2123 */
.enable_imdkit = TRUE,
}; };

View File

@@ -1,4 +1,4 @@
AC_INIT([rofi], [1.7.5-dev], [https://github.com/davatorium/rofi/],[],[https://github.com/davatorium/rofi/discussions]) AC_INIT([rofi], [1.7.9], [https://github.com/davatorium/rofi/],[],[https://github.com/davatorium/rofi/discussions])
AC_CONFIG_SRCDIR([source/rofi.c]) AC_CONFIG_SRCDIR([source/rofi.c])
AC_CONFIG_HEADER([config.h]) AC_CONFIG_HEADER([config.h])
@@ -74,7 +74,7 @@ AM_PROG_AR
dnl --------------------------------------------------------------------- dnl ---------------------------------------------------------------------
dnl Base CFLAGS dnl Base CFLAGS
dnl --------------------------------------------------------------------- dnl ---------------------------------------------------------------------
AM_CFLAGS="-Wall -Wextra -Wparentheses -Winline -pedantic -Wno-overlength-strings -Wunreachable-code" AM_CFLAGS="-Wall -Wextra -Wparentheses -Wno-inline -pedantic -Wno-overlength-strings -Wunreachable-code"
dnl --------------------------------------------------------------------- dnl ---------------------------------------------------------------------
dnl Enable source code coverage reporting for GCC dnl Enable source code coverage reporting for GCC
@@ -139,13 +139,13 @@ dnl ---------------------------------------------------------------------
dnl PKG_CONFIG based dependencies dnl PKG_CONFIG based dependencies
dnl --------------------------------------------------------------------- dnl ---------------------------------------------------------------------
glib_min_major="2" glib_min_major="2"
glib_min_minor="40" glib_min_minor="72"
glib_min_version="${glib_min_major}.${glib_min_minor}" glib_min_version="${glib_min_major}.${glib_min_minor}"
NK_INIT([bindings xdg-theme]) NK_INIT([bindings xdg-theme])
PKG_CHECK_MODULES([glib], [glib-2.0 >= ${glib_min_version} gio-unix-2.0 gmodule-2.0]) PKG_CHECK_MODULES([glib], [glib-2.0 >= ${glib_min_version} gio-unix-2.0 gmodule-2.0])
AC_DEFINE_UNQUOTED([GLIB_VERSION_MIN_REQUIRED], [(G_ENCODE_VERSION(${glib_min_major},${glib_min_minor}))], [The lower GLib version supported]) AC_DEFINE_UNQUOTED([GLIB_VERSION_MIN_REQUIRED], [(G_ENCODE_VERSION(${glib_min_major},${glib_min_minor}))], [The lower GLib version supported])
AC_DEFINE_UNQUOTED([GLIB_VERSION_MAX_ALLOWED], [(G_ENCODE_VERSION(${glib_min_major},${glib_min_minor}))], [The highest GLib version supported]) AC_DEFINE_UNQUOTED([GLIB_VERSION_MAX_ALLOWED], [(G_ENCODE_VERSION(${glib_min_major},${glib_min_minor}))], [The highest GLib version supported])
GW_CHECK_XCB([xcb-aux xcb-xkb xkbcommon xkbcommon-x11 xcb-ewmh xcb-icccm xcb-cursor xcb-randr xcb-xinerama ]) GW_CHECK_XCB([xcb-aux xcb-xkb xkbcommon xkbcommon-x11 xcb-ewmh xcb-icccm xcb-cursor xcb-randr xcb-xinerama xcb-keysyms ])
AC_ARG_ENABLE([imdkit], AS_HELP_STRING([--enable-imdkit], [Build with checks using check library (default: disabled)])) AC_ARG_ENABLE([imdkit], AS_HELP_STRING([--enable-imdkit], [Build with checks using check library (default: disabled)]))
@@ -169,6 +169,13 @@ AC_ARG_ENABLE([check], AS_HELP_STRING([--disable-check], [Build with checks usin
AS_IF([test "x${enable_check}" != "xno"], [ PKG_CHECK_MODULES([check],[check >= 0.11.0], [HAVE_CHECK=1]) ]) AS_IF([test "x${enable_check}" != "xno"], [ PKG_CHECK_MODULES([check],[check >= 0.11.0], [HAVE_CHECK=1]) ])
AM_CONDITIONAL([USE_CHECK], [test "x${enable_check}" != "xno" && test "$HAVE_CHECK" -eq 1]) AM_CONDITIONAL([USE_CHECK], [test "x${enable_check}" != "xno" && test "$HAVE_CHECK" -eq 1])
dnl ---------------------------------------------------------------------
dnl Build man pages
dnl ---------------------------------------------------------------------
AC_ARG_ENABLE([man], AS_HELP_STRING([--disable-man], [Build man pages (default: enabled)]))
AS_IF([test "x$enable_man" != "xno" ], [ AC_CHECK_PROG([pandoc], pandoc, [yes])])
AM_CONDITIONAL([FOUND_PANDOC], [test "x$pandoc" = xyes])
dnl --------------------------------------------------------------------- dnl ---------------------------------------------------------------------
dnl Gets the resource compile tool path. dnl Gets the resource compile tool path.
@@ -210,6 +217,11 @@ echo "Check based tests Enabled"
else else
echo "Check based tests Disabled" echo "Check based tests Disabled"
fi fi
if test "x${enable_man}" != "xno" && test "x$pandoc" = "xyes"; then
echo "Build man pages Enabled"
else
echo "Build man pages Disabled"
fi
echo "-------------------------------------" echo "-------------------------------------"
echo "Now type 'make' to build" echo "Now type 'make' to build"
echo "" echo ""

44
default.nix Normal file
View File

@@ -0,0 +1,44 @@
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
stdenv.mkDerivation {
pname = "rofi";
version = "1.7.5-unstable";
src = ./.;
depsBuildBuild = [
buildPackages.stdenv.cc
pkg-config
glib
];
nativeBuildInputs = [
meson
ninja
pkg-config
flex
bison
pandoc
wayland-protocols
wayland-scanner
];
buildInputs = [
libxkbcommon
pango
cairo
git
librsvg
check
libstartup_notification
xorg.libxcb
xcb-imdkit
xcb-util-cursor
xorg.xcbutilkeysyms
xorg.xcbutil
xorg.xcbutilwm
xcbutilxrm
wayland
wayland-protocols
which
];
mesonFlags = [ "-Dimdkit=true" ];
}

View File

@@ -1,7 +1,7 @@
Manpages are build using [go-md2man](https://github.com/cpuguy83/go-md2man) Manpages are build using [pandoc](https://pandoc.org/)
Manpages can be updated using the following make command: Manpages can be updated using the following make command:
``` ```
make update-manpage make generate-manpage
``` ```

View File

@@ -141,10 +141,17 @@ textbox-num-sep {
str: "/"; str: "/";
} }
inputbar { inputbar {
padding: 1px ; padding: 1px;
spacing: 0px ; spacing: 0px;
text-color: var(normal-foreground); text-color: var(normal-foreground);
children: [ prompt,textbox-prompt-colon,entry, num-filtered-rows, textbox-num-sep, num-rows, case-indicator ]; children: [ prompt,textbox-prompt-colon,entry, overlay,num-filtered-rows, textbox-num-sep, num-rows, case-indicator ];
}
overlay {
background-color: var(normal-foreground);
foreground-color: var(normal-background);
text-color: var(normal-background);
padding: 0 0.2em;
margin: 0 0.2em;
} }
case-indicator { case-indicator {
spacing: 0; spacing: 0;

237
doc/man_filter.lua Normal file
View File

@@ -0,0 +1,237 @@
local Def = {}
function Def:new(d)
-- init with empty def
if d == nil then
d = {
start_idx = nil,
end_idx = nil,
def_par = nil,
content = {},
}
end
setmetatable(d, self)
self.__index = self
return d
end
function Def:init(start_idx, el)
self.start_idx = start_idx
self.def_par = el
end
function Def:append(el)
if self.start_idx ~= nil then
table.insert(self.content, el)
end
end
function Def:stop(end_idx)
if self.start_idx == nil then
return nil
end
local out = self:new({
start_idx = self.start_idx,
end_idx = end_idx,
def_par = self.def_par,
content = self.content,
})
self.start_idx = nil
self.end_idx = nil
self.def_par = nil
self.content = {}
return out
end
function Def:to_string()
return string.format("start: %d, end: %d, def_par: %s", self.start_idx, self.end_idx, self.def_par)
end
function find_defs(doc)
local defs = {}
local idx = 0
local def = Def:new()
-- find defintions:
-- * start at paragraphs with `word` ...
-- * stop at next definition or next header
local filter = {
traverse = "topdown",
Para = function(el)
idx = idx + 1
local new_def_start = #el.content >= 1 and el.content[1].tag == "Code"
if new_def_start then
local newd = def:stop(idx - 1)
table.insert(defs, newd)
def:init(idx, el.content)
else
def:append(el)
end
return nil, false
end,
Block = function(el)
idx = idx + 1
def:append(el)
-- stop exploring after one nesting level
return nil, false
end,
Header = function(el)
idx = idx + 1
local newd = def:stop(idx - 1)
table.insert(defs, newd)
return nil, false
end,
}
doc:walk(filter)
local newd = def:stop(idx - 1)
table.insert(defs, newd)
return defs
end
function convert_defs(doc, defs)
local idx = 0
local out_blocks = {}
local convert_defs = {
traverse = "topdown",
Block = function(el)
idx = idx + 1
for _, d in ipairs(defs) do
if idx == d.end_idx then
local dl = pandoc.DefinitionList({ { d.def_par, { d.content } } })
table.insert(out_blocks, dl:walk())
return {}, false
end
if idx >= d.start_idx and idx < d.end_idx then
-- drop
return {}, false
end
end
table.insert(out_blocks, el:walk())
return nil, false
end,
}
doc:walk(convert_defs)
return pandoc.Pandoc(out_blocks, doc.meta)
end
-- for <2.17 compatibility
-- equivalent to `doc:walk(filter)`
local function walk_doc(doc, filter)
local div = pandoc.Div(doc.blocks)
local blocks = pandoc.walk_block(div, filter).content
return pandoc.Pandoc(blocks, doc.meta)
end
local function extract_title(doc)
local title = {}
local section
local filter = {
Header = function(el)
local f = {
Str = function(el)
if el.text:find("%(1%)") ~= nil then
section = "General Commands Manual"
elseif el.text:find("%(5%)") ~= nil then
section = "File Formats Manual"
end
table.insert(title, el)
end,
Inline = function(el)
table.insert(title, el)
end,
}
if el.level == 1 then
pandoc.walk_block(el, f)
return {} -- drop
end
return nil
end,
}
doc = walk_doc(doc, filter)
local to_inline = function(s)
local r = {}
for w in s:gmatch("%S+") do
table.insert(r, pandoc.Str(w))
table.insert(r, pandoc.Space())
end
table.remove(r, #r)
return r
end
if section ~= nil then
for _, e in ipairs({
pandoc.Space(),
pandoc.Str("rofi"),
pandoc.Space(),
pandoc.Str("|"),
table.unpack(to_inline(section)),
}) do
table.insert(title, e)
end
end
doc.meta = pandoc.Meta({
title = pandoc.MetaInlines(title),
})
return doc
end
local function decrement_heading(doc)
local filter = {
Header = function(el)
if el.level > 1 then
el.level = el.level - 1
return el
end
return nil
end,
}
doc = walk_doc(doc, filter)
return doc
end
local function code_in_strong(doc)
local filter = {
Code = function(el)
return pandoc.Strong(el.text)
end,
}
doc = walk_doc(doc, filter)
return doc
end
--- Run filtering function through whole document
--
-- * find argument definitions: paragraph starting with inline code (`-arg`)
-- * replace the paragraphs until the end of the definition with a DefinitionList
-- * extract metadata title from main heading
-- * decrement heading from 1 for better display
-- * convert inline code text to Strong as usual in man pages
function Pandoc(doc)
if PANDOC_VERSION >= pandoc.types.Version("2.17.0") then
-- 2.17 is required for topdown traversal
local defs = find_defs(doc)
doc = convert_defs(doc, defs)
end
doc = extract_title(doc)
doc = decrement_heading(doc)
doc = code_in_strong(doc)
return doc
end

View File

@@ -1,32 +1,61 @@
gomd2man = find_program('go-md2man', required: false) man_files = [
if gomd2man.found() 'rofi.1',
'rofi-sensible-terminal.1',
'rofi-theme-selector.1',
'rofi-actions.5',
'rofi-debugging.5',
'rofi-dmenu.5',
'rofi-keys.5',
'rofi-script.5',
'rofi-theme.5',
'rofi-thumbnails.5',
]
fs = import('fs')
pandoc = find_program('pandoc', required: false, version: '>=2.9')
if pandoc.found()
man_targets = [] man_targets = []
foreach f: [ cp_cmds = []
'rofi.1', foreach f: man_files
'rofi-theme-selector.1', section_number = f.split('.')[1]
'rofi-theme.5', install_dest = join_paths(get_option('prefix'), get_option('mandir'), 'man' + section_number)
'rofi-dmenu.5',
'rofi-debugging.5',
'rofi-keys.5',
'rofi-script.5',
'rofi-sensible-terminal.1'
]
man_targets += custom_target(f, man_targets += custom_target(f,
input: '.'.join([f, 'markdown']), input: ['.'.join([f, 'markdown']), 'man_filter.lua'],
output: f, output: f,
command: [ 'go-md2man', command: [ 'pandoc', '--standalone', '--to=man',
'-in', files('.'.join([f,'markdown'])), '--lua-filter', '@INPUT1@',
'-out', files(f) '-f', 'markdown-tex_math_dollars',
]) '@INPUT0@', '-o', '@OUTPUT@' ],
install: true,
install_dir: install_dest,
build_by_default: true,
)
endforeach endforeach
run_target('update-manpage', command: ['true'], depends: man_targets)
run_target('generate-manpage', command: ['true'], depends: man_targets)
else
man_missing = false
foreach f: man_files
if not fs.is_file(f)
man_missing = true
endif
endforeach
if man_missing
warning('Man files cannot be generated and not present in source directory, they will not be installed')
else
install_man(man_files)
endif
endif endif
doxy_conf = configuration_data() doxy_conf = configuration_data()
doxy_conf.set('PACKAGE', meson.project_name()) doxy_conf.set('PACKAGE', meson.project_name())
doxy_conf.set('VERSION', meson.project_version()) doxy_conf.set('VERSION', meson.project_version())
doxy_conf.set('abs_builddir', join_paths(meson.build_root(), meson.current_build_dir())) doxy_conf.set('abs_builddir', join_paths(meson.project_build_root(), meson.current_build_dir()))
doxy_conf.set('abs_top_srcdir', meson.source_root()) doxy_conf.set('abs_top_srcdir', meson.project_source_root())
doxyfile = configure_file( doxyfile = configure_file(
input: 'rofi.doxy.in', input: 'rofi.doxy.in',

View File

@@ -0,0 +1,89 @@
# rofi-actions(5)
## NAME
**rofi-actions** - Custom commands following interaction with rofi menus
## DESCRIPTION
**rofi** allows to set custom commands or scripts to be executed when some actions are performed in the menu, such as changing selection, accepting an entry or canceling.
This makes it possible for example to play sound effects or read aloud menu entries on selection.
## USAGE
Following is the list of rofi flags for specifying custom commands or scripts to execute on supported actions:
`-on-selection-changed` *cmd*
Command or script to run when the current selection changes. Selected text is forwarded to the command replacing the pattern *{entry}*.
`-on-entry-accepted` *cmd*
Command or script to run when a menu entry is accepted. Accepted text is forwarded to the command replacing the pattern *{entry}*.
`-on-mode-changed` *cmd*
Command or script to run when the menu mode (e.g. drun,window,ssh...) is changed.
`-on-menu-canceled` *cmd*
Command or script to run when the menu is canceled.
`-on-menu-error` *cmd*
Command or script to run when an error menu is shown (e.g. `rofi -e "error message"`). Error text is forwarded to the command replacing the pattern *{error}*.
`-on-screenshot-taken` *cmd*
Command or script to run when a screenshot of rofi is taken. Screenshot path is forwarded to the command replacing the pattern *{path}*.
### Example usage
Rofi command line:
```bash
rofi -on-selection-changed "/path/to/select.sh {entry}" \
-on-entry-accepted "/path/to/accept.sh {entry}" \
-on-menu-canceled "/path/to/exit.sh" \
-on-mode-changed "/path/to/change.sh" \
-on-menu-error "/path/to/error.sh {error}" \
-on-screenshot-taken "/path/to/camera.sh {path}" \
-show drun
```
Rofi config file:
```css
configuration {
on-selection-changed: "/path/to/select.sh {entry}";
on-entry-accepted: "/path/to/accept.sh {entry}";
on-menu-canceled: "/path/to/exit.sh";
on-mode-changed: "/path/to/change.sh";
on-menu-error: "/path/to/error.sh {error}";
on-screenshot-taken: "/path/to/camera.sh {path}";
}
```
### Play sound effects
Here's an example bash script that plays a sound effect using `aplay` when the current selection is changed:
```bash
#!/bin/bash
coproc aplay -q $HOME/Music/selecting_an_item.wav
```
The use of `coproc` for playing sounds is suggested, otherwise the rofi process will wait for sounds to end playback before exiting.
### Read aloud
Here's an example bash script that reads aloud currently selected entries using `espeak`:
```bash
#!/bin/bash
killall espeak
echo "selected: $@" | espeak
```

View File

@@ -1,4 +1,4 @@
# ROFI DEBUGGING 5 rofi debugging # rofi-debugging(5)
## NAME ## NAME
@@ -169,7 +169,7 @@ backtrace via `coredumpctl`.
## SEE ALSO ## SEE ALSO
rofi-sensible-terminal(1), dmenu(1), rofi-debugging(5), rofi-theme(5), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5),
rofi-script(5), rofi-keys(5),rofi-theme-selector(1) rofi-script(5), rofi-keys(5),rofi-theme-selector(1)
## AUTHOR ## AUTHOR

View File

@@ -1,365 +0,0 @@
.nh
.TH ROFI-DMENU 5 rofi-dmenu
.SH NAME
.PP
\fBrofi dmenu mode\fP - Rofi dmenu emulation
.SH DESCRIPTION
.PP
To integrate \fBrofi\fP into scripts as simple selection dialogs,
\fBrofi\fP supports emulating \fBdmenu(1)\fP (A dynamic menu for X11).
.PP
The website for \fB\fCdmenu\fR can be found here
\[la]http://tools.suckless.org/dmenu/\[ra]\&.
.PP
\fBrofi\fP does not aim to be 100% compatible with \fB\fCdmenu\fR\&. There are simply too
many flavors of \fB\fCdmenu\fR\&. The idea is that the basic usage command-line flags
are obeyed, theme-related flags are not. Besides, \fBrofi\fP offers some extended
features (like multi-select, highlighting, message bar, extra key bindings).
.SH BASIC CONCEPT
.PP
In \fB\fCdmenu\fR mode, \fBrofi\fP 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.
.PP
By default separation of rows is done on new lines, making it easy to pipe the
output a one application into \fBrofi\fP and the output of rofi into the next.
.SH USAGE
.PP
By launching \fBrofi\fP with the \fB\fC-dmenu\fR flag it will go into dmenu emulation
mode.
.PP
.RS
.nf
ls | rofi -dmenu
.fi
.RE
.SS DMENU DROP-IN REPLACEMENT
.PP
If \fB\fCargv[0]\fR (calling command) is dmenu, \fBrofi\fP will start in dmenu mode.
This way, it can be used as a drop-in replacement for dmenu. Just copy or
symlink \fBrofi\fP to dmenu in \fB\fC$PATH\fR\&.
.PP
.RS
.nf
ln -s /usr/bin/rofi /usr/bin/dmenu
.fi
.RE
.SS DMENU VS SCRIPT MODE
.PP
Script mode is used to extend \fBrofi\fP, dmenu mode is used to extend a script.
The two do share much of the same input format. Please see the
\fBrofi-script(5)\fP manpage for more information.
.SS DMENU SPECIFIC COMMANDLINE FLAGS
.PP
A lot of these options can also be modified by the script using special input.
See the \fBrofi-script(5)\fP manpage for more information about this syntax.
.PP
\fB\fC-sep\fR \fIseparator\fP
.PP
Separator for \fB\fCdmenu\fR\&. Example: To show a list of 'a' to 'e' with '|' as a
separator:
.PP
.RS
.nf
echo "a|b|c|d|e" | rofi -sep '|' -dmenu
.fi
.RE
.PP
\fB\fC-p\fR \fIprompt\fP
.PP
Specify the prompt to show in \fB\fCdmenu\fR mode. For example, select 'monkey',
a,b,c,d, or e.
.PP
.RS
.nf
echo "a|b|c|d|e" | rofi -sep '|' -dmenu -p "monkey"
.fi
.RE
.PP
Default: \fIdmenu\fP
.PP
\fB\fC-l\fR \fInumber of lines to show\fP
.PP
Maximum number of lines the menu may show before scrolling.
.PP
.RS
.nf
rofi -dmenu -l 25
.fi
.RE
.PP
Default: \fI15\fP
.PP
\fB\fC-i\fR
.PP
Makes \fB\fCdmenu\fR searches case-insensitive
.PP
\fB\fC-a\fR \fIX\fP
.PP
Active row, mark \fIX\fP as active. Where \fIX\fP 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:
.RS
.IP \(bu 2
A single row: '5'
.IP \(bu 2
A range of (last 3) rows: '-3:'
.IP \(bu 2
4 rows starting from row 7: '7:11' (or in legacy notation: '7-10')
.IP \(bu 2
A set of rows: '2,0,-9'
.IP \(bu 2
Or any combination: '5,-3:,7:11,2,0,-9'
.RE
.PP
\fB\fC-u\fR \fIX\fP
.PP
Urgent row, mark \fIX\fP as urgent. See \fB\fC-a\fR option for details.
.PP
\fB\fC-only-match\fR
.PP
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.
.PP
\fB\fC-no-custom\fR
.PP
Only return a selected item, do not allow custom entry.
This mode returns directly when no entries given.
.PP
\fB\fC-format\fR \fIformat\fP
.PP
Allows the output of dmenu to be customized (N is the total number of input
entries):
.RS
.IP \(bu 2
\&'s' selected string
.IP \(bu 2
\&'i' index (0 - (N-1))
.IP \(bu 2
\&'d' index (1 - N)
.IP \(bu 2
\&'q' quote string
.IP \(bu 2
\&'p' Selected string stripped from Pango markup (Needs to be a valid string)
.IP \(bu 2
\&'f' filter string (user input)
.IP \(bu 2
\&'F' quoted filter string (user input)
.RE
.PP
Default: 's'
.PP
\fB\fC-select\fR \fIstring\fP
.PP
Select first line that matches the given string
.PP
\fB\fC-mesg\fR \fIstring\fP
.PP
Add a message line below the filter entry box. Supports Pango markup. For more
information on supported markup, see
here
\[la]https://docs.gtk.org/Pango/pango_markup.html\[ra]
.PP
\fB\fC-dump\fR
.PP
Dump the filtered list to stdout and quit.
This can be used to get the list as \fBrofi\fP would filter it.
Use together with \fB\fC-filter\fR command.
.PP
\fB\fC-input\fR \fIfile\fP
.PP
Reads from \fIfile\fP instead of stdin.
.PP
\fB\fC-password\fR
.PP
Hide the input text. This should not be considered secure!
.PP
\fB\fC-markup-rows\fR
.PP
Tell \fBrofi\fP that DMenu input is Pango markup encoded, and should be rendered.
See here
\[la]https://developer.gnome.org/pygtk/stable/pango-markup-language.html\[ra]
for details about Pango markup.
.PP
\fB\fC-multi-select\fR
.PP
Allow multiple lines to be selected. Adds a small selection indicator to the
left of each entry.
.PP
\fB\fC-sync\fR
.PP
Force \fBrofi\fP mode to first read all data from stdin before showing the
selection window. This is original dmenu behavior.
.PP
Note: the default asynchronous mode will also be automatically disabled if used
with conflicting options,
such as \fB\fC-dump\fR, \fB\fC-only-match\fR or \fB\fC-auto-select\fR\&.
.PP
\fB\fC-window-title\fR \fItitle\fP
.PP
Set name used for the window title. Will be shown as Rofi - \fItitle\fP
.PP
\fB\fC-w\fR \fIwindowid\fP
.PP
Position \fBrofi\fP over the window with the given X11 window ID.
.PP
\fB\fC-keep-right\fR
.PP
Set ellipsize mode to start. So, the end of the string is visible.
.PP
\fB\fC-display-columns\fR
.PP
A comma seperated list of columns to show.
.PP
\fB\fC-display-column-separator\fR
.PP
The column separator. This is a regex.
.PP
\fIdefault\fP: '\\t'
.PP
\fB\fC-ballot-selected-str\fR \fIstring\fP
.PP
When multi-select is enabled, prefix this string when element is selected.
.PP
\fIdefault\fP: "☑ "
.PP
\fB\fC-ballot-unselected-str\fR \fIstring\fP
.PP
When multi-select is enabled, prefix this string when element is not selected.
.PP
\fIdefault\fP: "☐ "
.PP
\fB\fC-ellipsize-mode\fR (start|middle|end)
.PP
Set ellipsize mode on the listview.
.PP
\fIdefault\fP "end"
.SH PARSING ROW OPTIONS
.PP
Extra options for individual rows can be also set. See the \fBrofi-script(5)\fP
manpage for details; the syntax and supported features are identical.
.SH RETURN VALUE
.RS
.IP \(bu 2
\fB0\fP: Row has been selected accepted by user.
.IP \(bu 2
\fB1\fP: User cancelled the selection.
.IP \(bu 2
\fB10-28\fP: Row accepted by custom keybinding.
.RE
.SH SEE ALSO
.PP
rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5),
rofi-theme-selector(1), ascii(7)
.SH AUTHOR
.PP
Qball Cow qball@gmpclient.org
\[la]mailto:qball@gmpclient.org\[ra]
.PP
Rasmus Steinke rasi@xssn.at
\[la]mailto:rasi@xssn.at\[ra]
.PP
Morgane Glidic sardemff7+rofi@sardemff7.net
\[la]mailto:sardemff7+rofi@sardemff7.net\[ra]
.PP
Original code based on work by: Sean Pringle sean.pringle@gmail.com
\[la]mailto:sean.pringle@gmail.com\[ra]
.PP
For a full list of authors, check the AUTHORS file.

View File

@@ -1,4 +1,4 @@
# ROFI-DMENU 5 rofi-dmenu # rofi-dmenu(5)
## NAME ## NAME
@@ -159,7 +159,7 @@ Hide the input text. This should not be considered secure!
`-markup-rows` `-markup-rows`
Tell **rofi** that DMenu input is Pango markup encoded, and should be rendered. Tell **rofi** that DMenu input is Pango markup encoded, and should be rendered.
See [here](https://developer.gnome.org/pygtk/stable/pango-markup-language.html) See [here](https://docs.gtk.org/Pango/pango_markup.html)
for details about Pango markup. for details about Pango markup.
`-multi-select` `-multi-select`

View File

@@ -1,676 +0,0 @@
.nh
.TH ROFI-KEYS 5 rofi-keys
.SH NAME
.PP
\fBrofi keys\fP - Rofi Key and Mouse bindings
.SH DESCRIPTION
.PP
\fBrofi\fP supports overriding of any of it key and mouse binding.
.SH Setting binding
.PP
Bindings can be done on the commandline (-{bindingname}):
.PP
.RS
.nf
rofi -show run -kb-accept-entry 'Control+Shift+space'
.fi
.RE
.PP
or via the configuration file:
.PP
.RS
.nf
configuration {
kb-accept-entry: "Control+Shift+space";
}
.fi
.RE
.PP
The key can be set by its name (see above) or its keycode:
.PP
.RS
.nf
configuration {
kb-accept-entry: "Control+Shift+[65]";
}
.fi
.RE
.PP
An easy way to look up keycode is xev(1).
.PP
Multiple keys can be specified for an action as a comma separated list:
.PP
.RS
.nf
configuration {
kb-accept-entry: "Control+Shift+space,Return";
}
.fi
.RE
.PP
By Default \fBrofi\fP reacts on pressing, to act on the release of all keys
prepend the binding with \fB\fC!\fR:
.PP
.RS
.nf
configuration {
kb-accept-entry: "!Control+Shift+space,Return";
}
.fi
.RE
.SH Unsetting a binding
.PP
To unset a binding, pass an empty string.
.PP
.RS
.nf
configuration {
kb-clear-line: "";
}
.fi
.RE
.SH Keyboard Bindings
.SS \fBkb-primary-paste\fP:
.PP
Paste primary selection
.PP
\fBDefault\fP: Control+V,Shift+Insert
.SS \fBkb-secondary-paste\fP
.PP
Paste clipboard
.PP
\fBDefault\fP: Control+v,Insert
.SS \fBkb-secondary-copy\fP
.PP
Copy current selection to clipboard
.PP
\fBDefault\fP: Control+c
.SS \fBkb-clear-line\fP
.PP
Clear input line
.PP
\fBDefault\fP: Control+w
.SS \fBkb-move-front\fP
.PP
Beginning of line
.PP
\fBDefault\fP: Control+a
.SS \fBkb-move-end\fP
.PP
End of line
.PP
\fBDefault\fP: Control+e
.SS \fBkb-move-word-back\fP
.PP
Move back one word
.PP
\fBDefault\fP: Alt+b,Control+Left
.SS \fBkb-move-word-forward\fP
.PP
Move forward one word
.PP
\fBDefault\fP: Alt+f,Control+Right
.SS \fBkb-move-char-back\fP
.PP
Move back one char
.PP
\fBDefault\fP: Left,Control+b
.SS \fBkb-move-char-forward\fP
.PP
Move forward one char
.PP
\fBDefault\fP: Right,Control+f
.SS \fBkb-remove-word-back\fP
.PP
Delete previous word
.PP
\fBDefault\fP: Control+Alt+h,Control+BackSpace
.SS \fBkb-remove-word-forward\fP
.PP
Delete next word
.PP
\fBDefault\fP: Control+Alt+d
.SS \fBkb-remove-char-forward\fP
.PP
Delete next char
.PP
\fBDefault\fP: Delete,Control+d
.SS \fBkb-remove-char-back\fP
.PP
Delete previous char
.PP
\fBDefault\fP: BackSpace,Shift+BackSpace,Control+h
.SS \fBkb-remove-to-eol\fP
.PP
Delete till the end of line
.PP
\fBDefault\fP: Control+k
.SS \fBkb-remove-to-sol\fP
.PP
Delete till the start of line
.PP
\fBDefault\fP: Control+u
.SS \fBkb-accept-entry\fP
.PP
Accept entry
.PP
\fBDefault\fP: Control+j,Control+m,Return,KP_Enter
.SS \fBkb-accept-custom\fP
.PP
Use entered text as command (in ssh/run modes)
.PP
\fBDefault\fP: Control+Return
.SS \fBkb-accept-custom-alt\fP
.PP
Use entered text as command (in ssh/run modes)
.PP
\fBDefault\fP: Control+Shift+Return
.SS \fBkb-accept-alt\fP
.PP
Use alternate accept command.
.PP
\fBDefault\fP: Shift+Return
.SS \fBkb-delete-entry\fP
.PP
Delete entry from history
.PP
\fBDefault\fP: Shift+Delete
.SS \fBkb-mode-next\fP
.PP
Switch to the next mode.
.PP
\fBDefault\fP: Shift+Right,Control+Tab
.SS \fBkb-mode-previous\fP
.PP
Switch to the previous mode.
.PP
\fBDefault\fP: Shift+Left,Control+ISO_Left_Tab
.SS \fBkb-mode-complete\fP
.PP
Start completion for mode.
.PP
\fBDefault\fP: Control+l
.SS \fBkb-row-left\fP
.PP
Go to the previous column
.PP
\fBDefault\fP: Control+Page_Up
.SS \fBkb-row-right\fP
.PP
Go to the next column
.PP
\fBDefault\fP: Control+Page_Down
.SS \fBkb-row-up\fP
.PP
Select previous entry
.PP
\fBDefault\fP: Up,Control+p
.SS \fBkb-row-down\fP
.PP
Select next entry
.PP
\fBDefault\fP: Down,Control+n
.SS \fBkb-row-tab\fP
.PP
Go to next row, if one left, accept it, if no left next mode.
.PP
\fBDefault\fP:
.SS \fBkb-element-next\fP
.PP
Go to next row.
.PP
\fBDefault\fP: Tab
.SS \fBkb-element-prev\fP
.PP
Go to previous row.
.PP
\fBDefault\fP: ISO_Left_Tab
.SS \fBkb-page-prev\fP
.PP
Go to the previous page
.PP
\fBDefault\fP: Page_Up
.SS \fBkb-page-next\fP
.PP
Go to the next page
.PP
\fBDefault\fP: Page_Down
.SS \fBkb-row-first\fP
.PP
Go to the first entry
.PP
\fBDefault\fP: Home,KP_Home
.SS \fBkb-row-last\fP
.PP
Go to the last entry
.PP
\fBDefault\fP: End,KP_End
.SS \fBkb-row-select\fP
.PP
Set selected item as input text
.PP
\fBDefault\fP: Control+space
.SS \fBkb-screenshot\fP
.PP
Take a screenshot of the rofi window
.PP
\fBDefault\fP: Alt+S
.SS \fBkb-ellipsize\fP
.PP
Toggle between ellipsize modes for displayed data
.PP
\fBDefault\fP: Alt+period
.SS \fBkb-toggle-case-sensitivity\fP
.PP
Toggle case sensitivity
.PP
\fBDefault\fP: grave,dead_grave
.SS \fBkb-toggle-sort\fP
.PP
Toggle filtered menu sort
.PP
\fBDefault\fP: Alt+grave
.SS \fBkb-cancel\fP
.PP
Quit rofi
.PP
\fBDefault\fP: Escape,Control+g,Control+bracketleft
.SS \fBkb-custom-1\fP
.PP
Custom keybinding 1
.PP
\fBDefault\fP: Alt+1
.SS \fBkb-custom-2\fP
.PP
Custom keybinding 2
.PP
\fBDefault\fP: Alt+2
.SS \fBkb-custom-3\fP
.PP
Custom keybinding 3
.PP
\fBDefault\fP: Alt+3
.SS \fBkb-custom-4\fP
.PP
Custom keybinding 4
.PP
\fBDefault\fP: Alt+4
.SS \fBkb-custom-5\fP
.PP
Custom Keybinding 5
.PP
\fBDefault\fP: Alt+5
.SS \fBkb-custom-6\fP
.PP
Custom keybinding 6
.PP
\fBDefault\fP: Alt+6
.SS \fBkb-custom-7\fP
.PP
Custom Keybinding 7
.PP
\fBDefault\fP: Alt+7
.SS \fBkb-custom-8\fP
.PP
Custom keybinding 8
.PP
\fBDefault\fP: Alt+8
.SS \fBkb-custom-9\fP
.PP
Custom keybinding 9
.PP
\fBDefault\fP: Alt+9
.SS \fBkb-custom-10\fP
.PP
Custom keybinding 10
.PP
\fBDefault\fP: Alt+0
.SS \fBkb-custom-11\fP
.PP
Custom keybinding 11
.PP
\fBDefault\fP: Alt+exclam
.SS \fBkb-custom-12\fP
.PP
Custom keybinding 12
.PP
\fBDefault\fP: Alt+at
.SS \fBkb-custom-13\fP
.PP
Custom keybinding 13
.PP
\fBDefault\fP: Alt+numbersign
.SS \fBkb-custom-14\fP
.PP
Custom keybinding 14
.PP
\fBDefault\fP: Alt+dollar
.SS \fBkb-custom-15\fP
.PP
Custom keybinding 15
.PP
\fBDefault\fP: Alt+percent
.SS \fBkb-custom-16\fP
.PP
Custom keybinding 16
.PP
\fBDefault\fP: Alt+dead_circumflex
.SS \fBkb-custom-17\fP
.PP
Custom keybinding 17
.PP
\fBDefault\fP: Alt+ampersand
.SS \fBkb-custom-18\fP
.PP
Custom keybinding 18
.PP
\fBDefault\fP: Alt+asterisk
.SS \fBkb-custom-19\fP
.PP
Custom Keybinding 19
.PP
\fBDefault\fP: Alt+parenleft
.SS \fBkb-select-1\fP
.PP
Select row 1
.PP
\fBDefault\fP: Super+1
.SS \fBkb-select-2\fP
.PP
Select row 2
.PP
\fBDefault\fP: Super+2
.SS \fBkb-select-3\fP
.PP
Select row 3
.PP
\fBDefault\fP: Super+3
.SS \fBkb-select-4\fP
.PP
Select row 4
.PP
\fBDefault\fP: Super+4
.SS \fBkb-select-5\fP
.PP
Select row 5
.PP
\fBDefault\fP: Super+5
.SS \fBkb-select-6\fP
.PP
Select row 6
.PP
\fBDefault\fP: Super+6
.SS \fBkb-select-7\fP
.PP
Select row 7
.PP
\fBDefault\fP: Super+7
.SS \fBkb-select-8\fP
.PP
Select row 8
.PP
\fBDefault\fP: Super+8
.SS \fBkb-select-9\fP
.PP
Select row 9
.PP
\fBDefault\fP: Super+9
.SS \fBkb-select-10\fP
.PP
Select row 10
.PP
\fBDefault\fP: Super+0
.SS \fBkb-entry-history-up\fP
.PP
Go up in the entry history.
.PP
\fBDefault\fP: Control+Up
.SS \fBkb-entry-history-down\fP
.PP
Go down in the entry history.
.PP
\fBDefault\fP: Control+Down
.SH Mouse Bindings
.SS \fBml-row-left\fP
.PP
Go to the previous column
.PP
\fBDefault\fP: ScrollLeft
.SS \fBml-row-right\fP
.PP
Go to the next column
.PP
\fBDefault\fP: ScrollRight
.SS \fBml-row-up\fP
.PP
Select previous entry
.PP
\fBDefault\fP: ScrollUp
.SS \fBml-row-down\fP
.PP
Select next entry
.PP
\fBDefault\fP: ScrollDown
.SS \fBme-select-entry\fP
.PP
Select hovered row
.PP
\fBDefault\fP: MousePrimary
.SS \fBme-accept-entry\fP
.PP
Accept hovered row
.PP
\fBDefault\fP: MouseDPrimary
.SS \fBme-accept-custom\fP
.PP
Accept hovered row with custom action
.PP
\fBDefault\fP: Control+MouseDPrimary
.SH SEE ALSO
.PP
rofi(1), rofi-sensible-terminal(1), rofi-theme(5), rofi-script(5)
.SH AUTHOR
.PP
Qball Cow qball@gmpclient.org
\[la]mailto:qball@gmpclient.org\[ra]
.PP
Rasmus Steinke rasi@xssn.at
\[la]mailto:rasi@xssn.at\[ra]
.PP
Morgane Glidic sardemff7+rofi@sardemff7.net
\[la]mailto:sardemff7+rofi@sardemff7.net\[ra]
.PP
Original code based on work by: Sean Pringle sean.pringle@gmail.com
\[la]mailto:sean.pringle@gmail.com\[ra]
.PP
For a full list of authors, check the AUTHORS file.

View File

@@ -1,4 +1,4 @@
# ROFI-KEYS 5 rofi-keys # rofi-keys(5)
## NAME ## NAME
@@ -63,481 +63,513 @@ configuration {
## Keyboard Bindings ## Keyboard Bindings
### **kb-primary-paste**: `kb-primary-paste`
Paste primary selection Paste primary selection
**Default**: Control+V,Shift+Insert Default: Control+V,Shift+Insert
### **kb-secondary-paste** `kb-secondary-paste`
Paste clipboard Paste clipboard
**Default**: Control+v,Insert Default: Control+v,Insert
### **kb-secondary-copy** `kb-secondary-copy`
Copy current selection to clipboard Copy current selection to clipboard
**Default**: Control+c Default: Control+c
### **kb-clear-line** `kb-clear-line`
Clear input line Clear input line
**Default**: Control+w Default: Control+w
### **kb-move-front** `kb-move-front`
Beginning of line Beginning of line
**Default**: Control+a Default: Control+a
### **kb-move-end** `kb-move-end`
End of line End of line
**Default**: Control+e Default: Control+e
### **kb-move-word-back** `kb-move-word-back`
Move back one word Move back one word
**Default**: Alt+b,Control+Left Default: Alt+b,Control+Left
### **kb-move-word-forward** `kb-move-word-forward`
Move forward one word Move forward one word
**Default**: Alt+f,Control+Right Default: Alt+f,Control+Right
### **kb-move-char-back** `kb-move-char-back`
Move back one char Move back one char
**Default**: Left,Control+b Default: Left,Control+b
### **kb-move-char-forward** `kb-move-char-forward`
Move forward one char Move forward one char
**Default**: Right,Control+f Default: Right,Control+f
### **kb-remove-word-back** `kb-remove-word-back`
Delete previous word Delete previous word
**Default**: Control+Alt+h,Control+BackSpace Default: Control+Alt+h,Control+BackSpace
### **kb-remove-word-forward** `kb-remove-word-forward`
Delete next word Delete next word
**Default**: Control+Alt+d Default: Control+Alt+d
### **kb-remove-char-forward** `kb-remove-char-forward`
Delete next char Delete next char
**Default**: Delete,Control+d Default: Delete,Control+d
### **kb-remove-char-back** `kb-remove-char-back`
Delete previous char Delete previous char
**Default**: BackSpace,Shift+BackSpace,Control+h Default: BackSpace,Shift+BackSpace,Control+h
### **kb-remove-to-eol** `kb-remove-to-eol`
Delete till the end of line Delete till the end of line
**Default**: Control+k Default: Control+k
### **kb-remove-to-sol** `kb-remove-to-sol`
Delete till the start of line Delete till the start of line
**Default**: Control+u Default: Control+u
### **kb-accept-entry** `kb-accept-entry`
Accept entry Accept entry
**Default**: Control+j,Control+m,Return,KP\_Enter Default: Control+j,Control+m,Return,KP\_Enter
### **kb-accept-custom** `kb-accept-custom`
Use entered text as command (in ssh/run modes) Use entered text as command (in ssh/run modes)
**Default**: Control+Return Default: Control+Return
### **kb-accept-custom-alt** `kb-accept-custom-alt`
Use entered text as command (in ssh/run modes) Use entered text as command (in ssh/run modes)
**Default**: Control+Shift+Return Default: Control+Shift+Return
### **kb-accept-alt** `kb-accept-alt`
Use alternate accept command. Use alternate accept command.
**Default**: Shift+Return Default: Shift+Return
### **kb-delete-entry** `kb-delete-entry`
Delete entry from history Delete entry from history
**Default**: Shift+Delete Default: Shift+Delete
### **kb-mode-next** `kb-mode-next`
Switch to the next mode. Switch to the next mode.
**Default**: Shift+Right,Control+Tab Default: Shift+Right,Control+Tab
### **kb-mode-previous** `kb-mode-previous`
Switch to the previous mode. Switch to the previous mode.
**Default**: Shift+Left,Control+ISO\_Left\_Tab Default: Shift+Left,Control+ISO\_Left\_Tab
### **kb-mode-complete** `kb-mode-complete`
Start completion for mode. Start completion for mode.
**Default**: Control+l Default: Control+l
### **kb-row-left** `kb-row-left`
Go to the previous column Go to the previous column
**Default**: Control+Page\_Up Default: Control+Page\_Up
### **kb-row-right** `kb-row-right`
Go to the next column Go to the next column
**Default**: Control+Page\_Down Default: Control+Page\_Down
### **kb-row-up** `kb-row-up`
Select previous entry Select previous entry
**Default**: Up,Control+p Default: Up,Control+p
### **kb-row-down** `kb-row-down`
Select next entry Select next entry
**Default**: Down,Control+n Default: Down,Control+n
### **kb-row-tab** `kb-row-tab`
Go to next row, if one left, accept it, if no left next mode. Go to next row, if one left, accept it, if no left next mode.
**Default**: Default:
### **kb-element-next** `kb-element-next`
Go to next row. Go to next row.
**Default**: Tab Default: Tab
### **kb-element-prev** `kb-element-prev`
Go to previous row. Go to previous row.
**Default**: ISO\_Left\_Tab Default: ISO\_Left\_Tab
### **kb-page-prev** `kb-page-prev`
Go to the previous page Go to the previous page
**Default**: Page\_Up Default: Page\_Up
### **kb-page-next** `kb-page-next`
Go to the next page Go to the next page
**Default**: Page\_Down Default: Page\_Down
### **kb-row-first** `kb-row-first`
Go to the first entry Go to the first entry
**Default**: Home,KP\_Home Default: Home,KP\_Home
### **kb-row-last** `kb-row-last`
Go to the last entry Go to the last entry
**Default**: End,KP\_End Default: End,KP\_End
### **kb-row-select** `kb-row-select`
Set selected item as input text Set selected item as input text
**Default**: Control+space Default: Control+space
### **kb-screenshot** `kb-screenshot`
Take a screenshot of the rofi window Take a screenshot of the rofi window
**Default**: Alt+S Default: Alt+S
### **kb-ellipsize** `kb-ellipsize`
Toggle between ellipsize modes for displayed data Toggle between ellipsize modes for displayed data
**Default**: Alt+period Default: Alt+period
### **kb-toggle-case-sensitivity** `kb-toggle-case-sensitivity`
Toggle case sensitivity Toggle case sensitivity
**Default**: grave,dead\_grave Default: grave,dead\_grave
### **kb-toggle-sort** `kb-toggle-sort`
Toggle filtered menu sort Toggle filtered menu sort
**Default**: Alt+grave Default: Alt+grave
### **kb-cancel** `kb-cancel`
Quit rofi Quit rofi
**Default**: Escape,Control+g,Control+bracketleft Default: Escape,Control+g,Control+bracketleft
### **kb-custom-1** `kb-custom-1`
Custom keybinding 1 Custom keybinding 1
**Default**: Alt+1 Default: Alt+1
### **kb-custom-2** `kb-custom-2`
Custom keybinding 2 Custom keybinding 2
**Default**: Alt+2 Default: Alt+2
### **kb-custom-3** `kb-custom-3`
Custom keybinding 3 Custom keybinding 3
**Default**: Alt+3 Default: Alt+3
### **kb-custom-4** `kb-custom-4`
Custom keybinding 4 Custom keybinding 4
**Default**: Alt+4 Default: Alt+4
### **kb-custom-5** `kb-custom-5`
Custom Keybinding 5 Custom Keybinding 5
**Default**: Alt+5 Default: Alt+5
### **kb-custom-6** `kb-custom-6`
Custom keybinding 6 Custom keybinding 6
**Default**: Alt+6 Default: Alt+6
### **kb-custom-7** `kb-custom-7`
Custom Keybinding 7 Custom Keybinding 7
**Default**: Alt+7 Default: Alt+7
### **kb-custom-8** `kb-custom-8`
Custom keybinding 8 Custom keybinding 8
**Default**: Alt+8 Default: Alt+8
### **kb-custom-9** `kb-custom-9`
Custom keybinding 9 Custom keybinding 9
**Default**: Alt+9 Default: Alt+9
### **kb-custom-10** `kb-custom-10`
Custom keybinding 10 Custom keybinding 10
**Default**: Alt+0 Default: Alt+0
### **kb-custom-11** `kb-custom-11`
Custom keybinding 11 Custom keybinding 11
**Default**: Alt+exclam Default: Alt+exclam
### **kb-custom-12** `kb-custom-12`
Custom keybinding 12 Custom keybinding 12
**Default**: Alt+at Default: Alt+at
### **kb-custom-13** `kb-custom-13`
Custom keybinding 13 Custom keybinding 13
**Default**: Alt+numbersign Default: Alt+numbersign
### **kb-custom-14** `kb-custom-14`
Custom keybinding 14 Custom keybinding 14
**Default**: Alt+dollar Default: Alt+dollar
### **kb-custom-15** `kb-custom-15`
Custom keybinding 15 Custom keybinding 15
**Default**: Alt+percent Default: Alt+percent
### **kb-custom-16** `kb-custom-16`
Custom keybinding 16 Custom keybinding 16
**Default**: Alt+dead\_circumflex Default: Alt+dead\_circumflex
### **kb-custom-17** `kb-custom-17`
Custom keybinding 17 Custom keybinding 17
**Default**: Alt+ampersand Default: Alt+ampersand
### **kb-custom-18** `kb-custom-18`
Custom keybinding 18 Custom keybinding 18
**Default**: Alt+asterisk Default: Alt+asterisk
### **kb-custom-19** `kb-custom-19`
Custom Keybinding 19 Custom Keybinding 19
**Default**: Alt+parenleft Default: Alt+parenleft
### **kb-select-1** `kb-select-1`
Select row 1 Select row 1
**Default**: Super+1 Default: Super+1
### **kb-select-2** `kb-select-2`
Select row 2 Select row 2
**Default**: Super+2 Default: Super+2
### **kb-select-3** `kb-select-3`
Select row 3 Select row 3
**Default**: Super+3 Default: Super+3
### **kb-select-4** `kb-select-4`
Select row 4 Select row 4
**Default**: Super+4 Default: Super+4
### **kb-select-5** `kb-select-5`
Select row 5 Select row 5
**Default**: Super+5 Default: Super+5
### **kb-select-6** `kb-select-6`
Select row 6 Select row 6
**Default**: Super+6 Default: Super+6
### **kb-select-7** `kb-select-7`
Select row 7 Select row 7
**Default**: Super+7 Default: Super+7
### **kb-select-8** `kb-select-8`
Select row 8 Select row 8
**Default**: Super+8 Default: Super+8
### **kb-select-9** `kb-select-9`
Select row 9 Select row 9
**Default**: Super+9 Default: Super+9
### **kb-select-10** `kb-select-10`
Select row 10 Select row 10
**Default**: Super+0 Default: Super+0
### **kb-entry-history-up** `kb-entry-history-up`
Go up in the entry history. Go up in the entry history.
**Default**: Control+Up Default: Control+Up
### **kb-entry-history-down** `kb-entry-history-down`
Go down in the entry history. Go down in the entry history.
**Default**: Control+Down Default: Control+Down
`kb-matcher-up`
Select the next matcher.
Default: Super+equal
`kb-matcher-down`
Select the previous matcher.
Default: Super+minus
## Mouse Bindings ## Mouse Bindings
### **ml-row-left** `ml-row-left`
Go to the previous column Go to the previous column
**Default**: ScrollLeft Default: ScrollLeft
### **ml-row-right** `ml-row-right`
Go to the next column Go to the next column
**Default**: ScrollRight Default: ScrollRight
### **ml-row-up** `ml-row-up`
Select previous entry Select previous entry
**Default**: ScrollUp Default: ScrollUp
### **ml-row-down** `ml-row-down`
Select next entry Select next entry
**Default**: ScrollDown Default: ScrollDown
### **me-select-entry** `me-select-entry`
Select hovered row Select hovered row
**Default**: MousePrimary Default: MousePrimary
### **me-accept-entry** `me-accept-entry`
Accept hovered row Accept hovered row
**Default**: MouseDPrimary Default: MouseDPrimary
### **me-accept-custom** `me-accept-custom`
Accept hovered row with custom action Accept hovered row with custom action
**Default**: Control+MouseDPrimary Default: Control+MouseDPrimary
## Mouse key bindings
The following mouse buttons can be bound:
* `Primary`: Primary (Left) mouse button click.
* `Secondary`: Secondary (Right) mouse button click.
* `Middle`: Middle mouse button click.
* `Forward`: The forward mouse button.
* `Back`: The back mouse button.
* `ExtraN`: The N'the mouse button. (Depending on mouse support).
The Identifier is constructed as follow:
`Mouse<D><Button>`
* `D` indicates optional Double press.
* `Button` is the button name.
So `MouseDPrimary` is Primary (`Left`) mouse button double click.
## SEE ALSO ## SEE ALSO

View File

@@ -1,277 +0,0 @@
.nh
.TH ROFI-SCRIPT 5 rofi-script
.SH NAME
.PP
\fBrofi script mode\fP - Rofi format for scriptable mode.
.SH DESCRIPTION
.PP
\fBrofi\fP 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.
.SH USAGE
.PP
To specify a script mode, set a mode with the following syntax:
"{name}:{executable}"
.PP
For example:
.PP
.RS
.nf
rofi -show fb -modes "fb:file_browser.sh"
.fi
.RE
.PP
The name should be unique.
.SH API
.PP
Rofi calls the executable without arguments on startup. This should generate a
list of options, separated by a newline (\fB\fC\\n\fR) (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.
.PP
A simple script would be:
.PP
.RS
.nf
#!/usr/bin/env bash
if [ x"$@" = x"quit" ]
then
exit 0
fi
echo "reload"
echo "quit"
.fi
.RE
.PP
This shows two entries, reload and quit. When the quit entry is selected, rofi
closes.
.SH Environment
.PP
Rofi sets the following environment variable when executing the script:
.SS \fB\fCROFI_RETV\fR
.PP
An integer number with the current state:
.RS
.IP \(bu 2
\fB0\fP: Initial call of script.
.IP \(bu 2
\fB1\fP: Selected an entry.
.IP \(bu 2
\fB2\fP: Selected a custom entry.
.IP \(bu 2
\fB10-28\fP: Custom keybinding 1-19 ( need to be explicitly enabled by script ).
.RE
.SS \fB\fCROFI_INFO\fR
.PP
Environment get set when selected entry get set with the property value of the
'info' row option, if set.
.SS \fB\fCROFI_DATA\fR
.PP
Environment get set when script sets \fB\fCdata\fR option in header.
.SH Passing mode options
.PP
Extra options, like setting the prompt, can be set by the script. Extra options
are lines that start with a NULL character (\fB\fC\\0\fR) followed by a key, separator
(\fB\fC\\x1f\fR) and value.
.PP
For example to set the prompt:
.PP
.RS
.nf
echo -en "\\0prompt\\x1fChange prompt\\n"
.fi
.RE
.PP
The following extra options exists:
.RS
.IP \(bu 2
\fBprompt\fP: Update the prompt text.
.IP \(bu 2
\fBmessage\fP: Update the message text.
.IP \(bu 2
\fBmarkup-rows\fP: If 'true' renders markup in the row.
.IP \(bu 2
\fBurgent\fP: Mark rows as urgent. (for syntax see the urgent option in
dmenu mode)
.IP \(bu 2
\fBactive\fP: Mark rows as active. (for syntax see the active option in
dmenu mode)
.IP \(bu 2
\fBdelim\fP: 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.
.IP \(bu 2
\fBno-custom\fP: If set to 'true'; only accept listed entries, ignore custom
input.
.IP \(bu 2
\fBuse-hot-keys\fP: If set to true, it enabled the Custom keybindings for
script. Warning this breaks the normal rofi flow.
.IP \(bu 2
\fBkeep-selection\fP: If set, the selection is not moved to the first entry,
but the current position is maintained. The filter is cleared.
.IP \(bu 2
\fBnew-selection\fP: If \fB\fCkeep-selection\fR is set, this allows you to override
the selected entry (absolute position).
.IP \(bu 2
\fBdata\fP: Passed data to the next execution of the script via
\fBROFI_DATA\fP\&.
.IP \(bu 2
\fBtheme\fP: Small theme snippet to f.e. change the background color of
a widget.
.RE
.PP
The \fBtheme\fP 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.
.SH Parsing row options
.PP
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.
.PP
For example:
.PP
.RS
.nf
echo -en "aap\\0icon\\x1ffolder\\n"
.fi
.RE
.PP
The following options are supported:
.RS
.IP \(bu 2
\fBicon\fP: Set the icon for that row.
.IP \(bu 2
\fBdisplay\fP: Replace the displayed string. (Original string will still be used for filtering)
.IP \(bu 2
\fBmeta\fP: Specify invisible search terms used for filtering.
.IP \(bu 2
\fBnonselectable\fP: If true the row cannot activated.
.IP \(bu 2
\fBinfo\fP: Info that, on selection, gets placed in the \fB\fCROFI_INFO\fR
environment variable. This entry does not get searched for filtering.
.IP \(bu 2
\fBurgent\fP: Set urgent flag on entry (true/false)
.IP \(bu 2
\fBactive\fP: Set active flag on entry (true/false)
.RE
.PP
multiple entries can be passed using the \fB\fC\\x1f\fR separator.
.PP
.RS
.nf
echo -en "aap\\0icon\\x1ffolder\\x1finfo\\x1ftest\\n"
.fi
.RE
.SH Executing external program
.PP
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).
.PP
In bash the best way to do this is using \fB\fCcoproc\fR\&.
.PP
.RS
.nf
coproc ( myApp > /dev/null 2>&1 )
.fi
.RE
.SH DASH shell
.PP
If you use the \fB\fCdash\fR shell for your script, take special care with how dash
handles escaped values for the separators. See issue #1201 on github.
.SH Script locations
.PP
To specify a script there are the following options:
.RS
.IP \(bu 2
Specify an absolute path to the script.
.IP \(bu 2
The script is executable and located in your $PATH
.RE
.PP
Scripts located in the following location are loaded on startup:
.RS
.IP \(bu 2
The script is in \fB\fC$XDG_CONFIG_PATH/rofi/scripts/\fR, this is usually
\fB\fC~/.config/rofi/scripts/\fR\&.
.RE
.SH SEE ALSO
.PP
rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5),
rofi-theme-selector(1)
.SH AUTHOR
.PP
Qball Cow qball@gmpclient.org
\[la]mailto:qball@gmpclient.org\[ra]
.PP
Rasmus Steinke rasi@xssn.at
\[la]mailto:rasi@xssn.at\[ra]
.PP
Morgane Glidic sardemff7+rofi@sardemff7.net
\[la]mailto:sardemff7+rofi@sardemff7.net\[ra]
.PP
Original code based on work by: Sean Pringle sean.pringle@gmail.com
\[la]mailto:sean.pringle@gmail.com\[ra]
.PP
For a full list of authors, check the AUTHORS file.

View File

@@ -1,4 +1,4 @@
# ROFI-SCRIPT 5 rofi-script # rofi-script(5)
## NAME ## NAME
@@ -59,6 +59,7 @@ An integer number with the current state:
- **0**: Initial call of script. - **0**: Initial call of script.
- **1**: Selected an entry. - **1**: Selected an entry.
- **2**: Selected a custom entry. - **2**: Selected a custom entry.
- **3**: Deleted an entry.
- **10-28**: Custom keybinding 1-19 ( need to be explicitly enabled by script ). - **10-28**: Custom keybinding 1-19 ( need to be explicitly enabled by script ).
### `ROFI_INFO` ### `ROFI_INFO`
@@ -109,6 +110,8 @@ The following extra options exists:
- **keep-selection**: If set, the selection is not moved to the first entry, - **keep-selection**: If set, the selection is not moved to the first entry,
but the current position is maintained. The filter is cleared. but the current position is maintained. The filter is cleared.
- **keep-filter**: If set, the filter is not cleared.
- **new-selection**: If `keep-selection` is set, this allows you to override - **new-selection**: If `keep-selection` is set, this allows you to override
the selected entry (absolute position). the selected entry (absolute position).
@@ -143,6 +146,8 @@ The following options are supported:
- **nonselectable**: If true the row cannot activated. - **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` - **info**: Info that, on selection, gets placed in the `ROFI_INFO`
environment variable. This entry does not get searched for filtering. environment variable. This entry does not get searched for filtering.
@@ -180,11 +185,20 @@ To specify a script there are the following options:
- Specify an absolute path to the script. - Specify an absolute path to the script.
- The script is executable and located in your $PATH - The script is executable and located in your $PATH
Scripts located in the following location are loaded on startup: Scripts located in the following location are **loaded** on startup
and can be directly launched based on the filename (without extension):
- The script is in `$XDG_CONFIG_PATH/rofi/scripts/`, this is usually - The script is in `$XDG_CONFIG_HOME/rofi/scripts/`, this is usually
`~/.config/rofi/scripts/`. `~/.config/rofi/scripts/`.
If you have a script 'mymode.sh' in this folder you can open it using:
```bash
rofi -show mymode
```
See `rofi -h` output for a list of detected scripts.
## SEE ALSO ## SEE ALSO
rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5),

View File

@@ -1,73 +0,0 @@
.nh
.TH rofi-sensible-terminal 1 rofi-sensible-terminal
.SH NAME
.PP
\fBrofi-sensible-terminal\fP - launches $TERMINAL with fallbacks
.SH SYNOPSIS
.PP
rofi-sensible-terminal [arguments]
.SH DESCRIPTION
.PP
rofi-sensible-terminal is invoked in the rofi default config to start a terminal. This
wrapper script is necessary since there is no distribution-independent terminal launcher
(but for example Debian has x-terminal-emulator). Distribution packagers are responsible for
shipping this script in a way which is appropriate for the distribution.
.PP
It tries to start one of the following (in that order):
.RS
.IP \(bu 2
\fB\fC$TERMINAL\fR (this is a non-standard variable)
.IP \(bu 2
x-terminal-emulator
.IP \(bu 2
urxvt
.IP \(bu 2
rxvt
.IP \(bu 2
st
.IP \(bu 2
terminology
.IP \(bu 2
qterminal
.IP \(bu 2
Eterm
.IP \(bu 2
aterm
.IP \(bu 2
uxterm
.IP \(bu 2
xterm
.IP \(bu 2
roxterm
.IP \(bu 2
xfce4-terminal.wrapper
.IP \(bu 2
mate-terminal
.IP \(bu 2
lxterminal
.IP \(bu 2
konsole
.IP \(bu 2
alacritty
.IP \(bu 2
kitty
.IP \(bu 2
wezterm
.RE
.SH SEE ALSO
.PP
rofi(1)
.SH AUTHORS
.PP
Dave Davenport and contributors
.PP
Copied script from i3:
Michael Stapelberg and contributors

View File

@@ -1,4 +1,4 @@
# rofi-sensible-terminal 1 rofi-sensible-terminal # rofi-sensible-terminal(1)
## NAME ## NAME
@@ -36,6 +36,7 @@ It tries to start one of the following (in that order):
* alacritty * alacritty
* kitty * kitty
* wezterm * wezterm
* foot
## SEE ALSO ## SEE ALSO

View File

@@ -1,46 +0,0 @@
.nh
.TH rofi-theme-selector 1 rofi-theme-selector
.SH NAME
.PP
\fBrofi-theme-selector\fP - Preview and apply themes for \fBrofi\fP
.SH DESCRIPTION
.PP
\fBrofi-theme-selector\fP is a bash/rofi script to preview and apply themes for
\fBrofi\fP\&. It's part of any installation of \fBrofi\fP\&.
.SH USAGE
.SS Running rofi-theme-selector
.PP
\fBrofi-theme-selector\fP shows a list of all available themes in a \fBrofi\fP
window. It lets you preview each theme with the Enter key and apply the theme
to your \fBrofi\fP configuration file with Alt+a.
.SH Theme directories
.PP
\fBrofi-theme-selector\fP searches the following directories for themes:
.RS
.IP \(bu 2
${PREFIX}/share/rofi/themes
.IP \(bu 2
$XDG_CONFIG_HOME/rofi/themes
.IP \(bu 2
$XDG_DATA_HOME/share/rofi/themes
.RE
.PP
${PREFIX} reflects the install location of rofi. In most cases this will be
"/usr".
$XDG_CONFIG_HOME is normally unset. Default path is "$HOME/.config".
$XDG_DATA_HOME is normally unset. Default path is "$HOME/.local/share".
.SH SEE ALSO
.PP
rofi(1)
.SH AUTHORS
.PP
Qball Cow qball@gmpclient.org
Rasmus Steinke rasi@xssn.at

View File

@@ -1,4 +1,4 @@
# rofi-theme-selector 1 rofi-theme-selector # rofi-theme-selector(1)
## NAME ## NAME

View File

@@ -1,4 +1,4 @@
# ROFI-THEME 5 rofi-theme # rofi-theme(5)
## NAME ## NAME
@@ -132,18 +132,18 @@ element-text {
└─────────────────────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────────────────────┘
``` ```
We can also specify the color and width of the cursor. You could, for example, We can also customize the cursor's color, width, and choose to hide it when the input box is empty. You could, for example, create a crimson block cursor that only appears when text is entered, like this:
create a crimson block cursor like this:
```css ```css
entry { entry {
cursor-color: rgb(220,20,60); cursor-color: rgb(220,20,60);
cursor-width: 8px; cursor-width: 8px;
hide-cursor-on-empty: true;
} }
``` ```
By default, the `cursor-color` will be the same as the `text-color`. The By default, the `cursor-color` will be the same as the `text-color`. The
`cursor-width` will always default to 2 pixels. `cursor-width` will always default to 2 pixels and `hide-cursor-on-empty` is set to false.
If you want to see the complete theme, including the modification you can run: If you want to see the complete theme, including the modification you can run:
@@ -195,9 +195,9 @@ newlines format are supported. But unix is preferred.
C and C++ file comments are supported. C and C++ file comments are supported.
- Anything after `// ` and before a newline is considered a comment. - Anything after `//` and before a newline is considered a comment.
- Everything between `/*` and `*/` is a comment, this comment can span - Everything between `/*` and `*/` is a comment, this comment can span
multiple lines. multiple lines.
Comments can be nested and the C comments can be inline. Comments can be nested and the C comments can be inline.
@@ -443,17 +443,17 @@ dynamic: false;
**rofi** support a limited set of background-image formats. **rofi** support a limited set of background-image formats.
- Format: url("path to image"); - Format: url("path to image");
- Format: url("path to image", scale); - Format: url("path to image", scale);
where scale is: none, both, width, height where scale is: none, both, width, height
- Format: linear-gradient(stop color,stop1, color, stop2 color, ...); - Format: linear-gradient(stop color,stop1, color, stop2 color, ...);
- Format: linear-gradient(to direction, stop color,stop1, color, stop2 color, - Format: linear-gradient(to direction, stop color,stop1, color, stop2 color,
...); where direction is: top,left,right,bottom. ...); where direction is: top,left,right,bottom.
- Format: linear-gradient(angle, stop color,stop1, color, stop2 color, ...); - Format: linear-gradient(angle, stop color,stop1, color, stop2 color, ...);
Angle in deg,rad,grad (as used in color). Angle in deg,rad,grad (as used in color).
Where the `path` is a string, and `stop` color is of type color. Where the `path` is a string, and `stop` color is of type color.
@@ -463,42 +463,42 @@ Where the `path` is a string, and `stop` color is of type color.
**rofi** supports the color formats as specified in the CSS standard (1,2,3 and **rofi** supports the color formats as specified in the CSS standard (1,2,3 and
some of CSS 4) some of CSS 4)
- Format: `#{HEX}{3}` (rgb) - Format: `#{HEX}{3}` (rgb)
- Format: `#{HEX}{4}` (rgba) - Format: `#{HEX}{4}` (rgba)
- Format: `#{HEX}{6}` (rrggbb) - Format: `#{HEX}{6}` (rrggbb)
- Format: `#{HEX}{8}` (rrggbbaa) - Format: `#{HEX}{8}` (rrggbbaa)
- Format: `rgb[a]({INTEGER},{INTEGER},{INTEGER}[, {PERCENTAGE}])` - Format: `rgb[a]({INTEGER},{INTEGER},{INTEGER}[, {PERCENTAGE}])`
- Format: `rgb[a]({INTEGER}%,{INTEGER}%,{INTEGER}%[, {PERCENTAGE}])` - Format: `rgb[a]({INTEGER}%,{INTEGER}%,{INTEGER}%[, {PERCENTAGE}])`
- Format: `hsl[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])` - Format: `hsl[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])`
- Format: `hwb[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])` - Format: `hwb[a]( {ANGLE}, {PERCENTAGE}, {PERCENTAGE} [, {PERCENTAGE}])`
- Format: `cmyk( {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE} [, - Format: `cmyk( {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE} [,
{PERCENTAGE} ])` {PERCENTAGE} ])`
- Format: `{named-color} [ / {PERCENTAGE} ]` - Format: `{named-color} [ / {PERCENTAGE} ]`
The white-space format proposed in CSS4 is also supported. The white-space format proposed in CSS4 is also supported.
The different values are: The different values are:
- `{HEX}` is a hexadecimal number ('0-9a-f' case insensitive). - `{HEX}` is a hexadecimal number ('0-9a-f' case insensitive).
- `{INTEGER}` value can be between 0 and 255 or 0-100 when representing - `{INTEGER}` value can be between 0 and 255 or 0-100 when representing
percentage. percentage.
- `{ANGLE}` is the angle on the color wheel, can be in `deg`, `rad`, `grad` - `{ANGLE}` is the angle on the color wheel, can be in `deg`, `rad`, `grad`
or `turn`. When no unit is specified, degrees is assumed. or `turn`. When no unit is specified, degrees is assumed.
- `{PERCENTAGE}` can be between 0-1.0, or 0%-100% - `{PERCENTAGE}` can be between 0-1.0, or 0%-100%
- `{named-color}` is one of the following colors: - `{named-color}` is one of the following colors:
AliceBlue, AntiqueWhite, Aqua, Aquamarine, Azure, Beige, Bisque, Black, AliceBlue, AntiqueWhite, Aqua, Aquamarine, Azure, Beige, Bisque, Black,
BlanchedAlmond, Blue, BlueViolet, Brown, BurlyWood, CadetBlue, Chartreuse, BlanchedAlmond, Blue, BlueViolet, Brown, BurlyWood, CadetBlue, Chartreuse,
@@ -532,6 +532,7 @@ background-color: #FF0000;
border-color: rgba(0,0,1, 0.5); border-color: rgba(0,0,1, 0.5);
text-color: SeaGreen; text-color: SeaGreen;
``` ```
or or
```css ```css
@@ -567,6 +568,7 @@ upsizing or wrapping. This will be re-enabled once fixed:
Indicates how a line should be drawn. Indicates how a line should be drawn.
It currently supports: It currently supports:
- `dash`: a dashed line, where the gap is the same width as the dash - `dash`: a dashed line, where the gap is the same width as the dash
- `solid`: a solid line - `solid`: a solid line
@@ -593,6 +595,7 @@ For example:
```css ```css
padding: 10%; padding: 10%;
``` ```
On a full-HD (1920x1080) monitor, it defines a padding of 192 pixels on the left 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. and right side and 108 pixels on the top and bottom.
@@ -617,9 +620,9 @@ It supports the following operations:
- `modulo` : Modulo - `modulo` : Modulo
- `min` : Minimum of lvalue or rvalue; - `min` : Minimum of lvalue or rvalue;
- `max` : Maximum of lvalue or rvalue; - `max` : Maximum of lvalue or rvalue;
- `floor` : Round down lvalue to the next multiple of rvalue - `floor` : Round down lvalue to the next multiple of rvalue
- `ceil` : Round up 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 - `round` : Round lvalue to the next multiple of rvalue
It uses the C precedence ordering. It uses the C precedence ordering.
@@ -642,24 +645,24 @@ The different number of fields in the formats are parsed like:
### Border ### Border
- Format: `{Integer}` - Format: `{Integer}`
- Format: `{Distance}` - Format: `{Distance}`
- Format: `{Distance} {Distance}` - Format: `{Distance} {Distance}`
- Format: `{Distance} {Distance} {Distance}` - Format: `{Distance} {Distance} {Distance}`
- Format: `{Distance} {Distance} {Distance} {Distance}` - Format: `{Distance} {Distance} {Distance} {Distance}`
- Format: `{Distance} {Line style}` - Format: `{Distance} {Line style}`
- Format: `{Distance} {Line style} {Distance} {Line style}` - Format: `{Distance} {Line style} {Distance} {Line style}`
- Format: `{Distance} {Line style} {Distance} {Line style} {Distance} {Line - Format: `{Distance} {Line style} {Distance} {Line style} {Distance} {Line
style}` style}`
- Format: `{Distance} {Line style} {Distance} {Line style} {Distance} {Line - Format: `{Distance} {Line style} {Distance} {Line style} {Distance} {Line
style} {Distance} {Line style}` style} {Distance} {Line style}`
Borders are identical to padding, except that each distance field has a line Borders are identical to padding, except that each distance field has a line
@@ -838,50 +841,50 @@ element selected {
The default widgets available in **rofi** and the default hierarchic: The default widgets available in **rofi** and the default hierarchic:
- `window` - `window`
- `overlay`: the overlay widget. - `overlay`: the overlay widget.
- `mainbox`: The mainbox box. - `mainbox`: The mainbox box.
- `inputbar`: The input bar box. - `inputbar`: The input bar box.
- `box`: the horizontal @box packing the widgets - `box`: the horizontal @box packing the widgets
- `case-indicator`: the case/sort indicator @textbox - `case-indicator`: the case/sort indicator @textbox
- `prompt`: the prompt @textbox - `prompt`: the prompt @textbox
- `entry`: the main entry @textbox - `entry`: the main entry @textbox
- `num-rows`: Shows the total number of rows. - `num-rows`: Shows the total number of rows.
- `num-filtered-rows`: Shows the total number of rows after - `num-filtered-rows`: Shows the total number of rows after
filtering. filtering.
- `textbox-current-entry`: Shows the text of the currently selected - `textbox-current-entry`: Shows the text of the currently selected
entry. entry.
- `icon-current-entry`: Shows the icon of the currently selected - `icon-current-entry`: Shows the icon of the currently selected
entry. entry.
- `listview`: The listview. - `listview`: The listview.
- `scrollbar`: the listview scrollbar - `scrollbar`: the listview scrollbar
- `element`: a box in the listview holding the entries - `element`: a box in the listview holding the entries
- `element-icon`: the widget in the listview's entry showing the - `element-icon`: the widget in the listview's entry showing the
(optional) icon (optional) icon
- `element-index`: the widget in the listview's entry - `element-index`: the widget in the listview's entry
keybindable index (1,2,3..0) keybindable index (1,2,3..0)
- `element-text`: the widget in the listview's entry showing the - `element-text`: the widget in the listview's entry showing the
text. text.
- `mode-switcher`: the main horizontal @box packing the buttons. - `mode-switcher`: the main horizontal @box packing the buttons.
- `button`: the buttons @textbox for each mode - `button`: the buttons @textbox for each mode
- `message`: The container holding the textbox. - `message`: The container holding the textbox.
- `textbox`: the message textbox - `textbox`: the message textbox
Note that these path names match the default theme. Themes that provide a Note that these path names match the default theme. Themes that provide a
custom layout will have different elements, and structure. custom layout will have different elements, and structure.
@@ -896,22 +899,28 @@ These are appended after the name or class of the widget.
#### Example #### Example
`button selected.normal { }` ```
button selected.normal { }
`element selected.urgent { }` element selected.urgent { }
```
Currently only the entrybox and scrollbar have states: Currently only the entrybox and scrollbar have states:
#### Entrybox #### Entrybox
`{visible modifier}.{state}` ```
{visible modifier}.{state}
```
Where `visible modifier` can be: Where `visible modifier` can be:
- normal: no modification - normal: no modification
- selected: the entry is selected/highlighted by user - selected: the entry is selected/highlighted by user
- alternate: the entry is at an alternating row (uneven row) - alternate: the entry is at an alternating row (uneven row)
Where `state` is: Where `state` is:
- normal: no modification - normal: no modification
- urgent: this entry is marked urgent - urgent: this entry is marked urgent
- active: this entry is marked active - active: this entry is marked active
@@ -940,60 +949,65 @@ This allows the colors used for drawing the handle to be set independently.
The following properties are currently supported: The following properties are currently supported:
### all widgets ### all widgets
- **enabled**: enable/disable rendering of the widget - **enabled**: enable/disable rendering of the widget
- **padding**: padding - **padding**: padding
Padding on the inside of the widget Padding on the inside of the widget
- **margin**: padding - **margin**: padding
Margin on the outside of the widget Margin on the outside of the widget
- **border**: border - **border**: border
Border around the widget (between padding and margin)/ Border around the widget (between padding and margin)/
- **border-radius**: padding - **border-radius**: padding
Sets a radius on the corners of the borders. Sets a radius on the corners of the borders.
- border-aa: boolean
Disable aliasing on the border line. Disabling fixes some drawing issues because of nvidia broken driver workaround.
- **background-color**: color - border-disable-nvidia-workaround: boolean
Disable work-around for nvidia driver breaking.
- **background-color**: color
Background color Background color
- **background-image**: image - **background-image**: image
Background image Background image
- **border-color**: color - **border-color**: color
Color of the border Color of the border
- **cursor**: cursor - **cursor**: cursor
Type of mouse cursor that is set when the mouse pointer is hovered over the Type of mouse cursor that is set when the mouse pointer is hovered over the
widget. widget.
### window ### window
- **font**: string - **font**: string
The font used in the window The font used in the window
- **transparency**: string - **transparency**: string
Indicating if transparency should be used and what type: Indicating if transparency should be used and what type:
- **real** - True transparency. Only works with a compositor. - **real** - True transparency. Only works with a compositor.
- **background** - Take a screenshot of the background image and use that. - **background** - Take a screenshot of the background image and use that.
- **screenshot** - Take a screenshot of the screen and use that. - **screenshot** - Take a screenshot of the screen and use that.
- **Path** to png file - Use an image. - **Path** to png file - Use an image.
- **location**: position - **location**: position
The place of the anchor on the monitor The place of the anchor on the monitor
- **anchor**: anchor - **anchor**: anchor
The anchor position on the window The anchor position on the window
- **fullscreen**: boolean Window is fullscreen. - **fullscreen**: boolean Window is fullscreen.
- **width**: distance The width of the window - **width**: distance The width of the window
- **x-offset**: distance - **x-offset**: distance
- **y-offset**: distance The offset of the window to the anchor point, - **y-offset**: distance The offset of the window to the anchor point,
allowing you to push the window left/right/up/down allowing you to push the window left/right/up/down
### scrollbar Properties ### scrollbar Properties
@@ -1002,6 +1016,7 @@ The following properties are currently supported:
- **handle-width**: distance - **handle-width**: distance
- **handle-color**: color - **handle-color**: color
- **border-color**: color - **border-color**: color
- **handle-rounded-corners**: boolean for rounded scrollbar
### box ### box
@@ -1010,112 +1025,120 @@ The following properties are currently supported:
### textbox ### textbox
- **background-color**: color - **background-color**: color
- **border-color**: the color used for the border around the widget. - **border-color**: the color used for the border around the widget.
- **font**: the font used by this textbox (string). - **font**: the font used by this textbox (string).
- **str**/**content**: the string to display 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 - **vertical-align**: Vertical alignment of the text. A number between 0
(top) and 1 (bottom). (top) and 1 (bottom).
- **horizontal-align**: Horizontal alignment of the text. A number between 0 - **horizontal-align**: Horizontal alignment of the text. A number between 0
(left) and 1 (right). (left) and 1 (right).
- **text-color**: the text color to use. - **text-color**: the text color to use.
- **text-transform**: text style {color} for the whole text. - **text-transform**: text style {color} for the whole text.
- **highlight**: text style {color}. color is optional, multiple - **highlight**: text style {color}. color is optional, multiple
highlight styles can be added like: bold underline italic #000000; This highlight styles can be added like: bold underline italic #000000; This
option is only available on the `element-text` widget. option is only available on the `element-text` widget.
- **width**: override the desired width for the textbox. - **width**: override the desired width for the textbox.
- **content**: Set the displayed text (String). - **content**: Set the displayed text (String).
- **placeholder**: Set the displayed text (String) when nothing is - **placeholder**: Set the displayed text (String) when nothing is
entered. entered.
- **placeholder-markup**: If true, placeholder text supports pango - **placeholder-markup**: If true, placeholder text supports pango
markup for stylizing. markup for stylizing.
- **placeholder-color**: Color of the placeholder text. - **placeholder-color**: Color of the placeholder text.
- **blink**: Enable/Disable blinking on an input textbox - **blink**: Enable/Disable blinking on an input textbox
(Boolean). (Boolean).
- **markup**: Force markup on, beware that only valid pango markup - **markup**: Force markup on, beware that only valid pango markup
strings are shown. strings are shown.
- **tab-stops**: array of distances. Set the location of tab stops by - **tab-stops**: array of distances. Set the location of tab stops by
their distance from the beginning of the line. Each distance should be 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 greater than the previous one. The text appears to the right of the tab
stop position (other alignments are not supported yet). stop position (other alignments are not supported yet).
- **cursor-width**: The width of the cursor. - **cursor-width**: The width of the cursor.
- **cursor-color**: The color used to draw the cursor. - **cursor-color**: The color used to draw the cursor.
- **cursor-outline**: Enable a border (outline) around the cursor. - **hide-cursor-on-empty**: Hides the cursor when the search field is empty.
(Boolean) (Boolean)
- **cursor-outline-width**: The width of the border around the cursor. - **cursor-outline**: Enable a border (outline) around the cursor.
(Boolean)
- **cursor-outline-width**: The width of the border around the cursor.
(Double) (Double)
- **cursor-outline-color**: The color to use for the cursor outline. - **cursor-outline-color**: The color to use for the cursor outline.
(Color) (Color)
- **text-outline**: Enable a border (outline) around the text. (Boolean) - **text-outline**: Enable a border (outline) around the text. (Boolean)
- **text-outline-width**: The width of the border around the text. (Double) - **text-outline-width**: The width of the border around the text. (Double)
- **text-outline-color**: The color to use for the text outline. (Color) - **text-outline-color**: The color to use for the text outline. (Color)
### listview ### listview
- **columns**: integer Number of columns to show (at least 1)
- **fixed-height**: boolean Always show `lines` rows, even if fewer - **columns**: integer Number of columns to show (at least 1)
- **fixed-height**: boolean Always show `lines` rows, even if fewer
elements are available. elements are available.
- **dynamic**: boolean `True` if the size should change when filtering - **dynamic**: boolean `True` if the size should change when filtering
the list, `False` if it should keep the original height. the list, `False` if it should keep the original height.
- **scrollbar**: boolean If the scrollbar should be enabled/disabled. - **scrollbar**: boolean If the scrollbar should be enabled/disabled.
- **scrollbar-width**: distance Width of the scrollbar - **scrollbar-width**: distance Width of the scrollbar
- **cycle**: boolean When navigating, it should wrap around - **cycle**: boolean When navigating, it should wrap around
- **spacing**: distance Spacing between the elements (both vertical - **spacing**: distance Spacing between the elements (both vertical
and horizontal) and horizontal)
- **lines**: integer Number of rows to show in the list view. - **lines**: integer Number of rows to show in the list view.
- **layout**: orientation Indicate how elements are stacked. - **layout**: orientation Indicate how elements are stacked.
Horizontal implements the dmenu style. Horizontal implements the dmenu style.
- **reverse**: boolean Reverse the ordering (top down to bottom up). - **reverse**: boolean Reverse the ordering (top down to bottom up).
- **flow**: orientation The order the elements are layed out. - **flow**: orientation The order the elements are layed out.
Vertical is the original 'column' view. Vertical is the original 'column' view.
- **fixed-columns**: boolean Do not reduce the number of columns shown when - **fixed-columns**: boolean Do not reduce the number of columns shown when
number of visible elements is not enough to fill them all. number of visible elements is not enough to fill them all.
- **require-input**: boolean Listview requires user input to be unhidden. - **require-input**: boolean Listview requires user input to be unhidden.
The list is still present and hitting accept will activate the first entry. The list is still present and hitting accept will activate the first entry.
### Overlay widget
- **timeout**: The time the widget is visible when showing a temporary message.
## Listview widget ## Listview widget
The listview widget is special container widget. The listview widget is special container widget.
It has the following fixed children widgets: It has the following fixed children widgets:
- 0 or more `element` widgets of the type box. - 0 or more `element` widgets of the type box.
- An optional `scrollbar` widget. This can be enabled using the scrollbar - An optional `scrollbar` widget. This can be enabled using the scrollbar
property. property.
These cannot be changed using the `children` property. These cannot be changed using the `children` property.
@@ -1211,6 +1234,7 @@ The current layout of **rofi** is structured as follows:
``` ```
>
> - ci is the case-indicator > - ci is the case-indicator
> - fr is the num-filtered-rows > - fr is the num-filtered-rows
> - ns is the num-rows > - ns is the num-rows
@@ -1386,15 +1410,15 @@ Just like CSS, **rofi** uses the box model for each widget.
Explanation of the different parts: Explanation of the different parts:
- Content - The content of the widget. - Content - The content of the widget.
- Padding - Clears an area around the widget. The padding shows the - Padding - Clears an area around the widget. The padding shows the
background color of the widget. background color of the widget.
- Border - A border that goes around the padding and content. The border use - Border - A border that goes around the padding and content. The border use
the border-color of the widget. the border-color of the widget.
- Margin - Clears an area outside the border. The margin is transparent. - 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 The box model allows us to add a border around elements, and to define space
between elements. between elements.
@@ -1551,7 +1575,9 @@ From the pango manpage:
The string must have the form The string must have the form
`\[FAMILY-LIST] \[STYLE-OPTIONS] \[SIZE] \[VARIATIONS]`, ```text
\[FAMILY-LIST] \[STYLE-OPTIONS] \[SIZE] \[VARIATIONS]
```
where FAMILY-LIST is a comma-separated list of families optionally terminated 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 by a comma, STYLE\_OPTIONS is a whitespace-separated list of words where each
@@ -1588,7 +1614,7 @@ A typical example:
"Cantarell Italic Light 15 \`wght`=200" "Cantarell Italic Light 15 \`wght`=200"
## Icon Handling ## Icon Handling
Rofi supports 3 ways of specifying an icon: Rofi supports 3 ways of specifying an icon:
@@ -1612,6 +1638,7 @@ Getting supported icon formats:
```bash ```bash
G_MESSAGES_DEBUG=Helpers.IconFetcher rofi G_MESSAGES_DEBUG=Helpers.IconFetcher rofi
``` ```
This uses the debug framework and prints out a list of supported image file This uses the debug framework and prints out a list of supported image file
extensions. extensions.
@@ -1641,7 +1668,16 @@ If a filename is provided, it will try to resolve it in the following order:
- `${XDG_DATA_HOME}/rofi/themes/` - `${XDG_DATA_HOME}/rofi/themes/`
- `${INSTALL PREFIX}/share/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. A name is resolved (if it has no valid extension) as a filename by appending the `.rasi` and the `.rasinc` extension.
It will first look for files with `.rasi`, then for files with `.rasinc`.
If you want to do an optional import, e.g. no error when the file does not exists, you can do:
```css
?import "myfile"
```
This still throws an error on syntax error, but won't abort parsing if file does not exists.
## Examples ## Examples

View File

@@ -0,0 +1,85 @@
# rofi-thumbnails(5)
## NAME
**rofi-thumbnails** - Rofi thumbnails system
## DESCRIPTION
**rofi** is now able to show thumbnails for all file types where an XDG compatible thumbnailer is present in the system.
This is done by default in filebrowser and recursivebrowser mode, if **rofi** is launched with the `-show-icons` argument.
In a custom user script or dmenu mode, it is possible to produce entry icons using XDG thumbnailers by adding the prefix `thumbnail://` to the filename
specified after `\0icon\x1f`, for example:
```bash
echo -en "EntryName\0icon\x1fthumbnail://path/to/file\n" | rofi -dmenu -show-icons
```
### XDG thumbnailers
XDG thumbnailers are files with a ".thumbnailer" suffix and a structure similar to ".desktop" files for launching applications. They are placed in `/usr/share/thumbnailers/` or `$HOME/.local/share/thumbnailers/`, and contain a list of mimetypes, for which is possible to produce the thumbnail image, and a string with the command to create said image. The example below shows the content of `librsvg.thumbnailer`, a thumbnailer for svg files using librsvg:
```
[Thumbnailer Entry]
TryExec=/usr/bin/gdk-pixbuf-thumbnailer
Exec=/usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
MimeType=image/svg+xml;image/svg+xml-compressed;
```
The images produced are named as the md5sum of the input files and placed, depending on their size, in the XDG thumbnails directories: `$HOME/.cache/thumbnails/{normal,large,x-large,xx-large}`. They are then loaded by **rofi** as entry icons and can also be used by file managers like Thunar, Caja or KDE Dolphin to show their thumbnails. Additionally, if a thumbnail for a file is found in the thumbnails directories (produced previously by **rofi** or a file manager), **rofi** will load it instead of calling the thumbnailer.
If a suitable thumbnailer for a given file is not found, **rofi** will try to use the corresponding mimetype icon from the icon theme.
### Custom command to create thumbnails
It is possible to use a custom command to generate thumbnails for generic entry names, for example a script that downloads an icon given its url or selects different icons depending on the input. This can be done providing the `-preview-cmd` argument followed by a string with the command to execute, with the following syntax:
```
rofi ... -preview-cmd 'path/to/script_or_cmd "{input}" "{output}" "{size}"'
```
**rofi** will call the script or command substituting `{input}` with the input entry icon name (the string after `\0icon\x1fthumbnail://`), `{output}` with the output filename of the thumbnail and `{size}` with the requested thumbnail size. The script or command is responsible of producing a thumbnail image (if possible respecting the requested size) and saving it in the given `{output}` filename.
### Issues with AppArmor
In Linux distributions using AppArmor (such as Ubuntu and Debian), the default rules shipped can cause issues with thumbnails generation. If that is the case, AppArmor can be disabled by issuing the following commands
```
sudo systemctl stop apparmor
sudo systemctl disable apparmor
```
In alternative, the following apparmor profile con be placed in a file named /etc/apparmor.d/usr.bin.rofi
```
#vim:syntax=apparmor
# AppArmor policy for rofi
#include <tunables/global>
/usr/bin/rofi {
#include <abstractions/base>
# TCP/UDP network access for NFS
network inet stream,
network inet6 stream,
network inet dgram,
network inet6 dgram,
/usr/bin/rofi mr,
@{HOME}/ r,
@{HOME}/** rw,
owner @{HOME}/.cache/thumbnails/** rw,
}
```
then run
```
apparmor_parser -r /etc/apparmor.d/usr.bin.rofi
```
to reload the rule. This assumes that **rofi** binary is in /usr/bin, that is the case of a standard package installation.

1813
doc/rofi.1

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
# ROFI 1 rofi # rofi(1)
## NAME ## NAME
@@ -66,15 +66,15 @@ Markup support can be enabled, see CONFIGURATION options.
There are currently three methods of setting configuration options (evaluated There are currently three methods of setting configuration options (evaluated
in order below): in order below):
- System configuration file (for example `/etc/rofi.rasi`). It first checks - System configuration file (for example `/etc/rofi.rasi`). It first checks
`XDG_CONFIG_DIRS`, and then `SYSCONFDIR` (that is passed at compile time). `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 It loads the first config file it finds, it does not merge multiple system
configuration files. configuration files.
- Rasi theme file: The new *theme* format can be used to set configuration - Rasi theme file: The new *theme* format can be used to set configuration
values. values.
- Command-line options: Arguments passed to **rofi**. - Command-line options: Arguments passed to **rofi**.
To get a template config file, run: `rofi -dump-config > config.rasi` To get a template config file, run: `rofi -dump-config > config.rasi`
@@ -102,7 +102,7 @@ For example to set the dpi value to 72:
```css ```css
configuration { configuration {
dpi: 72; dpi: 72;
} }
``` ```
@@ -246,6 +246,12 @@ exec command. For that case, `#` can be used as a separator.
Start in case-sensitive mode. This option can be changed at run-time using the Start in case-sensitive mode. This option can be changed at run-time using the
`-kb-toggle-case-sensitivity` key binding. `-kb-toggle-case-sensitivity` key binding.
`-case-smart`
Start in case-smart mode behave like vim's `smartcase`, which determines
case-sensitivity by input. When enabled, this will suppress `-case-sensitive`
config.
`-cycle` `-cycle`
Cycle through the result list. Default is 'true'. Cycle through the result list. Default is 'true'.
@@ -302,6 +308,12 @@ Use Pango markup to format output wherever possible.
Make **rofi** react like a normal application window. Useful for scripts like Make **rofi** react like a normal application window. Useful for scripts like
Clerk that are basically an application. Clerk that are basically an application.
`-transient-window`
Make **rofi** react like a modal dialog that is transient to the currently
focused window. Useful when you use a keyboard shortcut to run and show
on the window you are working with.
`-[no-]steal-focus` `-[no-]steal-focus`
Make rofi steal focus on launch and restore close to window that held it when Make rofi steal focus on launch and restore close to window that held it when
@@ -312,7 +324,7 @@ launched.
The time (in ms) boundary filter may take before switch from instant to delayed The time (in ms) boundary filter may take before switch from instant to delayed
filter mode. filter mode.
Default: 300 Default: 300
A fallback icon can be specified for each mode: A fallback icon can be specified for each mode:
@@ -323,6 +335,7 @@ configuration {
} }
} }
``` ```
Example Example
```css ```css
@@ -348,6 +361,9 @@ Currently, the following methods are supported:
Default: *normal* Default: *normal*
Multiple matching methods can be specified in a comma separated list.
The matching up/down keybinding allows cycling through at runtime.
Note: glob matching might be slow for larger lists Note: glob matching might be slow for larger lists
`-tokenize` `-tokenize`
@@ -358,6 +374,10 @@ Tokenize the input.
Only show desktop files that are present in the listed categories. Only show desktop files that are present in the listed categories.
`-drun-exclude-categories` *category1*,*category2*
Exclude desktop files that are present in the listed categories.
`-drun-match-fields` *field1*,*field2*,... `-drun-match-fields` *field1*,*field2*,...
When using `drun`, match only with the specified Desktop entry fields. When using `drun`, match only with the specified Desktop entry fields.
@@ -385,7 +405,7 @@ The format string for the `drun` dialog:
Pango markup can be used to formatting the output. Pango markup can be used to formatting the output.
Default: {name} [<span weight='light' size='small'><i>({generic})</i></span>] 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 Note: Only fields enabled in `-drun-match-fields` can be used in the format
string. string.
@@ -417,17 +437,16 @@ For Wayland, the list of accepted fields is different:
Default: *all* Default: *all*
`-matching-negate-char` *char* `-matching-negate-char` *string*
Set the character used to negate the query (i.e. if it does **not** match the Set the character used to negate the query (i.e. if it does **not** match the
next keyword). Set to '\x0' to disable. next keyword). Set to '\x0' to disable. It takes the first ASCII character from the string.
Default: '-' Default: '-'
### Filtered menu sort ### Filtered menu sort
`-sort` to enable `-[no]-sort`
`-no-sort` to disable
Enable, disable sort for filtered menu. Enable, disable sort for filtered menu.
This setting can be changed at runtime (see `-kb-toggle-sort`). This setting can be changed at runtime (see `-kb-toggle-sort`).
@@ -468,7 +487,7 @@ Default: *0*
`-fixed-num-lines` `-fixed-num-lines`
Keep a fixed number of visible lines. Keep a fixed number of visible lines.
`-sidebar-mode` `-sidebar-mode`
@@ -498,26 +517,23 @@ Default: *1*
When one entry is left, automatically select it. When one entry is left, automatically select it.
`-m` *num* `-m` *num*, `-m` *name*, `-monitor` *num*, `-monitor` *name*
`-m` *name*
`-monitor` *num*
`-monitor` *name*
Select monitor to display **rofi** on. It accepts as input: *primary* (if 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 primary output is set), the *xrandr* output name, or integer number (in order
of detection). Negative numbers are handled differently: of detection). Negative numbers are handled differently:
- **-1**: the currently focused monitor. - **-1**: the currently focused monitor.
- **-2**: the currently focused window (that is, **rofi** will be displayed - **-2**: the currently focused window (that is, **rofi** will be displayed
on top of the focused window). on top of the focused window).
- **-3**: Position of mouse (overrides the location setting to get normal - **-3**: Position of mouse (overrides the location setting to get normal
context menu behavior.) context menu behavior.)
- **-4**: the monitor with the focused window. - **-4**: the monitor with the focused window.
- **-5**: the monitor that shows the mouse pointer. - **-5**: the monitor that shows the mouse pointer.
Default: *-5* Default: *-5*
@@ -544,10 +560,10 @@ This is now the method to tweak the theme via the command line.
Override the default DPI setting. Override the default DPI setting.
- If set to `0`, it tries to auto-detect based on X11 screen size (similar to - If set to `0`, it tries to auto-detect based on X11 screen size (similar to
i3 and GTK). i3 and GTK).
- If set to `1`, it tries to auto-detect based on the size of the monitor - 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). that **rofi** is displayed on (similar to latest Qt 5).
`-selected-row` *selected row* `-selected-row` *selected row*
@@ -595,8 +611,7 @@ Parse the `/etc/hosts` file for entries.
Default: *disabled* Default: *disabled*
`-parse-known-hosts` `-[no-]parse-known-hosts`
`-no-parse-known-hosts`
Parse the `~/.ssh/known_hosts` file for entries. Parse the `~/.ssh/known_hosts` file for entries.
@@ -675,6 +690,7 @@ configuration {
} }
} }
``` ```
You can hide the currently active window with the 'hide-active-window' setting: You can hide the currently active window with the 'hide-active-window' setting:
```css ```css
@@ -702,7 +718,7 @@ or pass `-window-prefer-icon-theme true` on command line.
### Combi settings ### Combi settings
`-combi-modes ` *mode1*,*mode2* `-combi-modes` *mode1*,*mode2*
The modes to combine in combi mode. The modes to combine in combi mode.
For syntax to `-combi-modes`, see `-modes`. For syntax to `-combi-modes`, see `-modes`.
@@ -730,10 +746,9 @@ Note: This setting is ignored if `combi-hide-mode-prefix` is enabled.
### History ### History
`-disable-history` `-[no-]disable-history`
`-no-disable-history` (re-enable history)
Disable history Disable or re-enable history
`-max-history-size` *number* `-max-history-size` *number*
@@ -861,13 +876,20 @@ configuration {
} }
``` ```
`-click-to-exit` `-[no-]click-to-exit`
`-no-click-to-exit`
Click the mouse outside the **rofi** window to exit. Click the mouse outside the **rofi** window to exit.
Default: *enabled* Default: *enabled*
`-global-kb`
`-no-global-kb`
(wayland) Override the compositor's keybindings, so that **rofi** can re-use them.
Default: *disabled*
`-xserver-i300-workaround` `-xserver-i300-workaround`
Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue
@@ -958,13 +980,13 @@ If there is no match, it will try to launch the input.
Shows a list of executables in `$PATH` and can launch them (optional in a Shows a list of executables in `$PATH` and can launch them (optional in a
terminal). terminal).
- Pressing the `delete-entry` binding (`shift-delete`) will remove this entry - Pressing the `delete-entry` binding (`shift-delete`) will remove this entry
from the run history. from the run history.
- Pressing the `accept-custom` binding (`control-enter`) will run the command - Pressing the `accept-custom` binding (`control-enter`) will run the command
as entered in the entry box. as entered in the entry box.
- Pressing the `accept-alt` binding (`shift-enter`) will run the command in a - Pressing the `accept-alt` binding (`shift-enter`) will run the command in a
terminal. terminal.
When pressing the `mode-complete` binding (`Control-l`), you can use the File When pressing the `mode-complete` binding (`Control-l`), you can use the File
@@ -976,13 +998,13 @@ 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 files. It automatically launches them in a terminal if specified in the
Desktop File. Desktop File.
- Pressing the `delete-entry` binding (`shift-delete`) will remove this entry - Pressing the `delete-entry` binding (`shift-delete`) will remove this entry
from the run history. from the run history.
- Pressing the `accept-custom` binding (`control-enter`) will run the command - Pressing the `accept-custom` binding (`control-enter`) will run the command
as entered in the entry box. as entered in the entry box.
- Pressing the `accept-alt` binding (`shift-enter`) will run the command in a - Pressing the `accept-alt` binding (`shift-enter`) will run the command in a
terminal. terminal.
When pressing the `mode-complete` binding (`Control-l`), you can use the File When pressing the `mode-complete` binding (`Control-l`), you can use the File
@@ -1007,9 +1029,12 @@ configuration {
parse-user: true; parse-user: true;
/** Parse system desktop files. */ /** Parse system desktop files. */
parse-system: false; parse-system: false;
/** Disable DBusActivatable */
DBusActivatable: false;
} }
} }
``` ```
### ssh ### ssh
Shows a list of SSH targets based on your `ssh` config file, and allows to Shows a list of SSH targets based on your `ssh` config file, and allows to
@@ -1052,7 +1077,7 @@ instead of `"` ("machine quotes").
The indicator shows: The indicator shows:
- ` ` Case insensitive and no sorting. - `` Case insensitive and no sorting.
- `-` Case sensitivity enabled, no sorting. - `-` Case sensitivity enabled, no sorting.
- `+` Case insensitive and Sorting enabled - `+` Case insensitive and Sorting enabled
- `±` Sorting and Case sensitivity enabled" - `±` Sorting and Case sensitivity enabled"
@@ -1061,13 +1086,13 @@ The indicator shows:
Each of these modes uses different methods of resolving the icon: Each of these modes uses different methods of resolving the icon:
- Window: It first uses the icon that the application exposes via the X11 - 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 Server, if none is set it does a lookup of the window Class name in the icon
theme. theme.
- drun: It uses the icon set in the desktop file. - drun: It uses the icon set in the desktop file.
- run: It does a lookup using the executable name. - run: It does a lookup using the executable name.
## EXAMPLES ## EXAMPLES
@@ -1165,7 +1190,7 @@ after the keys have been released.
## DEBUGGING ## DEBUGGING
For more information see **rofi-debugging(5)** manpage. For more information see **rofi-debugging(5)** manpage.
## ISSUE TRACKER ## ISSUE TRACKER

File diff suppressed because it is too large Load Diff

View File

@@ -28,6 +28,7 @@
#ifndef ROFI_DISPLAY_INTERNAL_H #ifndef ROFI_DISPLAY_INTERNAL_H
#define ROFI_DISPLAY_INTERNAL_H #define ROFI_DISPLAY_INTERNAL_H
#include "display.h"
#include "helper.h" #include "helper.h"
#include "nkutils-bindings.h" #include "nkutils-bindings.h"
#include <glib.h> #include <glib.h>
@@ -48,8 +49,8 @@ typedef struct _display_proxy {
void (*set_input_focus)(guint window); void (*set_input_focus)(guint window);
void (*revert_input_focus)(void); void (*revert_input_focus)(void);
char *(*get_clipboard_data)(int type); void (*get_clipboard_data)(int type, ClipboardCb callback, void *user_data);
void (*set_fullscreen_mode)(); void (*set_fullscreen_mode)(void);
guint (*scale)(void); guint (*scale)(void);

View File

@@ -127,7 +127,8 @@ enum clipboard_type {
CLIPBOARD_PRIMARY, CLIPBOARD_PRIMARY,
}; };
char *display_get_clipboard_data(enum clipboard_type); typedef void (* ClipboardCb)(char *clipboard_data, void *user_data);
void display_get_clipboard_data(enum clipboard_type, ClipboardCb callback, void* user_data);
void display_set_fullscreen_mode(void); void display_set_fullscreen_mode(void);

View File

@@ -200,13 +200,15 @@ char *rofi_expand_path(const char *input);
* @param needlelen The length of the needle * @param needlelen The length of the needle
* @param haystack The string to match against * @param haystack The string to match against
* @param haystacklen The length of the haystack * @param haystacklen The length of the haystack
* @param case_sensitive Whether case is significant.
* *
* UTF-8 aware levenshtein distance calculation * UTF-8 aware levenshtein distance calculation
* *
* @returns the levenshtein distance between needle and haystack * @returns the levenshtein distance between needle and haystack
*/ */
unsigned int levenshtein(const char *needle, const glong needlelen, unsigned int levenshtein(const char *needle, const glong needlelen,
const char *haystack, const glong haystacklen); const char *haystack, const glong haystacklen,
const int case_sensitive);
/** /**
* @param data the unvalidated character array holding possible UTF-8 data * @param data the unvalidated character array holding possible UTF-8 data
@@ -234,6 +236,7 @@ char *rofi_latin_to_utf8_strdup(const char *input, gssize length);
* @param plen Pattern length. * @param plen Pattern length.
* @param str The input to match against pattern. * @param str The input to match against pattern.
* @param slen Length of str. * @param slen Length of str.
* @param case_sensitive Whether case is significant.
* *
* rofi_scorer_fuzzy_evaluate implements a global sequence alignment algorithm * rofi_scorer_fuzzy_evaluate implements a global sequence alignment algorithm
* to find the maximum accumulated score by aligning `pattern` to `str`. It * to find the maximum accumulated score by aligning `pattern` to `str`. It
@@ -263,7 +266,7 @@ char *rofi_latin_to_utf8_strdup(const char *input, gssize length);
* @returns the sorting weight. * @returns the sorting weight.
*/ */
int rofi_scorer_fuzzy_evaluate(const char *pattern, glong plen, const char *str, int rofi_scorer_fuzzy_evaluate(const char *pattern, glong plen, const char *str,
glong slen); glong slen, const int case_sensitive);
/*@}*/ /*@}*/
/** /**
@@ -319,7 +322,9 @@ gboolean helper_execute(const char *wd, char **args, const char *error_precmd,
* @param wd The work directory (optional) * @param wd The work directory (optional)
* @param cmd The cmd to execute * @param cmd The cmd to execute
* @param run_in_term Indicate if command should be run in a terminal * @param run_in_term Indicate if command should be run in a terminal
* @param context The startup notification context, if any * @param startup_notify True if the command is expected to notify on startup
* @param context Additional information about the application, such as its
* app_id. May be NULL.
* *
* Execute command. * Execute command.
* If needed members of context are NULL, they will be filled. * If needed members of context are NULL, they will be filled.
@@ -328,6 +333,7 @@ gboolean helper_execute(const char *wd, char **args, const char *error_precmd,
*/ */
gboolean helper_execute_command(const char *wd, const char *cmd, gboolean helper_execute_command(const char *wd, const char *cmd,
gboolean run_in_term, gboolean run_in_term,
gboolean startup_notify,
RofiHelperExecuteContext *context); RofiHelperExecuteContext *context);
/** /**
@@ -353,6 +359,13 @@ cairo_surface_t *cairo_image_surface_create_from_svg(const gchar *file,
*/ */
void parse_ranges(char *input, rofi_range_pair **list, unsigned int *length); void parse_ranges(char *input, rofi_range_pair **list, unsigned int *length);
/**
* @param input String to parse
*
* @returns String matching should be case sensitive or insensitive
*/
int parse_case_sensitivity(const char *input);
/** /**
* @param format The format string used. See below for possible syntax. * @param format The format string used. See below for possible syntax.
* @param string The selected entry. * @param string The selected entry.
@@ -396,6 +409,9 @@ char *helper_string_replace_if_exists(char *string, ...);
* @param ext NULL terminated array of file extension passed to option. * @param ext NULL terminated array of file extension passed to option.
* @param parent_dir The file that was used to import this file, or NULL. * @param parent_dir The file that was used to import this file, or NULL.
* *
* Get the full path to the theme, trying to resolve it over the possible
* locations.
*
* @returns path to theme or copy of filename if not found. * @returns path to theme or copy of filename if not found.
*/ */
char *helper_get_theme_path(const char *file, const char **ext, char *helper_get_theme_path(const char *file, const char **ext,
@@ -429,6 +445,32 @@ ConfigEntry *rofi_config_find_widget(const char *name, const char *state,
*/ */
Property *rofi_theme_find_property(ConfigEntry *widget, PropertyType type, Property *rofi_theme_find_property(ConfigEntry *widget, PropertyType type,
const char *property, gboolean exact); const char *property, gboolean exact);
/**
* @returns get a human readable string with the current matching method.
*/
const char *helper_get_matching_mode_str(void);
/**
* Switch to the next matching method.
*/
void helper_select_next_matching_mode(void);
/**
* Switch to the previous matching method.
*/
void helper_select_previous_matching_mode(void);
/**
* Method to indicate fallthrough. This will help
* gcc/llvm warning/static code analysis.
*/
#if __has_attribute(__fallthrough__)
#define rofi_fallthrough __attribute__((__fallthrough__))
#else
#define rofi_fallthrough \
do { \
} while (0) /* fallthrough */
#endif
G_END_DECLS G_END_DECLS
/**@} */ /**@} */

View File

@@ -145,6 +145,8 @@ typedef enum {
SELECT_ELEMENT_10, SELECT_ELEMENT_10,
ENTRY_HISTORY_UP, ENTRY_HISTORY_UP,
ENTRY_HISTORY_DOWN, ENTRY_HISTORY_DOWN,
MATCHER_UP,
MATCHER_DOWN
} KeyBindingAction; } KeyBindingAction;
/** /**

View File

@@ -31,9 +31,6 @@
#include <gmodule.h> #include <gmodule.h>
G_BEGIN_DECLS G_BEGIN_DECLS
/** ABI version to check if loaded plugin is compatible. */
#define ABI_VERSION 7u
/** /**
* Indicator what type of mode this is. * Indicator what type of mode this is.
* For now it can be the classic switcher, or also implement a completer. * For now it can be the classic switcher, or also implement a completer.

View File

@@ -29,7 +29,12 @@
#define ROFI_MODE_H #define ROFI_MODE_H
#include "rofi-types.h" #include "rofi-types.h"
#include <cairo.h> #include <cairo.h>
#include <gmodule.h>
G_BEGIN_DECLS G_BEGIN_DECLS
/** ABI version to check if loaded plugin is compatible. */
#define ABI_VERSION 7u
/** /**
* @defgroup MODE Mode * @defgroup MODE Mode
* *
@@ -277,6 +282,28 @@ ModeMode mode_completer_result(Mode *sw, int menu_retv, char **input,
* @returns TRUE if mode can be used as completer. * @returns TRUE if mode can be used as completer.
*/ */
gboolean mode_is_completer(const Mode *sw); gboolean mode_is_completer(const Mode *sw);
/**
* @param mode The mode to query
*
* @returns the modes ABI version.
*/
int mode_get_abi_version(Mode *const mode);
/**
* @param mode The mode to query
* @param mod The GModule used to load the mode
*
* Set GModule used to load this plugin, this is used to
* unload it on shutdown.
*/
void mode_plugin_set_module(Mode *mode, GModule *mod);
/**
* @param mode The mode to query
*
* @returns the GModule used to load this plugin. NULL if not a plugin.
*/
GModule *mode_plugin_get_module(Mode *mode);
/**@}*/ /**@}*/
G_END_DECLS G_END_DECLS
#endif #endif

View File

@@ -27,6 +27,9 @@ typedef struct {
/** non-selectable */ /** non-selectable */
gboolean nonselectable; gboolean nonselectable;
/** permanent */
gboolean permanent;
/** urgent */ /** urgent */
gboolean urgent; gboolean urgent;
/** active */ /** active */

View File

@@ -14,8 +14,6 @@ typedef enum {
P_DOUBLE, P_DOUBLE,
/** String */ /** String */
P_STRING, P_STRING,
/** Character */
P_CHAR,
/** Boolean */ /** Boolean */
P_BOOLEAN, P_BOOLEAN,
/** Color */ /** Color */
@@ -260,8 +258,6 @@ typedef union _PropertyValue {
double f; double f;
/** String */ /** String */
char *s; char *s;
/** Character */
char c;
/** boolean */ /** boolean */
gboolean b; gboolean b;
/** Color */ /** Color */
@@ -370,6 +366,7 @@ typedef struct rofi_int_matcher_t {
*/ */
typedef struct _thread_state { typedef struct _thread_state {
void (*callback)(struct _thread_state *t, gpointer data); void (*callback)(struct _thread_state *t, gpointer data);
void (*free)(void *);
int priority; int priority;
} thread_state; } thread_state;

View File

@@ -40,7 +40,8 @@ typedef enum {
MM_REGEX = 1, MM_REGEX = 1,
MM_GLOB = 2, MM_GLOB = 2,
MM_FUZZY = 3, MM_FUZZY = 3,
MM_PREFIX = 4 MM_PREFIX = 4,
MM_NUM_MATCHERS = 5
} MatchingMethod; } MatchingMethod;
/** /**
@@ -65,7 +66,22 @@ typedef struct {
/** Whether to load and show icons */ /** Whether to load and show icons */
gboolean show_icons; gboolean show_icons;
/** Custom command to generate preview icons */
char *preview_cmd;
/** Custom command to call when menu selection changes */
char *on_selection_changed;
/** Custom command to call when menu mode changes */
char *on_mode_changed;
/** Custom command to call when menu entry is accepted */
char *on_entry_accepted;
/** Custom command to call when menu is canceled */
char *on_menu_canceled;
/** Custom command to call when menu finds errors */
char *on_menu_error;
/** Custom command to call when menu screenshot is taken */
char *on_screenshot_taken;
/** Terminal to use */ /** Terminal to use */
char *terminal_emulator; char *terminal_emulator;
/** SSH client to use */ /** SSH client to use */
@@ -111,6 +127,8 @@ typedef struct {
char *drun_match_fields; char *drun_match_fields;
/** Only show entries in this category */ /** Only show entries in this category */
char *drun_categories; char *drun_categories;
/** Exclude entries in this category */
char *drun_exclude_categories;
/** Desktop entry show actions */ /** Desktop entry show actions */
unsigned int drun_show_actions; unsigned int drun_show_actions;
/** Desktop format display */ /** Desktop format display */
@@ -120,6 +138,8 @@ typedef struct {
/** Search case sensitivity */ /** Search case sensitivity */
unsigned int case_sensitive; unsigned int case_sensitive;
/** Smart case sensitivity like vim */
unsigned int case_smart;
/** Cycle through in the element list */ /** Cycle through in the element list */
unsigned int cycle; unsigned int cycle;
/** Height of an element in number of rows */ /** Height of an element in number of rows */
@@ -155,6 +175,9 @@ typedef struct {
/** Click outside the window to exit */ /** Click outside the window to exit */
int click_to_exit; int click_to_exit;
/** Try to take over compositor's global bindings (on Wayland) */
gboolean global_kb;
char *theme; char *theme;
/** Path where plugins can be found. */ /** Path where plugins can be found. */
char *plugin_path; char *plugin_path;
@@ -194,6 +217,8 @@ typedef struct {
gboolean xserver_i300_workaround; gboolean xserver_i300_workaround;
/** completer mode */ /** completer mode */
char *completer_mode; char *completer_mode;
/** Whether to enable imdkit, see #2123 */
gboolean enable_imdkit;
} Settings; } Settings;
/** Default number of lines in the list view */ /** Default number of lines in the list view */

View File

@@ -27,9 +27,11 @@
#ifndef ROFI_VIEW_INTERNAL_H #ifndef ROFI_VIEW_INTERNAL_H
#define ROFI_VIEW_INTERNAL_H #define ROFI_VIEW_INTERNAL_H
#include "display.h"
#include "keyb.h" #include "keyb.h"
#include "mode.h" #include "mode.h"
#include "theme.h" #include "theme.h"
#include "view.h"
#include "widgets/box.h" #include "widgets/box.h"
#include "widgets/container.h" #include "widgets/container.h"
#include "widgets/icon.h" #include "widgets/icon.h"
@@ -99,6 +101,8 @@ struct RofiViewState {
int skip_absorb; int skip_absorb;
/** The selected line (in the unfiltered list) */ /** The selected line (in the unfiltered list) */
unsigned int selected_line; unsigned int selected_line;
/** The previously selected line (in the unfiltered list) */
unsigned int previous_line;
/** The return state of the view */ /** The return state of the view */
MenuReturn retv; MenuReturn retv;
/** Monitor #workarea the view is displayed on */ /** Monitor #workarea the view is displayed on */
@@ -157,26 +161,27 @@ struct RofiViewState {
/** Regexs used for matching */ /** Regexs used for matching */
rofi_int_matcher **tokens; rofi_int_matcher **tokens;
/** For case-sensitivity */
gboolean case_sensitive;
}; };
/** @} */ /** @} */
typedef struct _view_proxy { typedef struct _view_proxy {
void (*update)(RofiViewState *state, gboolean qr); void (*update)(struct RofiViewState *state, gboolean qr);
void (*maybe_update)(RofiViewState *state); void (*temp_configure_notify)(struct RofiViewState *state,
void (*temp_configure_notify)(RofiViewState *state,
xcb_configure_notify_event_t *xce); xcb_configure_notify_event_t *xce);
void (*temp_click_to_exit)(RofiViewState *state, xcb_window_t target); void (*temp_click_to_exit)(struct RofiViewState *state, xcb_window_t target);
void (*frame_callback)(void); void (*frame_callback)(void);
void (*queue_redraw)(void); void (*queue_redraw)(void);
void (*set_window_title)(const char *title); void (*set_window_title)(const char *title);
void (*calculate_window_position)(RofiViewState *state); void (*calculate_window_position)(struct RofiViewState *state);
void (*calculate_window_width)(RofiViewState *state); void (*calculate_window_width)(struct RofiViewState *state);
int (*calculate_window_height)(RofiViewState *state); int (*calculate_window_height)(struct RofiViewState *state);
void (*window_update_size)(RofiViewState *state); void (*window_update_size)(struct RofiViewState *state);
void (*set_cursor)(RofiCursorType type); void (*set_cursor)(RofiCursorType type);
void (*ping_mouse)(RofiViewState *state); void (*ping_mouse)(struct RofiViewState *state);
void (*cleanup)(void); void (*cleanup)(void);
void (*hide)(void); void (*hide)(void);
@@ -187,10 +192,10 @@ typedef struct _view_proxy {
void (*get_current_monitor)(int *width, int *height); void (*get_current_monitor)(int *width, int *height);
void (*capture_screenshot)(void); void (*capture_screenshot)(void);
void (*set_size)(RofiViewState *state, gint width, gint height); void (*set_size)(struct RofiViewState *state, gint width, gint height);
void (*get_size)(RofiViewState *state, gint *width, gint *height); void (*get_size)(struct RofiViewState *state, gint *width, gint *height);
void (*pool_refresh)(); void (*pool_refresh)(void);
} view_proxy; } view_proxy;
typedef struct { typedef struct {
@@ -220,6 +225,8 @@ struct _rofi_view_cache_state {
gboolean delayed_mode; gboolean delayed_mode;
/** timeout handling */ /** timeout handling */
guint user_timeout; guint user_timeout;
/** timeout overlay */
guint overlay_timeout;
/** Entry box */ /** Entry box */
gboolean entry_history_enable; gboolean entry_history_enable;
/** Array with history entriy input. */ /** Array with history entriy input. */

View File

@@ -60,6 +60,8 @@ typedef enum {
MENU_NORMAL_WINDOW = 2, MENU_NORMAL_WINDOW = 2,
/** ERROR dialog */ /** ERROR dialog */
MENU_ERROR_DIALOG = 4, MENU_ERROR_DIALOG = 4,
/** Create transient window. */
MENU_TRANSIENT_WINDOW = 8,
} MenuFlags; } MenuFlags;
/** /**
@@ -285,6 +287,14 @@ void rofi_view_switch_mode(RofiViewState *state, Mode *mode);
* Overlays text over the current view. Passing NULL for text hides the overlay. * Overlays text over the current view. Passing NULL for text hides the overlay.
*/ */
void rofi_view_set_overlay(RofiViewState *state, const char *text); void rofi_view_set_overlay(RofiViewState *state, const char *text);
/**
* @param state The handle to the view
* @param text An UTF-8 encoded character array with the text to overlay.
*
* Overlays text over the current view. Passing NULL for text hides the overlay.
* This message is automatically removed after X seconds.
*/
void rofi_view_set_overlay_timeout (RofiViewState *state, const char *text);
/** /**
* @param state The handle to the view. * @param state The handle to the view.

View File

@@ -14,6 +14,7 @@ typedef enum {
WAYLAND_GLOBAL_COMPOSITOR, WAYLAND_GLOBAL_COMPOSITOR,
WAYLAND_GLOBAL_SHM, WAYLAND_GLOBAL_SHM,
WAYLAND_GLOBAL_LAYER_SHELL, WAYLAND_GLOBAL_LAYER_SHELL,
WAYLAND_GLOBAL_KEYBOARD_SHORTCUTS_INHIBITOR,
WAYLAND_GLOBAL_CURSOR_SHAPE, WAYLAND_GLOBAL_CURSOR_SHAPE,
_WAYLAND_GLOBAL_SIZE, _WAYLAND_GLOBAL_SIZE,
} wayland_global_name; } wayland_global_name;
@@ -33,6 +34,10 @@ typedef struct {
typedef struct _wayland_seat wayland_seat; typedef struct _wayland_seat wayland_seat;
typedef struct {
void *offer;
} clipboard_data;
typedef struct { typedef struct {
GMainLoop *main_loop; GMainLoop *main_loop;
GWaterWaylandSource *main_loop_source; GWaterWaylandSource *main_loop_source;
@@ -51,6 +56,8 @@ typedef struct {
struct zwlr_layer_shell_v1 *layer_shell; struct zwlr_layer_shell_v1 *layer_shell;
struct zwp_keyboard_shortcuts_inhibit_manager_v1 *kb_shortcuts_inhibit_manager;
struct wl_shm *shm; struct wl_shm *shm;
size_t buffer_count; size_t buffer_count;
struct { struct {
@@ -74,8 +81,7 @@ typedef struct {
int32_t scale; int32_t scale;
NkBindingsSeat *bindings_seat; NkBindingsSeat *bindings_seat;
char *clipboard_default_data; clipboard_data clipboards[2];
char *clipboard_primary_data;
uint32_t layer_width; uint32_t layer_width;
uint32_t layer_height; uint32_t layer_height;
@@ -103,26 +109,28 @@ struct _wayland_seat {
struct wl_data_device *data_device; struct wl_data_device *data_device;
struct zwp_primary_selection_device_v1 *primary_selection_device; struct zwp_primary_selection_device_v1 *primary_selection_device;
enum wl_pointer_axis_source axis_source;
widget_button_event button; widget_button_event button;
widget_motion_event motion; widget_motion_event motion;
struct { struct {
gint vertical; gint vertical;
gint horizontal; gint horizontal;
} wheel; } wheel;
struct {
double vertical;
double horizontal;
} wheel_continuous;
}; };
/* Supported interface versions */ /* Supported interface versions */
#define WL_COMPOSITOR_INTERFACE_VERSION 3 #define WL_COMPOSITOR_INTERFACE_VERSION 3
#define WL_SHM_INTERFACE_VERSION 1 #define WL_SHM_INTERFACE_VERSION 1
#define WL_SEAT_INTERFACE_VERSION 5 #define WL_SEAT_INTERFACE_MIN_VERSION 5
#define WL_LAYER_SHELL_INTERFACE_VERSION 1 #define WL_SEAT_INTERFACE_MAX_VERSION 8
#define WL_OUTPUT_INTERFACE_MIN_VERSION 2 #define WL_OUTPUT_INTERFACE_MIN_VERSION 2
#define WL_OUTPUT_INTERFACE_MAX_VERSION 4
#ifdef WL_OUTPUT_NAME_SINCE_VERSION #define WL_LAYER_SHELL_INTERFACE_VERSION 1
#define WL_OUTPUT_INTERFACE_MAX_VERSION WL_OUTPUT_NAME_SINCE_VERSION #define WL_KEYBOARD_SHORTCUTS_INHIBITOR_INTERFACE_VERSION 1
#else
#define WL_OUTPUT_INTERFACE_MAX_VERSION 2
#endif
extern wayland_stuff *wayland; extern wayland_stuff *wayland;

View File

@@ -59,9 +59,9 @@ icon *icon_create(widget *parent, const char *name);
void icon_set_size(widget *icon, const int size); void icon_set_size(widget *icon, const int size);
/** /**
* @param icon The icon widget handle. * @param icon_widget The icon widget handle.
* @param surf The surface to display. * @param surf The surface to display.
*/ */
void icon_set_surface(icon *icon, cairo_surface_t *surf); void icon_set_surface(icon *icon_widget, cairo_surface_t *surf);
/**@}*/ /**@}*/
#endif // ROFI_ICON_H #endif // ROFI_ICON_H

View File

@@ -84,10 +84,18 @@ typedef void (*listview_selection_changed_callback)(listview *lv,
*/ */
typedef void (*listview_mouse_activated_cb)(listview *, gboolean, void *); typedef void (*listview_mouse_activated_cb)(listview *, gboolean, void *);
/**
* Callback when current page is changed.
*/
typedef void (*listview_page_changed_cb)(void);
/** /**
* @param parent The widget's parent. * @param parent The widget's parent.
* @param name The name of the to be created widget. * @param name The name of the to be created widget.
* @param cb The update callback. * @param cb The update callback.
* @param page_cb The page change callback.
* @param udata The user data to pass to the callback * @param udata The user data to pass to the callback
* @param eh The height of one element * @param eh The height of one element
* @param reverse Reverse the listview order. * @param reverse Reverse the listview order.
@@ -95,7 +103,8 @@ typedef void (*listview_mouse_activated_cb)(listview *, gboolean, void *);
* @returns a new listview * @returns a new listview
*/ */
listview *listview_create(widget *parent, const char *name, listview *listview_create(widget *parent, const char *name,
listview_update_callback cb, void *udata, listview_update_callback cb,
listview_page_changed_cb page_cb, void *udata,
unsigned int eh, gboolean reverse); unsigned int eh, gboolean reverse);
/** /**

View File

@@ -80,7 +80,9 @@ typedef struct {
TBFontConfig *tbfc; TBFontConfig *tbfc;
PangoEllipsizeMode emode; PangoEllipsizeMode emode;
//
const char *password_mask_char;
const char *theme_name; const char *theme_name;
} textbox; } textbox;

View File

@@ -83,6 +83,12 @@ struct _widget {
gboolean expand; gboolean expand;
/** Place widget at end of parent */ /** Place widget at end of parent */
gboolean end; gboolean end;
/** enable/disable border aliasing. */
gboolean border_antialiasing;
/** enable/disable nvisia workaround. */
gboolean border_disable_nvidia_workaround;
/** Parent widget */ /** Parent widget */
struct _widget *parent; struct _widget *parent;
/** Internal */ /** Internal */

View File

@@ -83,7 +83,7 @@ typedef enum {
} WidgetTriggerActionResult; } WidgetTriggerActionResult;
/** /**
* @param widget The container widget itself * @param wid The container widget itself
* @param type The widget type searched for * @param type The widget type searched for
* @param x The X coordination of the mouse event relative to #widget * @param x The X coordination of the mouse event relative to #widget
* @param y The Y coordination of the mouse event relative to #widget * @param y The Y coordination of the mouse event relative to #widget
@@ -93,11 +93,11 @@ typedef enum {
* *
* @returns A child widget if found, NULL otherwise * @returns A child widget if found, NULL otherwise
*/ */
typedef widget *(*widget_find_mouse_target_cb)(widget *widget, WidgetType type, typedef widget *(*widget_find_mouse_target_cb)(widget *wid, WidgetType type,
gint x, gint y); gint x, gint y);
/** /**
* @param widget The target widget * @param wid The target widget
* @param action The action value (which enum it is depends on the widget type) * @param action The action value (which enum it is depends on the widget type)
* @param x The X coordination of the mouse event relative to #widget * @param x The X coordination of the mouse event relative to #widget
* @param y The Y coordination of the mouse event relative to #widget * @param y The Y coordination of the mouse event relative to #widget
@@ -108,7 +108,7 @@ typedef widget *(*widget_find_mouse_target_cb)(widget *widget, WidgetType type,
* *
* @returns Whether the action was handled or not, see enum values for details * @returns Whether the action was handled or not, see enum values for details
*/ */
typedef WidgetTriggerActionResult (*widget_trigger_action_cb)(widget *widget, typedef WidgetTriggerActionResult (*widget_trigger_action_cb)(widget *wid,
guint action, guint action,
gint x, gint y, gint x, gint y,
void *user_data); void *user_data);
@@ -117,7 +117,7 @@ typedef WidgetTriggerActionResult (*widget_trigger_action_cb)(widget *widget,
#define WIDGET(a) ((widget *)(a)) #define WIDGET(a) ((widget *)(a))
/** /**
* @param widget The widget to check * @param wid The widget to check
* @param x The X position relative to parent window * @param x The X position relative to parent window
* @param y the Y position relative to parent window * @param y the Y position relative to parent window
* *
@@ -125,65 +125,63 @@ typedef WidgetTriggerActionResult (*widget_trigger_action_cb)(widget *widget,
* *
* @return TRUE if x,y falls within the widget * @return TRUE if x,y falls within the widget
*/ */
int widget_intersect(const widget *widget, int x, int y); int widget_intersect(const widget *wid, int x, int y);
/** /**
* @param widget The widget to move * @param wid The widget to move
* @param x The new X position relative to parent window * @param x The new X position relative to parent window
* @param y The new Y position relative to parent window * @param y The new Y position relative to parent window
* *
* Moves the widget. * Moves the widget.
*/ */
void widget_move(widget *widget, short x, short y); void widget_move(widget *wid, short x, short y);
/** /**
* @param widget Handle to widget * @param wid Handle to widget
* @param type The widget type. * @param type The widget type.
* *
* Set the widget type. * Set the widget type.
*/ */
void widget_set_type(widget *widget, WidgetType type); void widget_set_type(widget *wid, WidgetType type);
/** /**
* @param widget Handle to widget * @param wid Handle to widget
* *
* Check if widget is enabled. * Check if widget is enabled.
* @returns TRUE when widget is enabled. * @returns TRUE when widget is enabled.
*/ */
gboolean widget_enabled(widget *widget); gboolean widget_enabled(widget *wid);
/** /**
* @param widget Handle to widget * @param wid Handle to widget
* @param enabled The new state * @param enabled The new state
* *
* Disable the widget. * Disable the widget.
*/ */
void widget_set_enabled(widget *widget, gboolean enabled); void widget_set_enabled(widget *wid, gboolean enabled);
/** /**
* @param widget Handle to widget * @param wid Handle to widget
* *
* Disable the widget. * Disable the widget.
*/ */
static inline void widget_disable(widget *widget) { static inline void widget_disable(widget *wid) {
widget_set_enabled(widget, FALSE); widget_set_enabled(wid, FALSE);
} }
/** /**
* @param widget Handle to widget * @param wid Handle to widget
* *
* Enable the widget. * Enable the widget.
*/ */
static inline void widget_enable(widget *widget) { static inline void widget_enable(widget *wid) { widget_set_enabled(wid, TRUE); }
widget_set_enabled(widget, TRUE);
}
/** /**
* @param widget widget Handle to the widget * @param wid widget Handle to the widget
* @param d The cairo object used to draw itself. * @param d The cairo object used to draw itself.
* *
* Render the textbox. * Render the textbox.
*/ */
void widget_draw(widget *widget, cairo_t *d); void widget_draw(widget *wid, cairo_t *d);
/** /**
* @param wid Handle to the widget * @param wid Handle to the widget
@@ -193,58 +191,58 @@ void widget_draw(widget *widget, cairo_t *d);
void widget_free(widget *wid); void widget_free(widget *wid);
/** /**
* @param widget The widget toresize * @param wid The widget toresize
* @param w The new width * @param w The new width
* @param h The new height * @param h The new height
* *
* Resizes the widget. * Resizes the widget.
*/ */
void widget_resize(widget *widget, short w, short h); void widget_resize(widget *wid, short w, short h);
/** /**
* @param widget The widget handle * @param wid The widget handle
* *
* @returns the height of the widget. * @returns the height of the widget.
*/ */
int widget_get_height(widget *widget); int widget_get_height(widget *wid);
/** /**
* @param widget The widget handle * @param wid The widget handle
* *
* @returns the width of the widget. * @returns the width of the widget.
*/ */
int widget_get_width(widget *widget); int widget_get_width(widget *wid);
/** /**
* @param widget The widget handle * @param wid The widget handle
* *
* @returns the y position of the widget relative to its parent. * @returns the y position of the widget relative to its parent.
*/ */
int widget_get_y_pos(widget *widget); int widget_get_y_pos(widget *wid);
/** /**
* @param widget The widget handle * @param wid The widget handle
* *
* @returns the x position of the widget relative to its parent. * @returns the x position of the widget relative to its parent.
*/ */
int widget_get_x_pos(widget *widget); int widget_get_x_pos(widget *wid);
/** /**
* @param widget The widget handle * @param wid The widget handle
* @param x A pointer to the absolute X coordinates * @param x A pointer to the absolute X coordinates
* @param y A pointer to the absolute Y coordinates * @param y A pointer to the absolute Y coordinates
* *
* Will modify param x and param y to make them relative to param widget . * Will modify param x and param y to make them relative to param wid .
*/ */
void widget_xy_to_relative(widget *widget, gint *x, gint *y); void widget_xy_to_relative(widget *wid, gint *x, gint *y);
/** /**
* @param widget The widget handle * @param wid The widget handle
* *
* Update the widget, and its parent recursively. * Update the widget, and its parent recursively.
* This should be called when size of widget changes. * This should be called when size of widget changes.
*/ */
void widget_update(widget *widget); void widget_update(widget *wid);
/** /**
* @param wid The widget handle * @param wid The widget handle
* *

View File

@@ -36,6 +36,7 @@
#include <libgwater-xcb.h> #include <libgwater-xcb.h>
#include <xcb/xcb.h> #include <xcb/xcb.h>
#include <xcb/xcb_ewmh.h> #include <xcb/xcb_ewmh.h>
#include <xcb/xcb_keysyms.h>
#include <nkutils-bindings.h> #include <nkutils-bindings.h>
@@ -49,6 +50,7 @@ struct _xcb_stuff {
#ifdef XCB_IMDKIT #ifdef XCB_IMDKIT
xcb_xic_t ic; xcb_xic_t ic;
xcb_xim_t *im; xcb_xim_t *im;
xcb_key_symbols_t *syms;
#endif #endif
xcb_ewmh_connection_t ewmh; xcb_ewmh_connection_t ewmh;
xcb_screen_t *screen; xcb_screen_t *screen;

View File

@@ -98,18 +98,6 @@ extern const char *netatom_names[];
/** atoms */ /** atoms */
extern xcb_atom_t netatoms[NUM_NETATOMS]; extern xcb_atom_t netatoms[NUM_NETATOMS];
/**
* @param w rofis window
*
* Stores old input focus for reverting and set focus to rofi.
*/
void rofi_xcb_set_input_focus(xcb_window_t w);
/**
* IF set, revert the focus back to the original applications.
*/
void rofi_xcb_revert_input_focus(void);
/** /**
* Depth of visual * Depth of visual
*/ */
@@ -177,8 +165,6 @@ typedef enum {
WM_DO_NOT_CHANGE_CURRENT_DESKTOP = 1, WM_DO_NOT_CHANGE_CURRENT_DESKTOP = 1,
/** PANGO WORKSPACE NAMES */ /** PANGO WORKSPACE NAMES */
WM_PANGO_WORKSPACE_NAMES = 2, WM_PANGO_WORKSPACE_NAMES = 2,
/** Root window offset (for bspwm) */
WM_ROOT_WINDOW_OFFSET = 4,
} WindowManagerQuirk; } WindowManagerQuirk;
/** /**
@@ -207,7 +193,7 @@ cairo_surface_t *x11_helper_get_screenshot_surface_window(xcb_window_t window,
* *
* Blur the content of the surface with radius and deviation. * Blur the content of the surface with radius and deviation.
*/ */
void cairo_image_surface_blur(cairo_surface_t *surface, double radius, void cairo_image_surface_blur(cairo_surface_t *surface, int radius,
double deviation); double deviation);
#ifdef XCB_IMDKIT #ifdef XCB_IMDKIT

View File

@@ -51,6 +51,8 @@
int last_state = 0; int last_state = 0;
extern int rofi_is_in_dmenu_mode; extern int rofi_is_in_dmenu_mode;
gboolean import_optional = FALSE;
const char *rasi_theme_file_extensions[] = {".rasi", ".rasinc", NULL}; const char *rasi_theme_file_extensions[] = {".rasi", ".rasinc", NULL};
/** /**
* Type of Object to parse. * Type of Object to parse.
@@ -186,7 +188,6 @@ WORD_ENV [[:alpha:]_][[:alnum:]_]*
COLOR_NAME [[:alpha:]]+ COLOR_NAME [[:alpha:]]+
STRING \"{UANYN}*\"|\'{UANYN}*\' STRING \"{UANYN}*\"|\'{UANYN}*\'
STRING_LIST \"{UANYNP1}*\"|\'{UANYNP2}*\' STRING_LIST \"{UANYNP1}*\"|\'{UANYNP2}*\'
CHAR \'({ASCN}|\\\\|\\\'|\\0)\'
HEX [[:xdigit:]] HEX [[:xdigit:]]
NUMBER [[:digit:]]+ NUMBER [[:digit:]]+
UNARYMIN - UNARYMIN -
@@ -290,6 +291,7 @@ C_COMMENT_OPEN "/*"
INCLUDE "@import" INCLUDE "@import"
OPT_INCLUDE "?import"
THEME "@theme" THEME "@theme"
DEFAULT (?i:\"default\"?) DEFAULT (?i:\"default\"?)
@@ -379,6 +381,12 @@ if ( queue == NULL ) {
*/ */
<INITIAL>{INCLUDE} { <INITIAL>{INCLUDE} {
g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
import_optional = FALSE;
BEGIN(INCLUDE);
}
<INITIAL>{OPT_INCLUDE} {
g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
import_optional = TRUE;
BEGIN(INCLUDE); BEGIN(INCLUDE);
} }
<INITIAL>{THEME} { <INITIAL>{THEME} {
@@ -438,10 +446,15 @@ if ( queue == NULL ) {
yylloc->first_column = yylloc->last_column = 1; yylloc->first_column = yylloc->last_column = 1;
yylloc->filename = current->filename; yylloc->filename = current->filename;
} else { } else {
char *str = g_markup_printf_escaped ( "Failed to open theme: <i>%s</i>\nError: <b>%s</b>", if ( !import_optional ) {
filename, strerror ( errno ) ); char *str = g_markup_printf_escaped ( "Failed to open theme: <i>%s</i>\nError: <b>%s</b>",
rofi_add_warning_message ( g_string_new ( str ) ); filename, strerror ( errno ) );
g_free ( str ); rofi_add_warning_message ( g_string_new ( str ) );
g_free ( str );
} else {
g_warning("Trying to parse optional theme: '%s', Error: %s",
filename, strerror(errno));
}
g_free(filename); g_free(filename);
} }
// Pop out of include. */ // Pop out of include. */
@@ -522,7 +535,6 @@ if ( queue == NULL ) {
<PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{UNARYMIN} { return T_MIN; } <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{UNARYMIN} { return T_MIN; }
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{STRING} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;} <PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{STRING} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;}
<PROPERTIES_ARRAY>{STRING_LIST} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;} <PROPERTIES_ARRAY>{STRING_LIST} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;}
<PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{CHAR} { yytext[yyleng-1] = '\0'; yylval->cval = g_strcompress(&yytext[1])[0]; return T_CHAR;}
<PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>@{WORD} { <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>@{WORD} {
yylval->sval = g_strdup(yytext+1); yylval->sval = g_strdup(yytext+1);
@@ -846,7 +858,7 @@ if ( queue == NULL ) {
/** /**
* Media defaults. * Media defaults.
*/ */
<MEDIA,MEDIA_CONTENT,MEDIA_ENV_VAR,MEDIA_ENV_VAR_DEFAULT,MEDIA_ENV_VAR_CONTENT>{WHITESPACE}+ ; // ignore all whitespace <MEDIA,MEDIA_CONTENT,MEDIA_ENV_VAR,MEDIA_ENV_VAR_DEFAULT,MEDIA_ENV_VAR_CONTENT>{WHITESPACE}+ ; // ignore all whitespace
<MEDIA,MEDIA_CONTENT,MEDIA_ENV_VAR,MEDIA_ENV_VAR_DEFAULT,MEDIA_ENV_VAR_CONTENT>. { <MEDIA,MEDIA_CONTENT,MEDIA_ENV_VAR,MEDIA_ENV_VAR_DEFAULT,MEDIA_ENV_VAR_CONTENT>. {
yytext[yyleng-1] = '\0'; yytext[yyleng-1] = '\0';

View File

@@ -164,7 +164,6 @@ static ThemeColor hwb_to_rgb ( double h, double w, double b )
%token <fval> T_DOUBLE "Floating-point number" %token <fval> T_DOUBLE "Floating-point number"
%token <sval> T_STRING "UTF-8 encode string" %token <sval> T_STRING "UTF-8 encode string"
%token <sval> T_MEDIA_TYPE "Media type" %token <sval> T_MEDIA_TYPE "Media type"
%token <cval> T_CHAR "Character"
%token <sval> T_PROP_NAME "property name" %token <sval> T_PROP_NAME "property name"
%token <colorval> T_COLOR_NAME "Color value by name" %token <colorval> T_COLOR_NAME "Color value by name"
%token <sval> T_NAME_ELEMENT "Element name" %token <sval> T_NAME_ELEMENT "Element name"
@@ -362,13 +361,13 @@ t_entry_list T_CONFIGURATION T_BOPEN t_config_property_list_optional T_BCLOSE {
| t_entry_list t_name_prefix_optional t_entry_name_path_selectors T_BOPEN t_property_list_optional T_BCLOSE | t_entry_list t_name_prefix_optional t_entry_name_path_selectors T_BOPEN t_property_list_optional T_BCLOSE
{ {
for ( GList *liter = g_list_first ( $3); liter; liter = g_list_next ( liter ) ) { for ( GList *liter = g_list_first ( $3); liter; liter = g_list_next ( liter ) ) {
ThemeWidget *widget = $1; ThemeWidget *wid = $1;
for ( GList *iter = g_list_first ( (GList*)liter->data ); widget && iter ; iter = g_list_next ( iter ) ) { for ( GList *iter = g_list_first ( (GList*)liter->data ); wid && iter ; iter = g_list_next ( iter ) ) {
widget = rofi_theme_find_or_create_name ( widget, iter->data ); wid = rofi_theme_find_or_create_name ( wid, iter->data );
} }
g_list_free_full ( (GList*)liter->data, g_free ); g_list_free_full ( (GList*)liter->data, g_free );
widget->set = TRUE; wid->set = TRUE;
rofi_theme_widget_add_properties ( widget, $5); rofi_theme_widget_add_properties ( wid, $5);
} }
if ( $5 ) { if ( $5 ) {
g_hash_table_destroy ( $5 ); g_hash_table_destroy ( $5 );
@@ -376,78 +375,78 @@ t_entry_list T_CONFIGURATION T_BOPEN t_config_property_list_optional T_BCLOSE {
g_list_free ( $3 ); g_list_free ( $3 );
} }
| t_entry_list T_PDEFAULTS T_BOPEN t_property_list_optional T_BCLOSE { | t_entry_list T_PDEFAULTS T_BOPEN t_property_list_optional T_BCLOSE {
ThemeWidget *widget = rofi_theme_find_or_create_name ( $1, "*" ); ThemeWidget *wid = rofi_theme_find_or_create_name ( $1, "*" );
rofi_theme_widget_add_properties (widget, $4); rofi_theme_widget_add_properties (wid, $4);
if ( $4 ) { if ( $4 ) {
g_hash_table_destroy ( $4 ); g_hash_table_destroy ( $4 );
} }
} }
| t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP t_property_number T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE { | t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP t_property_number T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE {
gchar *name = g_strdup_printf("@media ( %s: %f )",$4, $6); gchar *name = g_strdup_printf("@media ( %s: %f )",$4, $6);
ThemeWidget *widget = rofi_theme_find_or_create_name ( $1, name ); ThemeWidget *wid = rofi_theme_find_or_create_name ( $1, name );
widget->set = TRUE; wid->set = TRUE;
widget->media = g_slice_new0(ThemeMedia); wid->media = g_slice_new0(ThemeMedia);
widget->media->type = rofi_theme_parse_media_type ( $4 ); wid->media->type = rofi_theme_parse_media_type ( $4 );
widget->media->value = $6; wid->media->value = $6;
for ( unsigned int i = 0; i < $9->num_widgets; i++ ) { for ( unsigned int i = 0; i < $9->num_widgets; i++ ) {
ThemeWidget *d = $9->widgets[i]; ThemeWidget *d = $9->widgets[i];
rofi_theme_parse_merge_widgets(widget, d); rofi_theme_parse_merge_widgets(wid, d);
} }
g_free ( $4 ); g_free ( $4 );
g_free ( name ); g_free ( name );
} }
| t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_INT T_UNIT_PX T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE { | t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_INT T_UNIT_PX T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE {
gchar *name = g_strdup_printf("@media ( %s: %d px )",$4, $6); gchar *name = g_strdup_printf("@media ( %s: %d px )",$4, $6);
ThemeWidget *widget = rofi_theme_find_or_create_name ( $1, name ); ThemeWidget *wid = rofi_theme_find_or_create_name ( $1, name );
widget->set = TRUE; wid->set = TRUE;
widget->media = g_slice_new0(ThemeMedia); wid->media = g_slice_new0(ThemeMedia);
widget->media->type = rofi_theme_parse_media_type ( $4 ); wid->media->type = rofi_theme_parse_media_type ( $4 );
widget->media->value = (double)$6; wid->media->value = (double)$6;
for ( unsigned int i = 0; i < $10->num_widgets; i++ ) { for ( unsigned int i = 0; i < $10->num_widgets; i++ ) {
ThemeWidget *d = $10->widgets[i]; ThemeWidget *d = $10->widgets[i];
rofi_theme_parse_merge_widgets(widget, d); rofi_theme_parse_merge_widgets(wid, d);
} }
g_free ( $4 ); g_free ( $4 );
g_free ( name ); g_free ( name );
} }
| t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_BOOLEAN T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE { | t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_BOOLEAN T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE {
gchar *name = g_strdup_printf("@media ( %s: %s )",$4, $6?"true":"false"); gchar *name = g_strdup_printf("@media ( %s: %s )",$4, $6?"true":"false");
ThemeWidget *widget = rofi_theme_find_or_create_name ( $1, name ); ThemeWidget *wid = rofi_theme_find_or_create_name ( $1, name );
widget->set = TRUE; wid->set = TRUE;
widget->media = g_slice_new0(ThemeMedia); wid->media = g_slice_new0(ThemeMedia);
widget->media->type = rofi_theme_parse_media_type ( $4 ); wid->media->type = rofi_theme_parse_media_type ( $4 );
widget->media->boolv = $6; wid->media->boolv = $6;
for ( unsigned int i = 0; i < $9->num_widgets; i++ ) { for ( unsigned int i = 0; i < $9->num_widgets; i++ ) {
ThemeWidget *d = $9->widgets[i]; ThemeWidget *d = $9->widgets[i];
rofi_theme_parse_merge_widgets(widget, d); rofi_theme_parse_merge_widgets(wid, d);
} }
g_free ( $4 ); g_free ( $4 );
g_free ( name ); g_free ( name );
} }
| t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_ENV_START T_PARENT_LEFT T_BOOLEAN T_COMMA T_BOOLEAN T_PARENT_RIGHT T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE { | t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_ENV_START T_PARENT_LEFT T_BOOLEAN T_COMMA T_BOOLEAN T_PARENT_RIGHT T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE {
gchar *name = g_strdup_printf("@media ( %s: %s )",$4, $8?"true":"false"); gchar *name = g_strdup_printf("@media ( %s: %s )",$4, $8?"true":"false");
ThemeWidget *widget = rofi_theme_find_or_create_name ( $1, name ); ThemeWidget *wid = rofi_theme_find_or_create_name ( $1, name );
widget->set = TRUE; wid->set = TRUE;
widget->media = g_slice_new0(ThemeMedia); wid->media = g_slice_new0(ThemeMedia);
widget->media->type = rofi_theme_parse_media_type ( $4 ); wid->media->type = rofi_theme_parse_media_type ( $4 );
widget->media->boolv = $8; wid->media->boolv = $8;
for ( unsigned int i = 0; i < $14->num_widgets; i++ ) { for ( unsigned int i = 0; i < $14->num_widgets; i++ ) {
ThemeWidget *d = $14->widgets[i]; ThemeWidget *d = $14->widgets[i];
rofi_theme_parse_merge_widgets(widget, d); rofi_theme_parse_merge_widgets(wid, d);
} }
g_free ( $4 ); g_free ( $4 );
g_free ( name ); g_free ( name );
} }
| t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_ENV_START T_PARENT_LEFT T_COMMA T_BOOLEAN T_PARENT_RIGHT T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE { | t_entry_list T_MEDIA T_PARENT_LEFT T_MEDIA_TYPE T_PSEP T_ENV_START T_PARENT_LEFT T_COMMA T_BOOLEAN T_PARENT_RIGHT T_PARENT_RIGHT T_BOPEN t_entry_list T_BCLOSE {
gchar *name = g_strdup_printf("@media ( %s: %s )",$4, $9?"true":"false"); gchar *name = g_strdup_printf("@media ( %s: %s )",$4, $9?"true":"false");
ThemeWidget *widget = rofi_theme_find_or_create_name ( $1, name ); ThemeWidget *wid = rofi_theme_find_or_create_name ( $1, name );
widget->set = TRUE; wid->set = TRUE;
widget->media = g_slice_new0(ThemeMedia); wid->media = g_slice_new0(ThemeMedia);
widget->media->type = rofi_theme_parse_media_type ( $4 ); wid->media->type = rofi_theme_parse_media_type ( $4 );
widget->media->boolv = $9; wid->media->boolv = $9;
for ( unsigned int i = 0; i < $13->num_widgets; i++ ) { for ( unsigned int i = 0; i < $13->num_widgets; i++ ) {
ThemeWidget *d = $13->widgets[i]; ThemeWidget *d = $13->widgets[i];
rofi_theme_parse_merge_widgets(widget, d); rofi_theme_parse_merge_widgets(wid, d);
} }
g_free ( $4 ); g_free ( $4 );
g_free ( name ); g_free ( name );
@@ -487,10 +486,10 @@ t_config_property
{ {
for ( GList *iter = g_list_first( $1) ; iter; iter = g_list_next(iter)){ for ( GList *iter = g_list_first( $1) ; iter; iter = g_list_next(iter)){
ThemeWidget *widget = rofi_configuration; ThemeWidget *wid = rofi_configuration;
widget = rofi_theme_find_or_create_name ( widget, iter->data ); wid = rofi_theme_find_or_create_name ( wid, iter->data );
widget->set = TRUE; wid->set = TRUE;
rofi_theme_widget_add_properties ( widget, $3); rofi_theme_widget_add_properties ( wid, $3);
} }
if ( $3 ) { if ( $3 ) {
g_hash_table_destroy ( $3 ); g_hash_table_destroy ( $3 );
@@ -567,10 +566,6 @@ t_property_element
$$ = rofi_theme_property_create ( P_STRING ); $$ = rofi_theme_property_create ( P_STRING );
$$->value.s = $1; $$->value.s = $1;
} }
| T_CHAR {
$$ = rofi_theme_property_create ( P_CHAR );
$$->value.c = $1;
}
| T_LINK { | T_LINK {
$$ = rofi_theme_property_create ( P_LINK ); $$ = rofi_theme_property_create ( P_LINK );
$$->value.link.name = $1; $$->value.link.name = $1;
@@ -672,11 +667,11 @@ t_property_scale_type
t_color_list t_color_list
: t_property_color { : t_property_color {
$$ = g_list_append ( NULL, g_memdup ( (gconstpointer)&($1), sizeof ( ThemeColor ))); $$ = g_list_append ( NULL, g_memdup2 ( (gconstpointer)&($1), sizeof ( ThemeColor )));
} }
| t_color_list T_COMMA t_property_color { | t_color_list T_COMMA t_property_color {
$$ = g_list_append ($1, g_memdup ( (gconstpointer)&($3), sizeof ( ThemeColor ))); $$ = g_list_append ($1, g_memdup2 ( (gconstpointer)&($3), sizeof ( ThemeColor )));
} }
; ;

23
meson-dist-script Normal file
View File

@@ -0,0 +1,23 @@
#!/bin/sh
set -eu
cd "${MESON_DIST_ROOT}"
# deploy docs
mkdir build
meson setup build -Dprefix=/usr
ninja -C build
cp build/doc/*.1 doc
cp build/doc/*.5 doc
rm -rf build
# configure script
autoreconf -i
rm -rf autom4te.cache
# remove unwanted files in submodules
# (.gitattributes only applies to the root repo)
rm -f subprojects/*/.mailmap
rm -f subprojects/*/.gitignore
rm -f subprojects/*/.travis.yml

View File

@@ -1,6 +1,6 @@
project('rofi', 'c', project('rofi', 'c',
version: '1.7.5+wayland2-dev', version: '1.7.9+wayland1',
meson_version: '>=0.47.0', meson_version: '>=0.59.0',
license: [ 'MIT' ], license: [ 'MIT' ],
default_options: [ default_options: [
'c_std=c99', 'c_std=c99',
@@ -11,19 +11,22 @@ project('rofi', 'c',
c_compiler = meson.get_compiler('c') c_compiler = meson.get_compiler('c')
add_project_arguments( add_project_arguments(
'-I@0@'.format(meson.build_root()), '-I@0@'.format(meson.project_build_root()),
'-I@0@'.format(join_paths(meson.source_root(), 'include')), '-I@0@'.format(join_paths(meson.project_source_root(), 'include')),
'-D_DEFAULT_SOURCE=1', '-D_DEFAULT_SOURCE=1',
language: 'c' language: 'c'
) )
meson.add_dist_script('meson-dist-script')
flags = [ flags = [
'-Wparentheses', '-Wparentheses',
'-Winline', '-Winline',
'-Wunreachable-code', '-Wunreachable-code',
'-Werror=missing-prototypes', '-Werror=missing-prototypes',
'-Wno-overlength-strings', '-Wno-overlength-strings',
'-Wno-inline' # A bit too noisy with Bison… '-Wno-inline', # A bit too noisy with Bison…
'-Wshadow'
] ]
foreach f : flags foreach f : flags
if c_compiler.has_argument(f) if c_compiler.has_argument(f)
@@ -43,7 +46,7 @@ desktop_install_dir = join_paths(get_option('datadir'), 'applications')
icondir = join_paths(get_option('datadir'), 'icons','hicolor', 'scalable', 'apps') icondir = join_paths(get_option('datadir'), 'icons','hicolor', 'scalable', 'apps')
glib_min_major=2 glib_min_major=2
glib_min_minor=40 glib_min_minor=72
glib_min_version='@0@.@1@'.format(glib_min_major, glib_min_minor) glib_min_version='@0@.@1@'.format(glib_min_major, glib_min_minor)
plugins_deps = [ plugins_deps = [
dependency('glib-2.0', version: '>= @0@'.format(glib_min_version)), dependency('glib-2.0', version: '>= @0@'.format(glib_min_version)),
@@ -84,6 +87,7 @@ if xcb_enabled
dependency('xcb-randr'), dependency('xcb-randr'),
dependency('xcb-cursor'), dependency('xcb-cursor'),
dependency('xcb-xinerama'), dependency('xcb-xinerama'),
dependency('xcb-keysyms'),
dependency('cairo-xcb'), dependency('cairo-xcb'),
dependency('libstartup-notification-1.0'), dependency('libstartup-notification-1.0'),
] ]
@@ -152,7 +156,7 @@ config_h = configure_file(output: 'config.h', configuration: header_conf)
nk_options = [ nk_options = [
'bindings=true', 'bindings=true',
'git-work-tree=@0@'.format(meson.source_root()), 'git-work-tree=@0@'.format(meson.project_source_root()),
] ]
nk = subproject('libnkutils', default_options: nk_options) nk = subproject('libnkutils', default_options: nk_options)
nk_subproject_options = nk.get_variable('nk_options') nk_subproject_options = nk.get_variable('nk_options')
@@ -285,11 +289,13 @@ theme_lexer = flex.process(theme_lexer_sources)
theme_parser = bison.process(theme_parser_sources) theme_parser = bison.process(theme_parser_sources)
if wayland_enabled if wayland_enabled
wayland_sys_protocols_dir = wayland_protocols.get_pkgconfig_variable('pkgdatadir') fs = import('fs')
wayland_sys_protocols_dir = wayland_protocols.get_variable(pkgconfig: 'pkgdatadir')
wayland_scanner = find_program('wayland-scanner') wayland_scanner = find_program('wayland-scanner')
protocols = files( protocols = files(
wayland_sys_protocols_dir + '/stable/xdg-shell/xdg-shell.xml', wayland_sys_protocols_dir + '/stable/xdg-shell/xdg-shell.xml',
wayland_sys_protocols_dir + '/unstable/primary-selection/primary-selection-unstable-v1.xml', wayland_sys_protocols_dir + '/unstable/primary-selection/primary-selection-unstable-v1.xml',
wayland_sys_protocols_dir + '/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml',
'protocols/wlr-foreign-toplevel-management-unstable-v1.xml', 'protocols/wlr-foreign-toplevel-management-unstable-v1.xml',
'protocols/wlr-layer-shell-unstable-v1.xml', 'protocols/wlr-layer-shell-unstable-v1.xml',
) )
@@ -306,13 +312,13 @@ if wayland_enabled
proto_headers = [] proto_headers = []
foreach p : protocols foreach p : protocols
proto_srcs += custom_target( proto_srcs += custom_target(
'@0@'.format(p).underscorify() + '_protocol_c', fs.stem(p).underscorify() + '_protocol_c',
input: p, input: p,
output: '@BASENAME@-protocol.c', output: '@BASENAME@-protocol.c',
command: [wayland_scanner, 'public-code', '@INPUT@', '@OUTPUT@'], command: [wayland_scanner, 'public-code', '@INPUT@', '@OUTPUT@'],
) )
proto_headers += custom_target( proto_headers += custom_target(
'@0@'.format(p).underscorify() + '_protocol_h', fs.stem(p).underscorify() + '_protocol_h',
input: p, input: p,
output: '@BASENAME@-protocol.h', output: '@BASENAME@-protocol.h',
command: [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'], command: [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'],
@@ -344,16 +350,6 @@ rofi = executable('rofi', rofi_sources + [
) )
subdir('doc') subdir('doc')
install_man(
'doc/rofi.1',
'doc/rofi-theme-selector.1',
'doc/rofi-sensible-terminal.1',
'doc/rofi-script.5',
'doc/rofi-theme.5',
'doc/rofi-debugging.5',
'doc/rofi-dmenu.5',
'doc/rofi-keys.5',
)
install_data( install_data(
'themes/Adapta-Nokto.rasi', 'themes/Adapta-Nokto.rasi',
@@ -615,7 +611,7 @@ if cppcheck.found()
'--enable=all', '--enable=all',
'-Uerror_dialog', '-Uerror_dialog',
'--inconclusive', '--inconclusive',
'-I@0@'.format(join_paths(meson.source_root(), 'include')), '-I@0@'.format(join_paths(meson.project_source_root(), 'include')),
rofi_sources rofi_sources
], ],
) )

View File

@@ -1,6 +1,6 @@
option('drun', type: 'boolean', value: true, description: 'Desktop file mode') option('drun', type: 'boolean', value: true, description: 'Desktop file mode')
option('window', type: 'boolean', value: true, description: 'Window switcher mode') option('window', type: 'boolean', value: true, description: 'Window switcher mode')
option('check', type: 'feature', description: 'Build and run libcheck-based tests') option('check', type: 'feature', description: 'Build and run libcheck-based tests')
option('imdkit', type: 'boolean', value: true, description: 'IMDKit support')
option('wayland', type: 'feature', value: 'enabled', description: 'Build with wayland support') option('wayland', type: 'feature', value: 'enabled', description: 'Build with wayland support')
option('xcb', type: 'feature', value: 'enabled', description: 'Build with X11/xcb support') option('xcb', type: 'feature', value: 'enabled', description: 'Build with X11/xcb support')
option('imdkit', type: 'boolean', value: false, description: 'IMDKit support')

View File

@@ -158,6 +158,13 @@ Force **rofi** mode to first read all data from stdin before showing the selecti
Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, Note: the default asynchronous mode will also be automatically disabled if used with conflicting options,
such as `-dump`, `-only-match` or `-auto-select`. 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* `-window-title` *title*
Set name used for the window title. Will be shown as Rofi - *title* Set name used for the window title. Will be shown as Rofi - *title*
@@ -170,37 +177,6 @@ Position **rofi** over the window with the given X11 window ID.
Set ellipsize mode to start. So, the end of the string is visible. 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*: "☑ "
`-ballot-unselected-str` *string*
When multi-select is enabled, prefix this string when element is not selected.
*default*: "☐ "
`-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 ## RETURN VALUE
@@ -211,7 +187,7 @@ Extra options for individual rows can be also set. See the **rofi-script(5)** ma
## SEE ALSO ## SEE ALSO
rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7) rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1)
## AUTHOR ## AUTHOR

View File

@@ -52,15 +52,6 @@ configuration {
} }
``` ```
## Unsetting a binding
To unset a binding, pass an empty string.
```css
configuration {
kb-clear-line: "";
}
```
## Keyboard Bindings ## Keyboard Bindings
@@ -74,12 +65,6 @@ Paste clipboard
**Default**: Control+v,Insert **Default**: Control+v,Insert
### **kb-secondary-copy**
Copy current selection to clipboard
**Default**: Control+c
### **kb-clear-line** ### **kb-clear-line**
Clear input line Clear input line
@@ -151,12 +136,12 @@ Accept entry
**Default**: Control+j,Control+m,Return,KP_Enter **Default**: Control+j,Control+m,Return,KP_Enter
### **kb-accept-custom** ### **kb-accept-custom**
Use entered text as command (in ssh/run modes) Use entered text as command (in ssh/run modi)
**Default**: Control+Return **Default**: Control+Return
### **kb-accept-custom-alt** ### **kb-accept-custom-alt**
Use entered text as command (in ssh/run modes) Use entered text as command (in ssh/run modi)
**Default**: Control+Shift+Return **Default**: Control+Shift+Return
@@ -198,7 +183,7 @@ Go to the next column
### **kb-row-up** ### **kb-row-up**
Select previous entry Select previous entry
**Default**: Up,Control+p **Default**: Up,Control+p,ISO_Left_Tab
### **kb-row-down** ### **kb-row-down**
Select next entry Select next entry
@@ -208,17 +193,7 @@ Select next entry
### **kb-row-tab** ### **kb-row-tab**
Go to next row, if one left, accept it, if no left next mode. Go to next row, if one left, accept it, if no left next mode.
**Default**: **Default**: Tab
### **kb-element-next**
Go to next row.
**Default**: Tab
### **kb-element-prev**
Go to previous row.
**Default**: ISO_Left_Tab
### **kb-page-prev** ### **kb-page-prev**
Go to the previous page Go to the previous page

View File

@@ -2,14 +2,13 @@
## NAME ## NAME
**rofi script mode** - Rofi format for scriptable mode. **rofi script mode** - Rofi format for scriptable modi.
## DESCRIPTION ## DESCRIPTION
**rofi** supports modes that use simple scripts in the background to generate a **rofi** supports modes that use simple scripts in the background to generate a list and process the result from user
list and process the result from user actions. This provide a simple interface actions. This provide a simple interface to make simple extensions to rofi.
to make simple extensions to rofi.
## USAGE ## USAGE
@@ -19,18 +18,17 @@ To specify a script mode, set a mode with the following syntax: "{name}:{executa
For example: For example:
``` ```
rofi -show fb -modes "fb:file_browser.sh" rofi -show fb -modi "fb:file_browser.sh"
``` ```
The name should be unique. The name should be unique.
## API ## API
Rofi calls the executable without arguments on startup. This should generate a Rofi calls the executable without arguments on startup. This should generate a list of options, separated by a newline
list of options, separated by a newline (`\n`) (This can be changed by the (`\n`) (This can be changed by the script).
script). If the user selects an option, rofi calls the executable with the text If the user selects an option, rofi calls the executable with the text of that option as the first argument.
of that option as the first argument. If the script returns no entries, rofi If the script returns no entries, rofi quits.
quits.
A simple script would be: A simple script would be:
@@ -65,10 +63,6 @@ An integer number with the current state:
Environment get set when selected entry get set with the property value of the 'info' row option, if set. 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 ## Passing mode options
Extra options, like setting the prompt, can be set by the script. Extra options, like setting the prompt, can be set by the script.
@@ -90,10 +84,6 @@ The following extra options exists:
* **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. * **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. * **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. * **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 ## Parsing row options

View File

@@ -4,165 +4,19 @@
**rofi-theme** - Rofi theme format files **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:
```css
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:
```css
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:
```css
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:
```css
element {
orientation: horizontal;
children: [ element-text, element-icon ];
spacing: 5px;
}
```
Resulting in the following packing:
```
┌─────────────────────────────────────────────────────────────────────┐
│ element │
│ ┌─────────────────────────────────────────────┐ ┌─────────────────┐ │
│ │element─text │ │ element─icon │ │
│ └─────────────────────────────────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
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.
```css
element-icon {
size: 2.5em;
}
```
```
┌─────────────────────────────────────────────────────────────────────┐
│ element │
│ ┌─────────────────────────────────────────────┐ ┌─────────────────┐ │
│ │element─text │ │ element │ │
│ │ │ │ ─ │ │
│ │ │ │ icon │ │
│ └─────────────────────────────────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
In this example we specify the size in the [em](https://www.w3.org/Style/LieBos3e/em) unit.
Now lets change the text color of both the `entry` and the `element-text` widget to red and background to blue.
```css
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:
```css
element-text {
vertical-align: 0.5;
}
```
```
┌─────────────────────────────────────────────────────────────────────┐
│ element │
│ ┌─────────────────────────────────────────────┐ ┌─────────────────┐ │
│ │ │ │ element │ │
│ │element-text │ │ ─ │ │
│ │ │ │ icon │ │
│ └─────────────────────────────────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
We can also specify the color and width of the cursor. You could, for example,
create a crimson block cursor like this:
```css
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:
```bash
rofi -dump-theme
```
## DEFAULT THEME LOADING ## DEFAULT THEME LOADING
By default, rofi loads the default theme. This theme is **always** loaded. By default, rofi loads the default theme. This theme is **always** loaded.
The default configuration contains: In the default (always loaded) configuration it does:
```css ```css
@theme "default" @theme "default"
``` ```
To unload the default theme, and load another theme, add the `@theme` statement To unload the default theme, and load another theme, add `@theme` to your
to your `config.rasi` file. `config.rasi` file.
If you have a theme loaded via `@theme` or use the default theme, you can tweak 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. it by adding overriding elements at the end of your `config.rasi` file.
For the difference between `@import` and `@theme` see the `Multiple file For the difference between `@import` and `@theme` see the `Multiple file
@@ -185,7 +39,7 @@ user-friendly way. Therefore, a new file format has been created, replacing the
## Encoding ## Encoding
The encoding of the file is UTF-8. Both unix (`\n`) and windows (`\r\n`) newlines format are supported. But unix is The encoding of the file is utf-8. Both unix (`\n`) and windows (`\r\n`) newlines format are supported. But unix is
preferred. preferred.
## Comments ## Comments
@@ -193,7 +47,7 @@ preferred.
C and C++ file comments are supported. C and C++ file comments are supported.
* Anything after `// ` and before a newline is considered a comment. * Anything after `// ` and before a newline is considered a comment.
* Everything between `/*` and `*/` is a comment, this comment can span multiple lines. * Everything between `/*` and `*/` is a comment.
Comments can be nested and the C comments can be inline. Comments can be nested and the C comments can be inline.
@@ -237,7 +91,7 @@ abbreviation for **r**ofi **a**dvanced **s**tyle **i**nformation.
## Basic Structure ## Basic Structure
Each element has a section with defined properties. Global properties can be defined in section `* { }`. Each element has a section with defined properties. Global properties can be defined in section `* { }`.
Sub-section names begin with an optional hash symbol `#`. Sub-section names begin with a hash symbol `#`.
It is advised to define the *global properties section* on top of the file to It is advised to define the *global properties section* on top of the file to
make inheritance of properties clearer. make inheritance of properties clearer.
@@ -277,8 +131,8 @@ A theme can have multiple element theme sections.
The element path can consist of multiple names separated by whitespace or dots. The element path can consist of multiple names separated by whitespace or dots.
Each element may contain any number of letters, numbers and `-`'s. Each element may contain any number of letters, numbers and `-`'s.
The first element in the element path can optionally start with a `#` (for The first element in the element path should always start with a `#`.
historic reasons). Multiple elements can be specified by a `,`. Multiple elements can be specified by a `,`.
This is a valid element name: This is a valid element name:
@@ -299,8 +153,8 @@ element normal normal, button {
} }
``` ```
Each section inherits the global properties. Properties can be explicitly Each section inherits the global properties. Properties can be explicitly inherited from their parent with the
inherited from their parent with the `inherit` keyword. `inherit` keyword.
In the following example: In the following example:
```css ```css
@@ -316,8 +170,7 @@ mainbox {
} }
``` ```
The element `mainbox` will have the following set of properties (if `mainbox` The element `mainbox` will have the following set of properties (if `mainbox` is a child of `window`):
is a child of `window`):
```css ```css
a: 1; a: 1;
@@ -381,15 +234,7 @@ For example:
font: "Awasome 12"; font: "Awasome 12";
``` ```
The string must be valid UTF-8, special characters can be escaped: The string must be valid UTF-8.
```css
text {
content: "Line one\n\tIndented line two";
}
```
The following special characters can be escaped: `\b`, `\f`, `\n`, `\r`, `\t`, `\v`, `\` and `"`.
## Integer ## Integer
@@ -510,18 +355,8 @@ should be applied.
* `bold`: make the text thicker then the surrounding text. * `bold`: make the text thicker then the surrounding text.
* `italic`: put the highlighted text in script type (slanted). * `italic`: put the highlighted text in script type (slanted).
* `underline`: put a line under the text. * `underline`: put a line under the highlighted text.
* `strikethrough`: put a line through the text. * `strikethrough`: put a line through the highlighted 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 ## Line style
@@ -566,21 +401,17 @@ Rofi supports some maths in calculating sizes. For this it uses the CSS syntax:
width: calc( 100% - 37px ); width: calc( 100% - 37px );
``` ```
```css
width: calc( 20% min 512 );
```
It supports the following operations: It supports the following operations:
* `+` : Add * `+` : Add
* `-` : Subtract * `-` : Subtract
* `/` : Divide * `/` : Divide
* `*` : Multiply * `*` : Multiply
* `%` : Modulo * `%` : Multiply
* `min` : Minimum of lvalue or rvalue; * `min` : Minimum of l or rvalue;
* `max` : Maximum of lvalue or rvalue; * `max` : Maximum of l or rvalue;
* `floor` : Round down lvalue to the next multiple of rvalue * `floor` : Round down lvalue to the next multiple of rvalue
* `ceil` : Round up 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 * `round` : Round lvalue to the next multiple of rvalue
It uses the C precedence ordering. It uses the C precedence ordering.
@@ -625,28 +456,24 @@ style property.
Indicate a place on the window/monitor. 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 │
└─────────────┴─────────────┴─────────────┘
``` ```
* 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 ## Visibility
It is possible to hide widgets: It is possible to hide widgets:
```css
inputbar { inputbar {
enabled: false; enabled: false;
} }
```
## Reference ## Reference
@@ -795,8 +622,6 @@ The current widgets available in **rofi**:
* `entry`: the main entry @textbox * `entry`: the main entry @textbox
* `num-rows`: Shows the total number of rows. * `num-rows`: Shows the total number of rows.
* `num-filtered-rows`: Shows the total number of rows after filtering. * `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. * `listview`: The listview.
* `scrollbar`: the listview scrollbar * `scrollbar`: the listview scrollbar
* `element`: a box in the listview holding the entries * `element`: a box in the listview holding the entries
@@ -868,22 +693,22 @@ The following properties are currently supported:
### all widgets: ### all widgets:
* **enabled**: enable/disable rendering of the widget * **enabled**: enable/disable the widget
* **padding**: padding * **padding**: padding
Padding on the inside of the widget Padding on the inside of the widget
* **margin**: padding * **margin**: padding
Margin on the outside of the widget Margin on the outside of the widget
* **border**: border * **border**: border
Border around the widget (between padding and margin)/ Border around the widget (between padding and margin)/
* **border-radius**: padding * **border-radius**: padding
Sets a radius on the corners of the borders. Sets a radius on the corners of the borders.
* **background-color**: color * **background-color**: color
Background color Background color
* **background-image**: image * **background-image**: image
Background image Background image
* **border-color**: color * **border-color**: color
Color of the border Color of the border
* **cursor**: cursor * **cursor**: cursor
Type of mouse cursor that is set when the mouse pointer is hovered over the widget. Type of mouse cursor that is set when the mouse pointer is hovered over the widget.
### window: ### window:
@@ -906,8 +731,8 @@ The following properties are currently supported:
Window is fullscreen. Window is fullscreen.
* **width**: distance * **width**: distance
The width of the window The width of the window
* **x-offset**: distance * **x-offset**: distance
* **y-offset**: distance * **y-offset**: distance
The offset of the window to the anchor point, allowing you to push the window left/right/up/down The offset of the window to the anchor point, allowing you to push the window left/right/up/down
@@ -922,7 +747,7 @@ The following properties are currently supported:
* **orientation**: orientation * **orientation**: orientation
Set the direction the elements are packed. Set the direction the elements are packed.
* **spacing**: distance * **spacing**: distance
Distance between the packed elements. Distance between the packed elements.
### textbox: ### textbox:
@@ -930,18 +755,16 @@ The following properties are currently supported:
* **background-color**: color * **background-color**: color
* **border-color**: the color used for the border around the widget. * **border-color**: the color used for the border around the widget.
* **font**: the font used by this textbox (string). * **font**: the font used by this textbox (string).
* **str**/**content**: the string to display 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). * **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). * **horizontal-align**: Horizontal alignment of the text. A number between 0 (left) and 1 (right).
* **text-color**: the text color to use. * **text-color**: the text color to use.
* **text-transform**: text style {color} for the whole text.
* **highlight**: text style {color}. * **highlight**: text style {color}.
color is optional, multiple highlight styles can be added like: bold underline italic #000000; color is optional, multiple highlight styles can be added like: bold underline italic #000000;
This option is only available on the `element-text` widget. This option is only available on the `element-text` widget.
* **width**: override the desired width for the textbox. * **width**: override the desired width for the textbox.
* **content**: Set the displayed text (String). * **content**: Set the displayed text (String).
* **placeholder**: Set the displayed text (String) when nothing is entered. * **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. * **placeholder-color**: Color of the placeholder text.
* **blink**: Enable/Disable blinking on an input textbox (Boolean). * **blink**: Enable/Disable blinking on an input textbox (Boolean).
* **markup**: Force markup on, beware that only valid pango markup strings are shown. * **markup**: Force markup on, beware that only valid pango markup strings are shown.
@@ -949,14 +772,6 @@ The following properties are currently supported:
Set the location of tab stops by their distance from the beginning of the line. Set the location of tab stops by their distance from the beginning of the line.
Each distance should be greater than the previous one. 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). 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: ### listview:
* **columns**: integer * **columns**: integer
@@ -979,13 +794,8 @@ The following properties are currently supported:
Indicate how elements are stacked. Horizontal implements the dmenu style. Indicate how elements are stacked. Horizontal implements the dmenu style.
* **reverse**: boolean * **reverse**: boolean
Reverse the ordering (top down to bottom up). 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 * **fixed-columns**: boolean
Do not reduce the number of columns shown when number of visible elements is not enough to fill them all. 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`. Each element is a `box` called `element`. Each `element` can contain an `element-icon` and `element-text`.
@@ -1026,42 +836,42 @@ The box can be vertical or horizontal. This is loosely inspired by [GTK](http://
The current layout of **rofi** is structured as follows: The current layout of **rofi** is structured as follows:
``` ```
┌────────────────────────────────────────────────────────────────────────────────────┐ |------------------------------------------------------------------------------------|
window {BOX:vertical} | window {BOX:vertical} |
│ ┌───────────────────────────────────────────────────────────────────────────────┐ | |-------------------------------------------------------------------------------| |
│ │ mainbox {BOX:vertical} | | mainbox {BOX:vertical} | |
│ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ | | |---------------------------------------------------------------------------| | |
│ │ │ inputbar {BOX:horizontal} │ │ | | | inputbar {BOX:horizontal} | | |
│ │ │ ┌─────────┐ ┌─┐ ┌───────────────────────────────┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │ │ | | | |---------| |-| |---------------------------------|---| |---| |---| |---| | | |
│ │ │ │ prompt │ │:│ │ entry │ │#fr│ │ / │ │#ns│ │ci │ │ │ | | | | prompt | |:| | entry |#fr| | / | |#ns| |ci | | | |
│ │ │ └─────────┘ └─┘ └───────────────────────────────┘ └───┘ └───┘ └───┘ └───┘ │ │ | | | |---------| |_| |---------------------------------|---| |---| |---| |---| | | |
│ │ └───────────────────────────────────────────────────────────────────────────┘ │ | | |---------------------------------------------------------------------------| | |
│ │ | | | |
│ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ | | |---------------------------------------------------------------------------| | |
│ │ │ message │ │ | | | message | | |
│ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ | | | |-----------------------------------------------------------------------| | | |
│ │ │ │ textbox │ │ │ | | | | textbox | | | |
│ │ │ └───────────────────────────────────────────────────────────────────────┘ │ │ | | | |-----------------------------------------------------------------------| | | |
│ │ └───────────────────────────────────────────────────────────────────────────┘ │ | | |---------------------------------------------------------------------------| | |
│ │ | | | |
│ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ | | |-----------------------------------------------------------------------------| |
│ │ │ listview │ │ │ | | | listview | |
│ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ | | | |------------------------------------------------------------------------] | |
│ │ │ │ element │ │ │ | | | | element | | |
│ │ │ │ ┌─────────────────┐ ┌─────────────────────────────────────────────┐ │ │ │ | | | | |-----------------| |------------------------------------------------] | | |
│ │ │ │ │elementicon │ │elementtext │ │ │ │ | | | | |element-icon | |element-text | | | |
│ │ │ │ └─────────────────┘ └─────────────────────────────────────────────┘ │ │ │ | | | | |-----------------| |------------------------------------------------| | | |
│ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ | | | |------------------------------------------------------------------------] | |
│ │ └───────────────────────────────────────────────────────────────────────────┘ │ | | |-----------------------------------------------------------------------------| |
│ │ | | | |
│ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ | | |---------------------------------------------------------------------------| | |
│ │ │ modeswitcher {BOX:horizontal} │ │ | | | mode-switcher {BOX:horizontal} | | |
│ │ │ ┌───────────────┐ ┌───────────────┐ ┌──────────────┐ ┌───────────────┐ │ │ | | | |---------------| |---------------| |--------------| |---------------| | | |
│ │ │ │ Button Button Button │ │ Button │ │ │ | | | | Button | | Button | | Button | | Button | | | |
│ │ │ └───────────────┘ └───────────────┘ └──────────────┘ └───────────────┘ │ │ | | | |---------------| |---------------| |--------------| |---------------| | | |
│ │ └───────────────────────────────────────────────────────────────────────────┘ │ | | |---------------------------------------------------------------------------| | |
│ └───────────────────────────────────────────────────────────────────────────────┘ | |-------------------------------------------------------------------------------| |
└────────────────────────────────────────────────────────────────────────────────────┘ |------------------------------------------------------------------------------------|
``` ```
@@ -1072,15 +882,16 @@ The current layout of **rofi** is structured as follows:
### Error message structure ### Error message structure
``` ```
┌──────────────────────────────────────────────────────────────────────────────────┐ |-----------------------------------------------------------------------------------|
window {BOX:vertical} | window {BOX:vertical} |
│ ┌─────────────────────────────────────────────────────────────────────────────┐ | |------------------------------------------------------------------------------| |
│ │ errormessage {BOX:vertical} | | error-message {BOX:vertical} | |
│ │ ┌────────────────────────────────────────────────────────────────────────┐ | | |-------------------------------------------------------------------------| | |
│ │ │ textbox │ │ | | | textbox | | |
│ │ └────────────────────────────────────────────────────────────────────────┘ | | |-------------------------------------------------------------------------| | |
│ └─────────────────────────────────────────────────────────────────────────────┘ | |------------------------------------------------------------------------------| |
└──────────────────────────────────────────────────────────────────────────────────┘ |-----------------------------------------------------------------------------------|
``` ```
@@ -1224,18 +1035,18 @@ element selected {
Just like CSS, **rofi** uses the box model for each widget. Just like CSS, **rofi** uses the box model for each widget.
``` ```
┌──────────────────────────────────────────────────────────────────┐ |-------------------------------------------------------------------|
margin | margin |
┌────────────────────────────────────────────────────────────┐ | |-------------------------------------------------------------| |
border | | border | |
│ ┌────────────────────────────────────────────────────────┐ │ | | |---------------------------------------------------------| | |
│ │ padding │ │ | | | padding | | |
│ │ ┌────────────────────────────────────────────────────┐ │ │ | | | |-----------------------------------------------------| | | |
│ │ │ content │ │ │ | | | | content | | | |
│ │ └────────────────────────────────────────────────────┘ │ │ | | | |-----------------------------------------------------| | | |
│ └────────────────────────────────────────────────────────┘ │ | | |---------------------------------------------------------| | |
└────────────────────────────────────────────────────────────┘ | |-------------------------------------------------------------| |
└──────────────────────────────────────────────────────────────────┘ |-------------------------------------------------------------------|
``` ```
Explanation of the different parts: Explanation of the different parts:
@@ -1259,15 +1070,15 @@ Widgets that can pack more then one child widget (currently box and listview) ha
This property sets the distance between the packed widgets (both horizontally and vertically). This property sets the distance between the packed widgets (both horizontally and vertically).
``` ```
┌───────────────────────────────────────┐ |---------------------------------------|
│ ┌────────┐ s ┌────────┐ s ┌────────┐ | |--------| s |--------| s |-------| |
│ │ child p child p child | | child | p | child | p | child | |
│ │ a a | | | a | | a | | |
│ │ c c | | | c | | c | | |
│ │ i i | | | i | | i | | |
│ │ n n | | | n | | n | | |
│ └────────┘ g └────────┘ g └────────┘ | |--------| g |--------| g |-------| |
└───────────────────────────────────────┘ |---------------------------------------|
``` ```
### Advanced box packing ### Advanced box packing
@@ -1275,15 +1086,15 @@ This property sets the distance between the packed widgets (both horizontally an
More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered: More dynamic spacing can be achieved by adding dummy widgets, for example to make one widget centered:
``` ```
┌────────────────────────────────────────────────────┐ |----------------------------------------------------|
┌───────────────┐ ┌────────┐ ┌───────────────┐ | |---------------| |--------| |---------------| |
dummy child dummy | | dummy | | child | | dummy | |
expand: true; expand: true; | | expand: true; | | | | expand: true; | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
└───────────────┘ └────────┘ └───────────────┘ | |---------------| |--------| |---------------| |
└────────────────────────────────────────────────────┘ |----------------------------------------------------|
``` ```
If both dummy widgets are set to expand, `child` will be centered. Depending on the `expand` flag of child the If both dummy widgets are set to expand, `child` will be centered. Depending on the `expand` flag of child the
@@ -1343,7 +1154,6 @@ It supports the following keys as constraint:
* `min-aspect-ratio` load when aspect ratio is over value. * `min-aspect-ratio` load when aspect ratio is over value.
* `max-aspect-ratio`: load when aspect ratio is under value. * `max-aspect-ratio`: load when aspect ratio is under value.
* `monitor-id`: The monitor id, see rofi -help for id's. * `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 takes an integer number or a fraction, for integer number `px` can be added.
@@ -1354,12 +1164,6 @@ It supports the following keys as constraint:
} }
``` ```
```
@media ( enabled: env(DO_LIGHT, false ) {
}
```
## Font Parsing ## Font Parsing
@@ -1377,34 +1181,6 @@ Or
FontAwesome 22 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:
```bash
echo -en "testing\0icon\x1f<span color='red'>⏻</span>" | ./rofi -dmenu
```
Getting supported icon formats:
```bash
G_MESSAGES_DEBUG=Helpers.IconFetcher rofi
```
This uses the debug framework and prints out a list of supported image file
extensions.
## Multiple file handling ## Multiple file handling
The rasi file format offers two methods of including other files. The rasi file format offers two methods of including other files.

View File

@@ -11,45 +11,30 @@
## DESCRIPTION ## DESCRIPTION
**rofi** is an X11 pop-up window switcher, run dialog, dmenu replacement, and **rofi** is an X11 pop-up window switcher, run dialog, dmenu replacement, and more. It focuses on
more. It focuses on being fast to use and have minimal distraction. It supports being fast to use and have minimal distraction. It supports keyboard and mouse navigation, type to
keyboard and mouse navigation, type to filter, tokenized search and more. filter, tokenized search and more.
## USAGE ## USAGE
**rofi**'s main functionality is to assist in your workflow, allowing you to **rofi**'s main functionality is to assist in your workflow, allowing you to quickly switch
quickly switch between windows, start applications or log into a remote machine between windows, start applications or log into a remote machine via `ssh`.
via `ssh`. There are different *modes* for different types of actions. **rofi** There are different *modi* for different types of actions.
is a standalone application and should not be integrated into scripts. For **rofi** is a standalone application and should not be integrated into scripts.
integration into scripts it has a special mode that functions as a (drop-in) For integration into scripts it has a special mode that functions as a
replacement for **dmenu(1)**. See emulating dmenu below. (drop-in) replacement for **dmenu(1)**. See emulating dmenu below.
### Running rofi ### Running rofi
To launch **rofi** directly in a certain mode, specify a mode with `rofi -show <mode>`. To launch **rofi** directly in a certain mode, specify a mode with `rofi -show <mode>`.
To show the `drun` dialog: To show the `run` dialog:
```bash
rofi -show drun
```
A very useful setup in minimalistic window managers is to combine `drun`, `run`
with `window` mode:
```bash
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.
rofi -show run
### Emulating dmenu ### Emulating dmenu
**rofi** can emulate **dmenu(1)** (a dynamic menu for X11) when launched with **rofi** can emulate **dmenu(1)** (a dynamic menu for X11) when launched with the `-dmenu` flag.
the `-dmenu` flag.
For more information see **rofi-dmenu(5)**. For more information see **rofi-dmenu(5)**.
@@ -75,29 +60,6 @@ To get a template config file, run: `rofi -dump-config > config.rasi`
This will contain (commented) all current configuration options, modified options are uncommented. 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:
```css
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:
```css
configuration {
dpi: 72;
}
```
The configuration system supports the following types: The configuration system supports the following types:
* string * string
@@ -123,8 +85,8 @@ Below is a list of the most important options:
`-help` `-help`
The help option shows the full list of command-line options and the current set The help option shows the full list of command-line options and the current set values.
values. These include dynamic (run-time generated) options. These include dynamic (run-time generated) options.
`-version` `-version`
@@ -143,11 +105,6 @@ Dump the current active theme, in rasi format, to stdout and exit.
Try to parse the file and return 0 when successful, non-zero when failed. 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* `-threads` *num*
Specify the number of threads **rofi** should use: Specify the number of threads **rofi** should use:
@@ -174,45 +131,41 @@ Or get the options from a script:
~/my_script.sh | rofi -dmenu ~/my_script.sh | rofi -dmenu
See the **rofi-dmenu(5)** manpage for more information.
`-show` *mode* `-show` *mode*
Open **rofi** in a certain mode. Available modes are `window`, `run`, `drun`, Open **rofi** in a certain mode. Available modes are `window`, `run`, `drun`, `ssh`, `combi`.
`ssh`, `combi`. The special argument `keys` can be used to open a searchable The special argument `keys` can be used to open a searchable list of supported key bindings
list of supported key bindings (see *KEY BINDINGS*)
(see the **rofi-keys(5)** manpage)
To show the run-dialog: To show the run-dialog:
rofi -show run rofi -show run
If `-show` is the last option passed to rofi, the first enabled modes is shown. If `-show` is the last option passed to rofi, the first enabled modi is shown.
`-modes` *mode1,mode2* `-modi` *mode1,mode2*
Specify an ordered, comma-separated list of modes to enable. Specify an ordered, comma-separated list of modes to enable.
Enabled modes can be changed at runtime. Default key is `Ctrl+Tab`. Enabled modes can be changed at runtime. Default key is `Ctrl+Tab`.
If no modes are specified, all configured modes will be enabled. If no modes are specified, all configured modes will be enabled.
To only show the `run` and `ssh` launcher: To only show the `run` and `ssh` launcher:
rofi -modes "run,ssh" -show run rofi -modi "run,ssh" -show run
Custom modes can be added using the internal `script` mode. Each such mode has Custom modes can be added using the internal `script` mode. Each such mode has two parameters:
two parameters:
<name>:<script> <name>:<script>
Example: Have a mode called 'Workspaces' using the `i3_switch_workspaces.sh` 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 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 Notes: The i3 window manager dislikes commas in the command when specifying an exec command.
exec command. For that case, `#` can be used as a separator. For that case, `#` can be used as a separator.
**TIP**: The name is allowed to contain spaces: **TIP**: The name is allowed to contain spaces:
rofi -modes "My File Browser:fb.sh" -show "My File Browser" rofi -modi "My File Browser:fb.sh" -show "My File Browser"
`-case-sensitive` `-case-sensitive`
@@ -266,6 +219,10 @@ Specify icon theme to be used.
If not specified default theme from DE is used, *Adwaita* and *gnome* themes act as If not specified default theme from DE is used, *Adwaita* and *gnome* themes act as
fallback themes. 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` `-markup`
Use Pango markup to format output wherever possible. Use Pango markup to format output wherever possible.
@@ -278,33 +235,6 @@ Make **rofi** react like a normal application window. Useful for scripts like Cl
Make rofi steal focus on launch and restore close to window that held it when launched. 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:
```css
configuration {
<mode>{
fallback-icon: "<icon name>";
}
}
```
Example
```css
configuration {
run,drun {
fallback-icon: "application-x-addon";
}
}
```
### Matching ### Matching
`-matching` *method* `-matching` *method*
@@ -417,7 +347,7 @@ Keep a fixed number of visible lines.
`-sidebar-mode` `-sidebar-mode`
Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom. Open in sidebar-mode. In this mode, a list of all enabled modes is shown at the bottom.
(See `-modes` option) (See `-modi` option)
To show sidebar, use: To show sidebar, use:
rofi -show run -sidebar-mode rofi -show run -sidebar-mode
@@ -543,12 +473,6 @@ See *PATTERN*.
Default: *{cmd}* 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* `-run-shell-command` *cmd*
Set command to execute when running an application in a shell. Set command to execute when running an application in a shell.
@@ -578,7 +502,7 @@ Format what is being displayed for windows.
* **r**: role * **r**: role
* **c**: class * **c**: class
*len*: maximum field length (0 for auto-size). If length is negative, the entry will be unchanged. *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. If length is positive, the entry will be truncated or padded to fill that length.
@@ -606,39 +530,16 @@ configuration {
} }
} }
``` ```
You can hide the currently active window with the 'hide-active-window' setting:
```css
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:
```css
configuration {
window {
prefer-icon-theme: true;
}
}
```
or pass `-window-prefer-icon-theme true` on command line.
### Combi settings ### Combi settings
`-combi-modes ` *mode1*,*mode2* `-combi-modi` *mode1*,*mode2*
The modes to combine in combi mode. The modi to combine in combi mode.
For syntax to `-combi-modes`, see `-modes`. For syntax to `-combi-modi`, see `-modi`.
To get one merge view, of `window`,`run`, and `ssh`: To get one merge view, of `window`,`run`, and `ssh`:
rofi -show combi -combi-modes "window,run,ssh" -modes combi 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. **NOTE**: The i3 window manager dislikes commas in the command when specifying an exec command.
For that case, `#` can be used as a separator. For that case, `#` can be used as a separator.
@@ -654,7 +555,7 @@ Pango markup can be used to formatting the output.
Default: {mode} {text} Default: {mode} {text}
Note: This setting is ignored if `combi-hide-mode-prefix` is enabled. Note: This setting is ignored if `combi-hide-mode-prefix` is eanbled.
### History and Sorting ### History and Sorting
@@ -708,14 +609,10 @@ configuration {
sorting-method: "name"; sorting-method: "name";
/** Group directories before files. */ /** Group directories before files. */
directories-first: true; directories-first: true;
/** Show hidden files. */
show-hidden: false;
} }
} }
``` ```
The `show-hidden` can also be triggered with the `kb-delete-entry` keybinding.
### Other ### Other
`-drun-use-desktop-cache` `-drun-use-desktop-cache`
@@ -760,12 +657,6 @@ Click the mouse outside the **rofi** window to exit.
Default: *enabled* Default: *enabled*
`-xserver-i300-workaround`
Workaround for bug in Xserver. See issue #611 and #1642 on the rofi issue tracker.
Default: *disabled*
## PATTERN ## 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: 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:
@@ -783,10 +674,54 @@ Please see **rofi-theme(5)** manpage for more information on theming.
## KEY BINDINGS ## KEY BINDINGS
Please see the **rofi-keys(5)** manpage for the keybindings and how to set them up. **rofi** has the following key bindings:
The keybinding can also be used for actions, when the action is executed the * `Control-v, Insert`: Paste from clipboard
mentioned keystroke is inserted: * `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 ### Timeout
@@ -815,7 +750,9 @@ configuration {
} }
``` ```
## Available Modes For a full list of bindings, see the **rofi-keys(5)** manpage.
## Available Modi
### window ### window
@@ -888,25 +825,25 @@ Shows a searchable list of key bindings.
### script ### script
Allows custom scripted Modes to be added, see the **rofi-script(5)** manpage for more information. Allows custom scripted Modi to be added, see the **rofi-script(5)** manpage for more information.
### combi ### combi
Combines multiple modes in one list. Specify which modes are included with the `-combi-modes` option. 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 modes. When using the combi mode, a *!bang* can be used to filter the results by modi.
All modes that match the bang as a prefix are included. All modi that match the bang as a prefix are included.
For example, say you have specified `-combi-modes run,window,windowcd`. If your 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` 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`. 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 modes. If no match, the input is handled by the first combined modi.
## FAQ ## FAQ
### The text in the window switcher is not nicely aligned. ### The text in the window switcher is not nicely aligned.
Try using a mono-space font or tabs + the tab-stops setting.. Try using a mono-space font.
### The window is completely black. ### The window is completely black.
@@ -936,19 +873,19 @@ Some basic usage examples of **rofi**:
Show the run dialog: Show the run dialog:
rofi -modes run -show run rofi -modi run -show run
Show the run dialog, and allow switching to Desktop File run dialog (`drun`): Show the run dialog, and allow switching to Desktop File run dialog (`drun`):
rofi -modes run,drun -show run rofi -modi run,drun -show run
Combine the run and Desktop File run dialog (`drun`): Combine the run and Desktop File run dialog (`drun`):
rofi -modes combi -show combi -combi-modes run,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: 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 rofi -modi combi,window -show combi -combi-modi run,drun
Pop up a text message claiming that this is the end: Pop up a text message claiming that this is the end:
@@ -962,6 +899,10 @@ Show all key bindings:
rofi -show keys rofi -show keys
Use `qalc` to get a simple calculator in **rofi**:
rofi -show calc -modi "calc:qalc +u8 -nocurrencies"
## i3 ## i3
In [i3](http://i3wm.org/) you want to bind **rofi** to be launched on key release. Otherwise, it cannot grab the keyboard. In [i3](http://i3wm.org/) you want to bind **rofi** to be launched on key release. Otherwise, it cannot grab the keyboard.
@@ -996,28 +937,66 @@ been released.
## WEBSITE ## WEBSITE
**rofi** website can be found [here](https://github.com/davatorium/rofi/) **rofi** website can be found [here](https://davedavenport.github.io/rofi/)
## SUPPORT ## SUPPORT
**rofi** support can be obtained: **rofi** support can be obtained:
* [GitHub Discussions](https://github.com/davatorium/rofi/discussions) * [GitHub Discussions](https://github.com/davatorium/rofi/discussions)
* [Forum (Reddit)](https://reddit.com/r/qtools//)
* [IRC](irc://irc.libera.chat:6697/#rofi) (#rofi on irc.libera.chat), * [IRC](irc://irc.libera.chat:6697/#rofi) (#rofi on irc.libera.chat),
## DEBUGGING ## DEBUGGING
For more information see **rofi-debugging(5)** manpage. 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](https://github.com/DaveDavenport/rofi/wiki/Debugging%20Rofi) wiki entry.
## ISSUE TRACKER ## ISSUE TRACKER
The **rofi** issue tracker can be found [here](https://github.com/davatorium/rofi/issues) The **rofi** issue tracker can be found [here](https://github.com/DaveDavenport/rofi/issues)
Before creating an issue, consider posting a question on the [discussion forum](https://github.com/davatorium/rofi/discussions) first.
When creating an issue, please read [this](https://github.com/davatorium/rofi/blob/master/.github/CONTRIBUTING.md) When creating an issue, please read [this](https://github.com/DaveDavenport/rofi/blob/master/.github/CONTRIBUTING.md)
first. first.
## SEE ALSO ## 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)** **rofi-sensible-terminal(1)**, **dmenu(1)**, **rofi-theme(5)**, **rofi-script(5)**, **rofi-keys(5)**,**rofi-theme-selector(1)**
## AUTHOR ## AUTHOR

View File

@@ -1,73 +1,50 @@
.nh # rofi-debugging(5)
.TH ROFI DEBUGGING 5 rofi debugging
.SH NAME ## NAME
.PP
Debugging rofi. Debugging rofi.
.PP
When reporting an issue with rofi crashing, or misbehaving. It helps to do some When reporting an issue with rofi crashing, or misbehaving. It helps to do some
small test to help pin-point the problem. small test to help pin-point the problem.
.PP First try disabling your custom configuration: `-no-config`
First try disabling your custom configuration: \fB\fC-no-config\fR
.PP This disables the parsing of the configuration files. This runs rofi in *stock*
This disables the parsing of the configuration files. This runs rofi in \fIstock\fP
mode. mode.
.PP If you run custom C plugins, you can disable the plugins using: `-no-plugins`
If you run custom C plugins, you can disable the plugins using: \fB\fC-no-plugins\fR
## Get the relevant information for an issue
.SH Get the relevant information for an issue
.PP
Please pastebin the output of the following commands: Please pastebin the output of the following commands:
.PP ```bash
.RS
.nf
rofi -help rofi -help
rofi -dump-config rofi -dump-config
rofi -dump-theme rofi -dump-theme
```
.fi `rofi -help` provides us with the configuration files parsed, the exact
.RE
.PP
\fB\fCrofi -help\fR provides us with the configuration files parsed, the exact
version, monitor layout and more useful information. version, monitor layout and more useful information.
.PP The `rofi -dump-config` and `rofi -dump-theme` output gives us `rofi`
The \fB\fCrofi -dump-config\fR and \fB\fCrofi -dump-theme\fR output gives us \fB\fCrofi\fR
interpretation of your configuration and theme. interpretation of your configuration and theme.
.PP
Please check the output for identifiable information and remove this. Please check the output for identifiable information and remove this.
.SH Timing traces ## Timing traces
.PP
To get a timing trace, enable the \fBTimings\fP debug domain.
.PP To get a timing trace, enable the **Timings** debug domain.
.RS
.nf ```bash
G_MESSAGES_DEBUG=Timings rofi -show drun G_MESSAGES_DEBUG=Timings rofi -show drun
```
.fi
.RE
.PP
It will show a trace with (useful) timing information at relevant points during 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. the execution. This will help debugging when rofi is slow to start.
.PP
Example trace: Example trace:
.PP ```text
.RS
.nf
(process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started (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.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.335: 0.000163 (0.000037): ../source/rofi.c:main:819
@@ -118,139 +95,83 @@ Example trace:
(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.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.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 (process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets
```
.fi ## Debug domains
.RE
.SH Debug domains
.PP
To further debug the plugin, you can get a trace with (lots of) debug 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 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 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, G\_MESSAGES\_DEBUG environment variable. At the time of creation of this page,
the following debug domains exist: the following debug domains exist:
.RS - all: Show debug information from all domains.
.IP \(bu 2 - X11Helper: The X11 Helper functions.
all: Show debug information from all domains. - View: The main window view functions.
.IP \(bu 2 - Widgets.Box: The Box widget.
X11Helper: The X11 Helper functions. - Modes.DMenu: The dmenu mode.
.IP \(bu 2 - Modes.Run: The run mode.
View: The main window view functions. - Modes.DRun: The desktop file run mode.
.IP \(bu 2 - Modes.Window: The window mode.
Widgets.Box: The Box widget. - Modes.Script: The script mode.
.IP \(bu 2 - Modes.Combi: The script mode.
Modes.DMenu: The dmenu mode. - Modes.Ssh: The ssh mode.
.IP \(bu 2 - Rofi: The main application.
Modes.Run: The run mode. - Timings: Get timing output.
.IP \(bu 2 - Theme: Theme engine debug output. (warning lots of output).
Modes.DRun: The desktop file run mode. - Widgets.Icon: The Icon widget.
.IP \(bu 2 - Widgets.Box: The box widget.
Modes.Window: The window mode. - Widgets.Container: The container widget.
.IP \(bu 2 - Widgets.Window: The window widget.
Modes.Script: The script mode. - Helpers.IconFetcher: Information about icon lookup.
.IP \(bu 2
Modes.Combi: The script mode.
.IP \(bu 2
Modes.Ssh: The ssh mode.
.IP \(bu 2
Rofi: The main application.
.IP \(bu 2
Timings: Get timing output.
.IP \(bu 2
Theme: Theme engine debug output. (warning lots of output).
.IP \(bu 2
Widgets.Icon: The Icon widget.
.IP \(bu 2
Widgets.Box: The box widget.
.IP \(bu 2
Widgets.Container: The container widget.
.IP \(bu 2
Widgets.Window: The window widget.
.IP \(bu 2
Helpers.IconFetcher: Information about icon lookup.
.RE For full list see `man rofi`.
.PP Example: `G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun` To get specific output
For full list see \fB\fCman rofi\fR\&.
.PP
Example: \fB\fCG_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun\fR To get specific output
from the Desktop file run dialog. from the Desktop file run dialog.
.PP To redirect the debug output to a file (`~/rofi.log`) add:
To redirect the debug output to a file (\fB\fC~/rofi.log\fR) add:
.PP ```bash
.RS
.nf
rofi -show drun -log ~/rofi.log rofi -show drun -log ~/rofi.log
```
.fi
.RE
.PP
Specifying the logfile automatically enabled all log domains. Specifying the logfile automatically enabled all log domains.
This can be useful when rofi is launched from a window manager. This can be useful when rofi is launched from a window manager.
.SH Creating a backtrace ## Creating a backtrace
.PP
First make sure you compile \fBrofi\fP with debug symbols:
.PP First make sure you compile **rofi** with debug symbols:
.RS
.nf ```bash
make CFLAGS="-O0 -g3" clean rofi make CFLAGS="-O0 -g3" clean rofi
```
.fi
.RE
.PP
Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it 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 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 to go is to enable core file. (ulimit -c unlimited in bash) then make rofi
crash. You can then load the core in GDB. crash. You can then load the core in GDB.
.PP ```bash
.RS
.nf
gdb rofi core gdb rofi core
```
.fi
.RE
.PP
Then type inside gdb: Then type inside gdb:
.PP ```bash
.RS
.nf
thread apply all bt thread apply all bt
```
.fi
.RE
.PP
The output trace is useful when reporting crashes. The output trace is useful when reporting crashes.
.PP Some distribution have `systemd-coredump`, this way you can easily get a
Some distribution have \fB\fCsystemd-coredump\fR, this way you can easily get a backtrace via `coredumpctl`.
backtrace via \fB\fCcoredumpctl\fR\&.
.SH SEE ALSO ## SEE ALSO
.PP
rofi-sensible-terminal(1), dmenu(1), rofi-debugging(5), rofi-theme(5), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5),
rofi-script(5), rofi-keys(5),rofi-theme-selector(1) rofi-script(5), rofi-keys(5),rofi-theme-selector(1)
.SH AUTHOR ## AUTHOR
.RS
.IP \(bu 2
Qball Cow qball@blame.services
\[la]mailto:qball@blame.services\[ra]
.RE * Qball Cow <qball@blame.services>

View File

@@ -0,0 +1,245 @@
# 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](http://tools.suckless.org/dmenu/).
**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.
```bash
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`.
```bash
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:
```bash
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.
```bash
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.
```bash
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](https://docs.gtk.org/Pango/pango_markup.html)
`-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](https://developer.gnome.org/pygtk/stable/pango-markup-language.html)
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*: "☑ "
`-ballot-unselected-str` *string*
When multi-select is enabled, prefix this string when element is not selected.
*default*: "☐ "
`-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.

View File

@@ -0,0 +1,576 @@
# 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}):
```bash
rofi -show run -kb-accept-entry 'Control+Shift+space'
```
or via the configuration file:
```css
configuration {
kb-accept-entry: "Control+Shift+space";
}
```
The key can be set by its name (see above) or its keycode:
```css
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:
```css
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 `!`:
```css
configuration {
kb-accept-entry: "!Control+Shift+space,Return";
}
```
## Unsetting a binding
To unset a binding, pass an empty string.
```css
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
## Mouse key bindings
The following mouse buttons can be bound:
* `Primary`: Primary (Left) mouse button click.
* `Secondary`: Secondary (Right) mouse button click.
* `Middle`: Middle mouse button click.
* `Forward`: The forward mouse button.
* `Back`: The back mouse button.
* `ExtraN`: The N'the mouse button. (Depending on mouse support).
The Identifier is constructed as follow:
`Mouse<D><Button>`
* `D` indicates optional Double press.
* `Button` is the button name.
So `MouseDPrimary` is Primary (`Left`) mouse button double click.
## 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.

View File

@@ -0,0 +1,216 @@
# 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:
```bash
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:
```bash
#!/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:
```bash
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.
- **keep-filter**: If set, the filter is not 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:
```bash
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.
```bash
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`.
```bash
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
and can be directly launched based on the filename (without extension):
- The script is in `$XDG_CONFIG_HOME/rofi/scripts/`, this is usually
`~/.config/rofi/scripts/`.
If you have a script 'mymode.sh' in this folder you can open it using:
```bash
rofi -show mymode
```
See `rofi -h` output for a list of detected 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.

View File

@@ -0,0 +1,50 @@
# rofi-sensible-terminal(1)
## NAME
**rofi-sensible-terminal** - launches $TERMINAL with fallbacks
## SYNOPSIS
rofi-sensible-terminal [arguments]
## DESCRIPTION
rofi-sensible-terminal is invoked in the rofi default config to start a terminal. This
wrapper script is necessary since there is no distribution-independent terminal launcher
(but for example Debian has x-terminal-emulator). Distribution packagers are responsible for
shipping this script in a way which is appropriate for the distribution.
It tries to start one of the following (in that order):
* `$TERMINAL` (this is a non-standard variable)
* x-terminal-emulator
* urxvt
* rxvt
* st
* terminology
* qterminal
* Eterm
* aterm
* uxterm
* xterm
* roxterm
* xfce4-terminal.wrapper
* mate-terminal
* lxterminal
* konsole
* alacritty
* kitty
* wezterm
## SEE ALSO
rofi(1)
## AUTHORS
Dave Davenport and contributors
Copied script from i3:
Michael Stapelberg and contributors

View File

@@ -0,0 +1,40 @@
# rofi-theme-selector(1)
## NAME
**rofi-theme-selector** - Preview and apply themes for **rofi**
## DESCRIPTION
**rofi-theme-selector** is a bash/rofi script to preview and apply themes for
**rofi**. It's part of any installation of **rofi**.
## USAGE
### Running rofi-theme-selector
**rofi-theme-selector** shows a list of all available themes in a **rofi**
window. It lets you preview each theme with the Enter key and apply the theme
to your **rofi** configuration file with Alt+a.
## Theme directories
**rofi-theme-selector** searches the following directories for themes:
- ${PREFIX}/share/rofi/themes
- $XDG_CONFIG_HOME/rofi/themes
- $XDG_DATA_HOME/share/rofi/themes
${PREFIX} reflects the install location of rofi. In most cases this will be
"/usr".<br>
$XDG_CONFIG_HOME is normally unset. Default path is "$HOME/.config".<br>
$XDG_DATA_HOME is normally unset. Default path is "$HOME/.local/share".
## SEE ALSO
rofi(1)
## AUTHORS
Qball Cow qball@gmpclient.org<br>
Rasmus Steinke rasi@xssn.at

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,85 @@
# rofi-thumbnails(5)
## NAME
**rofi-thumbnails** - Rofi thumbnails system
## DESCRIPTION
**rofi** is now able to show thumbnails for all file types where an XDG compatible thumbnailer is present in the system.
This is done by default in filebrowser and recursivebrowser mode, if **rofi** is launched with the `-show-icons` argument.
In a custom user script or dmenu mode, it is possible to produce entry icons using XDG thumbnailers by adding the prefix `thumbnail://` to the filename
specified after `\0icon\x1f`, for example:
```bash
echo -en "EntryName\0icon\x1fthumbnail://path/to/file\n" | rofi -dmenu -show-icons
```
### XDG thumbnailers
XDG thumbnailers are files with a ".thumbnailer" suffix and a structure similar to ".desktop" files for launching applications. They are placed in `/usr/share/thumbnailers/` or `$HOME/.local/share/thumbnailers/`, and contain a list of mimetypes, for which is possible to produce the thumbnail image, and a string with the command to create said image. The example below shows the content of `librsvg.thumbnailer`, a thumbnailer for svg files using librsvg:
```
[Thumbnailer Entry]
TryExec=/usr/bin/gdk-pixbuf-thumbnailer
Exec=/usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
MimeType=image/svg+xml;image/svg+xml-compressed;
```
The images produced are named as the md5sum of the input files and placed, depending on their size, in the XDG thumbnails directories: `$HOME/.cache/thumbnails/{normal,large,x-large,xx-large}`. They are then loaded by **rofi** as entry icons and can also be used by file managers like Thunar, Caja or KDE Dolphin to show their thumbnails. Additionally, if a thumbnail for a file is found in the thumbnails directories (produced previously by **rofi** or a file manager), **rofi** will load it instead of calling the thumbnailer.
If a suitable thumbnailer for a given file is not found, **rofi** will try to use the corresponding mimetype icon from the icon theme.
### Custom command to create thumbnails
It is possible to use a custom command to generate thumbnails for generic entry names, for example a script that downloads an icon given its url or selects different icons depending on the input. This can be done providing the `-preview-cmd` argument followed by a string with the command to execute, with the following syntax:
```
rofi ... -preview-cmd 'path/to/script_or_cmd "{input}" "{output}" "{size}"'
```
**rofi** will call the script or command substituting `{input}` with the input entry icon name (the string after `\0icon\x1fthumbnail://`), `{output}` with the output filename of the thumbnail and `{size}` with the requested thumbnail size. The script or command is responsible of producing a thumbnail image (if possible respecting the requested size) and saving it in the given `{output}` filename.
### Issues with AppArmor
In Linux distributions using AppArmor (such as Ubuntu and Debian), the default rules shipped can cause issues with thumbnails generation. If that is the case, AppArmor can be disabled by issuing the following commands
```
sudo systemctl stop apparmor
sudo systemctl disable apparmor
```
In alternative, the following apparmor profile con be placed in a file named /etc/apparmor.d/usr.bin.rofi
```
#vim:syntax=apparmor
# AppArmor policy for rofi
#include <tunables/global>
/usr/bin/rofi {
#include <abstractions/base>
# TCP/UDP network access for NFS
network inet stream,
network inet6 stream,
network inet dgram,
network inet6 dgram,
/usr/bin/rofi mr,
@{HOME}/ r,
@{HOME}/** rw,
owner @{HOME}/.cache/thumbnails/** rw,
}
```
then run
```
apparmor_parser -r /etc/apparmor.d/usr.bin.rofi
```
to reload the rule. This assumes that **rofi** binary is in /usr/bin, that is the case of a standard package installation.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,177 @@
# 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:
```bash
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.
```bash
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:
```text
(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:
```bash
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:
```bash
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.
```bash
gdb rofi core
```
Then type inside gdb:
```bash
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>

View File

@@ -0,0 +1,245 @@
# 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](http://tools.suckless.org/dmenu/).
**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.
```bash
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`.
```bash
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:
```bash
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.
```bash
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.
```bash
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](https://docs.gtk.org/Pango/pango_markup.html)
`-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](https://developer.gnome.org/pygtk/stable/pango-markup-language.html)
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*: "☑ "
`-ballot-unselected-str` *string*
When multi-select is enabled, prefix this string when element is not selected.
*default*: "☐ "
`-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.

View File

@@ -0,0 +1,576 @@
# 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}):
```bash
rofi -show run -kb-accept-entry 'Control+Shift+space'
```
or via the configuration file:
```css
configuration {
kb-accept-entry: "Control+Shift+space";
}
```
The key can be set by its name (see above) or its keycode:
```css
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:
```css
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 `!`:
```css
configuration {
kb-accept-entry: "!Control+Shift+space,Return";
}
```
## Unsetting a binding
To unset a binding, pass an empty string.
```css
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
## Mouse key bindings
The following mouse buttons can be bound:
* `Primary`: Primary (Left) mouse button click.
* `Secondary`: Secondary (Right) mouse button click.
* `Middle`: Middle mouse button click.
* `Forward`: The forward mouse button.
* `Back`: The back mouse button.
* `ExtraN`: The N'the mouse button. (Depending on mouse support).
The Identifier is constructed as follow:
`Mouse<D><Button>`
* `D` indicates optional Double press.
* `Button` is the button name.
So `MouseDPrimary` is Primary (`Left`) mouse button double click.
## 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.

View File

@@ -0,0 +1,216 @@
# 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:
```bash
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:
```bash
#!/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:
```bash
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.
- **keep-filter**: If set, the filter is not 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:
```bash
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.
```bash
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`.
```bash
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
and can be directly launched based on the filename (without extension):
- The script is in `$XDG_CONFIG_HOME/rofi/scripts/`, this is usually
`~/.config/rofi/scripts/`.
If you have a script 'mymode.sh' in this folder you can open it using:
```bash
rofi -show mymode
```
See `rofi -h` output for a list of detected 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.

View File

@@ -0,0 +1,50 @@
# rofi-sensible-terminal(1)
## NAME
**rofi-sensible-terminal** - launches $TERMINAL with fallbacks
## SYNOPSIS
rofi-sensible-terminal [arguments]
## DESCRIPTION
rofi-sensible-terminal is invoked in the rofi default config to start a terminal. This
wrapper script is necessary since there is no distribution-independent terminal launcher
(but for example Debian has x-terminal-emulator). Distribution packagers are responsible for
shipping this script in a way which is appropriate for the distribution.
It tries to start one of the following (in that order):
* `$TERMINAL` (this is a non-standard variable)
* x-terminal-emulator
* urxvt
* rxvt
* st
* terminology
* qterminal
* Eterm
* aterm
* uxterm
* xterm
* roxterm
* xfce4-terminal.wrapper
* mate-terminal
* lxterminal
* konsole
* alacritty
* kitty
* wezterm
## SEE ALSO
rofi(1)
## AUTHORS
Dave Davenport and contributors
Copied script from i3:
Michael Stapelberg and contributors

View File

@@ -0,0 +1,40 @@
# rofi-theme-selector(1)
## NAME
**rofi-theme-selector** - Preview and apply themes for **rofi**
## DESCRIPTION
**rofi-theme-selector** is a bash/rofi script to preview and apply themes for
**rofi**. It's part of any installation of **rofi**.
## USAGE
### Running rofi-theme-selector
**rofi-theme-selector** shows a list of all available themes in a **rofi**
window. It lets you preview each theme with the Enter key and apply the theme
to your **rofi** configuration file with Alt+a.
## Theme directories
**rofi-theme-selector** searches the following directories for themes:
- ${PREFIX}/share/rofi/themes
- $XDG_CONFIG_HOME/rofi/themes
- $XDG_DATA_HOME/share/rofi/themes
${PREFIX} reflects the install location of rofi. In most cases this will be
"/usr".<br>
$XDG_CONFIG_HOME is normally unset. Default path is "$HOME/.config".<br>
$XDG_DATA_HOME is normally unset. Default path is "$HOME/.local/share".
## SEE ALSO
rofi(1)
## AUTHORS
Qball Cow qball@gmpclient.org<br>
Rasmus Steinke rasi@xssn.at

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,85 @@
# rofi-thumbnails(5)
## NAME
**rofi-thumbnails** - Rofi thumbnails system
## DESCRIPTION
**rofi** is now able to show thumbnails for all file types where an XDG compatible thumbnailer is present in the system.
This is done by default in filebrowser and recursivebrowser mode, if **rofi** is launched with the `-show-icons` argument.
In a custom user script or dmenu mode, it is possible to produce entry icons using XDG thumbnailers by adding the prefix `thumbnail://` to the filename
specified after `\0icon\x1f`, for example:
```bash
echo -en "EntryName\0icon\x1fthumbnail://path/to/file\n" | rofi -dmenu -show-icons
```
### XDG thumbnailers
XDG thumbnailers are files with a ".thumbnailer" suffix and a structure similar to ".desktop" files for launching applications. They are placed in `/usr/share/thumbnailers/` or `$HOME/.local/share/thumbnailers/`, and contain a list of mimetypes, for which is possible to produce the thumbnail image, and a string with the command to create said image. The example below shows the content of `librsvg.thumbnailer`, a thumbnailer for svg files using librsvg:
```
[Thumbnailer Entry]
TryExec=/usr/bin/gdk-pixbuf-thumbnailer
Exec=/usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
MimeType=image/svg+xml;image/svg+xml-compressed;
```
The images produced are named as the md5sum of the input files and placed, depending on their size, in the XDG thumbnails directories: `$HOME/.cache/thumbnails/{normal,large,x-large,xx-large}`. They are then loaded by **rofi** as entry icons and can also be used by file managers like Thunar, Caja or KDE Dolphin to show their thumbnails. Additionally, if a thumbnail for a file is found in the thumbnails directories (produced previously by **rofi** or a file manager), **rofi** will load it instead of calling the thumbnailer.
If a suitable thumbnailer for a given file is not found, **rofi** will try to use the corresponding mimetype icon from the icon theme.
### Custom command to create thumbnails
It is possible to use a custom command to generate thumbnails for generic entry names, for example a script that downloads an icon given its url or selects different icons depending on the input. This can be done providing the `-preview-cmd` argument followed by a string with the command to execute, with the following syntax:
```
rofi ... -preview-cmd 'path/to/script_or_cmd "{input}" "{output}" "{size}"'
```
**rofi** will call the script or command substituting `{input}` with the input entry icon name (the string after `\0icon\x1fthumbnail://`), `{output}` with the output filename of the thumbnail and `{size}` with the requested thumbnail size. The script or command is responsible of producing a thumbnail image (if possible respecting the requested size) and saving it in the given `{output}` filename.
### Issues with AppArmor
In Linux distributions using AppArmor (such as Ubuntu and Debian), the default rules shipped can cause issues with thumbnails generation. If that is the case, AppArmor can be disabled by issuing the following commands
```
sudo systemctl stop apparmor
sudo systemctl disable apparmor
```
In alternative, the following apparmor profile con be placed in a file named /etc/apparmor.d/usr.bin.rofi
```
#vim:syntax=apparmor
# AppArmor policy for rofi
#include <tunables/global>
/usr/bin/rofi {
#include <abstractions/base>
# TCP/UDP network access for NFS
network inet stream,
network inet6 stream,
network inet dgram,
network inet6 dgram,
/usr/bin/rofi mr,
@{HOME}/ r,
@{HOME}/** rw,
owner @{HOME}/.cache/thumbnails/** rw,
}
```
then run
```
apparmor_parser -r /etc/apparmor.d/usr.bin.rofi
```
to reload the rule. This assumes that **rofi** binary is in /usr/bin, that is the case of a standard package installation.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,177 @@
# 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:
```bash
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.
```bash
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:
```text
(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:
```bash
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:
```bash
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.
```bash
gdb rofi core
```
Then type inside gdb:
```bash
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>

View File

@@ -0,0 +1,245 @@
# 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](http://tools.suckless.org/dmenu/).
**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.
```bash
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`.
```bash
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:
```bash
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.
```bash
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.
```bash
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](https://docs.gtk.org/Pango/pango_markup.html)
`-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](https://developer.gnome.org/pygtk/stable/pango-markup-language.html)
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*: "☑ "
`-ballot-unselected-str` *string*
When multi-select is enabled, prefix this string when element is not selected.
*default*: "☐ "
`-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.

View File

@@ -0,0 +1,576 @@
# 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}):
```bash
rofi -show run -kb-accept-entry 'Control+Shift+space'
```
or via the configuration file:
```css
configuration {
kb-accept-entry: "Control+Shift+space";
}
```
The key can be set by its name (see above) or its keycode:
```css
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:
```css
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 `!`:
```css
configuration {
kb-accept-entry: "!Control+Shift+space,Return";
}
```
## Unsetting a binding
To unset a binding, pass an empty string.
```css
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
## Mouse key bindings
The following mouse buttons can be bound:
* `Primary`: Primary (Left) mouse button click.
* `Secondary`: Secondary (Right) mouse button click.
* `Middle`: Middle mouse button click.
* `Forward`: The forward mouse button.
* `Back`: The back mouse button.
* `ExtraN`: The N'the mouse button. (Depending on mouse support).
The Identifier is constructed as follow:
`Mouse<D><Button>`
* `D` indicates optional Double press.
* `Button` is the button name.
So `MouseDPrimary` is Primary (`Left`) mouse button double click.
## 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.

View File

@@ -0,0 +1,216 @@
# 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:
```bash
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:
```bash
#!/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:
```bash
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.
- **keep-filter**: If set, the filter is not 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:
```bash
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.
```bash
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`.
```bash
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
and can be directly launched based on the filename (without extension):
- The script is in `$XDG_CONFIG_HOME/rofi/scripts/`, this is usually
`~/.config/rofi/scripts/`.
If you have a script 'mymode.sh' in this folder you can open it using:
```bash
rofi -show mymode
```
See `rofi -h` output for a list of detected 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.

View File

@@ -0,0 +1,50 @@
# rofi-sensible-terminal(1)
## NAME
**rofi-sensible-terminal** - launches $TERMINAL with fallbacks
## SYNOPSIS
rofi-sensible-terminal [arguments]
## DESCRIPTION
rofi-sensible-terminal is invoked in the rofi default config to start a terminal. This
wrapper script is necessary since there is no distribution-independent terminal launcher
(but for example Debian has x-terminal-emulator). Distribution packagers are responsible for
shipping this script in a way which is appropriate for the distribution.
It tries to start one of the following (in that order):
* `$TERMINAL` (this is a non-standard variable)
* x-terminal-emulator
* urxvt
* rxvt
* st
* terminology
* qterminal
* Eterm
* aterm
* uxterm
* xterm
* roxterm
* xfce4-terminal.wrapper
* mate-terminal
* lxterminal
* konsole
* alacritty
* kitty
* wezterm
## SEE ALSO
rofi(1)
## AUTHORS
Dave Davenport and contributors
Copied script from i3:
Michael Stapelberg and contributors

View File

@@ -0,0 +1,40 @@
# rofi-theme-selector(1)
## NAME
**rofi-theme-selector** - Preview and apply themes for **rofi**
## DESCRIPTION
**rofi-theme-selector** is a bash/rofi script to preview and apply themes for
**rofi**. It's part of any installation of **rofi**.
## USAGE
### Running rofi-theme-selector
**rofi-theme-selector** shows a list of all available themes in a **rofi**
window. It lets you preview each theme with the Enter key and apply the theme
to your **rofi** configuration file with Alt+a.
## Theme directories
**rofi-theme-selector** searches the following directories for themes:
- ${PREFIX}/share/rofi/themes
- $XDG_CONFIG_HOME/rofi/themes
- $XDG_DATA_HOME/share/rofi/themes
${PREFIX} reflects the install location of rofi. In most cases this will be
"/usr".<br>
$XDG_CONFIG_HOME is normally unset. Default path is "$HOME/.config".<br>
$XDG_DATA_HOME is normally unset. Default path is "$HOME/.local/share".
## SEE ALSO
rofi(1)
## AUTHORS
Qball Cow qball@gmpclient.org<br>
Rasmus Steinke rasi@xssn.at

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,85 @@
# rofi-thumbnails(5)
## NAME
**rofi-thumbnails** - Rofi thumbnails system
## DESCRIPTION
**rofi** is now able to show thumbnails for all file types where an XDG compatible thumbnailer is present in the system.
This is done by default in filebrowser and recursivebrowser mode, if **rofi** is launched with the `-show-icons` argument.
In a custom user script or dmenu mode, it is possible to produce entry icons using XDG thumbnailers by adding the prefix `thumbnail://` to the filename
specified after `\0icon\x1f`, for example:
```bash
echo -en "EntryName\0icon\x1fthumbnail://path/to/file\n" | rofi -dmenu -show-icons
```
### XDG thumbnailers
XDG thumbnailers are files with a ".thumbnailer" suffix and a structure similar to ".desktop" files for launching applications. They are placed in `/usr/share/thumbnailers/` or `$HOME/.local/share/thumbnailers/`, and contain a list of mimetypes, for which is possible to produce the thumbnail image, and a string with the command to create said image. The example below shows the content of `librsvg.thumbnailer`, a thumbnailer for svg files using librsvg:
```
[Thumbnailer Entry]
TryExec=/usr/bin/gdk-pixbuf-thumbnailer
Exec=/usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
MimeType=image/svg+xml;image/svg+xml-compressed;
```
The images produced are named as the md5sum of the input files and placed, depending on their size, in the XDG thumbnails directories: `$HOME/.cache/thumbnails/{normal,large,x-large,xx-large}`. They are then loaded by **rofi** as entry icons and can also be used by file managers like Thunar, Caja or KDE Dolphin to show their thumbnails. Additionally, if a thumbnail for a file is found in the thumbnails directories (produced previously by **rofi** or a file manager), **rofi** will load it instead of calling the thumbnailer.
If a suitable thumbnailer for a given file is not found, **rofi** will try to use the corresponding mimetype icon from the icon theme.
### Custom command to create thumbnails
It is possible to use a custom command to generate thumbnails for generic entry names, for example a script that downloads an icon given its url or selects different icons depending on the input. This can be done providing the `-preview-cmd` argument followed by a string with the command to execute, with the following syntax:
```
rofi ... -preview-cmd 'path/to/script_or_cmd "{input}" "{output}" "{size}"'
```
**rofi** will call the script or command substituting `{input}` with the input entry icon name (the string after `\0icon\x1fthumbnail://`), `{output}` with the output filename of the thumbnail and `{size}` with the requested thumbnail size. The script or command is responsible of producing a thumbnail image (if possible respecting the requested size) and saving it in the given `{output}` filename.
### Issues with AppArmor
In Linux distributions using AppArmor (such as Ubuntu and Debian), the default rules shipped can cause issues with thumbnails generation. If that is the case, AppArmor can be disabled by issuing the following commands
```
sudo systemctl stop apparmor
sudo systemctl disable apparmor
```
In alternative, the following apparmor profile con be placed in a file named /etc/apparmor.d/usr.bin.rofi
```
#vim:syntax=apparmor
# AppArmor policy for rofi
#include <tunables/global>
/usr/bin/rofi {
#include <abstractions/base>
# TCP/UDP network access for NFS
network inet stream,
network inet6 stream,
network inet dgram,
network inet6 dgram,
/usr/bin/rofi mr,
@{HOME}/ r,
@{HOME}/** rw,
owner @{HOME}/.cache/thumbnails/** rw,
}
```
then run
```
apparmor_parser -r /etc/apparmor.d/usr.bin.rofi
```
to reload the rule. This assumes that **rofi** binary is in /usr/bin, that is the case of a standard package installation.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,89 @@
# rofi-actions(5)
## NAME
**rofi-actions** - Custom commands following interaction with rofi menus
## DESCRIPTION
**rofi** allows to set custom commands or scripts to be executed when some actions are performed in the menu, such as changing selection, accepting an entry or canceling.
This makes it possible for example to play sound effects or read aloud menu entries on selection.
## USAGE
Following is the list of rofi flags for specifying custom commands or scripts to execute on supported actions:
`-on-selection-changed` *cmd*
Command or script to run when the current selection changes. Selected text is forwarded to the command replacing the pattern *{entry}*.
`-on-entry-accepted` *cmd*
Command or script to run when a menu entry is accepted. Accepted text is forwarded to the command replacing the pattern *{entry}*.
`-on-mode-changed` *cmd*
Command or script to run when the menu mode (e.g. drun,window,ssh...) is changed.
`-on-menu-canceled` *cmd*
Command or script to run when the menu is canceled.
`-on-menu-error` *cmd*
Command or script to run when an error menu is shown (e.g. `rofi -e "error message"`). Error text is forwarded to the command replacing the pattern *{error}*.
`-on-screenshot-taken` *cmd*
Command or script to run when a screenshot of rofi is taken. Screenshot path is forwarded to the command replacing the pattern *{path}*.
### Example usage
Rofi command line:
```bash
rofi -on-selection-changed "/path/to/select.sh {entry}" \
-on-entry-accepted "/path/to/accept.sh {entry}" \
-on-menu-canceled "/path/to/exit.sh" \
-on-mode-changed "/path/to/change.sh" \
-on-menu-error "/path/to/error.sh {error}" \
-on-screenshot-taken "/path/to/camera.sh {path}" \
-show drun
```
Rofi config file:
```css
configuration {
on-selection-changed: "/path/to/select.sh {entry}";
on-entry-accepted: "/path/to/accept.sh {entry}";
on-menu-canceled: "/path/to/exit.sh";
on-mode-changed: "/path/to/change.sh";
on-menu-error: "/path/to/error.sh {error}";
on-screenshot-taken: "/path/to/camera.sh {path}";
}
```
### Play sound effects
Here's an example bash script that plays a sound effect using `aplay` when the current selection is changed:
```bash
#!/bin/bash
coproc aplay -q $HOME/Music/selecting_an_item.wav
```
The use of `coproc` for playing sounds is suggested, otherwise the rofi process will wait for sounds to end playback before exiting.
### Read aloud
Here's an example bash script that reads aloud currently selected entries using `espeak`:
```bash
#!/bin/bash
killall espeak
echo "selected: $@" | espeak
```

View File

@@ -0,0 +1,177 @@
# 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:
```bash
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.
```bash
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:
```text
(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:
```bash
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:
```bash
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.
```bash
gdb rofi core
```
Then type inside gdb:
```bash
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>

View File

@@ -0,0 +1,245 @@
# 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](http://tools.suckless.org/dmenu/).
**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.
```bash
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`.
```bash
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:
```bash
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.
```bash
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.
```bash
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](https://docs.gtk.org/Pango/pango_markup.html)
`-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](https://docs.gtk.org/Pango/pango_markup.html)
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*: "☑ "
`-ballot-unselected-str` *string*
When multi-select is enabled, prefix this string when element is not selected.
*default*: "☐ "
`-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.

View File

@@ -0,0 +1,588 @@
# 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}):
```bash
rofi -show run -kb-accept-entry 'Control+Shift+space'
```
or via the configuration file:
```css
configuration {
kb-accept-entry: "Control+Shift+space";
}
```
The key can be set by its name (see above) or its keycode:
```css
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:
```css
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 `!`:
```css
configuration {
kb-accept-entry: "!Control+Shift+space,Return";
}
```
## Unsetting a binding
To unset a binding, pass an empty string.
```css
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
`kb-matcher-up`
Select the next matcher.
Default: Super+equal
`kb-matcher-down`
Select the previous matcher.
Default: Super+minus
## 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
## Mouse key bindings
The following mouse buttons can be bound:
* `Primary`: Primary (Left) mouse button click.
* `Secondary`: Secondary (Right) mouse button click.
* `Middle`: Middle mouse button click.
* `Forward`: The forward mouse button.
* `Back`: The back mouse button.
* `ExtraN`: The N'the mouse button. (Depending on mouse support).
The Identifier is constructed as follow:
`Mouse<D><Button>`
* `D` indicates optional Double press.
* `Button` is the button name.
So `MouseDPrimary` is Primary (`Left`) mouse button double click.
## 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.

View File

@@ -0,0 +1,217 @@
# 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:
```bash
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:
```bash
#!/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.
- **3**: Deleted an 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:
```bash
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.
- **keep-filter**: If set, the filter is not 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:
```bash
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.
```bash
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`.
```bash
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
and can be directly launched based on the filename (without extension):
- The script is in `$XDG_CONFIG_HOME/rofi/scripts/`, this is usually
`~/.config/rofi/scripts/`.
If you have a script 'mymode.sh' in this folder you can open it using:
```bash
rofi -show mymode
```
See `rofi -h` output for a list of detected 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.

Some files were not shown because too many files have changed in this diff Show More