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]]
|
[[package]]
|
||||||
name = "collections"
|
name = "collections"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"indexmap 2.7.1",
|
"indexmap 2.7.1",
|
||||||
"rustc-hash 2.1.0",
|
"rustc-hash 2.1.0",
|
||||||
|
|
@ -1692,7 +1692,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "derive_refineable"
|
name = "derive_refineable"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -2710,7 +2710,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gpui"
|
name = "gpui"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"as-raw-xcb-connection",
|
"as-raw-xcb-connection",
|
||||||
|
|
@ -2834,7 +2834,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gpui_macros"
|
name = "gpui_macros"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -3103,7 +3103,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http_client"
|
name = "http_client"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -3120,7 +3120,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http_client_tls"
|
name = "http_client_tls"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"rustls",
|
"rustls",
|
||||||
"rustls-platform-verifier",
|
"rustls-platform-verifier",
|
||||||
|
|
@ -3881,7 +3881,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "media"
|
name = "media"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bindgen 0.71.1",
|
"bindgen 0.71.1",
|
||||||
|
|
@ -5626,7 +5626,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "refineable"
|
name = "refineable"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"derive_refineable",
|
"derive_refineable",
|
||||||
"workspace-hack",
|
"workspace-hack",
|
||||||
|
|
@ -5721,7 +5721,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest_client"
|
name = "reqwest_client"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -6241,7 +6241,7 @@ checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semantic_version"
|
name = "semantic_version"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -6709,7 +6709,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sum_tree"
|
name = "sum_tree"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -7547,7 +7547,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "util"
|
name = "util"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-fs 2.1.2",
|
"async-fs 2.1.2",
|
||||||
|
|
|
||||||
|
|
@ -983,7 +983,12 @@ impl InputState {
|
||||||
return 0;
|
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
|
let line = self
|
||||||
.text_for_range(self.range_to_utf16(&(0..offset + 1)), &mut None, window, cx)
|
.text_for_range(self.range_to_utf16(&(0..offset + 1)), &mut None, window, cx)
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
|
|
@ -1197,7 +1202,8 @@ impl InputState {
|
||||||
let mut added_len = 0;
|
let mut added_len = 0;
|
||||||
|
|
||||||
if !self.selected_range.is_empty() {
|
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
|
let selected_text = self
|
||||||
.text_for_range(
|
.text_for_range(
|
||||||
|
|
@ -1208,9 +1214,7 @@ impl InputState {
|
||||||
)
|
)
|
||||||
.unwrap_or("".into());
|
.unwrap_or("".into());
|
||||||
|
|
||||||
let mut lines_count = 0;
|
for line in selected_text.split('\n') {
|
||||||
for line in selected_text.lines() {
|
|
||||||
lines_count += 1;
|
|
||||||
self.replace_text_in_range(
|
self.replace_text_in_range(
|
||||||
Some(self.range_to_utf16(&(offset..offset))),
|
Some(self.range_to_utf16(&(offset..offset))),
|
||||||
&tab_indent,
|
&tab_indent,
|
||||||
|
|
@ -1218,17 +1222,11 @@ impl InputState {
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
added_len += tab_indent.len();
|
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;
|
offset += line.len() + tab_indent.len() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if lines_count > 1 {
|
self.selected_range = start_offset..selected_range.end + added_len;
|
||||||
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;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Selected none
|
// Selected none
|
||||||
let offset = self.selected_range.start;
|
let offset = self.selected_range.start;
|
||||||
|
|
@ -1254,7 +1252,8 @@ impl InputState {
|
||||||
let mut removed_len = 0;
|
let mut removed_len = 0;
|
||||||
|
|
||||||
if !self.selected_range.is_empty() {
|
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
|
let selected_text = self
|
||||||
.text_for_range(
|
.text_for_range(
|
||||||
|
|
@ -1265,9 +1264,7 @@ impl InputState {
|
||||||
)
|
)
|
||||||
.unwrap_or("".into());
|
.unwrap_or("".into());
|
||||||
|
|
||||||
let mut lines_count = 0;
|
for line in selected_text.split('\n') {
|
||||||
for line in selected_text.lines() {
|
|
||||||
lines_count += 1;
|
|
||||||
if line.starts_with(tab_indent.as_ref()) {
|
if line.starts_with(tab_indent.as_ref()) {
|
||||||
self.replace_text_in_range(
|
self.replace_text_in_range(
|
||||||
Some(self.range_to_utf16(&(offset..offset + tab_indent.len()))),
|
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;
|
offset += line.len().saturating_sub(tab_indent.len()) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if lines_count > 1 {
|
self.selected_range = start_offset..selected_range.end.saturating_sub(removed_len);
|
||||||
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());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Selected none
|
// Selected none
|
||||||
|
let start_offset = self.selected_range.start;
|
||||||
let offset = self.start_of_line_of_selection(window, cx);
|
let offset = self.start_of_line_of_selection(window, cx);
|
||||||
if self.text[offset..].starts_with(tab_indent.as_ref()) {
|
if self.text[offset..].starts_with(tab_indent.as_ref()) {
|
||||||
self.replace_text_in_range(
|
self.replace_text_in_range(
|
||||||
|
|
@ -1299,9 +1291,8 @@ impl InputState {
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
removed_len = tab_indent.len();
|
removed_len = tab_indent.len();
|
||||||
|
let new_offset = start_offset.saturating_sub(removed_len);
|
||||||
self.selected_range = selected_range.start.saturating_sub(removed_len)
|
self.selected_range = new_offset..new_offset;
|
||||||
..selected_range.end.saturating_sub(removed_len);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue