From a0a4aa81c1aa2e5b040f5dba64597b148b16792a Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 9 Aug 2022 17:18:35 +0200 Subject: [PATCH] fix(vterm): +vterm/toggle creating duplicates If vterm-buffer-name-string is set to non-nil, then vterm will rename the buffer after it is initialized. Since +vterm/toggle looks up buffers by name, it will lose track of them, causing it to create a new one on each invocation. With this, it will no longer lose track of them. Fix: #6651 --- modules/term/vterm/autoload.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/term/vterm/autoload.el b/modules/term/vterm/autoload.el index 87b52dc0f..e34faeb78 100644 --- a/modules/term/vterm/autoload.el +++ b/modules/term/vterm/autoload.el @@ -1,5 +1,7 @@ ;;; term/vterm/autoload.el -*- lexical-binding: t; -*- +(defvar +vterm--id nil) + ;;;###autoload (defun +vterm/toggle (arg) "Toggles a terminal popup window at project root. @@ -10,7 +12,7 @@ Returns the vterm buffer." (interactive "P") (+vterm--configure-project-root-and-display arg - (lambda() + (lambda () (let ((buffer-name (format "*doom:vterm-popup:%s*" (if (bound-and-true-p persp-mode) @@ -27,8 +29,13 @@ Returns the vterm buffer." (delete-window window)))) (if-let (win (get-buffer-window buffer-name)) (delete-window win) - (let ((buffer (get-buffer-create buffer-name))) + (let ((buffer (or (cl-loop for buf in (doom-buffers-in-mode 'vterm-mode) + if (equal (buffer-local-value '+vterm--id buf) + buffer-name) + return buf) + (get-buffer-create buffer-name)))) (with-current-buffer buffer + (setq-local +vterm--id buffer-name) (unless (eq major-mode 'vterm-mode) (vterm-mode))) (pop-to-buffer buffer)))