Allow unindent without selection

This commit is contained in:
kobewi 2023-01-18 17:05:15 +01:00
parent e514e3732a
commit b427d3585c
4 changed files with 19 additions and 85 deletions

View file

@ -548,7 +548,7 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
if (k->is_action("ui_text_dedent", true)) {
do_unindent();
unindent_lines();
accept_event();
return;
}
@ -898,50 +898,6 @@ void CodeEdit::indent_lines() {
end_complex_operation();
}
void CodeEdit::do_unindent() {
if (!is_editable()) {
return;
}
int cc = get_caret_column();
if (has_selection() || cc <= 0) {
unindent_lines();
return;
}
begin_complex_operation();
Vector<int> caret_edit_order = get_caret_index_edit_order();
for (const int &c : caret_edit_order) {
int cl = get_caret_line(c);
const String &line = get_line(cl);
if (line[cc - 1] == '\t') {
remove_text(cl, cc - 1, cl, cc);
set_caret_column(MAX(0, cc - 1), c == 0, c);
adjust_carets_after_edit(c, cl, cc, cl, cc - 1);
continue;
}
if (line[cc - 1] != ' ') {
continue;
}
int spaces_to_remove = _calculate_spaces_till_next_left_indent(cc);
if (spaces_to_remove > 0) {
for (int i = 1; i <= spaces_to_remove; i++) {
if (line[cc - i] != ' ') {
spaces_to_remove = i - 1;
break;
}
}
remove_text(cl, cc - spaces_to_remove, cl, cc);
set_caret_column(MAX(0, cc - spaces_to_remove), c == 0, c);
}
}
end_complex_operation();
}
void CodeEdit::unindent_lines() {
if (!is_editable()) {
return;
@ -2204,7 +2160,6 @@ void CodeEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_auto_indent_prefixes"), &CodeEdit::get_auto_indent_prefixes);
ClassDB::bind_method(D_METHOD("do_indent"), &CodeEdit::do_indent);
ClassDB::bind_method(D_METHOD("do_unindent"), &CodeEdit::do_unindent);
ClassDB::bind_method(D_METHOD("indent_lines"), &CodeEdit::indent_lines);
ClassDB::bind_method(D_METHOD("unindent_lines"), &CodeEdit::unindent_lines);