diff --git a/lib/TerminalDisplay.cpp b/lib/TerminalDisplay.cpp index 9924173..dc400df 100644 --- a/lib/TerminalDisplay.cpp +++ b/lib/TerminalDisplay.cpp @@ -1684,6 +1684,16 @@ void TerminalDisplay::setScroll(int cursor, int slines) connect(_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollBarPositionChanged(int))); } +void TerminalDisplay::scrollToEnd() +{ + disconnect(_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollBarPositionChanged(int))); + _scrollBar->setValue( _scrollBar->maximum() ); + connect(_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollBarPositionChanged(int))); + + _screenWindow->scrollTo( _scrollBar->value() + 1 ); + _screenWindow->setTrackOutput( _screenWindow->atEndOfOutput() ); +} + void TerminalDisplay::setScrollBarPosition(ScrollBarPosition position) { if (_scrollbarLocation == position) diff --git a/lib/TerminalDisplay.h b/lib/TerminalDisplay.h index 6720bc5..6e818d5 100644 --- a/lib/TerminalDisplay.h +++ b/lib/TerminalDisplay.h @@ -117,6 +117,11 @@ public: */ void setScroll(int cursor, int lines); + /** + * Scroll to the bottom of the terminal (reset scrolling). + */ + void scrollToEnd(); + /** * Returns the display's filter chain. When the image for the display is updated, * the text is passed through each filter in the chain. Each filter can define diff --git a/lib/qtermwidget.cpp b/lib/qtermwidget.cpp index 923f1ca..5c945ff 100644 --- a/lib/qtermwidget.cpp +++ b/lib/qtermwidget.cpp @@ -120,6 +120,8 @@ QTermWidget::QTermWidget(int startnow, QWidget *parent) this, SIGNAL(termGetFocus())); connect(m_impl->m_terminalDisplay, SIGNAL(termLostFocus()), this, SIGNAL(termLostFocus())); + connect(m_impl->m_terminalDisplay, SIGNAL(keyPressedSignal(QKeyEvent *)), + this, SIGNAL(termKeyPressed(QKeyEvent *))); } void QTermWidget::selectionChanged(bool textSelected) @@ -284,6 +286,13 @@ void QTermWidget::setScrollBarPosition(ScrollBarPosition pos) m_impl->m_terminalDisplay->setScrollBarPosition((TerminalDisplay::ScrollBarPosition)pos); } +void QTermWidget::scrollToEnd() +{ + if (!m_impl->m_terminalDisplay) + return; + m_impl->m_terminalDisplay->scrollToEnd(); +} + void QTermWidget::sendText(QString &text) { m_impl->m_session->sendText(text); diff --git a/lib/qtermwidget.h b/lib/qtermwidget.h index 592fbd6..69be674 100644 --- a/lib/qtermwidget.h +++ b/lib/qtermwidget.h @@ -92,6 +92,9 @@ public: // Presence of scrollbar void setScrollBarPosition(ScrollBarPosition); + // Wrapped, scroll to end. + void scrollToEnd(); + // Send some text to terminal void sendText(QString & text); @@ -121,6 +124,8 @@ signals: void termGetFocus(); void termLostFocus(); + void termKeyPressed(QKeyEvent *); + public slots: // Paste clipboard content to terminal void copyClipboard();