1
0
mirror of https://github.com/chylex/IntelliJ-Keyboard-Master.git synced 2025-04-13 18:15:42 +02:00

Work around IdeaVIM stealing keys when renaming elements

This commit is contained in:
chylex 2021-10-14 03:56:44 +02:00
parent f95fd49da1
commit e0bd7778df
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
5 changed files with 66 additions and 3 deletions
.idea/runConfigurations
build.gradle.kts
src/main
kotlin/com/chylex/intellij/keyboardmaster
resources/META-INF

View File

@ -0,0 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Plugin + IdeaVIM" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="env">
<map>
<entry key="IDEAVIM" value="1" />
</map>
</option>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value=":runIde" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list />
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

View File

@ -19,4 +19,8 @@ dependencies {
intellij {
version.set("2021.2.2")
if (System.getenv("IDEAVIM") == "1") {
plugins.add("IdeaVIM:0.66")
}
}

View File

@ -0,0 +1,24 @@
package com.chylex.intellij.keyboardmaster
import com.chylex.intellij.keyboardmaster.feature.codeCompletion.CodeCompletionPopupKeyHandler
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.StartupActivity
class PluginStartup : StartupActivity.DumbAware {
private var isInitialized = false
override fun runActivity(project: Project) {
if (!isInitialized) {
isInitialized = true
val application = ApplicationManager.getApplication()
if (application.isUnitTestMode) {
CodeCompletionPopupKeyHandler.registerRawHandler()
}
else {
application.invokeLater(CodeCompletionPopupKeyHandler.Companion::registerRawHandler)
}
}
}
}

View File

@ -6,6 +6,7 @@ import com.intellij.codeInsight.lookup.impl.LookupImpl
import com.intellij.codeInsight.template.impl.editorActions.TypedActionHandlerBase
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.actionSystem.TypedAction
import com.intellij.openapi.editor.actionSystem.TypedActionHandler
import com.intellij.ui.ScrollingUtil
import javax.swing.ListModel
@ -13,7 +14,16 @@ import javax.swing.ListModel
/**
* Handles configured key bindings inside a code completion popup menu.
*/
class CodeCompletionPopupKeyHandler(originalHandler: TypedActionHandler?) : TypedActionHandlerBase(originalHandler) {
class CodeCompletionPopupKeyHandler private constructor(originalHandler: TypedActionHandler?) : TypedActionHandlerBase(originalHandler) {
companion object {
/**
* Registers the key handler as a raw handler, because IdeaVIM steals keys from Keyboard Master when renaming an element in normal mode.
*/
fun registerRawHandler() {
TypedAction.getInstance().let { it.setupRawHandler(CodeCompletionPopupKeyHandler(it.rawHandler)) }
}
}
override fun execute(editor: Editor, charTyped: Char, dataContext: DataContext) {
if (!executeImpl(editor, charTyped)) {
myOriginalHandler?.execute(editor, charTyped, dataContext)

View File

@ -19,7 +19,6 @@
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.chylex.intellij.keyboardmaster.configuration.PluginConfiguration" />
<applicationConfigurable parentId="tools" instance="com.chylex.intellij.keyboardmaster.configuration.PluginConfigurable" id="com.chylex.keyboardmaster" />
<!--suppress PluginXmlValidity, PluginXmlDynamicPlugin -->
<editorTypedHandler implementationClass="com.chylex.intellij.keyboardmaster.feature.codeCompletion.CodeCompletionPopupKeyHandler" />
<postStartupActivity implementation="com.chylex.intellij.keyboardmaster.PluginStartup" order="last" />
</extensions>
</idea-plugin>