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 ответа

Решение

Вот окончательное решение, которое я использую благодаря ответу здесь:

https://emacs.stackexchange.com/questions/36718/magit-reuse-same-window-for-different-project-when-switching-window

(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
      ))
Другие вопросы по тегам