diff --git a/src/test/java/org/jetbrains/plugins/ideavim/action/change/insert/InsertEnterActionTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/action/change/insert/InsertEnterActionTest.kt index 4cbc5c07ad..7af80de4a9 100644 --- a/src/test/java/org/jetbrains/plugins/ideavim/action/change/insert/InsertEnterActionTest.kt +++ b/src/test/java/org/jetbrains/plugins/ideavim/action/change/insert/InsertEnterActionTest.kt @@ -119,6 +119,23 @@ class InsertEnterActionTest : VimTestCase() { doTest(listOf("i", ""), before, after, Mode.INSERT) } + @TestWithoutNeovim(SkipNeovimReason.CTRL_CODES) + @RepeatedTest(3) + fun `test insert enter with C-J`() { + val before = """Lorem ipsum dolor sit amet, + |${c}consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin() + val after = """Lorem ipsum dolor sit amet, + | + |${c}consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin() + doTest(listOf("i", ""), before, after, Mode.INSERT) + } + @TestWithoutNeovim(SkipNeovimReason.OPTION) @RepeatedTest(3) fun `test insert enter scrolls view up at scrolloff`() { @@ -156,4 +173,3 @@ internal class DestroyerHandlerSingle(private val nextHandler: EditorActionHandl return nextHandler.isEnabled(editor, caret, dataContext) } } - diff --git a/src/test/java/org/jetbrains/plugins/ideavim/action/motion/select/SelectEnterActionTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/action/motion/select/SelectEnterActionTest.kt new file mode 100644 index 0000000000..c348c154c9 --- /dev/null +++ b/src/test/java/org/jetbrains/plugins/ideavim/action/motion/select/SelectEnterActionTest.kt @@ -0,0 +1,97 @@ +/* + * Copyright 2003-2024 The IdeaVim authors + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE.txt file or at + * https://opensource.org/licenses/MIT. + */ + +@file:Suppress("RemoveCurlyBracesFromTemplate") + +package org.jetbrains.plugins.ideavim.action.motion.select + +import com.maddyhome.idea.vim.state.mode.Mode +import com.maddyhome.idea.vim.state.mode.SelectionType +import org.jetbrains.plugins.ideavim.SkipNeovimReason +import org.jetbrains.plugins.ideavim.TestWithoutNeovim +import org.jetbrains.plugins.ideavim.VimTestCase +import org.junit.jupiter.api.Test + +class SelectEnterActionTest : VimTestCase() { + @Test + fun `test enter in Select`() { + doTest( + "gh", + """ + |Lorem ipsum + | + |Lorem ip${c}sum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |Lorem ipsum + | + |Lorem ip + |${c}um dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.SELECT(SelectionType.CHARACTER_WISE), + ) + } + + @TestWithoutNeovim(SkipNeovimReason.CTRL_CODES) + @Test + fun `test CTRL-J in Select`() { + doTest( + "gh", + """ + |Lorem ipsum + | + |Lorem ip${c}sum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |Lorem ipsum + | + |Lorem ip + |${c}um dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.SELECT(SelectionType.CHARACTER_WISE), + ) + } + + @TestWithoutNeovim(SkipNeovimReason.CTRL_CODES) + @Test + fun `test CTRL-M in Select`() { + doTest( + "gh", + """ + |Lorem ipsum + | + |Lorem ip${c}sum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |Lorem ipsum + | + |Lorem ip + |${c}um dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.SELECT(SelectionType.CHARACTER_WISE), + ) + } +} diff --git a/src/test/java/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionTest.kt index c6aa9c91c6..b051ab9db7 100644 --- a/src/test/java/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionTest.kt +++ b/src/test/java/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionTest.kt @@ -22,6 +22,74 @@ import org.junit.jupiter.api.Test * @author Alex Plate */ class MotionDownActionTest : VimTestCase() { + @Test + fun `test motion down with CTRL-J`() { + doTest( + "", + """ + |Lorem ipsum + | + |Lorem ${c}ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |Lorem ipsum + | + |Lorem ipsum dolor sit amet, + |consec${c}tetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + ) + } + + @Test + fun `test motion down with CTRL-J in Visual`() { + doTest( + "v", + """ + |Lorem ipsum + | + |Lorem ${c}ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |Lorem ipsum + | + |Lorem ${s}ipsum dolor sit amet, + |consec${c}t${se}etur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.VISUAL(SelectionType.CHARACTER_WISE), + ) + } + + @Test + fun `test motion down with CTRL-J in Operator-pending`() { + doTest( + "d", + """ + |Lorem ipsum + | + |Lorem ${c}ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |Lorem ipsum + | + |${c}Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + ) + } + @Test fun `test motion down in visual block mode`() { val keys = "2kjjj" diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/change/insert/InsertEnterAction.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/change/insert/InsertEnterAction.kt index 035891d0a9..4adc7d8fb7 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/change/insert/InsertEnterAction.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/change/insert/InsertEnterAction.kt @@ -19,10 +19,9 @@ import com.maddyhome.idea.vim.handler.VimActionHandler import com.maddyhome.idea.vim.helper.enumSetOf import java.util.* -@CommandOrMotion(keys = ["", ""], modes = [Mode.INSERT]) +@CommandOrMotion(keys = ["", "", ""], modes = [Mode.INSERT]) class InsertEnterAction : VimActionHandler.SingleExecution() { override val type: Command.Type = Command.Type.INSERT - override val flags: EnumSet = enumSetOf(CommandFlags.FLAG_SAVE_STROKE) override fun execute( diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnterAction.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnterAction.kt index 2b65515982..475b4d96fc 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnterAction.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnterAction.kt @@ -21,9 +21,8 @@ import com.maddyhome.idea.vim.handler.VimActionHandler * @author Alex Plate */ -@CommandOrMotion(keys = [""], modes = [Mode.SELECT]) +@CommandOrMotion(keys = ["", "", ""], modes = [Mode.SELECT]) class SelectEnterAction : VimActionHandler.SingleExecution() { - override val type: Command.Type = Command.Type.INSERT override fun execute( diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/updown/MotionDownActions.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/updown/MotionDownActions.kt index 471aba75ab..53960002cb 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/updown/MotionDownActions.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/updown/MotionDownActions.kt @@ -21,7 +21,7 @@ import com.maddyhome.idea.vim.handler.Motion import com.maddyhome.idea.vim.handler.MotionActionHandler import com.maddyhome.idea.vim.handler.toMotion -@CommandOrMotion(keys = ["j"], modes = [Mode.NORMAL, Mode.VISUAL, Mode.OP_PENDING]) +@CommandOrMotion(keys = ["j", ""], modes = [Mode.NORMAL, Mode.VISUAL, Mode.OP_PENDING]) open class MotionDownAction : MotionActionHandler.ForEachCaret() { override val motionType: MotionType = MotionType.LINE_WISE override val keepFold: Boolean = true diff --git a/vim-engine/src/main/resources/ksp-generated/engine_commands.json b/vim-engine/src/main/resources/ksp-generated/engine_commands.json index b157eeeb8b..343750fc64 100644 --- a/vim-engine/src/main/resources/ksp-generated/engine_commands.json +++ b/vim-engine/src/main/resources/ksp-generated/engine_commands.json @@ -279,11 +279,26 @@ "class": "com.maddyhome.idea.vim.action.motion.mark.MotionJumpNextAction", "modes": "N" }, + { + "keys": "", + "class": "com.maddyhome.idea.vim.action.change.insert.InsertEnterAction", + "modes": "I" + }, { "keys": "", "class": "com.maddyhome.idea.vim.action.ex.ProcessExEntryAction", "modes": "C" }, + { + "keys": "", + "class": "com.maddyhome.idea.vim.action.motion.select.SelectEnterAction", + "modes": "S" + }, + { + "keys": "", + "class": "com.maddyhome.idea.vim.action.motion.updown.MotionDownAction", + "modes": "NXO" + }, { "keys": "", "class": "com.maddyhome.idea.vim.action.change.insert.InsertCompletedDigraphAction", @@ -314,6 +329,11 @@ "class": "com.maddyhome.idea.vim.action.ex.ProcessExEntryAction", "modes": "C" }, + { + "keys": "", + "class": "com.maddyhome.idea.vim.action.motion.select.SelectEnterAction", + "modes": "S" + }, { "keys": "", "class": "com.maddyhome.idea.vim.action.motion.updown.MotionDownFirstNonSpaceAction", @@ -664,6 +684,11 @@ "class": "com.maddyhome.idea.vim.action.ex.ProcessExEntryAction", "modes": "C" }, + { + "keys": "", + "class": "com.maddyhome.idea.vim.action.motion.select.SelectEnterAction", + "modes": "S" + }, { "keys": "", "class": "com.maddyhome.idea.vim.action.motion.updown.EnterNormalAction", @@ -714,11 +739,6 @@ "class": "com.maddyhome.idea.vim.action.motion.leftright.MotionLastColumnInsertAction", "modes": "I" }, - { - "keys": "", - "class": "com.maddyhome.idea.vim.action.motion.select.SelectEnterAction", - "modes": "S" - }, { "keys": "", "class": "com.maddyhome.idea.vim.action.change.insert.InsertExitModeAction",