comparison lisp/dired/dired-guess.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:376386a54a3c
1 ;;; -*- Mode: Emacs-lisp -*- ;;;
2 ;;; dired-guess.el - In Dired, guess what shell command to apply.
3
4 ;;; Copyright (C) 1991, 1992 Gregory N. Shapiro
5 ;;;
6 ;;; Author: Gregory N. Shapiro gshapiro@wpi.wpi.edu
7 ;;;
8 ;;; This program is free software; you can redistribute it and/or modify
9 ;;; it under the terms of the GNU General Public License as published by
10 ;;; the Free Software Foundation; either version 2, or (at your option)
11 ;;; any later version.
12 ;;;
13 ;;; This program is distributed in the hope that it will be useful,
14 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ;;; GNU General Public License for more details.
17 ;;;
18 ;;; A copy of the GNU General Public License can be obtained from this
19 ;;; program's author (send electronic mail to the above address) or from
20 ;;; Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22
23 ;;; This extension to Sebastian Kremer's (sk@thp.Uni-Koeln.DE) Tree-Dired
24 ;;; permits dired to guess a shell command to use when the user performs
25 ;;; a shell command on a single file.
26 ;;;
27 ;;; New variables (user options):
28 ;;; dired-auto-shell-command-alist
29 ;;; dired-auto-shell-use-last-extension
30 ;;; dired-guess-have-gnutar
31 ;;;
32 ;;; Replaces procedures:
33 ;;; dired-read-shell-command (new doc, calls dired-guess-shell-command)
34 ;;;
35 ;;; Adds procedures:
36 ;;; dired-guess-shell-command (guesses command by comparing file extensions
37 ;;; to dired-auto-shell-command-alist)
38
39 ;; LISPDIR ENTRY for the Elisp Archive ===============================
40 ;; LCD Archive Entry:
41 ;; dired-guess|Gregory N. Shapiro|gshapiro@wpi.wpi.edu
42 ;; |Guess a Dired shell command from the filename.
43
44 ;; INSTALLATION
45 ;;
46 ;; Put this file into your load-path and add (load "dired-guess") to
47 ;; your dired-load-hook, e.g.
48 ;;
49 ;; (setq dired-load-hook '(lambda ()
50 ;; ;; possibly more statements here
51 ;; (load "dired-guess")))
52 ;;
53 ;; Note: dired-guess must be loaded after dired-extra.
54 ;;
55 ;; If dired-auto-shell-use-last-extension is nil, all file extensions will
56 ;; be used to determine the command to use. If nil, use all the
57 ;; extensions. For example, foo.tar.Z would guess for the .tar.Z extension.
58 ;; If non-nil, uses only the last extension of the filename. For example,
59 ;; foo.tar.Z would use the guess for the .Z extension.
60 ;;
61 ;; Set dired-guess-have-gnutar to the name of the GNU tar file (defaults to
62 ;; "gnutar"). Set to nil if you don't have GNU tar installed on your system.
63 ;; GNU tar is available for anonymous ftp at prep.ai.mit.edu.
64
65 (defvar dired-guess-have-gnutar "gnutar"
66 "*If non-nil, name of GNU tar (e.g. \"tar\" or \"gnutar\").
67 GNU tar's `z' switch is used for compressed tar files.
68 If you don't have GNU tar, set this to nil: a pipe is then used.")
69
70 (defvar dired-guess-tar (or dired-guess-have-gnutar "tar"))
71
72 (defvar dired-auto-shell-command-alist
73 (list
74 '(".Z" . "uncompress")
75 '(".Z.uu" . "uudecode * | uncompress")
76 '(".uu" . "uudecode")
77 '(".hqx" . "mcvert")
78 '(".sh" . "sh")
79 '(".shar" . "unshar")
80 (cons ".tar" (concat dired-guess-tar " xvf"))
81 (cons ".tar.Z" (if dired-guess-have-gnutar
82 (concat dired-guess-tar " xvfz")
83 (concat "zcat * | " dired-guess-tar " xvf -")))
84 (cons ".tar.Z.uu" (if dired-guess-have-gnutar
85 (concat "uudecode * | " dired-guess-tar " xvfz -")
86 "uudecode * | zcat | tar xvf -")))
87
88 "*Alist of file extensions and their suggested commands.
89 See also variable `dired-auto-shell-use-last-extension'.")
90
91 (defvar dired-auto-shell-use-last-extension nil
92 "*If non-nil, uses only the last extension of the filename.
93 For example, foo.tar.Z would use the guess for the .Z extension.
94 If nil, use all the extensions. For example, foo.tar.Z would guess
95 for the .tar.Z extension.")
96
97 (defun dired-read-shell-command (prompt arg files)
98 "Read a dired shell command using generic minibuffer history.
99 This command tries to guess a command from the filename(s)
100 from the variable `dired-auto-shell-command-alist' (which see)."
101 (dired-mark-pop-up
102 nil 'shell files ; bufname type files
103 'dired-guess-shell-command ; function &rest args
104 (format prompt (dired-mark-prompt arg files)) files))
105
106
107 (defun dired-guess-shell-command (prompt files)
108 ;;"Ask user with PROMPT for a shell command, guessing a default from FILES."
109 (let ((defalt (if (cdr files)
110 nil ; If more than one file, don't guess
111 (cdr (assoc
112 (substring (car files) ; Separate extension & lookup
113 (if dired-auto-shell-use-last-extension
114 (string-match "\.[^.]*$" (car files))
115 (string-match "\\." (car files))))
116 dired-auto-shell-command-alist)))))
117 (if (not (featurep 'gmhist))
118 (read-string prompt defalt)
119 (if defalt
120 (put 'dired-shell-command-history 'default defalt)))
121 (read-with-history-in 'dired-shell-command-history prompt)))