From 464a9fdf1ada86044d950856ac3a1cd8834ddd54 Mon Sep 17 00:00:00 2001 From: Matan Ziv-Av Date: Mon, 11 Jul 2022 14:55:12 +0300 Subject: [PATCH] Add action to setup semantic shell integration in bash Default shortcut: ctrl-alt-] --- src/ViewManager.cpp | 22 ++++++++++++++++++++++ src/ViewManager.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index 14bd7c85..6a785190 100644 --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -274,6 +274,12 @@ void ViewManager::setupActions() _multiTabOnlyActions << action; _viewContainer->addAction(action); + action = new QAction(i18nc("@action Shortcut entry", "Setup semantic integration (bash)"), this); + collection->addAction(QStringLiteral("semantic-setup-bash"), action); + collection->setDefaultShortcut(action, Qt::CTRL | Qt::ALT | Qt::Key_BracketRight); + connect(action, &QAction::triggered, this, &ViewManager::semanticSetupBash); + _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); @@ -470,6 +476,22 @@ void ViewManager::detachTab(int tabIdx) Q_EMIT terminalsDetached(splitter, detachedSessions); } +void ViewManager::semanticSetupBash() +{ + int currentSessionId = currentSession(); + // At least one display/session exists if we are splitting + Q_ASSERT(currentSessionId >= 0); + + Session *activeSession = SessionManager::instance()->idToSession(currentSessionId); + Q_ASSERT(activeSession); + + activeSession->sendTextToTerminal(QStringLiteral(R"(if [[ ! $PS1 =~ 133 ]] ; then + PS1='\[\e]133;L\a\]\[\e]133;A\a\]'$PS1'\[\e]133;B\a\]' ; + PS2='\[\e]133;A\a\]'$PS2'\[\e]133;B\a\]' ; + PS0='\[\e]133;C\a\]' ; fi)"), + QChar()); +} + QHash ViewManager::forgetAll(ViewSplitter *splitter) { splitter->setParent(nullptr); diff --git a/src/ViewManager.h b/src/ViewManager.h index ea4316cf..013f2bc9 100644 --- a/src/ViewManager.h +++ b/src/ViewManager.h @@ -399,6 +399,8 @@ private Q_SLOTS: /* Detaches the tab at index tabIdx */ void detachTab(int tabIdx); + void semanticSetupBash(); + private: Q_DISABLE_COPY(ViewManager)