diff --git a/src/Enumeration.h b/src/Enumeration.h index a769dcf5..7c8c2ca1 100644 --- a/src/Enumeration.h +++ b/src/Enumeration.h @@ -61,10 +61,10 @@ public: /** This enum describes semantic hints appearance */ - enum SemanticHints { - SemanticHintsNever = 0, - SemanticHintsURL = 1, - SemanticHintsAlways = 2, + enum Hints { + HintsNever = 0, + HintsURL = 1, + HintsAlways = 2, }; /** This enum describes the shapes used to draw the cursor in terminal diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index 2e2f2fa0..1dbb5be3 100644 --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -288,6 +288,12 @@ void ViewManager::setupActions() connect(action, &QAction::triggered, this, &ViewManager::semanticSetupBash); _viewContainer->addAction(action); + action = new QAction(i18nc("@action Shortcut entry", "Toggle semantic hints display"), this); + collection->addAction(QStringLiteral("toggle-semantic-hints"), action); + collection->setDefaultShortcut(action, Qt::CTRL | Qt::ALT | Qt::Key_BracketLeft); + connect(action, &QAction::triggered, this, &ViewManager::toggleSemanticHints); + _viewContainer->addAction(action); + action = new QAction(this); action->setText(i18nc("@action:inmenu", "Equal size to all views")); collection->setDefaultShortcut(action, Konsole::ACCEL | Qt::SHIFT | Qt::Key_Backslash); @@ -500,6 +506,22 @@ void ViewManager::semanticSetupBash() QChar()); } +void ViewManager::toggleSemanticHints() +{ + int currentSessionId = currentSession(); + Q_ASSERT(currentSessionId >= 0); + Session *activeSession = SessionManager::instance()->idToSession(currentSessionId); + Q_ASSERT(activeSession); + auto profile = SessionManager::instance()->sessionProfile(activeSession); + + profile->setProperty(Profile::SemanticHints, (profile->semanticHints() + 1) % 3); + + auto activeTerminalDisplay = _viewContainer->activeViewSplitter()->activeTerminalDisplay(); + const char *names[3] = {"Never", "Sometimes", "Always"}; + activeTerminalDisplay->showNotification(i18n("Semantic hints ") + i18n(names[profile->semanticHints()])); + activeTerminalDisplay->update(); +} + QHash ViewManager::forgetAll(ViewSplitter *splitter) { splitter->setParent(nullptr); diff --git a/src/ViewManager.h b/src/ViewManager.h index 2dc5f086..d46a7dcf 100644 --- a/src/ViewManager.h +++ b/src/ViewManager.h @@ -402,6 +402,8 @@ private Q_SLOTS: void semanticSetupBash(); + void toggleSemanticHints(); + private: Q_DISABLE_COPY(ViewManager) diff --git a/src/terminalDisplay/TerminalDisplay.cpp b/src/terminalDisplay/TerminalDisplay.cpp index 812f9ba2..9b0f4ad6 100644 --- a/src/terminalDisplay/TerminalDisplay.cpp +++ b/src/terminalDisplay/TerminalDisplay.cpp @@ -2867,7 +2867,6 @@ void TerminalDisplay::applyProfile(const Profile::Ptr &profile) _bidiLineLTR = profile->bidiLineLTR(); _bidiTableDirOverride = profile->bidiTableDirOverride(); _semanticUpDown = profile->semanticUpDown(); - _semanticHints = profile->semanticHints(); _semanticInputClick = profile->semanticInputClick(); _trimLeadingSpaces = profile->property(Profile::TrimLeadingSpacesInSelectedText); _trimTrailingSpaces = profile->property(Profile::TrimTrailingSpacesInSelectedText); diff --git a/src/terminalDisplay/TerminalDisplay.h b/src/terminalDisplay/TerminalDisplay.h index ffd742c6..cb9af9d5 100644 --- a/src/terminalDisplay/TerminalDisplay.h +++ b/src/terminalDisplay/TerminalDisplay.h @@ -340,11 +340,6 @@ public: return _semanticUpDown; } - int semanticHints() const - { - return _semanticHints; - } - ColorSchemeWallpaper::Ptr wallpaper() const { return _wallpaper; @@ -790,7 +785,6 @@ private: std::unique_ptr _printManager; - int _semanticHints; bool _semanticUpDown; bool _semanticInputClick; }; diff --git a/src/terminalDisplay/TerminalPainter.cpp b/src/terminalDisplay/TerminalPainter.cpp index 7e36884a..ef0d1850 100644 --- a/src/terminalDisplay/TerminalPainter.cpp +++ b/src/terminalDisplay/TerminalPainter.cpp @@ -66,12 +66,6 @@ static inline bool isLineCharString(const QString &string) return LineBlockCharacters::isLegacyComputingSymbol(ucs4); } -bool isInvertedRendition(const TerminalDisplay *display) -{ - auto currentProfile = SessionManager::instance()->sessionProfile(display->session()); - return currentProfile ? currentProfile->property(Profile::InvertSelectionColors) : false; -} - void TerminalPainter::drawContents(Character *image, QPainter &paint, const QRect &rect, @@ -81,7 +75,9 @@ void TerminalPainter::drawContents(Character *image, QVector lineProperties, CharacterColor const *ulColorTable) { - const bool invertedRendition = isInvertedRendition(m_parentDisplay); + auto currentProfile = SessionManager::instance()->sessionProfile(m_parentDisplay->session()); + const bool invertedRendition = currentProfile ? currentProfile->property(Profile::InvertSelectionColors) : false; + const Enum::Hints semanticHints = currentProfile ? static_cast(currentProfile->semanticHints()) : Enum::HintsNever; QVector univec; univec.reserve(m_parentDisplay->usedColumns()); @@ -249,8 +245,7 @@ void TerminalPainter::drawContents(Character *image, paint.setRenderHint(QPainter::Antialiasing, false); paint.setWorldTransform(textScale.inverted(), true); if ((lineProperty & LINE_PROMPT_START) - && ((m_parentDisplay->semanticHints() == Enum::SemanticHintsURL && m_parentDisplay->filterChain()->showUrlHint()) - || m_parentDisplay->semanticHints() == Enum::SemanticHintsAlways)) { + && ((semanticHints == Enum::HintsURL && m_parentDisplay->filterChain()->showUrlHint()) || semanticHints == Enum::HintsAlways)) { QPen pen(m_parentDisplay->terminalColor()->foregroundColor()); paint.setPen(pen); paint.drawLine(leftPadding, textY, m_parentDisplay->contentRect().right(), textY); diff --git a/src/widgets/EditProfileDialog.cpp b/src/widgets/EditProfileDialog.cpp index 152c5f63..f2bc2ad3 100644 --- a/src/widgets/EditProfileDialog.cpp +++ b/src/widgets/EditProfileDialog.cpp @@ -489,9 +489,9 @@ void EditProfileDialog::setupGeneralPage(const Profile::Ptr &profile) false, // preview { // buttons - {_generalUi->semanticHintsNever, Enum::SemanticHintsNever}, - {_generalUi->semanticHintsURL, Enum::SemanticHintsURL}, - {_generalUi->semanticHintsAlways, Enum::SemanticHintsAlways}, + {_generalUi->semanticHintsNever, Enum::HintsNever}, + {_generalUi->semanticHintsURL, Enum::HintsURL}, + {_generalUi->semanticHintsAlways, Enum::HintsAlways}, }, }; setupButtonGroup(semanticHints, profile);