Index: src/dialogs/katedialogs.cpp =================================================================== --- src/dialogs/katedialogs.cpp +++ src/dialogs/katedialogs.cpp @@ -501,6 +501,8 @@ KateRendererConfig::global()->setWordWrapMarker(ui->chkShowStaticWordWrapMarker->isChecked()); KateViewConfig::global()->setAutoBrackets(ui->chkAutoBrackets->isChecked()); + // TODO Add QLineEdit or similar to the config page, with this dummy you have "true" or "false" as chars set :-) + KateViewConfig::global()->setValue(KateViewConfig::CharsToEncloseSelection, ui->chkAutoBrackets->isChecked()); KateViewConfig::global()->setSmartCopyCut(ui->chkSmartCopyCut->isChecked()); KateViewConfig::global()->setMousePasteAtCursorPosition(ui->chkMousePasteAtCursorPosition->isChecked()); Index: src/document/katedocument.cpp =================================================================== --- src/document/katedocument.cpp +++ src/document/katedocument.cpp @@ -3039,7 +3039,6 @@ */ QChar closingBracket; if (view->config()->autoBrackets() && chars.size() == 1) { - const QChar typedChar = chars.at(0); /** * we inserted a bracket? * => remember the matching closing one @@ -3057,6 +3056,13 @@ } } + // Treat some char also as "auto bracket" only when we have a selection + if (view->selection() && closingBracket.isNull() && view->config()->encloseSelectionInChars()) { + if (view->config()->charsToEncloseSelection().contains(typedChar)) { + closingBracket = typedChar; + } + } + editStart(); /** Index: src/utils/kateconfig.h =================================================================== --- src/utils/kateconfig.h +++ src/utils/kateconfig.h @@ -945,6 +945,13 @@ return s_global; } + /** + * Known config entries + */ + enum ConfigEntryTypes { + CharsToEncloseSelection + }; + public: /** * Read config from object @@ -1106,6 +1113,15 @@ bool autoBrackets() const; void setAutoBrackets(bool on); + bool encloseSelectionInChars() const + { + return !value(CharsToEncloseSelection).toString().isEmpty(); + } + QString charsToEncloseSelection() const + { + return value(CharsToEncloseSelection).toString(); + } + bool backspaceRemoveComposed() const; void setBackspaceRemoveComposed(bool on); Index: src/utils/kateconfig.cpp =================================================================== --- src/utils/kateconfig.cpp +++ src/utils/kateconfig.cpp @@ -534,6 +534,11 @@ { s_global = this; + // Init all known config entries + // NOTE: Ensure to keep the same order as listed in enum ConfigEntryTypes or it will later assert! + // addConfigEntry(ConfigEntry(, , , , [])) + addConfigEntry(ConfigEntry(CharsToEncloseSelection, "Chars To Enclose Selection", QString(), QString())); + // init with defaults from config or really hardcoded ones KConfigGroup config(KTextEditor::EditorPrivate::config(), "KTextEditor View"); readConfig(config);