From dd5a7c6191314b22347c323e8cda8aff225e21ba Mon Sep 17 00:00:00 2001 From: Kirawi Date: Sat, 23 Apr 2022 04:01:08 -0400 Subject: 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--- helix-term/src/commands/typed.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'helix-term') 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, -- cgit v1.2.3-70-g09d2