参考:GitHub - positron-solutions/transient-showcase: Example forms for transient UI's in Emacs
你这个截图看起来是 magit 本身的 transient,可能要覆盖 magit 的配置?
可以先看看 showcase 了解 transient 怎么布局,再找到 magit 的配置看看怎么覆盖,问问 LLM
transient-display-buffer-action 这个变量,决定了如何 display transient-buffer,你可以修改这个变量。
它的默认值是:
'(display-buffer-in-side-window (side . bottom) (dedicated . t) (inhibit-same-window . t))
你可以自定一个方法:
(defun transient+-display-buffer-centered (buffer alist)
"Make transient in center."
(let ((window
(display-buffer-in-side-window buffer alist)))
(set-window-margins window 10) ;; 你可以根据 buffer 计算适合的 margins
window))
赋值为 transient-display-buffer-action
(setq transient-display-buffer-action
'(transient+-display-buffer-centered
(side . bottom)
(dedicated . t)
(inhibit-same-window . t)
))
这样就增加了 10 的margins。你可以在 transient±display-buffer-centered 中解析 buffer 的宽度,动态的设置 margins,来实现例如垂直居中的功能。
或者,你可以直接使用一个现有的修改 margin 的包,针对 transient buffer 自动修改 margin。例如 perfect-margin
我试了一下这个方法,但是貌似他只是把transient的column移到了中间。但是我期望的是能够把单个column拆成多个columns,然后平铺整个buffer,而不是单个column挤在左边。
自己重写Transient命令,用advice-add override 目前的。
那你应该要重写了。
Transient 是在定义的时候,指定是每一行每一列有哪些东西。
最简单的方法就是,直接把原定义直接 copy 一遍,按照喜好自己排列一下。
另辟蹊径,使用transient-posframe,在窗口中显示。

