# HG changeset patch # User Torsten Lilge # Date 1582387381 -3600 # Node ID 4cfe24f563368e7ed9a2f3ba92f2c66aab3de14f # Parent 712cd23aaa4fa34c11bf28dc2565c04663d76aa7 add editor prefs for forcing coding standards (bug #57860, bug #57861) * gui-preferences-ed.h: add new editor preferences for removing trailing spaces and forcing a newline at end of the file when saving the file. * file-editor-tab.cc (eol_string): new method for determining the current end of line string; (do_save_file): depending on the user preferences, rmove trailing spaces and/or add a newline at the end before saving the file * file-editor-tab.h: new private method eol_string * settings-dialog.cc (settings_dialog): initialize new check boxes for handling trailing spaces and newline at end of file with prefs from the settings file; (write_changed_settings): write checked states of new check boxes into the settings file * settings-dialog.ui: new check boxes for handling trailing spaces and newline at end of file diff -r 712cd23aaa4f -r 4cfe24f56336 libgui/src/gui-preferences-ed.h --- a/libgui/src/gui-preferences-ed.h Fri Feb 21 12:40:53 2020 -0800 +++ b/libgui/src/gui-preferences-ed.h Sat Feb 22 17:03:01 2020 +0100 @@ -215,6 +215,12 @@ const gui_pref ed_notebook_tab_width_max ("editor/notebook_tab_width_max", QVariant (300)); +const gui_pref +ed_force_newline ("editor/force_newline", QVariant (true)); + +const gui_pref +ed_rm_trailing_spaces ("editor/rm_trailing_spaces", QVariant (true)); + #if defined (HAVE_QSCINTILLA) #if defined (Q_OS_WIN32) const int os_eol_mode = QsciScintilla::EolWindows; diff -r 712cd23aaa4f -r 4cfe24f56336 libgui/src/m-editor/file-editor-tab.cc --- a/libgui/src/m-editor/file-editor-tab.cc Fri Feb 21 12:40:53 2020 -0800 +++ b/libgui/src/m-editor/file-editor-tab.cc Sat Feb 22 17:03:01 2020 +0100 @@ -1990,6 +1990,21 @@ return eol_mode; } + QString file_editor_tab::eol_string (void) + { + switch (m_edit_area->eolMode ()) + { + case QsciScintilla::EolWindows: + return ("\r\n"); + case QsciScintilla::EolMac: + return ("\r"); + case QsciScintilla::EolUnix: + return ("\n"); + } + + return QString (); + } + void file_editor_tab::update_eol_indicator (void) { switch (m_edit_area->eolMode ()) @@ -2255,6 +2270,39 @@ if (! codec) return; // No valid codec + // Remove trailing white spaces and force file ending with + // a newline if desired + + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings *settings = rmgr.get_settings (); + + bool rm_trailing_space = settings->value (ed_rm_trailing_spaces).toBool (); + bool force_newline = settings->value (ed_force_newline).toBool (); + + if (rm_trailing_space || force_newline) + { + int line, col; + m_edit_area->getCursorPosition (&line,&col); + + QString eol = eol_string (); + QString edit_text = m_edit_area->text (); + + if (rm_trailing_space) + edit_text.replace (QRegExp ("[\\t ]+" + eol), eol); + + if (force_newline) + { + int last_non_white_space = edit_text.lastIndexOf (QRegExp ("\\S")); + edit_text.chop (edit_text.length () - last_non_white_space - 1); + edit_text.append (eol); + } + + m_edit_area->setText (edit_text); + + m_edit_area->setCursorPosition (line,col); + } + + // Save the file out.setCodec (codec); QApplication::setOverrideCursor (Qt::WaitCursor); diff -r 712cd23aaa4f -r 4cfe24f56336 libgui/src/m-editor/file-editor-tab.h --- a/libgui/src/m-editor/file-editor-tab.h Fri Feb 21 12:40:53 2020 -0800 +++ b/libgui/src/m-editor/file-editor-tab.h Sat Feb 22 17:03:01 2020 +0100 @@ -295,6 +295,7 @@ QString get_function_name (void); QsciScintilla::EolMode detect_eol_mode (void); + QString eol_string (void); void update_eol_indicator (void); octave_qscintilla *m_edit_area; diff -r 712cd23aaa4f -r 4cfe24f56336 libgui/src/settings-dialog.cc --- a/libgui/src/settings-dialog.cc Fri Feb 21 12:40:53 2020 -0800 +++ b/libgui/src/settings-dialog.cc Sat Feb 22 17:03:01 2020 +0100 @@ -350,6 +350,8 @@ editor_restoreSession->setChecked (settings->value (ed_restore_session).toBool ()); editor_create_new_file->setChecked (settings->value (ed_create_new_file).toBool ()); editor_reload_changed_files->setChecked (settings->value (ed_always_reload_changed_files).toBool ()); + editor_force_newline->setChecked (settings->value (ed_force_newline).toBool ()); + editor_remove_trailing_spaces->setChecked (settings->value (ed_rm_trailing_spaces).toBool ()); editor_hiding_closes_files->setChecked (settings->value (ed_hiding_closes_files).toBool ()); editor_show_dbg_file->setChecked (settings->value (ed_show_dbg_file).toBool ()); @@ -935,6 +937,8 @@ settings->setValue (ed_create_new_file.key, editor_create_new_file->isChecked ()); settings->setValue (ed_hiding_closes_files.key, editor_hiding_closes_files->isChecked ()); settings->setValue (ed_always_reload_changed_files.key, editor_reload_changed_files->isChecked ()); + settings->setValue (ed_force_newline.key, editor_force_newline->isChecked ()); + settings->setValue (ed_rm_trailing_spaces.key, editor_remove_trailing_spaces->isChecked ()); settings->setValue (ed_show_dbg_file.key, editor_show_dbg_file->isChecked ()); settings->setValue (cs_font_size.key, terminal_fontSize->value ()); diff -r 712cd23aaa4f -r 4cfe24f56336 libgui/src/settings-dialog.ui --- a/libgui/src/settings-dialog.ui Fri Feb 21 12:40:53 2020 -0800 +++ b/libgui/src/settings-dialog.ui Sat Feb 22 17:03:01 2020 +0100 @@ -32,7 +32,7 @@ - 5 + 2 @@ -841,9 +841,9 @@ 0 - 0 + -898 1021 - 1467 + 1529 @@ -2053,7 +2053,7 @@ - + 0 @@ -2111,7 +2111,7 @@ - + @@ -2138,7 +2138,7 @@ - + Close all files when the editor widget is closed/hidden @@ -2148,6 +2148,26 @@ + + + + Force newline at end when saving file + + + true + + + + + + + Remove trailing spaces when saving file + + + true + + +