input: Fix indent, outdent to consider \r on Windows. (#880)
https://github.com/user-attachments/assets/c662c251-36e5-4a80-bad9-7438ba1b395c
This commit is contained in:
parent
445b1e4e02
commit
119d348e4a
2 changed files with 30 additions and 39 deletions
24
Cargo.lock
generated
24
Cargo.lock
generated
|
|
@ -1185,7 +1185,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "collections"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"indexmap 2.7.1",
|
||||
"rustc-hash 2.1.0",
|
||||
|
|
@ -1692,7 +1692,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "derive_refineable"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -2710,7 +2710,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gpui"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"as-raw-xcb-connection",
|
||||
|
|
@ -2834,7 +2834,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gpui_macros"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -3103,7 +3103,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "http_client"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
|
|
@ -3120,7 +3120,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "http_client_tls"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"rustls",
|
||||
"rustls-platform-verifier",
|
||||
|
|
@ -3881,7 +3881,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "media"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bindgen 0.71.1",
|
||||
|
|
@ -5626,7 +5626,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "refineable"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"derive_refineable",
|
||||
"workspace-hack",
|
||||
|
|
@ -5721,7 +5721,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "reqwest_client"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
|
|
@ -6241,7 +6241,7 @@ checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a"
|
|||
[[package]]
|
||||
name = "semantic_version"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"serde",
|
||||
|
|
@ -6709,7 +6709,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|||
[[package]]
|
||||
name = "sum_tree"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"log",
|
||||
|
|
@ -7547,7 +7547,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|||
[[package]]
|
||||
name = "util"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#431fa17bcca92294fa8c8b453ebdcb4069169489"
|
||||
source = "git+https://github.com/huacnlee/zed.git?branch=webview#df7153e30716d90a3ab84c8c65143a97dd962d93"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-fs 2.1.2",
|
||||
|
|
|
|||
|
|
@ -983,7 +983,12 @@ impl InputState {
|
|||
return 0;
|
||||
}
|
||||
|
||||
let offset = self.previous_boundary(self.selected_range.start.min(self.selected_range.end));
|
||||
let mut offset =
|
||||
self.previous_boundary(self.selected_range.start.min(self.selected_range.end));
|
||||
if self.text.chars().nth(offset) == Some('\r') {
|
||||
offset += 1;
|
||||
}
|
||||
|
||||
let line = self
|
||||
.text_for_range(self.range_to_utf16(&(0..offset + 1)), &mut None, window, cx)
|
||||
.unwrap_or_default()
|
||||
|
|
@ -1197,7 +1202,8 @@ impl InputState {
|
|||
let mut added_len = 0;
|
||||
|
||||
if !self.selected_range.is_empty() {
|
||||
let mut offset = self.start_of_line_of_selection(window, cx);
|
||||
let start_offset = self.start_of_line_of_selection(window, cx);
|
||||
let mut offset = start_offset;
|
||||
|
||||
let selected_text = self
|
||||
.text_for_range(
|
||||
|
|
@ -1208,9 +1214,7 @@ impl InputState {
|
|||
)
|
||||
.unwrap_or("".into());
|
||||
|
||||
let mut lines_count = 0;
|
||||
for line in selected_text.lines() {
|
||||
lines_count += 1;
|
||||
for line in selected_text.split('\n') {
|
||||
self.replace_text_in_range(
|
||||
Some(self.range_to_utf16(&(offset..offset))),
|
||||
&tab_indent,
|
||||
|
|
@ -1218,17 +1222,11 @@ impl InputState {
|
|||
cx,
|
||||
);
|
||||
added_len += tab_indent.len();
|
||||
// +1 for "\n"
|
||||
// +1 for "\n", the `\r` is included in the `line`.
|
||||
offset += line.len() + tab_indent.len() + 1;
|
||||
}
|
||||
|
||||
if lines_count > 1 {
|
||||
self.selected_range =
|
||||
selected_range.start + tab_indent.len()..selected_range.end + added_len;
|
||||
} else {
|
||||
self.selected_range =
|
||||
selected_range.start + added_len..selected_range.end + added_len;
|
||||
}
|
||||
self.selected_range = start_offset..selected_range.end + added_len;
|
||||
} else {
|
||||
// Selected none
|
||||
let offset = self.selected_range.start;
|
||||
|
|
@ -1254,7 +1252,8 @@ impl InputState {
|
|||
let mut removed_len = 0;
|
||||
|
||||
if !self.selected_range.is_empty() {
|
||||
let mut offset = self.start_of_line_of_selection(window, cx);
|
||||
let start_offset = self.start_of_line_of_selection(window, cx);
|
||||
let mut offset = start_offset;
|
||||
|
||||
let selected_text = self
|
||||
.text_for_range(
|
||||
|
|
@ -1265,9 +1264,7 @@ impl InputState {
|
|||
)
|
||||
.unwrap_or("".into());
|
||||
|
||||
let mut lines_count = 0;
|
||||
for line in selected_text.lines() {
|
||||
lines_count += 1;
|
||||
for line in selected_text.split('\n') {
|
||||
if line.starts_with(tab_indent.as_ref()) {
|
||||
self.replace_text_in_range(
|
||||
Some(self.range_to_utf16(&(offset..offset + tab_indent.len()))),
|
||||
|
|
@ -1281,15 +1278,10 @@ impl InputState {
|
|||
offset += line.len().saturating_sub(tab_indent.len()) + 1;
|
||||
}
|
||||
|
||||
if lines_count > 1 {
|
||||
self.selected_range = selected_range.start.saturating_sub(tab_indent.len())
|
||||
..selected_range.end.saturating_sub(removed_len);
|
||||
} else {
|
||||
self.selected_range = selected_range.start.saturating_sub(tab_indent.len())
|
||||
..selected_range.end.saturating_sub(tab_indent.len());
|
||||
}
|
||||
self.selected_range = start_offset..selected_range.end.saturating_sub(removed_len);
|
||||
} else {
|
||||
// Selected none
|
||||
let start_offset = self.selected_range.start;
|
||||
let offset = self.start_of_line_of_selection(window, cx);
|
||||
if self.text[offset..].starts_with(tab_indent.as_ref()) {
|
||||
self.replace_text_in_range(
|
||||
|
|
@ -1299,9 +1291,8 @@ impl InputState {
|
|||
cx,
|
||||
);
|
||||
removed_len = tab_indent.len();
|
||||
|
||||
self.selected_range = selected_range.start.saturating_sub(removed_len)
|
||||
..selected_range.end.saturating_sub(removed_len);
|
||||
let new_offset = start_offset.saturating_sub(removed_len);
|
||||
self.selected_range = new_offset..new_offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue