1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-10-09 04:26:57 +02:00
Commit Graph

9070 Commits

Author SHA1 Message Date
Alex Plate
7e71676656 [API] The write lock should be taken on EDT 2025-08-29 11:45:22 +03:00
Alex Plate
6a149a8ba4 [API] Add an experimental status on the API 2025-08-29 11:45:22 +03:00
Xinhe Wang
b593d079c4 Correct the behavior of NERDTree-P to jump to the root node
It cannot be guaranteed that the tree has a single visible root.
2025-08-26 14:04:15 +01:00
Xinhe Wang
cfbb77f1db Fix(VIM-3981): make :set noNERDTree work
Please note that the ex-commands will still not be unregistered
2025-08-26 14:04:15 +01:00
Xinhe Wang
c6fc1046ee Extract helper functions in NerdTree.Util to the global scope
This is necessary because I would like to use `registerMappings` in
the constructor of `NerdDispatcher` where we have no access to
private methods of `NerdTree`.

Also, `callAction` is moved into `nerdtree.Mappings.Action` and
duplicated `addCommand` is removed.
2025-08-26 14:04:15 +01:00
Xinhe Wang
007d636310 Clear NERDTree's KeyStroke buffer after <ESC> is pressed
The user may have pressed `g` accidentally and wish to perform an
operation which is not prefix by `g`.

This gives the user a way to clear the keys entered previously and
matches Vim's behavior.
2025-08-26 14:04:15 +01:00
Xinhe Wang
8d2d3a21a3 Move update from NerdDispatcher to its abstract class
To make it reusable in the incoming extended NERDTree.

Note that this commit itself does not change any behavior.
2025-08-26 14:04:15 +01:00
Xinhe Wang
175bae51a1 Initiate SpeedSearch right after / is pressed in NERDTree
What we can benefit from this approach:

- User perspective

  The SpeedSearch input will pop up immediately to indicate that
  `/` has been pressed, and search text can then be entered to
  filter the tree nodes.

- Codebase perspective

  The `waitForSearch` property can be removed from the Dispatcher
  objects, and we can get rid of `ToolWindowManagerListener` and
  the concurrency issue in it. This keeps code simple and readable.

  In my previous attempt to preserve the `waitForSearch` prop, the
  Dispatcher object had to be passed to each action impl as an
  argument.
2025-08-26 14:04:15 +01: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
1a7b54d0a9 Avoid importing unnecessary helper function 2025-08-22 15:26:26 +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
ef66a15faf Reuse existing colour when changing caret
Maintains the colour set by Next Edit Suggestions when changing mode

Fixes VIM-4010. Fixes VIM-3455
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
74a04dd235 Do not expand Live Templates in Normal mode 2025-08-22 15:26:26 +03:00
Matt Ellis
2aaf9badd5 Order IDE actions for Tab before Vim actions
Fixes VIM-4010
2025-08-22 15:26:26 +03:00
Matt Ellis
0950585e13 Fix initialising non-default colorcolumn option
Fixes VIM-3984
2025-08-22 15:25:55 +03:00
Matt Ellis
d850052f20 Fix count accepted as valid in text object
Fixes VIM-3960
2025-08-22 14:17:33 +03:00
Xinhe Wang
629a0f7aab Indicate error when an unrecognized key sequence is entered in NERDTree 2025-08-22 14:16:31 +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
Matt Ellis
c9ebc1c4ae Fix calculation of visual column with inlays
Was assuming caret was always on a text character visual column, but could be on an inlay.

Fixes VIM-4007
2025-08-22 14:15:44 +03:00
Alex Plate
a0a3f3f3b1 Fix an exception during the renaming: there was a read action missing 2025-08-22 11:22:38 +03:00
Alex Plate
aa539e76eb Rename RWLockLabel to VimLockLabel and other annotations
Also, clarify their usage
2025-08-22 11:22:38 +03:00
dependabot[bot]
4ab42db6a9 Bump org.jetbrains.kotlin:kotlin-stdlib from 2.2.0 to 2.2.10
Bumps [org.jetbrains.kotlin:kotlin-stdlib](https://github.com/JetBrains/kotlin) from 2.2.0 to 2.2.10.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.2.0...v2.2.10)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-stdlib
  dependency-version: 2.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-20 18:50:38 +03:00
dependabot[bot]
fbb8abe386 Bump org.jetbrains.intellij.platform from 2.7.1 to 2.7.2
Bumps org.jetbrains.intellij.platform from 2.7.1 to 2.7.2.

---
updated-dependencies:
- dependency-name: org.jetbrains.intellij.platform
  dependency-version: 2.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-20 18:48:42 +03:00
IdeaVim Bot
8e5d4b156c Add Na Minhyeok to contributors list 2025-08-20 09:01:54 +00:00
Alex Plate
55dd27db33 Update the contribution guide to avoid the confusion
By feedback https://github.com/JetBrains/ideavim/pull/1271#issuecomment-3203657519
2025-08-20 09:37:06 +03:00
Alex Plate
2136836877 Merge all configuration files into a single plugin.xml
The way we split plugin.xml was outdated. Also, it started to show errors in highlighting, even there were no errors.
It's better to keep everything in a single file
2025-08-20 09:18:16 +03:00
NaMinhyeok
ca676ca973 Fix Gradle build deprecation warnings and improve type safety
- Replace deprecated java.net.URL and HttpURLConnection with Ktor HttpClient in slackNotification task
- Fix deprecated intellijPlatform API calls:
  - create(ideaType, ideaVersion, useInstaller) → create(ideaType, ideaVersion) { this.useInstaller = useInstaller }
  - verifyPlugin → pluginVerification
- Add explicit Task type parameters to all tasks.register() calls to resolve Kotlin type inference warnings

Signed-off-by: NaMinhyeok <nmh9097@gmail.com>
2025-08-19 16:59:06 +03:00
dependabot[bot]
82d3420570 Bump org.jetbrains.changelog from 2.3.0 to 2.4.0
Bumps org.jetbrains.changelog from 2.3.0 to 2.4.0.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-13 19:33:32 +03:00
dependabot[bot]
060135737d Bump org.jetbrains.intellij.platform from 2.6.0 to 2.7.1
Bumps org.jetbrains.intellij.platform from 2.6.0 to 2.7.1.

---
updated-dependencies:
- dependency-name: org.jetbrains.intellij.platform
  dependency-version: 2.7.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-13 19:16:19 +03:00
Alex Plate
63e482408d Fix compilation issues 2025-08-08 18:28:52 +03:00
Alex Plate
ddb4c5ec81 Comment out listeners scope. It does require an accurate and proper review and design 2025-08-08 18:07:59 +03:00
Alex Plate
22e6ba3b3c Refactor DigraphScopeImpl to be an object and simplify digraph method logic 2025-08-08 18:04:09 +03:00
Alex Plate
e2a089fbeb Remove function to clearing all custom digraphs
This function is not provided by vim and by using it from the plugins we may drop the digraphs created by other plugins.
It'd be better to provide a just remove function. However, let's skip it for now. Also, maybe we should use an approach with the owners
2025-08-08 18:00:30 +03:00
Alex Plate
5cfed9929e Refresh documentation for MappingScope 2025-08-08 17:43:00 +03:00
Alex Plate
e85c006321 Remove isRepeatable parameter from key mapping methods
First of all, this is a property of the plugin, not the mapping. Secondly, all plugins should support repeat.
2025-08-08 17:11:10 +03:00
Alex Plate
1db8d01961 Add detailed documentation for label usage in key mapping methods
Documented the role of `label` in providing intermediate mappings, allowing users to override default plugin mappings with custom configurations.
2025-08-08 16:23:37 +03:00
Alex Plate
9c9cd1b2a0 Bring back the function to set the mode, but in experimental status now 2025-08-08 14:28:01 +03:00
Alex Plate
fb6a97f586 Remove redundant return statement in CommandLineScope 2025-08-08 12:44:30 +03:00
Alex Plate
87f5a6fab3 Remove stub classes
This solution was initially questionable. For a long time it produced nothing but more work on implementing the stubs.
2025-08-08 12:44:30 +03:00
Alex Plate
9d92ae9449 Remove the suspend from functions under the read or write actions
The suspending operations must not be performed under the read or write actions as this will lead to performance issues or freezes.

Also, the current implementation of launching coroutine under the write action is simply incorrect. The coroutine will escape the write action into another thread.
2025-08-08 12:44:30 +03:00
Alex Plate
492bd62166 Rename VimScope to VimApi and move it into a different package
`VimApi` would be a better entry point name. Also, the API term is clearer than the scope.
2025-08-08 12:44:30 +03:00
Alex Plate
a0c213b90d Refactor Mode in API to be a simple enum
The current representation of Mode with `returnTo` is quite complicated and we're not even sure it'll remain like that.
At the same time, `mode()` function in Vim has quite a reach specification and there is a small chance it'll be changed. With this approach, we use values from Vim, yet in a form of enum.
2025-08-08 12:44:30 +03:00
Alex Plate
fee75001f6 Do not allow to change the mode from the API
The details why we don't want this for now are logged in the code
2025-08-08 12:44:29 +03:00
Alex Plate
df3fb1a8a3 Convert VimScope into the interface 2025-08-08 12:44:29 +03:00
Alex Plate
057f4eee5d The ReadImpl does not inherit the VimScopeImpl
`ReadImpl` didn't use anything from `VimScopeImpl`. This would make sense if `Read` inherited `VimScope`, but it doesn't.
Also, we'll always be able to bring back the dependency if we figure out it's necessary.
2025-08-08 12:44:29 +03:00
Alex Plate
e2b20bb04d Reformat API module 2025-08-08 12:44:29 +03:00