aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirawi2022-04-23 08:01:08 +0000
committerGitHub2022-04-23 08:01:08 +0000
commitdd5a7c6191314b22347c323e8cda8aff225e21ba (patch)
treec9bb05eb7a15581a50d17b0ed930a5505784fd35
parent5c2570582bdacf7acebf1bf4cab90699b98ecc67 (diff)
Replace line endings using `set_line_ending` command (#1871)
* set_line_ending: now replace line endings * use ending.len_chars() directly * account for unicode-lines feaure in line-ending doc
-rw-r--r--book/src/generated/typable-cmd.md2
-rw-r--r--helix-term/src/commands/typed.rs23
2 files changed, 23 insertions, 2 deletions
diff --git a/book/src/generated/typable-cmd.md b/book/src/generated/typable-cmd.md
index 0b591ba4..33f3b839 100644
--- a/book/src/generated/typable-cmd.md
+++ b/book/src/generated/typable-cmd.md
@@ -16,7 +16,7 @@
| `:new`, `:n` | Create a new scratch buffer. |
| `:format`, `:fmt` | Format the file using the LSP formatter. |
| `:indent-style` | Set the indentation style for editing. ('t' for tabs or 1-8 for number of spaces.) |
-| `:line-ending` | Set the document's default line ending. Options: crlf, lf, cr, ff, nel. |
+| `:line-ending` | Set the document's default line ending. Options: crlf, lf. |
| `:earlier`, `:ear` | Jump back to an earlier point in edit history. Accepts a number of steps or a time span. |
| `:later`, `:lat` | Jump to a later point in edit history. Accepts a number of steps or a time span. |
| `:write-quit`, `:wq`, `:x` | Write changes to disk and close the current view. Accepts an optional path (:wq some/path.txt) |
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index 9a5298bb..d44bcf75 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -352,8 +352,26 @@ fn set_line_ending(
arg if arg.starts_with("nel") => Nel,
_ => bail!("invalid line ending"),
};
+ let (view, doc) = current!(cx.editor);
+ doc.line_ending = line_ending;
+
+ let mut pos = 0;
+ let transaction = Transaction::change(
+ doc.text(),
+ doc.text().lines().filter_map(|line| {
+ pos += line.len_chars();
+ match helix_core::line_ending::get_line_ending(&line) {
+ Some(ending) if ending != line_ending => {
+ let start = pos - ending.len_chars();
+ let end = pos;
+ Some((start, end, Some(line_ending.as_str().into())))
+ }
+ _ => None,
+ }
+ }),
+ );
+ doc.apply(&transaction, view.id);
- doc_mut!(cx.editor).line_ending = line_ending;
Ok(())
}
@@ -1193,6 +1211,9 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
TypableCommand {
name: "line-ending",
aliases: &[],
+ #[cfg(not(feature = "unicode-lines"))]
+ doc: "Set the document's default line ending. Options: crlf, lf.",
+ #[cfg(feature = "unicode-lines")]
doc: "Set the document's default line ending. Options: crlf, lf, cr, ff, nel.",
fun: set_line_ending,
completer: None,