All Projects → axelf4 → hotfuzz

axelf4 / hotfuzz

Licence: GPL-3.0 license
🚓 Fuzzy Emacs completion style

Programming Languages

emacs lisp
2029 projects
c
50402 projects - #5 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to hotfuzz

Similar Text Finder
🐝 PHP Similar Text Finder aka Fuzzy search. `Did you mean "banana"?`
Stars: ✭ 126 (+125%)
Mutual labels:  fuzzy-search
Fzy
🔍 A simple, fast fuzzy finder for the terminal
Stars: ✭ 2,295 (+3998.21%)
Mutual labels:  fuzzy-search
levenshtein.c
Levenshtein algorithm in C
Stars: ✭ 77 (+37.5%)
Mutual labels:  fuzzy-search
Chrome Ff
Fuzzy Finder for Chrome/Chromium tabs and windows
Stars: ✭ 142 (+153.57%)
Mutual labels:  fuzzy-search
Fuzzysearch
Find parts of long text or data, allowing for some changes/typos.
Stars: ✭ 157 (+180.36%)
Mutual labels:  fuzzy-search
Tntsearch
A fully featured full text search engine written in PHP
Stars: ✭ 2,693 (+4708.93%)
Mutual labels:  fuzzy-search
Vim Ctrlspace
Vim Space Controller
Stars: ✭ 1,621 (+2794.64%)
Mutual labels:  fuzzy-search
pick.vim
Functions for using pick from within Vim.
Stars: ✭ 40 (-28.57%)
Mutual labels:  fuzzy-search
Enhancd
🚀 A next-generation cd command with your interactive filter
Stars: ✭ 2,049 (+3558.93%)
Mutual labels:  fuzzy-search
Fuzzball.js
Easy to use and powerful fuzzy string matching, port of fuzzywuzzy.
Stars: ✭ 225 (+301.79%)
Mutual labels:  fuzzy-search
Nvim Lsputils
Better defaults for nvim-lsp actions
Stars: ✭ 142 (+153.57%)
Mutual labels:  fuzzy-search
Fuzzyfilepath
Autocomplete relative or absolute file paths in Sublime Text project folder
Stars: ✭ 153 (+173.21%)
Mutual labels:  fuzzy-search
Alfred Workflow
Full-featured library for writing Alfred 3 & 4 workflows
Stars: ✭ 2,622 (+4582.14%)
Mutual labels:  fuzzy-search
Symspell
SymSpell: 1 million times faster spelling correction & fuzzy search through Symmetric Delete spelling correction algorithm
Stars: ✭ 1,976 (+3428.57%)
Mutual labels:  fuzzy-search
git-smart-checkout
🧠 A command-line utility for switching git branches more easily. Switch branches interactively or use a fuzzy search to find that long-forgotten branch name.
Stars: ✭ 51 (-8.93%)
Mutual labels:  fuzzy-search
List.js
The perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on existing HTML.
Stars: ✭ 10,650 (+18917.86%)
Mutual labels:  fuzzy-search
Fuse
🔍 Fuzzy search for PHP based on the Bitap algorithm
Stars: ✭ 189 (+237.5%)
Mutual labels:  fuzzy-search
Yoyo-leaf
Yoyo-leaf is an awesome command-line fuzzy finder.
Stars: ✭ 49 (-12.5%)
Mutual labels:  fuzzy-search
sqlscan
Quick SQL Scanner, Dorker, Webshell injector PHP
Stars: ✭ 140 (+150%)
Mutual labels:  fuzzy-search
Scoper
Fuzzy and semantic search for captioned YouTube videos.
Stars: ✭ 225 (+301.79%)
Mutual labels:  fuzzy-search

hotfuzz

test codecov MELPA

This is a fuzzy Emacs completion style similar to the built-in flex style, but with a better scoring algorithm. Specifically, it is non-greedy and ranks completions that match at word; path component; or camelCase boundaries higher.

To use hotfuzz, add it to the completion-styles list:

(setq completion-styles '(hotfuzz))

Or, if using Fido, add hotfuzz to the completion-styles list this way:

(add-hook 'icomplete-minibuffer-setup-hook
          (lambda () (setq-local completion-styles '(hotfuzz))))

or, if using Selectrum, enable hotfuzz-selectrum-mode.

Note: Highlighting of the matched characters is only applied to the first hotfuzz-max-highlighted-completions completions, out of performance concerns. The default value is large enough so that generally you will need to scroll the list of completions beyond the second page to first see non-highlighted completions. If you are annoyed by this you can make it highlight all completions instead using

(setq hotfuzz-max-highlighted-completions most-positive-fixnum)

provided you are completing small enough lists and/or do not encounter performance problems. This is a non-issue when using hotfuzz-selectrum-mode since Selectrum supports lazy highlighting.

Customization

Hotfuzz adheres to a few of the default Emacs completion configuration options:

  • completion-ignore-case specifies whether case should be considered significant when matching.
  • The face completions-common-part is used for highlighting the characters of a candidate that the search string matched.

Dynamic module

Optionally, you may compile the bundled dynamic module to greatly improve the performance of filtering. Once the shared object is available in load-path it will automatically be picked up when hotfuzz is loaded, or you may evaluate (require 'hotfuzz-module) if hotfuzz already has been loaded. To compile, make sure GCC, CMake and GNU Make or similar are present, and run

mkdir build
cd build
cmake -DCMAKE_C_FLAGS='-O3 -march=native' .. \
	&& cmake --build .

and place the resulting shared library somewhere in load-path.

Unlike the Lisp implementation, the dynamic module uses an unstable sorting algorithm.

Related projects

The flex completion style

The flex completion style included with Emacs does the same matching as hotfuzz, and scores candidates based on gap sizes. It does not, however, attempt to find the optimal score. For example, given the search string "foo", the matched characters in a candidate could look like

xfxxxoxxxoxfoox

which would score low even though there is a contiguous match later in the string.

flx

The flx package - which out-of-the-box only supports Ido - has scoring criteria similar to those used by hotfuzz, but works a little differently. Its bountiful use of caching means it can be faster at scoring long candidates. Since the ordering of completions differs between flx and hotfuzz you are encouraged to try both.

orderless

The orderless completion style allows every component of a space-delimited (by default) pattern to match according to any other completion style. It is very customizable, but does no sorting and allows the individual sub-patterns to overlap ("foo foo" filters no additional items compared to "foo"). Hotfuzz on the other hand tries to be more clever about sorting, and so users who dislike that may prefer orderless.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].