Переглянути джерело

feat(terminal): implement better dynamic terminal numbering (#8081)

OpeOginni 1 місяць тому
батько
коміт
1a5a63843e
1 змінених файлів з 16 додано та 1 видалено
  1. 16 1
      packages/app/src/context/terminal.tsx

+ 16 - 1
packages/app/src/context/terminal.tsx

@@ -8,6 +8,7 @@ import { Persist, persisted } from "@/utils/persist"
 export type LocalPTY = {
 export type LocalPTY = {
   id: string
   id: string
   title: string
   title: string
+  titleNumber: number
   rows?: number
   rows?: number
   cols?: number
   cols?: number
   buffer?: string
   buffer?: string
@@ -42,8 +43,21 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, id:
     all: createMemo(() => Object.values(store.all)),
     all: createMemo(() => Object.values(store.all)),
     active: createMemo(() => store.active),
     active: createMemo(() => store.active),
     new() {
     new() {
+      const existingTitleNumbers = new Set(
+        store.all
+          .map((pty) => {
+            const match = pty.titleNumber
+            return match
+          })
+      )
+
+      let nextNumber = 1
+      while (existingTitleNumbers.has(nextNumber)) {
+        nextNumber++
+      }
+
       sdk.client.pty
       sdk.client.pty
-        .create({ title: `Terminal ${store.all.length + 1}` })
+      .create({ title: `Terminal ${nextNumber}` })
         .then((pty) => {
         .then((pty) => {
           const id = pty.data?.id
           const id = pty.data?.id
           if (!id) return
           if (!id) return
@@ -52,6 +66,7 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, id:
             {
             {
               id,
               id,
               title: pty.data?.title ?? "Terminal",
               title: pty.data?.title ?? "Terminal",
+              titleNumber: nextNumber,
             },
             },
           ])
           ])
           setStore("active", id)
           setStore("active", id)