diff lisp/dired/dired-cwd.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-cwd.el	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,86 @@
+;;;; dired-cwd.el - Fix a command's current working directory in Tree Dired.
+
+(defconst dired-cwd-version (substring "!Revision: 1.2 !" 11 -2)
+  "!Id: dired-cwd.el,v 1.2 1991/10/08 15:31:28 sk RelBeta !")
+
+;; Copyright (C) 1991 by Sebastian Kremer <sk@thp.uni-koeln.de>
+
+;; 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 1, 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.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;; LISPDIR ENTRY for the Elisp Archive ===============================
+;;    LCD Archive Entry:
+;;    dired-cwd|Sebastian Kremer|sk@thp.uni-koeln.de
+;;    |Fix a command's current working directory in Tree Dired. 
+;;    |Date: 1991/10/08 15:31:28 |Revision: 1.2 |
+
+;; INSTALLATION ======================================================
+;; 
+;; Put this file into your load-path and the following in your ~/.emacs:
+;; 
+;;   (autoload 'dired-cwd-make-magic "dired-cwd")
+;;
+;; You have to load dired-x.el in your dired-load-hook to define
+;; function default-directory, or you will not benefit from this
+;; package: as long as function default-directory is not defined, the
+;; functions wrapped by dired-cwd-make-magic will behave as before.
+
+;; EXAMPLE USAGE ======================================================
+;;
+;; How to fix M-x compile (and grep) to know about Tree Dired's multiple
+;; working directories by putting the following lines into your ~/.emacs:
+;; 
+;;    (require 'compile)
+;;    (dired-cwd-make-magic 'compile1)
+;;
+;; After that, a compilation or grep started in a subdirectory in a
+;; Dired buffer will have that subdirectory as working directory.
+;;
+;; Note you must require 'compile as function compile1 is redefined.
+;; You could use a load hook instead by adding the line
+;;
+;;     (run-hooks 'compile-load-hook)
+;;     
+;; at the end of compile.el and setting
+;;
+;;    (setq compile-load-hook '(lambda () (dired-cwd-make-magic 'compile1)))
+;;
+;; in your ~/.emacs.
+
+
+;;;###autoload
+(defun dired-cwd-make-magic (function)
+  "Modify COMMAND so that it's working directory is the current dired directory.
+This works by binding `default-directory' to `(default-directory)'s value.
+See also function `default-directory'."
+  (interactive "aMake work with tree dired (function): ")
+  (if (commandp function)
+      (error "Cannot make interactive functions work for tree dired"))
+  (let ((save-name (intern (concat "dired-cwd-wrap-real-" (symbol-name
+							   function))))
+	new-function)
+    (setq new-function
+	  (` (lambda (&rest dired-cwd-args)
+	       ;; Name our formal args unique to avoid shadowing
+	       ;; through dynamic scope.
+	       (let ((default-directory
+		       (if (fboundp 'default-directory)
+			   ;; This is defined in dired-x.el, but dired
+			   ;; may not yet be loaded.
+			   (default-directory)
+			 default-directory)))
+		 (apply 'funcall (quote (, save-name)) dired-cwd-args)))))
+    (or (fboundp save-name)
+	(fset save-name (symbol-function function)))
+    (fset function new-function)))