changeset 2218:13be90dfef0c

Merge today's change by eric with everybody else's change (from 1992/08/04 through 1993/02/24).
author Paul Eggert <eggert@twinsun.com>
date Tue, 16 Mar 1993 20:21:05 +0000
parents f650efceb0fb
children a729b16f7427
files lisp/vc-hooks.el
diffstat 1 files changed, 42 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/vc-hooks.el	Tue Mar 16 18:36:27 1993 +0000
+++ b/lisp/vc-hooks.el	Tue Mar 16 20:21:05 1993 +0000
@@ -5,7 +5,7 @@
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Version: 5.0
 
-;;	$Id: vc-hooks.el,v 1.48 1993/03/15 21:42:57 esr Exp $	
+;;	$Id: vc-hooks.el,v 1.8.1.1 1993/03/16 20:17:07 eggert Exp $	
 
 ;; This file is part of GNU Emacs.
 
@@ -68,29 +68,40 @@
 ;;; actual version-control code starts here
 
 (defun vc-registered (file)
-  ;; Search for a master corresponding to the given file
-  (let ((dirname (or (file-name-directory file) ""))
-	(basename (file-name-nondirectory file)))
-    (catch 'found
-      (mapcar
-       (function (lambda (s)
-	  (let ((trial (format (car s) dirname basename)))
-	    (if (and (file-exists-p trial)
-		     ;; Make sure the file we found with name
-		     ;; TRIAL is not the source file itself.
-		     ;; That can happen with RCS-style names
-		     ;; if the file name is truncated
-		     ;; (e.g. to 14 chars).  See if either
-		     ;; directory or attributes differ.
-		     (or (not (string= dirname
-				       (file-name-directory trial)))
-			 (not (equal
-			       (file-attributes file)
-			       (file-attributes trial)))))
-		(throw 'found (cons trial (cdr s)))))))
-       vc-master-templates)
-      nil)
-    ))
+  (let (handler handlers)
+    (if (boundp 'file-name-handler-alist)
+	(save-match-data
+	  (setq handlers file-name-handler-alist)
+	  (while (and (consp handlers) (null handler))
+	    (if (and (consp (car handlers))
+		     (stringp (car (car handlers)))
+		     (string-match (car (car handlers)) file))
+		(setq handler (cdr (car handlers))))
+	    (setq handlers (cdr handlers)))))
+    (if handler
+	(funcall handler 'vc-registered file)
+      ;; Search for a master corresponding to the given file
+      (let ((dirname (or (file-name-directory file) ""))
+	    (basename (file-name-nondirectory file)))
+	(catch 'found
+	  (mapcar
+	   (function (lambda (s)
+	      (let ((trial (format (car s) dirname basename)))
+		(if (and (file-exists-p trial)
+			 ;; Make sure the file we found with name
+			 ;; TRIAL is not the source file itself.
+			 ;; That can happen with RCS-style names
+			 ;; if the file name is truncated
+			 ;; (e.g. to 14 chars).  See if either
+			 ;; directory or attributes differ.
+			 (or (not (string= dirname
+					   (file-name-directory trial)))
+			     (not (equal
+				   (file-attributes file)
+				   (file-attributes trial)))))
+		    (throw 'found (cons trial (cdr s)))))))
+	   vc-master-templates)
+	  nil)))))
 
 (defun vc-backend-deduce (file)
   "Return the version-control type of a file, nil if it is not registered"
@@ -99,7 +110,7 @@
 	   (vc-file-setprop file 'vc-backend (cdr (vc-registered file))))))
 
 (defun vc-toggle-read-only ()
-  "If the file in the current buffer id under version control, perform the
+  "If the file in the current buffer is under version control, perform the
 logical next version-control action; otherwise, just toggle the buffer's
 read-only flag."
   (interactive)
@@ -111,6 +122,7 @@
   "Set `vc-mode-string' to display type of version control for FILE.
 The value is set in the current buffer, which should be the buffer
 visiting FILE."
+  (interactive (list buffer-file-name nil))
   (let ((vc-type (vc-backend-deduce file)))
     (if vc-type
 	(progn
@@ -125,6 +137,9 @@
 
 ;;; install a call to the above as a find-file hook
 (defun vc-find-file-hook ()
+  ;; Recompute whether file is version controlled,
+  ;; if user has killed the buffer and revisited.
+  (vc-file-setprop buffer-file-name 'vc-backend nil)
   (if (and (vc-mode-line buffer-file-name) (not vc-make-backup-files))
       (progn
 	(make-local-variable 'make-backup-files)
@@ -158,7 +173,7 @@
       (define-key global-map "\C-xv" vc-prefix-map)
       (define-key vc-prefix-map "a" 'vc-update-change-log)
       (define-key vc-prefix-map "c" 'vc-cancel-version)
-      (define-key vc-prefix-map "=" 'vc-diff)
+      (define-key vc-prefix-map "d" 'vc-directory)
       (define-key vc-prefix-map "h" 'vc-insert-headers)
       (define-key vc-prefix-map "i" 'vc-register)
       (define-key vc-prefix-map "l" 'vc-print-log)
@@ -166,10 +181,9 @@
       (define-key vc-prefix-map "s" 'vc-create-snapshot)
       (define-key vc-prefix-map "u" 'vc-revert-buffer)
       (define-key vc-prefix-map "v" 'vc-next-action)
-      (define-key vc-prefix-map "d" 'vc-directory)
+      (define-key vc-prefix-map "=" 'vc-diff)
       ))
 
 (provide 'vc-hooks)
 
 ;;; vc-hooks.el ends here
-