From 875caa56b111f9f3a6ae5f044fb0396537db3279 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 7 Jan 2025 14:08:06 +0100 Subject: [PATCH] Terminal: Implement scroll keyboard shortcuts Change-Id: I354e6f63f89893ca057d17fab9810ea5c3dece7d Reviewed-by: Cristian Adam --- .../solutions/terminal/terminalsurface.cpp | 5 ++++ src/libs/solutions/terminal/terminalsurface.h | 1 + src/libs/solutions/terminal/terminalview.cpp | 28 ++++++++++++++++++- src/plugins/terminal/terminalwidget.cpp | 1 - 4 files changed, 33 insertions(+), 2 deletions(-) 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