bemenu(1)

# NAME

*bemenu* - dynamic menu inspired by *dmenu*(1)

# SYNOPSIS

*bemenu* [*-hivwx*] [*-I* <_index_>] [*-l* <_lines_>] [*-P* _prefix_]
	\[*-p* <_prompt_>] [*--ifne*] [*--scrollbar* _none_|_always_|_autohide_]
	\[_backend_options_]

*bemenu-run* [*-hivwx*] [*-I* <_index_>] [*-l* <_lines_>] [*-P* <_prefix_>]
	\[*-p* <_prompt_>] [*--ifne*] [*--scrollbar* _none_|_always_|_autohide_]
	\[*--fork*] [*--no-exec*] [_backend-options_]

# DESCRIPTION

*bemenu* is a dynamic menu for *tty*(4) (using *ncurses*(3)), X11 and Wayland,
inspired by *dmenu*(1).

It reads a list of newline-separated items from standard input and then presents
them as a list, where the user can select one or more of them. When pressing
*<carriage-return>*, the selected items are printed to standard output (one per
line) and *bemenu* exits.

Entering text will filter the items to those that match the input. If the number
of items exceeds the size of the list, the items will be paginated.

*bemenu-run* is a special-case invocation of *bemenu*, where the input is the
list of executables under PATH and the selected items are executed.

# OPTIONS

*-h, --help*
	Print a help message to standard output and exit.

*-I, --index* <_index_>
	Highlight the item at _index_ at the start. Indices start at 0. By
	default, the first item is highlighted.

*-i, --ignorecase*
	Filter items case-insensitively.

*-l, --list* <_number_>
	List items vertically with the given _number_ of lines.

*-P, --prefix* <_prefix_>
	Display _prefix_ before the highlighted item in a vertical list.

*-p, --prompt* <_prompt_>
	Defines the _prompt_ text to be displayed to the left of the input
	field. Defaults to ‘bemenu’.

*-v, --version*
	Print the *bemenu* version number to standard output and exit.

*-w, --wrap*
	Advancing past the end of the list returns you to the start.

*-x, --password*
	Hide filter text.

*--fork*
	Always *fork*(2) before executing the selections. Disabled by default
	when using the terminal backend.

*--no-exec*
	Print the selected items to standard output instead of executing them.

*--scrollbar* _none_|_always_|_autohide_
	Specify when to show a scrollbar for vertical lists:
[[ *none*
:< Never display a scrollbar (the default).
|  *always*
:  Always display a scrollbar.
|  *autohide*
:  Only display a scrollbar when the number of items exceeds the number
   of lines.

## Backend options

These options are only available on backends specified in the parentheses:

*-b, --bottom* (Wayland, X11)
	The list will appear at the bottom of the screen.

*-f, --grab* (Wayland, X11)
	Show the *bemenu* window whilst reading the items.

*-H, --line-height* <_height_> (Wayland, X11)
	Specify the _height_ in point size to make each entry.

*-m, --monitor* <_index_> (Wayland, X11)
	Specify the monitor _index_ where the list should appear. Monitor
	indices start at zero. The interpretation of the given argument depends
	on the utilized backend. With X11 and Wayland, a value of ‘-1’ or
	*focused* indicates that the current monitor should be used (the
	default). With Wayland, the _index_ should be a string specifying a
	specific monitor name. The value ‘-2’ or *all* indicates that the list
	should appear on all monitors.

*-n, --no-overlap* (Wayland)
	Set the *bemenu* window to be on top of any other panels.

*-M, --margin* <_margin_> (Wayland, X11)
	Specify the _margin_ (empty space) in pixels to leave between menu and
	vertical view borders. *bemenu* will reduce it's size to fit in space
	between gaps.

*-W, --width-factor* <_factor_> (Wayland, X11)
	Specify the relative width factor as a floating point number. It makes
	sense to set it between 0 and 1 to define how much of the screen width
	*bemenu* will use. However, *bemenu* will still respect _margin_, so if
	resulting size is greater than space between gaps, *bemenu* will ignore
	_factor_ and use available space instead.

*--fn* <_name_ [_size_]> (Wayland, X11)
	Specify the font family _name_ and _size_ to be used. For more options,
	consult the _Pango Reference Manual_ for
	*pango_font_description_from_string*().

The following options control the colours for various parts of the list
for the Wayland and X11 backends. Each takes an argument in the form of:

	*#*_RGB_[_A_]

where _R_, _G_, _B_ and _A_ are hexadecimal integers from 00–FF that
control the red, green, blue and alpha-transparency channels.

*--tb* <_color_>	Title background.

*--tf* <_color_>	Title foreground.

*--fb* <_color_>	Filter background.

*--ff* <_color_>	Filter foreground

*--cb* <_color_>	Cursor background.

*--cf* <_color_>	Cursor foreground

*--nb* <_color_>	Normal background.

*--nf* <_color_>	Normal foreground.

*--hb* <_color_>	Highlighted background.

*--hf* <_color_>	Highlighted foreground.

*--fbb* <_color_>	Feedback background.

*--fbf* <_color_>	Feedback foreground.

*--sb* <_color_>	Selected background.

*--sf* <_color_>	Selected foreground.

*--ab* <_color_>	Alternating background color.

*--af* <_color_>	Alternating foreground color.

*--scb* <_color_>	Scrollbar background.

*--scf* <_color_>	Scrollbar foreground.

# KEYBOARD COMMANDS

*bemenu* supports keyboard commands to move around the list and edit the filter.
In the following examples, *C-x* means *<control-x>*, *M-x* means *<alt-x>* and
*S-x* means *<shift-x>*:

*<cursor-up>, S-<cursor-left>, C-p, M-j, M-l*
	Highlight the previous item.

*<cursor-down>, <tab>, C-n, M-h, M-k*
	Highlight the next item.

*PageUp, M-v, M-u*
	Show the previous page of items, preserving the offset of the currently
	highlighted item, if possible.

*PageDown, C-v, M-d*
	Show the next page of items, preserving the offset of the currently
	highlighted item, if possible.

*S-M-<, S-PageUp*
	Highlight the first item in the list.

*S-M->, S-PageDown*
	Highlight the last item in the list.

*S-<tab>*
	Copy the highlighted item to the filter.

*<escape>, C-g*
	Terminate *bemenu* without printing items.

*C-<carriage-return>, C-m*
	Print selected items and the currently highlighted one, and exit. Items
	are printed in the order they were selected, with the currently
	highlighted item printed last.

*S-<carriage-return>, Insert*
	Print the filter text to standard output and exit.

*C-l, <cursor-left>*
	Move cursor left.

*C-f, <cursor-right>*
	Move cursor right.

*C-a, Home*
	Move cursor to the start.

*C-e, End*
	Move cursor to the end.

*<backspace> C-h*
	Remove character before the cursor.

*<delete>*
	Remove character at the cursor.

*C-u, S-<delete>*
	Remove all characters before the cursor.

*C-k*
	Remove all characters after the cursor.

*C-w*
	Clear the filter.

*C-y*
	Paste the clipboard.

*M-[1-9]*
	Print selected items and exit with a custom error code 10 (*M-1*)
        through 18 (*M-9*), see _EXIT STATUS_.

*M-0*
	Print selected items and exit with the custom error code 19, see _EXIT
        STATUS_.

# ENVIRONMENT

[[ *BEMENU_OPTS*
:< An alternative way to pass command line arguments to *bemenu*.
|  *BEMENU_BACKEND*
:  Force a backend to be used. If empty, one of the GUI backends (Wayland, X11)
   will be selected automatically. The accepted values are *curses*, *wayland*
   and *x11*.
|  *BEMENU_RENDERER*
:  Force a backend by loading its shared object from the set value.
|  *BEMENU_RENDERERS*
:  Override the backend search path to the set value. Defaults to
   _@LIBDIR@/bemenu_.
|  *BEMENU_SCALE*
:  Override the rendering scale factor for the GUI backends.

# EXIT STATUS

*0*
	bemenu ran successfully.

*1*
	The user exited without selecting, or bemenu encountered an error.

*10-19*
	The user specified a custom exit code with *M-[0-9]*, see _KEYBOARD
	COMMANDS_.

# SEE ALSO

*dmenu*(1), *fork*(2), *ncurses*(3), *tty*(4)

_Pango Reference Manual_, https://developer.gnome.org/pango/1.46/, August 20,
2020, Fonts — pango_font_description_from_string().

# AUTHORS

*bemenu* is written and maintained by Jari Vetoniemi <_mailroxas@gmail.com_>
with the help of various contributors.
