Skip to content

Commit 9ccf763

Browse files
committed
Tab action has been fixed.
1 parent 215a5b7 commit 9ccf763

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

codeeditor.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -291,12 +291,13 @@ void CodeEditor::setDebugMode(bool mode)
291291

292292
void CodeEditor::putTab()
293293
{
294-
QString insertion = " ";
295-
296294
QTextCursor cursor = textCursor();
297295
if (cursor.selectionEnd() - cursor.selectionStart() <= 0) {
296+
int spacesToAdd = 4 - cursor.columnNumber() % 4;
297+
QString insertion(spacesToAdd, ' ');
298298
insertPlainText(insertion);
299299
} else {
300+
QString insertion = " ";
300301
QTextBlock firstBlock = document()->findBlock(cursor.selectionStart());
301302
QTextBlock lastBlock = document()->findBlock(cursor.selectionEnd() - 1);
302303

@@ -311,26 +312,32 @@ void CodeEditor::putTab()
311312

312313
void CodeEditor::deleteTab()
313314
{
314-
QString deletion = " ";
315-
316315
QTextCursor cursor = textCursor();
317316
if (cursor.selectionEnd() - cursor.selectionStart() <= 0) {
318-
//delete 4 spaces (tab)
319-
cursor.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, deletion.length());
320-
QString selected = cursor.selectedText();
321-
if (selected.startsWith(deletion))
322-
cursor.deletePreviousChar();
317+
int spacesToDelete = 4 - (4 - cursor.columnNumber() % 4) % 4;
318+
for (int i = 0; i < spacesToDelete; ++i) {
319+
if (cursor.columnNumber() != 0 && document()->characterAt(cursor.position() - 1) == ' ') {
320+
cursor.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, 1);
321+
} else {
322+
break;
323+
}
324+
}
325+
cursor.removeSelectedText();
323326
} else {
324327
QTextBlock firstBlock = document()->findBlock(cursor.selectionStart());
325328
QTextBlock lastBlock = document()->findBlock(cursor.selectionEnd() - 1);
326-
327329
cursor.setPosition(firstBlock.position());
328330
cursor.beginEditBlock();
329331
do {
330-
if (cursor.block().text().startsWith(deletion)) {
331-
cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, deletion.length());
332-
cursor.removeSelectedText();
332+
int spacesToDelete = 4;
333+
for (int i = 0; i < spacesToDelete; ++i) {
334+
if (document()->characterAt(cursor.position()) == ' ') {
335+
cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, 1);
336+
} else {
337+
break;
338+
}
333339
}
340+
cursor.removeSelectedText();
334341
} while (cursor.movePosition(QTextCursor::NextBlock) && cursor.position() <= lastBlock.position());
335342
cursor.endEditBlock();
336343
}

0 commit comments

Comments
 (0)