请教一下如何让transient的group能够平铺而不是挤在左边

参考:GitHub - positron-solutions/transient-showcase: Example forms for transient UI's in Emacs

你这个截图看起来是 magit 本身的 transient,可能要覆盖 magit 的配置?

可以先看看 showcase 了解 transient 怎么布局,再找到 magit 的配置看看怎么覆盖,问问 LLM

2 个赞

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

1 个赞

我试了一下这个方法,但是貌似他只是把transient的column移到了中间。但是我期望的是能够把单个column拆成多个columns,然后平铺整个buffer,而不是单个column挤在左边。

自己重写Transient命令,用advice-add override 目前的。

1 个赞

那你应该要重写了。

Transient 是在定义的时候,指定是每一行每一列有哪些东西。

最简单的方法就是,直接把原定义直接 copy 一遍,按照喜好自己排列一下。

1 个赞

另辟蹊径,使用transient-posframe,在窗口中显示。

1 个赞