Skip to content

Commit 4d9dd54

Browse files
authored
feat: tab management shortcuts (#915)
* feat: add tab switch shortcuts * fix(terminal): only copy/paste in focused tab * fix: linux and pr remarks
1 parent 0269a33 commit 4d9dd54

5 files changed

Lines changed: 66 additions & 6 deletions

File tree

app/qml/PreprocessedTerminal.qml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Item{
4040
property real scaleTexture: 1.0
4141
property alias title: ksession.title
4242
property alias kterminal: kterminal
43+
property bool isActive: false
4344

4445
property size terminalSize: kterminal.terminalSize
4546
property size fontMetrics: kterminal.fontMetrics
@@ -49,14 +50,18 @@ Item{
4950
target: copyAction
5051

5152
onTriggered: {
52-
kterminal.copyClipboard()
53+
if (terminalContainer.isActive) {
54+
kterminal.copyClipboard()
55+
}
5356
}
5457
}
5558
Connections {
5659
target: pasteAction
5760

5861
onTriggered: {
59-
kterminal.pasteClipboard()
62+
if (terminalContainer.isActive) {
63+
kterminal.pasteClipboard()
64+
}
6065
}
6166
}
6267

app/qml/TerminalContainer.qml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import "utils.js" as Utils
2525
ShaderTerminal {
2626
property alias title: terminal.title
2727
property alias terminalSize: terminal.terminalSize
28+
property bool isActive: false
2829
signal sessionFinished()
2930

3031
property bool loadBloomEffect: appSettings.bloom > 0 || appSettings._frameShininess > 0
@@ -44,6 +45,7 @@ ShaderTerminal {
4445
PreprocessedTerminal {
4546
id: terminal
4647
anchors.fill: parent
48+
isActive: mainShader.isActive
4749
onSessionFinished: mainShader.sessionFinished()
4850
}
4951

app/qml/TerminalTabs.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ Item {
131131
model: tabsModel
132132
TerminalContainer {
133133
property bool shouldHaveFocus: terminalWindow.active && StackLayout.isCurrentItem
134+
isActive: StackLayout.isCurrentItem
134135
onShouldHaveFocusChanged: {
135136
if (shouldHaveFocus) {
136137
activate()

app/qml/TerminalWindow.qml

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*******************************************************************************/
20-
import QtQuick 2.2
21-
import QtQuick.Window 2.1
22-
import QtQuick.Controls 2.3
20+
import QtQuick
21+
import QtQuick.Window
22+
import QtQuick.Controls
2323

2424
import "menus"
2525

@@ -114,9 +114,60 @@ ApplicationWindow {
114114
Action {
115115
id: newTabAction
116116
text: qsTr("New Tab")
117-
shortcut: appSettings.isMacOS ? StandardKey.AddTab : "Ctrl+Shift+T"
117+
shortcut: appSettings.isMacOS ? "Meta+T" : "Ctrl+Shift+T"
118118
onTriggered: terminalTabs.addTab()
119119
}
120+
Action {
121+
id: closeTabAction
122+
text: qsTr("Close Tab")
123+
shortcut: appSettings.isMacOS ? "Meta+W" : "Ctrl+Shift+W"
124+
onTriggered: terminalTabs.closeTab(terminalTabs.currentIndex)
125+
}
126+
Shortcut {
127+
sequence: appSettings.isMacOS ? "Meta+1" : "Alt+1"
128+
context: Qt.WindowShortcut
129+
onActivated: if (terminalTabs.count > 0) terminalTabs.currentIndex = 0
130+
}
131+
Shortcut {
132+
sequence: appSettings.isMacOS ? "Meta+2" : "Alt+2"
133+
context: Qt.WindowShortcut
134+
onActivated: if (terminalTabs.count > 1) terminalTabs.currentIndex = 1
135+
}
136+
Shortcut {
137+
sequence: appSettings.isMacOS ? "Meta+3" : "Alt+3"
138+
context: Qt.WindowShortcut
139+
onActivated: if (terminalTabs.count > 2) terminalTabs.currentIndex = 2
140+
}
141+
Shortcut {
142+
sequence: appSettings.isMacOS ? "Meta+4" : "Alt+4"
143+
context: Qt.WindowShortcut
144+
onActivated: if (terminalTabs.count > 3) terminalTabs.currentIndex = 3
145+
}
146+
Shortcut {
147+
sequence: appSettings.isMacOS ? "Meta+5" : "Alt+5"
148+
context: Qt.WindowShortcut
149+
onActivated: if (terminalTabs.count > 4) terminalTabs.currentIndex = 4
150+
}
151+
Shortcut {
152+
sequence: appSettings.isMacOS ? "Meta+6" : "Alt+6"
153+
context: Qt.WindowShortcut
154+
onActivated: if (terminalTabs.count > 5) terminalTabs.currentIndex = 5
155+
}
156+
Shortcut {
157+
sequence: appSettings.isMacOS ? "Meta+7" : "Alt+7"
158+
context: Qt.WindowShortcut
159+
onActivated: if (terminalTabs.count > 6) terminalTabs.currentIndex = 6
160+
}
161+
Shortcut {
162+
sequence: appSettings.isMacOS ? "Meta+8" : "Alt+8"
163+
context: Qt.WindowShortcut
164+
onActivated: if (terminalTabs.count > 7) terminalTabs.currentIndex = 7
165+
}
166+
Shortcut {
167+
sequence: appSettings.isMacOS ? "Meta+9" : "Alt+9"
168+
context: Qt.WindowShortcut
169+
onActivated: if (terminalTabs.count > 8) terminalTabs.currentIndex = 8
170+
}
120171
TerminalTabs {
121172
id: terminalTabs
122173
width: parent.width

app/qml/menus/WindowMenu.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ MenuBar {
2828
title: qsTr("File")
2929
MenuItem { action: newWindowAction }
3030
MenuItem { action: newTabAction }
31+
MenuItem { action: closeTabAction }
3132
MenuSeparator { }
3233
MenuItem { action: quitAction }
3334
}

0 commit comments

Comments
 (0)