[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
This commit is contained in:
lbonn 2024-03-05 16:22:47 +01:00 committed by GitHub
parent 3d29715e1e
commit 433f9664e9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 541 additions and 6139 deletions

View file

@ -34,6 +34,7 @@ runs:
libxkbcommon-dev \
libxkbcommon-x11-dev \
ninja-build \
pandoc \
python3-pip \
python3-setuptools \
python3-wheel \

View file

@ -172,19 +172,52 @@ rofi_LDADD=\
$(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-debugging.5\
doc/rofi-dmenu.5\
doc/rofi-keys.5\
doc/rofi-script.5\
doc/rofi-theme.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 ./$@ ./$<
endif
dist_man1_MANS=\
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=\
doc/rofi-theme.5\
doc/rofi-debugging.5\
doc/rofi-keys.5\
doc/rofi-dmenu.5\
doc/rofi-script.5
doc/rofi-keys.5\
doc/rofi-script.5\
doc/rofi-theme.5
EXTRA_DIST += \
doc/rofi-theme.5.markdown \
@ -254,19 +287,7 @@ EXTRA_DIST+=\
doc/default_configuration.rasi\
doc/default_theme.rasi\
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
@ -656,6 +677,8 @@ EXTRA_DIST += \
subprojects/libgwater/wayland-server/meson.build \
subprojects/libgwater/meson.build \
subprojects/libgwater/win/meson.build \
subprojects/libnkutils/bindings/meson.build \
subprojects/libnkutils/core/meson.build \
subprojects/libnkutils/meson.build \
subprojects/libnkutils/meson_options.txt \
subprojects/libgwater/wayland/libgwater-wayland.h \

View file

@ -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]) ])
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 Gets the resource compile tool path.
@ -210,6 +217,11 @@ echo "Check based tests Enabled"
else
echo "Check based tests Disabled"
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 "Now type 'make' to build"
echo ""

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:
```
make update-manpage
make generate-manpage
```

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,25 +1,52 @@
gomd2man = find_program('go-md2man', required: false)
if gomd2man.found()
man_files = [
'rofi.1',
'rofi-sensible-terminal.1',
'rofi-theme-selector.1',
'rofi-debugging.5',
'rofi-dmenu.5',
'rofi-keys.5',
'rofi-script.5',
'rofi-theme.5',
]
fs = import('fs')
pandoc = find_program('pandoc', required: false, version: '>=2.9')
if pandoc.found()
man_targets = []
foreach f: [
'rofi.1',
'rofi-theme-selector.1',
'rofi-theme.5',
'rofi-dmenu.5',
'rofi-debugging.5',
'rofi-keys.5',
'rofi-script.5',
'rofi-sensible-terminal.1'
]
cp_cmds = []
foreach f: man_files
section_number = f.split('.')[1]
install_dest = join_paths(get_option('prefix'), get_option('mandir'), 'man' + section_number)
man_targets += custom_target(f,
input: '.'.join([f, 'markdown']),
input: ['.'.join([f, 'markdown']), 'man_filter.lua'],
output: f,
command: [ 'go-md2man',
'-in', files('.'.join([f,'markdown'])),
'-out', files(f)
])
command: [ 'pandoc', '--standalone', '--to=man',
'--lua-filter', '@INPUT1@',
'-f', 'markdown-tex_math_dollars',
'@INPUT0@', '-o', '@OUTPUT@' ],
install: true,
install_dir: install_dest,
build_by_default: true,
)
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
doxy_conf = configuration_data()

View file

@ -1,256 +0,0 @@
.nh
.TH ROFI DEBUGGING 5 rofi debugging
.SH NAME
.PP
Debugging rofi.
.PP
When reporting an issue with rofi crashing, or misbehaving. It helps to do some
small test to help pin-point the problem.
.PP
First try disabling your custom configuration: \fB\fC-no-config\fR
.PP
This disables the parsing of the configuration files. This runs rofi in \fIstock\fP
mode.
.PP
If you run custom C plugins, you can disable the plugins using: \fB\fC-no-plugins\fR
.SH Get the relevant information for an issue
.PP
Please pastebin the output of the following commands:
.PP
.RS
.nf
rofi -help
rofi -dump-config
rofi -dump-theme
.fi
.RE
.PP
\fB\fCrofi -help\fR provides us with the configuration files parsed, the exact
version, monitor layout and more useful information.
.PP
The \fB\fCrofi -dump-config\fR and \fB\fCrofi -dump-theme\fR output gives us \fB\fCrofi\fR
interpretation of your configuration and theme.
.PP
Please check the output for identifiable information and remove this.
.SH Timing traces
.PP
To get a timing trace, enable the \fBTimings\fP debug domain.
.PP
.RS
.nf
G_MESSAGES_DEBUG=Timings rofi -show drun
.fi
.RE
.PP
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.
.PP
Example trace:
.PP
.RS
.nf
(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
.fi
.RE
.SH Debug domains
.PP
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:
.RS
.IP \(bu 2
all: Show debug information from all domains.
.IP \(bu 2
X11Helper: The X11 Helper functions.
.IP \(bu 2
View: The main window view functions.
.IP \(bu 2
Widgets.Box: The Box widget.
.IP \(bu 2
Modes.DMenu: The dmenu mode.
.IP \(bu 2
Modes.Run: The run mode.
.IP \(bu 2
Modes.DRun: The desktop file run mode.
.IP \(bu 2
Modes.Window: The window mode.
.IP \(bu 2
Modes.Script: The script mode.
.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
.PP
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.
.PP
To redirect the debug output to a file (\fB\fC~/rofi.log\fR) add:
.PP
.RS
.nf
rofi -show drun -log ~/rofi.log
.fi
.RE
.PP
Specifying the logfile automatically enabled all log domains.
This can be useful when rofi is launched from a window manager.
.SH Creating a backtrace
.PP
First make sure you compile \fBrofi\fP with debug symbols:
.PP
.RS
.nf
make CFLAGS="-O0 -g3" clean rofi
.fi
.RE
.PP
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.
.PP
.RS
.nf
gdb rofi core
.fi
.RE
.PP
Then type inside gdb:
.PP
.RS
.nf
thread apply all bt
.fi
.RE
.PP
The output trace is useful when reporting crashes.
.PP
Some distribution have \fB\fCsystemd-coredump\fR, this way you can easily get a
backtrace via \fB\fCcoredumpctl\fR\&.
.SH SEE ALSO
.PP
rofi-sensible-terminal(1), dmenu(1), rofi-debugging(5), rofi-theme(5),
rofi-script(5), rofi-keys(5),rofi-theme-selector(1)
.SH AUTHOR
.RS
.IP \(bu 2
Qball Cow qball@blame.services
\[la]mailto:qball@blame.services\[ra]
.RE

View file

@ -1,4 +1,4 @@
# ROFI DEBUGGING 5 rofi debugging
# rofi-debugging(5)
## NAME
@ -169,7 +169,7 @@ backtrace via `coredumpctl`.
## 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)
## 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

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
@ -63,481 +63,481 @@ configuration {
## Keyboard Bindings
### **kb-primary-paste**:
`kb-primary-paste`
Paste primary selection
**Default**: Control+V,Shift+Insert
Default: Control+V,Shift+Insert
### **kb-secondary-paste**
`kb-secondary-paste`
Paste clipboard
**Default**: Control+v,Insert
Default: Control+v,Insert
### **kb-secondary-copy**
`kb-secondary-copy`
Copy current selection to clipboard
**Default**: Control+c
Default: Control+c
### **kb-clear-line**
`kb-clear-line`
Clear input line
**Default**: Control+w
Default: Control+w
### **kb-move-front**
`kb-move-front`
Beginning of line
**Default**: Control+a
Default: Control+a
### **kb-move-end**
`kb-move-end`
End of line
**Default**: Control+e
Default: Control+e
### **kb-move-word-back**
`kb-move-word-back`
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
**Default**: Alt+f,Control+Right
Default: Alt+f,Control+Right
### **kb-move-char-back**
`kb-move-char-back`
Move back one char
**Default**: Left,Control+b
Default: Left,Control+b
### **kb-move-char-forward**
`kb-move-char-forward`
Move forward one char
**Default**: Right,Control+f
Default: Right,Control+f
### **kb-remove-word-back**
`kb-remove-word-back`
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
**Default**: Control+Alt+d
Default: Control+Alt+d
### **kb-remove-char-forward**
`kb-remove-char-forward`
Delete next char
**Default**: Delete,Control+d
Default: Delete,Control+d
### **kb-remove-char-back**
`kb-remove-char-back`
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
**Default**: Control+k
Default: Control+k
### **kb-remove-to-sol**
`kb-remove-to-sol`
Delete till the start of line
**Default**: Control+u
Default: Control+u
### **kb-accept-entry**
`kb-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)
**Default**: Control+Return
Default: Control+Return
### **kb-accept-custom-alt**
`kb-accept-custom-alt`
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.
**Default**: Shift+Return
Default: Shift+Return
### **kb-delete-entry**
`kb-delete-entry`
Delete entry from history
**Default**: Shift+Delete
Default: Shift+Delete
### **kb-mode-next**
`kb-mode-next`
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.
**Default**: Shift+Left,Control+ISO\_Left\_Tab
Default: Shift+Left,Control+ISO\_Left\_Tab
### **kb-mode-complete**
`kb-mode-complete`
Start completion for mode.
**Default**: Control+l
Default: Control+l
### **kb-row-left**
`kb-row-left`
Go to the previous column
**Default**: Control+Page\_Up
Default: Control+Page\_Up
### **kb-row-right**
`kb-row-right`
Go to the next column
**Default**: Control+Page\_Down
Default: Control+Page\_Down
### **kb-row-up**
`kb-row-up`
Select previous entry
**Default**: Up,Control+p
Default: Up,Control+p
### **kb-row-down**
`kb-row-down`
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.
**Default**:
Default:
### **kb-element-next**
`kb-element-next`
Go to next row.
**Default**: Tab
Default: Tab
### **kb-element-prev**
`kb-element-prev`
Go to previous row.
**Default**: ISO\_Left\_Tab
Default: ISO\_Left\_Tab
### **kb-page-prev**
`kb-page-prev`
Go to the previous page
**Default**: Page\_Up
Default: Page\_Up
### **kb-page-next**
`kb-page-next`
Go to the next page
**Default**: Page\_Down
Default: Page\_Down
### **kb-row-first**
`kb-row-first`
Go to the first entry
**Default**: Home,KP\_Home
Default: Home,KP\_Home
### **kb-row-last**
`kb-row-last`
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
**Default**: Control+space
Default: Control+space
### **kb-screenshot**
`kb-screenshot`
Take a screenshot of the rofi window
**Default**: Alt+S
Default: Alt+S
### **kb-ellipsize**
`kb-ellipsize`
Toggle between ellipsize modes for displayed data
**Default**: Alt+period
Default: Alt+period
### **kb-toggle-case-sensitivity**
`kb-toggle-case-sensitivity`
Toggle case sensitivity
**Default**: grave,dead\_grave
Default: grave,dead\_grave
### **kb-toggle-sort**
`kb-toggle-sort`
Toggle filtered menu sort
**Default**: Alt+grave
Default: Alt+grave
### **kb-cancel**
`kb-cancel`
Quit rofi
**Default**: Escape,Control+g,Control+bracketleft
Default: Escape,Control+g,Control+bracketleft
### **kb-custom-1**
`kb-custom-1`
Custom keybinding 1
**Default**: Alt+1
Default: Alt+1
### **kb-custom-2**
`kb-custom-2`
Custom keybinding 2
**Default**: Alt+2
Default: Alt+2
### **kb-custom-3**
`kb-custom-3`
Custom keybinding 3
**Default**: Alt+3
Default: Alt+3
### **kb-custom-4**
`kb-custom-4`
Custom keybinding 4
**Default**: Alt+4
Default: Alt+4
### **kb-custom-5**
`kb-custom-5`
Custom Keybinding 5
**Default**: Alt+5
Default: Alt+5
### **kb-custom-6**
`kb-custom-6`
Custom keybinding 6
**Default**: Alt+6
Default: Alt+6
### **kb-custom-7**
`kb-custom-7`
Custom Keybinding 7
**Default**: Alt+7
Default: Alt+7
### **kb-custom-8**
`kb-custom-8`
Custom keybinding 8
**Default**: Alt+8
Default: Alt+8
### **kb-custom-9**
`kb-custom-9`
Custom keybinding 9
**Default**: Alt+9
Default: Alt+9
### **kb-custom-10**
`kb-custom-10`
Custom keybinding 10
**Default**: Alt+0
Default: Alt+0
### **kb-custom-11**
`kb-custom-11`
Custom keybinding 11
**Default**: Alt+exclam
Default: Alt+exclam
### **kb-custom-12**
`kb-custom-12`
Custom keybinding 12
**Default**: Alt+at
Default: Alt+at
### **kb-custom-13**
`kb-custom-13`
Custom keybinding 13
**Default**: Alt+numbersign
Default: Alt+numbersign
### **kb-custom-14**
`kb-custom-14`
Custom keybinding 14
**Default**: Alt+dollar
Default: Alt+dollar
### **kb-custom-15**
`kb-custom-15`
Custom keybinding 15
**Default**: Alt+percent
Default: Alt+percent
### **kb-custom-16**
`kb-custom-16`
Custom keybinding 16
**Default**: Alt+dead\_circumflex
Default: Alt+dead\_circumflex
### **kb-custom-17**
`kb-custom-17`
Custom keybinding 17
**Default**: Alt+ampersand
Default: Alt+ampersand
### **kb-custom-18**
`kb-custom-18`
Custom keybinding 18
**Default**: Alt+asterisk
Default: Alt+asterisk
### **kb-custom-19**
`kb-custom-19`
Custom Keybinding 19
**Default**: Alt+parenleft
Default: Alt+parenleft
### **kb-select-1**
`kb-select-1`
Select row 1
**Default**: Super+1
Default: Super+1
### **kb-select-2**
`kb-select-2`
Select row 2
**Default**: Super+2
Default: Super+2
### **kb-select-3**
`kb-select-3`
Select row 3
**Default**: Super+3
Default: Super+3
### **kb-select-4**
`kb-select-4`
Select row 4
**Default**: Super+4
Default: Super+4
### **kb-select-5**
`kb-select-5`
Select row 5
**Default**: Super+5
Default: Super+5
### **kb-select-6**
`kb-select-6`
Select row 6
**Default**: Super+6
Default: Super+6
### **kb-select-7**
`kb-select-7`
Select row 7
**Default**: Super+7
Default: Super+7
### **kb-select-8**
`kb-select-8`
Select row 8
**Default**: Super+8
Default: Super+8
### **kb-select-9**
`kb-select-9`
Select row 9
**Default**: Super+9
Default: Super+9
### **kb-select-10**
`kb-select-10`
Select row 10
**Default**: Super+0
Default: Super+0
### **kb-entry-history-up**
`kb-entry-history-up`
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.
**Default**: Control+Down
Default: Control+Down
## Mouse Bindings
### **ml-row-left**
`ml-row-left`
Go to the previous column
**Default**: ScrollLeft
Default: ScrollLeft
### **ml-row-right**
`ml-row-right`
Go to the next column
**Default**: ScrollRight
Default: ScrollRight
### **ml-row-up**
`ml-row-up`
Select previous entry
**Default**: ScrollUp
Default: ScrollUp
### **ml-row-down**
`ml-row-down`
Select next entry
**Default**: ScrollDown
Default: ScrollDown
### **me-select-entry**
`me-select-entry`
Select hovered row
**Default**: MousePrimary
Default: MousePrimary
### **me-accept-entry**
`me-accept-entry`
Accept hovered row
**Default**: MouseDPrimary
Default: MouseDPrimary
### **me-accept-custom**
`me-accept-custom`
Accept hovered row with custom action
**Default**: Control+MouseDPrimary
Default: Control+MouseDPrimary
## SEE ALSO

View file

@ -1,279 +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
\fBpermantent\fP: If true the row always shows, independent of filter.
.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

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

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

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
# ROFI-THEME 5 rofi-theme
# rofi-theme(5)
## NAME
@ -896,15 +896,19 @@ These are appended after the name or class of the widget.
#### Example
`button selected.normal { }`
```
button selected.normal { }
`element selected.urgent { }`
element selected.urgent { }
```
Currently only the entrybox and scrollbar have states:
#### Entrybox
`{visible modifier}.{state}`
```
{visible modifier}.{state}
```
Where `visible modifier` can be:
- normal: no modification
@ -1551,7 +1555,9 @@ From the pango manpage:
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
by a comma, STYLE\_OPTIONS is a whitespace-separated list of words where each

1761
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
@ -312,7 +312,7 @@ launched.
The time (in ms) boundary filter may take before switch from instant to delayed
filter mode.
Default: 300
Default: 300
A fallback icon can be specified for each mode:
@ -385,7 +385,7 @@ The format string for the `drun` dialog:
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
string.
@ -419,8 +419,7 @@ Default: '-'
### Filtered menu sort
`-sort` to enable
`-no-sort` to disable
`-[no]-sort`
Enable, disable sort for filtered menu.
This setting can be changed at runtime (see `-kb-toggle-sort`).
@ -491,10 +490,7 @@ Default: *1*
When one entry is left, automatically select it.
`-m` *num*
`-m` *name*
`-monitor` *num*
`-monitor` *name*
`-m` *num*, `-m` *name*, `-monitor` *num*, `-monitor` *name*
Select monitor to display **rofi** on. It accepts as input: *primary* (if
primary output is set), the *xrandr* output name, or integer number (in order
@ -588,8 +584,7 @@ Parse the `/etc/hosts` file for entries.
Default: *disabled*
`-parse-known-hosts`
`-no-parse-known-hosts`
`-[no-]parse-known-hosts`
Parse the `~/.ssh/known_hosts` file for entries.
@ -723,10 +718,9 @@ Note: This setting is ignored if `combi-hide-mode-prefix` is enabled.
### History
`-disable-history`
`-no-disable-history` (re-enable history)
`-[no-]disable-history`
Disable history
Disable or re-enable history
`-max-history-size` *number*
@ -854,8 +848,7 @@ configuration {
}
```
`-click-to-exit`
`-no-click-to-exit`
`-[no-]click-to-exit`
Click the mouse outside the **rofi** window to exit.

16
meson-dist-script Normal file
View file

@ -0,0 +1,16 @@
#!/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

View file

@ -17,6 +17,8 @@ add_project_arguments(
language: 'c'
)
meson.add_dist_script('meson-dist-script')
flags = [
'-Wparentheses',
'-Winline',
@ -268,16 +270,6 @@ rofi = executable('rofi', rofi_sources + [
)
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(
'themes/Adapta-Nokto.rasi',