diff lisp/pcvs.el @ 30879:3a1ff1caafe2

* emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point). (ewoc-goto-prev, ewoc-goto-next): Remove arg POS. Allow going past the last element. * pcvs.el (cvs-mode-previous-line, cvs-mode-next-line, cvs-mode-mark) (cvs-mode-unmark-up, cvs-get-marked): Update calls to ewoc. (cvs-mouse-toggle-mark): Don't move point. (cvs-revert-if-needed): Avoid re-eval of local variables and modes.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 16 Aug 2000 20:27:39 +0000
parents e6e5480e5b25
children 2f79c1ebd1fe
line wrap: on
line diff
--- a/lisp/pcvs.el	Wed Aug 16 20:20:43 2000 +0000
+++ b/lisp/pcvs.el	Wed Aug 16 20:27:39 2000 +0000
@@ -14,7 +14,7 @@
 ;; Maintainer: (Stefan Monnier) monnier+lists/cvs/pcl@flint.cs.yale.edu
 ;; Keywords: CVS, version control, release management
 ;; Version: $Name:  $
-;; Revision: $Id: pcvs.el,v 1.7 2000/08/06 09:18:00 gerd Exp $
+;; Revision: $Id: pcvs.el,v 1.8 2000/08/09 15:27:48 monnier Exp $
 
 ;; This file is part of GNU Emacs.
 
@@ -57,12 +57,10 @@
 ;; ******** FIX THE DOCUMENTATION *********
 ;; 
 ;; - hide fileinfos without getting rid of them (will require ewok work).
-;; - proper `g' that passes safe args and uses either cvs-status or cvs-examine
 ;; - add toolbar entries
 ;; - marking
 ;;    marking directories should jump to just after the dir.
 ;;    allow (un)marking directories at a time with the mouse.
-;;    marking with the mouse should not move point.
 ;; - liveness indicator
 ;; - indicate in docstring if the cmd understands the `b' prefix(es).
 ;; - call smerge-mode when opening CONFLICT files.
@@ -81,8 +79,7 @@
 ;; 	- checks out module, or alternately does update join
 ;; 	- does "cvs -n tag LAST_VENDOR" to find old files into *cvs*
 ;;    cvs-export
-;; 	(with completion on tag names and hooks to
-;; 	help generate full releases)
+;; 	(with completion on tag names and hooks to help generate full releases)
 ;; - allow cvs-cmd-do to either clear the marks or not.
 ;; - display stickiness information.  And current CVS/Tag as well.
 ;; - write 'cvs-mode-admin' to do arbitrary 'cvs admin' commands
@@ -101,10 +98,8 @@
 ;; - maybe poll/check CVS/Entries files to react to external `cvs' commands ?
 ;; - some kind of `cvs annotate' support ?
 ;; 	but vc-annotate can be used instead.
-;; - dynamic `g' mapping
-;; 	Make 'g', and perhaps other commands, use either cvs-update or
-;; 	cvs-examine depending on the read-only status of the cvs buffer, for
-;; 	instance.
+;; - proper `g' that passes safe args and uses either cvs-status or cvs-examine
+;;   maybe also use cvs-update depending on I-don't-know-what.
 ;; - add message-levels so that we can hide some levels of messages
 
 ;;; Code:
@@ -138,7 +133,7 @@
 (defun cvs-defaults (&rest defs)
   (let ((defs (cvs-first defs cvs-shared-start)))
     (append defs
-	    (make-list (- cvs-shared-start (length defs)) (nth 0 defs))
+	    (make-list (- cvs-shared-start (length defs)) (car defs))
 	    cvs-shared-flags)))
 
 ;; For cvs flags, we need to add "-f" to override the cvsrc settings
@@ -860,7 +855,7 @@
 
 (defun-cvs-mode (cvs-mode-revert-buffer . SIMPLE)
                 (&optional ignore-auto noconfirm)
-  "Rerun cvs-examine on the current directory with the defauls flags."
+  "Rerun `cvs-examine' on the current directory with the defauls flags."
   (interactive)
   (cvs-examine default-directory t))
 
@@ -1087,13 +1082,13 @@
   "Go to the previous line.
 If a prefix argument is given, move by that many lines."
   (interactive "p")
-  (ewoc-goto-prev cvs-cookies (point) arg))
+  (ewoc-goto-prev cvs-cookies arg))
 
 (defun-cvs-mode cvs-mode-next-line (arg)
   "Go to the next line.
 If a prefix argument is given, move by that many lines."
   (interactive "p")
-  (ewoc-goto-next cvs-cookies (point) arg))
+  (ewoc-goto-next cvs-cookies arg))
 
 ;;;;
 ;;;; Mark handling
@@ -1104,7 +1099,7 @@
 If the fileinfo is a directory, all the contents of that directory are
 marked instead. A directory can never be marked."
   (interactive)
-  (let* ((tin (ewoc-locate cvs-cookies (point)))
+  (let* ((tin (ewoc-locate cvs-cookies))
 	 (fi (ewoc-data tin)))
     (if (eq (cvs-fileinfo->type fi) 'DIRCHANGE)
 	;; it's a directory: let's mark all files inside
@@ -1125,8 +1120,9 @@
 (defun cvs-mouse-toggle-mark (e)
   "Toggle the mark of the entry under the mouse."
   (interactive "e")
-  (mouse-set-point e)
-  (cvs-mode-mark 'toggle))
+  (save-excursion
+    (mouse-set-point e)
+    (cvs-mode-mark 'toggle)))
 
 (defun-cvs-mode cvs-mode-unmark ()
   "Unmark the fileinfo on the current line."
@@ -1163,7 +1159,7 @@
 (defun-cvs-mode cvs-mode-unmark-up ()
   "Unmark the file on the previous line."
   (interactive)
-  (let ((tin (ewoc-goto-prev cvs-cookies (point) 1)))
+  (let ((tin (ewoc-goto-prev cvs-cookies 1)))
     (when tin
       (setf (cvs-fileinfo->marked (ewoc-data tin)) nil)
       (ewoc-invalidate cvs-cookies tin))))
@@ -1235,7 +1231,7 @@
 		  (or (and (not ignore-marks)
 			   (ewoc-collect cvs-cookies
 					      'cvs-fileinfo->marked))
-		      (list (ewoc-data (ewoc-locate cvs-cookies (point)))))))
+		      (list (ewoc-data (ewoc-locate cvs-cookies))))))
 
       (if (or ignore-contents (not (eq (cvs-fileinfo->type fi) 'DIRCHANGE)))
 	  (push fi fis)
@@ -1547,7 +1543,7 @@
 	 (fis (cvs-mode-marked 'diff "idiff" :file t)))
     (when (> (length fis) 2)
       (error "idiff-other cannot be applied to more than 2 files at a time."))
-    (let* ((fi1 (nth 0 fis))
+    (let* ((fi1 (car fis))
 	   (rev1-buf (if rev1 (cvs-retrieve-revision fi1 rev1)
 		       (find-file-noselect (cvs-fileinfo->full-path fi1))))
 	   rev2-buf)
@@ -1990,10 +1986,10 @@
 	(with-current-buffer buffer
 	  (let ((cvs-buf-was-ro buffer-read-only))
 	    (ignore-errors
-	      ;; Ideally, we'd like to prevent changing the (minor) modes.
-	      ;; But we do want to reset the mode for some cases, most notably
-	      ;; VC.  Maybe it'd better to reset VC explicitely ?
-	      (revert-buffer 'ignore-auto 'dont-ask)) ; 'preserve-modes
+	      (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
+	      ;; `preserve-modes' avoids changing the (minor) modes.  But we
+	      ;; do want to reset the mode for VC, so we do it explicitly.
+	      (vc-find-file-hook))
 	    ;; protect the buffer-read-only setting
 	    (if cvs-buf-was-ro (toggle-read-only 1))))))))