Convert line endings command

This commit is contained in:
Krzosa Karol
2024-08-06 07:55:52 +02:00
parent f8c9e8fd3e
commit 1145a13987

View File

@@ -353,6 +353,34 @@ void Command_TrimTrailingWhitespace(View *view, bool dont_trim_lines_with_cursor
view->update_scroll = false;
}
void Command_ConvertLineEndings(View *view, bool dont_trim_lines_with_cursor) {
Scratch scratch;
Buffer *buffer = GetBuffer(view->active_buffer);
BeforeEdit(buffer, view->carets);
MergeCarets(view);
Array<Range> lines_to_skip_triming = {};
if (dont_trim_lines_with_cursor) lines_to_skip_triming = GetSelectedLinesSorted(scratch, view);
Array<Edit> edits = {scratch};
for (Int i = 0; i < buffer->line_starts.len; i += 1) {
Int range_index = FindRangeByPos(lines_to_skip_triming, i);
if (range_index != -1) continue;
Range range = GetLineRangeWithoutNL(*buffer, i);
wchar_t cr = GetChar(buffer, range.max - 1);
wchar_t lf = GetChar(buffer, range.max);
if (cr == L'\r' && lf == L'\n') {
AddEdit(&edits, {range.max - 1, range.max}, L"");
}
}
ApplyEdits(buffer, edits);
AfterEdit(buffer, &edits, &view->carets, !KILL_SELECTION);
view->update_scroll = false;
}
void Command_KillSelectedLines(View *view) {
Scratch scratch;
Buffer *buffer = GetBuffer(view->active_buffer);
@@ -827,6 +855,7 @@ void WindowCommand(Event event, Window *window, View *view) {
if (StyleTrimWhitespaceOnSave) {
bool dont_trim_lines_with_cursor = true;
Command_TrimTrailingWhitespace(view, dont_trim_lines_with_cursor);
Command_ConvertLineEndings(view, dont_trim_lines_with_cursor);
}
String16 string16 = GetString(*buffer);