]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a new command `mailcap-view-file'
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 1 Jun 2021 06:55:06 +0000 (08:55 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 1 Jun 2021 06:55:06 +0000 (08:55 +0200)
* doc/misc/emacs-mime.texi (mailcap): Document it (bug#12972).

* lisp/net/mailcap.el (mailcap-view-file): New command.

doc/misc/emacs-mime.texi
etc/NEWS
lisp/net/mailcap.el

index 0cf5ba965060ae7c7ba774ab63a677766a199d01..7cd3e5f58288180139f72ad9f53f6421baeb0bff 100644 (file)
@@ -1870,6 +1870,11 @@ A customizable list of viewers that take preference over
 Interface functions:
 
 @table @code
+@item mailcap-view-file
+@findex mailcap-view-file
+Prompt for a file name, and start a viewer applicable for the file
+type in question.
+
 @item mailcap-parse-mailcaps
 @findex mailcap-parse-mailcaps
 @vindex mailcap-prefer-mailcap-viewers
index 6622861aaf1a6ebcfded3a0663d4b3d568321a45..351295a2688d9d4225b0f6e02aedfe446fe34b39 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1991,6 +1991,10 @@ Shift while typing 'C-a', i.e. 'C-S-a', will now highlight the text.
 
 ** Miscellaneous
 
+*** New command 'mailcap-view-file'.
+This command will open a viewer based on the file type, as determined
+by ~/.mailcap and related files and variables.
+
 +++
 *** New command 'C-x C-k Q' to force redisplay in keyboard macros.
 
index 3097c9a671e118c77bbc69d07345bf705ab7c8d8..54f7f416abad0b75742e061b041ffa50c8d2a96c 100644 (file)
@@ -1156,6 +1156,29 @@ current buffer after passing its contents to the shell command."
           (mailcap--async-shell method file))
       (funcall method))))
 
+(defun mailcap-view-file (file)
+  "View FILE according to rules given by the mailcap system.
+This normally involves executing some external program to display
+the file.
+
+See \"~/.mailcap\", `mailcap-mime-data' and related files and variables."
+  (interactive "fOpen file with mailcap: ")
+  (setq file (expand-file-name file))
+  (mailcap-parse-mailcaps)
+  (let ((command (mailcap-mime-info
+                  (mailcap-extension-to-mime (file-name-extension file)))))
+    (unless command
+      (error "No viewer for %s" (file-name-extension file)))
+    ;; Remove quotes around the file name - we'll use shell-quote-argument.
+    (while (string-match "['\"]%s['\"]" command)
+      (setq command (replace-match "%s" t t command)))
+    (setq command (replace-regexp-in-string
+                  "%s"
+                  (shell-quote-argument (convert-standard-filename file))
+                  command
+                  nil t))
+    (start-process-shell-command command nil command)))
+
 (provide 'mailcap)
 
 ;;; mailcap.el ends here