diff --git a/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json b/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json new file mode 100644 index 00000000000..3b8b1dd9fce --- /dev/null +++ b/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Fix inline chat default key binding not working on windows and linux" +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eacfb8ffffa..229723c03ff 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] apache-commons-collections = "4.4" apache-commons-io = "2.16.0" +apache-commons-text = "1.12.0" assertJ = "3.26.3" # match with /settings.gradle.kts awsSdk = "2.26.25" @@ -70,6 +71,7 @@ aws-sts = { module = "software.amazon.awssdk:sts", version.ref = "awsSdk" } commonmark = { module = "org.commonmark:commonmark", version.ref = "commonmark" } commons-collections = { module = "org.apache.commons:commons-collections4", version.ref = "apache-commons-collections" } commons-io = { module = "commons-io:commons-io", version.ref = "apache-commons-io" } +commons-text = {module = "org.apache.commons:commons-text", version.ref = "apache-commons-text"} detekt-api = { module = "io.gitlab.arturbosch.detekt:detekt-api", version.ref = "detekt" } detekt-formattingRules = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } diff-util = { module = "io.github.java-diff-utils:java-diff-utils", version.ref = "diff-util" } diff --git a/plugins/amazonq/chat/jetbrains-community/build.gradle.kts b/plugins/amazonq/chat/jetbrains-community/build.gradle.kts index 43f35d4e981..147d481b482 100644 --- a/plugins/amazonq/chat/jetbrains-community/build.gradle.kts +++ b/plugins/amazonq/chat/jetbrains-community/build.gradle.kts @@ -20,6 +20,7 @@ dependencies { // everything references codewhisperer, which is not ideal implementation(project(":plugin-amazonq:codewhisperer:jetbrains-community")) implementation(libs.diff.util) + implementation(libs.commons.text) compileOnly(project(":plugin-core:jetbrains-community")) diff --git a/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml b/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml index 3272dc35bfc..d08356231f7 100644 --- a/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml +++ b/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml @@ -20,6 +20,7 @@ factoryClass="software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowFactory" icon="AwsIcons.Logos.AWS_Q" /> + diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt new file mode 100644 index 00000000000..aa5212267f6 --- /dev/null +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt @@ -0,0 +1,39 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.cwc.inline + +import com.intellij.openapi.actionSystem.ActionPromoter +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.DataContext +import com.intellij.openapi.keymap.KeymapUtil +import com.intellij.openapi.util.SystemInfo + +class InlineChatActionPromoter : ActionPromoter { + // temporary until we find a better key binding + override fun promote(actions: MutableList, context: DataContext): MutableList { + val results = actions.toMutableList() + if (context.getData(CommonDataKeys.EDITOR) == null || + context.getData(CommonDataKeys.PROJECT) == null + ) { + return results + } + val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") + // only promote for the default key bindings + if (SystemInfo.isMac && shortCut != "⌘I") return results + if (!SystemInfo.isMac && shortCut != "Ctrl+I") return results + + results.sortWith { a, b -> + when { + isOpenChatInputAction(a) -> -1 + isOpenChatInputAction(b) -> 1 + else -> 0 + } + } + return results + } + + private fun isOpenChatInputAction(action: AnAction): Boolean = + action is OpenChatInputAction +} diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt index a8ffc1bb3b6..21e33ab3df1 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt @@ -8,7 +8,6 @@ import com.intellij.codeInsight.hint.HintUtil import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.VisualPosition import com.intellij.openapi.keymap.KeymapUtil -import com.intellij.openapi.util.SystemInfo import com.intellij.ui.LightweightHint import com.intellij.ui.SimpleColoredText import com.intellij.ui.SimpleTextAttributes @@ -68,15 +67,9 @@ class InlineChatEditorHint { coloredText.appendToComponent(component) val shortcutComponent = HintUtil.createInformationComponent() val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") - if (!SystemInfo.isWindows && shortCut == "⌃I") { - val shortCutIcon = AwsIcons.Resources.InlineChat.AWS_Q_INLINECHAT_SHORTCUT - shortcutComponent.isIconOnTheRight = true - shortcutComponent.icon = shortCutIcon - } else { - val shortcutText = - SimpleColoredText(shortCut, SimpleTextAttributes.REGULAR_ATTRIBUTES) - shortcutText.appendToComponent(shortcutComponent) - } + val shortcutText = + SimpleColoredText(shortCut, SimpleTextAttributes.REGULAR_ATTRIBUTES) + shortcutText.appendToComponent(shortcutComponent) val panel = JPanel(BorderLayout()).apply { add(component, BorderLayout.WEST) diff --git a/plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg b/plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg deleted file mode 100644 index c2cbaab7289..00000000000 --- a/plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/plugins/core/jetbrains-community/src/icons/AwsIcons.kt b/plugins/core/jetbrains-community/src/icons/AwsIcons.kt index 9a4703ce28b..024c57f80ce 100644 --- a/plugins/core/jetbrains-community/src/icons/AwsIcons.kt +++ b/plugins/core/jetbrains-community/src/icons/AwsIcons.kt @@ -125,10 +125,6 @@ object AwsIcons { @JvmField val SEVERITY_CRITICAL = load("/icons/resources/codewhisperer/severity-critical.svg") } - - object InlineChat { - @JvmField val AWS_Q_INLINECHAT_SHORTCUT = load("/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg") - } } object Actions {