mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 06:05:24 +00:00
fix(tmux): pass full session info to the terminal's session picker (#1552)
The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching.
This commit is contained in:
1 parent
ab7a68aa84
commit
57151c0e84
3 files changed
+31
-14
No files matched your search
@@ -65,9 +65,17 @@ export interface TerminalHistoryV1 {
|
||||
list: (hostId: number, limit?: number) => Promise<CommandHistoryEntry[]>;
|
||||
}
|
||||
|
||||
export interface TmuxSessionInfo {
|
||||
name: string;
|
||||
created: number;
|
||||
lastActivity: number;
|
||||
windows: number;
|
||||
attachedClients: number;
|
||||
}
|
||||
|
||||
export interface TmuxDetection {
|
||||
available: boolean;
|
||||
sessions: string[];
|
||||
sessions: TmuxSessionInfo[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,12 +4,10 @@ import {
|
||||
attachOrCreateTmuxSession,
|
||||
detectTmux,
|
||||
waitForTmuxSession,
|
||||
type TmuxDetectionResult,
|
||||
} from "./tmux-commands.js";
|
||||
|
||||
export interface TmuxDetection {
|
||||
available: boolean;
|
||||
sessions: string[];
|
||||
}
|
||||
export type TmuxDetection = TmuxDetectionResult;
|
||||
|
||||
/**
|
||||
* What the terminal (ssh-terminal's optional "tmux.sessions" consumer) asks
|
||||
@@ -29,12 +27,8 @@ export interface TmuxSessionsV1 {
|
||||
|
||||
export function createTmuxSessionsService(ctx: PluginContext): TmuxSessionsV1 {
|
||||
return {
|
||||
async detect(client) {
|
||||
const result = await detectTmux(client as Client);
|
||||
return {
|
||||
available: result.available,
|
||||
sessions: result.sessions.map((s) => s.name),
|
||||
};
|
||||
detect(client) {
|
||||
return detectTmux(client as Client);
|
||||
},
|
||||
|
||||
async attachOrCreate(stream, name, newName, hostId) {
|
||||
|
||||
@@ -38,17 +38,32 @@ describe("createTmuxSessionsService", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("detect() lists session names when tmux is available", async () => {
|
||||
it("detect() lists full session info when tmux is available", async () => {
|
||||
const { ctx } = createFakeContext({ pluginId: "tmux-monitor" });
|
||||
const service = createTmuxSessionsService(ctx);
|
||||
const client = fakeSshClient({
|
||||
"-V": "tmux 3.7b\n",
|
||||
"list-sessions": "main|1|2|1\nlogs|3|4|0\n",
|
||||
"list-sessions": "main|1|2|3|1\nlogs|4|5|1|0\n",
|
||||
});
|
||||
|
||||
await expect(service.detect(client)).resolves.toEqual({
|
||||
available: true,
|
||||
sessions: ["main", "logs"],
|
||||
sessions: [
|
||||
{
|
||||
name: "main",
|
||||
created: 1,
|
||||
lastActivity: 2,
|
||||
windows: 3,
|
||||
attachedClients: 1,
|
||||
},
|
||||
{
|
||||
name: "logs",
|
||||
created: 4,
|
||||
lastActivity: 5,
|
||||
windows: 1,
|
||||
attachedClients: 0,
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user