Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/dired/dired-guess.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,121 @@ +;;; -*- Mode: Emacs-lisp -*- ;;; +;;; dired-guess.el - In Dired, guess what shell command to apply. + +;;; Copyright (C) 1991, 1992 Gregory N. Shapiro +;;; +;;; Author: Gregory N. Shapiro gshapiro@wpi.wpi.edu +;;; +;;; This program is free software; you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 2, or (at your option) +;;; any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; A copy of the GNU General Public License can be obtained from this +;;; program's author (send electronic mail to the above address) or from +;;; Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +;;; This extension to Sebastian Kremer's (sk@thp.Uni-Koeln.DE) Tree-Dired +;;; permits dired to guess a shell command to use when the user performs +;;; a shell command on a single file. +;;; +;;; New variables (user options): +;;; dired-auto-shell-command-alist +;;; dired-auto-shell-use-last-extension +;;; dired-guess-have-gnutar +;;; +;;; Replaces procedures: +;;; dired-read-shell-command (new doc, calls dired-guess-shell-command) +;;; +;;; Adds procedures: +;;; dired-guess-shell-command (guesses command by comparing file extensions +;;; to dired-auto-shell-command-alist) + +;; LISPDIR ENTRY for the Elisp Archive =============================== +;; LCD Archive Entry: +;; dired-guess|Gregory N. Shapiro|gshapiro@wpi.wpi.edu +;; |Guess a Dired shell command from the filename. + +;; INSTALLATION +;; +;; Put this file into your load-path and add (load "dired-guess") to +;; your dired-load-hook, e.g. +;; +;; (setq dired-load-hook '(lambda () +;; ;; possibly more statements here +;; (load "dired-guess"))) +;; +;; Note: dired-guess must be loaded after dired-extra. +;; +;; If dired-auto-shell-use-last-extension is nil, all file extensions will +;; be used to determine the command to use. If nil, use all the +;; extensions. For example, foo.tar.Z would guess for the .tar.Z extension. +;; If non-nil, uses only the last extension of the filename. For example, +;; foo.tar.Z would use the guess for the .Z extension. +;; +;; Set dired-guess-have-gnutar to the name of the GNU tar file (defaults to +;; "gnutar"). Set to nil if you don't have GNU tar installed on your system. +;; GNU tar is available for anonymous ftp at prep.ai.mit.edu. + +(defvar dired-guess-have-gnutar "gnutar" + "*If non-nil, name of GNU tar (e.g. \"tar\" or \"gnutar\"). +GNU tar's `z' switch is used for compressed tar files. +If you don't have GNU tar, set this to nil: a pipe is then used.") + +(defvar dired-guess-tar (or dired-guess-have-gnutar "tar")) + +(defvar dired-auto-shell-command-alist + (list + '(".Z" . "uncompress") + '(".Z.uu" . "uudecode * | uncompress") + '(".uu" . "uudecode") + '(".hqx" . "mcvert") + '(".sh" . "sh") + '(".shar" . "unshar") + (cons ".tar" (concat dired-guess-tar " xvf")) + (cons ".tar.Z" (if dired-guess-have-gnutar + (concat dired-guess-tar " xvfz") + (concat "zcat * | " dired-guess-tar " xvf -"))) + (cons ".tar.Z.uu" (if dired-guess-have-gnutar + (concat "uudecode * | " dired-guess-tar " xvfz -") + "uudecode * | zcat | tar xvf -"))) + + "*Alist of file extensions and their suggested commands. +See also variable `dired-auto-shell-use-last-extension'.") + +(defvar dired-auto-shell-use-last-extension nil + "*If non-nil, uses only the last extension of the filename. + For example, foo.tar.Z would use the guess for the .Z extension. +If nil, use all the extensions. For example, foo.tar.Z would guess + for the .tar.Z extension.") + +(defun dired-read-shell-command (prompt arg files) + "Read a dired shell command using generic minibuffer history. +This command tries to guess a command from the filename(s) +from the variable `dired-auto-shell-command-alist' (which see)." + (dired-mark-pop-up + nil 'shell files ; bufname type files + 'dired-guess-shell-command ; function &rest args + (format prompt (dired-mark-prompt arg files)) files)) + + +(defun dired-guess-shell-command (prompt files) + ;;"Ask user with PROMPT for a shell command, guessing a default from FILES." + (let ((defalt (if (cdr files) + nil ; If more than one file, don't guess + (cdr (assoc + (substring (car files) ; Separate extension & lookup + (if dired-auto-shell-use-last-extension + (string-match "\.[^.]*$" (car files)) + (string-match "\\." (car files)))) + dired-auto-shell-command-alist))))) + (if (not (featurep 'gmhist)) + (read-string prompt defalt) + (if defalt + (put 'dired-shell-command-history 'default defalt))) + (read-with-history-in 'dired-shell-command-history prompt)))