From c93c35f567289dbb4d12eb9ec43ef024ee6c78df Mon Sep 17 00:00:00 2001 From: Jonas Bernoulli Date: Sat, 23 Nov 2024 19:34:00 +0100 Subject: transient--show: Fix window height for more setups It is desirable to set `window-size-fixed' to t in the transient menu, as we always used to do, until very recently. We cannot do this when the transient window uses the full height of the frame, the minibuffer may be used while the menu remains displayed, and the height of the minibuffer has to be increased so that the completion framework can display completion candidates. If `transient-hide-during-minibuffer-read' is t [1], then that cannot happen, so we fix the size in that case again. [1] Which is the default, starting with the parent of this commit. Re #532. --- CHANGELOG | 2 ++ lisp/transient.el | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 641cc4c..544042c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -22,6 +22,8 @@ default. Customize ~transient-hide-during-minibuffer-read~ if you prefer the old default. +- Further refinements to when the size of the menu window is fixed. + Bug fixes: - Fixes some menu navigation edge-cases. diff --git a/lisp/transient.el b/lisp/transient.el index e7ecb50..50fb331 100644 --- a/lisp/transient.el +++ b/lisp/transient.el @@ -211,6 +211,11 @@ buffer became the current buffer, then that would change what is at point. To that effect `inhibit-same-window' ensures that the selected window is not used to show the transient buffer. +The use of a horizonal split to display the menu window can lead +to incompatibilities and is thus discouraged. Transient tries to +mitigate such issue but cannot proactively deal with all possible +configurations and combinations of third-party packages. + It may be possible to display the window in another frame, but whether that works in practice depends on the window-manager. If the window manager selects the new window (Emacs frame), @@ -3818,7 +3823,14 @@ have a history of their own.") (erase-buffer) (when transient-force-fixed-pitch (transient--force-fixed-pitch)) - (setq window-size-fixed (if (window-full-height-p) 'width t)) + (setq window-size-fixed + ;; If necessary, make sure the height of the minibuffer + ;; can be increased to display completion candidates. + ;; See https://github.com/minad/vertico/issues/532. + (if (and (not transient-hide-during-minibuffer-read) + (window-full-height-p)) + 'width + t)) (when (bound-and-true-p tab-line-format) (setq tab-line-format nil)) (setq header-line-format nil) -- cgit v1.0