Mercurial > hg > xemacs-beta
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))) |