Vim: double-click to enter Visual mode

This commit is contained in:
Le Tan 2018-09-18 19:27:23 +08:00
parent 837fb47d4d
commit 14ab49165e
5 changed files with 23 additions and 3 deletions

View File

@ -186,6 +186,8 @@ VVim::VVim(VEditor *p_editor)
this, &VVim::handleMouseMoved); this, &VVim::handleMouseMoved);
connect(m_editor->object(), &VEditorObject::mouseReleased, connect(m_editor->object(), &VEditorObject::mouseReleased,
this, &VVim::handleMouseReleased); this, &VVim::handleMouseReleased);
connect(m_editor->object(), &VEditorObject::mouseDoubleClicked,
this, &VVim::handleMouseDoubleClicked);
} }
void VVim::initLeaderKey() void VVim::initLeaderKey()
@ -6357,12 +6359,17 @@ void VVim::amendCursorPosition()
void VVim::handleMousePressed(QMouseEvent *p_event) void VVim::handleMousePressed(QMouseEvent *p_event)
{ {
Q_UNUSED(p_event); Q_UNUSED(p_event);
QTextCursor cursor = m_editor->textCursorW();
if ((checkMode(VimMode::Visual) || checkMode(VimMode::VisualLine)) if ((checkMode(VimMode::Visual) || checkMode(VimMode::VisualLine))
&& p_event->buttons() != Qt::RightButton) { && p_event->buttons() != Qt::RightButton) {
setMode(VimMode::Normal); setMode(VimMode::Normal);
} else if (checkMode(VimMode::Normal)) { }
if (cursor.hasSelection()) { }
void VVim::handleMouseDoubleClicked(QMouseEvent *p_event)
{
Q_UNUSED(p_event);
if (checkMode(VimMode::Normal)) {
if (m_editor->textCursorW().hasSelection()) {
setMode(VimMode::Visual, false); setMode(VimMode::Visual, false);
maintainSelectionInVisualMode(); maintainSelectionInVisualMode();
} }

View File

@ -251,6 +251,8 @@ private slots:
void handleMouseReleased(QMouseEvent *p_event); void handleMouseReleased(QMouseEvent *p_event);
void handleMouseDoubleClicked(QMouseEvent *p_event);
// When we display cursor as block, it makes no sense to put cursor at the // When we display cursor as block, it makes no sense to put cursor at the
// end of line. // end of line.
void amendCursorPosition(); void amendCursorPosition();

View File

@ -598,6 +598,8 @@ signals:
void mouseReleased(QMouseEvent *p_event); void mouseReleased(QMouseEvent *p_event);
void mouseDoubleClicked(QMouseEvent *p_event);
void cursorPositionChanged(); void cursorPositionChanged();
private slots: private slots:

View File

@ -426,6 +426,13 @@ void VMdEditor::mousePressEvent(QMouseEvent *p_event)
emit m_object->mousePressed(p_event); emit m_object->mousePressed(p_event);
} }
void VMdEditor::mouseDoubleClickEvent(QMouseEvent *p_event)
{
VTextEdit::mouseDoubleClickEvent(p_event);
emit m_object->mouseDoubleClicked(p_event);
}
void VMdEditor::mouseReleaseEvent(QMouseEvent *p_event) void VMdEditor::mouseReleaseEvent(QMouseEvent *p_event)
{ {
if (handleMouseReleaseEvent(p_event)) { if (handleMouseReleaseEvent(p_event)) {

View File

@ -235,6 +235,8 @@ protected:
void mouseMoveEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;
void mouseDoubleClickEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;
void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;
bool canInsertFromMimeData(const QMimeData *p_source) const Q_DECL_OVERRIDE; bool canInsertFromMimeData(const QMimeData *p_source) const Q_DECL_OVERRIDE;