Trim trailing white space on save, issue 4383
(cherry picked from commit f3e6569e00
)
This commit is contained in:
parent
93b1f60ca2
commit
73296a9a6d
|
@ -498,6 +498,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
|
||||||
|
|
||||||
set("text_editor/show_line_numbers", true);
|
set("text_editor/show_line_numbers", true);
|
||||||
|
|
||||||
|
set("text_editor/trim_trailing_whitespace_on_save", false);
|
||||||
set("text_editor/idle_parse_delay",2);
|
set("text_editor/idle_parse_delay",2);
|
||||||
set("text_editor/create_signal_callbacks",true);
|
set("text_editor/create_signal_callbacks",true);
|
||||||
set("text_editor/autosave_interval_secs",0);
|
set("text_editor/autosave_interval_secs",0);
|
||||||
|
|
|
@ -619,6 +619,34 @@ void ScriptEditor::_script_created(Ref<Script> p_script) {
|
||||||
editor->push_item(p_script.operator->());
|
editor->push_item(p_script.operator->());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptEditor::_trim_trailing_whitespace(TextEdit *tx) {
|
||||||
|
|
||||||
|
bool trimed_whitespace = false;
|
||||||
|
for (int i = 0; i < tx->get_line_count(); i++) {
|
||||||
|
String line = tx->get_line(i);
|
||||||
|
if (line.ends_with(" ") || line.ends_with("\t")) {
|
||||||
|
|
||||||
|
if (!trimed_whitespace) {
|
||||||
|
tx->begin_complex_operation();
|
||||||
|
trimed_whitespace = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int end = 0;
|
||||||
|
for (int j = line.length() - 1; j > -1; j--) {
|
||||||
|
if (line[j] != ' ' && line[j] != '\t') {
|
||||||
|
end = j+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tx->set_line(i, line.substr(0, end));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (trimed_whitespace) {
|
||||||
|
tx->end_complex_operation();
|
||||||
|
tx->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptEditor::_goto_script_line2(int p_line) {
|
void ScriptEditor::_goto_script_line2(int p_line) {
|
||||||
|
|
||||||
int selected = tab_container->get_current_tab();
|
int selected = tab_container->get_current_tab();
|
||||||
|
@ -777,7 +805,9 @@ void ScriptEditor::_resave_scripts(const String& p_str) {
|
||||||
if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1)
|
if (script->get_path()=="" || script->get_path().find("local://")!=-1 || script->get_path().find("::")!=-1)
|
||||||
continue; //internal script, who cares
|
continue; //internal script, who cares
|
||||||
|
|
||||||
|
if (trim_trailing_whitespace_on_save) {
|
||||||
|
_trim_trailing_whitespace(ste->get_text_edit());
|
||||||
|
}
|
||||||
editor->save_resource(script);
|
editor->save_resource(script);
|
||||||
ste->get_text_edit()->tag_saved_version();
|
ste->get_text_edit()->tag_saved_version();
|
||||||
}
|
}
|
||||||
|
@ -1028,11 +1058,17 @@ void ScriptEditor::_menu_option(int p_option) {
|
||||||
if (_test_script_times_on_disk())
|
if (_test_script_times_on_disk())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (trim_trailing_whitespace_on_save) {
|
||||||
|
_trim_trailing_whitespace(current->get_text_edit());
|
||||||
|
}
|
||||||
editor->save_resource( current->get_edited_script() );
|
editor->save_resource( current->get_edited_script() );
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case FILE_SAVE_AS: {
|
case FILE_SAVE_AS: {
|
||||||
|
|
||||||
|
if (trim_trailing_whitespace_on_save) {
|
||||||
|
_trim_trailing_whitespace(current->get_text_edit());
|
||||||
|
}
|
||||||
editor->save_resource_as( current->get_edited_script() );
|
editor->save_resource_as( current->get_edited_script() );
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
@ -1297,6 +1333,9 @@ void ScriptEditor::_menu_option(int p_option) {
|
||||||
te->set_text(text);
|
te->set_text(text);
|
||||||
|
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case EDIT_TRIM_TRAILING_WHITESAPCE: {
|
||||||
|
_trim_trailing_whitespace(current->get_text_edit());
|
||||||
} break;
|
} break;
|
||||||
case SEARCH_FIND: {
|
case SEARCH_FIND: {
|
||||||
|
|
||||||
|
@ -1951,6 +1990,10 @@ void ScriptEditor::save_all_scripts() {
|
||||||
if (!ste)
|
if (!ste)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
if (trim_trailing_whitespace_on_save) {
|
||||||
|
_trim_trailing_whitespace(ste->get_text_edit());
|
||||||
|
}
|
||||||
if (ste->get_text_edit()->get_version()==ste->get_text_edit()->get_saved_version())
|
if (ste->get_text_edit()->get_version()==ste->get_text_edit()->get_saved_version())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2047,6 +2090,7 @@ void ScriptEditor::_add_callback(Object *p_obj, const String& p_function, const
|
||||||
void ScriptEditor::_editor_settings_changed() {
|
void ScriptEditor::_editor_settings_changed() {
|
||||||
|
|
||||||
print_line("settings changed");
|
print_line("settings changed");
|
||||||
|
trim_trailing_whitespace_on_save = EditorSettings::get_singleton()->get("text_editor/trim_trailing_whitespace_on_save");
|
||||||
float autosave_time = EditorSettings::get_singleton()->get("text_editor/autosave_interval_secs");
|
float autosave_time = EditorSettings::get_singleton()->get("text_editor/autosave_interval_secs");
|
||||||
if (autosave_time>0) {
|
if (autosave_time>0) {
|
||||||
autosave_timer->set_wait_time(autosave_time);
|
autosave_timer->set_wait_time(autosave_time);
|
||||||
|
@ -2392,6 +2436,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
||||||
#else
|
#else
|
||||||
edit_menu->get_popup()->add_item("Complete Symbol",EDIT_COMPLETE,KEY_MASK_CMD|KEY_SPACE);
|
edit_menu->get_popup()->add_item("Complete Symbol",EDIT_COMPLETE,KEY_MASK_CMD|KEY_SPACE);
|
||||||
#endif
|
#endif
|
||||||
|
edit_menu->get_popup()->add_item("Trim Trailing Whitespace", EDIT_TRIM_TRAILING_WHITESAPCE, KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T);
|
||||||
edit_menu->get_popup()->add_item("Auto Indent",EDIT_AUTO_INDENT,KEY_MASK_CMD|KEY_I);
|
edit_menu->get_popup()->add_item("Auto Indent",EDIT_AUTO_INDENT,KEY_MASK_CMD|KEY_I);
|
||||||
edit_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
edit_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
||||||
|
|
||||||
|
@ -2582,7 +2627,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
||||||
// debugger_gui->hide();
|
// debugger_gui->hide();
|
||||||
|
|
||||||
edit_pass=0;
|
edit_pass=0;
|
||||||
|
trim_trailing_whitespace_on_save = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,7 @@ class ScriptEditor : public VBoxContainer {
|
||||||
EDIT_SELECT_ALL,
|
EDIT_SELECT_ALL,
|
||||||
EDIT_COMPLETE,
|
EDIT_COMPLETE,
|
||||||
EDIT_AUTO_INDENT,
|
EDIT_AUTO_INDENT,
|
||||||
|
EDIT_TRIM_TRAILING_WHITESAPCE,
|
||||||
EDIT_TOGGLE_COMMENT,
|
EDIT_TOGGLE_COMMENT,
|
||||||
EDIT_MOVE_LINE_UP,
|
EDIT_MOVE_LINE_UP,
|
||||||
EDIT_MOVE_LINE_DOWN,
|
EDIT_MOVE_LINE_DOWN,
|
||||||
|
@ -238,6 +239,10 @@ class ScriptEditor : public VBoxContainer {
|
||||||
void _add_callback(Object *p_obj, const String& p_function, const StringArray& p_args);
|
void _add_callback(Object *p_obj, const String& p_function, const StringArray& p_args);
|
||||||
void _res_saved_callback(const Ref<Resource>& p_res);
|
void _res_saved_callback(const Ref<Resource>& p_res);
|
||||||
|
|
||||||
|
bool trim_trailing_whitespace_on_save;
|
||||||
|
|
||||||
|
void _trim_trailing_whitespace(TextEdit *tx);
|
||||||
|
|
||||||
void _goto_script_line2(int p_line);
|
void _goto_script_line2(int p_line);
|
||||||
void _goto_script_line(REF p_script,int p_line);
|
void _goto_script_line(REF p_script,int p_line);
|
||||||
void _breaked(bool p_breaked,bool p_can_debug);
|
void _breaked(bool p_breaked,bool p_can_debug);
|
||||||
|
|
Loading…
Reference in New Issue