forked from qt-creator/qt-creator
		
	show postion in commandline
This commit is contained in:
		@@ -112,7 +112,7 @@ public:
 | 
			
		||||
    void handleRegisterMode(int key, const QString &text);
 | 
			
		||||
    void handleExMode(int key, const QString &text);
 | 
			
		||||
    void finishMovement();
 | 
			
		||||
    void updateCommandBuffer();
 | 
			
		||||
    void updateMiniBuffer();
 | 
			
		||||
    void search(const QString &needle, bool forward);
 | 
			
		||||
    void showMessage(const QString &msg);
 | 
			
		||||
 | 
			
		||||
@@ -128,7 +128,9 @@ public:
 | 
			
		||||
	// all zero-based counting
 | 
			
		||||
	int cursorLineOnScreen() const;
 | 
			
		||||
	int linesOnScreen() const;
 | 
			
		||||
	int columnsOnScreen() const;
 | 
			
		||||
	int cursorLineInDocument() const;
 | 
			
		||||
	int cursorColumnInDocument() const;
 | 
			
		||||
	void scrollToLineInDocument(int line);
 | 
			
		||||
 | 
			
		||||
    void moveToFirstNonBlankOnLine();
 | 
			
		||||
@@ -209,9 +211,8 @@ bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
 | 
			
		||||
    m_tc = EDITOR(textCursor());
 | 
			
		||||
 | 
			
		||||
    if (m_fakeEnd) {
 | 
			
		||||
        //m_fakeEnd = false;
 | 
			
		||||
        m_tc.movePosition(Right, MoveAnchor, 1);
 | 
			
		||||
        qDebug() << "Unfake EOL";
 | 
			
		||||
        //qDebug() << "Unfake EOL";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (key >= Key_A && key <= Key_Z
 | 
			
		||||
@@ -230,7 +231,7 @@ bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
 | 
			
		||||
 | 
			
		||||
    if (m_fakeEnd) {
 | 
			
		||||
        m_tc.movePosition(Left, MoveAnchor, 1);
 | 
			
		||||
        qDebug() << "Fake EOL";
 | 
			
		||||
        //qDebug() << "Fake EOL";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //qDebug() << "POS: " <<  m_tc.position()
 | 
			
		||||
@@ -271,19 +272,29 @@ void FakeVimHandler::Private::finishMovement()
 | 
			
		||||
    m_gflag = false;
 | 
			
		||||
    m_register = '"';
 | 
			
		||||
    m_tc.clearSelection();
 | 
			
		||||
    updateCommandBuffer();
 | 
			
		||||
    updateMiniBuffer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FakeVimHandler::Private::updateCommandBuffer()
 | 
			
		||||
void FakeVimHandler::Private::updateMiniBuffer()
 | 
			
		||||
{
 | 
			
		||||
    QString msg = QChar(m_commandCode ? m_commandCode : ' ') + m_commandBuffer;
 | 
			
		||||
    QString msg;
 | 
			
		||||
    msg = QChar(m_commandCode ? m_commandCode : ' ') + m_commandBuffer;
 | 
			
		||||
    int l = cursorLineInDocument();
 | 
			
		||||
    int w = columnsOnScreen();
 | 
			
		||||
    msg += QString(w, ' ');
 | 
			
		||||
    msg = msg.left(w - 20);
 | 
			
		||||
    QString pos = tr("%1,%2").arg(l + 1).arg(cursorColumnInDocument() + 1);
 | 
			
		||||
    msg += tr("%1").arg(pos, -12);
 | 
			
		||||
    // FIXME: physical "-" logical
 | 
			
		||||
    msg += tr("%1").arg(l * 100 / (m_tc.document()->blockCount() - 1), 4);
 | 
			
		||||
    msg += '%';
 | 
			
		||||
    emit q->commandBufferChanged(msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FakeVimHandler::Private::showMessage(const QString &msg)
 | 
			
		||||
{
 | 
			
		||||
    qDebug() << "MESSAGE" << msg;
 | 
			
		||||
    emit q->commandBufferChanged(msg);
 | 
			
		||||
    m_commandBuffer = msg;
 | 
			
		||||
    updateMiniBuffer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
 | 
			
		||||
@@ -335,7 +346,7 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
 | 
			
		||||
            m_commandHistory.append(QString());
 | 
			
		||||
            m_commandHistoryIndex = m_commandHistory.size() - 1;
 | 
			
		||||
        }
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == '|') {
 | 
			
		||||
        m_tc.movePosition(StartOfLine, KeepAnchor);
 | 
			
		||||
        m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()) - 1);
 | 
			
		||||
@@ -555,13 +566,13 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
 | 
			
		||||
        m_commandBuffer.clear();
 | 
			
		||||
        m_commandCode = 0;
 | 
			
		||||
        m_mode = CommandMode;
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Backspace) {
 | 
			
		||||
        if (m_commandBuffer.isEmpty())
 | 
			
		||||
            m_mode = CommandMode;
 | 
			
		||||
        else
 | 
			
		||||
            m_commandBuffer.chop(1);
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Return && m_commandCode == ':') {
 | 
			
		||||
        handleCommand(m_commandBuffer);
 | 
			
		||||
        m_commandBuffer.clear();
 | 
			
		||||
@@ -573,22 +584,22 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
 | 
			
		||||
        m_commandBuffer.clear();
 | 
			
		||||
        m_commandCode = 0;
 | 
			
		||||
        m_mode = CommandMode;
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Up && isSearchCommand()) {
 | 
			
		||||
        if (m_searchHistoryIndex > 0) {
 | 
			
		||||
            --m_searchHistoryIndex;
 | 
			
		||||
            m_commandBuffer = m_searchHistory.at(m_searchHistoryIndex);
 | 
			
		||||
        }
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else if (key == Key_Down && isSearchCommand()) {
 | 
			
		||||
        if (m_searchHistoryIndex < m_searchHistory.size() - 1) {
 | 
			
		||||
            ++m_searchHistoryIndex;
 | 
			
		||||
            m_commandBuffer = m_searchHistory.at(m_searchHistoryIndex);
 | 
			
		||||
        }
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    } else {
 | 
			
		||||
        m_commandBuffer += QChar(key);
 | 
			
		||||
        updateCommandBuffer();
 | 
			
		||||
        updateMiniBuffer();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -783,16 +794,25 @@ int FakeVimHandler::Private::cursorLineOnScreen() const
 | 
			
		||||
int FakeVimHandler::Private::linesOnScreen() const
 | 
			
		||||
{
 | 
			
		||||
	QRect rect = EDITOR(cursorRect());
 | 
			
		||||
	//qDebug() <<  EDITOR(height()) / rect.height();
 | 
			
		||||
	return EDITOR(height()) / rect.height();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int FakeVimHandler::Private::columnsOnScreen() const
 | 
			
		||||
{
 | 
			
		||||
	QRect rect = EDITOR(cursorRect());
 | 
			
		||||
	return EDITOR(width()) / rect.width();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int FakeVimHandler::Private::cursorLineInDocument() const
 | 
			
		||||
{
 | 
			
		||||
	//qDebug() << "CURSOR LINE IN DOCUMENT " << m_tc.block().blockNumber();
 | 
			
		||||
	return m_tc.block().blockNumber();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int FakeVimHandler::Private::cursorColumnInDocument() const
 | 
			
		||||
{
 | 
			
		||||
	return m_tc.position() - m_tc.block().position();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FakeVimHandler::Private::scrollToLineInDocument(int line)
 | 
			
		||||
{
 | 
			
		||||
	// FIXME: works only for QPlainTextEdit
 | 
			
		||||
@@ -837,7 +857,10 @@ void FakeVimHandler::addWidget(QWidget *widget)
 | 
			
		||||
{
 | 
			
		||||
    widget->installEventFilter(this);
 | 
			
		||||
    QFont font = widget->font();
 | 
			
		||||
    //: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
 | 
			
		||||
    //font.setFamily("Misc");
 | 
			
		||||
    font.setFamily("Monospace");
 | 
			
		||||
    font.setStretch(QFont::SemiCondensed);
 | 
			
		||||
    widget->setFont(font);
 | 
			
		||||
    if (QTextEdit *ed = qobject_cast<QTextEdit *>(widget)) {
 | 
			
		||||
        ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user