Set new text cursor and scroll in editor widget only if it's only
needed. Sometimes these action can have side-effects.
Set new cursor and scroll especially after no pending input and commands
are available to process for FakeVim.
Change-Id: I47df4d0328ac990e2e5c6981955ea7d1bd608c71
Reviewed-by: hjk <hjk121@nokiamail.com>
Using QTextDocument::availableUndoSteps() to get revision of document is
very bad because it undo/redo stack starts to break when maximal number
of undo is reached.
On the other hand QTextDocument::revision() number is always increased,
even on QTextDocument::redo(), so external undo/redo can still break
undo/redo commands in FakeVim.
Change-Id: If1698df8f43a878295eebddd59aebe304cdf3081
Reviewed-by: hjk <hjk121@nokiamail.com>
Break edit block at current line so that other line is not marked as
changed.
Change-Id: Iea1c3615899fdd3558861e7f3a319f796c5f247b
Reviewed-by: hjk <hjk121@nokiamail.com>
Commands like 'ciw', 'gUl' work with renaming and code completion if
'passkeys' option is enabled.
Change-Id: I0cd69e13a0e7773d7cba82e571cc855aa90af7ba
Reviewed-by: hjk <hjk121@nokiamail.com>
Don't use QTextCursor::beginEditBlock() and others since it can change
the behavior of underlying editor widget. Use these methods only for
interrupting current edit block.
Change-Id: I848d6287faeeaad9c04a76758bd0b2cc673ad2ef
Reviewed-by: hjk <hjk121@nokiamail.com>
Emulate Vim scrolling behavior. Consider only fully visible lines in
editor widget.
Don't ignore last empty line in document.
Change-Id: Id2c4fd744fb3c4c69324ea6456db424186563bc9
Reviewed-by: hjk <hjk121@nokiamail.com>
Option to pass some key presses in insert mode to editor widget
(replaces 'passnewline'). This allows to rename symbols in insert mode,
complete parenthesis blocks, expand comments etc.
Macro expansion and code-completion works with dot command.
Task-number:QTCREATORBUG-4828
Change-Id: I5ff43818d4f7f183cd6f4ed8cc3a4586469ab65d
Reviewed-by: hjk <hjk121@nokiamail.com>
Don't handle user mappings in commands that cannot be followed by
movement command. For example, key "<SPACE>" in after "t" command cannot
be handled as user mapping.
Change-Id: I97582d23ae637b30b1058b9d2b381a869bbebb79
Reviewed-by: hjk <hjk121@nokiamail.com>
With a split view open (:sp) closing the split
editor (:on) would crash.
Change-Id: I85defb6b9d3e1d63a524eab5ebf2be368d8ccc33
Reviewed-by: hjk <hjk121@nokiamail.com>
Record macro with 'q{0-9a-zA-Z"}' command and replay it with
'@{0-9a-z".*+}'. Replaying with prompt ('=' instead of register) not
supported.
Change-Id: I49965a99d10910e8df09e62020ed496542e3b249
Reviewed-by: hjk <hjk121@nokiamail.com>
Option 'passnewline' ('pnl') passes new line in insert mode and on 'o'
and 'O' commands to editor widget. This way the editor widget can handle
the indentation or insert characters (e.g. asterisk if in C block
comment).
Change-Id: I06afab6b20b49e1b4d31447826c847d36d32806f
Reviewed-by: hjk <hjk121@nokiamail.com>
It's possible to use FakeVim as standalone plugin for a QTextEdit or
QPlainTextEdit widget, so there should be minimum dependencies on
Qt Creator code.
Change-Id: I415ed87f5e4d97ea78d9d25a8f0c82701ef1f70d
Reviewed-by: hjk <hjk121@nokiamail.com>
Mapping <S-Insert> is alias of 'p' in command mode and inserts clipboard
content in insert mode.
Change-Id: Id53890ee4e7df0140fe1e0791d620bda315f3924
Reviewed-by: hjk <hjk121@nokiamail.com>
In Qt 5, QTextCursor::movePosition() with QTextCursor::Right as move
operation will not move the cursor if it's at the end of line/block.
Change-Id: I5fce9674f2031d54c69d89f93ffaa9d2e89b4fc4
Reviewed-by: hjk <hjk121@nokiamail.com>
Fix warning 'suggest a space before ";" or explicit braces around
empty body in "for" statement'
Change-Id: Ib4bff046cbdb6756fbcf66000a9197863d4f3b41
Reviewed-by: hjk <hjk121@nokiamail.com>