mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-06 06:19:52 +08:00
Vim: support specifying leader key via [editor]/vim_leader_key
This commit is contained in:
parent
cbe83afb91
commit
94828a65ad
@ -262,6 +262,10 @@ key_mode=0
|
|||||||
; Enable smart input method in Vim mode (disable IM in non-Insert modes)
|
; Enable smart input method in Vim mode (disable IM in non-Insert modes)
|
||||||
enable_smart_im_in_vim_mode=true
|
enable_smart_im_in_vim_mode=true
|
||||||
|
|
||||||
|
; Leader key in Vim mode
|
||||||
|
; Should be one character long
|
||||||
|
vim_leader_key=" "
|
||||||
|
|
||||||
[export]
|
[export]
|
||||||
; Path of the wkhtmltopdf tool
|
; Path of the wkhtmltopdf tool
|
||||||
wkhtmltopdf=wkhtmltopdf
|
wkhtmltopdf=wkhtmltopdf
|
||||||
|
@ -83,6 +83,68 @@ static QChar keyToChar(int p_key, int p_modifiers)
|
|||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ADDCHAR(x, y) case (x): {p_key = (y); break;}
|
||||||
|
#define ADDCHAR_SHIFT(x, y) case (x): {p_key = (y); p_modifiers = Qt::ShiftModifier; break;}
|
||||||
|
|
||||||
|
static void charToKey(const QChar &p_char, int &p_key, int &p_modifiers)
|
||||||
|
{
|
||||||
|
p_modifiers = Qt::NoModifier;
|
||||||
|
|
||||||
|
ushort ucode = p_char.unicode();
|
||||||
|
if (ucode >= '0' && ucode <= '9') {
|
||||||
|
p_key = Qt::Key_0 + ucode - '0';
|
||||||
|
return;
|
||||||
|
} else if (ucode >= 'a' && ucode <= 'z') {
|
||||||
|
p_key = Qt::Key_A + ucode - 'a';
|
||||||
|
return;
|
||||||
|
} else if (ucode >= 'A' && ucode <= 'Z') {
|
||||||
|
p_key = Qt::Key_A + ucode - 'A';
|
||||||
|
p_modifiers = Qt::ShiftModifier;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (p_char.unicode()) {
|
||||||
|
ADDCHAR('\t', Qt::Key_Tab);
|
||||||
|
ADDCHAR(' ', Qt::Key_Space);
|
||||||
|
ADDCHAR_SHIFT('!', Qt::Key_Exclam);
|
||||||
|
ADDCHAR_SHIFT('"', Qt::Key_QuoteDbl);
|
||||||
|
ADDCHAR_SHIFT('#', Qt::Key_NumberSign);
|
||||||
|
ADDCHAR_SHIFT('$', Qt::Key_Dollar);
|
||||||
|
ADDCHAR_SHIFT('%', Qt::Key_Percent);
|
||||||
|
ADDCHAR_SHIFT('&', Qt::Key_Ampersand);
|
||||||
|
ADDCHAR('\'', Qt::Key_Apostrophe);
|
||||||
|
ADDCHAR_SHIFT('(', Qt::Key_ParenLeft);
|
||||||
|
ADDCHAR_SHIFT(')', Qt::Key_ParenRight);
|
||||||
|
ADDCHAR_SHIFT('*', Qt::Key_Asterisk);
|
||||||
|
ADDCHAR_SHIFT('+', Qt::Key_Plus);
|
||||||
|
ADDCHAR(',', Qt::Key_Comma);
|
||||||
|
ADDCHAR('-', Qt::Key_Minus);
|
||||||
|
ADDCHAR('.', Qt::Key_Period);
|
||||||
|
ADDCHAR('/', Qt::Key_Slash);
|
||||||
|
ADDCHAR_SHIFT(':', Qt::Key_Colon);
|
||||||
|
ADDCHAR(';', Qt::Key_Semicolon);
|
||||||
|
ADDCHAR_SHIFT('<', Qt::Key_Less);
|
||||||
|
ADDCHAR('=', Qt::Key_Equal);
|
||||||
|
ADDCHAR_SHIFT('>', Qt::Key_Greater);
|
||||||
|
ADDCHAR_SHIFT('?', Qt::Key_Question);
|
||||||
|
ADDCHAR_SHIFT('@', Qt::Key_At);
|
||||||
|
ADDCHAR('[', Qt::Key_BracketLeft);
|
||||||
|
ADDCHAR('\\', Qt::Key_Backslash);
|
||||||
|
ADDCHAR(']', Qt::Key_BracketRight);
|
||||||
|
ADDCHAR_SHIFT('^', Qt::Key_AsciiCircum);
|
||||||
|
ADDCHAR_SHIFT('_', Qt::Key_Underscore);
|
||||||
|
ADDCHAR('`', Qt::Key_QuoteLeft);
|
||||||
|
ADDCHAR_SHIFT('{', Qt::Key_BraceLeft);
|
||||||
|
ADDCHAR_SHIFT('|', Qt::Key_Bar);
|
||||||
|
ADDCHAR_SHIFT('}', Qt::Key_BraceRight);
|
||||||
|
ADDCHAR_SHIFT('~', Qt::Key_AsciiTilde);
|
||||||
|
|
||||||
|
default:
|
||||||
|
p_key = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static QString keyToString(int p_key, int p_modifiers)
|
static QString keyToString(int p_key, int p_modifiers)
|
||||||
{
|
{
|
||||||
QChar ch = keyToChar(p_key, p_modifiers);
|
QChar ch = keyToChar(p_key, p_modifiers);
|
||||||
@ -114,6 +176,8 @@ VVim::VVim(VEditor *p_editor)
|
|||||||
|
|
||||||
setMode(VimMode::Normal);
|
setMode(VimMode::Normal);
|
||||||
|
|
||||||
|
initLeaderKey();
|
||||||
|
|
||||||
initRegisters();
|
initRegisters();
|
||||||
|
|
||||||
connect(m_editor->object(), &VEditorObject::mousePressed,
|
connect(m_editor->object(), &VEditorObject::mousePressed,
|
||||||
@ -124,6 +188,17 @@ VVim::VVim(VEditor *p_editor)
|
|||||||
this, &VVim::handleMouseReleased);
|
this, &VVim::handleMouseReleased);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VVim::initLeaderKey()
|
||||||
|
{
|
||||||
|
QChar ch = g_config->getVimLeaderKey();
|
||||||
|
Q_ASSERT(!ch.isNull());
|
||||||
|
|
||||||
|
int key, modifiers;
|
||||||
|
charToKey(ch, key, modifiers);
|
||||||
|
m_leaderKey = Key(key, modifiers);
|
||||||
|
qDebug() << "Vim leader key" << ch << key << modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
// Set @p_cursor's position specified by @p_positionInBlock.
|
// Set @p_cursor's position specified by @p_positionInBlock.
|
||||||
// If @p_positionInBlock is bigger than the block's length, move to the end of block.
|
// If @p_positionInBlock is bigger than the block's length, move to the end of block.
|
||||||
// Need to setTextCursor() after calling this.
|
// Need to setTextCursor() after calling this.
|
||||||
|
@ -678,6 +678,9 @@ private:
|
|||||||
// of @p_cursor.
|
// of @p_cursor.
|
||||||
void expandSelectionToWholeLines(QTextCursor &p_cursor);
|
void expandSelectionToWholeLines(QTextCursor &p_cursor);
|
||||||
|
|
||||||
|
// Init leader key from config.
|
||||||
|
void initLeaderKey();
|
||||||
|
|
||||||
// Init m_registers.
|
// Init m_registers.
|
||||||
// Currently supported registers:
|
// Currently supported registers:
|
||||||
// a-z, A-Z (append to a-z), ", +, _
|
// a-z, A-Z (append to a-z), ", +, _
|
||||||
|
@ -330,6 +330,17 @@ void VConfigManager::initEditorConfigs()
|
|||||||
|
|
||||||
m_enableSmartImInVimMode = getConfigFromSettings("editor",
|
m_enableSmartImInVimMode = getConfigFromSettings("editor",
|
||||||
"enable_smart_im_in_vim_mode").toBool();
|
"enable_smart_im_in_vim_mode").toBool();
|
||||||
|
|
||||||
|
QString tmpLeader = getConfigFromSettings("editor",
|
||||||
|
"vim_leader_key").toString();
|
||||||
|
if (tmpLeader.isEmpty()) {
|
||||||
|
m_vimLeaderKey = QChar(' ');
|
||||||
|
} else {
|
||||||
|
m_vimLeaderKey = tmpLeader[0];
|
||||||
|
if (m_vimLeaderKey.isNull()) {
|
||||||
|
m_vimLeaderKey = QChar(' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VConfigManager::initSettings()
|
void VConfigManager::initSettings()
|
||||||
|
@ -545,6 +545,8 @@ public:
|
|||||||
|
|
||||||
const QString &getImageNamePrefix() const;
|
const QString &getImageNamePrefix() const;
|
||||||
|
|
||||||
|
QChar getVimLeaderKey() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Look up a config from user and default settings.
|
// Look up a config from user and default settings.
|
||||||
QVariant getConfigFromSettings(const QString §ion, const QString &key) const;
|
QVariant getConfigFromSettings(const QString §ion, const QString &key) const;
|
||||||
@ -979,6 +981,9 @@ private:
|
|||||||
// Max number of tag labels to display.
|
// Max number of tag labels to display.
|
||||||
int m_maxNumOfTagLabels;
|
int m_maxNumOfTagLabels;
|
||||||
|
|
||||||
|
// Vim leader key.
|
||||||
|
QChar m_vimLeaderKey;
|
||||||
|
|
||||||
// The name of the config file in each directory.
|
// The name of the config file in each directory.
|
||||||
static const QString c_dirConfigFile;
|
static const QString c_dirConfigFile;
|
||||||
|
|
||||||
@ -2529,4 +2534,9 @@ inline int VConfigManager::getMaxNumOfTagLabels() const
|
|||||||
{
|
{
|
||||||
return m_maxNumOfTagLabels;
|
return m_maxNumOfTagLabels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline QChar VConfigManager::getVimLeaderKey() const
|
||||||
|
{
|
||||||
|
return m_vimLeaderKey;
|
||||||
|
}
|
||||||
#endif // VCONFIGMANAGER_H
|
#endif // VCONFIGMANAGER_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user