# How to set a keyboard shortcut for opening a tool-window?

**URL:** <https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142>\
**Category:** IntelliJ Platform\
**Created:** [November 17, 2025, 2:05pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142 "2025-11-17T14:05:43Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![cunla](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/cunla/32/150_2.png) [@cunla](https://platform.jetbrains.com/u/cunla)\
**Post date:** [November 17, 2025, 2:05pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/1 "2025-11-17T14:05:44Z")

</div>

How can I set a keyboard shortcut for Activating toolwindow action?

I can’t write the action on `plugin.xml` and I do not want it hard-coded like this:

```auto
val shortcutUsed = keymap.getShortcuts(ACTIVATE_TOOL_WINDOW_ACTION_ID).any { it == DEFAULT_TOOLWINDOW_SHORTCUT }
        if (!shortcutUsed) {
            keymap.addShortcut(ACTIVATE_TOOL_WINDOW_ACTION_ID, DEFAULT_TOOLWINDOW_SHORTCUT)
        }

```

---

<div class="post-metadata">

**Author:** ![robert.novotny](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/robert.novotny/32/2046_2.png) [@robert.novotny](https://platform.jetbrains.com/u/robert.novotny)\
**Post date:** [November 17, 2025, 3:07pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/2 "2025-11-17T15:07:30Z")

</div>

Hi,  
it is customary that only built-in tool windows have keyboard shortcuts: generally Cmd/Alt+.

Can you elaborate on the “I can’t write the action on `plugin.xml` bit”?

---

<div class="post-metadata">

**Author:** ![gerryhjs](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/gerryhjs/32/219_2.png) [@gerryhjs](https://platform.jetbrains.com/u/gerryhjs)\
**Post date:** [November 20, 2025, 12:23pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/3 "2025-11-20T12:23:59Z")

</div>

Maybe you could use a “keymaps” entry in your plugin or even create a related independent keymap plugin.

---

<div class="post-metadata">

**Author:** ![cunla](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/cunla/32/150_2.png) [@cunla](https://platform.jetbrains.com/u/cunla)\
**Post date:** [November 20, 2025, 1:44pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/4 "2025-11-20T13:44:42Z")

</div>

I can’t write

```xml
<action id="ActivateXXXToolWindow">
 <keyboard-shortcut ...
</action>

```

because it is missing the class attribute. I can’t use `<reference ref=...` because it does not take `<keyboard-shortcut`.

Also, semi-related, `<group id=.. class=...>` does not take `<keyboard-shortcut` subelement and it should.

---

<div class="post-metadata">

**Author:** ![cunla](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/cunla/32/150_2.png) [@cunla](https://platform.jetbrains.com/u/cunla)\
**Post date:** [November 20, 2025, 1:45pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/5 "2025-11-20T13:45:17Z")

</div>

Can you provide an example? where should the `keymaps` entry be?

---

<div class="post-metadata">

**Author:** ![gerryhjs](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/gerryhjs/32/219_2.png) [@gerryhjs](https://platform.jetbrains.com/u/gerryhjs)\
**Post date:** [November 20, 2025, 1:58pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/6 "2025-11-20T13:58:11Z")

</div>

Maybe you could refer to: [intellij-community/platform/platform-resources/src/keymaps at master · JetBrains/intellij-community · GitHub](https://github.com/JetBrains/intellij-community/tree/master/platform/platform-resources/src/keymaps)

I build my own keymap plugin based on keymap entry.

---

<div class="post-metadata">

**Author:** ![cunla](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/cunla/32/150_2.png) [@cunla](https://platform.jetbrains.com/u/cunla)\
**Post date:** [November 20, 2025, 2:10pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/7 "2025-11-20T14:10:34Z")

</div>

But why should it be a separate plugin for having 2-3 shortcuts for my plugin..  
I just would like a default shortcut for a few actions.

---

<div class="post-metadata">

**Author:** ![gerryhjs](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/gerryhjs/32/219_2.png) [@gerryhjs](https://platform.jetbrains.com/u/gerryhjs)\
**Post date:** [November 20, 2025, 2:12pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/8 "2025-11-20T14:12:32Z")

</div>

It could also implement entry in your plugin.xml like this.

```
<extensions defaultExtensionNs="com.intellij">
    <bundledKeymap file="(your keymap).xml"/>
</extensions>

```

---

<div class="post-metadata">

**Author:** ![cunla](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/cunla/32/150_2.png) [@cunla](https://platform.jetbrains.com/u/cunla)\
**Post date:** [November 20, 2025, 2:24pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/9 "2025-11-20T14:24:51Z")

</div>

I tried that, but it does not “pick it up”.  
Do you have an example how to use `bundledKeymap`?

---

<div class="post-metadata">

**Author:** ![gerryhjs](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/gerryhjs/32/219_2.png) [@gerryhjs](https://platform.jetbrains.com/u/gerryhjs)\
**Post date:** [November 20, 2025, 11:40pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/10 "2025-11-20T23:40:30Z")

</div>

What do you means of “pick it up”? Can you see your keymap in IDE setting.

---

<div class="post-metadata">

**Author:** ![robert.novotny](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/robert.novotny/32/2046_2.png) [@robert.novotny](https://platform.jetbrains.com/u/robert.novotny)\
**Post date:** [November 21, 2025, 5:38pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/11 "2025-11-21T17:38:47Z")

</div>

As a somewhat unorthodox approach, you can inherit from `AnAction` and activate the tool window programatically in `actionPerformed()`. Then, a keyboard shortcut can be assigned in the `plugin.xml` to this action.

---

<div class="post-metadata">

**Author:** ![illuminatedcloud](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/illuminatedcloud/32/55_2.png) [@illuminatedcloud](https://platform.jetbrains.com/u/illuminatedcloud)\
**Post date:** [November 21, 2025, 10:43pm UTC](https://platform.jetbrains.com/t/how-to-set-a-keyboard-shortcut-for-opening-a-tool-window/3142/12 "2025-11-21T22:43:27Z")

</div>

In your `plugin.xml`, add the following to the `<actions>…</actions>` section:

```xml
<action
    id="OpenYourToolWindowActionId"
    class="OpenYourToolWindowAction"
    text="Open Your Tool Window"
    description="Opens your tool window"
    icon="yourToolWindow.svg">
    <keyboard-shortcut
        first-keystroke="desired keystroke"
        keymap="$default"/>
</action>

```

Then implement `OpenYourToolWindowAction` as:

```java
public class OpenYourToolWindowAction extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getProject();
        if (project != null) {
            ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(YourToolWindow.ID);
            if (toolWindow != null) {
                ContentManager contentManager = toolWindow.getContentManager();
                Content content = contentManager.getSelectedContent();
                if (content != null) {
                    toolWindow.show();
                }
            }
        }
    }
}

```

That may not be 100% perfect, but it should get you very close.
