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

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

[elpa] 05/07: diff-hl-margin-mode: use buffer-local minor mode


From: Dmitry Gutov
Subject: [elpa] 05/07: diff-hl-margin-mode: use buffer-local minor mode
Date: Sun, 10 Aug 2014 16:33:01 +0000

dgutov pushed a commit to branch master
in repository elpa.

commit c995f689df75898d708adfc210bb40e64fe75f18
Author: Dmitry Gutov <address@hidden>
Date:   Sun Aug 10 20:28:50 2014 +0400

    diff-hl-margin-mode: use buffer-local minor mode
    
    Fixes #23
---
 diff-hl-margin.el |   49 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/diff-hl-margin.el b/diff-hl-margin.el
index dac0b85..ef3db0a 100644
--- a/diff-hl-margin.el
+++ b/diff-hl-margin.el
@@ -58,23 +58,46 @@
 (define-minor-mode diff-hl-margin-mode
   "Toggle displaying `diff-hl-mode' highlights on the margin."
   :lighter "" :global t
-  (let ((width-var (intern (format "%s-margin-width" diff-hl-margin-side))))
-    (if diff-hl-margin-mode
-        (progn
-          (setq diff-hl-margin-old-highlight-function 
diff-hl-highlight-function
-                diff-hl-highlight-function 'diff-hl-highlight-on-margin)
-          (set-default width-var 1))
-      (setq diff-hl-highlight-function diff-hl-margin-old-highlight-function
-            diff-hl-margin-old-highlight-function nil)
-      (set-default width-var 0)))
-  (dolist (buffer (buffer-list))
-    (with-current-buffer buffer
+  (if diff-hl-margin-mode
+      (progn
+        (add-hook 'diff-hl-mode-on-hook 'diff-hl-margin-minor-mode)
+        (add-hook 'diff-hl-mode-off-hook 'diff-hl-margin-minor-mode-off)
+        (add-hook 'diff-hl-dired-mode-on-hook 'diff-hl-margin-minor-mode)
+        (add-hook 'diff-hl-dired-mode-off-hook 'diff-hl-margin-minor-mode-off))
+    (remove-hook 'diff-hl-mode-on-hook 'diff-hl-margin-minor-mode)
+    (remove-hook 'diff-hl-mode-off-hook 'diff-hl-margin-minor-mode-off)
+    (remove-hook 'diff-hl-dired-mode-on-hook 'diff-hl-margin-minor-mode)
+    (remove-hook 'diff-hl-dired-mode-off-hook 'diff-hl-margin-minor-mode-off))
+  (dolist (buf (buffer-list))
+    (with-current-buffer buf
       (cond
        (diff-hl-mode
+        (diff-hl-margin-minor-mode (if diff-hl-margin-mode 1 -1))
         (diff-hl-update))
        (diff-hl-dired-mode
-        (diff-hl-dired-update)))))
-  (walk-windows (lambda (win) (set-window-buffer win (window-buffer win)))))
+        (diff-hl-margin-minor-mode (if diff-hl-margin-mode 1 -1))
+        (diff-hl-dired-update))))))
+
+(define-minor-mode diff-hl-margin-minor-mode
+  "Toggle displaying `diff-hl-mode' highlights on the margin locally.
+You probably shouldn't use this function directly."
+  :lighter ""
+  (let ((width-var (intern (format "%s-margin-width" diff-hl-margin-side))))
+    (if diff-hl-margin-minor-mode
+        (progn
+          (set (make-local-variable 'diff-hl-margin-old-highlight-function)
+               diff-hl-highlight-function)
+          (set (make-local-variable 'diff-hl-highlight-function)
+               'diff-hl-highlight-on-margin)
+          (set width-var 1))
+      (setq diff-hl-highlight-function diff-hl-margin-old-highlight-function
+            diff-hl-margin-old-highlight-function nil)
+      (set width-var 0)))
+  (dolist (win (get-buffer-window-list))
+    (set-window-buffer win (current-buffer))))
+
+(defun diff-hl-margin-minor-mode-off ()
+  (diff-hl-margin-minor-mode -1))
 
 (defvar diff-hl-margin-spec-cache
   (cl-loop for (type . char) in '((insert . "+") (delete . "-")



reply via email to

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