diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/AppendAction.kt (renamed from src/main/kotlin/me/kyren223/trident/TridentAppendAction.kt) | 2 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/PathMappingsMenu.kt | 63 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/PathMappingsMenuAction.kt | 11 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/QuickMenu.kt (renamed from src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt) | 9 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/QuickMenuSelectAction.kt (renamed from src/main/kotlin/me/kyren223/trident/TridentQuickMenuSelectAction.kt) | 2 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/SelectAction.kt (renamed from src/main/kotlin/me/kyren223/trident/TridentSelectAction.kt) | 2 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/SettingsConfigurable.kt (renamed from src/main/kotlin/me/kyren223/trident/AppSettingsConfigurable.kt) | 8 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/SettingsState.kt (renamed from src/main/kotlin/me/kyren223/trident/AppSettingsState.kt) | 12 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/ToggleQuickMenuAction.kt (renamed from src/main/kotlin/me/kyren223/trident/TridentToggleQuickMenuAction.kt) | 4 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/TridentState.kt | 113 | ||||
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/Utils.kt | 12 | ||||
| -rw-r--r-- | src/main/resources/META-INF/plugin.xml | 30 |
12 files changed, 209 insertions, 59 deletions
diff --git a/src/main/kotlin/me/kyren223/trident/TridentAppendAction.kt b/src/main/kotlin/me/kyren223/trident/AppendAction.kt index 621b9cd..f058f86 100644 --- a/src/main/kotlin/me/kyren223/trident/TridentAppendAction.kt +++ b/src/main/kotlin/me/kyren223/trident/AppendAction.kt @@ -6,7 +6,7 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile -class TridentAppendAction : AnAction() { +class AppendAction : AnAction() { override fun actionPerformed(e: AnActionEvent) { val project: Project = e.project ?: return val file: VirtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE) ?: return diff --git a/src/main/kotlin/me/kyren223/trident/PathMappingsMenu.kt b/src/main/kotlin/me/kyren223/trident/PathMappingsMenu.kt new file mode 100644 index 0000000..d098323 --- /dev/null +++ b/src/main/kotlin/me/kyren223/trident/PathMappingsMenu.kt @@ -0,0 +1,63 @@ +package me.kyren223.trident + +import com.intellij.openapi.editor.LogicalPosition +import com.intellij.openapi.ui.DialogWrapper +import com.intellij.ui.EditorTextField +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 PathMappingsMenu(private val content: String) : DialogWrapper(true) { + private lateinit var editorTextField: EditorTextField + + init { + val settings = SettingsState.instance + this.title = "Trident Path Mappings Menu" + setSize(settings.width, settings.height) + super.init() + } + + override fun createCenterPanel(): JComponent { + val settings = SettingsState.instance + editorTextField = EditorTextField(this.content) + editorTextField.setOneLineMode(false) + editorTextField.addSettingsProvider { + it.setFontSize(settings.fontSize) + 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 + } + + override fun getPreferredFocusedComponent(): JComponent { + return this.editorTextField + } + + override fun doOKAction() { + TridentState.pathMappingsContent = editorTextField.text + super.doOKAction() + } + + override fun doCancelAction() { + TridentState.pathMappingsContent = editorTextField.text + super.doCancelAction() + } + + override fun createSouthPanel(): JComponent? { + return null + } +} diff --git a/src/main/kotlin/me/kyren223/trident/PathMappingsMenuAction.kt b/src/main/kotlin/me/kyren223/trident/PathMappingsMenuAction.kt new file mode 100644 index 0000000..6b46f6a --- /dev/null +++ b/src/main/kotlin/me/kyren223/trident/PathMappingsMenuAction.kt @@ -0,0 +1,11 @@ +package me.kyren223.trident + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent + +class PathMappingsMenuAction : AnAction() { + override fun actionPerformed(e: AnActionEvent) { + val project = e.project ?: return + TridentState.togglePathMappingsMenu(project) + } +} diff --git a/src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt b/src/main/kotlin/me/kyren223/trident/QuickMenu.kt index e7903e0..3ef3871 100644 --- a/src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt +++ b/src/main/kotlin/me/kyren223/trident/QuickMenu.kt @@ -14,18 +14,18 @@ import java.awt.event.FocusEvent import java.awt.event.FocusListener import javax.swing.JComponent -class TridentQuickMenu(private val content: String) : DialogWrapper(true) { +class QuickMenu(private val content: String) : DialogWrapper(true) { private lateinit var editorTextField: EditorTextField init { - val settings = AppSettingsState.instance + val settings = SettingsState.instance this.title = "Trident Quick Menu" setSize(settings.width, settings.height) super.init() } override fun createCenterPanel(): JComponent { - val settings = AppSettingsState.instance + val settings = SettingsState.instance editorTextField = EditorTextField(this.content) editorTextField.setOneLineMode(false) editorTextField.addSettingsProvider { @@ -48,9 +48,6 @@ class TridentQuickMenu(private val content: String) : DialogWrapper(true) { 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 diff --git a/src/main/kotlin/me/kyren223/trident/TridentQuickMenuSelectAction.kt b/src/main/kotlin/me/kyren223/trident/QuickMenuSelectAction.kt index f9db35a..0ae320a 100644 --- a/src/main/kotlin/me/kyren223/trident/TridentQuickMenuSelectAction.kt +++ b/src/main/kotlin/me/kyren223/trident/QuickMenuSelectAction.kt @@ -3,7 +3,7 @@ package me.kyren223.trident import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent -class TridentQuickMenuSelectAction : AnAction() { +class QuickMenuSelectAction : AnAction() { override fun actionPerformed(e: AnActionEvent) { TridentState.quickMenuSelect() } diff --git a/src/main/kotlin/me/kyren223/trident/TridentSelectAction.kt b/src/main/kotlin/me/kyren223/trident/SelectAction.kt index 3122650..2e09bb9 100644 --- a/src/main/kotlin/me/kyren223/trident/TridentSelectAction.kt +++ b/src/main/kotlin/me/kyren223/trident/SelectAction.kt @@ -5,7 +5,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.PlatformDataKeys import com.intellij.openapi.fileEditor.FileEditorManager -class TridentSelectAction : AnAction() { +class SelectAction : AnAction() { override fun actionPerformed(e: AnActionEvent) { val project = e.project ?: return var index = when (val actionId = e.actionManager.getId(this)) { diff --git a/src/main/kotlin/me/kyren223/trident/AppSettingsConfigurable.kt b/src/main/kotlin/me/kyren223/trident/SettingsConfigurable.kt index e04b3b8..3caaf4b 100644 --- a/src/main/kotlin/me/kyren223/trident/AppSettingsConfigurable.kt +++ b/src/main/kotlin/me/kyren223/trident/SettingsConfigurable.kt @@ -5,7 +5,7 @@ import com.intellij.openapi.options.Configurable import com.intellij.openapi.util.NlsContexts.ConfigurableName import javax.swing.JComponent -class AppSettingsConfigurable : Configurable { +class SettingsConfigurable : Configurable { private var settings: SettingsData? = null override fun getDisplayName(): @ConfigurableName String { return "Trident Settings" @@ -17,7 +17,7 @@ class AppSettingsConfigurable : Configurable { } override fun isModified(): Boolean { - val settings = AppSettingsState.instance + val settings = SettingsState.instance if (settings.width != this.settings!!.getWidth()) return true if (settings.height != this.settings!!.getHeight()) return true if (settings.fontSize != this.settings!!.getFontSize()) return true @@ -26,7 +26,7 @@ class AppSettingsConfigurable : Configurable { } override fun apply() { - val settings = AppSettingsState.instance + val settings = SettingsState.instance settings.width = this.settings!!.getWidth() settings.height = this.settings!!.getHeight() settings.fontSize = this.settings!!.getFontSize() @@ -34,7 +34,7 @@ class AppSettingsConfigurable : Configurable { } override fun reset() { - val settings = AppSettingsState.instance + val settings = SettingsState.instance if (this.settings == null) { this.settings = SettingsData() } diff --git a/src/main/kotlin/me/kyren223/trident/AppSettingsState.kt b/src/main/kotlin/me/kyren223/trident/SettingsState.kt index 6d61ea0..b0544f4 100644 --- a/src/main/kotlin/me/kyren223/trident/AppSettingsState.kt +++ b/src/main/kotlin/me/kyren223/trident/SettingsState.kt @@ -7,24 +7,24 @@ 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.trident.AppSettingsState", storages = [Storage("SdkSettingsPlugin.xml")]) -class AppSettingsState : PersistentStateComponent<AppSettingsState?> { +@State(name = "me.kyren223.trident.SettingsState", storages = [Storage("SdkSettingsPlugin.xml")]) +class SettingsState : PersistentStateComponent<SettingsState?> { var enterToSelect = true var width = 800 var height = 400 var fontSize = 20 - override fun getState(): AppSettingsState { + override fun getState(): SettingsState { return this } - override fun loadState(state: AppSettingsState) { + override fun loadState(state: SettingsState) { XmlSerializerUtil.copyBean(state, this) } companion object { - val instance: AppSettingsState - get() = ApplicationManager.getApplication().getService(AppSettingsState::class.java) + val instance: SettingsState + get() = ApplicationManager.getApplication().getService(SettingsState::class.java) } } diff --git a/src/main/kotlin/me/kyren223/trident/TridentToggleQuickMenuAction.kt b/src/main/kotlin/me/kyren223/trident/ToggleQuickMenuAction.kt index a3f8cc7..a8a78ab 100644 --- a/src/main/kotlin/me/kyren223/trident/TridentToggleQuickMenuAction.kt +++ b/src/main/kotlin/me/kyren223/trident/ToggleQuickMenuAction.kt @@ -6,7 +6,7 @@ import com.maddyhome.idea.vim.api.injector import com.maddyhome.idea.vim.command.MappingMode import com.maddyhome.idea.vim.key.MappingOwner -class TridentToggleQuickMenuAction : AnAction() { +class ToggleQuickMenuAction : AnAction() { override fun actionPerformed(e: AnActionEvent) { if (!remapped) remap() if (e.project != null) { @@ -15,7 +15,7 @@ class TridentToggleQuickMenuAction : AnAction() { } private fun remap() { - if (!AppSettingsState.instance.enterToSelect) return + if (!SettingsState.instance.enterToSelect) return val keys = injector.parser.parseKeys(":action TridentQuickMenuSelect<cr>") val keyGroup = injector.keyGroup keyGroup.putKeyMapping(MappingMode.NVO, diff --git a/src/main/kotlin/me/kyren223/trident/TridentState.kt b/src/main/kotlin/me/kyren223/trident/TridentState.kt index 57a47b8..1163789 100644 --- a/src/main/kotlin/me/kyren223/trident/TridentState.kt +++ b/src/main/kotlin/me/kyren223/trident/TridentState.kt @@ -8,10 +8,14 @@ import com.intellij.openapi.vfs.VirtualFile object TridentState { private var projectFiles: MutableMap<String, MutableList<VirtualFile>> = mutableMapOf() + private var pathMappings: MutableMap<String, MutableMap<String, String>> = mutableMapOf() private const val TRIDENT_LIST_KEY = "TridentList" - private var quickMenu: TridentQuickMenu? = null + private const val PATH_MAPPINGS_LIST_KEY = "PathMappings" + private var quickMenu: QuickMenu? = null var quickMenuSelectedIndex: Int? = null - var quickMenuContent: String? = "" + var quickMenuContent: String = "" + private var pathMappingsMenu: PathMappingsMenu? = null + var pathMappingsContent: String = "" fun appendFile(project: Project, file: VirtualFile) { if (!file.isValid) return @@ -33,30 +37,49 @@ object TridentState { if (project.name in projectFiles) return val properties = PropertiesComponent.getInstance(project) + val pathMappingsList = properties.getList(PATH_MAPPINGS_LIST_KEY) + var map = mutableMapOf<String, String>() + if (pathMappingsList == null) { + map["..."] = project.basePath!! + } else { + for (entry in pathMappingsList) { + val split = entry.split("=") + if (split.size != 2) continue + map[split[0]] = split[1] + } + } + this.pathMappings[project.name] = map + val list = properties.getList(TRIDENT_LIST_KEY) if (list == null) { projectFiles[project.name] = mutableListOf() - return - } - val fs = LocalFileSystem.getInstance() - val files = list.stream() + } else { + val fs = LocalFileSystem.getInstance() + val files = list.stream() .map { fs.findFileByPath(it) } .toList() .filterNotNull() .filter { it.isValid } .toMutableList() - projectFiles[project.name] = files + 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() + .filter { it.isValid } + .map { it.path } + .toList() properties.setList(TRIDENT_LIST_KEY, stringList) + + val pathMappingsString = pathMappings[project.name]!!.entries + .joinToString("\n") { "${it.key}=${it.value}" } + .split("\n") + properties.setList(PATH_MAPPINGS_LIST_KEY, pathMappingsString) } fun getIndexOfFile(project: Project, data: VirtualFile?): Int { @@ -79,11 +102,11 @@ object TridentState { loadProject(project) val content = getProjectContent(project) - quickMenu = TridentQuickMenu(content) + quickMenu = QuickMenu(content) val result = quickMenu!!.showAndGet() - if (quickMenuContent != null && content != quickMenuContent) { - retrieveProjectFiles(project, quickMenuContent!!) + if (content != quickMenuContent) { + retrieveProjectFiles(project, quickMenuContent) saveProject(project) } @@ -100,25 +123,63 @@ object TridentState { } private fun getProjectContent(project: Project): String { - val content = projectFiles[project.name]!! - .joinToString("\n") { it.path } - .replace(project.basePath!!, "...") - .trim() + loadProject(project) + val map = pathMappings[project.name] ?: throw IllegalStateException("Path mappings not found") + println("map: $map") + var content = projectFiles[project.name]!! + .joinToString("\n") { it.path } + .trim() + println("content: $content") + for ((key, value) in map) { + println("key: $key | value: $value") + content = content.replace(value, key) + } + println("content: $content") 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() + .split("\n") + .asSequence() + .map { it.trim() } + .map { line -> + pathMappings[project.name]!!.entries.fold(line) { acc, (key, value) -> + acc.replace(key, value) + } + } +// .map { +// pathMappings[project.name]!!.entries.forEach { (key, value) -> it.replace(key, value) } +// it +// } + .filter { it.isNotBlank() } + .map { LocalFileSystem.getInstance().findFileByPath(it) } + .filterNotNull() + .filter { it.isValid } + .toMutableList() projectFiles[project.name] = files } + + fun togglePathMappingsMenu(project: Project) { + if (pathMappingsMenu != null && pathMappingsMenu!!.isShowing) { + pathMappingsMenu!!.doCancelAction() + return + } + + loadProject(project) + val content = pathMappings[project.name]!!.entries + .joinToString("\n") { "${it.key}=${it.value}" } + pathMappingsMenu = PathMappingsMenu(content) + pathMappingsMenu!!.showAndGet() + + if (content != pathMappingsContent) { + pathMappingsContent.split("\n").forEach { + val split = it.split("=") + if (split.size != 2) return@forEach + this.pathMappings[project.name]!![split[0]] = split[1] + } + saveProject(project) + } + } }
\ No newline at end of file diff --git a/src/main/kotlin/me/kyren223/trident/Utils.kt b/src/main/kotlin/me/kyren223/trident/Utils.kt new file mode 100644 index 0000000..7ff2d58 --- /dev/null +++ b/src/main/kotlin/me/kyren223/trident/Utils.kt @@ -0,0 +1,12 @@ +package me.kyren223.trident + +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 + +fun simulateKeyPress(key: String, editor: VimEditor, context: ExecutionContext.Editor) { + KeyHandler.getInstance().handleKey(editor, injector.parser.parseKeys(key)[0], context) +} + + diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 73b2fd2..f4c9bf1 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -37,10 +37,10 @@ <extensions defaultExtensionNs="com.intellij"> <applicationConfigurable parentId="tools" - instance="me.kyren223.trident.AppSettingsConfigurable" - id="me.kyren223.trident.AppSettingsConfigurable" + instance="me.kyren223.trident.SettingsConfigurable" + id="me.kyren223.trident.SettingsConfigurable" displayName="Trident Settings"/> - <applicationService serviceImplementation="me.kyren223.trident.AppSettingsState"/> + <applicationService serviceImplementation="me.kyren223.trident.SettingsState"/> </extensions> <actions> @@ -51,57 +51,63 @@ <!-- Trident Select Buffer --> <action id="TridentSelect1" - class="me.kyren223.trident.TridentSelectAction" + class="me.kyren223.trident.SelectAction" text="Select Buffer 1"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <action id="TridentSelect2" - class="me.kyren223.trident.TridentSelectAction" + class="me.kyren223.trident.SelectAction" text="Select Buffer 2"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <action id="TridentSelect3" - class="me.kyren223.trident.TridentSelectAction" + class="me.kyren223.trident.SelectAction" text="Select Buffer 3"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <action id="TridentSelect4" - class="me.kyren223.trident.TridentSelectAction" + class="me.kyren223.trident.SelectAction" text="Select Buffer 4"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <!-- Select Previous & Next Buffer --> <action id="TridentSelectPrev" - class="me.kyren223.trident.TridentSelectAction" + class="me.kyren223.trident.SelectAction" text="Select Previous Buffer"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <action id="TridentSelectNext" - class="me.kyren223.trident.TridentSelectAction" + class="me.kyren223.trident.SelectAction" text="Select Next Buffer"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <!-- Append --> <action id="TridentAppend" - class="me.kyren223.trident.TridentAppendAction" + class="me.kyren223.trident.AppendAction" text="Append File"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <!-- UI Actions --> <action id="TridentToggleQuickMenu" - class="me.kyren223.trident.TridentToggleQuickMenuAction" + class="me.kyren223.trident.ToggleQuickMenuAction" text="Toggle Quick Menu"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> <action id="TridentQuickMenuSelect" - class="me.kyren223.trident.TridentQuickMenuSelectAction" + class="me.kyren223.trident.QuickMenuSelectAction" text="Quick Menu Select"> <add-to-group group-id="me.kyren223.trident.mainGroup"/> </action> + <action id="TridentPathMappingsMenu" + class="me.kyren223.trident.PathMappingsMenuAction" + text="Toggle Path Mappings Menu"> + <add-to-group group-id="me.kyren223.trident.mainGroup"/> + </action> + </actions> </idea-plugin>
\ No newline at end of file |
