[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Minibuffer default values list
From: |
Juri Linkov |
Subject: |
Re: Minibuffer default values list |
Date: |
Mon, 12 Nov 2007 01:42:54 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux) |
>> You could put this code in both. dired-x is not used by most users,
>> so having it only in dired-x is not very useful.
>
> Below is a prototype code that puts commands retrieved by the mailcap
> feature into the default list of the command `!' in Dired. `M-n' allows
> selecting a command to run. The default list contains commands common to
> all marked files. Since mailcap marks the argument placeholder with
> `%s', it's necessary to replace it with `*' used in Dired for the
> same purpose, or remove it at the end of the command.
>
> If this approach is right, before installing in CVS this code could be
> changed to not use cl functions.
Below is a patch ready to install that implements this feature
without using cl functions:
Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.157
diff -c -r1.157 dired-aux.el
*** lisp/dired-aux.el 9 Nov 2007 09:45:23 -0000 1.157
--- lisp/dired-aux.el 11 Nov 2007 23:41:29 -0000
***************
*** 463,468 ****
--- 498,547 ----
;;; Shell commands
+ (defun dired-read-shell-command-default (files)
+ "Return a list of default commands for `dired-read-shell-command'."
+ (require 'mailcap)
+ (mailcap-parse-mailcaps)
+ (mailcap-parse-mimetypes)
+ (let* ((all-mime-type
+ ;; All unique MIME types from file extensions
+ (delete-dups (mapcar (lambda (file)
+ (mailcap-extension-to-mime
+ (file-name-extension file t)))
+ files)))
+ (all-mime-info
+ ;; All MIME info lists
+ (delete-dups (mapcar (lambda (mime-type)
+ (mailcap-mime-info mime-type 'all))
+ all-mime-type)))
+ (common-mime-info
+ ;; Intersection of mime-infos from different mime-types;
+ ;; or just the first MIME info for a single MIME type
+ (if (cdr all-mime-info)
+ (delq nil (mapcar (lambda (mi1)
+ (unless (memq nil (mapcar
+ (lambda (mi2)
+ (member mi1 mi2))
+ (cdr all-mime-info)))
+ mi1))
+ (car all-mime-info)))
+ (car all-mime-info)))
+ (commands
+ ;; Command strings from `viewer' field of the MIME info
+ (delq nil (mapcar (lambda (mime-info)
+ (let ((command (cdr (assoc 'viewer mime-info))))
+ (if (stringp command)
+ (replace-regexp-in-string
+ ;; Replace mailcap's `%s' placeholder
+ ;; with dired's `*' placeholder
+ "%s" "*"
+ (replace-regexp-in-string
+ ;; Remove the final filename placeholder
+ "\s*\\('\\)?%s\\1?\s*$" "" command nil t)
+ nil t))))
+ common-mime-info))))
+ commands))
+
(defun dired-read-shell-command (prompt arg files)
;; "Read a dired shell command prompting with PROMPT (using read-string).
;;ARG is the prefix arg and may be used to indicate in the prompt which
***************
*** 472,478 ****
nil 'shell files
(function read-string)
(format prompt (dired-mark-prompt arg files))
! nil 'shell-command-history))
;; The in-background argument is only needed in Emacs 18 where
;; shell-command doesn't understand an appended ampersand `&'.
--- 551,558 ----
nil 'shell files
(function read-string)
(format prompt (dired-mark-prompt arg files))
! nil 'shell-command-history
! (dired-read-shell-command-default files)))
;; The in-background argument is only needed in Emacs 18 where
;; shell-command doesn't understand an appended ampersand `&'.
--
Juri Linkov
http://www.jurta.org/emacs/
- Re: Minibuffer default values list, Juri Linkov, 2007/11/11
- Re: Minibuffer default values list, Juri Linkov, 2007/11/11
- Re: Minibuffer default values list,
Juri Linkov <=
- Re: Minibuffer default values list, Richard Stallman, 2007/11/12
- Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list), Juri Linkov, 2007/11/15
- Re: Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list), Richard Stallman, 2007/11/17
- Re: Substitute ? in dired without surrounding whitespace, Juri Linkov, 2007/11/17
- Re: Substitute ? in dired without surrounding whitespace, Richard Stallman, 2007/11/18
- Re: Minibuffer default values list, Juri Linkov, 2007/11/18
- Re: Minibuffer default values list, Richard Stallman, 2007/11/21
- Re: Minibuffer default values list, Juri Linkov, 2007/11/22
- Re: Minibuffer default values list, Richard Stallman, 2007/11/22
- Re: Minibuffer default values list, Juri Linkov, 2007/11/24