(require 'cl-seq) (require 'ido) (defun all-commands () "does a completing read of all the programs accessible to you in $PATH" (let ((ls-output (mapcan (lambda (path) (when (file-readable-p path) (cl-remove-if (lambda (file) (let ((fullpath (concat path "/" file))) (or (file-directory-p fullpath) (not (file-executable-p fullpath))))) (directory-files path nil directory-files-no-dot-files-regexp nil)))) (split-string (getenv "PATH") ":" t))) (alias-output (split-string (shell-command-to-string "alias -p | sed -E 's/^alias ([^=]*)=.*$/\\1/'") "\n"))) (append ls-output alias-output))) (defun emenu (&optional command-list) "A dmenu-inspired application launcher using a separate emacs frame" (interactive) (with-selected-frame (make-frame '((name . "emenu") (minibuffer . only) (width . 151) (height . 1))) (unwind-protect (progn (call-process (ido-completing-read "Command: " (or command-list (all-commands))) nil 0) (keyboard-quit)) (delete-frame))))