2014-03-18 17:20:33 +01:00
bemenu
======
Dynamic menu library and client program inspired by dmenu
2014-03-18 18:31:50 +01:00
2020-02-08 10:21:39 +01:00
![preview ](.github/preview.svg )
2021-05-20 04:49:44 +02:00
## Releases
Releases are signed with [29317348D687B86B ](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x29317348D687B86B ) and published [on GitHub ](https://github.com/Cloudef/bemenu/releases ).
2020-02-07 14:56:50 +01:00
## Building
```sh
# Build everything
make
# To build only certain features, pass the targets which you are interested into
#
# You can also use the following meta-targets for common features:
# - clients (bemenu, bemenu-run)
# - x11
# - wayland
# - curses
#
2020-02-08 11:25:06 +01:00
# For example this would build the bemenu and bemenu-run binaries and the x11 backend:
2020-02-07 14:56:50 +01:00
make clients x11
# To install the built features, simply run:
make install
# NOTE: You may get errors during install when not building all the features.
# These errors are free to ignore if `Install OK!` is printed.
2019-03-24 14:57:48 +01:00
2020-02-07 14:56:50 +01:00
# By default that will install to /usr/local, but you can change this with PREFIX
make install PREFIX=/usr
2019-03-24 14:57:48 +01:00
2020-02-07 14:56:50 +01:00
# Other usual variables are available for modifying such as DESTDIR, bindir, libdir and mandir
2020-02-07 22:34:41 +01:00
# Note that if you want a custom PREFIX or libdir, you should pass those during build as well,
2020-02-08 11:25:06 +01:00
# since they will be used compile-time to figure out where to load backends from!
2019-03-24 14:57:48 +01:00
2020-02-07 14:56:50 +01:00
# HTML API documentation (requires doxygen installed):
make doxygen
2020-02-08 10:31:06 +01:00
# To test from source, you have to point the LD_LIBRARY_PATH and BEMENU_RENDERERS variables:
LD_LIBRARY_PATH=. BEMENU_RENDERERS=. ./bemenu-run
2020-02-07 14:56:50 +01:00
```
2019-03-24 14:57:48 +01:00
2020-02-07 15:35:01 +01:00
## OSX
```sh
2020-02-07 18:50:20 +01:00
# Make sure you have GNU Make and pkg-config installed
brew install make pkg-config
2020-02-07 15:35:01 +01:00
2020-02-07 18:50:20 +01:00
# You may need to setup your pkg-config to point to the brew version of the libraries
2020-02-08 11:25:06 +01:00
# For example to build curses backend, you'd do:
2020-05-07 07:48:22 +02:00
PKG_CONFIG_PATH="/usr/local/opt/ncurses/lib/pkgconfig" sh build-osx.sh curses
2020-02-07 15:35:01 +01:00
2020-05-07 07:48:22 +02:00
# Other than that, follow the normal build steps, but use `build-osx.sh` instead of make
2020-02-07 15:35:01 +01:00
```
2020-02-07 15:50:17 +01:00
## Dependencies
2021-12-27 17:53:57 +01:00
- C compiler
- scdoc to generate manpage
### Backend-specific
All dependencies below are searched with `pkg-config`
2020-02-07 15:50:17 +01:00
2020-02-08 11:25:06 +01:00
| Backend | Dependencies |
2020-02-07 16:27:40 +01:00
|----------|------------------------------------------------------------------------|
2020-02-08 10:26:33 +01:00
| curses | ncursesw |
2020-02-07 16:27:40 +01:00
| x11 | x11, xinerama, cairo, pango, pangocairo |
2020-02-12 11:14:57 +01:00
| Wayland | wayland-client, wayland-protocols, cairo, pango, pangocairo, xkbcommon |
2020-02-07 15:50:17 +01:00
2021-11-01 20:16:45 +01:00
Currently, pasting from clipboard is done at runtime with `wl-paste -t text/plain` and `xclip -t text/plain -out` , attempted in that order.
2021-11-23 20:10:47 +01:00
### Installing the dependencies
#### Ubuntu 20.04
```sh
2021-12-27 17:53:57 +01:00
sudo apt install scdoc wayland-protocols libcairo-dev libpango1.0-dev libxkbcommon-dev libwayland-dev
2021-11-23 20:10:47 +01:00
```
2020-02-07 14:56:50 +01:00
## Environment variables
| Variable | Description | Value |
|------------------|-----------------------------------------|----------------------|
2020-02-07 22:11:42 +01:00
| BEMENU_OPTS | Options for bemenu, bemenu-run from env | Any cli argument |
2020-02-08 11:25:06 +01:00
| BEMENU_BACKEND | Force backend by name | x11, wayland, curses |
| BEMENU_RENDERER | Force backend by loading a .so file | Path to the .so file |
| BEMENU_RENDERERS | Override the backend search path | Path to a directory |
2020-06-28 17:12:20 +02:00
| BEMENU_SCALE | Override the rendering scale factor | Float value |
2020-02-07 14:56:50 +01:00
## About Wayland support
Wayland is only supported by compositors that implement the [wlr-layer-shell ](https://github.com/swaywm/wlr-protocols/tree/master/unstable ) protocol.
Typically [wlroots ](https://github.com/swaywm/wlroots )-based compositors.
2019-03-24 14:57:48 +01:00
2020-10-16 21:32:19 +02:00
## Keybindings
| Key | Binding |
|---------------------|----------------------------------------------------------------|
| Left Arrow | Move cursor left |
| Right Arrow | Move cursor right |
| Up Arrow | Move to previous item |
| Down Arrow | Move to next item |
| Shift + Left Arrow | Select previous item |
| Shift + Right Arrow | Select next item |
| Shift + Alt + < | Select first item in actual list |
| Shift + Alt + > | Select last item in actual list |
| Shift + Page Up | Select first item in actual list |
| Shift + Page Down | Select last item in actual list |
| Page Up | Select first item in displayed list |
| Page Down | Select last item in displayed list |
| Tab | Move to next item |
| Shift + Tab | Select item and place it in filter |
| Esc | Exit bemenu |
| Insert | Return filter text or selected items if multi selection |
| Shift + Return | Return filter text or selected items if multi selection |
| Return | Execute selected item |
| Home | Curses cursor set to 0 |
| End | Cursor set to end of filter text |
| Backspace | Delete character at cursor |
| Delete | Delete character at cursor |
| Delete Left | Delete text before cursor |
| Delete Right | Delete text after cursor |
| Word Delete | Delete all text in filter |
| Alt + v | Select last item in displayed list |
| Alt + j | Select next item |
| Alt + d | Select last item in display list |
| Alt + l | Select previous item |
| Alt + f | Select next item |
| Alt + 0-9 | Execute selected item with custom exit code |
| Ctrl + Return | Select item but don't quit to select multiple items |
| Ctrl + g | Exit bemenu |
| Ctrl + n | Select next item |
| Ctrl + p | Select previous item |
| Ctrl + a | Move cursor to beginning of text in filter |
| Ctrl + e | Move cursor to end of text in filter |
| Ctrl + h | Delete character at cursor |
| Ctrl + u | Kill text behind cursor |
| Ctrl + k | Kill text after cursor |
| Ctrl + w | Kill all text in filter |
| Ctrl + m | Execute selected item |
2021-11-01 19:52:18 +01:00
| Ctrl + y | Paste clipboard |
2020-10-16 21:32:19 +02:00
2021-04-26 16:20:35 +02:00
## Projects using bemenu
* [pinentry-bemenu ](https://github.com/t-8ch/pinentry-bemenu )
2014-03-18 18:31:50 +01:00
## License
2020-02-07 14:56:50 +01:00
2014-03-18 20:20:11 +01:00
* [GNU GPLv3 (or any later version) ](LICENSE-CLIENT ) for client program[s] and
other sources except library and bindings
* [GNU LGPLv3 (or any later version) ](LICENSE-LIB ) for library and bindings