Commit 495c3f52 authored by hjk's avatar hjk
Browse files

fakevim: improve selection interaction with main text editor

parent 16b5f78c
......@@ -132,6 +132,13 @@ FakeVimSettings *theFakeVimSettings()
item->setValue(false);
instance->insertItem(ConfigReadVimRc, item);
item = new SavedAction(instance);
item->setValue(true);
item->setDefaultValue(true);
item->setSettingsKey(group, _("ExportSelection"));
item->setCheckable(true);
instance->insertItem(ConfigExportSelection, item);
item = new SavedAction(instance);
item->setValue(true);
item->setDefaultValue(true);
......
......@@ -43,6 +43,8 @@ enum FakeVimSettingsCode
{
ConfigUseFakeVim,
ConfigReadVimRc,
ConfigExportSelection,
ConfigStartOfLine,
ConfigHlSearch,
ConfigTabStop,
......
......@@ -733,6 +733,7 @@ public:
void selectQuotedStringTextObject(bool inner, int type);
Q_SLOT void importSelection();
void exportSelection();
void insertInInsertMode(const QString &text);
public:
......@@ -1050,20 +1051,20 @@ EventResult FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
// key = shift(key);
//}
QTC_ASSERT(m_mode == InsertMode || m_mode == ReplaceMode
|| !m_tc.atBlockEnd() || m_tc.block().length() <= 1,
qDebug() << "Cursor at EOL before key handler");
//QTC_ASSERT(m_mode == InsertMode || m_mode == ReplaceMode
// || !m_tc.atBlockEnd() || m_tc.block().length() <= 1,
// qDebug() << "Cursor at EOL before key handler");
EventResult result = handleKey(Input(key, mods, ev->text()));
// the command might have destroyed the editor
// The command might have destroyed the editor.
if (m_textedit || m_plaintextedit) {
// We fake vi-style end-of-line behaviour
m_fakeEnd = atEndOfLine() && m_mode == CommandMode && !isVisualBlockMode();
QTC_ASSERT(m_mode == InsertMode || m_mode == ReplaceMode
|| !m_tc.atBlockEnd() || m_tc.block().length() <= 1,
qDebug() << "Cursor at EOL after key handler");
//QTC_ASSERT(m_mode == InsertMode || m_mode == ReplaceMode
// || !m_tc.atBlockEnd() || m_tc.block().length() <= 1,
// qDebug() << "Cursor at EOL after key handler");
if (m_fakeEnd)
moveLeft();
......@@ -1075,6 +1076,8 @@ EventResult FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
if (hasConfig(ConfigShowMarks))
updateSelection();
exportSelection();
return result;
}
......@@ -1100,6 +1103,41 @@ void FakeVimHandler::Private::setupWidget()
updateCursor();
}
void FakeVimHandler::Private::exportSelection()
{
if (!hasConfig(ConfigExportSelection))
return;
// FIXME: That's hacky and does not work for block selections
// and the clipboard is not filled if the selections are updated
// using the keyboard.
QTextCursor tc = EDITOR(textCursor());
int pos = position();
int anc = anchor();
if (m_visualMode == VisualBlockMode) {
//tc.setPosition(anc, MoveAnchor);
//tc.setPosition(pos, KeepAnchor);
//EDITOR(setTextCursor(tc));
} else if (m_visualMode == VisualLineMode) {
int posLine = lineForPosition(pos);
int ancLine = lineForPosition(anc);
if (anc < pos) {
pos = lastPositionInLine(posLine);
anc = firstPositionInLine(ancLine);
} else {
pos = firstPositionInLine(posLine);
anc = lastPositionInLine(ancLine);
}
tc.setPosition(anc, MoveAnchor);
tc.setPosition(pos, KeepAnchor);
EDITOR(setTextCursor(tc));
} else if (m_visualMode == VisualCharMode) {
tc.setPosition(anc, MoveAnchor);
tc.setPosition(pos, KeepAnchor);
EDITOR(setTextCursor(tc));
}
}
void FakeVimHandler::Private::importSelection()
{
QTextCursor tc = EDITOR(textCursor());
......@@ -1130,6 +1168,7 @@ void FakeVimHandler::Private::importSelection()
tc.clearSelection();
EDITOR(setTextCursor(tc));
updateSelection();
exportSelection();
}
void FakeVimHandler::Private::updateEditor()
......
......@@ -73,6 +73,16 @@
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QCheckBox" name="checkBoxExportSelection">
<property name="text">
<string>Export selected text automatically</string>
</property>
<property name="toolTip">
<string>This might slow down editing</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxSmartTab">
<property name="text">
......
......@@ -169,6 +169,8 @@ QWidget *FakeVimOptionPage::createPage(QWidget *parent)
m_ui.spinBoxShiftWidth);
m_group.insert(theFakeVimSetting(ConfigShowMarks),
m_ui.checkBoxShowMarks);
m_group.insert(theFakeVimSetting(ConfigExportSelection),
m_ui.checkBoxExportSelection);
m_group.insert(theFakeVimSetting(ConfigSmartTab),
m_ui.checkBoxSmartTab);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment