[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/visual-fill-column 9258eaf705 100/137: Resurrect `visual-f
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/visual-fill-column 9258eaf705 100/137: Resurrect `visual-fill-column-split-window'. |
Date: |
Sun, 2 Jan 2022 22:59:15 -0500 (EST) |
branch: elpa/visual-fill-column
commit 9258eaf705d6378745b3fe3c6ddf11baa6f87d76
Author: Joost Kremers <joostkremers@fastmail.fm>
Commit: Joost Kremers <joostkremers@fastmail.fm>
Resurrect `visual-fill-column-split-window'.
A bug in Emacs prevents `min-margins' from working correctly (see Emacs bug
44483). This has been fixed in commit f4acd7a, which will eventually be
released
as Emacs 27.2. Every version below that needs the`split-window' workaround.
---
visual-fill-column.el | 57 +++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 46 insertions(+), 11 deletions(-)
diff --git a/visual-fill-column.el b/visual-fill-column.el
index da59c16cc8..0a092cda54 100644
--- a/visual-fill-column.el
+++ b/visual-fill-column.el
@@ -69,6 +69,8 @@ this option is set to a value, it is used instead."
(defvar visual-fill-column--min-margins nil "Width of the margins before
invoking `visual-fill-column-mode'.")
(make-variable-buffer-local 'visual-fill-column--min-margins)
+(defvar visual-fill-column--original-split-window-function nil "The value of
`split-window-preferred-function'.")
+
(defvar visual-fill-column-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [right-margin mouse-1] (global-key-binding [mouse-1])) ;
#'mouse-set-point
@@ -125,12 +127,20 @@ that actually visit a file."
(defun visual-fill-column-mode--enable ()
"Set up `visual-fill-column-mode' for the current buffer."
- (if (<= emacs-major-version 26)
- (add-hook 'window-configuration-change-hook
#'visual-fill-column--adjust-all-windows 'append 'local))
+ (when (<= emacs-major-version 26)
+ (add-hook 'window-configuration-change-hook
#'visual-fill-column--adjust-all-windows 'append 'local))
+
+ (when (version<= emacs-version "27.1")
+ (setq visual-fill-column--original-split-window-function
split-window-preferred-function)
+ (setq-default split-window-preferred-function
#'visual-fill-column-split-window-sensibly))
+
+ (when (version< "27.1" emacs-version)
+ (let ((margins (window-margins (selected-window))))
+ (setq visual-fill-column--min-margins (cons (or (car margins) 0)
+ (or (cdr margins) 0)))))
+
(add-hook 'window-size-change-functions #'visual-fill-column--adjust-window
'append 'local)
- (let ((margins (window-margins (selected-window))))
- (setq visual-fill-column--min-margins (cons (or (car margins) 0)
- (or (cdr margins) 0))))
+
(visual-fill-column--adjust-window (selected-window)))
(defun visual-fill-column-mode--disable ()
@@ -144,17 +154,38 @@ that actually visit a file."
(set-window-parameter window 'min-margins nil)
(kill-local-variable 'visual-fill-column--min-margins)))
+(defun visual-fill-column-split-window (&optional window size side)
+ "Split WINDOW, unsetting its margins first.
+SIZE, and SIDE are passed on to `split-window'. This function is
+for use in the window parameter `split-window'."
+ ;; Note: `split-window' has another optional argument, `pixelwise', but this
+ ;; is not passed to the function in the `split-window' window parameter.
+ (let ((horizontal (memq side '(t left right)))
+ margins new)
+ (when horizontal
+ ;; Reset margins.
+ (setq margins (window-margins window))
+ (set-window-margins window nil))
+ ;; Now try to split the window.
+ (set-window-parameter window 'split-window nil)
+ (unwind-protect
+ (setq new (split-window window size side))
+ (set-window-parameter window 'split-window
#'visual-fill-column-split-window)
+ ;; Restore old margins if we failed.
+ (when (and horizontal (not new))
+ (set-window-margins window (car margins) (cdr margins))))))
+
;;;###autoload
(defun visual-fill-column-split-window-sensibly (&optional window)
"Split WINDOW sensibly, unsetting its margins first.
This function unsets the window margins and calls
`split-window-sensibly'.
-By default, `split-window-sensibly' does not split a window
-vertically if it has wide margins, even if there is enough space
-for a vertical split. This function can be used as the value of
-`split-window-preferred-function' to enable vertically splitting
-windows with wide margins."
+By default, `split-window-sensibly' does not split a window in
+two side-by-side windows if it has wide margins, even if there is
+enough space for a vertical split. This function is used as the
+value of `split-window-preferred-function' to allow
+`display-buffer' to split such windows."
(let ((margins (window-margins window))
new)
;; unset the margins and try to split the window
@@ -167,6 +198,7 @@ windows with wide margins."
(defun visual-fill-column--reset-window (window)
"Reset the parameters and margins of WINDOW."
+ (set-window-parameter window 'split-window nil)
(set-window-parameter window 'min-margins nil)
(set-window-margins window nil))
@@ -180,6 +212,10 @@ selected window has `visual-fill-column-mode' enabled."
(visual-fill-column--reset-window window)
(when visual-fill-column-mode
(set-window-fringes window nil nil
visual-fill-column-fringes-outside-margins)
+ (if visual-fill-column--original-split-window-function ; This is
non-nil if the window parameter `split-window' is used (Emacs <= 27.1).
+ (set-window-parameter window 'split-window
#'visual-fill-column-split-window))
+ (if visual-fill-column--min-margins ; This is non-nil if the window
parameter `min-margins' is used (Emacs 27.2).
+ (set-window-parameter window 'min-margins
visual-fill-column--min-margins))
(visual-fill-column--set-margins window))))
(defun visual-fill-column--adjust-all-windows ()
@@ -240,7 +276,6 @@ and `text-scale-mode-step'."
(setq left right)
(setq right 0))
- (set-window-parameter window 'min-margins visual-fill-column--min-margins)
(set-window-margins window left right)))
(provide 'visual-fill-column)
- [nongnu] elpa/visual-fill-column 48a3690b01 091/137: Add more bindings for mouse events in the margins., (continued)
- [nongnu] elpa/visual-fill-column 48a3690b01 091/137: Add more bindings for mouse events in the margins., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 2048a0ce91 089/137: turn-on-visual-fill-column-mode: Do not depend on `visual-line-mode`., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 7ca18f37af 092/137: Rewrap comment., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 598bc992f0 093/137: Update Emacs dependency to 25.1., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 7c479f1a1c 098/137: Use `(selected-window)' instead of `(get-buffer-window (current-buffer))'., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column e73f99e09f 104/137: Fix the values of `visual-fill-column-inhibit-sensible-window-split`., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 0c410828e0 101/137: Use `window-configuration-change-hook' in Emacs 27 as well., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column f833fb94ff 095/137: Use the window's previous margins as minimum margins., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column ff329c5ffd 105/137: Merge branch 'devel', ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 1da41f73a4 096/137: Use `window-size-change-functions`., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 9258eaf705 100/137: Resurrect `visual-fill-column-split-window'.,
ELPA Syncer <=
- [nongnu] elpa/visual-fill-column ca98d4bb93 112/137: Revert "Make `visual-fill-column-offset` buffer-local.", ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 043867c469 108/137: Fix comment., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 5f5d816b5c 106/137: Correctly take width of line numbers into account., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 26cf5171ca 110/137: Make `visual-fill-column-offset` buffer-local., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 78a21e1ee2 113/137: Revert "Add `visual-fill-column-offset`.", ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 5b08b9ae9d 116/137: Add test for `visual-fill-column--add-extra-width`., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 46b7cb720f 120/137: Do not try to restore the margin width when disabling v-f-c-mode., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column ad76c1692e 115/137: Update doc string of `visual-fill-column--adjust-window`., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 2e877fabf1 125/137: Update doc string of `visual-fill-column-inhibit-sensible-window-split`., ELPA Syncer, 2022/01/02
- [nongnu] elpa/visual-fill-column 6854932d7f 126/137: Small fixes to README.md, ELPA Syncer, 2022/01/02