aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Vegdahl2021-06-21 19:36:01 +0000
committerNathan Vegdahl2021-06-21 19:36:01 +0000
commita18d50b77759d6305b99ff59baa1ccaf9d644a88 (patch)
tree03ec04e938b7db16cb7f5c197a07348b59ad3fc7
parent7c4fa18764ed6a6c30125ed6bfc9b025216e9668 (diff)
Add command to set the document's default line ending.
-rw-r--r--helix-term/src/commands.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 5cb30da6..63a4d901 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -1160,6 +1160,45 @@ mod cmd {
}
}
+ /// Sets or reports the current document's line ending setting.
+ fn set_line_ending(editor: &mut Editor, args: &[&str], event: PromptEvent) {
+ use LineEnding::*;
+
+ // If no argument, report current line ending setting.
+ if args.is_empty() {
+ let line_ending = current!(editor).1.line_ending;
+ editor.set_status(match line_ending {
+ Crlf => "crlf".into(),
+ LF => "line feed".into(),
+ FF => "form feed".into(),
+ CR => "carriage return".into(),
+ Nel => "next line".into(),
+
+ // These should never be a document's default line ending.
+ VT | LS | PS => "error".into(),
+ });
+ return;
+ }
+
+ // Attempt to parse argument as a line ending.
+ let line_ending = match args.get(0) {
+ // We check for CR first because it shares a common prefix with CRLF.
+ Some(arg) if "cr".starts_with(&arg.to_lowercase()) => Some(CR),
+ Some(arg) if "crlf".starts_with(&arg.to_lowercase()) => Some(Crlf),
+ Some(arg) if "lf".starts_with(&arg.to_lowercase()) => Some(LF),
+ Some(arg) if "ff".starts_with(&arg.to_lowercase()) => Some(FF),
+ Some(arg) if "nel".starts_with(&arg.to_lowercase()) => Some(Nel),
+ _ => None,
+ };
+
+ if let Some(le) = line_ending {
+ doc_mut!(editor).line_ending = le;
+ } else {
+ // Invalid argument.
+ editor.set_error(format!("invalid line ending '{}'", args[0],));
+ }
+ }
+
fn earlier(editor: &mut Editor, args: &[&str], event: PromptEvent) {
let uk = match args.join(" ").parse::<helix_core::history::UndoKind>() {
Ok(uk) => uk,
@@ -1393,6 +1432,13 @@ mod cmd {
completer: None,
},
TypableCommand {
+ name: "line-ending",
+ alias: None,
+ doc: "Set the document's default line ending. Options: crlf, lf, cr, ff, nel.",
+ fun: set_line_ending,
+ completer: None,
+ },
+ TypableCommand {
name: "earlier",
alias: Some("ear"),
doc: "Jump back to an earlier point in edit history. Accepts a number of steps or a time span.",