From 3ab5bc95eb1e12837b804024cdad7ca1dcb6f1de Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 13 Feb 2024 22:22:12 +0200 Subject: Implemented HarpoonQuickMenu, auto fuces, starts in normal mode, able to view current harpoon list, no functionality yet for navigating to a selected file or modifying the harpoon list --- .../me/kyren223/harpoonforjb/HarpoonQuickMenu.kt | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt (limited to 'src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt') diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt new file mode 100644 index 0000000..9740470 --- /dev/null +++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt @@ -0,0 +1,57 @@ +package me.kyren223.harpoonforjb + +import com.intellij.openapi.editor.LogicalPosition +import com.intellij.openapi.ui.DialogWrapper +import com.intellij.ui.EditorTextField +import com.maddyhome.idea.vim.KeyHandler +import com.maddyhome.idea.vim.api.ExecutionContext +import com.maddyhome.idea.vim.api.VimEditor +import com.maddyhome.idea.vim.api.injector +import com.maddyhome.idea.vim.newapi.vim +import java.awt.event.FocusEvent +import java.awt.event.FocusListener +import javax.swing.JComponent + +class HarpoonQuickMenu(private val content: String) : DialogWrapper(true) { + private lateinit var editorTextField: EditorTextField + + init { + val settings = AppSettingsState.instance + this.title = "Harpoon Quick Menu" + setSize(settings.harpoonWidth, settings.harpoonHeight) + super.init() + } + + override fun createCenterPanel(): JComponent { + println("Content: \n$content") + val settings = AppSettingsState.instance + editorTextField = EditorTextField(this.content) + editorTextField.setOneLineMode(false) + editorTextField.addSettingsProvider { + it.setFontSize(settings.harpoonFontSize) + it.isInsertMode = true + it.caretModel.moveToLogicalPosition(LogicalPosition(0, 0)) + it.settings.isLineNumbersShown = true + } + + editorTextField.addFocusListener(object : FocusListener { + override fun focusGained(e: FocusEvent?) { + val editor = editorTextField.editor!!.vim + val context = injector.executionContextManager.onEditor(editor, null) + simulateKeyPress("", editor, context) + } + + override fun focusLost(e: FocusEvent?) { /* Do nothing */} + }) + + return editorTextField + } + + private fun simulateKeyPress(key: String, editor: VimEditor, context: ExecutionContext.Editor) { + KeyHandler.getInstance().handleKey(editor, injector.parser.parseKeys(key)[0], context) + } + + override fun getPreferredFocusedComponent(): JComponent? { + return this.editorTextField + } +} -- cgit v1.3.1