One of the things I’ve missed in the Vim to Emacs migration is solid recursive fuzzy file search. I tried bling/fzf.el, and ended up spending the weekend working on it.
Rather than just work with fuzzy file search, I got way too into the possibility of using fzf as a general completion engine. Fzf.el already had a decent way of invoking fzf (spawn a terminal buffer and shell out) but the real potential is in the programmability.
My code/fork exposes fzf by saying given a list and a function, the user can select an item with FZF and it will be passed to the function. It becomes trivial to run your own actions:
; Example (fzf-with-entries (list "a" "b" "c") 'print) ; Open recent file (defun fzf-recentf () (interactive) (fzf-with-entries recentf-list (lambda (f) (when (file-exists-p f) (find-file f)))) ) ; Recursive fuzzy file search ; (resolve-directory will use the projectile root if set) (defun fzf-find-file (&optional directory) (interactive) (let ((d (fzf/resolve-directory directory))) (fzf-base (lambda (x) (let ((f (expand-file-name x d))) (when (file-exists-p f) (find-file f)))) d)))