]> code.delx.au - gnu-emacs/blobdiff - lisp/log-view.el
(add-log-buffer-file-name-function): Add defvar.
[gnu-emacs] / lisp / log-view.el
index a90146e006b5e6e049a4be97fc4c7871bb809879..fbe83d79513bbaf5f70dd07407ebd7b68f165da4 100644 (file)
@@ -1,10 +1,10 @@
 ;;; log-view.el --- Major mode for browsing RCS/CVS/SCCS log output
 
-;; Copyright (C) 1999, 2000, 2001  Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@cs.yale.edu>
 ;; Keywords: rcs sccs cvs log version-control
-;; Revision: $Id: log-view.el,v 1.8 2001/11/12 20:34:45 sds Exp $
 
 ;; This file is part of GNU Emacs.
 
@@ -20,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -46,7 +46,9 @@
   '(("q" . quit-window)
     ("z" . kill-this-buffer)
     ("m" . set-mark-command)
+    ;; ("e" . cvs-mode-edit-log)
     ("d" . log-view-diff)
+    ("f" . log-view-find-version)
     ("n" . log-view-msg-next)
     ("p" . log-view-msg-prev)
     ("N" . log-view-file-next)
 (defvar log-view-mode-hook nil
   "Hook run at the end of `log-view-mode'.")
 
-(defface log-view-file-face
+(defface log-view-file
   '((((class color) (background light))
-     (:background "grey70" :bold t))
-    (t (:bold t)))
+     (:background "grey70" :weight bold))
+    (t (:weight bold)))
   "Face for the file header line in `log-view-mode'."
   :group 'log-view)
-(defvar log-view-file-face 'log-view-file-face)
+;; backward-compatibility alias
+(put 'log-view-file-face 'face-alias 'log-view-file)
+(defvar log-view-file-face 'log-view-file)
 
-(defface log-view-message-face
+(defface log-view-message
   '((((class color) (background light))
      (:background "grey85"))
-    (t (:bold t)))
+    (t (:weight bold)))
   "Face for the message header line in `log-view-mode'."
   :group 'log-view)
-(defvar log-view-message-face 'log-view-message-face)
+;; backward-compatibility alias
+(put 'log-view-message-face 'face-alias 'log-view-message)
+(defvar log-view-message-face 'log-view-message)
 
 (defconst log-view-file-re
   (concat "^\\("
          "Working file: \\(.+\\)"
          "\\|SCCS/s\\.\\(.+\\):"
          "\\)\n"))
-(defconst log-view-message-re "^\\(revision \\([.0-9]+\\)\\|D \\([.0-9]+\\) .*\\)$")
+;; In RCS, a locked revision will look like "revision N.M\tlocked by: FOO".
+(defconst log-view-message-re "^\\(revision \\([.0-9]+\\)\\(?:\t.*\\)?\\|r\\([0-9]+\\) | .* | .*\\|D \\([.0-9]+\\) .*\\)$")
 
 (defconst log-view-font-lock-keywords
   `((,log-view-file-re
 ;;;###autoload
 (define-derived-mode log-view-mode fundamental-mode "Log-View"
   "Major mode for browsing CVS log output."
-  (set-buffer-modified-p nil)
   (setq buffer-read-only t)
   (set (make-local-variable 'font-lock-defaults) log-view-font-lock-defaults)
   (set (make-local-variable 'cvs-minor-wrap-function) 'log-view-minor-wrap))
     (forward-line 1)
     (let ((pt (point)))
       (when (re-search-backward log-view-message-re nil t)
-       (let ((rev (or (match-string 2) (match-string 3))))
+       (let ((rev (or (match-string 2) (match-string 3) (match-string 4))))
          (unless (re-search-forward log-view-file-re pt t)
            rev))))))
 
          (cvs-force-command "/F"))
       (funcall f))))
 
-;;;
-;;; diff
-;;;
+(defun log-view-find-version (pos)
+  "Visit the version at point."
+  (interactive "d")
+  (save-excursion
+    (goto-char pos)
+    (switch-to-buffer (vc-find-version (log-view-current-file)
+                                       (log-view-current-tag)))))
+
+;;
+;; diff
+;;
 
 (defun log-view-diff (beg end)
   "Get the diff for several revisions.
 If the point is the same as the mark, get the diff for this revision.
 Otherwise, get the diff between the revisions
- were the region starts and ends."
-  (interactive "r")
+were the region starts and ends."
+  (interactive
+   (list (if mark-active (region-beginning) (point))
+         (if mark-active (region-end) (point))))
   (let ((fr (log-view-current-tag beg))
         (to (log-view-current-tag end)))
     (when (string-equal fr to)
@@ -195,39 +211,5 @@ Otherwise, get the diff between the revisions
 
 (provide 'log-view)
 
-;;; Change Log:
-;; $Log: log-view.el,v $
-;; Revision 1.8  2001/11/12 20:34:45  sds
-;; updated (C)
-;;
-;; Revision 1.7  2001/10/29 15:46:46  kai
-;; (log-view-mode-map): Bind `M-n' and `M-p', not `M n'
-;; and `M p'.
-;;
-;; Revision 1.6  2000/12/18 03:17:31  monnier
-;; Remove useless Version.
-;;
-;; Revision 1.5  2000/12/06 19:49:40  fx
-;; Fix copyright years.
-;;
-;; Revision 1.4  2000/05/21 02:12:34  monnier
-;; Fix file description.
-;; (log-view-mode-map): Unsatisfying fix for when cvs-mode-map is not
-;; available.
-;; (log-view-font-lock-keywords): Only use cvs-filename-face if present.
-;; (log-view-current-file): Only use cvs-pcl-cvs-dirchange-re if present.
-;;
-;; Revision 1.3  2000/05/10 22:22:21  monnier
-;; (log-view-goto-rev): New function for the new VC.
-;; (log-view-minor-wrap): Use mark-active.
-;;
-;; Revision 1.2  2000/03/22 01:10:09  monnier
-;; (log-view-(msg|file)-(prev|next)): Rename from
-;; log-view-*-(message|file) and use easy-mmode-define-navigation.
-;; (log-view-message-re): Match SCCS format as well.
-;; And match the revision line rather than the dashed separator line.
-;; (log-view-mode): Use the new define-derived-mode.
-;; (log-view-current-tag): Fill in with an actual implementation.
-;;
-
+;; arch-tag: 0d64220b-ce7e-4f62-9c2a-6b04c2f81f4f
 ;;; log-view.el ends here