Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marco Bubke
flatpak-qt-creator
Commits
46fa3aa7
Commit
46fa3aa7
authored
May 05, 2010
by
hjk
Browse files
fakevim: fix a few search related peculiarities
parent
a4a56a75
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/plugins/fakevim/fakevimhandler.cpp
View file @
46fa3aa7
...
...
@@ -169,8 +169,7 @@ enum SubSubMode
UpCaseSubSubMode
,
// used for gU
ReplaceSubSubMode
,
// used for r after visual mode
TextObjectSubSubMode
,
// used for thing like iw, aW, as etc.
SearchForwardSubSubMode
,
SearchBackwardSubSubMode
,
SearchSubSubMode
,
};
enum
VisualMode
...
...
@@ -592,13 +591,9 @@ public:
bool
m_anchorPastEnd
;
bool
m_positionPastEnd
;
// '$' & 'l' in visual mode can move past eol
bool
isSearchSubSubMode
()
const
{
return
m_subsubmode
==
SearchForwardSubSubMode
||
m_subsubmode
==
SearchBackwardSubSubMode
;
}
int
m_gflag
;
// whether current command started with 'g'
QString
m_commandPrefix
;
QString
m_commandBuffer
;
QString
m_currentFileName
;
QString
m_currentMessage
;
...
...
@@ -792,7 +787,7 @@ bool FakeVimHandler::Private::wantsOverride(QKeyEvent *ev)
KEY_DEBUG
(
"SHORTCUT OVERRIDE"
<<
key
<<
" PASSING: "
<<
m_passing
);
if
(
key
==
Key_Escape
)
{
if
(
is
SearchSubSubMode
()
)
if
(
m_subsubmode
==
SearchSubSubMode
)
return
true
;
// Not sure this feels good. People often hit Esc several times
if
(
isNoVisualMode
()
&&
m_mode
==
CommandMode
)
...
...
@@ -980,7 +975,7 @@ EventResult FakeVimHandler::Private::handleKey(const Input &input)
{
if
(
m_mode
==
ExMode
)
return
handleExMode
(
input
);
if
(
is
SearchSubSubMode
()
)
if
(
m_subsubmode
==
SearchSubSubMode
)
return
handleSearchSubSubMode
(
input
);
if
(
m_mode
==
InsertMode
||
m_mode
==
CommandMode
)
{
g
.
pendingInput
.
append
(
input
);
...
...
@@ -1113,6 +1108,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
setPosition
(
qMin
(
anchor
(),
position
()));
enterExMode
();
m_currentMessage
.
clear
();
m_commandPrefix
=
QChar
();
m_commandBuffer
=
QString
(
".,+%1!"
).
arg
(
qAbs
(
endLine
-
beginLine
));
g
.
commandHistory
.
append
(
QString
());
g
.
commandHistoryIndex
=
g
.
commandHistory
.
size
()
-
1
;
...
...
@@ -1341,12 +1337,10 @@ void FakeVimHandler::Private::updateMiniBuffer()
else
msg
=
"-- INSERT --"
;
}
else
{
if
(
m_subsubmode
==
SearchForwardSubSubMode
)
msg
+=
'/'
;
else
if
(
m_subsubmode
==
SearchBackwardSubSubMode
)
msg
+=
'?'
;
if
(
m_subsubmode
==
SearchSubSubMode
)
msg
+=
m_commandPrefix
;
else
if
(
m_mode
==
ExMode
)
msg
+=
':'
;
msg
+=
m_commandPrefix
;
foreach
(
QChar
c
,
m_commandBuffer
)
{
if
(
c
.
unicode
()
<
32
)
{
msg
+=
'^'
;
...
...
@@ -1631,6 +1625,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
}
else
if
(
input
.
is
(
':'
))
{
enterExMode
();
m_currentMessage
.
clear
();
m_commandPrefix
=
input
.
text
().
at
(
0
);
m_commandBuffer
.
clear
();
if
(
isVisualMode
())
m_commandBuffer
=
"'<,'>"
;
...
...
@@ -1638,10 +1633,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
g
.
commandHistoryIndex
=
g
.
commandHistory
.
size
()
-
1
;
updateMiniBuffer
();
}
else
if
(
input
.
is
(
'/'
)
||
input
.
is
(
'?'
))
{
m_lastSearchForward
=
input
.
is
(
'/'
);
if
(
hasConfig
(
ConfigUseCoreSearch
))
{
// re-use the core dialog.
m_findPending
=
true
;
m_lastSearchForward
=
(
input
.
is
(
'/'
));
EDITOR
(
setTextCursor
(
m_tc
));
emit
q
->
findRequested
(
!
m_lastSearchForward
);
m_tc
=
EDITOR
(
textCursor
());
...
...
@@ -1650,9 +1645,9 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
// FIXME: make core find dialog sufficiently flexible to
// produce the "default vi" behaviour too. For now, roll our own.
m_currentMessage
.
clear
();
m_subsubmode
=
(
input
.
is
(
'/'
))
?
SearchForwardSubSubMode
:
SearchBackwardSubSubMode
;
m_commandBuffer
.
clear
();
m_subsubmode
=
SearchSubSubMode
;
m_commandPrefix
=
QLatin1Char
(
m_lastSearchForward
?
'/'
:
'?'
)
;
m_commandBuffer
=
QString
();
g
.
searchHistory
.
append
(
QString
());
g
.
searchHistoryIndex
=
g
.
searchHistory
.
size
()
-
1
;
updateCursor
();
...
...
@@ -1665,7 +1660,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_tc
.
select
(
QTextCursor
::
WordUnderCursor
);
QString
needle
=
"
\\
<"
+
m_tc
.
selection
().
toPlainText
()
+
"
\\
>"
;
g
.
searchHistory
.
append
(
needle
);
m_lastSearchForward
=
(
input
.
is
(
'*'
));
m_lastSearchForward
=
input
.
is
(
'*'
);
m_currentMessage
.
clear
();
m_commandPrefix
=
QLatin1Char
(
m_lastSearchForward
?
'/'
:
'?'
);
m_commandBuffer
=
needle
;
updateMiniBuffer
();
search
(
needle
,
m_lastSearchForward
);
recordJump
();
...
...
@@ -2003,9 +2001,12 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_tc
=
EDITOR
(
cursorForPosition
(
QPoint
(
0
,
EDITOR
(
height
())
/
2
)));
handleStartOfLine
();
finishMovement
();
}
else
if
(
input
.
is
(
'n'
)
||
input
.
is
(
'N'
)
)
{
}
else
if
(
input
.
is
(
'n'
))
{
search
(
lastSearchString
(),
m_lastSearchForward
);
recordJump
();
}
else
if
(
input
.
is
(
'N'
))
{
search
(
lastSearchString
(),
!
m_lastSearchForward
);
recordJump
();
}
else
if
(
isVisualMode
()
&&
(
input
.
is
(
'o'
)
||
input
.
is
(
'O'
)))
{
int
pos
=
position
();
setPosition
(
anchor
());
...
...
@@ -2512,27 +2513,24 @@ EventResult FakeVimHandler::Private::handleSearchSubSubMode(const Input &input)
enterCommandMode
();
updateMiniBuffer
();
}
else
if
(
input
.
isKey
(
Key_Backspace
))
{
if
(
m_commandBuffer
.
isEmpty
())
{
if
(
m_commandBuffer
.
isEmpty
())
enterCommandMode
();
}
else
{
else
m_commandBuffer
.
chop
(
1
);
}
updateMiniBuffer
();
}
else
if
(
input
.
isKey
(
Key_Left
))
{
// FIXME:
if
(
!
m_commandBuffer
.
isEmpty
())
m_commandBuffer
.
chop
(
1
);
updateMiniBuffer
();
}
else
if
(
input
.
isKey
(
Key_Return
)
&&
!
hasConfig
(
ConfigIncSearch
))
{
if
(
!
m_commandBuffer
.
isEmpty
())
{
QString
needle
=
m_commandBuffer
;
if
(
!
needle
.
isEmpty
())
{
g
.
searchHistory
.
takeLast
();
g
.
searchHistory
.
append
(
m_commandBuffer
);
m_lastSearchForward
=
(
m_subsubmode
==
SearchForwardSubSubMode
);
g
.
searchHistory
.
append
(
needle
);
search
(
lastSearchString
(),
m_lastSearchForward
);
recordJump
();
}
QString
needle
=
m_commandBuffer
.
mid
(
1
);
// FIXME: why
finishMovement
(
"/"
+
needle
+
"
\n
"
);
finishMovement
(
m_commandPrefix
+
needle
+
"
\n
"
);
enterCommandMode
();
highlightMatches
(
needle
);
updateMiniBuffer
();
...
...
@@ -2552,12 +2550,11 @@ EventResult FakeVimHandler::Private::handleSearchSubSubMode(const Input &input)
m_commandBuffer
+=
QChar
(
9
);
updateMiniBuffer
();
}
else
if
(
input
.
isKey
(
Key_Return
)
&&
hasConfig
(
ConfigIncSearch
))
{
QString
needle
=
m_commandBuffer
;
enterCommandMode
();
QString
needle
=
m_commandBuffer
.
mid
(
1
);
// FIXME: why
highlightMatches
(
needle
);
updateMiniBuffer
();
}
else
if
(
hasConfig
(
ConfigIncSearch
))
{
m_commandBuffer
=
m_commandBuffer
.
mid
(
1
);
// FIXME: why
QString
needle
=
m_commandBuffer
+
input
.
text
();
search
(
needle
,
m_lastSearchForward
,
true
);
updateMiniBuffer
();
...
...
@@ -3192,7 +3189,7 @@ static void vimPatternToQtPattern(QString *needle, QTextDocument::FindFlags *fla
void
FakeVimHandler
::
Private
::
search
(
const
QString
&
needle0
,
bool
forward
,
bool
incSearch
)
{
showBlackMessage
((
forward
?
'/'
:
'?'
)
+
needle0
);
showBlackMessage
(
QLatin1Char
(
forward
?
'/'
:
'?'
)
+
needle0
);
CursorPosition
origPosition
=
cursorPosition
();
QTextDocument
::
FindFlags
flags
=
QTextDocument
::
FindCaseSensitively
;
if
(
!
forward
)
...
...
@@ -3270,7 +3267,6 @@ void FakeVimHandler::Private::highlightMatches(const QString &needle0)
QString
needle
=
needle0
;
vimPatternToQtPattern
(
&
needle
,
&
flags
);
EDITOR
(
setTextCursor
(
tc
));
while
(
EDITOR
(
find
(
needle
,
flags
)))
{
tc
=
EDITOR
(
textCursor
());
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment