fakevim: Implement special clipboard buffers

Introduces Vim's special registers "+ and "* and partial support for
"clipboard" option - only values "unnamed" and "unnamedplus" and the
behaviour is only similar.

Task-number: QTCREATORBUG-6342
Change-Id: I1fa95b681edadacfe9690a2fd6eb2e98e7cc5dca
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Lukas Holecek
2012-07-26 21:46:38 +02:00
committed by hjk
parent 9b3f183568
commit d0dcd40635
3 changed files with 41 additions and 2 deletions

View File

@@ -74,6 +74,7 @@
#include <QStack>
#include <QApplication>
#include <QClipboard>
#include <QInputMethodEvent>
#include <QKeyEvent>
#include <QLineEdit>
@@ -5267,11 +5268,41 @@ RangeMode FakeVimHandler::Private::registerRangeMode(int reg) const
void FakeVimHandler::Private::setRegisterContents(int reg, const QString &contents)
{
g.registers[reg].contents = contents;
bool copyToClipboard = false;
bool copyToSelection = false;
if (reg == '"') {
QStringList list = config(ConfigClipboard).toStringList();
copyToClipboard = list.contains(QString("unnamedplus"));
copyToSelection = list.contains(QString("unnamed"));
} else if (reg == '+') {
copyToClipboard = true;
} else if (reg == '*') {
copyToSelection = true;
}
if (copyToClipboard || copyToSelection) {
QClipboard *clipboard = QApplication::clipboard();
bool hasSelection = clipboard->supportsSelection();
if (copyToClipboard || (copyToSelection && !hasSelection))
clipboard->setText(contents, QClipboard::Clipboard);
if (copyToSelection && hasSelection)
clipboard->setText(contents, QClipboard::Selection);
} else {
g.registers[reg].contents = contents;
}
}
QString FakeVimHandler::Private::registerContents(int reg) const
{
if (reg == '+')
return QApplication::clipboard()->text(QClipboard::Clipboard);
if (reg == '*') {
QClipboard *clipboard = QApplication::clipboard();
return clipboard->text(clipboard->supportsSelection() ?
QClipboard::Selection : QClipboard::Clipboard);
}
return g.registers[reg].contents;
}