diff --git a/src/libs/solutions/terminal/terminalsurface.cpp b/src/libs/solutions/terminal/terminalsurface.cpp index 40dc2809c0d..3246d04f970 100644 --- a/src/libs/solutions/terminal/terminalsurface.cpp +++ b/src/libs/solutions/terminal/terminalsurface.cpp @@ -647,6 +647,11 @@ void TerminalSurface::sendFocus(bool hasFocus) vterm_state_focus_out(vts); } +bool TerminalSurface::isInAltScreen() +{ + return d->m_altscreen; +} + void TerminalSurface::setWriteToPty(WriteToPty writeToPty) { d->m_writeToPty = writeToPty; diff --git a/src/libs/solutions/terminal/terminalsurface.h b/src/libs/solutions/terminal/terminalsurface.h index 6700156da9b..22bafb0f1b5 100644 --- a/src/libs/solutions/terminal/terminalsurface.h +++ b/src/libs/solutions/terminal/terminalsurface.h @@ -105,6 +105,7 @@ public: void mouseButton(Qt::MouseButton button, bool pressed, Qt::KeyboardModifiers modifiers); void sendFocus(bool hasFocus); + bool isInAltScreen(); signals: void invalidated(QRect grid); void fullSizeChanged(QSize newSize); diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index 322edf5ede5..fc8a64fe5f1 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -950,7 +950,33 @@ void TerminalView::keyPressEvent(QKeyEvent *event) event->accept(); - d->m_surface->sendKey(event); + if (d->m_surface->isInAltScreen()) { + d->m_surface->sendKey(event); + } else { + switch (event->key()) { + case Qt::Key_PageDown: + verticalScrollBar()->setValue(qBound( + 0, + verticalScrollBar()->value() + d->m_surface->liveSize().height(), + verticalScrollBar()->maximum())); + break; + case Qt::Key_PageUp: + verticalScrollBar()->setValue(qBound( + 0, + verticalScrollBar()->value() - d->m_surface->liveSize().height(), + verticalScrollBar()->maximum())); + break; + case Qt::Key_End: + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + break; + case Qt::Key_Home: + verticalScrollBar()->setValue(0); + break; + default: + d->m_surface->sendKey(event); + break; + } + } } void TerminalView::keyReleaseEvent(QKeyEvent *event) diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index 05ba69457b8..c3cbb6ccdc1 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include