diff options
author | William Carroll <wpcarro@gmail.com> | 2020-04-02T17·34+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-04-02T17·34+0100 |
commit | 691583ed5c8a722fec40c719599e9b2f458e7bdb (patch) | |
tree | b79a888f80951212b23676e12f451d408231236c /emacs/.emacs.d/wpc/ivy-helpers.el | |
parent | d12b8b3dcb97aa6365eca061a260b74b41bfd452 (diff) |
Refactor opening X applications from Emacs
I borrowed heavily from Vincent's depot.
Diffstat (limited to 'emacs/.emacs.d/wpc/ivy-helpers.el')
-rw-r--r-- | emacs/.emacs.d/wpc/ivy-helpers.el | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/emacs/.emacs.d/wpc/ivy-helpers.el b/emacs/.emacs.d/wpc/ivy-helpers.el index c71a907a20c1..75b22fa4bb79 100644 --- a/emacs/.emacs.d/wpc/ivy-helpers.el +++ b/emacs/.emacs.d/wpc/ivy-helpers.el @@ -26,6 +26,40 @@ with the key and value from KV." :action (lambda (entry) (funcall f (car entry) (cdr entry))))) +(defun ivy-helpers/do-run-external-command (cmd) + "Execute the specified CMD and notify the user when it finishes." + (message "Starting %s..." cmd) + (set-process-sentinel + (start-process-shell-command cmd nil cmd) + (lambda (process event) + (when (string= event "finished\n") + (message "%s process finished." process))))) + +(defun ivy-helpers/list-external-commands () + "Creates a list of all external commands available on $PATH while filtering +NixOS wrappers." + (cl-loop + for dir in (split-string (getenv "PATH") path-separator) + when (and (file-exists-p dir) (file-accessible-directory-p dir)) + for lsdir = (cl-loop for i in (directory-files dir t) + for bn = (file-name-nondirectory i) + when (and (not (s-contains? "-wrapped" i)) + (not (member bn completions)) + (not (file-directory-p i)) + (file-executable-p i)) + collect bn) + append lsdir into completions + finally return (sort completions 'string-lessp))) + +(defun ivy-helpers/run-external-command () + "Prompts the user with a list of all installed applications and +lets them select one to launch." + (interactive) + (let ((external-commands-list (list-external-commands))) + (ivy-read "Command:" external-commands-list + :require-match t + :action #'ivy-helpers/do-run-external-command))) + ;;; Code: (provide 'ivy-helpers) ;;; ivy-helpers.el ends here |