forked from qt-creator/qt-creator
FakeVim: Expand ~ in some file names
For :read and :source. Task-number: QTCREATORBUG-11160 Change-Id: I636593a16f9e39c25585c221c5d978e842f4c1d4 Reviewed-by: Lukas Holecek <hluk@email.cz> Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
@@ -84,6 +84,7 @@
|
|||||||
#include <QTextEdit>
|
#include <QTextEdit>
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <climits>
|
#include <climits>
|
||||||
@@ -373,6 +374,12 @@ struct SearchData
|
|||||||
bool highlightMatches = true;
|
bool highlightMatches = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static QString replaceTildeWithHome(QString str)
|
||||||
|
{
|
||||||
|
str.replace("~", QDir::homePath());
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
// If string begins with given prefix remove it with trailing spaces and return true.
|
// If string begins with given prefix remove it with trailing spaces and return true.
|
||||||
static bool eatString(const QString &prefix, QString *str)
|
static bool eatString(const QString &prefix, QString *str)
|
||||||
{
|
{
|
||||||
@@ -5899,6 +5906,7 @@ bool FakeVimHandler::Private::handleExJoinCommand(const ExCommand &cmd)
|
|||||||
|
|
||||||
bool FakeVimHandler::Private::handleExWriteCommand(const ExCommand &cmd)
|
bool FakeVimHandler::Private::handleExWriteCommand(const ExCommand &cmd)
|
||||||
{
|
{
|
||||||
|
// Note: The cmd.args.isEmpty() case is handled by handleExPluginCommand.
|
||||||
// :w, :x, :wq, ...
|
// :w, :x, :wq, ...
|
||||||
//static QRegExp reWrite("^[wx]q?a?!?( (.*))?$");
|
//static QRegExp reWrite("^[wx]q?a?!?( (.*))?$");
|
||||||
if (cmd.cmd != "w" && cmd.cmd != "x" && cmd.cmd != "wq")
|
if (cmd.cmd != "w" && cmd.cmd != "x" && cmd.cmd != "wq")
|
||||||
@@ -5916,7 +5924,7 @@ bool FakeVimHandler::Private::handleExWriteCommand(const ExCommand &cmd)
|
|||||||
const bool forced = cmd.hasBang;
|
const bool forced = cmd.hasBang;
|
||||||
//const bool quit = prefix.contains('q') || prefix.contains('x');
|
//const bool quit = prefix.contains('q') || prefix.contains('x');
|
||||||
//const bool quitAll = quit && prefix.contains('a');
|
//const bool quitAll = quit && prefix.contains('a');
|
||||||
QString fileName = cmd.args;
|
QString fileName = replaceTildeWithHome(cmd.args);
|
||||||
if (fileName.isEmpty())
|
if (fileName.isEmpty())
|
||||||
fileName = m_currentFileName;
|
fileName = m_currentFileName;
|
||||||
QFile file1(fileName);
|
QFile file1(fileName);
|
||||||
@@ -5969,7 +5977,7 @@ bool FakeVimHandler::Private::handleExReadCommand(const ExCommand &cmd)
|
|||||||
moveDown();
|
moveDown();
|
||||||
int pos = position();
|
int pos = position();
|
||||||
|
|
||||||
m_currentFileName = cmd.args;
|
m_currentFileName = replaceTildeWithHome(cmd.args);
|
||||||
QFile file(m_currentFileName);
|
QFile file(m_currentFileName);
|
||||||
file.open(QIODevice::ReadOnly);
|
file.open(QIODevice::ReadOnly);
|
||||||
QTextStream ts(&file);
|
QTextStream ts(&file);
|
||||||
@@ -6092,7 +6100,7 @@ bool FakeVimHandler::Private::handleExSourceCommand(const ExCommand &cmd)
|
|||||||
if (cmd.cmd != "so" && cmd.cmd != "source")
|
if (cmd.cmd != "so" && cmd.cmd != "source")
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QString fileName = cmd.args;
|
QString fileName = replaceTildeWithHome(cmd.args);
|
||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
showMessage(MessageError, Tr::tr("Cannot open file %1").arg(fileName));
|
showMessage(MessageError, Tr::tr("Cannot open file %1").arg(fileName));
|
||||||
|
|||||||
@@ -1977,7 +1977,7 @@ void FakeVimPluginPrivate::handleExCommand(bool *handled, const ExCommand &cmd)
|
|||||||
editor->setFocus();
|
editor->setFocus();
|
||||||
|
|
||||||
*handled = true;
|
*handled = true;
|
||||||
if (cmd.matches("w", "write") || cmd.cmd == "wq") {
|
if ((cmd.matches("w", "write") || cmd.cmd == "wq") && cmd.args.isEmpty()) {
|
||||||
// :w[rite]
|
// :w[rite]
|
||||||
IEditor *editor = m_editorToHandler.key(handler);
|
IEditor *editor = m_editorToHandler.key(handler);
|
||||||
const QString fileName = handler->currentFileName();
|
const QString fileName = handler->currentFileName();
|
||||||
|
|||||||
Reference in New Issue
Block a user