forked from qt-creator/qt-creator
		
	add notion of currentFileName to support ':w' without file name
This commit is contained in:
		@@ -168,6 +168,8 @@ public:
 | 
			
		||||
    int m_gflag;  // whether current command started with 'g'
 | 
			
		||||
    
 | 
			
		||||
    QString m_commandBuffer;
 | 
			
		||||
    QString m_currentFileName;
 | 
			
		||||
    QString m_currentMessage;
 | 
			
		||||
 | 
			
		||||
    bool m_lastSearchForward;
 | 
			
		||||
    QString m_lastInsertion;
 | 
			
		||||
@@ -274,16 +276,23 @@ void FakeVimHandler::Private::finishMovement()
 | 
			
		||||
 | 
			
		||||
void FakeVimHandler::Private::updateMiniBuffer()
 | 
			
		||||
{
 | 
			
		||||
    if (m_tc.isNull())
 | 
			
		||||
        return;
 | 
			
		||||
    QString msg;
 | 
			
		||||
    msg = QChar(m_commandCode ? m_commandCode : ' ');
 | 
			
		||||
    for (int i = 0; i != m_commandBuffer.size(); ++i) {
 | 
			
		||||
        QChar c = m_commandBuffer.at(i);
 | 
			
		||||
        if (c.unicode() < 32) {
 | 
			
		||||
            msg += '^';
 | 
			
		||||
            msg += QChar(c.unicode() + 64);
 | 
			
		||||
        } else {
 | 
			
		||||
            msg += c;
 | 
			
		||||
    if (m_currentMessage.isEmpty()) {
 | 
			
		||||
        msg = QChar(m_commandCode ? m_commandCode : ' ');
 | 
			
		||||
        for (int i = 0; i != m_commandBuffer.size(); ++i) {
 | 
			
		||||
            QChar c = m_commandBuffer.at(i);
 | 
			
		||||
            if (c.unicode() < 32) {
 | 
			
		||||
                msg += '^';
 | 
			
		||||
                msg += QChar(c.unicode() + 64);
 | 
			
		||||
            } else {
 | 
			
		||||
                msg += c;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        msg = m_currentMessage;
 | 
			
		||||
        m_currentMessage.clear();
 | 
			
		||||
    }
 | 
			
		||||
    int l = cursorLineInDocument();
 | 
			
		||||
    int w = columnsOnScreen();
 | 
			
		||||
@@ -299,7 +308,8 @@ void FakeVimHandler::Private::updateMiniBuffer()
 | 
			
		||||
 | 
			
		||||
void FakeVimHandler::Private::showMessage(const QString &msg)
 | 
			
		||||
{
 | 
			
		||||
    m_commandBuffer = msg;
 | 
			
		||||
    //qDebug() << "MSG: " << msg;
 | 
			
		||||
    m_currentMessage = msg;
 | 
			
		||||
    updateMiniBuffer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -609,7 +619,6 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
 | 
			
		||||
            m_commandCode = 0;
 | 
			
		||||
        }
 | 
			
		||||
        m_mode = CommandMode;
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Return && isSearchCommand()) {
 | 
			
		||||
        if (!m_commandBuffer.isEmpty()) {
 | 
			
		||||
            m_searchHistory.takeLast();
 | 
			
		||||
@@ -621,26 +630,30 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
 | 
			
		||||
        }
 | 
			
		||||
        m_mode = CommandMode;
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Up) {
 | 
			
		||||
        if (isSearchCommand() && m_searchHistoryIndex > 0) {
 | 
			
		||||
    } else if (key == Key_Up && isSearchCommand()) {
 | 
			
		||||
        if (m_searchHistoryIndex > 0) {
 | 
			
		||||
            --m_searchHistoryIndex;
 | 
			
		||||
            m_commandBuffer = m_searchHistory.at(m_searchHistoryIndex);
 | 
			
		||||
        } else if (m_commandCode == ':' && m_commandHistoryIndex > 0) {
 | 
			
		||||
            updateMiniBuffer();
 | 
			
		||||
        }
 | 
			
		||||
    } else if (key == Key_Up && m_commandCode == ':') {
 | 
			
		||||
        if (m_commandHistoryIndex > 0) {
 | 
			
		||||
            --m_commandHistoryIndex;
 | 
			
		||||
            m_commandBuffer = m_commandHistory.at(m_commandHistoryIndex);
 | 
			
		||||
            updateMiniBuffer();
 | 
			
		||||
        }
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Down) {
 | 
			
		||||
        if (isSearchCommand()
 | 
			
		||||
                && m_searchHistoryIndex < m_searchHistory.size() - 1) {
 | 
			
		||||
    } else if (key == Key_Down && isSearchCommand()) {
 | 
			
		||||
        if (m_searchHistoryIndex < m_searchHistory.size() - 1) {
 | 
			
		||||
            ++m_searchHistoryIndex;
 | 
			
		||||
            m_commandBuffer = m_searchHistory.at(m_searchHistoryIndex);
 | 
			
		||||
        } else if (m_commandCode == ':'
 | 
			
		||||
                && m_commandHistoryIndex < m_commandHistory.size() - 1) {
 | 
			
		||||
            updateMiniBuffer();
 | 
			
		||||
        }
 | 
			
		||||
    } else if (key == Key_Down && m_commandCode == ':') {
 | 
			
		||||
        if (m_commandHistoryIndex < m_commandHistory.size() - 1) {
 | 
			
		||||
            ++m_commandHistoryIndex;
 | 
			
		||||
            m_commandBuffer = m_commandHistory.at(m_commandHistoryIndex); 
 | 
			
		||||
            updateMiniBuffer();
 | 
			
		||||
        }
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Tab) {
 | 
			
		||||
        m_commandBuffer += QChar(9);
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
@@ -653,18 +666,23 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
 | 
			
		||||
void FakeVimHandler::Private::handleCommand(const QString &cmd)
 | 
			
		||||
{
 | 
			
		||||
    static QRegExp reGoto("^(\\d+)$");
 | 
			
		||||
    static QRegExp reWrite("^w!?( (.*))?$");
 | 
			
		||||
    if (reGoto.indexIn(cmd) != -1) {
 | 
			
		||||
        int n = reGoto.cap(1).toInt();
 | 
			
		||||
        m_tc.setPosition(m_tc.block().document()
 | 
			
		||||
            ->findBlockByNumber(n - 1).position());
 | 
			
		||||
        showMessage(QString());
 | 
			
		||||
    } else if (cmd == "q!" || cmd == "q") {
 | 
			
		||||
        if (m_textedit)
 | 
			
		||||
            q->quitRequested(m_textedit);
 | 
			
		||||
        else
 | 
			
		||||
            q->quitRequested(m_plaintextedit);
 | 
			
		||||
    } else if (cmd.startsWith("w ") || cmd.startsWith("w! ")) {
 | 
			
		||||
        bool forced = cmd.startsWith("w! ");
 | 
			
		||||
        QString fileName = cmd.mid(forced ? 3 : 2);
 | 
			
		||||
        showMessage(QString());
 | 
			
		||||
    } else if (reWrite.indexIn(cmd) != -1) {
 | 
			
		||||
        bool forced = cmd.startsWith("w!");
 | 
			
		||||
        QString fileName = reWrite.cap(2);
 | 
			
		||||
        if (fileName.isEmpty())
 | 
			
		||||
            fileName = m_currentFileName;
 | 
			
		||||
        QFile file(fileName);
 | 
			
		||||
        bool exists = file.exists();
 | 
			
		||||
        if (exists && !forced) {
 | 
			
		||||
@@ -681,11 +699,12 @@ void FakeVimHandler::Private::handleCommand(const QString &cmd)
 | 
			
		||||
                .arg(ba.count('\n')).arg(ba.size()));
 | 
			
		||||
        }
 | 
			
		||||
    } else if (cmd.startsWith("r ")) {
 | 
			
		||||
        QString fileName = cmd.mid(2);
 | 
			
		||||
        QFile file(fileName);
 | 
			
		||||
        m_currentFileName = cmd.mid(2);
 | 
			
		||||
        QFile file(m_currentFileName);
 | 
			
		||||
        file.open(QIODevice::ReadOnly);
 | 
			
		||||
        QTextStream ts(&file);
 | 
			
		||||
        EDITOR(setPlainText(ts.readAll()));
 | 
			
		||||
        showMessage(QString());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user