1
0
Fork
You've already forked fuzzel
0
forked from dnkl/fuzzel
App launcher and fuzzy finder for Wayland, inspired by rofi(1) and dmenu(1).
  • C 95.9%
  • Shell 2.7%
  • Meson 1.4%
Find a file
Peter Colberg 65a037a507 match: fix false-positive use-after-free after failed reallocarray()
With GCC 14.2.0 on Debian sid, fuzzel fails to build [1] on some non-x86
archs [2] due to a false-positive use-after-free error for free(tokens)
or free(tok_lengths), in the case where the corresponding reallocarray()
call fails. Revise error handling to free() immediately after a failing
reallocarray(), so that GCC follows that the calls to free() are valid.
[1] https://buildd.debian.org/status/fetch.php?pkg=fuzzel&arch=riscv64&ver=1.11.1%2Bds-1&stamp=1726441493&raw=0
[2] loong64, m68k, mips64el, powerpc, ppc64, ppc64el, riscv64, and s390x.
2024年10月26日 19:16:39 -04:00
.builds ci (sr.ht): pull directly from git.sr.ht 2022年08月23日 16:43:36 +02:00
3rd-party/nanosvg nanosvg: silence "may be used uninitialized" warning 2024年07月14日 13:35:31 +02:00
completions fixup: rename to --hide-before-typing 2024年09月11日 11:47:43 -04:00
doc docs: Document how to disable large images 2024年09月19日 11:07:57 -04:00
external external: wlr-protocols: bump 2021年06月27日 10:52:14 +02:00
nanosvg meson/nanosvg: add support for linking against system's nanosvg 2024年07月18日 18:09:55 +02:00
subprojects subprojects: use meson *.wrap files for tllist+fcft 2020年12月24日 13:26:02 +01:00
test test: Add test coverage for fzf mode sorting early-string matches higher 2024年10月02日 09:38:33 -04:00
.gitignore gitignore: ignore .cache 2022年08月09日 18:42:34 +02:00
.gitmodules fcft/tllist: remove git submodules 2020年01月11日 14:47:47 +01:00
.woodpecker.yaml ci: add a cairo-librsvg-no-png build 2024年08月14日 11:50:56 +02:00
application.c application: reset shaped_bold to NULL on text run flush 2024年09月05日 07:33:31 +02:00
application.h render: add support for rendering the selected entry in bold 2024年08月20日 08:42:01 +02:00
CHANGELOG.md wayland: don't commit any buffers until the surface has been configured 2024年10月04日 12:35:32 +02:00
char32.c dmenu: start rendering input before STDIN has been closed 2024年08月20日 08:08:04 +02:00
char32.h dmenu: start rendering input before STDIN has been closed 2024年08月20日 08:08:04 +02:00
clipboard.c Fix release build with GCC 11.x 2024年10月02日 08:35:03 +02:00
clipboard.h Add support for pasting text 2024年08月24日 08:34:51 +02:00
config.c config: bugfix: support XDG_CONFIG_HOME as absolute path 2024年09月11日 12:08:27 -04:00
config.h Added "hide-when-prompt-empty" command line and config option 2024年09月01日 17:38:14 +02:00
debug.c render: render match list using multiple rendering threads 2024年08月14日 09:50:24 +02:00
debug.h render: render match list using multiple rendering threads 2024年08月14日 09:50:24 +02:00
dmenu.c diagnostics: demote 'aborted' logging to debug level. 2024年09月11日 11:59:33 -04:00
dmenu.h dmenu: start rendering input before STDIN has been closed 2024年08月20日 08:08:04 +02:00
event.c dmenu: start rendering input before STDIN has been closed 2024年08月20日 08:08:04 +02:00
event.h dmenu: start rendering input before STDIN has been closed 2024年08月20日 08:08:04 +02:00
fdm.c tllist: is now an external "library", so use <> includes 2019年11月17日 19:18:21 +01:00
fdm.h fdm: sync with latest FDM - fdm_del() now closes FD 2019年11月05日 11:00:15 +01:00
fuzzel.ini fixup: rename to --hide-before-typing 2024年09月11日 11:47:43 -04:00
generate-version.sh generate-version: handle git repo not having any tags 2021年10月11日 20:22:58 +02:00
icon.c dmenu: start rendering input before STDIN has been closed 2024年08月20日 08:08:04 +02:00
icon.h icon: icon_reload_application_icons() -> icon_lookup_application_icons() 2022年04月17日 23:28:09 +02:00
key-binding.c key-binding: disable debug logging by default 2022年10月28日 16:32:06 +02:00
key-binding.h Add support for pasting text 2024年08月24日 08:34:51 +02:00
LICENSE license: fix bad copy-paste: first commit was in 2019 2020年07月25日 08:51:51 +02:00
log.c log: respect the NO_COLOR environment variable 2024年07月18日 08:36:13 +02:00
log.h main: add --log-level=none|info|warning|error command line option 2022年02月04日 23:13:23 +01:00
macros.h macros: add missing UNREACHABLE() 2024年08月14日 09:55:32 +02:00
main.c Merge branch 'hide-when-prompt-empty' 2024年09月11日 11:48:35 -04:00
match.c match: fix false-positive use-after-free after failed reallocarray() 2024年10月26日 19:16:39 -04:00
match.h match: do matching/filtering using a thread pool 2024年08月20日 08:29:37 +02:00
meson.build meson+pkgbuild: bump version to 1.11.1 2024年09月13日 08:35:36 +02:00
meson_options.txt meson/nanosvg: add support for linking against system's nanosvg 2024年07月18日 18:09:55 +02:00
nanosvg.c meson/nanosvg: add support for linking against system's nanosvg 2024年07月18日 18:09:55 +02:00
nanosvgrast.c meson/nanosvg: add support for linking against system's nanosvg 2024年07月18日 18:09:55 +02:00
path.c path: initialize lower-case title, and the title-length fields 2024年08月25日 11:16:33 +00:00
path.h Add --list-executables-in-path command line option 2024年01月05日 11:14:36 +00:00
PKGBUILD meson+pkgbuild: bump version to 1.11.1 2024年09月13日 08:35:36 +02:00
png-fuzzel.h svg: add support for using nanosvg as SVG backend 2021年10月07日 19:18:54 +02:00
png.c png: handle unrecognized PNG color types (by erroring out) 2024年08月14日 09:49:31 +02:00
prompt.c Add support for pasting text 2024年08月24日 08:34:51 +02:00
prompt.h Add support for pasting text 2024年08月24日 08:34:51 +02:00
README.md test: minimium viable test suite 2024年10月02日 13:26:41 +00:00
render.c render: fix cursor glitches with custom line heights 2024年10月02日 07:49:05 +02:00
render.h render: font-shape the input string 2024年09月05日 11:26:29 +02:00
shm.c Fix compilation with librsvg after adding threading rendering 2024年08月14日 10:59:34 +02:00
shm.h Fix compilation with librsvg after adding threading rendering 2024年08月14日 10:59:34 +02:00
stride.h Add missing file 2019年09月29日 13:00:03 +02:00
uri.c Add support for pasting text 2024年08月24日 08:34:51 +02:00
uri.h Add support for pasting text 2024年08月24日 08:34:51 +02:00
wayland.c wayland: don't commit any buffers until the surface has been configured 2024年10月04日 12:35:32 +02:00
wayland.h Add support for pasting text 2024年08月24日 08:34:51 +02:00
xdg.c match: do matching/filtering using a thread pool 2024年08月20日 08:29:37 +02:00
xdg.h config: new option filter-desktop 2023年06月06日 09:31:32 -07:00

CI status

Fuzzel

Fuzzel is a Wayland-native application launcher and fuzzy finder, inspired by rofi and dmenu.

Packaging status

Screenshot

Screenshot

Fuzzel, with transparency, on top of a browser window showing a diff of a fuzzel commit

Features

For app launching

  • Fuzzy-find applications from a list and launch them
  • Icon support
  • Remembers frequently launched applications
  • Customize which .desktop files are searched
  • Option to filter apps based on OnlyShowIn and NotShowIn
  • Startup notification support
  • Launch prefix option to customize how apps are launched
  • Display a large icon of current selection if there are only a few matches
  • Option to display executables in $PATH
  • Option to execute the input rather than return an app
  • Support for localized strings

For dmenu mode

  • dmenu mode where newline separated entries are read from STDIN
  • Support for Rofi's protocol to support icons
  • Optional cache with custom path
  • Password mode
  • Prompt-only mode
  • Exact-match option to support multi-stage menus
  • Option to return index of what's selected rather than what's selected
  • Some dmenu option compatibility. Invoking it as dmenu enables dmenu mode
  • Option for null-separated input

For all modes

  • Numerous customizable key bindings, based on Emacs
  • Mouse support
  • Paste support
  • A number of theming options, which can be set in a separate include file
  • fzf-style matching with ability to filter huge lists
  • Optimized for performance
  • Zsh and Fish completions
  • Support for true fractional scaling
  • Wayland native

For details, see man fuzzel and man fuzzel.ini

Requirements

Runtime

  • pixman
  • wayland (client and cursor libraries)
  • xkbcommon
  • cairo (optional, required by librsvg)
  • libpng (optional)
  • librsvg (optional, for enhanced SVG icon support)
  • fcft 1

Fuzzel uses the builtin nanosvg backend to render SVG icons by default. Since nanosvg is somewhat limited, we also offer a librsvg backend for SVG icons. Note that librsvg also requires cairo.

Building

  • meson
  • ninja
  • wayland protocols
  • scdoc
  • tllist 1

Installation

To build, first, create a build directory, and switch to it:

mkdir -p bld/release && cd bld/release

Second, configure the build (if you intend to install it globally, you might also want --prefix=/usr):

meson --buildtype=release \
 -Denable-cairo=disabled|enabled|auto \
 -Dpng-backend=none|libpng \
 -Dsvg-backend=none|librsvg|nanosvg \
 ../..

-D{png,svg}-backend can be used to force-enable or force-disable a specific png and/or svg backend. Note that nanosvg is builtin (i.e. it needs to external dependencies).

-Denable-cairo can be used to force-enable or force-disable cairo support. When disabled, fuzzel will not be able to draw rounded corners, nor will it support SVGs using the librsvg backend.

Three, build it:

ninja

You can now run it directly from the build directory:

./fuzzel

Use command line arguments to configure the look-and-feel:

./fuzzel --help

Optionally, install it:

ninja install

For more detailed configuration information, see the man pages:

man fuzzel
man fuzzel.ini

Testing

Fuzzel has some automated tests in test/. To run them, Fish shell and wtype are required. The test runner can be installed within Fish shell with:

fisher install jorgebucaran/fishtape

Once installed, the tests can be run with:

fishtape test/*.fish

License

Fuzzel is released under the MIT license.

Fuzzel uses nanosvg, released under the Zlib license.


  1. can also be built as subprojects, in which case they are statically linked. ↩︎