mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2024-11-25 16:42:55 +01:00
Compare commits
No commits in common. "9dbe3c3363a1bfb6874a4bec9a1ea31ae2122751" and "36370228904528af8b3b14a6adb1187045e958b2" have entirely different histories.
9dbe3c3363
...
3637022890
6
.gitignore
vendored
6
.gitignore
vendored
@ -10,9 +10,9 @@
|
|||||||
!/.idea/runConfigurations
|
!/.idea/runConfigurations
|
||||||
!/.idea/codeStyles
|
!/.idea/codeStyles
|
||||||
|
|
||||||
**/build/
|
/build/
|
||||||
**/out/
|
/out/
|
||||||
**/tmp/
|
/tmp/
|
||||||
|
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
|
|
||||||
|
5
.teamcity/_Self/Constants.kt
vendored
5
.teamcity/_Self/Constants.kt
vendored
@ -5,10 +5,11 @@ object Constants {
|
|||||||
const val EAP_CHANNEL = "eap"
|
const val EAP_CHANNEL = "eap"
|
||||||
const val DEV_CHANNEL = "Dev"
|
const val DEV_CHANNEL = "Dev"
|
||||||
|
|
||||||
const val VERSION = "1.10.3"
|
const val VERSION = "1.9.3"
|
||||||
const val DEV_VERSION = "1.11.0"
|
const val DEV_VERSION = "1.10.0"
|
||||||
|
|
||||||
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
|
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||||
|
const val LINTING_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||||
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
|
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||||
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
|
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||||
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
|
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||||
|
8
.teamcity/_Self/Project.kt
vendored
8
.teamcity/_Self/Project.kt
vendored
@ -9,8 +9,6 @@ import _Self.vcsRoots.Branch_183
|
|||||||
import _Self.vcsRoots.Branch_191_193
|
import _Self.vcsRoots.Branch_191_193
|
||||||
import _Self.vcsRoots.Branch_201
|
import _Self.vcsRoots.Branch_201
|
||||||
import _Self.vcsRoots.Branch_202
|
import _Self.vcsRoots.Branch_202
|
||||||
import _Self.vcsRoots.Branch_203_212
|
|
||||||
import _Self.vcsRoots.Branch_Release
|
|
||||||
import _Self.vcsRoots.GitHubPullRequest
|
import _Self.vcsRoots.GitHubPullRequest
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||||
|
|
||||||
@ -25,12 +23,12 @@ object Project : Project({
|
|||||||
vcsRoot(Branch_191_193)
|
vcsRoot(Branch_191_193)
|
||||||
vcsRoot(Branch_201)
|
vcsRoot(Branch_201)
|
||||||
vcsRoot(Branch_202)
|
vcsRoot(Branch_202)
|
||||||
vcsRoot(Branch_203_212)
|
|
||||||
vcsRoot(Branch_Release)
|
|
||||||
vcsRoot(GitHubPullRequest)
|
vcsRoot(GitHubPullRequest)
|
||||||
|
|
||||||
// Builds
|
// Builds
|
||||||
buildType(TestsForIntelliJ20213)
|
buildType(TestsForIntelliJ20203)
|
||||||
|
buildType(TestsForIntelliJ20211)
|
||||||
|
buildType(TestsForIntelliJ20212)
|
||||||
buildType(TestsForIntelliJEAP)
|
buildType(TestsForIntelliJEAP)
|
||||||
|
|
||||||
buildType(PropertyBased)
|
buildType(PropertyBased)
|
||||||
|
4
.teamcity/_Self/buildTypes/ActiveTests.kt
vendored
4
.teamcity/_Self/buildTypes/ActiveTests.kt
vendored
@ -55,4 +55,6 @@ sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
|
|||||||
})
|
})
|
||||||
|
|
||||||
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
|
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
|
||||||
object TestsForIntelliJ20213 : ActiveTests("Tests for IntelliJ 2021.3", "2021.3.2")
|
object TestsForIntelliJ20212 : ActiveTests("Tests for IntelliJ 2021.2", "2021.2.2")
|
||||||
|
object TestsForIntelliJ20211 : ActiveTests("Tests for IntelliJ 2021.1", "2021.1")
|
||||||
|
object TestsForIntelliJ20203 : ActiveTests("Tests for IntelliJ 2020.3", "2020.3")
|
||||||
|
4
.teamcity/_Self/buildTypes/Qodana.kt
vendored
4
.teamcity/_Self/buildTypes/Qodana.kt
vendored
@ -28,15 +28,11 @@ object Qodana : BuildType({
|
|||||||
steps {
|
steps {
|
||||||
qodana {
|
qodana {
|
||||||
name = "Qodana"
|
name = "Qodana"
|
||||||
/*
|
|
||||||
reportAsTestsEnable = ""
|
reportAsTestsEnable = ""
|
||||||
failBuildOnErrors = ""
|
failBuildOnErrors = ""
|
||||||
codeInspectionXmlConfig = "Custom"
|
codeInspectionXmlConfig = "Custom"
|
||||||
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
|
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
|
||||||
reportAsTestsEnable = "true"
|
reportAsTestsEnable = "true"
|
||||||
*/
|
|
||||||
clearConditions()
|
|
||||||
param("licenseaudit-enable", "true")
|
|
||||||
param("clonefinder-languages", "Java")
|
param("clonefinder-languages", "Java")
|
||||||
param("clonefinder-mode", "")
|
param("clonefinder-mode", "")
|
||||||
param("report-version", "")
|
param("report-version", "")
|
||||||
|
3
.teamcity/_Self/buildTypes/Release.kt
vendored
3
.teamcity/_Self/buildTypes/Release.kt
vendored
@ -5,7 +5,6 @@ import _Self.Constants.DEV_CHANNEL
|
|||||||
import _Self.Constants.EAP_CHANNEL
|
import _Self.Constants.EAP_CHANNEL
|
||||||
import _Self.Constants.RELEASE
|
import _Self.Constants.RELEASE
|
||||||
import _Self.Constants.VERSION
|
import _Self.Constants.VERSION
|
||||||
import _Self.vcsRoots.Branch_Release
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
@ -39,7 +38,7 @@ object Release : BuildType({
|
|||||||
}
|
}
|
||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(Branch_Release)
|
root(DslContext.settingsRoot)
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.AUTO
|
||||||
}
|
}
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
@file:Suppress("ClassName")
|
|
||||||
|
|
||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
||||||
|
|
||||||
sealed class TestsForIntelliJ_203_212_branch(private val version: String) : BuildType({
|
|
||||||
name = "Tests for IntelliJ $version"
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(_Self.vcsRoots.Branch_203_212)
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
gradle {
|
|
||||||
tasks = "clean test"
|
|
||||||
buildFile = ""
|
|
||||||
enableStacktrace = true
|
|
||||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
vcs {
|
|
||||||
branchFilter = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
requirements {
|
|
||||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
|
||||||
}
|
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
failOnMetricChange {
|
|
||||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
|
||||||
threshold = 20
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
object TestsForIntelliJ20212 : TestsForIntelliJ_203_212_branch("2021.2.2")
|
|
||||||
object TestsForIntelliJ20211 : TestsForIntelliJ_203_212_branch("2021.1")
|
|
||||||
object TestsForIntelliJ20203 : TestsForIntelliJ_203_212_branch("2020.3")
|
|
20
.teamcity/_Self/subprojects/OldTests.kt
vendored
20
.teamcity/_Self/subprojects/OldTests.kt
vendored
@ -8,24 +8,18 @@ import _Self.buildTypes.TestsForIntelliJ20192
|
|||||||
import _Self.buildTypes.TestsForIntelliJ20193
|
import _Self.buildTypes.TestsForIntelliJ20193
|
||||||
import _Self.buildTypes.TestsForIntelliJ20201
|
import _Self.buildTypes.TestsForIntelliJ20201
|
||||||
import _Self.buildTypes.TestsForIntelliJ20202
|
import _Self.buildTypes.TestsForIntelliJ20202
|
||||||
import _Self.buildTypes.TestsForIntelliJ20203
|
|
||||||
import _Self.buildTypes.TestsForIntelliJ20211
|
|
||||||
import _Self.buildTypes.TestsForIntelliJ20212
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||||
|
|
||||||
object OldTests : Project({
|
object OldTests : Project({
|
||||||
name = "Old IdeaVim tests"
|
name = "Old IdeaVim tests"
|
||||||
description = "Tests for older versions of IJ"
|
description = "Tests for older versions of IJ"
|
||||||
|
|
||||||
buildType(TestsForIntelliJ20181)
|
|
||||||
buildType(TestsForIntelliJ20182)
|
|
||||||
buildType(TestsForIntelliJ20183)
|
|
||||||
buildType(TestsForIntelliJ20191)
|
|
||||||
buildType(TestsForIntelliJ20192)
|
|
||||||
buildType(TestsForIntelliJ20193)
|
|
||||||
buildType(TestsForIntelliJ20201)
|
|
||||||
buildType(TestsForIntelliJ20202)
|
buildType(TestsForIntelliJ20202)
|
||||||
buildType(TestsForIntelliJ20203)
|
buildType(TestsForIntelliJ20201)
|
||||||
buildType(TestsForIntelliJ20211)
|
buildType(TestsForIntelliJ20191)
|
||||||
buildType(TestsForIntelliJ20212)
|
buildType(TestsForIntelliJ20181)
|
||||||
|
buildType(TestsForIntelliJ20192)
|
||||||
|
buildType(TestsForIntelliJ20182)
|
||||||
|
buildType(TestsForIntelliJ20193)
|
||||||
|
buildType(TestsForIntelliJ20183)
|
||||||
})
|
})
|
||||||
|
12
.teamcity/_Self/vcsRoots/Branch_203_212.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_203_212.kt
vendored
@ -1,12 +0,0 @@
|
|||||||
@file:Suppress("ClassName")
|
|
||||||
|
|
||||||
package _Self.vcsRoots
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
|
||||||
|
|
||||||
object Branch_203_212 : GitVcsRoot({
|
|
||||||
name = "https://github.com/JetBrains/ideavim (branch 203-212)"
|
|
||||||
url = "https://github.com/JetBrains/ideavim.git"
|
|
||||||
branch = "203-212"
|
|
||||||
useMirrors = false
|
|
||||||
})
|
|
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
@ -1,11 +0,0 @@
|
|||||||
@file:Suppress("ClassName")
|
|
||||||
|
|
||||||
package _Self.vcsRoots
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
|
||||||
|
|
||||||
object Branch_Release : GitVcsRoot({
|
|
||||||
name = "https://github.com/JetBrains/ideavim (branch release)"
|
|
||||||
url = "https://github.com/JetBrains/ideavim.git"
|
|
||||||
branch = "release"
|
|
||||||
})
|
|
25
.teamcity/patches/buildTypes/Nvim.kts
vendored
25
.teamcity/patches/buildTypes/Nvim.kts
vendored
@ -1,25 +0,0 @@
|
|||||||
package patches.buildTypes
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
|
||||||
|
|
||||||
/*
|
|
||||||
This patch script was generated by TeamCity on settings change in UI.
|
|
||||||
To apply the patch, change the buildType with id = 'Nvim'
|
|
||||||
accordingly, and delete the patch script.
|
|
||||||
*/
|
|
||||||
changeBuildType(RelativeId("Nvim")) {
|
|
||||||
triggers {
|
|
||||||
val trigger1 = find<VcsTrigger> {
|
|
||||||
vcs {
|
|
||||||
branchFilter = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigger1.apply {
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
25
.teamcity/patches/buildTypes/PluginVerifier.kts
vendored
25
.teamcity/patches/buildTypes/PluginVerifier.kts
vendored
@ -1,25 +0,0 @@
|
|||||||
package patches.buildTypes
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
|
||||||
|
|
||||||
/*
|
|
||||||
This patch script was generated by TeamCity on settings change in UI.
|
|
||||||
To apply the patch, change the buildType with id = 'PluginVerifier'
|
|
||||||
accordingly, and delete the patch script.
|
|
||||||
*/
|
|
||||||
changeBuildType(RelativeId("PluginVerifier")) {
|
|
||||||
triggers {
|
|
||||||
val trigger1 = find<VcsTrigger> {
|
|
||||||
vcs {
|
|
||||||
branchFilter = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigger1.apply {
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
32
.teamcity/patches/buildTypes/Qodana.kts
vendored
32
.teamcity/patches/buildTypes/Qodana.kts
vendored
@ -3,8 +3,6 @@ package patches.buildTypes
|
|||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -16,18 +14,16 @@ changeBuildType(RelativeId("Qodana")) {
|
|||||||
expectSteps {
|
expectSteps {
|
||||||
qodana {
|
qodana {
|
||||||
name = "Qodana"
|
name = "Qodana"
|
||||||
reportAsTests = true
|
reportAsTestsEnable = "true"
|
||||||
inspectionProfile = customProfile {
|
failBuildOnErrors = ""
|
||||||
path = ".idea/inspectionProfiles/Qodana.xml"
|
codeInspectionXmlConfig = "Custom"
|
||||||
}
|
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
|
||||||
param("clonefinder-enable", "true")
|
param("clonefinder-enable", "true")
|
||||||
param("clonefinder-languages", "Java")
|
param("clonefinder-languages", "Java")
|
||||||
param("clonefinder-languages-container", "Java Kotlin")
|
param("clonefinder-languages-container", "Java Kotlin")
|
||||||
param("clonefinder-mode", "")
|
param("clonefinder-mode", "")
|
||||||
param("clonefinder-queried-project", "src")
|
param("clonefinder-queried-project", "src")
|
||||||
param("clonefinder-reference-projects", "src")
|
param("clonefinder-reference-projects", "src")
|
||||||
param("fail-build-on-errors", "")
|
|
||||||
param("licenseaudit-enable", "true")
|
|
||||||
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
||||||
param("report-version", "")
|
param("report-version", "")
|
||||||
param("yaml-configuration", "")
|
param("yaml-configuration", "")
|
||||||
@ -36,25 +32,7 @@ changeBuildType(RelativeId("Qodana")) {
|
|||||||
steps {
|
steps {
|
||||||
update<Qodana>(0) {
|
update<Qodana>(0) {
|
||||||
clearConditions()
|
clearConditions()
|
||||||
linter = jvm {
|
param("licenseaudit-enable", "true")
|
||||||
version = Qodana.JVMVersion.LATEST
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
val trigger1 = find<ScheduleTrigger> {
|
|
||||||
schedule {
|
|
||||||
schedulingPolicy = weekly {
|
|
||||||
dayOfWeek = ScheduleTrigger.DAY.Tuesday
|
|
||||||
}
|
|
||||||
branchFilter = ""
|
|
||||||
triggerBuild = always()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigger1.apply {
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
.teamcity/patches/buildTypes/Release.kts
vendored
Normal file
16
.teamcity/patches/buildTypes/Release.kts
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package patches.buildTypes
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
This patch script was generated by TeamCity on settings change in UI.
|
||||||
|
To apply the patch, change the buildType with id = 'Release'
|
||||||
|
accordingly, and delete the patch script.
|
||||||
|
*/
|
||||||
|
changeBuildType(RelativeId("Release")) {
|
||||||
|
vcs {
|
||||||
|
remove(DslContext.settingsRoot.id!!)
|
||||||
|
add(RelativeId("Branch_Release"))
|
||||||
|
}
|
||||||
|
}
|
18
.teamcity/patches/vcsRoots/Branch_Release.kts
vendored
Normal file
18
.teamcity/patches/vcsRoots/Branch_Release.kts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package patches.vcsRoots
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||||
|
|
||||||
|
/*
|
||||||
|
This patch script was generated by TeamCity on settings change in UI.
|
||||||
|
To apply the patch, create a vcsRoot with id = 'Branch_Release'
|
||||||
|
in the root project, and delete the patch script.
|
||||||
|
*/
|
||||||
|
create(DslContext.projectId, GitVcsRoot({
|
||||||
|
id("Branch_Release")
|
||||||
|
name = "https://github.com/JetBrains/ideavim (branch release)"
|
||||||
|
url = "https://github.com/JetBrains/ideavim.git"
|
||||||
|
branch = "release"
|
||||||
|
}))
|
||||||
|
|
36
AUTHORS.md
36
AUTHORS.md
@ -380,42 +380,6 @@ Contributors:
|
|||||||
[![icon][github]](https://github.com/chylex)
|
[![icon][github]](https://github.com/chylex)
|
||||||
|
|
||||||
chylex
|
chylex
|
||||||
* [![icon][mail]](mailto:daniel.egger@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/DanEEStar)
|
|
||||||
|
|
||||||
DanEEStar
|
|
||||||
* [![icon][mail]](mailto:ksrbkevinsuen@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/ksrb)
|
|
||||||
|
|
||||||
Kevin Suen
|
|
||||||
* [![icon][mail]](mailto:michael.schertenleib@inftec.ch)
|
|
||||||
[![icon][github]](https://github.com/cravay)
|
|
||||||
|
|
||||||
Michael Schertenleib
|
|
||||||
* [![icon][mail]](mailto:piotr@near.org)
|
|
||||||
[![icon][github]](https://github.com/pmnoxx)
|
|
||||||
|
|
||||||
Piotr Mikulski
|
|
||||||
* [![icon][mail]](mailto:lonrevip@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/lonre)
|
|
||||||
|
|
||||||
Lonre Wang
|
|
||||||
* [![icon][mail]](mailto:AlexPl292@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/AlexPl292)
|
|
||||||
|
|
||||||
Alex Pláte
|
|
||||||
* [![icon][mail]](mailto:david@dadon.fr)
|
|
||||||
[![icon][github]](https://github.com/ddadon10)
|
|
||||||
|
|
||||||
David Dadon
|
|
||||||
* [![icon][mail]](mailto:hollandpirates@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/PHPirates)
|
|
||||||
|
|
||||||
Thomas Schouten
|
|
||||||
* [![icon][mail]](mailto:sr@mail25.de)
|
|
||||||
[![icon][github]](https://github.com/Vvalter)
|
|
||||||
|
|
||||||
Simon Rainer
|
|
||||||
|
|
||||||
If you are a contributor and your name is not listed here, feel free to
|
If you are a contributor and your name is not listed here, feel free to
|
||||||
contact the maintainers.
|
contact the maintainers.
|
||||||
|
62
CHANGES.md
62
CHANGES.md
@ -26,70 +26,14 @@ usual beta standards.
|
|||||||
## To Be Released
|
## To Be Released
|
||||||
|
|
||||||
### Features:
|
### Features:
|
||||||
* Add `gcu` command for Commentary plugin
|
* Add register support to let command | [VIM-749](https://youtrack.jetbrains.com/issue/VIM-749)
|
||||||
* Add `:Commentary` command, which works great for commands such as `:%g/fun/Commentary`
|
* Add register support to let command | [VIM-1783](https://youtrack.jetbrains.com/issue/VIM-1783)
|
||||||
* Support `gc` – commentary text objects. E.g. `dgc`: delete commented text.
|
* Add `trackactionids`/`tai` option to track action ids
|
||||||
* Support `redo-register feature` | [VIM-2643](https://youtrack.jetbrains.com/issue/VIM-2643/Dot-operator-doesn-t-increment-number-register-after-pasting-fro) | [viminfo](http://vimdoc.sourceforge.net/htmldoc/undo.html#redo-register)
|
|
||||||
|
|
||||||
### Changes:
|
|
||||||
* Uses the same mappings as Commentary, so custom bindings for the Vim plugin will work with IdeaVim, too.
|
|
||||||
E.g. `<Plug>Commentary` instead of `<Plug>(CommentMotion)`. Old mappings are maintained for compatibility.
|
|
||||||
* If you open `~/.ideavimrc` in IDE, remove a mapping, and reload the config using the reload button,
|
|
||||||
the mapping will actually be unmapped.
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2587](https://youtrack.jetbrains.com/issue/VIM-2587) Use ctrl-6 as ctrl-^
|
|
||||||
* [VIM-2590](https://youtrack.jetbrains.com/issue/VIM-2590) Fix caret shape in PyCharm
|
|
||||||
* [VIM-2553](https://youtrack.jetbrains.com/issue/VIM-2553) Substitute consecutive matches
|
|
||||||
* [VIM-1687](https://youtrack.jetbrains.com/issue/VIM-1687) Support count for `gcc`
|
|
||||||
* [VIM-2381](https://youtrack.jetbrains.com/issue/VIM-2381) Fall back to line comment if block comment is not available
|
|
||||||
* [VIM-2589](https://youtrack.jetbrains.com/issue/VIM-2589) Add `gc` text object
|
|
||||||
* [VIM-2604](https://youtrack.jetbrains.com/issue/VIM-2604) Update action execution rules
|
|
||||||
* [VIM-2654](https://youtrack.jetbrains.com/issue/VIM-2654) Add support for `return` without expression
|
|
||||||
* [VIM-2630](https://youtrack.jetbrains.com/issue/VIM-2630/Please-fix-warning-Shall-not-be-called-on-a-template-presentatio) Fix IDE freeze
|
|
||||||
* [VIM-2661](https://youtrack.jetbrains.com/issue/VIM-2661/Spamming-does-not-work) Fix repeating the `@@` command
|
|
||||||
* [VIM-2668](https://youtrack.jetbrains.com/issue/VIM-2668/tabm-or-tabm-with-no-number-does-not-match-vim-behavior) Fix omitted numbers in `tabm` command
|
|
||||||
* [VIM-2595](https://youtrack.jetbrains.com/issue/VIM-2595) Support plugins in macro execution
|
|
||||||
* [VIM-2671](https://youtrack.jetbrains.com/issue/VIM-2671) Fix using plugins from mappings
|
|
||||||
* [VIM-2675](https://youtrack.jetbrains.com/issue/VIM-2675) Fix numbering register in visual mode
|
|
||||||
* [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696/vim-selection-issue-after-undo) Fix selection after undo
|
|
||||||
* [VIM-744](https://youtrack.jetbrains.com/issue/VIM-744/Use-undoredo-with-count-modifier) Add count to undo/redo
|
|
||||||
* [VIM-1862](https://youtrack.jetbrains.com/issue/VIM-1862/Ex-commands-executed-in-keymaps-and-macros-are-added-to-the-command-history) Fix command history
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [468](https://github.com/JetBrains/ideavim/pull/468) by [Thomas Schouten](https://github.com/PHPirates): Implement UserDataHolder for EditorDataContext
|
|
||||||
* [483](https://github.com/JetBrains/ideavim/pull/483) by [Simon Rainer](https://github.com/Vvalter): Fix(VIM-2553): Substitute consecutive matches
|
|
||||||
* [488](https://github.com/JetBrains/ideavim/pull/488) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for the C family of languages
|
|
||||||
* [493](https://github.com/JetBrains/ideavim/pull/493) by [Matt Ellis](https://github.com/citizenmatt): Improvements to Commentary extension
|
|
||||||
* [494](https://github.com/JetBrains/ideavim/pull/494) by [Matt Ellis](https://github.com/citizenmatt): Cleanup pre-212 CaretVisualAttributes compatibility code
|
|
||||||
* [504](https://github.com/JetBrains/ideavim/pull/504) by [Matt Ellis](https://github.com/citizenmatt): Minor bug fixes
|
|
||||||
|
|
||||||
## 1.10.0, 2022-02-17
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Add register support to let command | [VIM-749](https://youtrack.jetbrains.com/issue/VIM-749), [VIM-1783](https://youtrack.jetbrains.com/issue/VIM-1783)
|
|
||||||
* Add tabmove command | [VIM-1164](https://youtrack.jetbrains.com/issue/VIM-1164)
|
|
||||||
|
|
||||||
### Fixes:
|
### Fixes:
|
||||||
* [VIM-2502](https://youtrack.jetbrains.com/issue/VIM-2502) Fix the shape of new carets
|
* [VIM-2502](https://youtrack.jetbrains.com/issue/VIM-2502) Fix the shape of new carets
|
||||||
* [VIM-2499](https://youtrack.jetbrains.com/issue/VIM-2499) Fix mapping to esc
|
* [VIM-2499](https://youtrack.jetbrains.com/issue/VIM-2499) Fix mapping to esc
|
||||||
* [VIM-2500](https://youtrack.jetbrains.com/issue/VIM-2500) Fix esc for normal mode
|
* [VIM-2500](https://youtrack.jetbrains.com/issue/VIM-2500) Fix esc for normal mode
|
||||||
* [VIM-2523](https://youtrack.jetbrains.com/issue/VIM-2523) `i` command for the folder in the project tree
|
|
||||||
* [VIM-2471](https://youtrack.jetbrains.com/issue/VIM-2471) Multiple [{ and ]} actions
|
|
||||||
* [VIM-2504](https://youtrack.jetbrains.com/issue/VIM-2504) Fix esc with using python notebooks
|
|
||||||
* [VIM-2540](https://youtrack.jetbrains.com/issue/VIM-2540) Fix option listeners
|
|
||||||
* [VIM-2548](https://youtrack.jetbrains.com/issue/VIM-2548) Fix paste
|
|
||||||
* [VIM-2470](https://youtrack.jetbrains.com/issue/VIM-2470) Fix incorrect reset of cursor shape
|
|
||||||
* [VIM-2223](https://youtrack.jetbrains.com/issue/VIM-2223), [VIM-1684](https://youtrack.jetbrains.com/issue/VIM-1684), [VIM-2491](https://youtrack.jetbrains.com/issue/VIM-2491) Fix `gv`
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [441](https://github.com/JetBrains/ideavim/pull/441) by [DanEEStar](https://github.com/DanEEStar): Add Matchit support for Vue.js files
|
|
||||||
* [440](https://github.com/JetBrains/ideavim/pull/440) by [Kevin Suen](https://github.com/ksrb): Add matchit support for handlebars
|
|
||||||
* [448](https://github.com/JetBrains/ideavim/pull/448) by [Michael Schertenleib](https://github.com/cravay): Support custom element names in vim-surround
|
|
||||||
* [435](https://github.com/JetBrains/ideavim/pull/435) by [Piotr Mikulski](https://github.com/pmnoxx): Print stderr when running a command just like vim does
|
|
||||||
* [449](https://github.com/JetBrains/ideavim/pull/449) by [Lonre Wang](https://github.com/lonre): Typo fix
|
|
||||||
* [453](https://github.com/JetBrains/ideavim/pull/453) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2470): Fix incorrect reset of cursor shape
|
|
||||||
* [461](https://github.com/JetBrains/ideavim/pull/461) by [David Dadon](https://github.com/ddadon10): Add shortcut to ideajoin example
|
|
||||||
|
|
||||||
## 1.9.0, 2021-12-10
|
## 1.9.0, 2021-12-10
|
||||||
|
|
||||||
|
@ -4,9 +4,6 @@ IdeaVim is an open source project created by 80+ contributors. Would you like to
|
|||||||
|
|
||||||
This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
|
This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
|
||||||
|
|
||||||
:warning: The plugin is currently under a huge refactoring aiming to split into vim-engine and IdeaVim in order to
|
|
||||||
support the new [Fleet IDE](https://www.jetbrains.com/fleet/).
|
|
||||||
|
|
||||||
## Before you begin
|
## Before you begin
|
||||||
|
|
||||||
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
|
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
|
||||||
@ -74,7 +71,7 @@ If you are looking for:
|
|||||||
|
|
||||||
- Common features:
|
- Common features:
|
||||||
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
|
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
|
||||||
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionServiceImpl`.
|
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionsManager`.
|
||||||
- Plugin startup: `PluginStartup`.
|
- Plugin startup: `PluginStartup`.
|
||||||
- Notifications: `NotificationService`.
|
- Notifications: `NotificationService`.
|
||||||
- Status bar icon: `StatusBar.kt`.
|
- Status bar icon: `StatusBar.kt`.
|
||||||
|
@ -212,7 +212,6 @@ Ex commands or via `:map` command mappings:
|
|||||||
### Executing actions:
|
### Executing actions:
|
||||||
* `:action {action_id}`
|
* `:action {action_id}`
|
||||||
* Execute an action by `{action_id}`. Works from Ex command line.
|
* Execute an action by `{action_id}`. Works from Ex command line.
|
||||||
* Please don't use `:action` in mappings. Use `<Action>` instead.
|
|
||||||
* `<Action>({action_id})`
|
* `<Action>({action_id})`
|
||||||
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
|
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
|
||||||
* E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
|
* E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
|
||||||
|
@ -11,24 +11,24 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21")
|
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10")
|
||||||
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
|
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
|
||||||
classpath("org.eclipse.jgit:org.eclipse.jgit:6.1.0.202203080745-r")
|
classpath("org.eclipse.jgit:org.eclipse.jgit:5.13.0.202109080827-r")
|
||||||
classpath("org.kohsuke:github-api:1.305")
|
classpath("org.kohsuke:github-api:1.301")
|
||||||
classpath("org.jetbrains:markdown:0.3.1")
|
classpath("org.jetbrains:markdown:0.2.4")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
antlr
|
antlr
|
||||||
java
|
java
|
||||||
kotlin("jvm") version "1.6.21"
|
kotlin("jvm") version "1.5.10"
|
||||||
|
|
||||||
id("org.jetbrains.intellij") version "1.6.0"
|
id("org.jetbrains.intellij") version "1.3.0"
|
||||||
id("org.jetbrains.changelog") version "1.3.1"
|
id("org.jetbrains.changelog") version "1.3.1"
|
||||||
|
|
||||||
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
|
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
|
||||||
id("org.jlleitschuh.gradle.ktlint") version "10.2.1"
|
id("org.jlleitschuh.gradle.ktlint") version "10.2.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Import variables from gradle.properties file
|
// Import variables from gradle.properties file
|
||||||
@ -38,7 +38,6 @@ val ideaVersion: String by project
|
|||||||
val downloadIdeaSources: String by project
|
val downloadIdeaSources: String by project
|
||||||
val instrumentPluginCode: String by project
|
val instrumentPluginCode: String by project
|
||||||
val remoteRobotVersion: String by project
|
val remoteRobotVersion: String by project
|
||||||
val antlrVersion: String by project
|
|
||||||
|
|
||||||
val publishChannels: String by project
|
val publishChannels: String by project
|
||||||
val publishToken: String by project
|
val publishToken: String by project
|
||||||
@ -58,19 +57,11 @@ dependencies {
|
|||||||
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
|
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
|
||||||
testImplementation("com.ensarsarajcic.neovim.java:core-rpc:0.2.3")
|
testImplementation("com.ensarsarajcic.neovim.java:core-rpc:0.2.3")
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-test
|
|
||||||
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
|
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin
|
|
||||||
testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0")
|
|
||||||
|
|
||||||
testImplementation("com.intellij.remoterobot:remote-robot:$remoteRobotVersion")
|
testImplementation("com.intellij.remoterobot:remote-robot:$remoteRobotVersion")
|
||||||
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
|
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
|
||||||
testImplementation("com.automation-remarks:video-recorder-junit:2.0")
|
testImplementation("com.automation-remarks:video-recorder-junit:2.0")
|
||||||
runtimeOnly("org.antlr:antlr4-runtime:$antlrVersion")
|
runtimeOnly("org.antlr:antlr4-runtime:4.9.3")
|
||||||
antlr("org.antlr:antlr4:$antlrVersion")
|
antlr("org.antlr:antlr4:4.9.3")
|
||||||
|
|
||||||
implementation(project(":vim-engine"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
@ -80,22 +71,6 @@ configurations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --- Compilation
|
// --- Compilation
|
||||||
// This can be moved to other test registration when issue with tests in gradle will be fixed
|
|
||||||
tasks.register<Test>("testWithNeovim") {
|
|
||||||
group = "verification"
|
|
||||||
systemProperty("ideavim.nvim.test", "true")
|
|
||||||
exclude("/ui/**")
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register<Test>("testPropertyBased") {
|
|
||||||
group = "verification"
|
|
||||||
// include("**/propertybased/**")
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register<Test>("testLongRunning") {
|
|
||||||
group = "verification"
|
|
||||||
// include("**/longrunning/**")
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
// Issue in gradle 7.3
|
// Issue in gradle 7.3
|
||||||
@ -108,32 +83,6 @@ tasks {
|
|||||||
exclude("**/ParserTest.class")
|
exclude("**/ParserTest.class")
|
||||||
}
|
}
|
||||||
|
|
||||||
val testWithNeovim by getting(Test::class) {
|
|
||||||
isScanForTestClasses = false
|
|
||||||
// Only run tests from classes that end with "Test"
|
|
||||||
include("**/*Test.class")
|
|
||||||
include("**/*test.class")
|
|
||||||
include("**/*Tests.class")
|
|
||||||
exclude("**/ParserTest.class")
|
|
||||||
}
|
|
||||||
|
|
||||||
val testPropertyBased by getting(Test::class) {
|
|
||||||
isScanForTestClasses = false
|
|
||||||
// Only run tests from classes that end with "Test"
|
|
||||||
include("**/propertybased/*Test.class")
|
|
||||||
include("**/propertybased/*test.class")
|
|
||||||
include("**/propertybased/*Tests.class")
|
|
||||||
}
|
|
||||||
|
|
||||||
val testLongRunning by getting(Test::class) {
|
|
||||||
isScanForTestClasses = false
|
|
||||||
// Only run tests from classes that end with "Test"
|
|
||||||
include("**/longrunning/**/*Test.class")
|
|
||||||
include("**/longrunning/**/*test.class")
|
|
||||||
include("**/longrunning/**/*Tests.class")
|
|
||||||
exclude("**/longrunning/**/ParserTest.class")
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava {
|
compileJava {
|
||||||
sourceCompatibility = javaVersion
|
sourceCompatibility = javaVersion
|
||||||
targetCompatibility = javaVersion
|
targetCompatibility = javaVersion
|
||||||
@ -144,14 +93,14 @@ tasks {
|
|||||||
compileKotlin {
|
compileKotlin {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = javaVersion
|
jvmTarget = javaVersion
|
||||||
apiVersion = "1.5"
|
apiVersion = "1.4"
|
||||||
// allWarningsAsErrors = true
|
// allWarningsAsErrors = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
compileTestKotlin {
|
compileTestKotlin {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = javaVersion
|
jvmTarget = javaVersion
|
||||||
apiVersion = "1.5"
|
apiVersion = "1.4"
|
||||||
// allWarningsAsErrors = true
|
// allWarningsAsErrors = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,14 +118,11 @@ gradle.projectsEvaluated {
|
|||||||
intellij {
|
intellij {
|
||||||
version.set(ideaVersion)
|
version.set(ideaVersion)
|
||||||
pluginName.set("IdeaVim")
|
pluginName.set("IdeaVim")
|
||||||
|
|
||||||
updateSinceUntilBuild.set(false)
|
updateSinceUntilBuild.set(false)
|
||||||
|
|
||||||
downloadSources.set(downloadIdeaSources.toBoolean())
|
downloadSources.set(downloadIdeaSources.toBoolean())
|
||||||
instrumentCode.set(instrumentPluginCode.toBoolean())
|
instrumentCode.set(instrumentPluginCode.toBoolean())
|
||||||
intellijRepository.set("https://www.jetbrains.com/intellij-repository")
|
intellijRepository.set("https://www.jetbrains.com/intellij-repository")
|
||||||
// Yaml is only used for testing. It's part of the IdeaIC distribution, but needs to be included as a reference
|
plugins.set(listOf("java", "AceJump:3.8.4"))
|
||||||
plugins.set(listOf("java", "AceJump:3.8.4", "yaml"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
@ -199,7 +145,6 @@ tasks {
|
|||||||
runPluginVerifier {
|
runPluginVerifier {
|
||||||
downloadDir.set("${project.buildDir}/pluginVerifier/ides")
|
downloadDir.set("${project.buildDir}/pluginVerifier/ides")
|
||||||
teamCityOutputFormat.set(true)
|
teamCityOutputFormat.set(true)
|
||||||
ideVersions.set(listOf("IC-2021.3.4"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
generateGrammarSource {
|
generateGrammarSource {
|
||||||
@ -229,6 +174,22 @@ tasks {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.register<Test>("testWithNeovim") {
|
||||||
|
group = "verification"
|
||||||
|
systemProperty("ideavim.nvim.test", "true")
|
||||||
|
exclude("/ui/**")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register<Test>("testPropertyBased") {
|
||||||
|
group = "verification"
|
||||||
|
include("**/propertybased/**")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register<Test>("testLongRunning") {
|
||||||
|
group = "verification"
|
||||||
|
include("**/longrunning/**")
|
||||||
|
}
|
||||||
|
|
||||||
tasks.register<Test>("testUi") {
|
tasks.register<Test>("testUi") {
|
||||||
group = "verification"
|
group = "verification"
|
||||||
include("/ui/**")
|
include("/ui/**")
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
Some examples of join command with `ideajoin` option enabled.
|
Some examples of join command with `ideajoin` option enabled.
|
||||||
Put `set ideajoin` to your `~/.ideavimrc` to enable this functionality.
|
Put `set ideajoin` to your `~/.ideavimrc` to enable this functionality.
|
||||||
|
|
||||||
Now, you can press `J` (`shift+j`) on a line or a selected block of text to join the lines together.
|
|
||||||
|
|
||||||
* Automatic join concatenated lines:
|
* Automatic join concatenated lines:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -6,10 +6,9 @@ instrumentPluginCode=true
|
|||||||
version=SNAPSHOT
|
version=SNAPSHOT
|
||||||
javaVersion=11
|
javaVersion=11
|
||||||
remoteRobotVersion=0.11.10
|
remoteRobotVersion=0.11.10
|
||||||
antlrVersion=4.10.1
|
|
||||||
|
|
||||||
# Please don't forget to update kotlin version in buildscript section
|
# Please don't forget to update kotlin version in buildscript section
|
||||||
kotlinVersion=1.6.21
|
kotlinVersion=1.5.10
|
||||||
publishToken=token
|
publishToken=token
|
||||||
publishChannels=eap
|
publishChannels=eap
|
||||||
|
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
rootProject.name = 'IdeaVIM'
|
/*
|
||||||
include 'vim-engine'
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
rootProject.name = 'IdeaVIM'
|
||||||
|
@ -28,7 +28,7 @@ comment: (WS | COLON)* QUOTE ~(NEW_LINE)* NEW_LINE;
|
|||||||
finishStatement: (WS | COLON)* FINISH WS* (NEW_LINE | BAR);
|
finishStatement: (WS | COLON)* FINISH WS* (NEW_LINE | BAR);
|
||||||
continueStatement: (WS | COLON)* CONTINUE WS* (NEW_LINE | BAR);
|
continueStatement: (WS | COLON)* CONTINUE WS* (NEW_LINE | BAR);
|
||||||
breakStatement: (WS | COLON)* BREAK WS* (NEW_LINE | BAR);
|
breakStatement: (WS | COLON)* BREAK WS* (NEW_LINE | BAR);
|
||||||
returnStatement: (WS | COLON)* range? (WS | COLON)* RETURN (WS+ expr)? WS* (NEW_LINE | BAR);
|
returnStatement: (WS | COLON)* range? (WS | COLON)* RETURN WS+ expr WS* (NEW_LINE | BAR);
|
||||||
throwStatement: (WS | COLON)* THROW WS+ expr WS* (NEW_LINE | BAR);
|
throwStatement: (WS | COLON)* THROW WS+ expr WS* (NEW_LINE | BAR);
|
||||||
|
|
||||||
ifStatement: ifBlock
|
ifStatement: ifBlock
|
||||||
@ -117,7 +117,7 @@ command:
|
|||||||
| MARK_COMMAND | JUMPS | J_LOWERCASE | JOIN_LINES | HISTORY | GO_TO_CHAR | SYMBOL | FIND | CLASS | F_LOWERCASE
|
| MARK_COMMAND | JUMPS | J_LOWERCASE | JOIN_LINES | HISTORY | GO_TO_CHAR | SYMBOL | FIND | CLASS | F_LOWERCASE
|
||||||
| FILE | EXIT | E_LOWERCASE | EDIT_FILE | DUMP_LINE | DIGRAPH | DEL_MARKS | D_LOWERCASE | DEL_LINES | DELCMD
|
| FILE | EXIT | E_LOWERCASE | EDIT_FILE | DUMP_LINE | DIGRAPH | DEL_MARKS | D_LOWERCASE | DEL_LINES | DELCMD
|
||||||
| T_LOWERCASE | COPY | CMD_CLEAR | BUFFER_LIST | BUFFER_CLOSE | B_LOWERCASE | BUFFER | ASCII
|
| T_LOWERCASE | COPY | CMD_CLEAR | BUFFER_LIST | BUFFER_CLOSE | B_LOWERCASE | BUFFER | ASCII
|
||||||
| ACTIONLIST | ACTION | LOCKVAR | UNLOCKVAR | PACKADD | TABMOVE
|
| ACTIONLIST | ACTION | LOCKVAR | UNLOCKVAR | PACKADD
|
||||||
)
|
)
|
||||||
WS* ((commandArgumentWithoutBars? inline_comment NEW_LINE) | (commandArgumentWithoutBars? NEW_LINE) | (commandArgumentWithoutBars? BAR)) (NEW_LINE | BAR)*
|
WS* ((commandArgumentWithoutBars? inline_comment NEW_LINE) | (commandArgumentWithoutBars? NEW_LINE) | (commandArgumentWithoutBars? BAR)) (NEW_LINE | BAR)*
|
||||||
#CommandWithComment|
|
#CommandWithComment|
|
||||||
@ -492,7 +492,6 @@ existingCommands: RETURN
|
|||||||
| EXECUTE
|
| EXECUTE
|
||||||
| CALL
|
| CALL
|
||||||
| NORMAL
|
| NORMAL
|
||||||
| TABMOVE
|
|
||||||
;
|
;
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
@ -685,7 +684,6 @@ EXECUTE: 'exe' | 'exec' | 'execu' | 'execut' | 'execute';
|
|||||||
LOCKVAR: 'lockv' | 'lockva' | 'lockvar';
|
LOCKVAR: 'lockv' | 'lockva' | 'lockvar';
|
||||||
UNLOCKVAR: 'unlo' | 'unloc' | 'unlock' | 'unlockv' | 'unlockva' | 'unlockvar';
|
UNLOCKVAR: 'unlo' | 'unloc' | 'unlock' | 'unlockv' | 'unlockva' | 'unlockvar';
|
||||||
NORMAL: 'norm' | 'norma' | 'normal';
|
NORMAL: 'norm' | 'norma' | 'normal';
|
||||||
TABMOVE: 'tabm' | 'tabmo' | 'tabmov' | 'tabmove';
|
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
DIGIT: [0-9];
|
DIGIT: [0-9];
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -53,7 +53,7 @@ public class EventFacade {
|
|||||||
public void setupTypedActionHandler(@NotNull VimTypedActionHandler handler) {
|
public void setupTypedActionHandler(@NotNull VimTypedActionHandler handler) {
|
||||||
final TypedAction typedAction = getTypedAction();
|
final TypedAction typedAction = getTypedAction();
|
||||||
|
|
||||||
if (HandlerInjector.notebookCommandMode(null)) {
|
if (HandlerInjector.notebookCommandMode()) {
|
||||||
TypedActionHandler result = HandlerInjector.inject();
|
TypedActionHandler result = HandlerInjector.inject();
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
myOriginalTypedActionHandler = result;
|
myOriginalTypedActionHandler = result;
|
||||||
|
1107
src/main/java/com/maddyhome/idea/vim/KeyHandler.java
Normal file
1107
src/main/java/com/maddyhome/idea/vim/KeyHandler.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -22,7 +22,6 @@ import com.maddyhome.idea.vim.group.KeyGroup;
|
|||||||
import com.maddyhome.idea.vim.handler.ActionBeanClass;
|
import com.maddyhome.idea.vim.handler.ActionBeanClass;
|
||||||
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase;
|
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase;
|
||||||
import com.maddyhome.idea.vim.key.MappingOwner;
|
import com.maddyhome.idea.vim.key.MappingOwner;
|
||||||
import com.maddyhome.idea.vim.newapi.IjVimActionsInitiator;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -72,7 +71,7 @@ public class RegisterActions {
|
|||||||
|
|
||||||
private static void registerVimCommandActions() {
|
private static void registerVimCommandActions() {
|
||||||
KeyGroup parser = VimPlugin.getKey();
|
KeyGroup parser = VimPlugin.getKey();
|
||||||
VIM_ACTIONS_EP.extensions().map(IjVimActionsInitiator::new).forEach(parser::registerCommandAction);
|
VIM_ACTIONS_EP.extensions().forEach(parser::registerCommandAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void registerEmptyShortcuts() {
|
private static void registerEmptyShortcuts() {
|
||||||
@ -81,6 +80,6 @@ public class RegisterActions {
|
|||||||
// The {char1} <BS> {char2} shortcut is handled directly by KeyHandler#handleKey, so doesn't have an action. But we
|
// The {char1} <BS> {char2} shortcut is handled directly by KeyHandler#handleKey, so doesn't have an action. But we
|
||||||
// still need to register the shortcut, to make sure the editor doesn't swallow it.
|
// still need to register the shortcut, to make sure the editor doesn't swallow it.
|
||||||
parser
|
parser
|
||||||
.registerShortcutWithoutAction(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), MappingOwner.IdeaVim.System.INSTANCE);
|
.registerShortcutWithoutAction(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), MappingOwner.IdeaVim.INSTANCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -25,6 +25,7 @@ import com.intellij.openapi.Disposable;
|
|||||||
import com.intellij.openapi.application.Application;
|
import com.intellij.openapi.application.Application;
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.components.PersistentStateComponent;
|
import com.intellij.openapi.components.PersistentStateComponent;
|
||||||
|
import com.intellij.openapi.components.ServiceManager;
|
||||||
import com.intellij.openapi.components.State;
|
import com.intellij.openapi.components.State;
|
||||||
import com.intellij.openapi.components.Storage;
|
import com.intellij.openapi.components.Storage;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
@ -34,10 +35,11 @@ import com.intellij.openapi.keymap.ex.KeymapManagerEx;
|
|||||||
import com.intellij.openapi.keymap.impl.DefaultKeymap;
|
import com.intellij.openapi.keymap.impl.DefaultKeymap;
|
||||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
|
import com.intellij.openapi.project.ProjectManager;
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.util.SystemInfo;
|
import com.intellij.openapi.util.SystemInfo;
|
||||||
import com.maddyhome.idea.vim.api.VimInjectorKt;
|
import com.intellij.openapi.wm.StatusBar;
|
||||||
import com.maddyhome.idea.vim.api.VimKeyGroup;
|
import com.intellij.openapi.wm.WindowManager;
|
||||||
import com.maddyhome.idea.vim.config.VimState;
|
import com.maddyhome.idea.vim.config.VimState;
|
||||||
import com.maddyhome.idea.vim.config.migration.ApplicationConfigurationMigrator;
|
import com.maddyhome.idea.vim.config.migration.ApplicationConfigurationMigrator;
|
||||||
import com.maddyhome.idea.vim.extension.VimExtensionRegistrar;
|
import com.maddyhome.idea.vim.extension.VimExtensionRegistrar;
|
||||||
@ -47,20 +49,21 @@ import com.maddyhome.idea.vim.group.copy.YankGroup;
|
|||||||
import com.maddyhome.idea.vim.group.visual.VisualMotionGroup;
|
import com.maddyhome.idea.vim.group.visual.VisualMotionGroup;
|
||||||
import com.maddyhome.idea.vim.helper.MacKeyRepeat;
|
import com.maddyhome.idea.vim.helper.MacKeyRepeat;
|
||||||
import com.maddyhome.idea.vim.listener.VimListenerManager;
|
import com.maddyhome.idea.vim.listener.VimListenerManager;
|
||||||
import com.maddyhome.idea.vim.newapi.IjVimInjector;
|
import com.maddyhome.idea.vim.option.OptionsManager;
|
||||||
import com.maddyhome.idea.vim.options.OptionService;
|
|
||||||
import com.maddyhome.idea.vim.ui.StatusBarIconFactory;
|
import com.maddyhome.idea.vim.ui.StatusBarIconFactory;
|
||||||
import com.maddyhome.idea.vim.ui.VimEmulationConfigurable;
|
import com.maddyhome.idea.vim.ui.VimEmulationConfigurable;
|
||||||
import com.maddyhome.idea.vim.ui.ex.ExEntryPanel;
|
import com.maddyhome.idea.vim.ui.ex.ExEntryPanel;
|
||||||
import com.maddyhome.idea.vim.vimscript.services.FunctionStorage;
|
import com.maddyhome.idea.vim.vimscript.services.FunctionStorage;
|
||||||
import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService;
|
import com.maddyhome.idea.vim.vimscript.services.OptionService;
|
||||||
import com.maddyhome.idea.vim.vimscript.services.VimVariableService;
|
import com.maddyhome.idea.vim.vimscript.services.VariableService;
|
||||||
|
import com.maddyhome.idea.vim.vimscript.services.VariableServiceImpl;
|
||||||
import org.jdom.Element;
|
import org.jdom.Element;
|
||||||
import org.jetbrains.annotations.Nls;
|
import org.jetbrains.annotations.Nls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.swing.event.HyperlinkEvent;
|
import javax.swing.event.HyperlinkEvent;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
import static com.maddyhome.idea.vim.group.EditorGroup.EDITOR_STORE_ELEMENT;
|
import static com.maddyhome.idea.vim.group.EditorGroup.EDITOR_STORE_ELEMENT;
|
||||||
import static com.maddyhome.idea.vim.group.KeyGroup.SHORTCUT_CONFLICTS_ELEMENT;
|
import static com.maddyhome.idea.vim.group.KeyGroup.SHORTCUT_CONFLICTS_ELEMENT;
|
||||||
@ -74,16 +77,18 @@ import static com.maddyhome.idea.vim.vimscript.services.VimRcService.executeIdea
|
|||||||
* This is an application level plugin meaning that all open projects will share a common instance of the plugin.
|
* This is an application level plugin meaning that all open projects will share a common instance of the plugin.
|
||||||
* Registers and marks are shared across open projects so you can copy and paste between files of different projects.
|
* Registers and marks are shared across open projects so you can copy and paste between files of different projects.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
// [VERSION UPDATE] 212+ getService
|
||||||
@State(name = "VimSettings", storages = {@Storage("$APP_CONFIG$/vim_settings.xml")})
|
@State(name = "VimSettings", storages = {@Storage("$APP_CONFIG$/vim_settings.xml")})
|
||||||
public class VimPlugin implements PersistentStateComponent<Element>, Disposable {
|
public class VimPlugin implements PersistentStateComponent<Element>, Disposable {
|
||||||
|
|
||||||
static {
|
|
||||||
VimInjectorKt.setInjector(new IjVimInjector());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String IDEAVIM_PLUGIN_ID = "IdeaVIM";
|
private static final String IDEAVIM_PLUGIN_ID = "IdeaVIM";
|
||||||
public static final int STATE_VERSION = 7;
|
public static final int STATE_VERSION = 7;
|
||||||
|
|
||||||
|
private static long lastBeepTimeMillis;
|
||||||
|
|
||||||
|
private boolean error = false;
|
||||||
|
private String message = null;
|
||||||
|
|
||||||
private int previousStateVersion = 0;
|
private int previousStateVersion = 0;
|
||||||
private String previousKeyMap = "";
|
private String previousKeyMap = "";
|
||||||
|
|
||||||
@ -126,10 +131,10 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
|
|||||||
*/
|
*/
|
||||||
public static @NotNull NotificationService getNotifications(@Nullable Project project) {
|
public static @NotNull NotificationService getNotifications(@Nullable Project project) {
|
||||||
if (project == null) {
|
if (project == null) {
|
||||||
return ApplicationManager.getApplication().getService(NotificationService.class);
|
return ServiceManager.getService(NotificationService.class);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return project.getService(NotificationService.class);
|
return ServiceManager.getService(project, NotificationService.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,35 +144,35 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
|
|||||||
|
|
||||||
|
|
||||||
public static @NotNull MotionGroup getMotion() {
|
public static @NotNull MotionGroup getMotion() {
|
||||||
return ApplicationManager.getApplication().getService(MotionGroup.class);
|
return ServiceManager.getService(MotionGroup.class);
|
||||||
}
|
|
||||||
|
|
||||||
public static @NotNull XMLGroup getXML() {
|
|
||||||
return ApplicationManager.getApplication().getService(XMLGroup.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull ChangeGroup getChange() {
|
public static @NotNull ChangeGroup getChange() {
|
||||||
return ((ChangeGroup)VimInjectorKt.getInjector().getChangeGroup());
|
return ServiceManager.getService(ChangeGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull CommandGroup getCommand() {
|
public static @NotNull CommandGroup getCommand() {
|
||||||
return ApplicationManager.getApplication().getService(CommandGroup.class);
|
return ServiceManager.getService(CommandGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull MarkGroup getMark() {
|
public static @NotNull MarkGroup getMark() {
|
||||||
return ((MarkGroup)VimInjectorKt.getInjector().getMarkGroup());
|
return ServiceManager.getService(MarkGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull RegisterGroup getRegister() {
|
public static @NotNull RegisterGroup getRegister() {
|
||||||
return ((RegisterGroup)VimInjectorKt.getInjector().getRegisterGroup());
|
return ServiceManager.getService(RegisterGroup.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @Nullable RegisterGroup getRegisterIfCreated() {
|
||||||
|
return ApplicationManager.getApplication().getServiceIfCreated(RegisterGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull FileGroup getFile() {
|
public static @NotNull FileGroup getFile() {
|
||||||
return (FileGroup)VimInjectorKt.getInjector().getFile();
|
return ServiceManager.getService(FileGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull SearchGroup getSearch() {
|
public static @NotNull SearchGroup getSearch() {
|
||||||
return ApplicationManager.getApplication().getService(SearchGroup.class);
|
return ServiceManager.getService(SearchGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @Nullable SearchGroup getSearchIfCreated() {
|
public static @Nullable SearchGroup getSearchIfCreated() {
|
||||||
@ -175,39 +180,35 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull ProcessGroup getProcess() {
|
public static @NotNull ProcessGroup getProcess() {
|
||||||
return ((ProcessGroup)VimInjectorKt.getInjector().getProcessGroup());
|
return ServiceManager.getService(ProcessGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull MacroGroup getMacro() {
|
public static @NotNull MacroGroup getMacro() {
|
||||||
return (MacroGroup)VimInjectorKt.getInjector().getMacro();
|
return ServiceManager.getService(MacroGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull DigraphGroup getDigraph() {
|
public static @NotNull DigraphGroup getDigraph() {
|
||||||
return (DigraphGroup)VimInjectorKt.getInjector().getDigraphGroup();
|
return ServiceManager.getService(DigraphGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull HistoryGroup getHistory() {
|
public static @NotNull HistoryGroup getHistory() {
|
||||||
return ApplicationManager.getApplication().getService(HistoryGroup.class);
|
return ServiceManager.getService(HistoryGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull KeyGroup getKey() {
|
public static @NotNull KeyGroup getKey() {
|
||||||
return ((KeyGroup)VimInjectorKt.getInjector().getKeyGroup());
|
return ServiceManager.getService(KeyGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @Nullable KeyGroup getKeyIfCreated() {
|
public static @Nullable KeyGroup getKeyIfCreated() {
|
||||||
return ((KeyGroup)ApplicationManager.getApplication().getServiceIfCreated(VimKeyGroup.class));
|
return ApplicationManager.getApplication().getServiceIfCreated(KeyGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull WindowGroup getWindow() {
|
public static @NotNull WindowGroup getWindow() {
|
||||||
return ((WindowGroup)VimInjectorKt.getInjector().getWindow());
|
return ServiceManager.getService(WindowGroup.class);
|
||||||
}
|
|
||||||
|
|
||||||
public static @NotNull TabService getTabService() {
|
|
||||||
return ApplicationManager.getApplication().getService(TabService.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull EditorGroup getEditor() {
|
public static @NotNull EditorGroup getEditor() {
|
||||||
return ApplicationManager.getApplication().getService(EditorGroup.class);
|
return ServiceManager.getService(EditorGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @Nullable EditorGroup getEditorIfCreated() {
|
public static @Nullable EditorGroup getEditorIfCreated() {
|
||||||
@ -215,27 +216,23 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull VisualMotionGroup getVisualMotion() {
|
public static @NotNull VisualMotionGroup getVisualMotion() {
|
||||||
return (VisualMotionGroup)VimInjectorKt.getInjector().getVisualMotionGroup();
|
return ServiceManager.getService(VisualMotionGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull YankGroup getYank() {
|
public static @NotNull YankGroup getYank() {
|
||||||
return (YankGroup)VimInjectorKt.getInjector().getYank();
|
return ServiceManager.getService(YankGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull PutGroup getPut() {
|
public static @NotNull PutGroup getPut() {
|
||||||
return (PutGroup)VimInjectorKt.getInjector().getPut();
|
return ServiceManager.getService(PutGroup.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull VimVariableService getVariableService() {
|
public static @NotNull VariableService getVariableService() {
|
||||||
return ApplicationManager.getApplication().getService(VimVariableService.class);
|
return ServiceManager.getService(VariableService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull OptionService getOptionService() {
|
public static @NotNull OptionService getOptionService() {
|
||||||
return VimInjectorKt.getInjector().getOptionService();
|
return ServiceManager.getService(OptionService.class);
|
||||||
}
|
|
||||||
|
|
||||||
public static @NotNull IjVimOptionService getOptionServiceImpl() {
|
|
||||||
return (IjVimOptionService)VimInjectorKt.getInjector().getOptionService();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static @NotNull NotificationService getNotifications() {
|
private static @NotNull NotificationService getNotifications() {
|
||||||
@ -288,79 +285,85 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isError() {
|
public static boolean isError() {
|
||||||
return VimInjectorKt.getInjector().getMessages().isError();
|
return getInstance().error;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getMessage() {
|
public static String getMessage() {
|
||||||
return VimInjectorKt.getInjector().getMessages().getStatusBarMessage();
|
return getInstance().message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate to the user that an error has occurred. Just beep.
|
* Indicate to the user that an error has occurred. Just beep.
|
||||||
*/
|
*/
|
||||||
public static void indicateError() {
|
public static void indicateError() {
|
||||||
VimInjectorKt.getInjector().getMessages().indicateError();
|
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||||
|
getInstance().error = true;
|
||||||
|
}
|
||||||
|
else if (!VimPlugin.getOptionService().isSet(OptionService.Scope.GLOBAL.INSTANCE, "visualbell", "visualbell")) {
|
||||||
|
// Vim only allows a beep once every half second - :help 'visualbell'
|
||||||
|
final long currentTimeMillis = System.currentTimeMillis();
|
||||||
|
if (currentTimeMillis - lastBeepTimeMillis > 500) {
|
||||||
|
Toolkit.getDefaultToolkit().beep();
|
||||||
|
lastBeepTimeMillis = currentTimeMillis;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clearError() {
|
public static void clearError() {
|
||||||
VimInjectorKt.getInjector().getMessages().clearError();
|
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||||
|
getInstance().error = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showMode(String msg) {
|
public static void showMode(String msg) {
|
||||||
VimInjectorKt.getInjector().getMessages().showMode(msg);
|
showMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showMessage(@Nls(capitalization = Nls.Capitalization.Sentence) @Nullable String msg) {
|
public static void showMessage(@Nls(capitalization = Nls.Capitalization.Sentence) @Nullable String msg) {
|
||||||
VimInjectorKt.getInjector().getMessages().showStatusBarMessage(msg);
|
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||||
|
getInstance().message = msg;
|
||||||
|
}
|
||||||
|
ProjectManager pm = ProjectManager.getInstance();
|
||||||
|
Project[] projects = pm.getOpenProjects();
|
||||||
|
for (Project project : projects) {
|
||||||
|
StatusBar bar = WindowManager.getInstance().getStatusBar(project);
|
||||||
|
if (bar != null) {
|
||||||
|
if (msg == null || msg.length() == 0) {
|
||||||
|
bar.setInfo("");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bar.setInfo("VIM - " + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull VimPlugin getInstance() {
|
public static @NotNull VimPlugin getInstance() {
|
||||||
return ApplicationManager.getApplication().getService(VimPlugin.class);
|
return ServiceManager.getService(VimPlugin.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* IdeaVim plugin initialization.
|
|
||||||
* This is an important operation and some commands ordering should be preserved.
|
|
||||||
* Please make sure that the documentation of this function is in sync with the code
|
|
||||||
*
|
|
||||||
* 1) Update state
|
|
||||||
* This schedules a state update. In most cases it just shows some dialogs to the user. As I know, there are
|
|
||||||
* no special reasons to keep this command as a first line, so it seems safe to move it.
|
|
||||||
* 2) Command registration
|
|
||||||
* This block should be located BEFORE ~/.ideavimrc execution. Without it the commands won't be registered
|
|
||||||
* and initialized, but ~/.ideavimrc file may refer or execute some commands or functions.
|
|
||||||
* This block DOES NOT initialize extensions, but only registers the available ones.
|
|
||||||
* 3) ~/.ideavimrc execution
|
|
||||||
* 3.1 executes commands from the .ideavimrc file and 3.2 initializes extensions.
|
|
||||||
* 3.1 MUST BE BEFORE 3.2. This is a flow of vim/IdeaVim initialization, firstly .ideavimrc is executed and then
|
|
||||||
* the extensions are initialized.
|
|
||||||
* 4) Components initialization
|
|
||||||
* This should happen after ideavimrc execution because VimListenerManager accesses `number` option
|
|
||||||
* to init line numbers and guicaret to initialize carets.
|
|
||||||
* However, there is a question about listeners attaching. Listeners registration happens after the .ideavimrc
|
|
||||||
* execution, what theoretically may cause bugs (e.g. VIM-2540)
|
|
||||||
*/
|
|
||||||
private void turnOnPlugin() {
|
private void turnOnPlugin() {
|
||||||
// 1) Update state
|
|
||||||
ApplicationManager.getApplication().invokeLater(this::updateState);
|
ApplicationManager.getApplication().invokeLater(this::updateState);
|
||||||
|
|
||||||
// 2) Command registration
|
// Register vim actions in command mode
|
||||||
// 2.1) Register vim actions in command mode
|
|
||||||
RegisterActions.registerActions();
|
RegisterActions.registerActions();
|
||||||
|
|
||||||
// 2.2) Register extensions
|
// Register extensions
|
||||||
VimExtensionRegistrar.registerExtensions();
|
VimExtensionRegistrar.registerExtensions();
|
||||||
|
|
||||||
// 2.3) Register functions
|
// Register functions
|
||||||
FunctionStorage.INSTANCE.registerHandlers();
|
FunctionStorage.INSTANCE.registerHandlers();
|
||||||
|
|
||||||
// 3) ~/.ideavimrc execution
|
// Execute ~/.ideavimrc
|
||||||
// 3.1) Execute ~/.ideavimrc
|
|
||||||
registerIdeavimrc();
|
registerIdeavimrc();
|
||||||
|
|
||||||
// 3.2) Initialize extensions. Always after 3.1
|
// Initialize extensions
|
||||||
VimExtensionRegistrar.enableDelayedExtensions();
|
VimExtensionRegistrar.enableDelayedExtensions();
|
||||||
|
|
||||||
|
// Some options' default values are based on values set in .ideavimrc, e.g. 'shellxquote' on Windows when 'shell'
|
||||||
|
// is cmd.exe has a different default to when 'shell' contains "sh"
|
||||||
|
OptionsManager.INSTANCE.completeInitialisation();
|
||||||
|
|
||||||
// Turing on should be performed after all commands registration
|
// Turing on should be performed after all commands registration
|
||||||
getSearch().turnOn();
|
getSearch().turnOn();
|
||||||
VimListenerManager.INSTANCE.turnOn();
|
VimListenerManager.INSTANCE.turnOn();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -25,12 +25,8 @@ import com.intellij.openapi.editor.actionSystem.TypedActionHandler
|
|||||||
import com.intellij.openapi.editor.actionSystem.TypedActionHandlerEx
|
import com.intellij.openapi.editor.actionSystem.TypedActionHandlerEx
|
||||||
import com.intellij.openapi.progress.ProcessCanceledException
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||||
import com.maddyhome.idea.vim.helper.inInsertMode
|
|
||||||
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
|
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
|
||||||
import com.maddyhome.idea.vim.key.KeyHandlerKeeper
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import com.maddyhome.idea.vim.newapi.vim
|
|
||||||
import com.maddyhome.idea.vim.options.OptionConstants
|
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
|
||||||
import java.awt.event.KeyAdapter
|
import java.awt.event.KeyAdapter
|
||||||
import java.awt.event.KeyEvent
|
import java.awt.event.KeyEvent
|
||||||
import javax.swing.KeyStroke
|
import javax.swing.KeyStroke
|
||||||
@ -40,43 +36,33 @@ import javax.swing.KeyStroke
|
|||||||
*
|
*
|
||||||
* IDE shortcut keys used by Vim commands are handled by [com.maddyhome.idea.vim.action.VimShortcutKeyAction].
|
* IDE shortcut keys used by Vim commands are handled by [com.maddyhome.idea.vim.action.VimShortcutKeyAction].
|
||||||
*/
|
*/
|
||||||
class VimTypedActionHandler(origHandler: TypedActionHandler) : TypedActionHandlerEx {
|
class VimTypedActionHandler(origHandler: TypedActionHandler?) : TypedActionHandlerEx {
|
||||||
private val handler = KeyHandler.getInstance()
|
private val handler = KeyHandler.getInstance()
|
||||||
private val traceTime = VimPlugin.getOptionService().isSet(OptionScope.GLOBAL, OptionConstants.ideatracetimeName)
|
private val traceTime = VimPlugin.getOptionService().isSet(OptionService.Scope.GLOBAL, "ideatracetime")
|
||||||
|
|
||||||
init {
|
init {
|
||||||
KeyHandlerKeeper.getInstance().originalHandler = origHandler
|
handler.originalHandler = origHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun beforeExecute(editor: Editor, charTyped: Char, context: DataContext, plan: ActionPlan) {
|
override fun beforeExecute(editor: Editor, charTyped: Char, context: DataContext, plan: ActionPlan) {
|
||||||
LOG.trace("Before execute for typed action")
|
LOG.trace("Before execute for typed action")
|
||||||
if (editor.isIdeaVimDisabledHere) {
|
if (editor.isIdeaVimDisabledHere) {
|
||||||
LOG.trace("IdeaVim disabled here, finish")
|
LOG.trace("IdeaVim disabled here, finish")
|
||||||
(KeyHandlerKeeper.getInstance().originalHandler as? TypedActionHandlerEx)?.beforeExecute(editor, charTyped, context, plan)
|
(handler.originalHandler as? TypedActionHandlerEx)?.beforeExecute(editor, charTyped, context, plan)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG.trace("Executing before execute")
|
LOG.trace("Executing before execute")
|
||||||
val modifiers = if (charTyped == ' ' && VimKeyListener.isSpaceShift) KeyEvent.SHIFT_DOWN_MASK else 0
|
val modifiers = if (charTyped == ' ' && VimKeyListener.isSpaceShift) KeyEvent.SHIFT_DOWN_MASK else 0
|
||||||
val keyStroke = KeyStroke.getKeyStroke(charTyped, modifiers)
|
val keyStroke = KeyStroke.getKeyStroke(charTyped, modifiers)
|
||||||
|
handler.beforeHandleKey(editor, keyStroke, context, plan)
|
||||||
/* Invoked before acquiring a write lock and actually handling the keystroke.
|
|
||||||
*
|
|
||||||
* Drafts an optional [ActionPlan] that will be used as a base for zero-latency rendering in editor.
|
|
||||||
*/
|
|
||||||
if (editor.inInsertMode) {
|
|
||||||
val originalHandler = KeyHandlerKeeper.getInstance().originalHandler
|
|
||||||
if (originalHandler is TypedActionHandlerEx) {
|
|
||||||
originalHandler.beforeExecute(editor, keyStroke.keyChar, context, plan)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun execute(editor: Editor, charTyped: Char, context: DataContext) {
|
override fun execute(editor: Editor, charTyped: Char, context: DataContext) {
|
||||||
LOG.trace("Execute for typed action")
|
LOG.trace("Execute for typed action")
|
||||||
if (editor.isIdeaVimDisabledHere) {
|
if (editor.isIdeaVimDisabledHere) {
|
||||||
LOG.trace("IdeaVim disabled here, finish")
|
LOG.trace("IdeaVim disabled here, finish")
|
||||||
KeyHandlerKeeper.getInstance().originalHandler.execute(editor, charTyped, context)
|
handler.originalHandler.execute(editor, charTyped, context)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +71,7 @@ class VimTypedActionHandler(origHandler: TypedActionHandler) : TypedActionHandle
|
|||||||
val modifiers = if (charTyped == ' ' && VimKeyListener.isSpaceShift) KeyEvent.SHIFT_DOWN_MASK else 0
|
val modifiers = if (charTyped == ' ' && VimKeyListener.isSpaceShift) KeyEvent.SHIFT_DOWN_MASK else 0
|
||||||
val keyStroke = KeyStroke.getKeyStroke(charTyped, modifiers)
|
val keyStroke = KeyStroke.getKeyStroke(charTyped, modifiers)
|
||||||
val startTime = if (traceTime) System.currentTimeMillis() else null
|
val startTime = if (traceTime) System.currentTimeMillis() else null
|
||||||
handler.handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, context).vim)
|
handler.handleKey(editor, keyStroke, EditorDataContext.init(editor, context))
|
||||||
if (startTime != null) {
|
if (startTime != null) {
|
||||||
val duration = System.currentTimeMillis() - startTime
|
val duration = System.currentTimeMillis() - startTime
|
||||||
LOG.info("VimTypedAction '$charTyped': $duration ms")
|
LOG.info("VimTypedAction '$charTyped': $duration ms")
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.maddyhome.idea.vim.command
|
package com.maddyhome.idea.vim.action
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* There are some double-character commands like `cc`, `dd`, `yy`.
|
* There are some double-character commands like `cc`, `dd`, `yy`.
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action
|
package com.maddyhome.idea.vim.action
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.VimPlugin
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
@ -27,7 +27,7 @@ import com.maddyhome.idea.vim.handler.VimActionHandler
|
|||||||
class ExEntryAction : VimActionHandler.SingleExecution() {
|
class ExEntryAction : VimActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.OTHER_READONLY
|
override val type: Command.Type = Command.Type.OTHER_READONLY
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
VimPlugin.getProcess().startExCommand(editor, context, cmd)
|
VimPlugin.getProcess().startExCommand(editor, context, cmd)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,32 +17,30 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action
|
package com.maddyhome.idea.vim.action
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.KeyHandler
|
import com.maddyhome.idea.vim.KeyHandler
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.api.injector
|
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandState
|
import com.maddyhome.idea.vim.command.CommandState
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.group.MotionGroup
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.getTopLevelEditor
|
||||||
import com.maddyhome.idea.vim.helper.mode
|
import com.maddyhome.idea.vim.helper.mode
|
||||||
|
import com.maddyhome.idea.vim.helper.vimForEachCaret
|
||||||
|
|
||||||
class ResetModeAction : VimActionHandler.SingleExecution() {
|
class ResetModeAction : VimActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.OTHER_WRITABLE
|
override val type: Command.Type = Command.Type.OTHER_WRITABLE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
editor: VimEditor,
|
|
||||||
context: ExecutionContext,
|
|
||||||
cmd: Command,
|
|
||||||
operatorArguments: OperatorArguments,
|
|
||||||
): Boolean {
|
|
||||||
val modeBeforeReset = editor.mode
|
val modeBeforeReset = editor.mode
|
||||||
KeyHandler.getInstance().fullReset(editor)
|
KeyHandler.getInstance().fullReset(editor.getTopLevelEditor())
|
||||||
|
|
||||||
if (modeBeforeReset == CommandState.Mode.INSERT) {
|
if (modeBeforeReset == CommandState.Mode.INSERT) {
|
||||||
editor.forEachCaret { caret ->
|
editor.vimForEachCaret { caret ->
|
||||||
val position = injector.motion.getOffsetOfHorizontalMotion(editor, caret, -1, false)
|
val position = VimPlugin.getMotion().getOffsetOfHorizontalMotion(editor, caret, -1, false)
|
||||||
caret.moveToOffset(position)
|
MotionGroup.moveCaret(editor, caret, position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -34,10 +34,10 @@ import com.intellij.openapi.util.Key
|
|||||||
import com.intellij.ui.KeyStrokeAdapter
|
import com.intellij.ui.KeyStrokeAdapter
|
||||||
import com.maddyhome.idea.vim.KeyHandler
|
import com.maddyhome.idea.vim.KeyHandler
|
||||||
import com.maddyhome.idea.vim.VimPlugin
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.api.injector
|
|
||||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||||
import com.maddyhome.idea.vim.helper.EditorHelper
|
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||||
import com.maddyhome.idea.vim.helper.HandlerInjector
|
import com.maddyhome.idea.vim.helper.HandlerInjector
|
||||||
|
import com.maddyhome.idea.vim.helper.StringHelper
|
||||||
import com.maddyhome.idea.vim.helper.inInsertMode
|
import com.maddyhome.idea.vim.helper.inInsertMode
|
||||||
import com.maddyhome.idea.vim.helper.inNormalMode
|
import com.maddyhome.idea.vim.helper.inNormalMode
|
||||||
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
|
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
|
||||||
@ -48,14 +48,10 @@ 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.listener.AppCodeTemplates.appCodeTemplateCaptured
|
||||||
import com.maddyhome.idea.vim.newapi.IjVimEditor
|
|
||||||
import com.maddyhome.idea.vim.newapi.vim
|
|
||||||
import com.maddyhome.idea.vim.options.OptionChangeListener
|
|
||||||
import com.maddyhome.idea.vim.options.OptionConstants
|
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
|
||||||
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimDataType
|
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimDataType
|
||||||
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimString
|
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimString
|
||||||
import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService
|
import com.maddyhome.idea.vim.vimscript.model.options.OptionChangeListener
|
||||||
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import java.awt.event.InputEvent
|
import java.awt.event.InputEvent
|
||||||
import java.awt.event.KeyEvent
|
import java.awt.event.KeyEvent
|
||||||
import javax.swing.KeyStroke
|
import javax.swing.KeyStroke
|
||||||
@ -67,7 +63,7 @@ import javax.swing.KeyStroke
|
|||||||
* These keys are not passed to [com.maddyhome.idea.vim.VimTypedActionHandler] and should be handled by actions.
|
* These keys are not passed to [com.maddyhome.idea.vim.VimTypedActionHandler] and should be handled by actions.
|
||||||
*/
|
*/
|
||||||
class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
||||||
private val traceTime = VimPlugin.getOptionService().isSet(OptionScope.GLOBAL, OptionConstants.ideatracetimeName)
|
private val traceTime = VimPlugin.getOptionService().isSet(OptionService.Scope.GLOBAL, "ideatracetime")
|
||||||
|
|
||||||
override fun actionPerformed(e: AnActionEvent) {
|
override fun actionPerformed(e: AnActionEvent) {
|
||||||
LOG.trace("Executing shortcut key action")
|
LOG.trace("Executing shortcut key action")
|
||||||
@ -81,7 +77,7 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
// Should we use HelperKt.getTopLevelEditor(editor) here, as we did in former EditorKeyHandler?
|
// Should we use HelperKt.getTopLevelEditor(editor) here, as we did in former EditorKeyHandler?
|
||||||
try {
|
try {
|
||||||
val start = if (traceTime) System.currentTimeMillis() else null
|
val start = if (traceTime) System.currentTimeMillis() else null
|
||||||
KeyHandler.getInstance().handleKey(editor.vim, keyStroke, EditorDataContext.init(editor, e.dataContext).vim)
|
KeyHandler.getInstance().handleKey(editor, keyStroke, EditorDataContext.init(editor, e.dataContext))
|
||||||
if (start != null) {
|
if (start != null) {
|
||||||
val duration = System.currentTimeMillis() - start
|
val duration = System.currentTimeMillis() - start
|
||||||
LOG.info("VimShortcut update '$keyStroke': $duration ms")
|
LOG.info("VimShortcut update '$keyStroke': $duration ms")
|
||||||
@ -125,8 +121,8 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
|
|
||||||
val keyCode = keyStroke.keyCode
|
val keyCode = keyStroke.keyCode
|
||||||
|
|
||||||
if (HandlerInjector.notebookCommandMode(editor)) {
|
if (HandlerInjector.notebookCommandMode()) {
|
||||||
LOG.debug("Python Notebook command mode")
|
LOG.trace("Python Notebook command mode")
|
||||||
if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_KP_RIGHT || keyCode == KeyEvent.VK_ENTER) {
|
if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_KP_RIGHT || keyCode == KeyEvent.VK_ENTER) {
|
||||||
invokeLater { editor.updateCaretsVisualAttributes() }
|
invokeLater { editor.updateCaretsVisualAttributes() }
|
||||||
}
|
}
|
||||||
@ -174,7 +170,19 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
|
|
||||||
val savedShortcutConflicts = VimPlugin.getKey().savedShortcutConflicts
|
val savedShortcutConflicts = VimPlugin.getKey().savedShortcutConflicts
|
||||||
val info = savedShortcutConflicts[keyStroke]
|
val info = savedShortcutConflicts[keyStroke]
|
||||||
return when (info?.forEditor(editor.vim)) {
|
if (info is ShortcutOwner) {
|
||||||
|
return when (info) {
|
||||||
|
ShortcutOwner.VIM -> true
|
||||||
|
ShortcutOwner.IDE -> !isShortcutConflict(keyStroke)
|
||||||
|
else -> {
|
||||||
|
if (isShortcutConflict(keyStroke)) {
|
||||||
|
savedShortcutConflicts[keyStroke] = ShortcutOwnerInfo.allUndefined
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return when ((info as? ShortcutOwnerInfo)?.forEditor(editor)) {
|
||||||
ShortcutOwner.VIM -> true
|
ShortcutOwner.VIM -> true
|
||||||
ShortcutOwner.IDE -> !isShortcutConflict(keyStroke)
|
ShortcutOwner.IDE -> !isShortcutConflict(keyStroke)
|
||||||
else -> {
|
else -> {
|
||||||
@ -189,10 +197,10 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isEnabledForEscape(editor: Editor): Boolean {
|
private fun isEnabledForEscape(editor: Editor): Boolean {
|
||||||
val ideaVimSupportValue = (VimPlugin.getOptionService().getOptionValue(OptionScope.LOCAL(IjVimEditor(editor)), IjVimOptionService.ideavimsupportName) as VimString).value
|
val ideaVimSupportValue = (VimPlugin.getOptionService().getOptionValue(OptionService.Scope.LOCAL(editor), "ideavimsupport") as VimString).value
|
||||||
return editor.isPrimaryEditor() ||
|
return editor.isPrimaryEditor() ||
|
||||||
EditorHelper.isFileEditor(editor) && !editor.inNormalMode ||
|
EditorHelper.isFileEditor(editor) && !editor.inNormalMode ||
|
||||||
ideaVimSupportValue.contains(IjVimOptionService.ideavimsupport_dialog) && !editor.inNormalMode
|
ideaVimSupportValue.contains("dialog") && !editor.inNormalMode
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isShortcutConflict(keyStroke: KeyStroke): Boolean {
|
private fun isShortcutConflict(keyStroke: KeyStroke): Boolean {
|
||||||
@ -238,7 +246,7 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
VimPlugin.getOptionService().addListener(
|
VimPlugin.getOptionService().addListener(
|
||||||
OptionConstants.lookupkeysName,
|
"lookupkeys",
|
||||||
object : OptionChangeListener<VimDataType> {
|
object : OptionChangeListener<VimDataType> {
|
||||||
override fun processGlobalValueChange(oldValue: VimDataType?) {
|
override fun processGlobalValueChange(oldValue: VimDataType?) {
|
||||||
parsedLookupKeys = parseLookupKeys()
|
parsedLookupKeys = parseLookupKeys()
|
||||||
@ -249,9 +257,9 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
|
|||||||
|
|
||||||
fun isEnabledForLookup(keyStroke: KeyStroke): Boolean = keyStroke !in parsedLookupKeys
|
fun isEnabledForLookup(keyStroke: KeyStroke): Boolean = keyStroke !in parsedLookupKeys
|
||||||
|
|
||||||
private fun parseLookupKeys() = (VimPlugin.getOptionService().getOptionValue(OptionScope.GLOBAL, OptionConstants.lookupkeysName) as VimString).value
|
private fun parseLookupKeys() = (VimPlugin.getOptionService().getOptionValue(OptionService.Scope.GLOBAL, "lookupkeys") as VimString).value
|
||||||
.split(",")
|
.split(",")
|
||||||
.map { injector.parser.parseKeys(it) }
|
.map { StringHelper.parseKeys(it) }
|
||||||
.filter { it.isNotEmpty() }
|
.filter { it.isNotEmpty() }
|
||||||
.map { it.first() }
|
.map { it.first() }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,108 +17,57 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change
|
package com.maddyhome.idea.vim.action.change
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.KeyHandler
|
import com.maddyhome.idea.vim.KeyHandler
|
||||||
import com.maddyhome.idea.vim.VimPlugin
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.command.SelectionType
|
import com.maddyhome.idea.vim.command.SelectionType
|
||||||
import com.maddyhome.idea.vim.common.TextRange
|
|
||||||
import com.maddyhome.idea.vim.common.argumentCaptured
|
|
||||||
import com.maddyhome.idea.vim.group.MotionGroup
|
import com.maddyhome.idea.vim.group.MotionGroup
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
|
||||||
import com.maddyhome.idea.vim.helper.MessageHelper
|
import com.maddyhome.idea.vim.helper.MessageHelper
|
||||||
import com.maddyhome.idea.vim.helper.commandState
|
import com.maddyhome.idea.vim.helper.commandState
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
|
||||||
import com.maddyhome.idea.vim.newapi.ij
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
private fun doOperatorAction(editor: VimEditor, context: ExecutionContext, textRange: TextRange, selectionType: SelectionType): Boolean {
|
|
||||||
val operatorFunction = VimPlugin.getKey().operatorFunction
|
|
||||||
if (operatorFunction == null) {
|
|
||||||
VimPlugin.showMessage(MessageHelper.message("E774"))
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
val saveRepeatHandler = VimRepeater.repeatHandler
|
|
||||||
VimPlugin.getMark().setChangeMarks(editor, textRange)
|
|
||||||
KeyHandler.getInstance().reset(editor)
|
|
||||||
val result = operatorFunction.apply(editor.ij, context.ij, selectionType)
|
|
||||||
VimRepeater.repeatHandler = saveRepeatHandler
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author vlan
|
||||||
|
*/
|
||||||
class OperatorAction : VimActionHandler.SingleExecution() {
|
class OperatorAction : VimActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
||||||
|
|
||||||
override val argumentType: Argument.Type = Argument.Type.MOTION
|
override val argumentType: Argument.Type = Argument.Type.MOTION
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
val argument = cmd.argument ?: return false
|
val operatorFunction = VimPlugin.getKey().operatorFunction
|
||||||
|
if (operatorFunction != null) {
|
||||||
|
val argument = cmd.argument
|
||||||
|
if (argument != null) {
|
||||||
if (!editor.commandState.isDotRepeatInProgress) {
|
if (!editor.commandState.isDotRepeatInProgress) {
|
||||||
argumentCaptured = argument
|
VimRepeater.Extension.argumentCaptured = argument
|
||||||
}
|
}
|
||||||
val range = getMotionRange(editor, context, argument, operatorArguments)
|
val saveRepeatHandler = VimRepeater.repeatHandler
|
||||||
|
val motion = argument.motion
|
||||||
|
val range = MotionGroup
|
||||||
|
.getMotionRange(
|
||||||
|
editor,
|
||||||
|
editor.caretModel.primaryCaret,
|
||||||
|
context,
|
||||||
|
argument,
|
||||||
|
operatorArguments
|
||||||
|
)
|
||||||
if (range != null) {
|
if (range != null) {
|
||||||
val selectionType = if (argument.motion.isLinewiseMotion()) {
|
VimPlugin.getMark().setChangeMarks(editor, range)
|
||||||
SelectionType.LINE_WISE
|
val selectionType = if (motion.isLinewiseMotion()) SelectionType.LINE_WISE else SelectionType.CHARACTER_WISE
|
||||||
} else {
|
KeyHandler.getInstance().reset(editor)
|
||||||
SelectionType.CHARACTER_WISE
|
val result = operatorFunction.apply(editor, context, selectionType)
|
||||||
|
VimRepeater.repeatHandler = saveRepeatHandler
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
return doOperatorAction(editor, context, range, selectionType)
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
VimPlugin.showMessage(MessageHelper.message("E774"))
|
||||||
private fun getMotionRange(
|
return false
|
||||||
editor: VimEditor,
|
|
||||||
context: ExecutionContext,
|
|
||||||
argument: Argument,
|
|
||||||
operatorArguments: OperatorArguments
|
|
||||||
): TextRange? {
|
|
||||||
|
|
||||||
// Note that we're using getMotionRange2 in order to avoid normalising the linewise range into line start
|
|
||||||
// offsets that will be used to set the change marks. This affects things like the location of the caret in the
|
|
||||||
// Commentary extension
|
|
||||||
val ijEditor = editor.ij
|
|
||||||
return MotionGroup.getMotionRange2(
|
|
||||||
ijEditor,
|
|
||||||
ijEditor.caretModel.primaryCaret,
|
|
||||||
context.ij,
|
|
||||||
argument,
|
|
||||||
operatorArguments
|
|
||||||
)?.normalize()?.let {
|
|
||||||
|
|
||||||
// If we're linewise, make sure the end offset isn't just the EOL char
|
|
||||||
if (argument.motion.isLinewiseMotion() && it.endOffset < editor.fileSize()) {
|
|
||||||
TextRange(it.startOffset, it.endOffset + 1)
|
|
||||||
} else {
|
|
||||||
it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class VisualOperatorAction : VisualOperatorActionHandler.ForEachCaret() {
|
|
||||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
|
||||||
|
|
||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
|
||||||
|
|
||||||
override fun executeAction(
|
|
||||||
editor: VimEditor,
|
|
||||||
caret: VimCaret,
|
|
||||||
context: ExecutionContext,
|
|
||||||
cmd: Command,
|
|
||||||
range: VimSelection,
|
|
||||||
operatorArguments: OperatorArguments,
|
|
||||||
): Boolean {
|
|
||||||
return doOperatorAction(editor, context, range.toVimTextRange(), range.type)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,27 +17,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change
|
package com.maddyhome.idea.vim.action.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.UndoRedoHelper.redo
|
||||||
|
|
||||||
class RedoAction : VimActionHandler.SingleExecution() {
|
class RedoAction : VimActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean = redo(context)
|
||||||
editor: VimEditor,
|
|
||||||
context: ExecutionContext,
|
|
||||||
cmd: Command,
|
|
||||||
operatorArguments: OperatorArguments,
|
|
||||||
): Boolean {
|
|
||||||
var count = operatorArguments.count1
|
|
||||||
var result = injector.undo.redo(context)
|
|
||||||
while ((--count > 0) && result) {
|
|
||||||
result = injector.undo.redo(context)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,49 +17,44 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change
|
package com.maddyhome.idea.vim.action.change
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.intellij.openapi.command.CommandProcessor
|
import com.intellij.openapi.command.CommandProcessor
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.KeyHandler
|
||||||
import com.maddyhome.idea.vim.VimPlugin
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.api.injector
|
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.extension.VimExtensionHandler
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.commandState
|
import com.maddyhome.idea.vim.helper.commandState
|
||||||
import com.maddyhome.idea.vim.newapi.ij
|
import javax.swing.KeyStroke
|
||||||
|
|
||||||
class RepeatChangeAction : VimActionHandler.SingleExecution() {
|
class RepeatChangeAction : VimActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.OTHER_WRITABLE
|
override val type: Command.Type = Command.Type.OTHER_WRITABLE
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
val state = editor.commandState
|
val state = editor.commandState
|
||||||
val lastCommand = VimRepeater.lastChangeCommand
|
val lastCommand = VimRepeater.lastChangeCommand
|
||||||
|
|
||||||
if (lastCommand == null && Extension.lastExtensionHandler == null) return false
|
if (lastCommand == null && VimRepeater.Extension.lastExtensionHandler == null) return false
|
||||||
|
|
||||||
// Save state
|
// Save state
|
||||||
val save = state.executingCommand
|
val save = state.executingCommand
|
||||||
val lastFTCmd = injector.motion.lastFTCmd
|
val lastFTCmd = VimPlugin.getMotion().lastFTCmd
|
||||||
val lastFTChar = injector.motion.lastFTChar
|
val lastFTChar = VimPlugin.getMotion().lastFTChar
|
||||||
val reg = injector.registerGroup.currentRegister
|
val reg = VimPlugin.getRegister().currentRegister
|
||||||
val lastHandler = Extension.lastExtensionHandler
|
val lastHandler = VimRepeater.Extension.lastExtensionHandler
|
||||||
val repeatHandler = VimRepeater.repeatHandler
|
val repeatHandler = VimRepeater.repeatHandler
|
||||||
|
|
||||||
state.isDotRepeatInProgress = true
|
state.isDotRepeatInProgress = true
|
||||||
|
VimPlugin.getRegister().selectRegister(VimRepeater.lastChangeRegister)
|
||||||
// A fancy 'redo-register' feature
|
|
||||||
// VIM-2643, :h redo-register
|
|
||||||
if (VimRepeater.lastChangeRegister in '1'..'8') {
|
|
||||||
VimRepeater.lastChangeRegister = VimRepeater.lastChangeRegister.inc()
|
|
||||||
}
|
|
||||||
|
|
||||||
injector.registerGroup.selectRegister(VimRepeater.lastChangeRegister)
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (repeatHandler && lastHandler != null) {
|
if (repeatHandler && lastHandler != null) {
|
||||||
val processor = CommandProcessor.getInstance()
|
val processor = CommandProcessor.getInstance()
|
||||||
processor.executeCommand(
|
processor.executeCommand(
|
||||||
editor.ij.project,
|
editor.project,
|
||||||
{ lastHandler.execute(editor, context) },
|
{ lastHandler.execute(editor, context) },
|
||||||
"Vim " + lastHandler.javaClass.simpleName,
|
"Vim " + lastHandler.javaClass.simpleName,
|
||||||
null
|
null
|
||||||
@ -76,7 +71,7 @@ class RepeatChangeAction : VimActionHandler.SingleExecution() {
|
|||||||
state.setExecutingCommand(lastCommand)
|
state.setExecutingCommand(lastCommand)
|
||||||
|
|
||||||
val arguments = operatorArguments.copy(count0 = lastCommand.rawCount)
|
val arguments = operatorArguments.copy(count0 = lastCommand.rawCount)
|
||||||
injector.actionExecutor.executeVimAction(editor, lastCommand.action, context, arguments)
|
KeyHandler.executeVimAction(editor, lastCommand.action, context, arguments)
|
||||||
|
|
||||||
VimRepeater.saveLastChange(lastCommand)
|
VimRepeater.saveLastChange(lastCommand)
|
||||||
}
|
}
|
||||||
@ -88,10 +83,66 @@ class RepeatChangeAction : VimActionHandler.SingleExecution() {
|
|||||||
// Restore state
|
// Restore state
|
||||||
if (save != null) state.setExecutingCommand(save)
|
if (save != null) state.setExecutingCommand(save)
|
||||||
VimPlugin.getMotion().setLastFTCmd(lastFTCmd, lastFTChar)
|
VimPlugin.getMotion().setLastFTCmd(lastFTCmd, lastFTChar)
|
||||||
if (lastHandler != null) Extension.lastExtensionHandler = lastHandler
|
if (lastHandler != null) VimRepeater.Extension.lastExtensionHandler = lastHandler
|
||||||
VimRepeater.repeatHandler = repeatHandler
|
VimRepeater.repeatHandler = repeatHandler
|
||||||
Extension.reset()
|
VimRepeater.Extension.reset()
|
||||||
VimPlugin.getRegister().selectRegister(reg)
|
VimPlugin.getRegister().selectRegister(reg)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object VimRepeater {
|
||||||
|
var repeatHandler = false
|
||||||
|
|
||||||
|
var lastChangeCommand: Command? = null
|
||||||
|
private set
|
||||||
|
var lastChangeRegister = VimPlugin.getRegister().defaultRegister
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun saveLastChange(command: Command) {
|
||||||
|
lastChangeCommand = command
|
||||||
|
lastChangeRegister = VimPlugin.getRegister().currentRegister
|
||||||
|
}
|
||||||
|
|
||||||
|
object Extension {
|
||||||
|
var lastExtensionHandler: VimExtensionHandler? = null
|
||||||
|
var argumentCaptured: Argument? = null
|
||||||
|
|
||||||
|
private val keyStrokes = mutableListOf<KeyStroke>()
|
||||||
|
private val strings = mutableListOf<String>()
|
||||||
|
|
||||||
|
private var keystrokePointer = 0
|
||||||
|
private var stringPointer = 0
|
||||||
|
|
||||||
|
fun addKeystroke(key: KeyStroke) = keyStrokes.add(key)
|
||||||
|
fun addString(key: String) = strings.add(key)
|
||||||
|
|
||||||
|
fun consumeKeystroke(): KeyStroke? {
|
||||||
|
if (keystrokePointer in keyStrokes.indices) {
|
||||||
|
keystrokePointer += 1
|
||||||
|
return keyStrokes[keystrokePointer - 1]
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun consumeString(): String? {
|
||||||
|
if (stringPointer in strings.indices) {
|
||||||
|
stringPointer += 1
|
||||||
|
return strings[stringPointer - 1]
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun reset() {
|
||||||
|
keystrokePointer = 0
|
||||||
|
stringPointer = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clean() {
|
||||||
|
keyStrokes.clear()
|
||||||
|
strings.clear()
|
||||||
|
keystrokePointer = 0
|
||||||
|
stringPointer = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,35 +17,24 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change
|
package com.maddyhome.idea.vim.action.change
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.action.ComplicatedKeysAction
|
import com.maddyhome.idea.vim.action.ComplicatedKeysAction
|
||||||
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.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.StringHelper
|
||||||
|
import com.maddyhome.idea.vim.helper.UndoRedoHelper.undo
|
||||||
import java.awt.event.KeyEvent
|
import java.awt.event.KeyEvent
|
||||||
import javax.swing.KeyStroke
|
import javax.swing.KeyStroke
|
||||||
|
|
||||||
class UndoAction : VimActionHandler.SingleExecution(), ComplicatedKeysAction {
|
class UndoAction : VimActionHandler.SingleExecution(), ComplicatedKeysAction {
|
||||||
override val keyStrokesSet: Set<List<KeyStroke>> = setOf(
|
override val keyStrokesSet: Set<List<KeyStroke>> = setOf(
|
||||||
injector.parser.parseKeys("u"),
|
StringHelper.parseKeys("u"),
|
||||||
listOf(KeyStroke.getKeyStroke(KeyEvent.VK_UNDO, 0))
|
listOf(KeyStroke.getKeyStroke(KeyEvent.VK_UNDO, 0))
|
||||||
)
|
)
|
||||||
|
|
||||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean = undo(context)
|
||||||
editor: VimEditor,
|
|
||||||
context: ExecutionContext,
|
|
||||||
cmd: Command,
|
|
||||||
operatorArguments: OperatorArguments,
|
|
||||||
): Boolean {
|
|
||||||
var count = operatorArguments.count1
|
|
||||||
var result = injector.undo.undo(context)
|
|
||||||
while ((--count > 0) && result) {
|
|
||||||
result = injector.undo.undo(context)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -38,14 +38,14 @@ class AutoIndentLinesVisualAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.autoIndentRange(editor, caret, context, range.toVimTextRange(true))
|
VimPlugin.getChange().autoIndentRange(editor, caret, context, range.toVimTextRange(true))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.CharacterHelper
|
import com.maddyhome.idea.vim.helper.CharacterHelper
|
||||||
@ -36,14 +36,14 @@ class ChangeCaseLowerMotionAction : ChangeEditorActionHandler.ForEachCaret(), Du
|
|||||||
override val duplicateWith: Char = 'u'
|
override val duplicateWith: Char = 'u'
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return argument != null &&
|
return argument != null &&
|
||||||
injector.changeGroup
|
VimPlugin.getChange()
|
||||||
.changeCaseMotion(
|
.changeCaseMotion(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -28,6 +28,7 @@ import com.maddyhome.idea.vim.group.visual.VimSelection
|
|||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.CharacterHelper
|
import com.maddyhome.idea.vim.helper.CharacterHelper
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.getTopLevelEditor
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,14 +40,15 @@ class ChangeCaseLowerVisualAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup
|
val topLevelEditor = editor.getTopLevelEditor()
|
||||||
.changeCaseRange(editor, caret, range.toVimTextRange(false), CharacterHelper.CASE_LOWER)
|
return VimPlugin.getChange()
|
||||||
|
.changeCaseRange(topLevelEditor, caret, range.toVimTextRange(false), CharacterHelper.CASE_LOWER)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -30,12 +30,12 @@ class ChangeCaseToggleCharacterAction : ChangeEditorActionHandler.ForEachCaret()
|
|||||||
override val type: Command.Type = Command.Type.CHANGE
|
override val type: Command.Type = Command.Type.CHANGE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.changeCaseToggleCharacter(editor, caret, operatorArguments.count1)
|
return VimPlugin.getChange().changeCaseToggleCharacter(editor, caret, operatorArguments.count1)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.CharacterHelper
|
import com.maddyhome.idea.vim.helper.CharacterHelper
|
||||||
@ -36,14 +36,14 @@ class ChangeCaseToggleMotionAction : ChangeEditorActionHandler.ForEachCaret(), D
|
|||||||
override val duplicateWith: Char = '~'
|
override val duplicateWith: Char = '~'
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return argument != null &&
|
return argument != null &&
|
||||||
injector.changeGroup
|
VimPlugin.getChange()
|
||||||
.changeCaseMotion(
|
.changeCaseMotion(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -39,14 +39,14 @@ class ChangeCaseToggleVisualAction : VisualOperatorActionHandler.ForEachCaret()
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup
|
return VimPlugin.getChange()
|
||||||
.changeCaseRange(editor, caret, range.toVimTextRange(false), CharacterHelper.CASE_TOGGLE)
|
.changeCaseRange(editor, caret, range.toVimTextRange(false), CharacterHelper.CASE_TOGGLE)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.CharacterHelper
|
import com.maddyhome.idea.vim.helper.CharacterHelper
|
||||||
@ -36,14 +36,14 @@ class ChangeCaseUpperMotionAction : ChangeEditorActionHandler.ForEachCaret(), Du
|
|||||||
override val duplicateWith: Char = 'U'
|
override val duplicateWith: Char = 'U'
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return argument != null &&
|
return argument != null &&
|
||||||
injector.changeGroup
|
VimPlugin.getChange()
|
||||||
.changeCaseMotion(
|
.changeCaseMotion(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -39,14 +39,14 @@ class ChangeCaseUpperVisualAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup
|
return VimPlugin.getChange()
|
||||||
.changeCaseRange(editor, caret, range.toVimTextRange(false), CharacterHelper.CASE_UPPER)
|
.changeCaseRange(editor, caret, range.toVimTextRange(false), CharacterHelper.CASE_UPPER)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Caret
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class ChangeCharacterAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||||
|
override val type: Command.Type = Command.Type.CHANGE
|
||||||
|
|
||||||
|
override val argumentType: Argument.Type = Argument.Type.DIGRAPH
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_ALLOW_DIGRAPH)
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
caret: Caret,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
return argument != null && VimPlugin.getChange().changeCharacter(editor, caret, operatorArguments.count1, argument.character)
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -37,12 +37,12 @@ class ChangeCharactersAction : ChangeEditorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_NO_REPEAT_INSERT, FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_NO_REPEAT_INSERT, FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.changeCharacters(editor, caret, operatorArguments.count1)
|
return VimPlugin.getChange().changeCharacters(editor, caret, operatorArguments.count1)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -37,12 +37,12 @@ class ChangeEndOfLineAction : ChangeEditorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_NO_REPEAT_INSERT, FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_NO_REPEAT_INSERT, FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.changeEndOfLine(editor, caret, operatorArguments.count1)
|
return VimPlugin.getChange().changeEndOfLine(editor, caret, operatorArguments.count1)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,27 +17,28 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.ex.ranges.LineRange
|
import com.maddyhome.idea.vim.ex.ranges.LineRange
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||||
import com.maddyhome.idea.vim.vimscript.model.Script
|
import com.maddyhome.idea.vim.vimscript.model.Script
|
||||||
|
|
||||||
class ChangeLastGlobalSearchReplaceAction : ChangeEditorActionHandler.SingleExecution() {
|
class ChangeLastGlobalSearchReplaceAction : ChangeEditorActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val range = LineRange(0, editor.lineCount() - 1)
|
val range = LineRange(0, EditorHelper.getLineCount(editor) - 1)
|
||||||
return injector.searchGroup
|
return VimPlugin.getSearch()
|
||||||
.processSubstituteCommand(editor, editor.primaryCaret(), range, "s", "//~/&", Script(listOf()))
|
.processSubstituteCommand(editor, editor.caretModel.primaryCaret, range, "s", "//~/&", Script(listOf()))
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -31,17 +31,15 @@ class ChangeLastSearchReplaceAction : ChangeEditorActionHandler.SingleExecution(
|
|||||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
var result = true
|
var result = true
|
||||||
for (caret in editor.carets()) {
|
for (caret in editor.caretModel.allCarets) {
|
||||||
val line = caret.getLogicalPosition().line
|
val line = caret.logicalPosition.line
|
||||||
if (!injector.searchGroup
|
if (!VimPlugin.getSearch().processSubstituteCommand(editor, caret, LineRange(line, line), "s", "//~/", Script(listOf()))) {
|
||||||
.processSubstituteCommand(editor, caret, LineRange(line, line), "s", "//~/", Script(listOf()))
|
|
||||||
) {
|
|
||||||
result = false
|
result = false
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,11 +17,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Caret
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.action.motion.updown.MotionDownLess1FirstNonSpaceAction
|
import com.maddyhome.idea.vim.action.motion.updown.MotionDownLess1FirstNonSpaceAction
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.api.injector
|
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -38,16 +38,16 @@ class ChangeLineAction : ChangeEditorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_NO_REPEAT_INSERT, FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_NO_REPEAT_INSERT, FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
// `S` command is a synonym of `cc`
|
// `S` command is a synonym of `cc`
|
||||||
val motion = MotionDownLess1FirstNonSpaceAction()
|
val motion = MotionDownLess1FirstNonSpaceAction()
|
||||||
val command = Command(1, motion, motion.type, motion.flags)
|
val command = Command(1, motion, motion.type, motion.flags)
|
||||||
return injector.changeGroup.changeMotion(
|
return VimPlugin.getChange().changeMotion(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
||||||
context,
|
context,
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
|
||||||
@ -35,13 +35,13 @@ class ChangeMotionAction : ChangeEditorActionHandler.ForEachCaret(), DuplicableO
|
|||||||
override val duplicateWith: Char = 'c'
|
override val duplicateWith: Char = 'c'
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return argument != null && injector.changeGroup.changeMotion(
|
return argument != null && VimPlugin.getChange().changeMotion(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
||||||
context,
|
context,
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.CommandState
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
@ -35,21 +34,12 @@ class ChangeReplaceAction : ChangeEditorActionHandler.SingleExecution() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
changeReplace(editor, context)
|
VimPlugin.getChange().changeReplace(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Begin Replace mode
|
|
||||||
* @param editor The editor to replace in
|
|
||||||
* @param context The data context
|
|
||||||
*/
|
|
||||||
private fun changeReplace(editor: VimEditor, context: ExecutionContext) {
|
|
||||||
injector.changeGroup.initInsert(editor, context, CommandState.Mode.REPLACE)
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -38,14 +38,14 @@ class ChangeVisualAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO, CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO, CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.changeRange(
|
return VimPlugin.getChange().changeRange(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
||||||
range.toVimTextRange(false),
|
range.toVimTextRange(false),
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,17 +17,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.common.TextRange
|
|
||||||
import com.maddyhome.idea.vim.diagnostic.debug
|
|
||||||
import com.maddyhome.idea.vim.diagnostic.vimLogger
|
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
@ -44,40 +41,15 @@ class ChangeVisualCharacterAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_ALLOW_DIGRAPH, CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_ALLOW_DIGRAPH, CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val argument = cmd.argument
|
val argument = cmd.argument
|
||||||
return argument != null &&
|
return argument != null &&
|
||||||
changeCharacterRange(editor, range.toVimTextRange(false), argument.character)
|
VimPlugin.getChange().changeCharacterRange(editor, range.toVimTextRange(false), argument.character)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val logger = vimLogger<ChangeVisualCharacterAction>()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Each character in the supplied range gets replaced with the character ch
|
|
||||||
*
|
|
||||||
* @param editor The editor to change
|
|
||||||
* @param range The range to change
|
|
||||||
* @param ch The replacing character
|
|
||||||
* @return true if able to change the range, false if not
|
|
||||||
*/
|
|
||||||
private fun changeCharacterRange(editor: VimEditor, range: TextRange, ch: Char): Boolean {
|
|
||||||
logger.debug { "change range: $range to $ch" }
|
|
||||||
val chars = editor.text()
|
|
||||||
val starts = range.startOffsets
|
|
||||||
val ends = range.endOffsets
|
|
||||||
for (j in ends.indices.reversed()) {
|
|
||||||
for (i in starts[j] until ends[j]) {
|
|
||||||
if (i < chars.length && '\n' != chars[i]) {
|
|
||||||
injector.changeGroup.replaceText(editor, i, i + 1, Character.toString(ch))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags.FLAG_EXIT_VISUAL
|
import com.maddyhome.idea.vim.command.CommandFlags.FLAG_EXIT_VISUAL
|
||||||
@ -31,7 +31,9 @@ import com.maddyhome.idea.vim.command.SelectionType
|
|||||||
import com.maddyhome.idea.vim.common.TextRange
|
import com.maddyhome.idea.vim.common.TextRange
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.fileSize
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,21 +45,21 @@ class ChangeVisualLinesAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_MOT_LINEWISE, FLAG_MULTIKEY_UNDO, FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_MOT_LINEWISE, FLAG_MULTIKEY_UNDO, FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val textRange = range.toVimTextRange(true)
|
val textRange = range.toVimTextRange(true)
|
||||||
val lineEndForOffset = injector.engineEditorHelper.getLineEndForOffset(editor, textRange.endOffset)
|
val lineEndForOffset = EditorHelper.getLineEndForOffset(editor, textRange.endOffset)
|
||||||
val endsWithNewLine = if (lineEndForOffset.toLong() == editor.fileSize()) 0 else 1
|
val endsWithNewLine = if (lineEndForOffset == editor.fileSize) 0 else 1
|
||||||
val lineRange = TextRange(
|
val lineRange = TextRange(
|
||||||
injector.engineEditorHelper.getLineStartForOffset(editor, textRange.startOffset),
|
EditorHelper.getLineStartForOffset(editor, textRange.startOffset),
|
||||||
lineEndForOffset + endsWithNewLine
|
lineEndForOffset + endsWithNewLine
|
||||||
)
|
)
|
||||||
return injector.changeGroup.changeRange(
|
return VimPlugin.getChange().changeRange(
|
||||||
editor,
|
editor,
|
||||||
caret,
|
caret,
|
||||||
lineRange,
|
lineRange,
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags.FLAG_EXIT_VISUAL
|
import com.maddyhome.idea.vim.command.CommandFlags.FLAG_EXIT_VISUAL
|
||||||
@ -31,7 +31,9 @@ import com.maddyhome.idea.vim.command.SelectionType
|
|||||||
import com.maddyhome.idea.vim.common.TextRange
|
import com.maddyhome.idea.vim.common.TextRange
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.fileSize
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,9 +45,9 @@ class ChangeVisualLinesEndAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_MOT_LINEWISE, FLAG_MULTIKEY_UNDO, FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(FLAG_MOT_LINEWISE, FLAG_MULTIKEY_UNDO, FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
@ -56,19 +58,19 @@ class ChangeVisualLinesEndAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
val ends = vimTextRange.endOffsets
|
val ends = vimTextRange.endOffsets
|
||||||
for (i in starts.indices) {
|
for (i in starts.indices) {
|
||||||
if (ends[i] > starts[i]) {
|
if (ends[i] > starts[i]) {
|
||||||
ends[i] = injector.engineEditorHelper.getLineEndForOffset(editor, starts[i])
|
ends[i] = EditorHelper.getLineEndForOffset(editor, starts[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val blockRange = TextRange(starts, ends)
|
val blockRange = TextRange(starts, ends)
|
||||||
injector.changeGroup.changeRange(editor, caret, blockRange, SelectionType.BLOCK_WISE, context)
|
VimPlugin.getChange().changeRange(editor, caret, blockRange, SelectionType.BLOCK_WISE, context)
|
||||||
} else {
|
} else {
|
||||||
val lineEndForOffset = injector.engineEditorHelper.getLineEndForOffset(editor, vimTextRange.endOffset)
|
val lineEndForOffset = EditorHelper.getLineEndForOffset(editor, vimTextRange.endOffset)
|
||||||
val endsWithNewLine = if (lineEndForOffset.toLong() == editor.fileSize()) 0 else 1
|
val endsWithNewLine = if (lineEndForOffset == editor.fileSize) 0 else 1
|
||||||
val lineRange = TextRange(
|
val lineRange = TextRange(
|
||||||
injector.engineEditorHelper.getLineStartForOffset(editor, vimTextRange.startOffset),
|
EditorHelper.getLineStartForOffset(editor, vimTextRange.startOffset),
|
||||||
lineEndForOffset + endsWithNewLine
|
lineEndForOffset + endsWithNewLine
|
||||||
)
|
)
|
||||||
injector.changeGroup.changeRange(editor, caret, lineRange, SelectionType.LINE_WISE, context)
|
VimPlugin.getChange().changeRange(editor, caret, lineRange, SelectionType.LINE_WISE, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -18,13 +18,14 @@
|
|||||||
|
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.group.MotionGroup
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.endOffsetInclusive
|
import com.maddyhome.idea.vim.helper.endOffsetInclusive
|
||||||
|
|
||||||
@ -36,21 +37,26 @@ class FilterMotionAction : VimActionHandler.SingleExecution(), DuplicableOperato
|
|||||||
|
|
||||||
override val duplicateWith: Char = '!'
|
override val duplicateWith: Char = '!'
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
val argument = cmd.argument ?: return false
|
val argument = cmd.argument ?: return false
|
||||||
val range = injector.motion.getMotionRange(editor, editor.primaryCaret(), context, argument, operatorArguments)
|
val range = MotionGroup
|
||||||
|
.getMotionRange(
|
||||||
|
editor, editor.caretModel.primaryCaret, context,
|
||||||
|
argument,
|
||||||
|
operatorArguments
|
||||||
|
)
|
||||||
?: return false
|
?: return false
|
||||||
|
|
||||||
val current = editor.currentCaret().getLogicalPosition()
|
val current = editor.caretModel.logicalPosition
|
||||||
val start = editor.offsetToLogicalPosition(range.startOffset)
|
val start = editor.offsetToLogicalPosition(range.startOffset)
|
||||||
val end = editor.offsetToLogicalPosition(range.endOffsetInclusive)
|
val end = editor.offsetToLogicalPosition(range.endOffsetInclusive)
|
||||||
if (current.line != start.line) {
|
if (current.line != start.line) {
|
||||||
injector.motion.moveCaret(editor, editor.primaryCaret(), range.startOffset)
|
MotionGroup.moveCaret(editor, editor.caretModel.primaryCaret, range.startOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
val count = if (start.line < end.line) end.line - start.line + 1 else 1
|
val count = if (start.line < end.line) end.line - start.line + 1 else 1
|
||||||
|
|
||||||
injector.processGroup.startFilterCommand(editor, context, Argument.EMPTY_COMMAND.copy(rawCount = count))
|
VimPlugin.getProcess().startFilterCommand(editor, context, Argument.EMPTY_COMMAND.copy(rawCount = count))
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,14 +17,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.exitVisualMode
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,9 +36,9 @@ class FilterVisualLinesAction : VimActionHandler.SingleExecution() {
|
|||||||
|
|
||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE)
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
injector.processGroup.startFilterCommand(editor, context, cmd)
|
VimPlugin.getProcess().startFilterCommand(editor, context, cmd)
|
||||||
editor.exitVisualModeNative()
|
editor.exitVisualMode()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
|
||||||
@ -35,13 +35,13 @@ class ReformatCodeMotionAction : ChangeEditorActionHandler.ForEachCaret(), Dupli
|
|||||||
override val duplicateWith: Char = 'q'
|
override val duplicateWith: Char = 'q'
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return argument != null &&
|
return argument != null &&
|
||||||
injector.changeGroup.reformatCodeMotion(editor, caret, context, argument, operatorArguments)
|
VimPlugin.getChange().reformatCodeMotion(editor, caret, context, argument, operatorArguments)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change
|
package com.maddyhome.idea.vim.action.change.change
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -38,14 +38,14 @@ class ReformatCodeVisualAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.reformatCodeSelection(editor, caret, range)
|
VimPlugin.getChange().reformatCodeSelection(editor, caret, range)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change.number
|
package com.maddyhome.idea.vim.action.change.change.number
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -30,13 +30,13 @@ sealed class IncAction(val inc: Int) : ChangeEditorActionHandler.ForEachCaret()
|
|||||||
override val type: Command.Type = Command.Type.CHANGE
|
override val type: Command.Type = Command.Type.CHANGE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.changeNumber(editor, caret, inc * operatorArguments.count1)
|
return VimPlugin.getChange().changeNumber(editor, caret, inc * operatorArguments.count1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.change.number
|
package com.maddyhome.idea.vim.action.change.change.number
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -34,14 +34,15 @@ sealed class IncNumber(val inc: Int, private val avalanche: Boolean) : VisualOpe
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.changeNumberVisualMode(editor, caret, range.toVimTextRange(false), inc * cmd.count, avalanche)
|
return VimPlugin.getChange()
|
||||||
|
.changeNumberVisualMode(editor, caret, range.toVimTextRange(false), inc * cmd.count, avalanche)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -34,12 +34,12 @@ abstract class DeleteCharacter(private val countModifier: (Int) -> Int) : Change
|
|||||||
override val type: Command.Type = Command.Type.DELETE
|
override val type: Command.Type = Command.Type.DELETE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.deleteCharacter(editor, caret, countModifier(operatorArguments.count1), false)
|
return VimPlugin.getChange().deleteCharacter(editor, caret, countModifier(operatorArguments.count1), false)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -30,12 +30,12 @@ class DeleteEndOfLineAction : ChangeEditorActionHandler.ForEachCaret() {
|
|||||||
override val type: Command.Type = Command.Type.DELETE
|
override val type: Command.Type = Command.Type.DELETE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
return injector.changeGroup.deleteEndOfLine(editor, caret, operatorArguments.count1)
|
return VimPlugin.getChange().deleteEndOfLine(editor, caret, operatorArguments.count1)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,38 +17,38 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.intellij.openapi.util.Ref
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService
|
|
||||||
|
|
||||||
class DeleteJoinLinesAction : ChangeEditorActionHandler.SingleExecution() {
|
class DeleteJoinLinesAction : ChangeEditorActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.DELETE
|
override val type: Command.Type = Command.Type.DELETE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (editor.isOneLineMode()) return false
|
if (editor.isOneLineMode) return false
|
||||||
if (injector.optionService.isSet(OptionScope.LOCAL(editor), IjVimOptionService.ideajoinName)) {
|
if (VimPlugin.getOptionService().isSet(OptionService.Scope.LOCAL(editor), "ideajoin")) {
|
||||||
return injector.changeGroup.joinViaIdeaByCount(editor, context, operatorArguments.count1)
|
return VimPlugin.getChange().joinViaIdeaByCount(editor, context, operatorArguments.count1)
|
||||||
}
|
}
|
||||||
injector.editorGroup.notifyIdeaJoin(editor)
|
VimPlugin.getEditor().notifyIdeaJoin(editor.project)
|
||||||
val res = arrayOf(true)
|
val res = Ref.create(true)
|
||||||
editor.forEachNativeCaret(
|
editor.caretModel.runForEachCaret(
|
||||||
{ caret: VimCaret ->
|
{ caret: Caret ->
|
||||||
if (!injector.changeGroup.deleteJoinLines(editor, caret, operatorArguments.count1, false)) res[0] = false
|
if (!VimPlugin.getChange().deleteJoinLines(editor, caret, operatorArguments.count1, false)) res.set(false)
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
return res[0]
|
return res.get()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,38 +17,38 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.intellij.openapi.util.Ref
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService
|
|
||||||
|
|
||||||
class DeleteJoinLinesSpacesAction : ChangeEditorActionHandler.SingleExecution() {
|
class DeleteJoinLinesSpacesAction : ChangeEditorActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.DELETE
|
override val type: Command.Type = Command.Type.DELETE
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (editor.isOneLineMode()) return false
|
if (editor.isOneLineMode) return false
|
||||||
if (injector.optionService.isSet(OptionScope.LOCAL(editor), IjVimOptionService.ideajoinName)) {
|
if (VimPlugin.getOptionService().isSet(OptionService.Scope.LOCAL(editor), "ideajoin")) {
|
||||||
return injector.changeGroup.joinViaIdeaByCount(editor, context, operatorArguments.count1)
|
return VimPlugin.getChange().joinViaIdeaByCount(editor, context, operatorArguments.count1)
|
||||||
}
|
}
|
||||||
injector.editorGroup.notifyIdeaJoin(editor)
|
VimPlugin.getEditor().notifyIdeaJoin(editor.project)
|
||||||
val res = arrayOf(true)
|
val res = Ref.create(true)
|
||||||
editor.forEachNativeCaret(
|
editor.caretModel.runForEachCaret(
|
||||||
{ caret: VimCaret ->
|
{ caret: Caret ->
|
||||||
if (!injector.changeGroup.deleteJoinLines(editor, caret, operatorArguments.count1, true)) res[0] = false
|
if (!VimPlugin.getChange().deleteJoinLines(editor, caret, operatorArguments.count1, true)) res.set(false)
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
return res[0]
|
return res.get()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,18 +17,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.intellij.openapi.util.Ref
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,28 +40,28 @@ class DeleteJoinVisualLinesAction : VisualOperatorActionHandler.SingleExecution(
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeForAllCarets(
|
override fun executeForAllCarets(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
caretsAndSelections: Map<VimCaret, VimSelection>,
|
caretsAndSelections: Map<Caret, VimSelection>,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (editor.isOneLineMode()) return false
|
if (editor.isOneLineMode) return false
|
||||||
if (injector.optionService.isSet(OptionScope.LOCAL(editor), IjVimOptionService.ideajoinName)) {
|
if (VimPlugin.getOptionService().isSet(OptionService.Scope.LOCAL(editor), "ideajoin")) {
|
||||||
injector.changeGroup.joinViaIdeaBySelections(editor, context, caretsAndSelections)
|
VimPlugin.getChange().joinViaIdeaBySelections(editor, context, caretsAndSelections)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
val res = arrayOf(true)
|
val res = Ref.create(true)
|
||||||
editor.forEachNativeCaret(
|
editor.caretModel.runForEachCaret(
|
||||||
{
|
{ caret: Caret ->
|
||||||
caret: VimCaret ->
|
if (!caret.isValid) return@runForEachCaret
|
||||||
if (!caret.isValid) return@forEachNativeCaret
|
val range = caretsAndSelections[caret] ?: return@runForEachCaret
|
||||||
val range = caretsAndSelections[caret] ?: return@forEachNativeCaret
|
if (!VimPlugin.getChange().deleteJoinRange(editor, caret, range.toVimTextRange(true).normalize(), false)) {
|
||||||
if (!injector.changeGroup.deleteJoinRange(editor, caret, range.toVimTextRange(true).normalize(), false)) {
|
res.set(false)
|
||||||
res[0] = false
|
|
||||||
}
|
}
|
||||||
}, true
|
},
|
||||||
|
true
|
||||||
)
|
)
|
||||||
return res[0]
|
return res.get()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,18 +17,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.intellij.openapi.util.Ref
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,28 +40,28 @@ class DeleteJoinVisualLinesSpacesAction : VisualOperatorActionHandler.SingleExec
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeForAllCarets(
|
override fun executeForAllCarets(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
caretsAndSelections: Map<VimCaret, VimSelection>,
|
caretsAndSelections: Map<Caret, VimSelection>,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (editor.isOneLineMode()) return false
|
if (editor.isOneLineMode) return false
|
||||||
if (injector.optionService.isSet(OptionScope.LOCAL(editor), IjVimOptionService.ideajoinName)) {
|
if (VimPlugin.getOptionService().isSet(OptionService.Scope.LOCAL(editor), "ideajoin")) {
|
||||||
injector.changeGroup.joinViaIdeaBySelections(editor, context, caretsAndSelections)
|
VimPlugin.getChange().joinViaIdeaBySelections(editor, context, caretsAndSelections)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
val res = arrayOf(true)
|
val res = Ref.create(true)
|
||||||
editor.forEachNativeCaret(
|
editor.caretModel.runForEachCaret(
|
||||||
{ caret: VimCaret ->
|
{ caret: Caret ->
|
||||||
if (!caret.isValid) return@forEachNativeCaret
|
if (!caret.isValid) return@runForEachCaret
|
||||||
val range = caretsAndSelections[caret] ?: return@forEachNativeCaret
|
val range = caretsAndSelections[caret] ?: return@runForEachCaret
|
||||||
if (!injector.changeGroup.deleteJoinRange(editor, caret, range.toVimTextRange(true).normalize(), true)) {
|
if (!VimPlugin.getChange().deleteJoinRange(editor, caret, range.toVimTextRange(true).normalize(), true)) {
|
||||||
res[0] = false
|
res.set(false)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
return res[0]
|
return res.get()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,17 +17,17 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.action.DuplicableOperatorAction
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.DuplicableOperatorAction
|
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.group.deleteRange
|
||||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
import com.maddyhome.idea.vim.options.OptionConstants
|
import com.maddyhome.idea.vim.vimscript.services.OptionService
|
||||||
import com.maddyhome.idea.vim.options.OptionScope
|
|
||||||
|
|
||||||
class DeleteMotionAction : ChangeEditorActionHandler.ForEachCaret(), DuplicableOperatorAction {
|
class DeleteMotionAction : ChangeEditorActionHandler.ForEachCaret(), DuplicableOperatorAction {
|
||||||
override val type: Command.Type = Command.Type.DELETE
|
override val type: Command.Type = Command.Type.DELETE
|
||||||
@ -37,23 +37,23 @@ class DeleteMotionAction : ChangeEditorActionHandler.ForEachCaret(), DuplicableO
|
|||||||
override val duplicateWith: Char = 'd'
|
override val duplicateWith: Char = 'd'
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (argument == null) return false
|
if (argument == null) return false
|
||||||
if (injector.optionService.isSet(OptionScope.GLOBAL, OptionConstants.experimentalapiName)) {
|
if (VimPlugin.getOptionService().isSet(OptionService.Scope.GLOBAL, "experimentalapi")) {
|
||||||
val (first, second) = injector.changeGroup
|
val (first, second) = VimPlugin.getChange()
|
||||||
.getDeleteRangeAndType2(editor, caret, context, argument, false, operatorArguments)
|
.getDeleteRangeAndType2(editor, caret, context, argument, false, operatorArguments)
|
||||||
?: return false
|
?: return false
|
||||||
return injector.changeGroup.deleteRange2(editor, caret, first, second)
|
return deleteRange(editor, caret, first, second)
|
||||||
} else {
|
} else {
|
||||||
val (first, second) = injector.changeGroup
|
val (first, second) = VimPlugin.getChange()
|
||||||
.getDeleteRangeAndType(editor, caret, context, argument, false, operatorArguments)
|
.getDeleteRangeAndType(editor, caret, context, argument, false, operatorArguments)
|
||||||
?: return false
|
?: return false
|
||||||
return injector.changeGroup.deleteRange(editor, caret, first, second, false)
|
return VimPlugin.getChange().deleteRange(editor, caret, first, second, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -38,14 +38,14 @@ class DeleteVisualAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val selectionType = range.type
|
val selectionType = range.type
|
||||||
return injector.changeGroup.deleteRange(editor, caret, range.toVimTextRange(false), selectionType, false)
|
return VimPlugin.getChange().deleteRange(editor, caret, range.toVimTextRange(false), selectionType, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -28,7 +28,9 @@ import com.maddyhome.idea.vim.command.SelectionType
|
|||||||
import com.maddyhome.idea.vim.common.TextRange
|
import com.maddyhome.idea.vim.common.TextRange
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.fileSize
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,27 +42,27 @@ class DeleteVisualLinesAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val textRange = range.toVimTextRange(false)
|
val textRange = range.toVimTextRange(false)
|
||||||
val (usedCaret, usedRange, usedType) = when (range.type) {
|
val (usedCaret, usedRange, usedType) = when (range.type) {
|
||||||
SelectionType.BLOCK_WISE -> Triple(editor.primaryCaret(), textRange, range.type)
|
SelectionType.BLOCK_WISE -> Triple(editor.caretModel.primaryCaret, textRange, range.type)
|
||||||
SelectionType.LINE_WISE -> Triple(caret, textRange, SelectionType.LINE_WISE)
|
SelectionType.LINE_WISE -> Triple(caret, textRange, SelectionType.LINE_WISE)
|
||||||
SelectionType.CHARACTER_WISE -> {
|
SelectionType.CHARACTER_WISE -> {
|
||||||
val lineEndForOffset = injector.engineEditorHelper.getLineEndForOffset(editor, textRange.endOffset)
|
val lineEndForOffset = EditorHelper.getLineEndForOffset(editor, textRange.endOffset)
|
||||||
val endsWithNewLine = if (lineEndForOffset.toLong() == editor.fileSize()) 0 else 1
|
val endsWithNewLine = if (lineEndForOffset == editor.fileSize) 0 else 1
|
||||||
val lineRange = TextRange(
|
val lineRange = TextRange(
|
||||||
injector.engineEditorHelper.getLineStartForOffset(editor, textRange.startOffset),
|
EditorHelper.getLineStartForOffset(editor, textRange.startOffset),
|
||||||
lineEndForOffset + endsWithNewLine
|
lineEndForOffset + endsWithNewLine
|
||||||
)
|
)
|
||||||
Triple(caret, lineRange, SelectionType.LINE_WISE)
|
Triple(caret, lineRange, SelectionType.LINE_WISE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return injector.changeGroup.deleteRange(editor, usedCaret, usedRange, usedType, false)
|
return VimPlugin.getChange().deleteRange(editor, usedCaret, usedRange, usedType, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.delete
|
package com.maddyhome.idea.vim.action.change.delete
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimCaret
|
import com.intellij.openapi.editor.Caret
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -28,7 +28,9 @@ import com.maddyhome.idea.vim.command.SelectionType
|
|||||||
import com.maddyhome.idea.vim.common.TextRange
|
import com.maddyhome.idea.vim.common.TextRange
|
||||||
import com.maddyhome.idea.vim.group.visual.VimSelection
|
import com.maddyhome.idea.vim.group.visual.VimSelection
|
||||||
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
import com.maddyhome.idea.vim.handler.VisualOperatorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.fileSize
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,9 +42,9 @@ class DeleteVisualLinesEndAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MOT_LINEWISE, CommandFlags.FLAG_EXIT_VISUAL)
|
||||||
|
|
||||||
override fun executeAction(
|
override fun executeAction(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
caret: VimCaret,
|
caret: Caret,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
range: VimSelection,
|
range: VimSelection,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
@ -53,19 +55,20 @@ class DeleteVisualLinesEndAction : VisualOperatorActionHandler.ForEachCaret() {
|
|||||||
val ends = vimTextRange.endOffsets
|
val ends = vimTextRange.endOffsets
|
||||||
for (i in starts.indices) {
|
for (i in starts.indices) {
|
||||||
if (ends[i] > starts[i]) {
|
if (ends[i] > starts[i]) {
|
||||||
ends[i] = injector.engineEditorHelper.getLineEndForOffset(editor, starts[i])
|
ends[i] = EditorHelper.getLineEndForOffset(editor, starts[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val blockRange = TextRange(starts, ends)
|
val blockRange = TextRange(starts, ends)
|
||||||
injector.changeGroup.deleteRange(editor, editor.primaryCaret(), blockRange, SelectionType.BLOCK_WISE, false)
|
VimPlugin.getChange()
|
||||||
|
.deleteRange(editor, editor.caretModel.primaryCaret, blockRange, SelectionType.BLOCK_WISE, false)
|
||||||
} else {
|
} else {
|
||||||
val lineEndForOffset = injector.engineEditorHelper.getLineEndForOffset(editor, vimTextRange.endOffset)
|
val lineEndForOffset = EditorHelper.getLineEndForOffset(editor, vimTextRange.endOffset)
|
||||||
val endsWithNewLine = if (lineEndForOffset.toLong() == editor.fileSize()) 0 else 1
|
val endsWithNewLine = if (lineEndForOffset == editor.fileSize) 0 else 1
|
||||||
val lineRange = TextRange(
|
val lineRange = TextRange(
|
||||||
injector.engineEditorHelper.getLineStartForOffset(editor, vimTextRange.startOffset),
|
EditorHelper.getLineStartForOffset(editor, vimTextRange.startOffset),
|
||||||
lineEndForOffset + endsWithNewLine
|
lineEndForOffset + endsWithNewLine
|
||||||
)
|
)
|
||||||
injector.changeGroup.deleteRange(editor, caret, lineRange, SelectionType.LINE_WISE, false)
|
VimPlugin.getChange().deleteRange(editor, caret, lineRange, SelectionType.LINE_WISE, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -34,12 +34,12 @@ class InsertAfterCursorAction : ChangeEditorActionHandler.SingleExecution() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.insertAfterCursor(editor, context)
|
VimPlugin.getChange().insertAfterCursor(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -34,12 +34,12 @@ class InsertAfterLineEndAction : ChangeEditorActionHandler.SingleExecution() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.insertAfterLineEnd(editor, context)
|
VimPlugin.getChange().insertAfterLineEnd(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -34,27 +34,12 @@ class InsertAtPreviousInsertAction : ChangeEditorActionHandler.SingleExecution()
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
insertAtPreviousInsert(editor, context)
|
VimPlugin.getChange().insertAtPreviousInsert(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Begin insert at the location of the previous insert
|
|
||||||
*
|
|
||||||
* @param editor The editor to insert into
|
|
||||||
*/
|
|
||||||
fun insertAtPreviousInsert(editor: VimEditor, context: ExecutionContext) {
|
|
||||||
editor.removeSecondaryCarets()
|
|
||||||
val caret = editor.primaryCaret()
|
|
||||||
val offset = injector.motion.moveCaretToMark(editor, '^', false)
|
|
||||||
if (offset != -1) {
|
|
||||||
caret.moveToOffset(offset)
|
|
||||||
}
|
|
||||||
injector.changeGroup.insertBeforeCursor(editor, context)
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -36,12 +36,12 @@ class InsertBeforeCursorAction : ChangeEditorActionHandler.SingleExecution() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.insertBeforeCursor(editor, context)
|
VimPlugin.getChange().insertBeforeCursor(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -34,12 +34,12 @@ class InsertBeforeFirstNonBlankAction : ChangeEditorActionHandler.SingleExecutio
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.insertBeforeFirstNonBlank(editor, context)
|
VimPlugin.getChange().insertBeforeFirstNonBlank(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Caret
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
|
||||||
|
class InsertCharacterAboveCursorAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
caret: Caret,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
return if (editor.isOneLineMode) {
|
||||||
|
false
|
||||||
|
} else VimPlugin.getChange().insertCharacterAroundCursor(editor, caret, -1)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Caret
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
|
||||||
|
class InsertCharacterBelowCursorAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
caret: Caret,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
return if (editor.isOneLineMode) {
|
||||||
|
false
|
||||||
|
} else VimPlugin.getChange().insertCharacterAroundCursor(editor, caret, 1)
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -18,9 +18,9 @@
|
|||||||
|
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
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.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -31,7 +31,7 @@ class InsertCompletedDigraphAction : VimActionHandler.SingleExecution() {
|
|||||||
override val type: Command.Type = Command.Type.INSERT
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
override val argumentType: Argument.Type = Argument.Type.DIGRAPH
|
override val argumentType: Argument.Type = Argument.Type.DIGRAPH
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
// The converted digraph character has been captured as an argument, push it back through key handler
|
// The converted digraph character has been captured as an argument, push it back through key handler
|
||||||
val keyStroke = KeyStroke.getKeyStroke(cmd.argument!!.character)
|
val keyStroke = KeyStroke.getKeyStroke(cmd.argument!!.character)
|
||||||
KeyHandler.getInstance().handleKey(editor, keyStroke, context)
|
KeyHandler.getInstance().handleKey(editor, keyStroke, context)
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -18,9 +18,9 @@
|
|||||||
|
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
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.VimEditor
|
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -31,7 +31,7 @@ class InsertCompletedLiteralAction : VimActionHandler.SingleExecution() {
|
|||||||
override val type: Command.Type = Command.Type.INSERT
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
override val argumentType: Argument.Type = Argument.Type.DIGRAPH
|
override val argumentType: Argument.Type = Argument.Type.DIGRAPH
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
// The converted literal character has been captured as an argument, push it back through key handler
|
// The converted literal character has been captured as an argument, push it back through key handler
|
||||||
val keyStroke = KeyStroke.getKeyStroke(cmd.argument!!.character)
|
val keyStroke = KeyStroke.getKeyStroke(cmd.argument!!.character)
|
||||||
KeyHandler.getInstance().handleKey(editor, keyStroke, context)
|
KeyHandler.getInstance().handleKey(editor, keyStroke, context)
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Caret
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class InsertDeleteInsertedTextAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_CLEAR_STROKES)
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
caret: Caret,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
return VimPlugin.getChange().insertDeleteInsertedText(editor, caret)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Caret
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class InsertDeletePreviousWordAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_CLEAR_STROKES)
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
caret: Caret,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
return VimPlugin.getChange().insertDeletePreviousWord(editor, caret)
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,14 +17,16 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.group.MotionGroup
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.helper.getTopLevelEditor
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class InsertEnterAction : VimActionHandler.SingleExecution() {
|
class InsertEnterAction : VimActionHandler.SingleExecution() {
|
||||||
@ -32,9 +34,9 @@ class InsertEnterAction : VimActionHandler.SingleExecution() {
|
|||||||
|
|
||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_SAVE_STROKE)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_SAVE_STROKE)
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
injector.changeGroup.processEnter(editor, context)
|
VimPlugin.getChange().processEnter(editor.getTopLevelEditor(), context)
|
||||||
injector.motion.scrollCaretIntoView(editor)
|
MotionGroup.scrollCaretIntoView(editor)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,16 +17,17 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.exitInsertMode
|
||||||
|
|
||||||
class InsertExitModeAction : VimActionHandler.SingleExecution() {
|
class InsertExitModeAction : VimActionHandler.SingleExecution() {
|
||||||
override val type: Command.Type = Command.Type.INSERT
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
editor.exitInsertMode(context, operatorArguments)
|
editor.exitInsertMode(context, operatorArguments)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,13 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
import com.maddyhome.idea.vim.helper.commandState
|
|
||||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -32,18 +32,8 @@ class InsertInsertAction : VimActionHandler.SingleExecution() {
|
|||||||
|
|
||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_SAVE_STROKE)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_SAVE_STROKE)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
editor: VimEditor,
|
VimPlugin.getChange().processInsert(editor)
|
||||||
context: ExecutionContext,
|
|
||||||
cmd: Command,
|
|
||||||
operatorArguments: OperatorArguments,
|
|
||||||
): Boolean {
|
|
||||||
processInsert(editor)
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processInsert(editor: VimEditor) {
|
|
||||||
editor.insertMode = !editor.insertMode
|
|
||||||
editor.commandState.toggleInsertOverwrite()
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.maddyhome.idea.vim.api.VimEditor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.CommandFlags
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
@ -34,12 +34,12 @@ class InsertLineStartAction : ChangeEditorActionHandler.SingleExecution() {
|
|||||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.insertLineStart(editor, context)
|
VimPlugin.getChange().insertLineStart(editor, context)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class InsertNewLineAboveAction : ChangeEditorActionHandler.SingleExecution() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
if (editor.isOneLineMode) return false
|
||||||
|
VimPlugin.getChange().insertNewLineAbove(editor, context)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class InsertNewLineBelowAction : ChangeEditorActionHandler.SingleExecution() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_MULTIKEY_UNDO)
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
if (editor.isOneLineMode) return false
|
||||||
|
VimPlugin.getChange().insertNewLineBelow(editor, context)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||||
|
|
||||||
|
class InsertPreviousInsertAction : ChangeEditorActionHandler.SingleExecution() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override fun execute(
|
||||||
|
editor: Editor,
|
||||||
|
context: DataContext,
|
||||||
|
argument: Argument?,
|
||||||
|
operatorArguments: OperatorArguments,
|
||||||
|
): Boolean {
|
||||||
|
VimPlugin.getChange().insertPreviousInsert(editor, context, false, operatorArguments)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
* Copyright (C) 2003-2022 The IdeaVim authors
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.maddyhome.idea.vim.action.change.insert
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.action.ComplicatedKeysAction
|
import com.maddyhome.idea.vim.action.ComplicatedKeysAction
|
||||||
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.command.Argument
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
import com.maddyhome.idea.vim.command.Command
|
import com.maddyhome.idea.vim.command.Command
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
@ -28,20 +28,6 @@ import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
|||||||
import java.awt.event.KeyEvent
|
import java.awt.event.KeyEvent
|
||||||
import javax.swing.KeyStroke
|
import javax.swing.KeyStroke
|
||||||
|
|
||||||
class InsertPreviousInsertAction : ChangeEditorActionHandler.SingleExecution() {
|
|
||||||
override val type: Command.Type = Command.Type.INSERT
|
|
||||||
|
|
||||||
override fun execute(
|
|
||||||
editor: VimEditor,
|
|
||||||
context: ExecutionContext,
|
|
||||||
argument: Argument?,
|
|
||||||
operatorArguments: OperatorArguments,
|
|
||||||
): Boolean {
|
|
||||||
injector.changeGroup.insertPreviousInsert(editor, context, false, operatorArguments)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class InsertPreviousInsertExitAction : ChangeEditorActionHandler.SingleExecution(), ComplicatedKeysAction {
|
class InsertPreviousInsertExitAction : ChangeEditorActionHandler.SingleExecution(), ComplicatedKeysAction {
|
||||||
override val keyStrokesSet: Set<List<KeyStroke>> = setOf(
|
override val keyStrokesSet: Set<List<KeyStroke>> = setOf(
|
||||||
listOf(KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_DOWN_MASK or KeyEvent.SHIFT_DOWN_MASK)),
|
listOf(KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_DOWN_MASK or KeyEvent.SHIFT_DOWN_MASK)),
|
||||||
@ -52,12 +38,12 @@ class InsertPreviousInsertExitAction : ChangeEditorActionHandler.SingleExecution
|
|||||||
override val type: Command.Type = Command.Type.INSERT
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
override fun execute(
|
override fun execute(
|
||||||
editor: VimEditor,
|
editor: Editor,
|
||||||
context: ExecutionContext,
|
context: DataContext,
|
||||||
argument: Argument?,
|
argument: Argument?,
|
||||||
operatorArguments: OperatorArguments,
|
operatorArguments: OperatorArguments,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
injector.changeGroup.insertPreviousInsert(editor, context, true, operatorArguments)
|
VimPlugin.getChange().insertPreviousInsert(editor, context, true, operatorArguments)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||||
|
* Copyright (C) 2003-2021 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.action.change.insert
|
||||||
|
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
import com.intellij.openapi.components.ServiceManager
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
|
import com.maddyhome.idea.vim.command.Argument
|
||||||
|
import com.maddyhome.idea.vim.command.Command
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.ex.ExException
|
||||||
|
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.CommandLineHelper
|
||||||
|
import com.maddyhome.idea.vim.vimscript.model.Script
|
||||||
|
import com.maddyhome.idea.vim.vimscript.parser.VimscriptParser
|
||||||
|
|
||||||
|
class InsertRegisterAction : VimActionHandler.SingleExecution() {
|
||||||
|
override val type: Command.Type = Command.Type.INSERT
|
||||||
|
|
||||||
|
override val argumentType: Argument.Type = Argument.Type.CHARACTER
|
||||||
|
|
||||||
|
override fun execute(editor: Editor, context: DataContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
|
||||||
|
val argument = cmd.argument
|
||||||
|
|
||||||
|
if (argument?.character == '=') {
|
||||||
|
ApplicationManager.getApplication().invokeLater {
|
||||||
|
try {
|
||||||
|
val expression = readExpression(editor)
|
||||||
|
if (expression != null) {
|
||||||
|
if (expression.isNotEmpty()) {
|
||||||
|
val expressionValue = VimscriptParser.parseExpression(expression)?.evaluate(editor, context, Script(listOf()))
|
||||||
|
?: throw ExException("E15: Invalid expression: $expression")
|
||||||
|
val textToStore = expressionValue.toInsertableString()
|
||||||
|
VimPlugin.getRegister().storeTextSpecial('=', textToStore)
|
||||||
|
}
|
||||||
|
VimPlugin.getChange().insertRegister(editor, context, argument.character)
|
||||||
|
}
|
||||||
|
} catch (e: ExException) {
|
||||||
|
VimPlugin.indicateError()
|
||||||
|
VimPlugin.showMessage(e.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return argument != null && VimPlugin.getChange().insertRegister(editor, context, argument.character)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // [VERSION UPDATE] 212+ getService
|
||||||
|
private fun readExpression(editor: Editor): String? {
|
||||||
|
return ServiceManager.getService(CommandLineHelper::class.java).inputString(editor, "=", null)
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user