From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: Minibuffer default values list Date: Mon, 12 Nov 2007 01:42:54 +0200 Organization: JURTA Message-ID: <87prygxtot.fsf@jurta.org> References: <87zlycuhrd.fsf@jurta.org> <87hckbecc0.fsf@jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1194825060 27777 80.91.229.12 (11 Nov 2007 23:51:00 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 11 Nov 2007 23:51:00 +0000 (UTC) Cc: emacs-devel@gnu.org To: rms@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Nov 12 00:51:03 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IrMZw-0006YI-R4 for ged-emacs-devel@m.gmane.org; Mon, 12 Nov 2007 00:51:01 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IrMZk-0000EM-Ly for ged-emacs-devel@m.gmane.org; Sun, 11 Nov 2007 18:50:48 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IrMYh-0008J8-4U for emacs-devel@gnu.org; Sun, 11 Nov 2007 18:49:43 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IrMYe-0008Hn-SN for emacs-devel@gnu.org; Sun, 11 Nov 2007 18:49:42 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IrMYe-0008Hf-Kf for emacs-devel@gnu.org; Sun, 11 Nov 2007 18:49:40 -0500 Original-Received: from [62.64.120.201] (helo=relay03.kiev.sovam.com) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IrMYZ-0004V7-PD; Sun, 11 Nov 2007 18:49:36 -0500 Original-Received: from [83.170.232.243] (helo=smtp.svitonline.com) by relay03.kiev.sovam.com with esmtp (Exim 4.67) (envelope-from ) id 1IrMYW-0000I4-UJ; Mon, 12 Nov 2007 01:49:33 +0200 In-Reply-To: <87hckbecc0.fsf@jurta.org> (Juri Linkov's message of "Sun, 28 Oct 2007 12:57:19 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux) X-Scanner-Signature: cdcac4e9833a162831dcdc7415f73b92 X-DrWeb-checked: yes X-SpamTest-Envelope-From: juri@jurta.org X-SpamTest-Group-ID: 00000000 X-SpamTest-Header: Not Detected X-SpamTest-Info: Profiles 1761 [Nov 09 2007] X-SpamTest-Info: helo_type=3 X-SpamTest-Info: {HEADERS: header Content-Type found without required header Content-Transfer-Encoding} X-SpamTest-Method: none X-SpamTest-Rate: 19 X-SpamTest-Status: Not detected X-SpamTest-Status-Extended: not_detected X-SpamTest-Version: SMTP-Filter Version 3.0.0 [0255], KAS30/Release X-detected-kernel: by monty-python.gnu.org: FreeBSD 4.7-5.2 (or MacOS X 10.2-10.4) (2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:82990 Archived-At: >> 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/