我正在使用 Magit 在 emacs 中使用 git。我已将 magit-status 绑定到一个键,但每次我按下该键时,它都会在窗口的下半部分打开,我必须点击 Cx 1 才能将它变成一个完整的窗口。我怎样才能让它默认在一个完整的窗口中打开?
8 回答
(setq magit-status-buffer-switch-function 'switch-to-buffer)
或通过自定义:
M-x customize-variable
RET magit-status-buffer-switch-function
RET
对于较新版本的 Magit,您可以使用这个经过批准的代码段:
(setq magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
我将它与它结合起来,在切换项目后获得类似禅宗的全窗口 Git 状态:
(setq projectile-switch-project-action 'magit-status)
这是实现此目的的另一种方法:
(add-to-list 'same-window-regexps "\*magit: .*\*")
此解决方案的优点是您可以在quit-window
样式中终止全屏缓冲区:
(defadvice magit-status (around magit-fullscreen activate)
(window-configuration-to-register :magit-fullscreen)
ad-do-it
(delete-other-windows))
(defadvice magit-mode-quit-window (after magit-restore-screen activate)
"Restores the previous window configuration and kills the magit buffer"
(jump-to-register :magit-fullscreen))
(define-key magit-status-mode-map (kbd "q") 'magit-mode-quit-window)
如果您有旧版本的 magit,那么您可能需要重命名magit-mode-quit-window
为magit-quit-window
.
我用这个:
(defun my-magit-status ()
"Don't split window."
(interactive)
(let ((pop-up-windows nil))
(call-interactively 'magit-status)))
笔记!新版本的 magit 使用函数, magit-display-buffer-function
,并且可以利用它来获得相同的行为。以下代码段将为您提供所需的全屏 magit 赏金。
(defun display-buffer-full-screen (buffer alist)
(delete-other-windows)
(set-window-dedicated-p nil nil)
(set-window-buffer nil buffer)
(get-buffer-window buffer))
(setq magit-display-buffer-function
(lambda (buffer)
(if magit-display-buffer-noselect
(magit-display-buffer-traditional buffer)
(display-buffer buffer '(display-buffer-full-screen)))))
另一种选择是自定义变量display-buffer-alist
。
如果你想要的只是magit
,你可以这样做:
(customize-set-variable
'display-buffer-alist
'(("\\*magit: .*" display-buffer-same-window)))
对于 Magit v2.90.1,正确答案不适合我。使用下面的线,它取得了最好的结果。
(setq magit-display-buffer-function 'magit-display-buffer-same-window-except-diff-v1)
其他显示功能可以通过前缀找到magit-display-buffer-
。