summaryrefslogtreecommitdiff
path: root/src/main/kotlin/me
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/me')
-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.kt63
-rw-r--r--src/main/kotlin/me/kyren223/trident/PathMappingsMenuAction.kt11
-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.kt113
-rw-r--r--src/main/kotlin/me/kyren223/trident/Utils.kt12
11 files changed, 191 insertions, 47 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)
+}
+
+