https://bugs.kde.org/show_bug.cgi?id=370715

--- Comment #14 from Janek Bevendorff <jbev_kdebugs...@refining-linux.org> ---
I played a little with the ktexteditor code. The culprit for the C-style
indenter is this part (line 774):

    } else if (firstPos == column - 1 && c == '}') {
        var indentation = findLeftBrace(line, firstPos);
        if (indentation == -1)
            indentation = -2;
        return indentation;
    }

When I manually enter "{}", then firstPos is 4 and column is 6. However,
when using automatic bracket completion, my cursor is at 5, so the
condition is true and findLeftBrace() is called which retrieves a cursor
to the preceding brace like that:

var cursor = document.anchor(line, column, '{');

But since the cursor is before the insert position, this always results
in a (1, 0) cursor and therefore always unindents the line. My fix would
be to extend the initial check with one more condition:

} else if (firstPos == column - 1 && c == '}' &&
           document.charAt(line, firstPos) == '}') {

This would simply check if the inserted character is actually where the
cursor is. If not, it was probably inserted automatically.

The C++/boost indenter seems to be a lot more complex and I haven't
looked into that issue yet.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to