emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/vc-hgcmd 0c8c554 60/87: region history


From: Stefan Monnier
Subject: [elpa] externals/vc-hgcmd 0c8c554 60/87: region history
Date: Sat, 5 Jun 2021 16:11:47 -0400 (EDT)

branch: externals/vc-hgcmd
commit 0c8c55495c098e4ad727fd2e8fffc5bcade2a878
Author: muffinmad <andreyk.mad@gmail.com>
Commit: muffinmad <andreyk.mad@gmail.com>

    region history
---
 vc-hgcmd.el | 45 +++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 41 insertions(+), 4 deletions(-)

diff --git a/vc-hgcmd.el b/vc-hgcmd.el
index d043c93..e754424 100644
--- a/vc-hgcmd.el
+++ b/vc-hgcmd.el
@@ -5,7 +5,7 @@
 ;; Author: Andrii Kolomoiets <andreyk.mad@gmail.com>
 ;; Keywords: vc
 ;; URL: https://github.com/muffinmad/emacs-vc-hgcmd
-;; Package-Version: 1.6.4
+;; Package-Version: 1.6.5
 ;; Package-Requires: ((emacs "25.1"))
 
 ;; This file is NOT part of GNU Emacs.
@@ -72,7 +72,7 @@
 ;; - annotate-time ()                              OK
 ;; - annotate-current-time ()                      NO
 ;; - annotate-extract-revision-at-line ()          OK
-;; - region-history (FILE BUFFER LFROM LTO)        NO --line-range option is 
experimental
+;; - region-history (FILE BUFFER LFROM LTO)        OK experimental option 
"line-range" added in mercurial 4.4
 ;; - region-history-mode ()                        NO
 ;; - mergebase (rev1 &optional rev2)               TODO
 ;; TAG SYSTEM
@@ -1156,13 +1156,50 @@ Insert output to process buffer and check if amount of 
data is enought to parse
   "Insert into BUFFER the history of the content of FILE between lines LFROM 
and LTO."
   (when (vc-hgcmd-command-to-buffer
          buffer
-         "log" "-fL" (format "%s,%d:%d" (vc-hgcmd--file-relative-name file) 
lfrom lto))
+         "log" "-fpL" (format "%s,%d:%d" (vc-hgcmd--file-relative-name file) 
lfrom lto))
     (with-current-buffer buffer
       (goto-char (point-min)))
     (select-window (display-buffer buffer))))
 
+(require 'diff-mode)
+
+(defvar vc-hgcmd--log-view-region-history-font-lock-keywords nil)
+(defvar font-lock-keywords)
+(defvar vc-hgcmd-region-history-font-lock-keywords 
'((vc-hgcmd-region-history-font-lock)))
+
+(defun vc-hgcmd-region-history-font-lock (limit)
+  "Fontify region bounds by LIMIT in region history buffer."
+  (let ((in-diff (save-excursion
+                   (beginning-of-line)
+                   (or (looking-at "^\\(?:diff\\|changeset\\)\\>")
+                       (re-search-backward "^\\(?:diff\\|changeset\\)\\>" nil 
t))
+                   (eq ?d (char-after (match-beginning 0))))))
+    (while
+        (let ((end (save-excursion
+                     (if (re-search-forward "\n\\(diff\\|changeset\\)\\>" 
limit t)
+                         (match-beginning 1)
+                       limit))))
+          (let ((font-lock-keywords (if in-diff
+                                        diff-font-lock-keywords
+                                      
vc-hgcmd--log-view-region-history-font-lock-keywords)))
+            (font-lock-fontify-keywords-region (point) end))
+          (goto-char end)
+          (prog1 (< (point) limit)
+            (setq in-diff (eq ?d (char-after))))))
+    nil))
+
+(defvar vc-hgcmd-region-history-mode-map
+  (let ((map (make-composed-keymap
+              (list diff-mode-map vc-hgcmd-log-view-mode-map))))
+    map))
+
 (define-derived-mode vc-hgcmd-region-history-mode vc-hgcmd-log-view-mode 
"Region-History/Hgcmd"
-  "Major mode to browse Hg's \"log -f -p -L\" output.")
+  "Major mode to browse Hg's \"log -f -p -L\" output."
+  (setq-local vc-hgcmd--log-view-region-history-font-lock-keywords
+              log-view-font-lock-keywords)
+  (setq-local font-lock-defaults
+              (cons 'vc-hgcmd-region-history-font-lock-keywords
+                    (cdr font-lock-defaults))))
 
 (defun vc-hgcmd-create-tag (_dir name branchp)
   "Create tag NAME. If BRANCHP create named branch."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]