diff --git a/src/document/katedocument.cpp b/src/document/katedocument.cpp --- a/src/document/katedocument.cpp +++ b/src/document/katedocument.cpp @@ -114,19 +114,17 @@ return indexOf(list, entry) >= 0; } -static inline QChar matchingStartBracket(QChar c, bool withQuotes) +static inline QChar matchingStartBracket(const QChar &c) { switch (c.toLatin1()) { case '}': return QLatin1Char('{'); case ']': return QLatin1Char('['); case ')': return QLatin1Char('('); - case '\'': return withQuotes ? QLatin1Char('\'') : QChar(); - case '"': return withQuotes ? QLatin1Char('"') : QChar(); } return QChar(); } -static inline QChar matchingEndBracket(QChar c, bool withQuotes) +static inline QChar matchingEndBracket(const QChar &c, bool withQuotes = true) { switch (c.toLatin1()) { case '{': return QLatin1Char('}'); @@ -138,23 +136,23 @@ return QChar(); } -static inline QChar matchingBracket(QChar c, bool withQuotes) +static inline QChar matchingBracket(const QChar &c) { - QChar bracket = matchingStartBracket(c, withQuotes); + QChar bracket = matchingStartBracket(c); if (bracket.isNull()) { - bracket = matchingEndBracket(c, false); + bracket = matchingEndBracket(c, /*withQuotes=*/false); } return bracket; } static inline bool isStartBracket(const QChar &c) { - return ! matchingEndBracket(c, false).isNull(); + return ! matchingEndBracket(c, /*withQuotes=*/false).isNull(); } static inline bool isEndBracket(const QChar &c) { - return ! matchingStartBracket(c, false).isNull(); + return ! matchingStartBracket(c).isNull(); } static inline bool isBracket(const QChar &c) @@ -2961,7 +2959,7 @@ * we inserted a bracket? * => remember the matching closing one */ - closingBracket = matchingEndBracket(chars[0], true); + closingBracket = matchingEndBracket(chars[0]); /** * closing bracket for the autobracket we inserted earlier? @@ -2972,6 +2970,15 @@ view->cursorRight(); return true; } + + // Treat some char also as "auto bracket" when we have a selection, + // done this way to avoid undesired behaviour in the "normal edit flow" + if (view->selection() && closingBracket.isNull()) { + switch (chars[0].toLatin1()) { + case '`': closingBracket = QLatin1Char('`'); break; + case '<': closingBracket = QLatin1Char('>'); break; + } + } } /** @@ -4065,7 +4072,7 @@ return KTextEditor::Range::invalid(); } - const QChar opposite = matchingBracket(bracket, false); + const QChar opposite = matchingBracket(bracket); if (opposite.isNull()) { return KTextEditor::Range::invalid(); }