summaryrefslogtreecommitdiff
path: root/lisp/dired-x.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-06-28 18:41:05 +0000
committerRichard M. Stallman <rms@gnu.org>1994-06-28 18:41:05 +0000
commitefe88634967c7f026becaec69e777edca673ab17 (patch)
tree8d718401786dca20c658b50bc364ccbd14845f81 /lisp/dired-x.el
parent9af016684fed6197ed965c8c039dd589f2c75bf7 (diff)
downloademacs-efe88634967c7f026becaec69e777edca673ab17.tar.gz
(dired-x-hands-off-my-keys): New user-defined variable.
(dired-x-bind-find-file): Use it. (dired-x-find-file): New function to substitute find-file. (dired-x-find-file-other-window): New function to substitute find-file-other-window.
Diffstat (limited to 'lisp/dired-x.el')
-rw-r--r--lisp/dired-x.el121
1 files changed, 99 insertions, 22 deletions
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index d800bbb9aa8..f2da28e92f6 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -3,8 +3,8 @@
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
;; Lawrence R. Dodd <dodd@roebling.poly.edu>
;; Maintainer: Lawrence R. Dodd <dodd@roebling.poly.edu>
-;; Version: 2.31
-;; Date: 1994/06/09 21:31:53
+;; Version: 2.37
+;; Date: 1994/06/28 15:53:34
;; Keywords: dired extensions
;; Copyright (C) 1993, 1994 Free Software Foundation
@@ -31,9 +31,11 @@
;;; 1.191, hacked up for GNU Emacs 19. Redundant or conflicting material
;;; has been removed or renamed in order to work properly with dired of
;;; GNU Emacs 19. All suggestions or comments are most welcomed.
-;;;
-;;; *Please* see the info pages.
+;;;
+;;; Please, PLEASE, *PLEASE* see the info pages.
+;;;
+
;;; BUGS: Type M-x dired-x-submit-report and a report will be generated.
;;; INSTALLATION: In your ~/.emacs,
@@ -49,6 +51,22 @@
;;; At load time dired-x.el will install itself, redefine some functions, and
;;; bind some dired keys. *Please* see the info pages for more details.
+;;; CAUTION: If you are using a version of GNU Emacs earlier than 19.20 than
+;;; you may have to edit dired.el. The copy of dired.el in GNU Emacs versions
+;;; earlier than 19.20 incorrectly had the call to run-hooks *before* the call
+;;; to provide. In such a case, it is possible that byte-compiling and/or
+;;; loading dired can cause an infinite loop. To prevent this, make sure the
+;;; line of code
+;;;
+;;; (run-hooks 'dired-load-hook)
+;;;
+;;; is the *last* executable line in the file dired.el. That is, make sure it
+;;; comes *after* the line
+;;;
+;;; (provide 'dired)
+;;;
+;;; *Please* see the info pages for more details.
+
;;; User defined variables:
;;;
;;; dired-bind-vm
@@ -56,6 +74,7 @@
;;; dired-bind-jump
;;; dired-bind-info
;;; dired-bind-man
+;;; dired-x-hands-off-my-keys
;;; dired-find-subdir
;;; dired-enable-local-variables
;;; dired-local-variables-file
@@ -1488,24 +1507,71 @@ to mark all zero length files."
;;;; FIND FILE AT POINT.
-(defun dired-find-this-file (&optional other-window)
- "Edit filename or directory at point.
-Switch to a buffer visiting filename, creating one if none already exists.
-With non-nil prefix argument OTHER-WINDOW do so in the other window.
-Useful for editing the file mentioned in the buffer you are viewing, or to
-test if that file exists. Use minibuffer after snatching the filename."
-
- (interactive "P")
- (let* ((guess (dired-filename-at-point))
- (file (read-file-name "Find file: " guess guess nil nil)))
- (if other-window
- (find-file-other-window (expand-file-name file))
- (find-file (expand-file-name file)))))
-
-(fset 'find-this-file 'dired-find-this-file)
-
-;;; Internal function.
+(defvar dired-x-hands-off-my-keys t
+ "*t means don't bind `dired-x-find-file' over `find-file' on keyboard.
+Similarly for `dired-x-find-file-other-window' over `find-file-other-window'.
+If you change this variable after dired-x.el is loaded then do
+\\[dired-x-bind-find-file].")
+
+;;; Bind `dired-x-find-file{-other-window}' over wherever
+;;; `find-file{-other-window}' is bound?
+(defun dired-x-bind-find-file ()
+ "Bind `dired-x-find-file' in place of `find-file' \(or reverse\).
+Similarly for `dired-x-find-file-other-window' and `find-file-other-window'.
+Binding direction based on `dired-x-hands-off-my-keys'.
+This function part of `after-init-hook'."
+ (interactive)
+ (if (interactive-p)
+ (setq dired-x-hands-off-my-keys
+ (not (y-or-n-p "Bind dired-x-find-file over find-file? "))))
+ (cond ((not dired-x-hands-off-my-keys)
+ (substitute-key-definition 'find-file
+ 'dired-x-find-file
+ (current-global-map))
+ (substitute-key-definition 'find-file-other-window
+ 'dired-x-find-file-other-window
+ (current-global-map)))
+ (t
+ (substitute-key-definition 'dired-x-find-file
+ 'find-file
+ (current-global-map))
+ (substitute-key-definition 'dired-x-find-file-other-window
+ 'find-file-other-window
+ (current-global-map))))
+ ;; Clear mini-buffer.
+ (message nil))
+
+;;; Now call it so binding is correct and put on `after-init-hook' in case
+;;; user changes binding.
+(dired-x-bind-find-file)
+(add-hook 'after-init-hook 'dired-x-bind-find-file)
+
+(defun dired-x-find-file (filename)
+ "Edit file FILENAME.
+May create a new window, or reuse an existing one.
+See the function `display-buffer'.
+
+Identical to `find-file' except when called interactively, with a prefix arg
+\(e.g., \\[universal-argument]\), in which case it guesses filename near
+point. Useful for editing file mentioned in buffer you are viewing, or to
+test if that file exists. Use minibuffer after snatching filename."
+ (interactive (list (read-filename-at-point "Find file: ")))
+ (find-file (expand-file-name filename)))
+
+(defun dired-x-find-file-other-window (filename)
+ "Edit file FILENAME, in another window.
+May create a new window, or reuse an existing one.
+See the function `display-buffer'.
+
+Identical to `find-file-other-window' except when called interactively, with a
+prefix arg \(e.g., \\[universal-argument]\), in which case it guesses filename
+near point. Useful for editing file mentioned in buffer you are viewing, or
+to test if that file exists. Use minibuffer after snatching filename."
+ (interactive (list (read-filename-at-point "Find file: ")))
+ (find-file-other-window (expand-file-name filename)))
+
+;;; Internal functions.
(defun dired-filename-at-point ()
;; Get the filename closest to point, but do not change position. Has a
@@ -1540,13 +1606,24 @@ test if that file exists. Use minibuffer after snatching the filename."
;; Return string.
(expand-file-name (buffer-substring start (point))))))
+(defun read-filename-at-point (prompt)
+ ;;; Returns filename prompting with PROMPT with completion. If
+ ;;; `current-prefix-arg' is non-nil, uses name at point as guess.
+ (if current-prefix-arg
+ (let ((guess (dired-filename-at-point)))
+ (read-file-name prompt
+ (file-name-directory guess)
+ guess
+ nil (file-name-nondirectory guess)))
+ (read-file-name prompt default-directory)))
+
;;;; BUG REPORTS
;;; This section is provided for reports. It uses Barry A. Warsaw's
;;; reporter.el which is bundled with GNU Emacs v19.
-(defconst dired-x-version "2.31"
+(defconst dired-x-version "2.37"
"Revision number of dired-x.el -- dired extra for GNU Emacs v19.
Type \\[dired-x-submit-report] to send a bug report. Available via anonymous
ftp in