1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2024-12-26 16:42:47 +01:00
Commit Graph

8101 Commits

Author SHA1 Message Date
Ludwig Valda Vasquez
068d610e3a Add grapheme cluster handling tests
GraphemeBreakTest.txt was downloaded from the Unicode Character Database [0].

Changes to build.gradle.kts were required to stop `gradlew test` from
regenerating the resources with empty JSON objects. And adding a
dependency.

[0]: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
2023-08-14 09:04:41 +03:00
Ludwig Valda Vasquez
41177b91be Handle unicode grapheme clusters
Some characters that render as a single symbol can span over a sequence
of several unicode code points (e.g., flag emojis, combination of a
letter and a diacritic, Hangul syllables, etc.).

Such composites are called grapheme clusters in the unicode standard,
and this patch introduces recognition of extended grapheme cluster
boundaries, allowing to iterate over rendered characters. Without this,
user may observe the cursor being "stuck" inside a character for several
keystrokes, while it's making its way through each code point in the
grapheme cluster.

The implementation follows the boundaries search algorithm outlined in
the technical report 29 of the Unicode standard[1]. The implementation was
tested against the set of test cases provided by the unicode character
database[2].

Additionally to the grapheme cluster boundaries search itself, this
patch adds `isExtendedPictographic` function, that answers whether the
given code point has a unicode "Extended_Pictographic" property, which
is required to correctly determine grapheme cluster boundaries. This
method is implemented natively in the JDK 21 and can be removed once we
start targeting that version.

Extended_Pictographic property is stored as a bitmap. I was considering
making a similar map for the code point classification in the grapheme
cluster boundary search implementation, which could yield better
performance, but that would require adding another half a megabyte (at
least) of data into the JAR and I've settled for the bunch of `if`s way.

That is something that can be reconsidered and shouldn't be difficult to
change if the impact on performance would be noticeable (in my simple
tests it didn't show).

A few functions in the vim-engine were adjusted to handle grapheme
clusters (such as getting the horizontal offset and adjusting the cursor
to not reach over the end of the line).

[1]: https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
[2]: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
2023-08-14 09:04:41 +03:00
Filipp Vakhitov
c2ebacdfb3 Better annotations 2023-08-11 15:57:09 +03:00
Alex Plate
5d4996c085
Optimize imports on the project 2023-08-11 11:54:38 +03:00
Alex Plate
dbafbbf66d
Add a small interesting facts about undolevels 2023-08-11 11:47:36 +03:00
Filipp Vakhitov
a46200ca17 Introduce TestForLinux annotation 2023-08-11 00:22:43 +03:00
filipp
1fe64e69ca Support running tests if headless 2023-08-04 19:00:47 +03:00
IdeaVim Bot
a017ec9bfd Update changelog after merging PR 2023-08-03 12:03:00 +00:00
Matt Ellis
cb8385a092 Fix issue adding back hidden status bar widget 2023-08-03 15:00:28 +03:00
Matt Ellis
d4aa1f87e0 Fix read-only stdin when running application 2023-08-03 14:58:47 +03:00
filipp
41df06a48b Fix failing tests second attempt
(please please)
2023-08-03 14:00:03 +03:00
filipp
4188e636f3 Fix failing tests
(please)
2023-08-03 13:39:33 +03:00
filipp
e2c0d59e3a Fix default register for unnamedplus without X 2023-08-03 11:24:29 +03:00
Alex Plate
6a8c210a23
Fix incorrect tic in docs 2023-08-02 16:43:53 +03:00
Alex Plate
a62cc3618c
Fix an issue with disposed caret when moving up
There was an issue that when we enter visual block, move up, then try to switch to the visual line, we get a disposed caret issue.
This was caused by the fact that we get the list of carets, then process them one by one. However, as we update the first caret, the second gets disposed.
2023-08-01 16:17:39 +03:00
Alex Plate
a703afbef9
Update changelog 2023-08-01 12:25:38 +03:00
Alex Plate
5ce8445d5c
Update GH jobs to use the IdeaVim Bot git account 2023-08-01 12:25:38 +03:00
Matt Ellis
d112030a8e Add explanatory comment about InsertExitModeAction 2023-08-01 12:22:26 +03:00
Matt Ellis
98ca4080dd Do not enter INSERT mode for read-only editors
It's not enough that the document is writable, the editor needs to be non-read-only, too.

Fixes VIM-2313, fixes VIM-2318, fixes VIM-2666, fixes VIM-2951
2023-08-01 12:22:26 +03:00
Alex Plate
3b9c63e781 Update changelog after merging PR 2023-07-31 08:31:19 +00:00
Matt Ellis
dd24ebf184 Rename OptionsScope.AUTO to EFFECTIVE 2023-07-31 11:28:32 +03:00
Matt Ellis
7ef2be625f Refactor parseOptionLine for readability 2023-07-31 11:28:32 +03:00
Matt Ellis
e3957d2207 Minor updates from code review 2023-07-31 11:28:32 +03:00
Matt Ellis
8ce1307d51 Fix tests under latest SDK 2023-07-31 11:28:32 +03:00
Matt Ellis
e1141dcd1c Remove old option listener API 2023-07-31 11:28:32 +03:00
Matt Ellis
4e33b5f351 Migrate to effective value change listeners 2023-07-31 11:28:32 +03:00
Matt Ellis
54dc184dd0 Introduce option effective value change listener 2023-07-31 11:28:32 +03:00
Matt Ellis
1977ce3ea5 Add simple one to many collection 2023-07-31 11:28:32 +03:00
Matt Ellis
c8c9d1729e Introduce listener for global option changes 2023-07-31 11:28:32 +03:00
Matt Ellis
e6e4b81f3b Simplify guicursor caret attributes cache 2023-07-31 11:28:32 +03:00
Matt Ellis
1c465f028e Fix option scopes for :let command 2023-07-31 11:28:32 +03:00
Matt Ellis
12824c22c4 Add :setglobal command 2023-07-31 11:28:32 +03:00
Matt Ellis
64c5ad72a3 Use accessor API to set global-local value 2023-07-31 11:28:32 +03:00
Matt Ellis
080c2059ee Format unset global-local toggle options 2023-07-31 11:28:32 +03:00
Matt Ellis
a288850010 Add support for resetting option to global value 2023-07-31 11:28:32 +03:00
Matt Ellis
16811602d2 Support global-local options 2023-07-31 11:28:32 +03:00
Matt Ellis
6d94d719e3 Only notify change if option has changed 2023-07-31 11:28:32 +03:00
Matt Ellis
749d111e89 Reset options for current editor only
Matches Vim behaviour for `:set all&`
2023-07-31 11:28:32 +03:00
Matt Ellis
365d8d34ce Introduce AUTO scope for effective option values 2023-07-31 11:28:32 +03:00
Matt Ellis
ced25bbf28 Initialise options when opening windows/buffers
Note that this temporarily changes the semantics of `:set` to always set the local option, instead of setting the global option (because we now eagerly initialise local values). Neither is correct, but we don't yet have a way to support the proper behaviour.
2023-07-31 11:28:32 +03:00
Matt Ellis
7e1ce5a203 Use Vim terminology in storage service 2023-07-31 11:28:32 +03:00
Matt Ellis
aeec754f7e Override IjVimEditor.toString for better debugging 2023-07-31 11:28:32 +03:00
Matt Ellis
9a3fcb56a1 Support local-to-buffer options
Previously, all local options were treated as local-to-window
2023-07-31 11:28:32 +03:00
Matt Ellis
aff956f4c8 Update parsed value cache for declared scope 2023-07-31 11:28:32 +03:00
Matt Ellis
0f49fd6406 Introduce declared scope for all options 2023-07-31 11:28:32 +03:00
IdeaVim Bot
1111770033 Update changelog. Action id - 5699821393 2023-07-29 10:07:18 +00:00
Filipp Vakhitov
6d313fc456 Update gradle plugin 2023-07-28 20:14:03 +03:00
Filipp Vakhitov
0201acb5f7 Fix test 2023-07-28 20:09:09 +03:00
Filipp Vakhitov
dfbefe96da Fix(VIM-802): IdeaVim vs. Vim: discrepancies in using registers 2023-07-28 19:58:51 +03:00
filipp
a71b35097f Fix(VIM-2246): X11/Xorg Primary selection register "* not supported 2023-07-28 19:56:42 +03:00