forked from qt-creator/qt-creator
grab Escape and Ctrl-R etc for fakevim when activated
This commit is contained in:
@@ -141,7 +141,7 @@ class FakeVimHandler::Private
|
|||||||
public:
|
public:
|
||||||
Private(FakeVimHandler *parent);
|
Private(FakeVimHandler *parent);
|
||||||
|
|
||||||
bool eventFilter(QObject *ob, QEvent *ev);
|
bool handleEvent(QKeyEvent *ev);
|
||||||
void handleExCommand(const QString &cmd);
|
void handleExCommand(const QString &cmd);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -187,6 +187,7 @@ private:
|
|||||||
QTextCursor selectRange(int beginLine, int endLine);
|
QTextCursor selectRange(int beginLine, int endLine);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void setWidget(QWidget *ob);
|
||||||
void enterInsertMode();
|
void enterInsertMode();
|
||||||
void enterCommandMode();
|
void enterCommandMode();
|
||||||
void showRedMessage(const QString &msg);
|
void showRedMessage(const QString &msg);
|
||||||
@@ -194,6 +195,7 @@ public:
|
|||||||
void updateMiniBuffer();
|
void updateMiniBuffer();
|
||||||
void updateSelection();
|
void updateSelection();
|
||||||
void quit();
|
void quit();
|
||||||
|
QWidget *editor() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QTextEdit *m_textedit;
|
QTextEdit *m_textedit;
|
||||||
@@ -214,7 +216,6 @@ private:
|
|||||||
|
|
||||||
bool m_fakeEnd;
|
bool m_fakeEnd;
|
||||||
|
|
||||||
QWidget *editor() const;
|
|
||||||
bool isSearchMode() const
|
bool isSearchMode() const
|
||||||
{ return m_mode == SearchForwardMode || m_mode == SearchBackwardMode; }
|
{ return m_mode == SearchForwardMode || m_mode == SearchBackwardMode; }
|
||||||
int m_gflag; // whether current command started with 'g'
|
int m_gflag; // whether current command started with 'g'
|
||||||
@@ -281,7 +282,7 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent)
|
|||||||
m_config[ConfigStartOfLine] = ConfigOn;
|
m_config[ConfigStartOfLine] = ConfigOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
|
bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
|
||||||
{
|
{
|
||||||
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
|
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
|
||||||
int key = keyEvent->key();
|
int key = keyEvent->key();
|
||||||
@@ -290,11 +291,6 @@ bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Fake "End of line"
|
// Fake "End of line"
|
||||||
m_textedit = qobject_cast<QTextEdit *>(ob);
|
|
||||||
m_plaintextedit = qobject_cast<QPlainTextEdit *>(ob);
|
|
||||||
if (!m_textedit && !m_plaintextedit)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
m_tc = EDITOR(textCursor());
|
m_tc = EDITOR(textCursor());
|
||||||
|
|
||||||
if (m_fakeEnd)
|
if (m_fakeEnd)
|
||||||
@@ -320,8 +316,8 @@ bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
|
|||||||
|
|
||||||
bool FakeVimHandler::Private::handleKey(int key, const QString &text)
|
bool FakeVimHandler::Private::handleKey(int key, const QString &text)
|
||||||
{
|
{
|
||||||
//qDebug() << "KEY: " << key << text << "POS: " << m_tc.position();
|
qDebug() << "KEY: " << key << text << "POS: " << m_tc.position();
|
||||||
//qDebug() << "\nUNDO: " << m_undoStack << "\nREDO: " << m_redoStack;
|
qDebug() << "\nUNDO: " << m_undoStack << "\nREDO: " << m_redoStack;
|
||||||
if (m_mode == InsertMode)
|
if (m_mode == InsertMode)
|
||||||
return handleInsertMode(key, text);
|
return handleInsertMode(key, text);
|
||||||
if (m_mode == CommandMode)
|
if (m_mode == CommandMode)
|
||||||
@@ -1454,6 +1450,11 @@ void FakeVimHandler::Private::quit()
|
|||||||
q->quitRequested(editor());
|
q->quitRequested(editor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FakeVimHandler::Private::setWidget(QWidget *ob)
|
||||||
|
{
|
||||||
|
m_textedit = qobject_cast<QTextEdit *>(ob);
|
||||||
|
m_plaintextedit = qobject_cast<QPlainTextEdit *>(ob);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
@@ -1472,14 +1473,34 @@ FakeVimHandler::~FakeVimHandler()
|
|||||||
|
|
||||||
bool FakeVimHandler::eventFilter(QObject *ob, QEvent *ev)
|
bool FakeVimHandler::eventFilter(QObject *ob, QEvent *ev)
|
||||||
{
|
{
|
||||||
if (ev->type() != QEvent::KeyPress)
|
//if (ev->type() == QEvent::KeyPress || ev->type() == QEvent::ShortcutOverride)
|
||||||
|
// qDebug() << ob << ev->type() << qApp << d->editor()
|
||||||
|
// << QEvent::KeyPress << QEvent::ShortcutOverride;
|
||||||
|
|
||||||
|
if (ev->type() == QEvent::KeyPress && ob == d->editor())
|
||||||
|
return d->handleEvent(static_cast<QKeyEvent *>(ev));
|
||||||
|
|
||||||
|
if (ev->type() == QEvent::ShortcutOverride && ob == d->editor()) {
|
||||||
|
QKeyEvent *kev = static_cast<QKeyEvent *>(ev);
|
||||||
|
bool handleIt = kev->key() == Qt::Key_Escape
|
||||||
|
|| (kev->key() == Key_B && kev->modifiers() == Qt::ControlModifier)
|
||||||
|
|| (kev->key() == Key_F && kev->modifiers() == Qt::ControlModifier)
|
||||||
|
|| (kev->key() == Key_R && kev->modifiers() == Qt::ControlModifier)
|
||||||
|
|| (kev->key() == Key_V && kev->modifiers() == Qt::ControlModifier);
|
||||||
|
if (handleIt) {
|
||||||
|
d->handleEvent(kev);
|
||||||
|
ev->accept();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return QObject::eventFilter(ob, ev);
|
return QObject::eventFilter(ob, ev);
|
||||||
return d->eventFilter(ob, ev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimHandler::addWidget(QWidget *widget)
|
void FakeVimHandler::addWidget(QWidget *widget)
|
||||||
{
|
{
|
||||||
widget->installEventFilter(this);
|
widget->installEventFilter(this);
|
||||||
|
d->setWidget(widget);
|
||||||
d->enterCommandMode();
|
d->enterCommandMode();
|
||||||
if (QTextEdit *ed = qobject_cast<QTextEdit *>(widget)) {
|
if (QTextEdit *ed = qobject_cast<QTextEdit *>(widget)) {
|
||||||
//ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
|
//ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
|
||||||
@@ -1488,7 +1509,8 @@ void FakeVimHandler::addWidget(QWidget *widget)
|
|||||||
//ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
|
//ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
|
||||||
ed->setLineWrapMode(QPlainTextEdit::NoWrap);
|
ed->setLineWrapMode(QPlainTextEdit::NoWrap);
|
||||||
}
|
}
|
||||||
d->showBlackMessage("vi emulation mode. Hit <Shift+Esc>:q<Return> to quit");
|
//d->showBlackMessage("vi emulation mode. Hit <Shift+Esc>:q<Return> to quit");
|
||||||
|
d->showBlackMessage("vi emulation mode.");
|
||||||
d->updateMiniBuffer();
|
d->updateMiniBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1501,8 +1523,7 @@ void FakeVimHandler::removeWidget(QWidget *widget)
|
|||||||
|
|
||||||
void FakeVimHandler::handleCommand(QWidget *widget, const QString &cmd)
|
void FakeVimHandler::handleCommand(QWidget *widget, const QString &cmd)
|
||||||
{
|
{
|
||||||
d->m_textedit = qobject_cast<QTextEdit *>(widget);
|
d->setWidget(widget);
|
||||||
d->m_plaintextedit = qobject_cast<QPlainTextEdit *>(widget);
|
|
||||||
d->handleExCommand(cmd);
|
d->handleExCommand(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user