mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-04-21 07:15:46 +02:00
Get rid of the AppCode-specific code
AppCode was sunset, so there is no need to support it in IdeaVim
This commit is contained in:
parent
0b817ba575
commit
89e530276f
README.md
src/main
java/com/maddyhome/idea/vim
resources/META-INF
vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api
@ -29,7 +29,7 @@ IdeaVim is a Vim engine for JetBrains IDEs.
|
|||||||
|
|
||||||
#### Compatibility
|
#### Compatibility
|
||||||
|
|
||||||
IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive,
|
IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, DataGrip, GoLand, Rider, Cursive,
|
||||||
Android Studio and other IntelliJ platform based IDEs.
|
Android Studio and other IntelliJ platform based IDEs.
|
||||||
|
|
||||||
Setup
|
Setup
|
||||||
|
@ -44,7 +44,6 @@ import com.maddyhome.idea.vim.helper.updateCaretsVisualAttributes
|
|||||||
import com.maddyhome.idea.vim.key.ShortcutOwner
|
import com.maddyhome.idea.vim.key.ShortcutOwner
|
||||||
import com.maddyhome.idea.vim.key.ShortcutOwnerInfo
|
import com.maddyhome.idea.vim.key.ShortcutOwnerInfo
|
||||||
import com.maddyhome.idea.vim.listener.AceJumpService
|
import com.maddyhome.idea.vim.listener.AceJumpService
|
||||||
import com.maddyhome.idea.vim.listener.AppCodeTemplates.appCodeTemplateCaptured
|
|
||||||
import com.maddyhome.idea.vim.newapi.globalIjOptions
|
import com.maddyhome.idea.vim.newapi.globalIjOptions
|
||||||
import com.maddyhome.idea.vim.newapi.initInjector
|
import com.maddyhome.idea.vim.newapi.initInjector
|
||||||
import com.maddyhome.idea.vim.newapi.vim
|
import com.maddyhome.idea.vim.newapi.vim
|
||||||
@ -182,10 +181,6 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
return ActionEnableStatus.no("The key is tab and the template is active", LogLevel.INFO)
|
return ActionEnableStatus.no("The key is tab and the template is active", LogLevel.INFO)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((keyCode == KeyEvent.VK_TAB || keyCode == KeyEvent.VK_ENTER) && editor.appCodeTemplateCaptured()) {
|
|
||||||
return ActionEnableStatus.no("App code template is active", LogLevel.INFO)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (editor.inInsertMode) {
|
if (editor.inInsertMode) {
|
||||||
if (keyCode == KeyEvent.VK_TAB) {
|
if (keyCode == KeyEvent.VK_TAB) {
|
||||||
// TODO: This stops VimEditorTab seeing <Tab> in insert mode and correctly scrolling the view
|
// TODO: This stops VimEditorTab seeing <Tab> in insert mode and correctly scrolling the view
|
||||||
|
@ -19,7 +19,6 @@ import com.intellij.openapi.fileEditor.impl.EditorWindow
|
|||||||
import com.maddyhome.idea.vim.KeyHandler
|
import com.maddyhome.idea.vim.KeyHandler
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.maddyhome.idea.vim.api.ExecutionContext
|
||||||
import com.maddyhome.idea.vim.api.ImmutableVimCaret
|
import com.maddyhome.idea.vim.api.ImmutableVimCaret
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
|
||||||
import com.maddyhome.idea.vim.api.VimChangeGroupBase
|
import com.maddyhome.idea.vim.api.VimChangeGroupBase
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.maddyhome.idea.vim.api.VimEditor
|
||||||
import com.maddyhome.idea.vim.api.VimMotionGroupBase
|
import com.maddyhome.idea.vim.api.VimMotionGroupBase
|
||||||
@ -48,7 +47,6 @@ import com.maddyhome.idea.vim.helper.getNormalizedSideScrollOffset
|
|||||||
import com.maddyhome.idea.vim.helper.isEndAllowed
|
import com.maddyhome.idea.vim.helper.isEndAllowed
|
||||||
import com.maddyhome.idea.vim.helper.vimLastColumn
|
import com.maddyhome.idea.vim.helper.vimLastColumn
|
||||||
import com.maddyhome.idea.vim.impl.state.VimStateMachineImpl
|
import com.maddyhome.idea.vim.impl.state.VimStateMachineImpl
|
||||||
import com.maddyhome.idea.vim.listener.AppCodeTemplates
|
|
||||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext
|
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext
|
||||||
import com.maddyhome.idea.vim.newapi.ij
|
import com.maddyhome.idea.vim.newapi.ij
|
||||||
import com.maddyhome.idea.vim.newapi.vim
|
import com.maddyhome.idea.vim.newapi.vim
|
||||||
@ -62,10 +60,6 @@ import kotlin.math.min
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
internal class MotionGroup : VimMotionGroupBase() {
|
internal class MotionGroup : VimMotionGroupBase() {
|
||||||
override fun onAppCodeMovement(editor: VimEditor, caret: VimCaret, offset: Int, oldOffset: Int) {
|
|
||||||
AppCodeTemplates.onMovement(editor.ij, caret.ij, oldOffset < offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun moveCaretToFirstDisplayLine(
|
override fun moveCaretToFirstDisplayLine(
|
||||||
editor: VimEditor,
|
editor: VimEditor,
|
||||||
caret: ImmutableVimCaret,
|
caret: ImmutableVimCaret,
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.maddyhome.idea.vim.listener
|
|
||||||
|
|
||||||
import com.intellij.openapi.actionSystem.ActionManager
|
|
||||||
import com.intellij.openapi.actionSystem.AnAction
|
|
||||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
|
||||||
import com.intellij.openapi.actionSystem.AnActionResult
|
|
||||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
|
||||||
import com.intellij.openapi.actionSystem.IdeActions
|
|
||||||
import com.intellij.openapi.actionSystem.ex.AnActionListener
|
|
||||||
import com.intellij.openapi.editor.Caret
|
|
||||||
import com.intellij.openapi.editor.Editor
|
|
||||||
import com.intellij.openapi.util.Key
|
|
||||||
import com.maddyhome.idea.vim.KeyHandler
|
|
||||||
import com.maddyhome.idea.vim.VimPlugin
|
|
||||||
import com.maddyhome.idea.vim.api.injector
|
|
||||||
import com.maddyhome.idea.vim.group.visual.VimVisualTimer
|
|
||||||
import com.maddyhome.idea.vim.helper.fileSize
|
|
||||||
import com.maddyhome.idea.vim.helper.inVisualMode
|
|
||||||
import com.maddyhome.idea.vim.newapi.vim
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A collection of hacks to improve the interaction with fancy AppCode templates
|
|
||||||
*/
|
|
||||||
internal object AppCodeTemplates {
|
|
||||||
private val facedAppCodeTemplate = Key.create<IntRange>("FacedAppCodeTemplate")
|
|
||||||
|
|
||||||
private const val TEMPLATE_START = "<#T##"
|
|
||||||
private const val TEMPLATE_END = "#>"
|
|
||||||
|
|
||||||
class ActionListener : AnActionListener {
|
|
||||||
|
|
||||||
private var editor: Editor? = null
|
|
||||||
|
|
||||||
override fun beforeActionPerformed(action: AnAction, event: AnActionEvent) {
|
|
||||||
if (VimPlugin.isNotEnabled()) return
|
|
||||||
|
|
||||||
val hostEditor = event.dataContext.getData(CommonDataKeys.HOST_EDITOR)
|
|
||||||
if (hostEditor != null) {
|
|
||||||
editor = hostEditor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun afterActionPerformed(action: AnAction, event: AnActionEvent, result: AnActionResult) {
|
|
||||||
if (VimPlugin.isNotEnabled()) return
|
|
||||||
|
|
||||||
if (ActionManager.getInstance().getId(action) == IdeActions.ACTION_CHOOSE_LOOKUP_ITEM) {
|
|
||||||
val myEditor = editor
|
|
||||||
if (myEditor != null) {
|
|
||||||
VimVisualTimer.doNow()
|
|
||||||
if (myEditor.inVisualMode) {
|
|
||||||
injector.visualMotionGroup.toggleSelectVisual(myEditor.vim)
|
|
||||||
KeyHandler.getInstance().partialReset(myEditor.vim)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@JvmStatic
|
|
||||||
fun onMovement(
|
|
||||||
editor: Editor,
|
|
||||||
caret: Caret,
|
|
||||||
toRight: Boolean,
|
|
||||||
) {
|
|
||||||
val offset = caret.offset
|
|
||||||
val offsetRightEnd = offset + TEMPLATE_START.length
|
|
||||||
val offsetLeftEnd = offset - 1
|
|
||||||
val templateRange = caret.getUserData(facedAppCodeTemplate)
|
|
||||||
if (templateRange == null) {
|
|
||||||
if (offsetRightEnd < editor.fileSize &&
|
|
||||||
editor.document.charsSequence.subSequence(offset, offsetRightEnd).toString() == TEMPLATE_START
|
|
||||||
) {
|
|
||||||
caret.shake()
|
|
||||||
|
|
||||||
val templateEnd = editor.findTemplateEnd(offset) ?: return
|
|
||||||
|
|
||||||
caret.putUserData(facedAppCodeTemplate, offset..templateEnd)
|
|
||||||
}
|
|
||||||
if (offsetLeftEnd >= 0 &&
|
|
||||||
offset + 1 <= editor.fileSize &&
|
|
||||||
editor.document.charsSequence.subSequence(offsetLeftEnd, offset + 1).toString() == TEMPLATE_END
|
|
||||||
) {
|
|
||||||
caret.shake()
|
|
||||||
|
|
||||||
val templateStart = editor.findTemplateStart(offsetLeftEnd) ?: return
|
|
||||||
|
|
||||||
caret.putUserData(facedAppCodeTemplate, templateStart..offset)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (offset in templateRange) {
|
|
||||||
if (toRight) {
|
|
||||||
caret.moveToOffset(templateRange.last + 1)
|
|
||||||
} else {
|
|
||||||
caret.moveToOffset(templateRange.first)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
caret.putUserData(facedAppCodeTemplate, null)
|
|
||||||
caret.shake()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Editor.appCodeTemplateCaptured(): Boolean {
|
|
||||||
return this.caretModel.allCarets.any { it.getUserData(facedAppCodeTemplate) != null }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Caret.shake() {
|
|
||||||
moveCaretRelatively(1, 0, false, false)
|
|
||||||
moveCaretRelatively(-1, 0, false, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Editor.findTemplateEnd(start: Int): Int? {
|
|
||||||
val charSequence = this.document.charsSequence
|
|
||||||
val length = charSequence.length
|
|
||||||
for (i in start until length - 1) {
|
|
||||||
if (charSequence[i] == TEMPLATE_END[0] && charSequence[i + 1] == TEMPLATE_END[1]) {
|
|
||||||
return i + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Editor.findTemplateStart(start: Int): Int? {
|
|
||||||
val charSequence = this.document.charsSequence
|
|
||||||
val templateLastIndex = TEMPLATE_START.length
|
|
||||||
for (i in start downTo templateLastIndex) {
|
|
||||||
if (charSequence.subSequence(i - templateLastIndex, i).toString() == TEMPLATE_START) {
|
|
||||||
return i - templateLastIndex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright 2003-2023 The IdeaVim authors
|
|
||||||
~
|
|
||||||
~ Use of this source code is governed by an MIT-style
|
|
||||||
~ license that can be found in the LICENSE.txt file or at
|
|
||||||
~ https://opensource.org/licenses/MIT.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<idea-plugin>
|
|
||||||
<projectListeners>
|
|
||||||
<listener class="com.maddyhome.idea.vim.listener.AppCodeTemplates$ActionListener"
|
|
||||||
topic="com.intellij.openapi.actionSystem.ex.AnActionListener"/>
|
|
||||||
</projectListeners>
|
|
||||||
</idea-plugin>
|
|
@ -33,8 +33,6 @@
|
|||||||
<depends optional="true" config-file="ides/ideavim-withRider.xml">com.intellij.modules.rider</depends>
|
<depends optional="true" config-file="ides/ideavim-withRider.xml">com.intellij.modules.rider</depends>
|
||||||
<!--suppress PluginXmlValidity -->
|
<!--suppress PluginXmlValidity -->
|
||||||
<depends optional="true" config-file="ides/ideavim-withClionNova.xml">org.jetbrains.plugins.clion.radler</depends>
|
<depends optional="true" config-file="ides/ideavim-withClionNova.xml">org.jetbrains.plugins.clion.radler</depends>
|
||||||
<!--suppress PluginXmlValidity -->
|
|
||||||
<depends optional="true" config-file="ides/ideavim-withAppCode.xml">com.intellij.modules.appcode</depends>
|
|
||||||
<depends optional="true" config-file="ideavim-withAceJump.xml">AceJump</depends>
|
<depends optional="true" config-file="ideavim-withAceJump.xml">AceJump</depends>
|
||||||
<depends optional="true" config-file="features/ideavim-withTerminal.xml">org.jetbrains.plugins.terminal</depends>
|
<depends optional="true" config-file="features/ideavim-withTerminal.xml">org.jetbrains.plugins.terminal</depends>
|
||||||
|
|
||||||
|
@ -116,7 +116,6 @@ per-caret marks.
|
|||||||
editor.exitVisualMode()
|
editor.exitVisualMode()
|
||||||
updatedCaret
|
updatedCaret
|
||||||
}
|
}
|
||||||
injector.motion.onAppCodeMovement(editor, this, offset, oldOffset)
|
|
||||||
return updatedCaret
|
return updatedCaret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,5 +157,4 @@ interface VimMotionGroup {
|
|||||||
// TODO: These aren't caret motions. Should be moved to VimWindowGroup?
|
// TODO: These aren't caret motions. Should be moved to VimWindowGroup?
|
||||||
fun moveCaretGotoNextTab(editor: VimEditor, context: ExecutionContext, rawCount: Int): Int
|
fun moveCaretGotoNextTab(editor: VimEditor, context: ExecutionContext, rawCount: Int): Int
|
||||||
fun moveCaretGotoPreviousTab(editor: VimEditor, context: ExecutionContext, rawCount: Int): Int
|
fun moveCaretGotoPreviousTab(editor: VimEditor, context: ExecutionContext, rawCount: Int): Int
|
||||||
fun onAppCodeMovement(editor: VimEditor, caret: VimCaret, offset: Int, oldOffset: Int)
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user