Álvaro Ramírez
Emacs: Open with macOS app
On a recent Reddit comment, tdstoff7 asked if I had considered writing an "Open with" DWIM shell command for those times one would like to open a file externally using an app other than the default. I hadn't, but nice idea.
Take images as an example. Though Emacs can display them quickly, I also open images externally using the default app (Preview in my case). But then there are those times when I'd like to open with a different app for editing (maybe something like GIMP). It'd be nice to quickly choose which app to open with.
There isn't much to the code. Get a list of apps, ask user to pick one (via completing-read), and launch the external app via dwim-shell-command-on-marked-files
.
There's likely a better way of getting a list of available apps (happy to take suggestions), but searching in "/Applications" "~/Applications" and "/System/Applications" does the job for now.
(defun dwim-shell-commands-macos-open-with () "Convert all marked images to jpg(s)." (interactive) (let* ((apps (seq-sort #'string-lessp (seq-mapcat (lambda (paths) (directory-files-recursively paths "\\.app$" t (lambda (path) (not (string-suffix-p ".app" path))))) '("/Applications" "~/Applications" "/System/Applications")))) (selection (progn (cl-assert apps nil "No apps found") (completing-read "Open with: " (mapcar (lambda (path) (propertize (file-name-base path) 'path path)) apps))))) (dwim-shell-command-on-marked-files "Open with" (format "open -a '%s' '<<*>>'" (get-text-property 0 'path selection)) :silent-success t :no-progress t :utils "open")))
dwim-shell-commands-macos-open-with
is now included in dwim-shell-command, available on melpa. What other uses can you find for it?