zed/crates
张小白 fdddbfc179
Fix caret movement issue for some special characters (#10198)
Currently in Zed, certain characters require pressing the key twice to
move the caret through that character. For example: "❤️" and "y̆".

The reason for this is as follows:

Currently, Zed uses `chars` to distinguish different characters, and
calling `chars` on `y̆` will yield two `char` values: `y` and `\u{306}`,
and calling `chars` on `❤️` will yield two `char` values: `❤` and
`\u{fe0f}`.

Therefore, consider the following scenario (where ^ represents the
caret):

- what we see: ❤️ ^
- the actual buffer: ❤ \u{fe0f} ^

After pressing the left arrow key once:

- what we see: ❤️ ^
- the actual buffer: ❤ ^ \u{fe0f}

After pressing the left arrow key again:
- what we see: ^ ❤️
- the actual buffer: ^ ❤ \u{fe0f}

Thus, two left arrow key presses are needed to move the caret, and this
PR fixes this bug (or this is actually a feature?).

I have tried to keep the scope of code modifications as minimal as
possible. In this PR, Zed handles such characters as follows:

- what we see: ❤️ ^
- the actual buffer: ❤ \u{fe0f} ^

After pressing the left arrow key once:

- what we see: ^ ❤️
- the actual buffer: ^ ❤ \u{fe0f}

Or after pressing the delete key:

- what we see: ^
- the actual buffer: ^

Please note that currently, different platforms and software handle
these special characters differently, and even the same software may
handle these characters differently in different situations. For
example, in my testing on Chrome on macOS, GitHub treats `y̆` as a
single character, just like in this PR; however, in Rust Playground,
`y̆` is treated as two characters, and pressing the delete key does not
delete the entire `y̆` character, but instead deletes `\u{306}` to yield
the character `y`. And they both treat `❤️` as a single character,
pressing the delete key will delete the entire `❤️` character.

This PR is based on the principle of making changes with the smallest
impact on the code, and I think that deleting the entire character with
the delete key is more intuitive.

Release Notes:

- Fix caret movement issue for some special characters

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Thorsten <thorsten@zed.dev>
Co-authored-by: Bennet <bennetbo@gmx.de>
2024-04-10 13:01:25 -06:00
..
activity_indicator Add auto-update system for extensions (#9890) 2024-03-28 15:41:22 -04:00
anthropic Check license generation for every PR to avoid license-less crate additions (#10033) 2024-04-01 12:16:16 +03:00
assets Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
assistant Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
audio Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
auto_update Flip the optionality of the auto_update setting (#10302) 2024-04-08 20:16:05 -04:00
breadcrumbs Remove line breaks when displaying file names in the project panel (#10231) 2024-04-10 08:30:13 -06:00
call Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
channel chat panel: Fix new messages indicator appearing when message was deleted (#10278) 2024-04-10 12:21:45 +02:00
cli Windows: Enable clippy deny warnings (#9920) 2024-03-28 11:55:35 -04:00
client Flip the optionality of the auto_update setting (#10302) 2024-04-08 20:16:05 -04:00
clock Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
collab Fix cleanup of LSP request status messages (#10336) 2024-04-09 17:34:51 -04:00
collab_ui Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
collections gpui: Add SVG rendering to img element and generic asset cache (#9931) 2024-03-29 17:09:49 -07:00
color Fix hex_to_hsla inside the color crate (#9412) 2024-03-15 16:58:46 -04:00
command_palette Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
command_palette_hooks Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
copilot Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
copilot_ui Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
db Fix issues with extension API that come up when moving Svelte into an extension (#9611) 2024-03-22 17:29:06 -07:00
diagnostics Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
editor Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
extension Fix panic when loading malformed Wasm files (#10370) 2024-04-10 14:13:43 -04:00
extension_api Improve extension API documentation (#10322) 2024-04-09 10:38:29 -04:00
extension_cli Add git blame (#8889) 2024-03-28 18:32:11 +01:00
extensions_ui Add language_server_workspace_configuration to extension API (#10212) 2024-04-05 17:04:07 -04:00
feature_flags Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
feedback Include commit hash in Nightly & Dev builds (#10054) 2024-04-02 11:19:19 -04:00
file_finder Fix assorted linux issues (#10061) 2024-04-01 17:22:59 -07:00
file_icons tasks: Use icons instead of secondary text in a modal (#10264) 2024-04-08 11:41:54 +02:00
fs Fix git blame not working correctly with submodules (#10114) 2024-04-03 13:49:12 +02:00
fsevent Add rs-notify implementation of fs::watch (#9040) 2024-03-08 22:18:44 -08:00
fuzzy Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
git Fix crash when joining two consecutive lines (#10000) 2024-04-05 15:45:29 +02:00
go_to_line Line numbers short mode (#10354) 2024-04-10 12:08:07 +02:00
google_ai Fix licensing errors 2024-03-20 15:52:02 +01:00
gpui Fix caret movement issue for some special characters (#10198) 2024-04-10 13:01:25 -06:00
gpui_macros Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
image_viewer Remove line breaks when displaying file names in the project panel (#10231) 2024-04-10 08:30:13 -06:00
install_cli Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
journal Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
language Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
language_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
language_tools Compute scrollbar markers asynchronously (#10080) 2024-04-03 12:21:17 +02:00
languages Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
live_kit_client Add a schema to extensions, to prevent installing extensions on too old of a Zed version (#9599) 2024-03-20 17:33:26 -04:00
live_kit_server Merge prost dependecies (#9522) 2024-03-18 20:33:20 -06:00
lsp Show status of LSP actions (#9818) 2024-04-06 19:48:11 -07:00
markdown_preview markdown preview: Improve live preview (#10205) 2024-04-08 21:17:40 +02:00
media Revert "Revert "Revert dependency updates in #9836 (#10089)"" 2024-04-02 13:12:38 -06:00
menu Fix the linux keymap (#9829) 2024-03-26 16:10:09 -07:00
multi_buffer Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
node_runtime Allow extensions to define more of the methods in the LspAdapter trait (#9554) 2024-03-20 12:47:04 -07:00
notifications Fix mention notifications are not updated after message change and not removed after a message is deleted (#9847) 2024-04-02 20:40:00 -06:00
open_ai Hard code max token counts for supported models (#9675) 2024-03-21 20:30:33 -06:00
outline Restore --all-targets for clippy (#9346) 2024-03-14 12:39:45 -04:00
picker tab_switcher: Add tab close buttons (#9968) 2024-04-03 17:28:51 +02:00
prettier Fix prettier-plugin-organize-imports plugin removes used imports (#9598) 2024-03-21 08:23:15 +01:00
project Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
project_panel Remove line breaks when displaying file names in the project panel (#10231) 2024-04-10 08:30:13 -06:00
project_symbols Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
quick_action_bar Improve Find/Replace shortcuts (#10297) 2024-04-08 22:07:59 -07:00
recent_projects Fix Recent Documents List (continues #8952) (#9919) 2024-03-29 23:17:25 +02:00
refineable Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
release_channel Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
rich_text Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
rope Fix caret movement issue for some special characters (#10198) 2024-04-10 13:01:25 -06:00
rpc Query code actions and hovers from all related local language servers (from remote clients) (#10111) 2024-04-03 13:34:56 +03:00
search Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
semantic_version Extract SemanticVersion into its own crate (#9956) 2024-03-29 12:11:57 -04:00
settings Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
snippet Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez_macros Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
story Enable clippy::eq_op (#9369) 2024-03-14 17:05:07 -04:00
storybook windows: Support compiling with MinGW toolchain (part 2) (#9843) 2024-03-28 10:40:07 -07:00
sum_tree Compute scrollbar markers asynchronously (#10080) 2024-04-03 12:21:17 +02:00
tab_switcher tab_switcher: Add tab close buttons (#9968) 2024-04-03 17:28:51 +02:00
task Limit the extension tasks in the modal to current language only (#10207) 2024-04-06 00:18:32 +03:00
tasks_ui Use task icons for all kinds of tasks (#10333) 2024-04-09 23:51:59 +03:00
telemetry_events Extract SemanticVersion into its own crate (#9956) 2024-03-29 12:11:57 -04:00
terminal Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
terminal_view Compute scrollbar markers asynchronously (#10080) 2024-04-03 12:21:17 +02:00
text Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
theme Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
theme_importer themes: Add pane_group.border color (#9986) 2024-04-01 12:07:26 -04:00
theme_selector Add support for applying theme after extension is installed (#9529) 2024-03-20 11:13:58 -04:00
time_format notification panel: rework time formatting (#8997) 2024-03-12 21:02:04 -06:00
ui Remove line breaks when displaying file names in the project panel (#10231) 2024-04-10 08:30:13 -06:00
ui_text_field Introduce TextField by adding the ui_text_field crate (#10361) 2024-04-10 11:53:25 -04:00
util Adjust string splitting function (#10221) 2024-04-08 11:05:03 -07:00
vcs_menu Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
vim Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
welcome Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
workspace Reduce the frequency writing window size and position information to the database (#10315) 2024-04-10 12:56:51 -06:00
worktree Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
zed v0.132.x dev 2024-04-10 11:45:05 -04:00
zed_actions Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00