From c41f2fd2e9940e016bc3793de57094de84c89c16 Mon Sep 17 00:00:00 2001 From: Violine <3253340@gmail.com> Date: Thu, 27 Mar 2025 14:13:17 +0300 Subject: [PATCH] feat: clear chat tag by keyboard shortcut (#946) * Added a keyboard shortcut to remove tags from an active chat * Replace Main.immediate dispatcher to EdtDispatcher --------- Co-authored-by: alexander.korovin --- .../actions/toolwindow/ClearChatTagsAction.kt | 14 ++++++++++++++ .../chat/ChatToolWindowContentManager.java | 6 +++++- .../toolwindow/chat/ChatToolWindowTabPanel.java | 4 ++++ .../util/coroutines/DisposableCoroutineScope.kt | 2 +- src/main/resources/META-INF/plugin.xml | 7 +++++++ 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ee/carlrobert/codegpt/actions/toolwindow/ClearChatTagsAction.kt diff --git a/src/main/java/ee/carlrobert/codegpt/actions/toolwindow/ClearChatTagsAction.kt b/src/main/java/ee/carlrobert/codegpt/actions/toolwindow/ClearChatTagsAction.kt new file mode 100644 index 00000000..93708495 --- /dev/null +++ b/src/main/java/ee/carlrobert/codegpt/actions/toolwindow/ClearChatTagsAction.kt @@ -0,0 +1,14 @@ +package ee.carlrobert.codegpt.actions.toolwindow + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.project.Project +import ee.carlrobert.codegpt.toolwindow.chat.ChatToolWindowContentManager + +class ClearChatTagsAction : AnAction() { + + override fun actionPerformed(event: AnActionEvent) { + val project: Project = event.project ?: return + project.getService(ChatToolWindowContentManager::class.java).clearAllTags() + } +} \ No newline at end of file diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowContentManager.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowContentManager.java index fc123a04..110c88fa 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowContentManager.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowContentManager.java @@ -138,4 +138,8 @@ public final class ChatToolWindowContentManager { .filter(content -> "Chat".equals(content.getTabName())) .findFirst(); } -} + + public void clearAllTags() { + tryFindActiveChatTabPanel().ifPresent(ChatToolWindowTabPanel::clearAllTags); + } +} \ No newline at end of file diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java index 33e29294..eaaabe4a 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java @@ -244,6 +244,10 @@ public class ChatToolWindowTabPanel implements Disposable { }); } + public void clearAllTags() { + tagManager.clear(); + } + public void includeFiles(List referencedFiles) { userInputPanel.includeFiles(referencedFiles); totalTokensPanel.updateReferencedFilesTokens( diff --git a/src/main/kotlin/ee/carlrobert/codegpt/util/coroutines/DisposableCoroutineScope.kt b/src/main/kotlin/ee/carlrobert/codegpt/util/coroutines/DisposableCoroutineScope.kt index 2c800390..fd663efd 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/util/coroutines/DisposableCoroutineScope.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/util/coroutines/DisposableCoroutineScope.kt @@ -5,7 +5,7 @@ import kotlinx.coroutines.* import kotlin.coroutines.CoroutineContext internal class DisposableCoroutineScope( - scopeDispatcher: CoroutineDispatcher = Dispatchers.Main.immediate + scopeDispatcher: CoroutineDispatcher = EdtDispatchers.Default ) : Disposable, CoroutineScope { private val coroutineScope = CoroutineScope(SupervisorJob() + scopeDispatcher) diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 110efb35..4b493353 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -129,6 +129,13 @@ description="Creates a new chat session"> + + +