diff options
Diffstat (limited to 'src/main/kotlin/me/kyren223/harpoonforjb')
9 files changed, 0 insertions, 451 deletions
diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/AppSettingsConfigurable.kt b/src/main/kotlin/me/kyren223/harpoonforjb/AppSettingsConfigurable.kt deleted file mode 100644 index 4ece20e..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/AppSettingsConfigurable.kt +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package me.kyren223.harpoonforjb - -import com.intellij.openapi.options.Configurable -import com.intellij.openapi.util.NlsContexts.ConfigurableName -import javax.swing.JComponent - -class AppSettingsConfigurable : Configurable { - private var settings: SettingsData? = null - override fun getDisplayName(): @ConfigurableName String { - return "HarpoonForJB Settings" - } - - override fun createComponent(): JComponent { - settings = SettingsData() - return settings!!.panel - } - - override fun isModified(): Boolean { - val settings = AppSettingsState.instance - if (settings.harpoonWidth != this.settings!!.getHarpoonWidth()) return true - if (settings.harpoonHeight != this.settings!!.getHarpoonHeight()) return true - if (settings.harpoonFontSize != this.settings!!.getHarpoonFontSize()) return true - if (settings.harpoonEnterToSelect != this.settings!!.getHarpoonEnterToSelect()) return true - return false - } - - override fun apply() { - val settings = AppSettingsState.instance - settings.harpoonWidth = this.settings!!.getHarpoonWidth() - settings.harpoonHeight = this.settings!!.getHarpoonHeight() - settings.harpoonFontSize = this.settings!!.getHarpoonFontSize() - settings.harpoonEnterToSelect = this.settings!!.getHarpoonEnterToSelect() - } - - override fun reset() { - val settings = AppSettingsState.instance - if (this.settings == null) { - this.settings = SettingsData() - } - this.settings!!.setHarpoonWidth(settings.harpoonWidth) - this.settings!!.setHarpoonHeight(settings.harpoonHeight) - this.settings!!.setHarpoonFontSize(settings.harpoonFontSize) - this.settings!!.setHarpoonEnterToSelect(settings.harpoonEnterToSelect) - } - - override fun disposeUIResources() { - settings = null - } -} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/AppSettingsState.kt b/src/main/kotlin/me/kyren223/harpoonforjb/AppSettingsState.kt deleted file mode 100644 index ea3eabd..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/AppSettingsState.kt +++ /dev/null @@ -1,30 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.components.PersistentStateComponent -import com.intellij.openapi.components.State -import com.intellij.openapi.components.Storage -import com.intellij.util.xmlb.XmlSerializerUtil - -// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -@State(name = "me.kyren223.harpoonforjb.AppSettingsState", storages = [Storage("SdkSettingsPlugin.xml")]) -class AppSettingsState : PersistentStateComponent<AppSettingsState?> { - - var harpoonEnterToSelect = true - var harpoonWidth = 800 - var harpoonHeight = 400 - var harpoonFontSize = 20 - - override fun getState(): AppSettingsState { - return this - } - - override fun loadState(state: AppSettingsState) { - XmlSerializerUtil.copyBean(state, this) - } - - companion object { - val instance: AppSettingsState - get() = ApplicationManager.getApplication().getService(AppSettingsState::class.java) - } -} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt deleted file mode 100644 index 724f6c8..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt +++ /dev/null @@ -1,15 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.PlatformDataKeys -import com.intellij.openapi.project.Project -import com.intellij.openapi.vfs.VirtualFile - -class HarpoonAppendAction : AnAction() { - override fun actionPerformed(e: AnActionEvent) { - val project: Project = e.project ?: return - val file: VirtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE) ?: return - HarpoonState.appendFile(project, file) - } -} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt deleted file mode 100644 index 3417d7c..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt +++ /dev/null @@ -1,78 +0,0 @@ -@file:Suppress("SameParameterValue") - -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 { - 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("<ESC>", 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 - } - - fun select() { - if (this.editorTextField.editor == null) return - HarpoonState.quickMenuSelectedIndex = this.editorTextField.editor!!.caretModel.logicalPosition.line - doOKAction() - } - - override fun doOKAction() { - HarpoonState.quickMenuContent = editorTextField.text - super.doOKAction() - } - - override fun doCancelAction() { - HarpoonState.quickMenuContent = editorTextField.text - super.doCancelAction() - } - - override fun createSouthPanel(): JComponent? { - return null - } -} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenuSelectAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenuSelectAction.kt deleted file mode 100644 index 8ba8c6c..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenuSelectAction.kt +++ /dev/null @@ -1,14 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.maddyhome.idea.vim.api.injector -import com.maddyhome.idea.vim.command.MappingMode -import com.maddyhome.idea.vim.key.MappingOwner.Plugin.Companion.get - -class HarpoonQuickMenuSelectAction : AnAction() { - override fun actionPerformed(e: AnActionEvent) { - HarpoonState.quickMenuSelect() - } - -} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt deleted file mode 100644 index 3c196b8..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt +++ /dev/null @@ -1,44 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.PlatformDataKeys -import com.intellij.openapi.fileEditor.FileEditorManager - -class HarpoonSelectAction : AnAction() { - override fun actionPerformed(e: AnActionEvent) { - val project = e.project ?: return - val actionId = e.actionManager.getId(this) - var index = when (actionId) { - NEXT -> { - val current = HarpoonState.getIndexOfFile(project, e.getData(PlatformDataKeys.VIRTUAL_FILE)) - if (current == -1) return - current + 1 - } - PREV -> { - val current = HarpoonState.getIndexOfFile(project, e.getData(PlatformDataKeys.VIRTUAL_FILE)) - if (current == -1) return - current - 1 - } - else -> { - getIndex(actionId) - } - } - - val count = HarpoonState.getFileCount(project) - index = ((index % count) + count) % count - val file = HarpoonState.selectFile(project, index) ?: return - FileEditorManager.getInstance(project).openFile(file, true) - } - - private fun getIndex(actionId: String): Int { - return actionId.substring(SELECT.length).toInt() - 1 - } - - companion object { - const val NEXT = "HarpoonSelectNext" - const val PREV = "HarpoonSelectPrev" - const val SELECT = "HarpoonSelect" - } -} - diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt deleted file mode 100644 index 3b476c2..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt +++ /dev/null @@ -1,131 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.ide.util.PropertiesComponent -import com.intellij.openapi.fileEditor.FileEditorManager -import com.intellij.openapi.project.Project -import com.intellij.openapi.vfs.LocalFileSystem -import com.intellij.openapi.vfs.VirtualFile - -object HarpoonState { - private var projectFiles: MutableMap<String, MutableList<VirtualFile>> = mutableMapOf() - private const val HARPOON_LIST_KEY = "HarpoonList" - private var quickMenu: HarpoonQuickMenu? = null - var quickMenuSelectedIndex: Int? = null - var quickMenuContent: String? = "" - - - fun appendFile(project: Project, file: VirtualFile) { - if (!file.isValid) return - loadProject(project) - val files = projectFiles[project.name] - files!!.add(file) - saveProject(project) - } - - fun selectFile(project: Project, index: Int): VirtualFile? { - if (index < 0) return null - loadProject(project) - val files = projectFiles[project.name] - if (files!!.size <= index) return null - return files[index] - } - - private fun loadProject(project: Project) { - if (project.name in projectFiles) return - val properties = PropertiesComponent.getInstance(project) - val list = properties.getList(HARPOON_LIST_KEY) - if (list == null) { - projectFiles[project.name] = mutableListOf() - return - } - val fs = LocalFileSystem.getInstance() - val files = list.stream() - .map { fs.findFileByPath(it) } - .toList() - .filterNotNull() - .filter { it.isValid } - .toMutableList() - projectFiles[project.name] = files - } - - private fun saveProject(project: Project) { - if (project.name !in projectFiles) return - val files = projectFiles[project.name] - val properties = PropertiesComponent.getInstance(project) - val stringList = files!!.stream() - .filter { it.isValid } - .map { it.path } - .toList() - properties.setList(HARPOON_LIST_KEY, stringList) - } - - fun getIndexOfFile(project: Project, data: VirtualFile?): Int { - loadProject(project) - val files = projectFiles[project.name] - if (files == null || data == null) return -1 - return files.indexOfFirst { it.path == data.path } - } - - fun getFileCount(project: Project): Int { - loadProject(project) - return projectFiles[project.name]!!.size - } - - fun toggleQuickMenu(project: Project) { - if (quickMenu != null && quickMenu!!.isShowing) { - println("Canceling quick menu") - quickMenu!!.doCancelAction() - return - } - - loadProject(project) - val content = getProjectContent(project) - quickMenu = HarpoonQuickMenu(content) - val result = quickMenu!!.showAndGet() - - if (quickMenuContent != null && content != quickMenuContent) { - // Update the content -// println("Content Before:\n${quickMenuContent}") - retrieveProjectFiles(project, quickMenuContent!!) -// val contentAfter = projectFiles[project.name]!! -// .joinToString("\n") { it.path } -// .trim() -// println("Content After:\n${contentAfter}") - saveProject(project) - } - - if (!result) return - val index = quickMenuSelectedIndex ?: return - quickMenuSelectedIndex = null - val file = selectFile(project, index) ?: return - FileEditorManager.getInstance(project).openFile(file, true) - } - - fun quickMenuSelect() { - if (quickMenu == null || !quickMenu!!.isShowing) return - quickMenu!!.select() - } - - private fun getProjectContent(project: Project): String { - val content = projectFiles[project.name]!! - .joinToString("\n") { it.path } - .replace(project.basePath!!, "...") - .trim() - return content - } - - private fun retrieveProjectFiles(project: Project, content: String) { - loadProject(project) - val files = content - .split("\n") - .asSequence() - .map { it.trim() } - .map { it.replace("...", project.basePath!!) } - .filter { it.isNotBlank() } - .map { LocalFileSystem.getInstance().findFileByPath(it) } - .filterNotNull() - .filter { it.isValid } - .toMutableList() - projectFiles[project.name] = files - } -}
\ No newline at end of file diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt deleted file mode 100644 index 66e58b0..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt +++ /dev/null @@ -1,31 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.maddyhome.idea.vim.api.injector -import com.maddyhome.idea.vim.command.MappingMode -import com.maddyhome.idea.vim.key.MappingOwner - -class HarpoonToggleQuickMenuAction : AnAction() { - override fun actionPerformed(e: AnActionEvent) { - if (!remapped) remap() - if (e.project != null) { - HarpoonState.toggleQuickMenu(e.project!!) - } - } - - private fun remap() { - if (!AppSettingsState.instance.harpoonEnterToSelect) return - val keys = injector.parser.parseKeys(":action HarpoonQuickMenuSelect<cr>") - val keyGroup = injector.keyGroup - keyGroup.putKeyMapping(MappingMode.NVO, - injector.parser.parseKeys("<cr>"), - MappingOwner.Plugin.get("HarpoonForJB"), keys, false - ) - remapped = true - } - - companion object { - var remapped = false - } -} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/SettingsData.kt b/src/main/kotlin/me/kyren223/harpoonforjb/SettingsData.kt deleted file mode 100644 index 3e0c60f..0000000 --- a/src/main/kotlin/me/kyren223/harpoonforjb/SettingsData.kt +++ /dev/null @@ -1,58 +0,0 @@ -package me.kyren223.harpoonforjb - -import com.intellij.ui.JBIntSpinner -import com.intellij.ui.components.JBCheckBox -import com.intellij.ui.components.JBLabel -import com.intellij.util.ui.FormBuilder -import javax.swing.JPanel - -class SettingsData { - - val panel: JPanel - private val harpoonWidth: JBIntSpinner = JBIntSpinner(800, 1, 5000, 10) - private val harpoonHeight: JBIntSpinner = JBIntSpinner(400, 1, 5000, 10) - private val harpoonFontSize: JBIntSpinner = JBIntSpinner(20, 1, 100) - private val harpoonEnter: JBCheckBox = JBCheckBox() - - init { - panel = FormBuilder.createFormBuilder() - .addLabeledComponent(JBLabel("Harpoon width"), harpoonWidth, 1, false) - .addLabeledComponent(JBLabel("Harpoon height"), harpoonHeight, 1, false) - .addLabeledComponent(JBLabel("Harpoon font size"), harpoonFontSize, 1, false) - .addLabeledComponent(JBLabel("Press enter to select item in the QuickMenu"), harpoonEnter, 1, false) - .addComponentFillVertically(JPanel(), 0) - .panel - } - - fun getHarpoonWidth(): Int { - return harpoonWidth.number - } - - fun getHarpoonHeight(): Int { - return harpoonHeight.number - } - - fun getHarpoonFontSize(): Int { - return harpoonFontSize.number - } - - fun getHarpoonEnterToSelect(): Boolean { - return harpoonEnter.isSelected - } - - fun setHarpoonWidth(width: Int) { - harpoonWidth.number = width - } - - fun setHarpoonHeight(height: Int) { - harpoonHeight.number = height - } - - fun setHarpoonFontSize(fontSize: Int) { - harpoonFontSize.number = fontSize - } - - fun setHarpoonEnterToSelect(enter: Boolean) { - harpoonEnter.isSelected = enter - } -} |
