Emacs: Open File in External App
Open File in External App
Here's a emacs command to open the current file or marked dired files in external app. (as if you double-clicked the file on desktop) It's useful for image files, PDF file, video, audio files.
Put this in your emacs init file.
(defun xah-open-in-external-app () "Open the current file or dired marked files in external app. The app is chosen from your OS's preference. URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html' Version 2016-10-15" (interactive) (let* ( ($file-list (if (string-equal major-mode "dired-mode") (dired-get-marked-files) (list (buffer-file-name)))) ($do-it-p (if (<= (length $file-list) 5) t (y-or-n-p "Open more than 5 files? ")))) (when $do-it-p (cond ((string-equal system-type "windows-nt") (mapc (lambda ($fpath) (w32-shell-execute "open" (replace-regexp-in-string "/" "\\" $fpath t t))) $file-list)) ((string-equal system-type "darwin") (mapc (lambda ($fpath) (shell-command (concat "open " (shell-quote-argument $fpath)))) $file-list)) ((string-equal system-type "gnu/linux") (mapc (lambda ($fpath) (let ((process-connection-type nil)) (start-process "" nil "xdg-open" $fpath))) $file-list))))))
Show in Desktop
The following shows the file in desktop folder viewer. (Microsoft Windows Explorer, Mac's Finder, Linux's file manager.)
(defun xah-show-in-desktop () "Show current file in desktop. (Mac Finder, Windows Explorer, Linux file manager) This command can be called when in a file or in `dired'. URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html' Version 2018-09-29" (interactive) (let (($path (if (buffer-file-name) (buffer-file-name) default-directory ))) (cond ((string-equal system-type "windows-nt") (w32-shell-execute "explore" (replace-regexp-in-string "/" "\\" $path t t))) ((string-equal system-type "darwin") (if (eq major-mode 'dired-mode) (let (($files (dired-get-marked-files ))) (if (eq (length $files) 0) (progn (shell-command (concat "open " default-directory))) (progn (shell-command (concat "open -R " (shell-quote-argument (car (dired-get-marked-files )))))))) (shell-command (concat "open -R " $path)))) ((string-equal system-type "gnu/linux") (let ( (process-connection-type nil) (openFileProgram (if (file-exists-p "/usr/bin/gvfs-open") "/usr/bin/gvfs-open" "/usr/bin/xdg-open"))) (start-process "" nil openFileProgram $path)) ;; (shell-command "xdg-open .") ;; 2013-02-10 this sometimes froze emacs till the folder is closed. eg with nautilus ))))
You can give it a hotkey, see: Emacs: How to Define Keys.
Open in Terminal
Here's a command to open the current file's directory in terminal.
(defun xah-open-in-terminal () "Open the current dir in a new terminal window. URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html' Version 2017-10-09" (interactive) (cond ((string-equal system-type "windows-nt") (message "Microsoft Windows not supported. File a bug report or pull request.")) ((string-equal system-type "darwin") (let ((process-connection-type nil)) (start-process "" nil "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal" default-directory))) ((string-equal system-type "gnu/linux") (let ((process-connection-type nil)) (start-process "" nil "x-terminal-emulator" (concat "--working-directory=" default-directory))))))
Note: emacs has many shells and terminal emulators. [see Emacs: Run Shell in Emacs] But sometimes, it is necessary to run some command in dedicated terminal app.
[see Emacs: Difference between shell, term, eshell]
Open in TextEdit
This is Mac only.
this is great for spell checking! just open it in TextEdit, and you get all misspelled words highlighted automatically. In emacs, it's 10 times slower and doesn't work well.
(defun xah-open-in-textedit () "Open the current file or `dired' marked files in Mac's TextEdit. This command is for macOS only. URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html' Version 2017-11-21" (interactive) (let* ( ($file-list (if (string-equal major-mode "dired-mode") (dired-get-marked-files) (list (buffer-file-name)))) ($do-it-p (if (<= (length $file-list) 5) t (y-or-n-p "Open more than 5 files? ")))) (when $do-it-p (cond ((string-equal system-type "darwin") (mapc (lambda ($fpath) (shell-command (format "open -a TextEdit.app \"%s\"" $fpath))) $file-list))))))
Open in Safari
This is Mac only.
(defun xah-open-in-safari () "Open the current file or `dired' marked files in Mac's Safari browser. If the file is not saved, save it first. URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html' Version 2018-02-26" (interactive) (let* ( ($file-list (if (string-equal major-mode "dired-mode") (dired-get-marked-files) (list (buffer-file-name)))) ($do-it-p (if (<= (length $file-list) 5) t (y-or-n-p "Open more than 5 files? ")))) (when $do-it-p (cond ((string-equal system-type "darwin") (mapc (lambda ($fpath) (when (buffer-modified-p ) (save-buffer)) (shell-command (format "open -a Safari.app \"%s\"" $fpath))) $file-list))))))
Current File Commands
Dired topics
View Things Topic
If you have a question, put $5 at patreon and message me.