summaryrefslogtreecommitdiff
path: root/src/osc-notify-decorator.ts
diff options
context:
space:
mode:
authorStanton Burchett <sburchett@medallia.com>2026-07-30 14:50:01 -0600
committerStanton Burchett <sburchett@medallia.com>2026-07-30 14:50:01 -0600
commit64b564b52ba7d22ba8129821ab4b30542d971ff5 (patch)
tree615cf77f12ac2281d671d4fcf0ed6925c353c7d7 /src/osc-notify-decorator.ts
parentb08d308aba5fed8a20b83b63b71911732b1e53a4 (diff)
Focus the emitting tab when a notification is clicked
Resolve the OSC 9 onclick TODO: clicking a notification now brings the window to the front and selects the exact tab/pane that emitted the sequence. The title is read live from the tab each time instead of being captured once when the session is attached. Adds tabby-core as a dependency for AppService/HostWindowService.
Diffstat (limited to 'src/osc-notify-decorator.ts')
-rw-r--r--src/osc-notify-decorator.ts24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/osc-notify-decorator.ts b/src/osc-notify-decorator.ts
index 7d32f1c..abfb796 100644
--- a/src/osc-notify-decorator.ts
+++ b/src/osc-notify-decorator.ts
@@ -1,25 +1,41 @@
import OscNotifyMiddleware from "./osc-notify-middleware";
import { Injectable } from "@angular/core";
import { TerminalDecorator, BaseSession, BaseTerminalTabComponent } from "tabby-terminal";
+import { AppService, HostWindowService } from "tabby-core";
@Injectable()
export default class OscNotifyDecorator extends TerminalDecorator {
+ constructor(
+ private app: AppService,
+ private hostWindow: HostWindowService,
+ ) {
+ super();
+ }
+
attach(tab: BaseTerminalTabComponent<any>): void {
// Subscribe to attach to future sessions in this tab
tab.sessionChanged$.subscribe((session) => {
if (session) {
- this.attachToSession(session, (<any>tab).title);
+ this.attachToSession(session, tab);
}
});
// Attach the current session for this tab
if (tab.session) {
- this.attachToSession(tab.session, (<any>tab).title);
+ this.attachToSession(tab.session, tab);
}
}
- private attachToSession(session: BaseSession, tabTitle: string) {
- const middleware = new OscNotifyMiddleware(tabTitle);
+ private attachToSession(session: BaseSession, tab: BaseTerminalTabComponent<any>) {
+ const middleware = new OscNotifyMiddleware(
+ () => (<any>tab).title,
+ () => {
+ this.hostWindow.bringToFront();
+ const parent = this.app.getParentTab(tab);
+ this.app.selectTab(parent ?? tab);
+ parent?.focus(tab);
+ },
+ );
session.middleware.push(middleware);
}