Convert line endings command
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user