@@ -291,12 +291,13 @@ void CodeEditor::setDebugMode(bool mode)
291291
292292void 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
312313void 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