Emacs - Magit повторно использует одно и то же окно для другого проекта при переключении окна
Я новый пользователь magit
и я в настоящее время использую его в отдельном кадре с одним окном (magit-status
). Я хотел бы, чтобы это показывало состояние git проекта последнего посещенного буфера. Представьте, что в другом кадре у меня есть два окна с двумя буферами файлов двух разных проектов. Я хотел бы magit
окно, чтобы показать мне git статус проекта в зависимости от текущего выбранного окна.
frame 1 frame 2
*********************** ****************
* window 1 * window 2 * * window3 *
* * * * *
* file * file * * magit-status *
* of proj1 * of proj2 * * *
* * * * *
*********************** ****************
Чтобы было понятнее, если выбранное окно window 1
мне бы хотелось window 3
чтобы показать статус для проекта 1, затем, если я изменю на window 2
мне бы хотелось window 3
показать статус для проекта 2.
2 ответа
Вот окончательное решение, которое я использую благодаря ответу здесь:
(defun magit-status-autorefresh (callee)
(interactive)
(let ((project-previous (magit-toplevel)))
(call-interactively callee)
(let ((project (magit-toplevel)))
(when (and project
(not (equal project-previous project)))
(let ((status-win
(cl-some (lambda (b)
(and (with-current-buffer b
(derived-mode-p 'magit-status-mode))
(get-buffer-window b 'visible)))
(buffer-list)))
(magit-display-buffer-noselect t)
(magit-display-buffer-function
(lambda (buffer)
(display-buffer buffer '(display-buffer-same-window)))))
(when status-win
(with-selected-frame (window-frame status-win)
(with-selected-window status-win
(magit-status-internal project))))))))
)
(defun my/other-window ()
(interactive)
(magit-status-autorefresh 'other-window)
)
(defun my/other-counsel-projectile-find-file ()
(interactive)
(magit-status-autorefresh 'counsel-projectile-find-file)
)
(defun my/other-ace-window ()
(interactive)
(magit-status-autorefresh 'ace-window)
)
Вы можете на самом деле настроить, как показывает Magit magit-status
установив magit-display-buffer-function
переменная.
Если я правильно понял ваш вопрос, вы, вероятно, ищете magit-display-buffer-same-window-except-diff-v1
установить на эту переменную.
Вы можете установить эту переменную вручную или нажать Ch v magit-dispaly-buffer-function RET и использовать Easy Customization.
К вашему сведению, вы также можете реализовать свой собственный способ отображения буфера в Magit:
(setq magit-display-buffer-function
(lambda (buffer)
;; Go on
))