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

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

[nongnu] elpa/golden-ratio 7593ba59b3 79/95: Merge pull request #48 from


From: ELPA Syncer
Subject: [nongnu] elpa/golden-ratio 7593ba59b3 79/95: Merge pull request #48 from abo-abo/master
Date: Thu, 7 Sep 2023 22:02:15 -0400 (EDT)

branch: elpa/golden-ratio
commit 7593ba59b35b3c788e5a93865aed04d31b9c6291
Merge: d5413c832b e47c29f87e
Author: Thierry Volpiatto <thierry.volpiatto@gmail.com>
Commit: Thierry Volpiatto <thierry.volpiatto@gmail.com>

    Merge pull request #48 from abo-abo/master
    
    Simplify `golden-ratio-mode'
---
 golden-ratio.el | 91 +++++++++++++++++++++------------------------------------
 1 file changed, 34 insertions(+), 57 deletions(-)

diff --git a/golden-ratio.el b/golden-ratio.el
index d32d73de92..67970fe91e 100644
--- a/golden-ratio.el
+++ b/golden-ratio.el
@@ -115,9 +115,14 @@ will not cause the window to be resized to the golden 
ratio."
   (with-selected-window (or window (selected-window))
     (let ((nrow  (floor (- (first  dimensions) (window-height))))
           (ncol  (floor (- (second dimensions) (window-width)))))
-      (when (window-resizable-p (selected-window) nrow)
+      (when (and
+             (window-resizable-p (selected-window) nrow)
+             ;; don't enlarge ignored windows
+             (> nrow 0))
         (enlarge-window nrow))
-      (when (window-resizable-p (selected-window) ncol t)
+      (when (and (window-resizable-p (selected-window) ncol t)
+                 ;; don't enlarge ignored windows
+                 (> ncol 0))
         (enlarge-window ncol t)))))
 
 (defun golden-ratio-exclude-major-mode-p ()
@@ -126,70 +131,42 @@ will not cause the window to be resized to the golden 
ratio."
       (member (symbol-name major-mode)
               golden-ratio-exclude-modes)))
 
+(defvar golden-ratio-in-progress nil
+  "Avoid recursive adjustment.")
+
 ;;;###autoload
 (defun golden-ratio ()
   "Resizes current window to the golden-ratio's size specs."
   (interactive)
-  (unless (or (not golden-ratio-mode)
-              (window-minibuffer-p)
-              (one-window-p)
-              (golden-ratio-exclude-major-mode-p)
-              (member (buffer-name)
-                      golden-ratio-exclude-buffer-names)
-              (and golden-ratio-inhibit-functions
-                   (loop for fun in golden-ratio-inhibit-functions
-                         thereis (funcall fun))))
-    (let ((dims (golden-ratio--dimensions))
-          (golden-ratio-mode nil))
-      ;; Always disable `golden-ratio-mode' to avoid
-      ;; infinite loop in `balance-windows'.
-      (balance-windows)
-      (golden-ratio--resize-window dims)
-      (when golden-ratio-recenter
-        (scroll-right) (recenter)))))
-
-;; Should return nil
-(defadvice other-window
-    (after golden-ratio-resize-window)
-  (golden-ratio) nil)
-
-;; Should return the buffer
-(defadvice pop-to-buffer
-    (around golden-ratio-resize-window)
-  (prog1 ad-do-it (golden-ratio)))
-
-(defun golden-ratio--post-command-hook ()
-  (when (or (memq this-command golden-ratio-extra-commands)
-            (and (consp this-command) ; A lambda form.
-                 (loop for com in golden-ratio-extra-commands
-                       thereis (or (memq com this-command)
-                                   (memq (car-safe com) this-command)))))
-    ;; This is needed in emacs-25 to avoid this error from `recenter':
-    ;; `recenter'ing a window that does not display current-buffer.
-    ;; This doesn't happen in emacs-24.4 and previous versions.
-    (run-with-idle-timer 0.01 nil (lambda () (golden-ratio)))))
-
-(defun golden-ratio--mouse-leave-buffer-hook ()
-  (run-at-time 0.1 nil (lambda ()
-                        (golden-ratio))))
+  (when (and golden-ratio-mode
+             (not golden-ratio-in-progress))
+    (let ((golden-ratio-in-progress t))
+      (unless (or (window-minibuffer-p)
+                  (one-window-p)
+                  (golden-ratio-exclude-major-mode-p)
+                  (member (buffer-name)
+                          golden-ratio-exclude-buffer-names)
+                  (and golden-ratio-inhibit-functions
+                       (loop for fun in golden-ratio-inhibit-functions
+                          thereis (funcall fun))))
+        (balance-windows)
+        (golden-ratio--resize-window (golden-ratio--dimensions))
+        (when golden-ratio-recenter
+          (scroll-right) (recenter))))))
+
+(defadvice select-window (after golden-ratio-select-window activate)
+  (when golden-ratio-mode
+    (golden-ratio)))
+
+(defadvice split-window (after golden-ratio-select-window activate)
+  (when golden-ratio-mode
+    (golden-ratio)))
 
 ;;;###autoload
 (define-minor-mode golden-ratio-mode
     "Enable automatic window resizing with golden ratio."
   :lighter " Golden"
-  :global t
-  (if golden-ratio-mode
-      (progn
-        (add-hook 'window-configuration-change-hook 'golden-ratio)
-        (add-hook 'post-command-hook 'golden-ratio--post-command-hook)
-        (add-hook 'mouse-leave-buffer-hook 
'golden-ratio--mouse-leave-buffer-hook)
-        (ad-activate 'other-window)
-        (ad-activate 'pop-to-buffer))
-      (remove-hook 'window-configuration-change-hook 'golden-ratio)
-      (remove-hook 'post-command-hook 'golden-ratio--post-command-hook)
-      (remove-hook 'mouse-leave-buffer-hook 
'golden-ratio--mouse-leave-buffer-hook)
-      (ad-deactivate 'other-window)
-      (ad-deactivate 'pop-to-buffer)))
+  :global t)
 
 
 (provide 'golden-ratio)



reply via email to

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