Commit Graph
1961 Commits
Author SHA1 Message Date
Matt Ellis 01a612ad60 Add insert filename under caret action 2025-09-05 12:37:45 +03:00
Matt Ellis 606e5c6a9f Add 'isfname' option, not yet applied
Relates to VIM-4018
2025-09-05 12:37:45 +03:00
Matt Ellis 93ef18b32c Remove unnecessary JvmField annotations 2025-09-05 12:37:45 +03:00
Matt Ellis fa4c62ebde Add insert big word at cursor literally action
Relates to VIM-2511
2025-09-05 12:37:45 +03:00
Matt Ellis c5f6b2e336 Add insert big word at cursor command line action
Relates to VIM-2511
2025-09-05 12:37:45 +03:00
Matt Ellis 1e27220eaa Support insert word literally
Inserting a word and inserting it literally is the same operation. No need for another action

Fixes VIM-2511
2025-09-05 12:37:45 +03:00
Matt Ellis b5484345f8 Add insert word under caret action for command line
Fixes VIM-2511
2025-09-05 12:37:45 +03:00
Matt Ellis 5d68ba26c2 Add insert current line literally action 2025-09-05 12:37:45 +03:00
Matt Ellis 5c8ca893e1 Insert current line by replaying keys 2025-09-05 12:37:45 +03:00
Matt Ellis 6aff6a07af Add insert current line in command line
Fixes VIM-2511
2025-09-05 12:37:45 +03:00
Matt Ellis c580aaceed Add insert register literally action
Fixes VIM-2511
2025-09-05 12:37:45 +03:00
Matt Ellis d204860a26 Remove write action from insert register action
Fixes VIM-3650
2025-09-05 12:37:45 +03:00
Matt Ellis 4bd4aefaca Add minor optimisation for simple register contents 2025-09-05 12:37:45 +03:00
Matt Ellis 161bb2b28b Insert register by replaying keys 2025-09-05 12:37:45 +03:00
Matt Ellis 4be143f4ff Fix move caret to previous big word to match Vim
The docs says it moves to the previous WORD, but in practice it moves to the previous whitespace character
2025-09-05 12:37:45 +03:00
Matt Ellis 4a86af9071 Fix move caret to next big word to match Vim
The docs says it moves to the next WORD, but in practice it moves to the next whitespace character
2025-09-05 12:37:45 +03:00
Matt Ellis 9a5339d8af Fix delete to use word instead of WORD 2025-09-05 12:37:45 +03:00
Matt Ellis 1a566b70d9 Add cmd history before executing
But save to register after executing. Matches Vim behaviour
2025-09-05 12:37:45 +03:00
Matt Ellis b4eee5d45e Show indicator for current history entry 2025-09-05 12:37:45 +03:00
Matt Ellis 30dae9f4d9 Rename HistoryDownFilterAction and add tests 2025-09-05 12:37:45 +03:00
Matt Ellis 3ca51d0361 Rename HistoryDownAction and add tests 2025-09-05 12:37:45 +03:00
Matt Ellis f282131414 Rename HistoryUpFilterAction and add tests 2025-09-05 12:37:45 +03:00
Matt Ellis f5f14f308b Rename HistoryUpAction and add tests 2025-09-05 12:37:45 +03:00
Matt Ellis 44cb65859b Extract MoveCaretToPreviousBigWordAction 2025-09-05 12:37:45 +03:00
Matt Ellis 84eb131cea Extract MoveCaretToNextBigWordAction 2025-09-05 12:37:45 +03:00
Matt Ellis 310d90466b Extract DeletePreviousWordActionTest 2025-09-05 12:37:45 +03:00
Matt Ellis 8dd28cd257 Introduce CommandLineActionHandler base class 2025-09-05 12:37:45 +03:00
Matt Ellis 057259eba2 Move CommandKeyConsumer before CharArgumentConsumer 2025-09-05 12:37:45 +03:00
Matt Ellis 7f927ac62e Reorder register consumers 2025-09-05 12:37:45 +03:00
Matt Ellis ecceab3fd6 Rename SelectRegisterConsumer 2025-09-05 12:37:45 +03:00
Matt Ellis 3e18fcd7f1 Rename StartSelectRegisterConsumer 2025-09-05 12:37:45 +03:00
Matt Ellis c3c581ceb6 Rename CommandConsumer to CommandKeyConsumer 2025-09-05 12:37:45 +03:00
Matt Ellis abf7dc51bd Add doc comments for all key consumers 2025-09-05 12:37:45 +03:00
Matt Ellis a0d3fd9eed Rename DeleteCommandConsumer to add Count 2025-09-05 12:37:45 +03:00
Matt Ellis f53d93016d Make it a little easier to debug key consumers
Adding an `isApplicable` function allows avoiding stepping into irrelevant consumers
2025-09-05 12:37:45 +03:00
dependabot[bot] 739336ca45 Bump org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm
Bumps [org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm](https://github.com/Kotlin/kotlinx.coroutines) from 1.8.1 to 1.10.2.
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.8.1...1.10.2)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm
  dependency-version: 1.10.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-04 09:52:39 +03:00
dependabot[bot] 759df9eb22 Bump org.jetbrains:annotations from 26.0.2 to 26.0.2-1
Bumps [org.jetbrains:annotations](https://github.com/JetBrains/java-annotations) from 26.0.2 to 26.0.2-1.
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/26.0.2...26.0.2-1)

---
updated-dependencies:
- dependency-name: org.jetbrains:annotations
  dependency-version: 26.0.2-1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-04 09:36:07 +03:00
Alex Plate de809b528b [API] Turn OptionScopeImpl into an object 2025-08-29 18:11:26 +03:00
Alex Plate c6adc48e81 [API] Make option() function return a value
This allows users to easily retrieve values from option scope:
val x = option { get<Int>("history") }

- Changed option() signature from Unit to generic T return type
- Updated VimApiImpl implementation to return the lambda result
- Added test demonstrating the new return value capability
2025-08-29 18:11:26 +03:00
Alex Plate 907495df4d [API] Refactor OptionScope from abstract class to interface
- Convert OptionScope from abstract class to interface
- Extract inline functions with reified types as extension functions
- Make getOptionValue() and setOption() public interface methods
- Remove internal modifier layer functions
- Update OptionScopeImpl to implement new interface
- Add documentation recommending extension function usage
- Update test imports to use new extension functions
2025-08-29 18:11:25 +03:00
Alex Plate 476389b9c3 Bring back actualText to keep the compatibility with an external plugin 2025-08-29 11:48:26 +03:00
Alex Plate 7e71676656 [API] The write lock should be taken on EDT 2025-08-29 11:45:22 +03:00
Alex Plate 186db70a22 [API] Specify and cleanup the error handling in the option scope
1) ExException is wrapped with the IllegalArgumentException. We cannot use the raw ExException as it's not defined in the API module. So, if any client will have an access only to the API module, they won't be able to handle this kind of the exception.

2) getOption throws IllegalArgumentException if the type classifier is null. I don't know when this might happen, but this looks more like a plugin developer error. Also, this allows to distinguish the wrong option name vs this type of problem

3) In setOption and getOption throw an exception if there is no such option. This clearly explains what is wrong with this call.

Note: there was a question of using exceptions vs some return values, even like `Result`. The decision falls into the using of exceptions as using the wrong arguments in the plugin is a programming error from the user point of view.
This means, if there is a plugin that checks some option that in reality doesn't exist, it's not a fail of the end user and the end user cannot do anything about that.
Also, using the `Result` will force the plugin developer to handle all possible failure branches, what is quite unnecessary when accessing a well-defined option.
2025-08-22 17:52:51 +03:00
Alex Plate 04d9282fb2 Change OutputPanelScopeImpl to be an object 2025-08-22 16:30:51 +03:00
Alex Plate 6f54a30bc3 Fix(VIM-4004): Add support for f13-f24 keys 2025-08-22 16:09:43 +03:00
Matt Ellis 4cc3bd2b9f Use return value of Escape action
If none of the IDE Escape handlers do anything, we get Vim's lovely beep
2025-08-22 15:26:26 +03:00
Matt Ellis f0a104a131 Reset caret shape on Escape
Provides a way to reset and resync the caret shape by hitting Escape, even if we don't change mode
2025-08-22 15:26:26 +03:00
Matt Ellis d8a79cb12f Use Vim actions to insert Tab
Previously, we would drop out of VimShortcutKeyAction when hitting Tab in Insert mode. This allowed Emmet to work because ExpandLiveTemplateByTabAction (one of the many actions registered for Tab) would have a chance to handle it.

Now we let Tab actions try to handle the key before Vim does, so we can let Vim handle Tab. In Insert mode, Vim now inserts the tab (or equivalent spaces) by invoking the "EditorTab" action, which is the same as the TabAction handler in the list of actions. Because Vim does this, we can now easily repeat inserting Tab without workarounds, remap `<Tab>` and `<S-Tab>` and Vim will update scroll locations after inserting the text.

Fixes VIM-2331. Fixes JetBrains/ideavim#938. Fixes JetBrains/ideavim#280
2025-08-22 15:26:26 +03:00
Matt Ellis d850052f20 Fix count accepted as valid in text object
Fixes VIM-3960
2025-08-22 14:17:33 +03:00
Matt Ellis cb74ff6af2 Fix normalising visual column
Would previously normalise against the entire buffer line length rather than just the current visual line length. For short lines, this would not include inlays, and would therefore position the caret wrong when moving up/down at end of line. For long, wrapped lines, this just plain wouldn't work.

Fixes VIM-3997
2025-08-22 14:15:44 +03:00