diff --git a/part/document/katedocument.cpp b/part/document/katedocument.cpp index 3ba2ddd..1409aaf 100644 --- a/part/document/katedocument.cpp +++ b/part/document/katedocument.cpp @@ -2684,7 +2684,9 @@ void KateDocument::backspace( KateView *view, const KTextEditor::Cursor& c ) { // ordinary backspace //c.cursor.col--; - removeText(KTextEditor::Range(line, col-1, line, col)); + KTextEditor::Cursor beginCursor(line, view->currentTextLayout()->previousCursorPosition(c.column())); + KTextEditor::Cursor endCursor(line, col); + removeText(KTextEditor::Range(beginCursor, endCursor)); } else { @@ -2705,8 +2707,11 @@ void KateDocument::backspace( KateView *view, const KTextEditor::Cursor& c ) // only spaces on left side of cursor indent( KTextEditor::Range( line, 0, line, 0), -1); } - else - removeText(KTextEditor::Range(line, col-1, line, col)); + else { + KTextEditor::Cursor beginCursor(line, view->currentTextLayout()->previousCursorPosition(c.column())); + KTextEditor::Cursor endCursor(line, col); + removeText(KTextEditor::Range(beginCursor, endCursor)); + } } } else @@ -2740,7 +2745,8 @@ void KateDocument::del( KateView *view, const KTextEditor::Cursor& c ) if( c.column() < (int) m_buffer->plainLine(c.line())->length()) { - removeText(KTextEditor::Range(c, 1)); + KTextEditor::Cursor endCursor(c.line(), view->currentTextLayout()->nextCursorPosition(c.column())); + removeText(KTextEditor::Range(c, endCursor)); } else if ( c.line() < lastLine() ) { diff --git a/part/view/kateview.cpp b/part/view/kateview.cpp index 39f0956..b081657 100644 --- a/part/view/kateview.cpp +++ b/part/view/kateview.cpp @@ -2341,6 +2341,12 @@ QString KateView::currentTextLine( ) return m_doc->line( cursorPosition().line() ); } +QTextLayout * KateView::currentTextLayout() const +{ + KateLineLayoutPtr thisLine = m_viewInternal->cache()->line(cursorPosition().line()); + return thisLine->layout(); +} + QString KateView::searchPattern() const { if (hasSearchBar()) { diff --git a/part/view/kateview.h b/part/view/kateview.h index 69dbe1b..25126d0 100644 --- a/part/view/kateview.h +++ b/part/view/kateview.h @@ -382,6 +382,7 @@ class KATEPART_TESTS_EXPORT KateView : public KTextEditor::View, bool isOverwriteMode() const; enum KTextEditor::View::EditMode viewEditMode() const {return isOverwriteMode() ? KTextEditor::View::EditOverwrite : KTextEditor::View::EditInsert;} QString currentTextLine(); + QTextLayout * currentTextLayout() const; /** * The current search pattern.