From 38c80a7b277cc59ad9d995687b59e8023a6349e2 Mon Sep 17 00:00:00 2001 From: chylex <contact@chylex.com> Date: Wed, 18 Sep 2024 19:49:16 +0200 Subject: [PATCH] Change vim-style navigation binding for 'X' to close all tree nodes --- .../components/VimTreeNavigation.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimTreeNavigation.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimTreeNavigation.kt index 8869674..4bcbb5d 100644 --- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimTreeNavigation.kt +++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/components/VimTreeNavigation.kt @@ -44,7 +44,7 @@ internal object VimTreeNavigation { KeyStroke.getKeyStroke('p') to IdeaAction("Tree-selectParentNoCollapse"), KeyStroke.getKeyStroke('P') to IdeaAction("Tree-selectFirst"), KeyStroke.getKeyStroke('x') to CollapseSelfOrParentNode, - KeyStroke.getKeyStroke('X') to IdeaAction("CollapseTreeNode"), + KeyStroke.getKeyStroke('X') to CollapseAll, ) ) @@ -141,6 +141,21 @@ internal object VimTreeNavigation { } } + private data object CollapseAll : ActionNode<VimNavigationDispatcher<JTree>> { + override fun performAction(holder: VimNavigationDispatcher<JTree>, actionEvent: AnActionEvent, keyEvent: KeyEvent) { + val tree = holder.component + + CollapseUntilRootNode.performAction(holder, actionEvent, keyEvent) + + var row = 0 + + while (row < tree.rowCount) { + tree.collapseRow(row) + row++ + } + } + } + private data object ExpandChildrenToNextLevel : ActionNode<VimNavigationDispatcher<JTree>> { override fun performAction(holder: VimNavigationDispatcher<JTree>, actionEvent: AnActionEvent, keyEvent: KeyEvent) { val tree = holder.component