mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
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
This commit is contained in:
parent
5c2570582b
commit
dd5a7c6191
@ -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) |
|
||||
|
@ -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 @@ fn pipe(
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user