dsh-better-workspace 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dsh.plugin.json +1 -1
- package/package.json +3 -2
- package/src/client.js +356 -80
package/dsh.plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dsh-external/dsh-better-workspace",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"description": "侧边栏工作区树:按官方磁盘目录嵌套(官方 workspace-tree 语义),可选按名称中的 / 分组(默认关闭,设置里开启);添加工作区由官方目录流承载。Workspace tree for the DSH sidebar workspace list, nested by official disk folders with optional \"/\"-name grouping.",
|
|
6
6
|
"engines": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-better-workspace",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "侧边栏工作区树:按官方磁盘目录嵌套(官方 workspace-tree 语义),可选按名称中的 / 分组(默认关闭,设置里开启);添加工作区走官方目录流。Workspace tree for the DSH sidebar: disk-path nesting (official workspace-tree semantics), with optional \"/\"-name grouping (off by default); add-workspace rides the official directory flow.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"exports": {
|
|
15
15
|
".": "./src/index.js",
|
|
16
16
|
"./client": "./src/client.js",
|
|
17
|
-
"./locale/*.json": "./locale/*.json"
|
|
17
|
+
"./locale/*.json": "./locale/*.json",
|
|
18
|
+
"./package.json": "./package.json"
|
|
18
19
|
},
|
|
19
20
|
"engines": {
|
|
20
21
|
"node": ">=18",
|
package/src/client.js
CHANGED
|
@@ -49,6 +49,10 @@ window.__ModuleLoader__.load({
|
|
|
49
49
|
'viewOptions.manualOrder': '手动排序',
|
|
50
50
|
'viewOptions.updatedOrder': '最近更新',
|
|
51
51
|
'viewOptions.sessionSlash': '会话按"/"分组',
|
|
52
|
+
'viewOptions.wsGroupBy': "工作区分组",
|
|
53
|
+
'viewOptions.wsByDisk': "磁盘目录",
|
|
54
|
+
'viewOptions.wsByDiskSlash': "磁盘 + 名称",
|
|
55
|
+
'viewOptions.wsBySlash': "仅名称",
|
|
52
56
|
'group.ungrouped': '未分组',
|
|
53
57
|
'sessions.expand': '展开 {n} 个会话',
|
|
54
58
|
'sessions.collapse': '收起',
|
|
@@ -79,10 +83,13 @@ window.__ModuleLoader__.load({
|
|
|
79
83
|
'settings.collapse': '收起',
|
|
80
84
|
'settings.compactChains': '单链分组折叠显示',
|
|
81
85
|
'settings.compactChains.hint': '单层链合并为一行,出现多个子级时自动展开为树状;拖拽工作区期间单链临时展开回文件夹树,可放入任意一级;展开状态与自定义外观保存在当前浏览器。',
|
|
82
|
-
'settings.workspaceSlash': '工作区按"/"分组',
|
|
83
|
-
'settings.workspaceSlash.hint': '关闭时工作区只按官方文件夹(磁盘目录)嵌套,标题原样显示;开启后标题里的 / 重新成为分组层级(组名/名字)。默认关闭,只影响工作区;会话分组另有独立开关。',
|
|
84
86
|
'settings.statusPulse': '状态呼吸灯',
|
|
85
87
|
'settings.statusPulse.hint': '被折叠藏起的状态灯(完成绿 / 运行蓝 / 待交互琥珀)沿层级向外冒泡:工作区与分组行以图标呼吸发光(颜色随状态,自定义过发光的标题一起呼吸),会话分组行显示呼吸状态灯;默认开启,可在此关闭。',
|
|
88
|
+
'settings.workspaceGroup': "工作区分组",
|
|
89
|
+
'settings.workspaceGroup.hint': "磁盘目录 = 只按官方文件夹(磁盘目录)嵌套;磁盘 + 名称 = 在磁盘层之上再按标题里的 / 分组;仅名称 = 只按标题里的 / 分组,完全不理会磁盘目录的嵌套关系。旧版本的开关状态会自动迁移。",
|
|
90
|
+
'settings.sessionLimit': "展开时显示会话数",
|
|
91
|
+
'settings.sessionLimit.all': "全部",
|
|
92
|
+
'settings.sessionLimit.hint': "展开工作区时先只显示最近的部分会话,其余收进「展开 {n} 个会话」一行,点击展开该组全部;置顶、进行中和等待你的会话始终显示。全部 = 不限量(默认)。",
|
|
86
93
|
'settings.sessionMenu': "会话右键菜单",
|
|
87
94
|
'settings.sessionMenu.hint': "开启时右键点击会话行即可打开操作菜单(包含官方的置顶、归档、停止并归档等);关闭后改为在行尾悬停显示官方样式的 ⋯ 按钮,点击打开同一个菜单。默认开启。",
|
|
88
95
|
'settings.rowActions': "会话行悬停按钮",
|
|
@@ -183,6 +190,10 @@ window.__ModuleLoader__.load({
|
|
|
183
190
|
'viewOptions.manualOrder': 'Manual',
|
|
184
191
|
'viewOptions.updatedOrder': 'Last updated',
|
|
185
192
|
'viewOptions.sessionSlash': 'Group sessions by "/"',
|
|
193
|
+
'viewOptions.wsGroupBy': "Group workspaces",
|
|
194
|
+
'viewOptions.wsByDisk': "Disk folders",
|
|
195
|
+
'viewOptions.wsByDiskSlash': "Disk + names",
|
|
196
|
+
'viewOptions.wsBySlash': "Names only",
|
|
186
197
|
'group.ungrouped': 'Ungrouped',
|
|
187
198
|
'sessions.expand': 'Show {n} more sessions',
|
|
188
199
|
'sessions.collapse': 'Collapse',
|
|
@@ -213,10 +224,13 @@ window.__ModuleLoader__.load({
|
|
|
213
224
|
'settings.collapse': 'Collapse',
|
|
214
225
|
'settings.compactChains': 'Merge single-child chains',
|
|
215
226
|
'settings.compactChains.hint': 'Single-child chains merge into one row; levels with multiple children expand as a tree. Chains re-expand into folder rows while you drag a workspace, so it can drop into any level. State and custom styling persist in this browser.',
|
|
216
|
-
'settings.workspaceSlash': 'Group workspaces by "/"',
|
|
217
|
-
'settings.workspaceSlash.hint': 'Off: workspaces nest purely by the official folders (disk directories) and titles render whole. On: "/" in a title becomes a group level again ("group/name"). Off by default, workspaces only — session grouping has its own switch.',
|
|
218
227
|
'settings.statusPulse': 'Status breathing light',
|
|
219
228
|
'settings.statusPulse.hint': 'Status dots hidden by collapse (done green / running blue / pending amber) bubble outward: workspace and folder rows breathe on their icon in the status color (custom-glow labels breathe along), session-group rows show a breathing dot; on by default, turn it off here.',
|
|
229
|
+
'settings.workspaceGroup': "Workspace grouping",
|
|
230
|
+
'settings.workspaceGroup.hint': "Disk folders: nest only by the official folders (disk directories). Disk + names: layer slash-name groups on top of the disk tree. Names only: group purely by slashes in titles and ignore disk nesting entirely. A previous version's switch state migrates automatically.",
|
|
231
|
+
'settings.sessionLimit': "Sessions shown when expanded",
|
|
232
|
+
'settings.sessionLimit.all': "All",
|
|
233
|
+
'settings.sessionLimit.hint': "An expanded workspace first shows only its most recent sessions, the rest behind one Show-more row; pinned, running and waiting-for-you sessions always stay visible. All = no limit (default).",
|
|
220
234
|
'settings.sessionMenu': "Session context menu",
|
|
221
235
|
'settings.sessionMenu.hint': "On: right-click a session row to open its action menu (including the official pin, archive, and stop-and-archive). Off: the row shows the official-style ⋯ button on hover instead, opening the same menu. On by default.",
|
|
222
236
|
'settings.rowActions': "Session row hover buttons",
|
|
@@ -325,6 +339,10 @@ window.__ModuleLoader__.load({
|
|
|
325
339
|
'viewOptions.manualOrder': 'يدوي',
|
|
326
340
|
'viewOptions.updatedOrder': 'آخر تحديث',
|
|
327
341
|
'viewOptions.sessionSlash': 'تجميع الجلسات حسب "/"',
|
|
342
|
+
'viewOptions.wsGroupBy': "تجميع مساحات العمل",
|
|
343
|
+
'viewOptions.wsByDisk': "مجلدات القرص",
|
|
344
|
+
'viewOptions.wsByDiskSlash': "القرص + الأسماء",
|
|
345
|
+
'viewOptions.wsBySlash': "الأسماء فقط",
|
|
328
346
|
'group.ungrouped': 'بلا مجموعة',
|
|
329
347
|
'sessions.expand': 'عرض {n} جلسات إضافية',
|
|
330
348
|
'sessions.collapse': 'طيّ',
|
|
@@ -355,10 +373,13 @@ window.__ModuleLoader__.load({
|
|
|
355
373
|
'settings.collapse': 'طيّ',
|
|
356
374
|
'settings.compactChains': 'دمج السلاسل ذات الفرع الواحد',
|
|
357
375
|
'settings.compactChains.hint': 'تُدمج المستويات ذات الفرع الواحد في سطر واحد، وتتوسع الشجرة تلقائياً عند وجود أكثر من فرع؛ أثناء سحب مساحة عمل تُفكّ السلاسل مؤقتاً إلى مجلدات ليصبح الإفلات ممكناً في أي مستوى؛ تُحفظ حالة التوسيع والمظهر المخصص في هذا المتصفح.',
|
|
358
|
-
'settings.workspaceSlash': 'تجميع مساحات العمل حسب "/"',
|
|
359
|
-
'settings.workspaceSlash.hint': 'عند الإيقاف تتداخل مساحات العمل حسب المجلدات الرسمية (مجلدات القرص) فقط وتظهر العناوين كاملة؛ وعند التشغيل تعود "/" في العنوان مستوى تجميع («المجموعة/الاسم»). معطّل افتراضياً، ويخص مساحات العمل وحدها — لتجميع الجلسات مفتاحه المستقل.',
|
|
360
376
|
'settings.statusPulse': 'مؤشر حالة نابض',
|
|
361
377
|
'settings.statusPulse.hint': 'مؤشرات الحالة التي يخفيها الطيّ (مكتمل أخضر / قيد التشغيل أزرق / بانتظار تفاعل كهرماني) تتصاعد عبر المستويات: تصدر أسطر مساحات العمل والمجلدات وميضاً نابضاً للأيقونة بلون الحالة (وتنبض معها العناوين ذات التوهج المخصص)، وتعرض أسطر مجموعات الجلسات نقطة حالة نابضة؛ مفعّل افتراضياً ويمكن إيقافه هنا.',
|
|
378
|
+
'settings.workspaceGroup': "تجميع مساحات العمل",
|
|
379
|
+
'settings.workspaceGroup.hint': "مجلدات القرص: التداخل حسب المجلدات الرسمية (أدلة القرص) فقط. القرص + الأسماء: إضافة مجموعات الأسماء بشرطة مائلة فوق شجرة القرص. الأسماء فقط: التجميع بحسب الشرطة المائلة في العناوين وتجاهل تداخل القرص تماماً. تُنقل حالة مفتاح الإصدار السابق تلقائياً.",
|
|
380
|
+
'settings.sessionLimit': "عدد الجلسات عند التوسيع",
|
|
381
|
+
'settings.sessionLimit.all': "الكل",
|
|
382
|
+
'settings.sessionLimit.hint': "تعرض مساحة العمل الموسعة أحدث الجلسات أولاً، والبقية خلف سطر عرض المزيد؛ الجلسات المثبتة والجارية والمنتظرة لك تبقى مرئية دائماً. الكل = بلا حد (افتراضي).",
|
|
362
383
|
'settings.sessionMenu': "قائمة النقر الأيمن للجلسة",
|
|
363
384
|
'settings.sessionMenu.hint': "عند التفعيل: انقر بزر الفأرة الأيمن على سطر الجلسة لفتح قائمة الإجراءات (بما في ذلك التثبيت والأرشفة الرسمية). عند الإيقاف: يظهر زر ⋯ بأسلوب رسمي عند تمرير المؤشر يفتح القائمة نفسها. مفعّل افتراضياً.",
|
|
364
385
|
'settings.rowActions': "أزرار تمرير سطر الجلسة",
|
|
@@ -459,6 +480,10 @@ window.__ModuleLoader__.load({
|
|
|
459
480
|
'viewOptions.manualOrder': 'Manuell',
|
|
460
481
|
'viewOptions.updatedOrder': 'Zuletzt aktualisiert',
|
|
461
482
|
'viewOptions.sessionSlash': 'Sitzungen nach "/" gruppieren',
|
|
483
|
+
'viewOptions.wsGroupBy': "Arbeitsbereiche gruppieren",
|
|
484
|
+
'viewOptions.wsByDisk': "Ordner",
|
|
485
|
+
'viewOptions.wsByDiskSlash': "Ordner + Namen",
|
|
486
|
+
'viewOptions.wsBySlash': "Nur Namen",
|
|
462
487
|
'group.ungrouped': 'Ohne Gruppe',
|
|
463
488
|
'sessions.expand': '{n} Sitzungen einblenden',
|
|
464
489
|
'sessions.collapse': 'Einklappen',
|
|
@@ -489,10 +514,13 @@ window.__ModuleLoader__.load({
|
|
|
489
514
|
'settings.collapse': 'Einklappen',
|
|
490
515
|
'settings.compactChains': 'Einzelketten zusammenfassen',
|
|
491
516
|
'settings.compactChains.hint': 'Ebenen mit genau einem Kind werden zu einer Zeile zusammengefasst; bei mehreren Kindern klappt der Baum auf; beim Ziehen eines Arbeitsbereichs klappen die Ketten vorübergehend zum Ordnerbaum auf, sodass jede Ebene als Ziel dient; Klappzustand und eigenes Aussehen bleiben in diesem Browser gespeichert.',
|
|
492
|
-
'settings.workspaceSlash': 'Arbeitsbereiche nach "/" gruppieren',
|
|
493
|
-
'settings.workspaceSlash.hint': 'Aus: Arbeitsbereiche verschachteln nur nach den offiziellen Ordnern (Verzeichnisse auf der Platte), Titel bleiben vollständig. An: "/" im Titel wird wieder eine Gruppenebene ("Gruppe/Name"). Standardmäßig aus, gilt nur für Arbeitsbereiche — Sitzungsgruppen haben einen eigenen Schalter.',
|
|
494
517
|
'settings.statusPulse': 'Status-Pulslicht',
|
|
495
518
|
'settings.statusPulse.hint': 'Vom Einklappen verdeckte Statuspunkte (fertig grün / läuft blau / wartet amber) steigen die Hierarchie hinauf: Arbeitsbereich- und Ordnerzeilen lassen ihr Symbol in der Statusfarbe pulsieren (eigens gefärbte Titel pulsieren mit), Sitzungsgruppen zeigen einen pulsierenden Statuspunkt; standardmäßig an, hier abschaltbar.',
|
|
519
|
+
'settings.workspaceGroup': "Arbeitsbereich-Gruppierung",
|
|
520
|
+
'settings.workspaceGroup.hint': "Ordner: verschachtelt nur nach den offiziellen Ordnern (Festplattenpfade). Ordner + Namen: schichtet Namensgruppen über den Ordnerbaum. Nur Namen: gruppiert rein nach Schrägstrichen im Titel und ignoriert die Festplatten-Verschachtelung. Ein früherer Schalterzustand wandert automatisch mit.",
|
|
521
|
+
'settings.sessionLimit': "Sitzungen beim Aufklappen",
|
|
522
|
+
'settings.sessionLimit.all': "Alle",
|
|
523
|
+
'settings.sessionLimit.hint': "Ein aufgeklappter Arbeitsbereich zeigt zuerst nur die neuesten Sitzungen, der Rest hinter einer Mehr-anzeigen-Zeile; angeheftete, laufende und auf Sie wartende Sitzungen bleiben immer sichtbar. Alle = unbegrenzt (Standard).",
|
|
496
524
|
'settings.sessionMenu': "Sitzungs-Kontextmenü",
|
|
497
525
|
'settings.sessionMenu.hint': "Ein: Rechtsklick auf eine Sitzungszeile öffnet das Aktionsmenü (inklusive offiziellem Anheften, Archivieren und Stoppen-und-Archivieren). Aus: beim Daraufzeigen erscheint stattdessen der offizielle ⋯-Knopf am Zeilenende und öffnet dasselbe Menü. Standardmäßig ein.",
|
|
498
526
|
'settings.rowActions': "Sitzungszeilen-Schnellknöpfe",
|
|
@@ -593,6 +621,10 @@ window.__ModuleLoader__.load({
|
|
|
593
621
|
'viewOptions.manualOrder': 'Manuel',
|
|
594
622
|
'viewOptions.updatedOrder': 'Dernière mise à jour',
|
|
595
623
|
'viewOptions.sessionSlash': 'Grouper les sessions par « / »',
|
|
624
|
+
'viewOptions.wsGroupBy': "Regrouper les espaces",
|
|
625
|
+
'viewOptions.wsByDisk': "Dossiers disque",
|
|
626
|
+
'viewOptions.wsByDiskSlash': "Disque + noms",
|
|
627
|
+
'viewOptions.wsBySlash': "Noms seuls",
|
|
596
628
|
'group.ungrouped': 'Sans groupe',
|
|
597
629
|
'sessions.expand': 'Afficher {n} sessions',
|
|
598
630
|
'sessions.collapse': 'Réduire',
|
|
@@ -623,10 +655,13 @@ window.__ModuleLoader__.load({
|
|
|
623
655
|
'settings.collapse': 'Réduire',
|
|
624
656
|
'settings.compactChains': 'Fusionner les chaînes à un seul enfant',
|
|
625
657
|
'settings.compactChains.hint': 'Les niveaux à un seul enfant se fusionnent en une ligne; dès qu\'il y a plusieurs enfants, l\'arborescence se déploie; pendant le glisser-déposer d\'un espace de travail, les chaînes se déploient temporairement en dossiers pour permettre le dépôt à n\'importe quel niveau; l\'état déplié et l\'apparence personnalisée sont conservés dans ce navigateur.',
|
|
626
|
-
'settings.workspaceSlash': 'Grouper les espaces par « / »',
|
|
627
|
-
'settings.workspaceSlash.hint': 'Désactivé : les espaces s\'imbriquent uniquement selon les dossiers officiels (répertoires du disque) et les titres restent entiers. Activé : le « / » d\'un titre redevient un niveau de groupe (« groupe/nom »). Désactivé par défaut, espaces uniquement — les groupes de sessions ont leur propre interrupteur.',
|
|
628
658
|
'settings.statusPulse': 'Voyant d\'état pulsant',
|
|
629
659
|
'settings.statusPulse.hint': 'Les voyants masqués par le repli (terminé vert / en cours bleu / en attente ambre) remontent la hiérarchie: les lignes d\'espace de travail et de dossier font pulser leur icône dans la couleur d\'état (les titres à lueur personnalisée pulsent aussi), les lignes de groupe de sessions affichent un voyant pulsant; activé par défaut, désactivable ici.',
|
|
660
|
+
'settings.workspaceGroup': "Regroupement des espaces",
|
|
661
|
+
'settings.workspaceGroup.hint': "Dossiers disque : imbrique uniquement selon les dossiers officiels (répertoires disque). Disque + noms : ajoute les groupes de noms par barre oblique au-dessus de l’arborescence disque. Noms seuls : regroupe uniquement par barre oblique dans les titres et ignore l’imbrication disque. L’état de l’ancien interrupteur migre automatiquement.",
|
|
662
|
+
'settings.sessionLimit': "Sessions affichées à l’ouverture",
|
|
663
|
+
'settings.sessionLimit.all': "Tout",
|
|
664
|
+
'settings.sessionLimit.hint': "Un espace ouvert montre d’abord ses sessions les plus récentes, le reste derrière une ligne afficher-plus ; les sessions épinglées, en cours et en attente restent toujours visibles. Tout = sans limite (par défaut).",
|
|
630
665
|
'settings.sessionMenu': "Menu contextuel des sessions",
|
|
631
666
|
'settings.sessionMenu.hint': "Activé : un clic droit sur une ligne de session ouvre son menu d’actions (épinglage, archivage et arrêt-avec-archivage officiels inclus). Désactivé : la ligne affiche plutôt le bouton ⋯ officiel au survol, ouvrant le même menu. Activé par défaut.",
|
|
632
667
|
'settings.rowActions': "Boutons de survol des sessions",
|
|
@@ -727,6 +762,10 @@ window.__ModuleLoader__.load({
|
|
|
727
762
|
'viewOptions.manualOrder': 'मैन्युअल',
|
|
728
763
|
'viewOptions.updatedOrder': 'हाल का अपडेट',
|
|
729
764
|
'viewOptions.sessionSlash': 'सत्रों को "/" से समूहित करें',
|
|
765
|
+
'viewOptions.wsGroupBy': "वर्कस्पेस समूहीकरण",
|
|
766
|
+
'viewOptions.wsByDisk': "डिस्क फ़ोल्डर",
|
|
767
|
+
'viewOptions.wsByDiskSlash': "डिस्क + नाम",
|
|
768
|
+
'viewOptions.wsBySlash': "केवल नाम",
|
|
730
769
|
'group.ungrouped': 'बिना समूह',
|
|
731
770
|
'sessions.expand': '{n} सत्र दिखाएँ',
|
|
732
771
|
'sessions.collapse': 'समेटें',
|
|
@@ -757,10 +796,13 @@ window.__ModuleLoader__.load({
|
|
|
757
796
|
'settings.collapse': 'समेटें',
|
|
758
797
|
'settings.compactChains': 'एकल-संतान श्रृंखलाएँ मिलाएँ',
|
|
759
798
|
'settings.compactChains.hint': 'जिन स्तरों पर केवल एक संतान होती है वे एक पंक्ति में मिल जाते हैं; कई संतानें होने पर वृक्ष खुल जाता है; कार्यस्थान खींचते समय श्रृंखलाएँ अस्थायी रूप से फ़ोल्डरों में खुल जाती हैं ताकि किसी भी स्तर पर छोड़ा जा सके; खुलने की स्थिति और अनुकूलित रूप इसी ब्राउज़र में सहेजे जाते हैं।',
|
|
760
|
-
'settings.workspaceSlash': 'कार्यक्षेत्रों को "/" से समूहित करें',
|
|
761
|
-
'settings.workspaceSlash.hint': 'बंद: कार्यस्थान केवल आधिकारिक फ़ोल्डरों (डिस्क निर्देशिकाओं) के अनुसार नेस्ट होते हैं और शीर्षक पूरे दिखते हैं। चालू: शीर्षक में "/" फिर से समूह स्तर बन जाता है ("समूह/नाम")। डिफ़ॉल्ट रूप से बंद, केवल कार्यस्थानों पर लागू — सत्र समूह का अपना स्विच है।',
|
|
762
799
|
'settings.statusPulse': 'स्थिति की साँस लेती बत्ती',
|
|
763
800
|
'settings.statusPulse.hint': 'समेटने से छिपी स्थिति बत्तियाँ (पूर्ण हरी / चल रहा नीली / प्रतीक्षारत अंबर) पदानुक्रम में ऊपर उठती हैं: कार्यस्थान और फ़ोल्डर पंक्तियों का चिह्न स्थिति के रंग में साँस लेता है (अनुकूलित चमक वाले शीर्षक भी साथ साँस लेते हैं), सत्र समूह पंक्तियों पर साँस लेता स्थिति बिंदु दिखता है; डिफ़ॉल्ट रूप से चालू, यहाँ बंद किया जा सकता है।',
|
|
801
|
+
'settings.workspaceGroup': "वर्कस्पेस समूहीकरण",
|
|
802
|
+
'settings.workspaceGroup.hint': "डिस्क फ़ोल्डर: केवल आधिकारिक फ़ोल्डर (डिस्क निर्देशिका) से नेस्ट। डिस्क + नाम: डिस्क ट्री के ऊपर स्लैश नाम समूह जोड़ता है। केवल नाम: केवल शीर्षक के स्लैश से समूहित करता है, डिस्क नेस्टिंग की अनदेखी करता है। पुराने स्विच की स्थिति स्वतः माइग्रेट होती है।",
|
|
803
|
+
'settings.sessionLimit': "विस्तार पर दिखने वाले सेशन",
|
|
804
|
+
'settings.sessionLimit.all': "सभी",
|
|
805
|
+
'settings.sessionLimit.hint': "विस्तारित वर्कस्पेस पहले केवल हाल के सेशन दिखाता है, बाकी एक और-दिखाएँ पंक्ति के पीछे; पिन, चल रहे और आपकी प्रतीक्षा में सेशन सदा दिखते हैं। सभी = असीमित (डिफ़ॉल्ट)।",
|
|
764
806
|
'settings.sessionMenu': "सेशन संदर्भ मेनू",
|
|
765
807
|
'settings.sessionMenu.hint': "चालू: सेशन पंक्ति पर राइट-क्लिक करने से उसका क्रिया मेनू खुलता है (आधिकारिक पिन, आर्काइव और रोककर-आर्काइव सहित)। बंद: पंक्ति पर होवर करने पर आधिकारिक शैली का ⋯ बटन दिखता है, जो वही मेनू खोलता है। डिफ़ॉल्ट रूप से चालू।",
|
|
766
808
|
'settings.rowActions': "सेशन पंक्ति होवर बटन",
|
|
@@ -861,6 +903,10 @@ window.__ModuleLoader__.load({
|
|
|
861
903
|
'viewOptions.manualOrder': 'Manual',
|
|
862
904
|
'viewOptions.updatedOrder': 'Terakhir diperbarui',
|
|
863
905
|
'viewOptions.sessionSlash': 'Kelompokkan sesi per "/"',
|
|
906
|
+
'viewOptions.wsGroupBy': "Grupkan ruang kerja",
|
|
907
|
+
'viewOptions.wsByDisk': "Folder disk",
|
|
908
|
+
'viewOptions.wsByDiskSlash': "Disk + nama",
|
|
909
|
+
'viewOptions.wsBySlash': "Hanya nama",
|
|
864
910
|
'group.ungrouped': 'Tanpa grup',
|
|
865
911
|
'sessions.expand': 'Tampilkan {n} sesi',
|
|
866
912
|
'sessions.collapse': 'Ciutkan',
|
|
@@ -891,10 +937,13 @@ window.__ModuleLoader__.load({
|
|
|
891
937
|
'settings.collapse': 'Ciutkan',
|
|
892
938
|
'settings.compactChains': 'Gabungkan rantai beranak tunggal',
|
|
893
939
|
'settings.compactChains.hint': 'Tingkat yang hanya punya satu anak digabung jadi satu baris; bila anaknya banyak, pohon terbentang; saat menyeret ruang kerja, rantai sementara terbentang kembali jadi folder sehingga bisa dijatuhkan di tingkat mana pun; status terbentang dan tampilan khusus disimpan di browser ini.',
|
|
894
|
-
'settings.workspaceSlash': 'Kelompokkan ruang kerja per "/"',
|
|
895
|
-
'settings.workspaceSlash.hint': 'Mati: ruang kerja bersarang hanya menurut folder resmi (direktori disk) dan judul tampil utuh. Nyala: "/" pada judul kembali menjadi tingkat grup ("grup/nama"). Default mati, hanya ruang kerja — pengelompokan sesi punya sakelarnya sendiri.',
|
|
896
940
|
'settings.statusPulse': 'Lampu status bernapas',
|
|
897
941
|
'settings.statusPulse.hint': 'Lampu status yang tersembunyi karena pelipatan (selesai hijau / berjalan biru / menunggu kuning) menggelembung ke tingkat atas: baris ruang kerja dan folder membuat ikonnya bernapas dalam warna status (judul dengan pendar khusus ikut bernapas), baris grup sesi menampilkan titik status yang bernapas; aktif secara bawaan, bisa dimatikan di sini.',
|
|
942
|
+
'settings.workspaceGroup': "Pengelompokan ruang kerja",
|
|
943
|
+
'settings.workspaceGroup.hint': "Folder disk: bersarang hanya mengikuti folder resmi (direktori disk). Disk + nama: menambahkan grup nama garis miring di atas pohon disk. Hanya nama: mengelompokkan murni dari garis miring pada judul dan mengabaikan struktur disk. Status sakelar versi lama bermigrasi otomatis.",
|
|
944
|
+
'settings.sessionLimit': "Sesi saat dibuka",
|
|
945
|
+
'settings.sessionLimit.all': "Semua",
|
|
946
|
+
'settings.sessionLimit.hint': "Ruang kerja yang dibuka pertama menampilkan sesi terbaru, sisanya di balik satu baris tampilkan-lebih; sesi pin, berjalan, dan menunggu Anda selalu terlihat. Semua = tanpa batas (bawaan).",
|
|
898
947
|
'settings.sessionMenu': "Menu klik kanan sesi",
|
|
899
948
|
'settings.sessionMenu.hint': "Aktif: klik kanan pada baris sesi untuk membuka menu aksinya (termasuk pin, arsip, dan henti-dan-arsip resmi). Nonaktif: baris menampilkan tombol ⋯ gaya resmi saat dihover, membuka menu yang sama. Aktif secara bawaan.",
|
|
900
949
|
'settings.rowActions': "Tombol hover baris sesi",
|
|
@@ -995,6 +1044,10 @@ window.__ModuleLoader__.load({
|
|
|
995
1044
|
'viewOptions.manualOrder': 'Manuale',
|
|
996
1045
|
'viewOptions.updatedOrder': 'Ultimo aggiornamento',
|
|
997
1046
|
'viewOptions.sessionSlash': 'Raggruppa sessioni per "/"',
|
|
1047
|
+
'viewOptions.wsGroupBy': "Raggruppa aree di lavoro",
|
|
1048
|
+
'viewOptions.wsByDisk': "Cartelle disco",
|
|
1049
|
+
'viewOptions.wsByDiskSlash': "Disco + nomi",
|
|
1050
|
+
'viewOptions.wsBySlash': "Solo nomi",
|
|
998
1051
|
'group.ungrouped': 'Senza gruppo',
|
|
999
1052
|
'sessions.expand': 'Mostra {n} sessioni',
|
|
1000
1053
|
'sessions.collapse': 'Comprimi',
|
|
@@ -1025,10 +1078,13 @@ window.__ModuleLoader__.load({
|
|
|
1025
1078
|
'settings.collapse': 'Comprimi',
|
|
1026
1079
|
'settings.compactChains': 'Unisci le catene a figlio unico',
|
|
1027
1080
|
'settings.compactChains.hint': 'I livelli con un solo figlio si fondono in una riga; con più figli l\'albero si espande; durante il trascinamento di un\'area di lavoro le catene si riespandono temporaneamente in cartelle, così puoi rilasciare su qualsiasi livello; stato di espansione e aspetto personalizzato restano in questo browser.',
|
|
1028
|
-
'settings.workspaceSlash': 'Raggruppa aree per "/"',
|
|
1029
|
-
'settings.workspaceSlash.hint': 'Off: le aree di lavoro si annidano solo secondo le cartelle ufficiali (directory del disco) e i titoli restano interi. On: la "/" nel titolo torna a essere un livello di gruppo ("gruppo/nome"). Disattivato per impostazione predefinita, solo aree di lavoro — le sessioni hanno il proprio interruttore.',
|
|
1030
1081
|
'settings.statusPulse': 'Spia di stato pulsante',
|
|
1031
1082
|
'settings.statusPulse.hint': 'Le spie nascoste dalla compressione (completato verde / in esecuzione blu / in attesa ambra) risalgono la gerarchia: le righe di aree di lavoro e cartelle fanno pulsare l\'icona nel colore di stato (anche i titoli con bagliore personalizzato pulsano), le righe dei gruppi di sessioni mostrano una spia pulsante; attiva per impostazione predefinita, disattivabile qui.',
|
|
1083
|
+
'settings.workspaceGroup': "Raggruppamento aree di lavoro",
|
|
1084
|
+
'settings.workspaceGroup.hint': "Cartelle disco: annida solo secondo le cartelle ufficiali (directory disco). Disco + nomi: aggiunge gruppi di nomi per barra obliqua sopra l’albero disco. Solo nomi: raggruppa solo per barra obliqua nei titoli ignorando l’annidamento disco. Lo stato del vecchio interruttore migra automaticamente.",
|
|
1085
|
+
'settings.sessionLimit': "Sessioni mostrate all’apertura",
|
|
1086
|
+
'settings.sessionLimit.all': "Tutte",
|
|
1087
|
+
'settings.sessionLimit.hint': "Un’area aperta mostra prima le sessioni più recenti, il resto dietro una riga mostra-altro; sessioni fissate, in corso e in attesa restano sempre visibili. Tutte = senza limiti (predefinito).",
|
|
1032
1088
|
'settings.sessionMenu': "Menu contestuale sessione",
|
|
1033
1089
|
'settings.sessionMenu.hint': "Attivo: il clic destro su una riga di sessione apre il menu azioni (con pin, archiviazione e ferma-e-archivia ufficiali). Disattivo: la riga mostra il pulsante ⋯ ufficiale al passaggio, aprendo lo stesso menu. Attivo per impostazione predefinita.",
|
|
1034
1090
|
'settings.rowActions': "Pulsanti al passaggio della sessione",
|
|
@@ -1129,6 +1185,10 @@ window.__ModuleLoader__.load({
|
|
|
1129
1185
|
'viewOptions.manualOrder': '手動',
|
|
1130
1186
|
'viewOptions.updatedOrder': '最近の更新',
|
|
1131
1187
|
'viewOptions.sessionSlash': 'セッションを「/」でグループ化',
|
|
1188
|
+
'viewOptions.wsGroupBy': "ワークスペースのグループ化",
|
|
1189
|
+
'viewOptions.wsByDisk': "フォルダー",
|
|
1190
|
+
'viewOptions.wsByDiskSlash': "フォルダー + 名前",
|
|
1191
|
+
'viewOptions.wsBySlash': "名前のみ",
|
|
1132
1192
|
'group.ungrouped': '未分類',
|
|
1133
1193
|
'sessions.expand': '{n} 件のセッションを展開',
|
|
1134
1194
|
'sessions.collapse': '折りたたむ',
|
|
@@ -1159,10 +1219,13 @@ window.__ModuleLoader__.load({
|
|
|
1159
1219
|
'settings.collapse': '折りたたむ',
|
|
1160
1220
|
'settings.compactChains': '一本鎖の階層を 1 行にまとめる',
|
|
1161
1221
|
'settings.compactChains.hint': '子が 1 つだけの階層は 1 行にまとまり,複数の子がある階層はツリーとして展開されます;ワークスペースのドラッグ中は一時的にフォルダーツリーへ戻り,どの階層にもドロップできます;展開状態とカスタム外観はこのブラウザーに保存されます。',
|
|
1162
|
-
'settings.workspaceSlash': 'ワークスペースを「/」でグループ化',
|
|
1163
|
-
'settings.workspaceSlash.hint': 'オフ:ワークスペースは公式フォルダー(ディスクのディレクトリ)だけで入れ子になり、タイトルはそのまま表示されます。オン:タイトル内の「/」が再びグループ階層になります(「グループ/名前」)。既定はオフ、対象はワークスペースのみ — セッションのグループ化には専用のスイッチがあります。',
|
|
1164
1222
|
'settings.statusPulse': 'ステータス表示灯',
|
|
1165
1223
|
'settings.statusPulse.hint': '折りたたみで隠れたステータス表示(完了は緑 / 実行中は青 / 操作待ちは琥珀)が上位の階層へ伝わります:ワークスペースとフォルダーの行はアイコンがステータス色で明滅し(グローを設定したタイトルも連動),セッショングループの行には明滅するステータスドットが出ます;既定はオンで,ここでオフにできます。',
|
|
1224
|
+
'settings.workspaceGroup': "ワークスペースのグループ化",
|
|
1225
|
+
'settings.workspaceGroup.hint': "フォルダー:公式フォルダー(ディスク ディレクトリ)のみで階層化。フォルダー + 名前:ディスク ツリーに加えてタイトルのスラッシュでもグループ化。名前のみ:タイトルのスラッシュだけでグループ化し、ディスクの階層は無視。旧バージョンのスイッチ状態は自動的に引き継がれます。",
|
|
1226
|
+
'settings.sessionLimit': "展開時に表示するセッション数",
|
|
1227
|
+
'settings.sessionLimit.all': "すべて",
|
|
1228
|
+
'settings.sessionLimit.hint': "展開したワークスペースは最近のセッションを先に表示し、残りは「さらに表示」行の後ろに収まります。ピン留め・実行中・対応待ちのセッションは常に表示。すべて = 無制限(既定)。",
|
|
1166
1229
|
'settings.sessionMenu': "セッション右クリックメニュー",
|
|
1167
1230
|
'settings.sessionMenu.hint': "オン:セッション行を右クリックすると操作メニューを開きます(公式のピン留め・アーカイブ・停止してアーカイブを含む)。オフ:行にカーソルを合わせると公式スタイルの ⋯ ボタンが表示され、同じメニューを開きます。既定はオン。",
|
|
1168
1231
|
'settings.rowActions': "セッション行のホバーボタン",
|
|
@@ -1263,6 +1326,10 @@ window.__ModuleLoader__.load({
|
|
|
1263
1326
|
'viewOptions.manualOrder': '수동',
|
|
1264
1327
|
'viewOptions.updatedOrder': '최근 업데이트',
|
|
1265
1328
|
'viewOptions.sessionSlash': '세션을 "/"로 그룹화',
|
|
1329
|
+
'viewOptions.wsGroupBy': "작업 공간 그룹화",
|
|
1330
|
+
'viewOptions.wsByDisk': "디스크 폴더",
|
|
1331
|
+
'viewOptions.wsByDiskSlash': "디스크 + 이름",
|
|
1332
|
+
'viewOptions.wsBySlash': "이름만",
|
|
1266
1333
|
'group.ungrouped': '미분류',
|
|
1267
1334
|
'sessions.expand': '세션 {n}개 펼치기',
|
|
1268
1335
|
'sessions.collapse': '접기',
|
|
@@ -1293,10 +1360,13 @@ window.__ModuleLoader__.load({
|
|
|
1293
1360
|
'settings.collapse': '접기',
|
|
1294
1361
|
'settings.compactChains': '단일 체인을 한 줄로 접기',
|
|
1295
1362
|
'settings.compactChains.hint': '자식이 하나뿐인 단계는 한 줄로 합쳐지고, 자식이 여러 개면 트리로 펼쳐집니다; 워크스페이스를 끌어 놓는 동안에는 체인이 잠시 폴더 트리로 펼쳐져 어느 단계에나 놓을 수 있습니다; 펼침 상태와 사용자 지정 모양은 이 브라우저에 저장됩니다.',
|
|
1296
|
-
'settings.workspaceSlash': '작업 공간을 "/"로 그룹화',
|
|
1297
|
-
'settings.workspaceSlash.hint': '끄면: 작업 공간은 공식 폴더(디스크 디렉터리)로만 중첩되고 제목은 그대로 표시됩니다. 켜면: 제목의 "/"가 다시 그룹 단계가 됩니다("그룹/이름"). 기본값은 끔이며 작업 공간에만 적용됩니다 — 세션 그룹화에는 별도 스위치가 있습니다.',
|
|
1298
1363
|
'settings.statusPulse': '상태 표시등',
|
|
1299
1364
|
'settings.statusPulse.hint': '접혀서 가려진 상태 표시(완료는 초록 / 실행은 파랑 / 대기는 호박색)가 상위 단계로 번집니다: 워크스페이스와 폴더 행은 아이콘이 상태 색으로 깜빡이고(글로우를 지정한 제목도 함께 깜빡임), 세션 그룹 행에는 깜빡이는 상태 점이 표시됩니다; 기본값은 켜짐이며 여기서 끌 수 있습니다.',
|
|
1365
|
+
'settings.workspaceGroup': "작업 공간 그룹화",
|
|
1366
|
+
'settings.workspaceGroup.hint': "디스크 폴더: 공식 폴더(디스크 디렉터리)로만 중첩합니다. 디스크 + 이름: 디스크 트리 위에 슬래시 이름 그룹을 얹습니다. 이름만: 제목의 슬래시로만 그룹화하고 디스크 중첩은 무시합니다. 이전 버전 스위치 상태는 자동으로 이전됩니다.",
|
|
1367
|
+
'settings.sessionLimit': "펼칠 때 표시할 세션",
|
|
1368
|
+
'settings.sessionLimit.all': "전체",
|
|
1369
|
+
'settings.sessionLimit.hint': "펼친 작업 공간은 최근 세션을 먼저 보여주고 나머지는 더보기 행 뒤에 둡니다. 고정, 실행 중, 대기 중인 세션은 항상 표시됩니다. 전체 = 제한 없음(기본값).",
|
|
1300
1370
|
'settings.sessionMenu': "세션 우클릭 메뉴",
|
|
1301
1371
|
'settings.sessionMenu.hint': "켬: 세션 행을 우클릭하면 작업 메뉴가 열립니다(공식 고정, 보관, 중지 후 보관 포함). 끔: 행에 마우스를 올리면 공식 스타일의 ⋯ 버튼이 표시되어 같은 메뉴를 엽니다. 기본값은 켬.",
|
|
1302
1372
|
'settings.rowActions': "세션 행 호버 버튼",
|
|
@@ -1397,6 +1467,10 @@ window.__ModuleLoader__.load({
|
|
|
1397
1467
|
'viewOptions.manualOrder': 'Handmatig',
|
|
1398
1468
|
'viewOptions.updatedOrder': 'Laatst bijgewerkt',
|
|
1399
1469
|
'viewOptions.sessionSlash': 'Sessies groeperen op "/"',
|
|
1470
|
+
'viewOptions.wsGroupBy': "Werkruimtes groeperen",
|
|
1471
|
+
'viewOptions.wsByDisk': "Schijfmappen",
|
|
1472
|
+
'viewOptions.wsByDiskSlash': "Schijf + namen",
|
|
1473
|
+
'viewOptions.wsBySlash': "Alleen namen",
|
|
1400
1474
|
'group.ungrouped': 'Zonder groep',
|
|
1401
1475
|
'sessions.expand': '{n} sessies uitklappen',
|
|
1402
1476
|
'sessions.collapse': 'Inklappen',
|
|
@@ -1427,10 +1501,13 @@ window.__ModuleLoader__.load({
|
|
|
1427
1501
|
'settings.collapse': 'Inklappen',
|
|
1428
1502
|
'settings.compactChains': 'Enkelvoudige ketens samenvoegen',
|
|
1429
1503
|
'settings.compactChains.hint': 'Niveaus met één kind worden tot één regel samengevoegd; bij meerdere kinderen klapt de boom open; tijdens het slepen van een werkruimte klappen de ketens tijdelijk terug naar mappen, zodat je op elk niveau kunt neerzetten; de uitgeklapte staat en het eigen uiterlijk blijven in deze browser bewaard.',
|
|
1430
|
-
'settings.workspaceSlash': 'Werkruimtes groeperen op "/"',
|
|
1431
|
-
'settings.workspaceSlash.hint': 'Uit: werkruimten nesten alleen volgens de officiële mappen (schijfmappen) en titels blijven volledig. Aan: "/" in een titel wordt weer een groepsniveau ("groep/naam"). Standaard uit, alleen werkruimten — sessiegroepen hebben hun eigen schakelaar.',
|
|
1432
1504
|
'settings.statusPulse': 'Pulserend statuslampje',
|
|
1433
1505
|
'settings.statusPulse.hint': 'Statuslampjes die door het inklappen verborgen zijn (voltooid groen / actief blauw / wachtend amber) borrelen door de hiërarchie omhoog: werkruimte- en mapregels laten hun pictogram in de statuskleur pulseren (titels met eigen gloed pulseren mee), sessiegroepregels tonen een pulserend statusstipje; standaard aan, hier uit te zetten.',
|
|
1506
|
+
'settings.workspaceGroup': "Werkruimtegroepering",
|
|
1507
|
+
'settings.workspaceGroup.hint': "Schijfmappen: nest alleen volgens de officiële mappen (schijfdirectories). Schijf + namen: stapelt naamgroepen bovenop de schijfboom. Alleen namen: groept puur op schuine strepen in titels en negeert schijfnesting. De oude schakelaarstand migreert automatisch.",
|
|
1508
|
+
'settings.sessionLimit': "Sessies bij uitklappen",
|
|
1509
|
+
'settings.sessionLimit.all': "Alles",
|
|
1510
|
+
'settings.sessionLimit.hint': "Een uitgeklapte werkruimte toont eerst de nieuwste sessies, de rest achter een toon-meer rij; vastgemaakte, lopende en op u wachtende sessies blijven altijd zichtbaar. Alles = onbeperkt (standaard).",
|
|
1434
1511
|
'settings.sessionMenu': "Sessie-contextmenu",
|
|
1435
1512
|
'settings.sessionMenu.hint': "Aan: rechtermuisklik op een sessierij opent het actiemenu (inclusief officieel vastmaken, archiveren en stoppen-en-archiveren). Uit: bij aanwijzen verschijnt in plaats daarvan de officiële ⋯-knop aan het rij-einde, die hetzelfde menu opent. Standaard aan.",
|
|
1436
1513
|
'settings.rowActions': "Sessierij-snelknoppen",
|
|
@@ -1531,6 +1608,10 @@ window.__ModuleLoader__.load({
|
|
|
1531
1608
|
'viewOptions.manualOrder': 'Ręcznie',
|
|
1532
1609
|
'viewOptions.updatedOrder': 'Ostatnia aktualizacja',
|
|
1533
1610
|
'viewOptions.sessionSlash': 'Grupuj sesje po "/"',
|
|
1611
|
+
'viewOptions.wsGroupBy': "Grupowanie obszarów",
|
|
1612
|
+
'viewOptions.wsByDisk': "Foldery dysku",
|
|
1613
|
+
'viewOptions.wsByDiskSlash': "Dysk + nazwy",
|
|
1614
|
+
'viewOptions.wsBySlash': "Tylko nazwy",
|
|
1534
1615
|
'group.ungrouped': 'Bez grupy',
|
|
1535
1616
|
'sessions.expand': 'Pokaż {n} sesji',
|
|
1536
1617
|
'sessions.collapse': 'Zwiń',
|
|
@@ -1561,10 +1642,13 @@ window.__ModuleLoader__.load({
|
|
|
1561
1642
|
'settings.collapse': 'Zwiń',
|
|
1562
1643
|
'settings.compactChains': 'Scal łańcuchy z jednym dzieckiem',
|
|
1563
1644
|
'settings.compactChains.hint': 'Poziomy z jednym dzieckiem scalają się w jeden wiersz; przy większej liczbie dzieci drzewo się rozwija; podczas przeciągania obszaru roboczego łańcuchy tymczasowo rozwijają się do folderów, więc upuszczenie działa na każdym poziomie; stan rozwinięcia i własny wygląd są zapisywane w tej przeglądarce.',
|
|
1564
|
-
'settings.workspaceSlash': 'Grupuj obszary po "/"',
|
|
1565
|
-
'settings.workspaceSlash.hint': 'Wył.: obszary robocze zagnieżdżają się wyłącznie według oficjalnych folderów (katalogów dysku), a tytuły są pełne. Wł.: "/" w tytule znów staje się poziomem grupy ("grupa/nazwa"). Domyślnie wył., dotyczy tylko obszarów roboczych — grupy sesji mają własny przełącznik.',
|
|
1566
1645
|
'settings.statusPulse': 'Pulsująca lampka stanu',
|
|
1567
1646
|
'settings.statusPulse.hint': 'Lampki ukryte przez zwinięcie (ukończono zielona / trwa niebieska / czeka bursztynowa) bąbelkują w górę hierarchii: wiersze obszarów roboczych i folderów pulsują ikoną w kolorze stanu (tytuły z własną poświatą pulsują razem), wiersze grup sesji pokazują pulsującą kropkę stanu; domyślnie włączone, tutaj można wyłączyć.',
|
|
1647
|
+
'settings.workspaceGroup': "Grupowanie obszarów roboczych",
|
|
1648
|
+
'settings.workspaceGroup.hint': "Foldery dysku: zagnieżdżanie wyłącznie według oficjalnych folderów (katalogów dysku). Dysk + nazwy: dokłada grupy nazw nad drzewem dysku. Tylko nazwy: grupuje wyłącznie po ukośnikach w tytułach, ignorując zagnieżdżanie dyskowe. Stan starego przełącznika migruje automatycznie.",
|
|
1649
|
+
'settings.sessionLimit': "Sesje po rozwinięciu",
|
|
1650
|
+
'settings.sessionLimit.all': "Wszystkie",
|
|
1651
|
+
'settings.sessionLimit.hint': "Rozwinięty obszar pokazuje najpierw najnowsze sesje, reszta czeka za wierszem pokaż-więcej; przypięte, uruchomione i czekające sesje są zawsze widoczne. Wszystkie = bez limitu (domyślnie).",
|
|
1568
1652
|
'settings.sessionMenu': "Menu kontekstowe sesji",
|
|
1569
1653
|
'settings.sessionMenu.hint': "Włączone: kliknięcie prawym przyciskiem wiersza sesji otwiera jego menu akcji (w tym oficjalne przypinanie, archiwizację i zatrzymanie z archiwizacją). Wyłączone: przy najechaniu wiersz pokazuje oficjalny przycisk ⋯ otwierający to samo menu. Domyślnie włączone.",
|
|
1570
1654
|
'settings.rowActions': "Przyciski najechania wiersza sesji",
|
|
@@ -1665,6 +1749,10 @@ window.__ModuleLoader__.load({
|
|
|
1665
1749
|
'viewOptions.manualOrder': 'Manual',
|
|
1666
1750
|
'viewOptions.updatedOrder': 'Atualização recente',
|
|
1667
1751
|
'viewOptions.sessionSlash': 'Agrupar sessões por "/"',
|
|
1752
|
+
'viewOptions.wsGroupBy': "Agrupar espaços",
|
|
1753
|
+
'viewOptions.wsByDisk': "Pastas do disco",
|
|
1754
|
+
'viewOptions.wsByDiskSlash': "Disco + nomes",
|
|
1755
|
+
'viewOptions.wsBySlash': "Apenas nomes",
|
|
1668
1756
|
'group.ungrouped': 'Sem grupo',
|
|
1669
1757
|
'sessions.expand': 'Mostrar {n} sessões',
|
|
1670
1758
|
'sessions.collapse': 'Recolher',
|
|
@@ -1695,10 +1783,13 @@ window.__ModuleLoader__.load({
|
|
|
1695
1783
|
'settings.collapse': 'Recolher',
|
|
1696
1784
|
'settings.compactChains': 'Mesclar cadeias de filho único',
|
|
1697
1785
|
'settings.compactChains.hint': 'Níveis com um único filho viram uma linha; com vários filhos a árvore se expande; ao arrastar um espaço de trabalho, as cadeias voltam temporariamente a pastas, permitindo soltar em qualquer nível; o estado de expansão e o estilo personalizado ficam neste navegador.',
|
|
1698
|
-
'settings.workspaceSlash': 'Agrupar áreas por "/"',
|
|
1699
|
-
'settings.workspaceSlash.hint': 'Desligado: as áreas de trabalho aninham-se apenas pelas pastas oficiais (diretórios do disco) e os títulos ficam inteiros. Ligado: a "/" no título volta a ser um nível de grupo ("grupo/nome"). Desligado por padrão, só áreas de trabalho — os grupos de sessões têm o próprio interruptor.',
|
|
1700
1786
|
'settings.statusPulse': 'Luz de status pulsante',
|
|
1701
1787
|
'settings.statusPulse.hint': 'As luzes escondidas pelo recolhimento (concluído verde / em execução azul / aguardando âmbar) sobem pela hierarquia: linhas de espaço de trabalho e pasta pulsam o ícone na cor do status (títulos com brilho personalizado pulsam junto), linhas de grupo de sessões mostram um ponto pulsante; ativado por padrão, pode ser desligado aqui.',
|
|
1788
|
+
'settings.workspaceGroup': "Agrupamento de espaços",
|
|
1789
|
+
'settings.workspaceGroup.hint': "Pastas do disco: aninhar apenas pelas pastas oficiais (diretórios de disco). Disco + nomes: acrescenta grupos de nomes sobre a árvore de disco. Apenas nomes: agrupa só pela barra nos títulos, ignorando o aninhamento de disco. O estado do interruptor antigo migra automaticamente.",
|
|
1790
|
+
'settings.sessionLimit': "Sessões ao expandir",
|
|
1791
|
+
'settings.sessionLimit.all': "Todas",
|
|
1792
|
+
'settings.sessionLimit.hint': "Um espaço expandido mostra primeiro as sessões mais recentes, o restante atrás de uma linha mostrar-mais; sessões fixadas, em execução e aguardando você permanecem visíveis. Todas = sem limite (predefinição).",
|
|
1702
1793
|
'settings.sessionMenu': "Menu de contexto da sessão",
|
|
1703
1794
|
'settings.sessionMenu.hint': "Ligado: clicar com o botão direito numa linha de sessão abre o menu de ações (incluindo fixar, arquivar e parar-e-arquivar oficiais). Desligado: a linha mostra o botão ⋯ oficial ao passar o cursor, abrindo o mesmo menu. Ligado por predefinição.",
|
|
1704
1795
|
'settings.rowActions': "Botões de passagem da sessão",
|
|
@@ -1799,6 +1890,10 @@ window.__ModuleLoader__.load({
|
|
|
1799
1890
|
'viewOptions.manualOrder': 'Вручную',
|
|
1800
1891
|
'viewOptions.updatedOrder': 'По обновлению',
|
|
1801
1892
|
'viewOptions.sessionSlash': 'Группировать сессии по «/»',
|
|
1893
|
+
'viewOptions.wsGroupBy': "Группировка рабочих областей",
|
|
1894
|
+
'viewOptions.wsByDisk': "Папки диска",
|
|
1895
|
+
'viewOptions.wsByDiskSlash': "Диск + имена",
|
|
1896
|
+
'viewOptions.wsBySlash': "Только имена",
|
|
1802
1897
|
'group.ungrouped': 'Без группы',
|
|
1803
1898
|
'sessions.expand': 'Показать ещё {n} сессий',
|
|
1804
1899
|
'sessions.collapse': 'Свернуть',
|
|
@@ -1829,10 +1924,13 @@ window.__ModuleLoader__.load({
|
|
|
1829
1924
|
'settings.collapse': 'Свернуть',
|
|
1830
1925
|
'settings.compactChains': 'Объединять цепочки с одним потомком',
|
|
1831
1926
|
'settings.compactChains.hint': 'Уровни с единственным потомком сливаются в одну строку; при нескольких потомках дерево разворачивается; во время перетаскивания рабочей области цепочки временно разворачиваются в папки, чтобы можно было положить элемент на любой уровень; состояние сворачивания и оформление хранятся в этом браузере.',
|
|
1832
|
-
'settings.workspaceSlash': 'Группировать области по «/»',
|
|
1833
|
-
'settings.workspaceSlash.hint': 'Выкл.: рабочие области вкладываются только по официальным папкам (каталогам диска), заголовки показываются целиком. Вкл.: «/» в заголовке снова становится уровнем группы («группа/имя»). По умолчанию выкл., только рабочие области — у групп сессий свой переключатель.',
|
|
1834
1927
|
'settings.statusPulse': 'Пульсирующий индикатор состояния',
|
|
1835
1928
|
'settings.statusPulse.hint': 'Индикаторы, скрытые сворачиванием (завершено — зелёный / выполняется — синий / ожидает — янтарный), всплывают вверх по иерархии: строки рабочих областей и папок пульсируют значком в цвете состояния (заголовки со своим свечением пульсируют вместе с ними), строки групп сессий показывают пульсирующую точку; включено по умолчанию, здесь можно отключить.',
|
|
1929
|
+
'settings.workspaceGroup': "Группировка рабочих областей",
|
|
1930
|
+
'settings.workspaceGroup.hint': "Папки диска: вложенность только по официальным папкам (каталогам диска). Диск + имена: добавляет группы имён поверх дерева диска. Только имена: группирует лишь по косой черте в названиях, игнорируя вложенность диска. Состояние старого переключателя переносится автоматически.",
|
|
1931
|
+
'settings.sessionLimit': "Сессий при разворачивании",
|
|
1932
|
+
'settings.sessionLimit.all': "Все",
|
|
1933
|
+
'settings.sessionLimit.hint': "Развёрнутая область сначала показывает последние сессии, остальные — за строкой «показать ещё»; закреплённые, идущие и ожидающие вас сессии видны всегда. Все = без ограничения (по умолчанию).",
|
|
1836
1934
|
'settings.sessionMenu': "Контекстное меню сессии",
|
|
1837
1935
|
'settings.sessionMenu.hint': "Вкл: правый клик по строке сессии открывает меню действий (включая официальные закрепление, архивацию и «остановить и архивировать»). Выкл: при наведении в строке появляется официальная кнопка ⋯, открывающая то же меню. Включено по умолчанию.",
|
|
1838
1936
|
'settings.rowActions': "Кнопки наведения строки сессии",
|
|
@@ -1933,6 +2031,10 @@ window.__ModuleLoader__.load({
|
|
|
1933
2031
|
'viewOptions.manualOrder': 'Manuellt',
|
|
1934
2032
|
'viewOptions.updatedOrder': 'Senast uppdaterad',
|
|
1935
2033
|
'viewOptions.sessionSlash': 'Gruppera sessioner efter "/"',
|
|
2034
|
+
'viewOptions.wsGroupBy': "Gruppera arbetsytor",
|
|
2035
|
+
'viewOptions.wsByDisk': "Skivmappar",
|
|
2036
|
+
'viewOptions.wsByDiskSlash': "Skiva + namn",
|
|
2037
|
+
'viewOptions.wsBySlash': "Endast namn",
|
|
1936
2038
|
'group.ungrouped': 'Utan grupp',
|
|
1937
2039
|
'sessions.expand': 'Visa {n} sessioner',
|
|
1938
2040
|
'sessions.collapse': 'Fäll ihop',
|
|
@@ -1963,10 +2065,13 @@ window.__ModuleLoader__.load({
|
|
|
1963
2065
|
'settings.collapse': 'Fäll ihop',
|
|
1964
2066
|
'settings.compactChains': 'Slå ihop enkelkedjor',
|
|
1965
2067
|
'settings.compactChains.hint': 'Nivåer med ett enda barn slås ihop till en rad; med flera barn fälls trädet ut; medan du drar en arbetsyta fälls kedjorna tillfälligt ut till mappar så att du kan släppa på vilken nivå som helst; utfällt läge och eget utseende sparas i den här webbläsaren.',
|
|
1966
|
-
'settings.workspaceSlash': 'Gruppera arbetsytor efter "/"',
|
|
1967
|
-
'settings.workspaceSlash.hint': 'Av: arbetsytor kapslas in enbart efter de officiella mapparna (diskmappar) och titlar visas hela. På: "/" i en titel blir åter en gruppnivå ("grupp/namn"). Av som standard, endast arbetsytor — sessionsgrupper har sin egen växlare.',
|
|
1968
2068
|
'settings.statusPulse': 'Pulserande statuslampa',
|
|
1969
2069
|
'settings.statusPulse.hint': 'Statuslampor som döljs av ihopfällningen (klart grön / körs blå / väntar bärnsten) bubblar uppåt i hierarkin: rader för arbetsytor och mappar pulserar ikonen i statusfärgen (titlar med egen glöd pulserar med), sessionsgrupper visar en pulserande prick; på som standard, stängs av här.',
|
|
2070
|
+
'settings.workspaceGroup': "Arbetsytegruppering",
|
|
2071
|
+
'settings.workspaceGroup.hint': "Skivmappar: kapslar bara enligt de officiella mapparna (skivkataloger). Skiva + namn: lägger namngrupper ovanpå skivträdet. Endast namn: grupperar rent efter snedstreck i titlar och ignorerar skivkapsling. Den gamla reglagestatusen migreras automatiskt.",
|
|
2072
|
+
'settings.sessionLimit': "Sessioner vid utfällning",
|
|
2073
|
+
'settings.sessionLimit.all': "Alla",
|
|
2074
|
+
'settings.sessionLimit.hint': "En utfälld arbetsyta visar först de senaste sessionerna, resten bakom en visa-mer-rad; fästa, pågående och väntande sessioner syns alltid. Alla = obegränsat (standard).",
|
|
1970
2075
|
'settings.sessionMenu': "Sessionens högerklicksmeny",
|
|
1971
2076
|
'settings.sessionMenu.hint': "På: högerklick på en sessionsrad öppnar dess åtgärdsmeny (inklusive officiell fästning, arkivering och stoppa-och-arkivera). Av: raden visar istället den officiella ⋯-knappen vid hovring, som öppnar samma meny. På som standard.",
|
|
1972
2077
|
'settings.rowActions': "Hovringsknappar för sessionsraden",
|
|
@@ -2067,6 +2172,10 @@ window.__ModuleLoader__.load({
|
|
|
2067
2172
|
'viewOptions.manualOrder': 'ด้วยตนเอง',
|
|
2068
2173
|
'viewOptions.updatedOrder': 'อัปเดตล่าสุด',
|
|
2069
2174
|
'viewOptions.sessionSlash': 'จัดกลุ่มเซสชันตาม "/"',
|
|
2175
|
+
'viewOptions.wsGroupBy': "จัดกลุ่มพื้นที่ทำงาน",
|
|
2176
|
+
'viewOptions.wsByDisk': "โฟลเดอร์ดิสก์",
|
|
2177
|
+
'viewOptions.wsByDiskSlash': "ดิสก์ + ชื่อ",
|
|
2178
|
+
'viewOptions.wsBySlash': "เฉพาะชื่อ",
|
|
2070
2179
|
'group.ungrouped': 'ไม่มีกลุ่ม',
|
|
2071
2180
|
'sessions.expand': 'แสดงอีก {n} เซสชัน',
|
|
2072
2181
|
'sessions.collapse': 'ย่อ',
|
|
@@ -2097,10 +2206,13 @@ window.__ModuleLoader__.load({
|
|
|
2097
2206
|
'settings.collapse': 'ย่อ',
|
|
2098
2207
|
'settings.compactChains': 'รวมสายที่มีลูกเดียว',
|
|
2099
2208
|
'settings.compactChains.hint': 'ระดับที่มีลูกเพียงหนึ่งจะถูกรวมเป็นบรรทัดเดียว เมื่อมีลูกหลายตัวต้นไม้จะขยายออก ขณะลากพื้นที่ทำงาน สายจะขยายกลับเป็นโฟลเดอร์ชั่วคราวเพื่อให้วางได้ทุกระดับ สถานะการขยายและรูปลักษณ์ที่กำหนดเองจะถูกเก็บไว้ในเบราว์เซอร์นี้',
|
|
2100
|
-
'settings.workspaceSlash': 'จัดกลุ่มพื้นที่ทำงานตาม "/"',
|
|
2101
|
-
'settings.workspaceSlash.hint': 'ปิด: พื้นที่ทำงานซ้อนกันตามโฟลเดอร์ทางการ (ไดเรกทอรีบนดิสก์) เท่านั้น และชื่อเรื่องแสดงเต็ม ปิดเป็นค่าเริ่มต้น ใช้กับพื้นที่ทำงานเท่านั้น — การจัดกลุ่มเซสชันมีสวิตช์แยก',
|
|
2102
2209
|
'settings.statusPulse': 'ไฟสถานะหายใจ',
|
|
2103
2210
|
'settings.statusPulse.hint': 'ไฟสถานะที่ถูกย่อซ่อนไว้ (เสร็จแล้วสีเขียว / กำลังทำงานสีน้ำเงิน / รอตอบสนองสีเหลืองอำพัน) จะลอยขึ้นตามลำดับชั้น: แถวพื้นที่ทำงานและโฟลเดอร์จะให้ไอคอนหายใจเป็นสีตามสถานะ (ชื่อที่มีการเรืองแสงกำหนดเองก็หายใจตาม) แถวกลุ่มเซสชันจะแสดงจุดสถานะที่หายใจ เปิดไว้เป็นค่าเริ่มต้น ปิดได้ที่นี่',
|
|
2211
|
+
'settings.workspaceGroup': "การจัดกลุ่มพื้นที่ทำงาน",
|
|
2212
|
+
'settings.workspaceGroup.hint': "โฟลเดอร์ดิสก์: ซ้อนตามโฟลเดอร์ทางการ (ไดเรกทอรีดิสก์) เท่านั้น ดิสก์ + ชื่อ: เพิ่มกลุ่มชื่อแบบเส้นทับทับต้นไม้ดิสก์ เฉพาะชื่อ: จัดกลุ่มจากเครื่องหมายทับในชื่อเท่านั้นโดยไม่สนการซ้อนดิสก์ สถานะสวิตช์เวอร์ชันเก่าจะย้ายมาโดยอัตโนมัติ",
|
|
2213
|
+
'settings.sessionLimit': "จำนวนเซสชันเมื่อกาง",
|
|
2214
|
+
'settings.sessionLimit.all': "ทั้งหมด",
|
|
2215
|
+
'settings.sessionLimit.hint': "พื้นที่ที่กางจะแสดงเซสชันล่าสุดก่อน ส่วนที่เหลืออยู่หลังแถวแสดงเพิ่ม เซสชันที่ปักหมุด กำลังทำงาน และรอคุณจะแสดงตลอด ทั้งหมด = ไม่จำกัด (ค่าเริ่มต้น)",
|
|
2104
2216
|
'settings.sessionMenu': "เมนูคลิกขวาของเซสชัน",
|
|
2105
2217
|
'settings.sessionMenu.hint': "เปิด: คลิกขวาที่แถวเซสชันเพื่อเปิดเมนูการกระทำ (รวมปักหมุด, เก็บถาวร และหยุด-แล้ว-เก็บถาวรแบบทางการ) ปิด: เมื่อชี้ที่แถวจะแสดงปุ่ม ⋯ สไตล์ทางการเปิดเมนูเดียวกันแทน เปิดตามค่าเริ่มต้น",
|
|
2106
2218
|
'settings.rowActions': "ปุ่มเมื่อชี้แถวเซสชัน",
|
|
@@ -2201,6 +2313,10 @@ window.__ModuleLoader__.load({
|
|
|
2201
2313
|
'viewOptions.manualOrder': 'El ile',
|
|
2202
2314
|
'viewOptions.updatedOrder': 'Son güncelleme',
|
|
2203
2315
|
'viewOptions.sessionSlash': 'Oturumları "/" ile gruplandır',
|
|
2316
|
+
'viewOptions.wsGroupBy': "Çalışma alanlarını grupla",
|
|
2317
|
+
'viewOptions.wsByDisk': "Disk klasörleri",
|
|
2318
|
+
'viewOptions.wsByDiskSlash': "Disk + adlar",
|
|
2319
|
+
'viewOptions.wsBySlash': "Yalnız adlar",
|
|
2204
2320
|
'group.ungrouped': 'Grubusuz',
|
|
2205
2321
|
'sessions.expand': '{n} oturumu göster',
|
|
2206
2322
|
'sessions.collapse': 'Daralt',
|
|
@@ -2231,10 +2347,13 @@ window.__ModuleLoader__.load({
|
|
|
2231
2347
|
'settings.collapse': 'Daralt',
|
|
2232
2348
|
'settings.compactChains': 'Tek çocuklu zincirleri birleştir',
|
|
2233
2349
|
'settings.compactChains.hint': 'Tek çocuklu düzeyler tek satırda birleşir; birden çok çocuk olduğunda ağaç açılır; bir çalışma alanını sürüklerken zincirler geçici olarak klasörlere açılır, böylece her düzeye bırakabilirsiniz; açılma durumu ve özel görünüm bu tarayıcıda saklanır.',
|
|
2234
|
-
'settings.workspaceSlash': 'Çalışma alanlarını "/" ile gruplandır',
|
|
2235
|
-
'settings.workspaceSlash.hint': 'Kapalı: çalışma alanları yalnızca resmî klasörlere (disk dizinleri) göre iç içe geçer ve başlıklar tam görünür. Açık: başlıktaki "/" yeniden bir grup düzeyi olur ("grup/ad"). Varsayılan kapalı, yalnızca çalışma alanları — oturum gruplamasının kendi anahtarı var.',
|
|
2236
2350
|
'settings.statusPulse': 'Nefes alan durum ışığı',
|
|
2237
2351
|
'settings.statusPulse.hint': 'Daraltmayla gizlenen durum ışıkları (tamamlandı yeşil / çalışıyor mavi / bekliyor amber) hiyerarşide yukarı taşar: çalışma alanı ve klasör satırlarının simgesi durum renginde nefes alır (özel ışıması olan başlıklar da birlikte nefes alır), oturum grubu satırları nefes alan bir durum noktası gösterir; varsayılan olarak açık, buradan kapatılabilir.',
|
|
2352
|
+
'settings.workspaceGroup': "Çalışma alanı gruplaması",
|
|
2353
|
+
'settings.workspaceGroup.hint': "Disk klasörleri: yalnızca resmî klasörlere (disk dizinleri) göre iç içe. Disk + adlar: disk ağacının üzerine ad grupları ekler. Yalnız adlar: yalnızca başlıklardaki bölü işaretiyle gruplar, disk iç içeliğini yok sayar. Eski anahtar durumu otomatik taşınır.",
|
|
2354
|
+
'settings.sessionLimit': "Açıldığında gösterilecek oturum",
|
|
2355
|
+
'settings.sessionLimit.all': "Tümü",
|
|
2356
|
+
'settings.sessionLimit.hint': "Açılan çalışma alanı önce en yeni oturumları gösterir, kalanı bir daha-göster satırının ardındadır; sabitlenmiş, çalışan ve sizi bekleyen oturumlar her zaman görünür. Tümü = sınırsız (varsayılan).",
|
|
2238
2357
|
'settings.sessionMenu': "Oturum sağ tık menüsü",
|
|
2239
2358
|
'settings.sessionMenu.hint': "Açık: oturum satırına sağ tıklayınca eylem menüsü açılır (resmî sabitleme, arşivleme ve durdurup-arşivleme dahil). Kapalı: satırın üzerine gelince resmî ⋯ düğmesi görünür ve aynı menüyü açar. Varsayılan açık.",
|
|
2240
2359
|
'settings.rowActions': "Oturum satırı düğmeleri",
|
|
@@ -2335,6 +2454,10 @@ window.__ModuleLoader__.load({
|
|
|
2335
2454
|
'viewOptions.manualOrder': 'Thủ công',
|
|
2336
2455
|
'viewOptions.updatedOrder': 'Cập nhật gần đây',
|
|
2337
2456
|
'viewOptions.sessionSlash': 'Nhóm phiên theo "/"',
|
|
2457
|
+
'viewOptions.wsGroupBy': "Nhóm không gian làm việc",
|
|
2458
|
+
'viewOptions.wsByDisk': "Thư mục đĩa",
|
|
2459
|
+
'viewOptions.wsByDiskSlash': "Đĩa + tên",
|
|
2460
|
+
'viewOptions.wsBySlash': "Chỉ tên",
|
|
2338
2461
|
'group.ungrouped': 'Chưa phân nhóm',
|
|
2339
2462
|
'sessions.expand': 'Hiện thêm {n} phiên',
|
|
2340
2463
|
'sessions.collapse': 'Thu gọn',
|
|
@@ -2365,10 +2488,13 @@ window.__ModuleLoader__.load({
|
|
|
2365
2488
|
'settings.collapse': 'Thu gọn',
|
|
2366
2489
|
'settings.compactChains': 'Gộp chuỗi một nhánh',
|
|
2367
2490
|
'settings.compactChains.hint': 'Các tầng chỉ có một nhánh con được gộp thành một dòng; khi có nhiều nhánh con, cây tự mở ra; khi kéo không gian làm việc, chuỗi tạm mở lại thành thư mục để có thể thả vào bất kỳ tầng nào; trạng thái mở và giao diện tùy chỉnh được lưu trong trình duyệt này.',
|
|
2368
|
-
'settings.workspaceSlash': 'Nhóm khu vực theo "/"',
|
|
2369
|
-
'settings.workspaceSlash.hint': 'Tắt: không gian làm việc lồng nhau chỉ theo thư mục chính thức (thư mục trên đĩa) và tiêu đề hiển thị nguyên vẹn. Bật: "/" trong tiêu đề lại trở thành một cấp nhóm ("nhóm/tên"). Mặc định tắt, chỉ áp dụng cho không gian làm việc — nhóm phiên có công tắc riêng.',
|
|
2370
2491
|
'settings.statusPulse': 'Đèn trạng thái nhấp nháy',
|
|
2371
2492
|
'settings.statusPulse.hint': 'Những đèn trạng thái bị thu gọn che đi (xong màu xanh lá / đang chạy màu xanh dương / đang chờ màu hổ phách) sẽ nổi dần lên các tầng trên: hàng không gian làm việc và thư mục cho biểu tượng nhấp nháy theo màu trạng thái (tiêu đề có đặt phát sáng cũng nhấp nháy theo), hàng nhóm phiên hiện một chấm trạng thái nhấp nháy; mặc định bật, có thể tắt tại đây.',
|
|
2493
|
+
'settings.workspaceGroup': "Nhóm không gian làm việc",
|
|
2494
|
+
'settings.workspaceGroup.hint': "Thư mục đĩa: lồng theo thư mục chính thức (thư mục đĩa) mà thôi. Đĩa + tên: thêm nhóm tên lên trên cây đĩa. Chỉ tên: nhóm chỉ theo dấu gạch chéo trong tiêu đề, bỏ qua lồng đĩa. Trạng thái công tắc bản cũ tự động chuyển đổi.",
|
|
2495
|
+
'settings.sessionLimit': "Số phiên khi mở rộng",
|
|
2496
|
+
'settings.sessionLimit.all': "Tất cả",
|
|
2497
|
+
'settings.sessionLimit.hint': "Không gian được mở rộng sẽ hiện các phiên gần đây trước, phần còn lại nằm sau một hàng xem-thêm; phiên ghim, đang chạy và đang chờ bạn luôn hiển thị. Tất cả = không giới hạn (mặc định).",
|
|
2372
2498
|
'settings.sessionMenu': "Menu chuột phải phiên",
|
|
2373
2499
|
'settings.sessionMenu.hint': "Bật: nhấp chuột phải vào dòng phiên để mở menu thao tác (bao gồm ghim, lưu trữ và dừng-rồi-lưu trữ chính thức). Tắt: dòng hiển thị nút ⋯ kiểu chính thức khi di chuột, mở cùng menu đó. Bật theo mặc định.",
|
|
2374
2500
|
'settings.rowActions': "Nút hover dòng phiên",
|
|
@@ -2469,6 +2595,10 @@ window.__ModuleLoader__.load({
|
|
|
2469
2595
|
'viewOptions.manualOrder': '手動排序',
|
|
2470
2596
|
'viewOptions.updatedOrder': '最近更新',
|
|
2471
2597
|
'viewOptions.sessionSlash': '對話按「/」分組',
|
|
2598
|
+
'viewOptions.wsGroupBy': "工作區分組",
|
|
2599
|
+
'viewOptions.wsByDisk': "磁碟目錄",
|
|
2600
|
+
'viewOptions.wsByDiskSlash': "磁碟 + 名稱",
|
|
2601
|
+
'viewOptions.wsBySlash': "僅名稱",
|
|
2472
2602
|
'group.ungrouped': '未分組',
|
|
2473
2603
|
'sessions.expand': '展開 {n} 個對話',
|
|
2474
2604
|
'sessions.collapse': '收起',
|
|
@@ -2499,10 +2629,13 @@ window.__ModuleLoader__.load({
|
|
|
2499
2629
|
'settings.collapse': '收起',
|
|
2500
2630
|
'settings.compactChains': '單鏈分組摺疊顯示',
|
|
2501
2631
|
'settings.compactChains.hint': '單層鏈會合併成一行,出現多個子級就會自動展開成樹狀;拖拽工作區期間單鏈會臨時展開返做文件夾樹,可以放入任何一級;展開狀態同自訂外觀會喺呢個瀏覽器保存。',
|
|
2502
|
-
'settings.workspaceSlash': '工作區按「/」分組',
|
|
2503
|
-
'settings.workspaceSlash.hint': '關閉時工作區只按官方資料夾(磁碟目錄)嵌套,標題原樣顯示;開啟後標題裡的 / 重新成為分組層級(組名/名字)。預設關閉;只影響工作區,對話分組另有獨立開關。',
|
|
2504
2632
|
'settings.statusPulse': '狀態呼吸燈',
|
|
2505
2633
|
'settings.statusPulse.hint': '被摺疊遮住嘅狀態燈(完成綠 / 運行藍 / 待互動琥珀)會沿住層級向外冒泡:工作區同分組行會以圖示呼吸發光(顏色跟狀態,自訂過發光嘅標題一齊呼吸),對話分組行就會顯示呼吸狀態燈;預設開啟,可以喺度閂咗佢。',
|
|
2634
|
+
'settings.workspaceGroup': "工作區分組",
|
|
2635
|
+
'settings.workspaceGroup.hint': "磁碟目錄 = 只按官方資料夾(磁碟目錄)巢狀;磁碟 + 名稱 = 在磁碟層之上再按標題裏的 / 分組;僅名稱 = 只按標題裏的 / 分組,完全不理會磁碟目錄的巢狀關係。舊版本的開關狀態會自動遷移。",
|
|
2636
|
+
'settings.sessionLimit': "展開時顯示會話數",
|
|
2637
|
+
'settings.sessionLimit.all': "全部",
|
|
2638
|
+
'settings.sessionLimit.hint': "展開工作區時先只顯示最近的部分會話,其餘收進「展開 {n} 個會話」一行,點擊展開該組全部;置頂、進行中和等待你的會話始終顯示。全部 = 不限量(預設)。",
|
|
2506
2639
|
'settings.sessionMenu': "會話右鍵選單",
|
|
2507
2640
|
'settings.sessionMenu.hint': "開啟時右鍵點擊會話行即可開啟操作選單(包含官方的置頂、封存、停止並封存等);關閉後改為在行尾懸停顯示官方樣式的 ⋯ 按鈕,點擊開啟同一個選單。預設開啟。",
|
|
2508
2641
|
'settings.rowActions': "會話行懸停按鈕",
|
|
@@ -2603,6 +2736,10 @@ window.__ModuleLoader__.load({
|
|
|
2603
2736
|
'viewOptions.manualOrder': '手動排序',
|
|
2604
2737
|
'viewOptions.updatedOrder': '最近更新',
|
|
2605
2738
|
'viewOptions.sessionSlash': '對話按「/」分組',
|
|
2739
|
+
'viewOptions.wsGroupBy': "工作區分組",
|
|
2740
|
+
'viewOptions.wsByDisk': "磁碟目錄",
|
|
2741
|
+
'viewOptions.wsByDiskSlash': "磁碟 + 名稱",
|
|
2742
|
+
'viewOptions.wsBySlash': "僅名稱",
|
|
2606
2743
|
'group.ungrouped': '未分組',
|
|
2607
2744
|
'sessions.expand': '展開 {n} 個對話',
|
|
2608
2745
|
'sessions.collapse': '收起',
|
|
@@ -2633,10 +2770,13 @@ window.__ModuleLoader__.load({
|
|
|
2633
2770
|
'settings.collapse': '收起',
|
|
2634
2771
|
'settings.compactChains': '單鏈分組摺疊顯示',
|
|
2635
2772
|
'settings.compactChains.hint': '單層鏈會合併成一行,出現多個子級就會自動展開成樹狀;拖拽工作區期間單鏈會臨時展開返做文件夾樹,可以放入任何一級;展開狀態同自訂外觀會喺呢個瀏覽器保存。',
|
|
2636
|
-
'settings.workspaceSlash': '工作區按「/」分組',
|
|
2637
|
-
'settings.workspaceSlash.hint': '關閉時工作區只按官方資料夾(磁碟目錄)嵌套,標題原樣顯示;開啟後標題裡的 / 重新成為分組層級(組名/名字)。預設關閉;只影響工作區,對話分組另有獨立開關。',
|
|
2638
2773
|
'settings.statusPulse': '狀態呼吸燈',
|
|
2639
2774
|
'settings.statusPulse.hint': '被摺疊遮住嘅狀態燈(完成綠 / 運行藍 / 待互動琥珀)會沿住層級向外冒泡:工作區同分組行會以圖示呼吸發光(顏色跟狀態,自訂過發光嘅標題一齊呼吸),對話分組行就會顯示呼吸狀態燈;預設開啟,可以喺度閂咗佢。',
|
|
2775
|
+
'settings.workspaceGroup': "工作區分組",
|
|
2776
|
+
'settings.workspaceGroup.hint': "磁碟目錄 = 只按官方資料夾(磁碟目錄)巢狀;磁碟 + 名稱 = 在磁碟層之上再按標題裏的 / 分組;僅名稱 = 只按標題裏的 / 分組,完全不理會磁碟目錄的巢狀關係。舊版本的開關狀態會自動遷移。",
|
|
2777
|
+
'settings.sessionLimit': "展開時顯示會話數",
|
|
2778
|
+
'settings.sessionLimit.all': "全部",
|
|
2779
|
+
'settings.sessionLimit.hint': "展開工作區時先只顯示最近的部分會話,其餘收進「展開 {n} 個會話」一行,點擊展開該組全部;置頂、進行中和等待你的會話始終顯示。全部 = 不限量(預設)。",
|
|
2640
2780
|
'settings.sessionMenu': "會話右鍵選單",
|
|
2641
2781
|
'settings.sessionMenu.hint': "開啟時右鍵點擊會話行即可開啟操作選單(包含官方的置頂、歸檔、停止並歸檔等);關閉後改為在行尾懸停顯示官方樣式的 ⋯ 按鈕,點擊開啟同一個選單。預設開啟。",
|
|
2642
2782
|
'settings.rowActions': "會話行懸停按鈕",
|
|
@@ -2737,6 +2877,10 @@ window.__ModuleLoader__.load({
|
|
|
2737
2877
|
'viewOptions.manualOrder': '手動排序',
|
|
2738
2878
|
'viewOptions.updatedOrder': '最近更新',
|
|
2739
2879
|
'viewOptions.sessionSlash': '工作階段按「/」分組',
|
|
2880
|
+
'viewOptions.wsGroupBy': "工作區分組",
|
|
2881
|
+
'viewOptions.wsByDisk': "磁碟資料夾",
|
|
2882
|
+
'viewOptions.wsByDiskSlash': "磁碟 + 名稱",
|
|
2883
|
+
'viewOptions.wsBySlash': "僅名稱",
|
|
2740
2884
|
'group.ungrouped': '未分組',
|
|
2741
2885
|
'sessions.expand': '展開 {n} 個工作階段',
|
|
2742
2886
|
'sessions.collapse': '收合',
|
|
@@ -2767,10 +2911,13 @@ window.__ModuleLoader__.load({
|
|
|
2767
2911
|
'settings.collapse': '收合',
|
|
2768
2912
|
'settings.compactChains': '單鏈群組合併顯示',
|
|
2769
2913
|
'settings.compactChains.hint': '單層鏈會合併成一行,出現多個子層級時自動展開為樹狀;拖曳工作區期間單鏈會暫時展開回資料夾樹,可放入任一層級;展開狀態與自訂外觀會保存在本瀏覽器。',
|
|
2770
|
-
'settings.workspaceSlash': '工作區按「/」分組',
|
|
2771
|
-
'settings.workspaceSlash.hint': '關閉時工作區只按官方資料夾(磁碟目錄)巢狀,標題原樣顯示;開啟後標題裡的 / 重新成為群組層級(群組名/名字)。預設關閉;只影響工作區,工作階段分組另有獨立開關。',
|
|
2772
2914
|
'settings.statusPulse': '狀態呼吸燈',
|
|
2773
2915
|
'settings.statusPulse.hint': '被收合藏起的狀態燈(完成綠 / 執行藍 / 待互動琥珀)會沿著層級向外冒出:工作區與群組列以圖示呼吸發光(顏色隨狀態,自訂過發光的標題一起呼吸),工作階段群組列則顯示呼吸狀態燈;預設開啟,可在此關閉。',
|
|
2916
|
+
'settings.workspaceGroup': "工作區分組",
|
|
2917
|
+
'settings.workspaceGroup.hint': "磁碟資料夾 = 只按官方資料夾(磁碟目錄)巢狀;磁碟 + 名稱 = 在磁碟層之上再按標題裏的 / 分組;僅名稱 = 只按標題裏的 / 分組,完全不理會磁碟目錄的巢狀關係。舊版本的開關狀態會自動遷移。",
|
|
2918
|
+
'settings.sessionLimit': "展開時顯示會話數",
|
|
2919
|
+
'settings.sessionLimit.all': "全部",
|
|
2920
|
+
'settings.sessionLimit.hint': "展開工作區時先只顯示最近的部分會話,其餘收進「展開 {n} 個會話」一行,點擊展開該組全部;釘選、進行中和等待你的會話始終顯示。全部 = 不限量(預設)。",
|
|
2774
2921
|
'settings.sessionMenu': "會話右鍵選單",
|
|
2775
2922
|
'settings.sessionMenu.hint': "開啟時右鍵點擊會話列即可開啟動作選單(包含官方的釘選、封存、停止並封存等);關閉後改為在列尾懸停顯示官方樣式的 ⋯ 按鈕,點擊開啟同一個選單。預設開啟。",
|
|
2776
2923
|
'settings.rowActions': "會話列懸停按鈕",
|
|
@@ -3291,9 +3438,15 @@ window.__ModuleLoader__.load({
|
|
|
3291
3438
|
return out
|
|
3292
3439
|
}
|
|
3293
3440
|
|
|
3294
|
-
function buildTree(items,
|
|
3441
|
+
function buildTree(items, groupMode, explicitWs) {
|
|
3295
3442
|
const list = items || []
|
|
3296
|
-
|
|
3443
|
+
// Issue #7: 'disk' nests by disk only, 'disk-slash' adds the name
|
|
3444
|
+
// layer on top (the historical workspaceSlash-on shape), 'slash' runs
|
|
3445
|
+
// the name layer WITHOUT any disk nesting — an empty parent map puts
|
|
3446
|
+
// every workspace at the root level where "/" segments group them.
|
|
3447
|
+
const slashOn = groupMode !== 'disk'
|
|
3448
|
+
const diskOn = groupMode !== 'slash'
|
|
3449
|
+
const diskParentOf = diskOn ? diskParentMapOf(list) : new Map()
|
|
3297
3450
|
const childrenOf = new Map()
|
|
3298
3451
|
for (const w of list) {
|
|
3299
3452
|
const parent = diskParentOf.get(w.workspaceId)
|
|
@@ -3333,7 +3486,7 @@ window.__ModuleLoader__.load({
|
|
|
3333
3486
|
// Declared empty groups land BEFORE the members: a declared path that
|
|
3334
3487
|
// also carries members is the same node either way (ensure is
|
|
3335
3488
|
// idempotent), and declaring first means an empty one still renders.
|
|
3336
|
-
if (
|
|
3489
|
+
if (slashOn) {
|
|
3337
3490
|
for (const segs of explicitSegsOf(explicitWs, idPrefix)) ensure(segs)
|
|
3338
3491
|
}
|
|
3339
3492
|
for (const workspace of wsList) {
|
|
@@ -3353,10 +3506,10 @@ window.__ModuleLoader__.load({
|
|
|
3353
3506
|
subPrefix,
|
|
3354
3507
|
sub: subList ? buildLevel(subList, subPrefix) : null,
|
|
3355
3508
|
}
|
|
3356
|
-
//
|
|
3357
|
-
//
|
|
3358
|
-
//
|
|
3359
|
-
if (
|
|
3509
|
+
// Name layer OFF ('disk' mode): skip it — workspaces mount
|
|
3510
|
+
// straight at their disk level; the DISK layer is a filesystem
|
|
3511
|
+
// fact and stays.
|
|
3512
|
+
if (!slashOn) {
|
|
3360
3513
|
entry.leaf = String(workspace.title || '') || leaf
|
|
3361
3514
|
entry.folderPath = ''
|
|
3362
3515
|
root.workspaces.push(entry)
|
|
@@ -3520,6 +3673,8 @@ window.__ModuleLoader__.load({
|
|
|
3520
3673
|
'.bw-row:hover .bw-row-time,.bw-row:hover .bw-row-count,.bw-row:hover .bw-schedule-badge{display:none}',
|
|
3521
3674
|
'.bw-row-archived{opacity:.55}',
|
|
3522
3675
|
'.bw-pin-indicator{flex:none;display:inline-flex;align-items:center;color:var(--dsw-alias-brand-primary,#5b8def);margin:0 4px}',
|
|
3676
|
+
'.bw-overflow-row{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--dsw-alias-label-tertiary,#9a9a9a);font-size:12px;cursor:pointer;padding:4px 6px;font-family:inherit}',
|
|
3677
|
+
'.bw-overflow-row:hover{color:var(--dsw-alias-label-secondary,#b8b8b8)}',
|
|
3523
3678
|
'.bw-dot{flex:none;width:6px;height:6px;border-radius:50%;background:transparent}',
|
|
3524
3679
|
'.bw-session-row{font-size:12.5px;color:var(--dsw-alias-label-secondary,#b8b8b8);min-height:26px}',
|
|
3525
3680
|
'.bw-sgroup-row{font-size:12.5px;color:var(--dsw-alias-label-tertiary,#9a9a9a);min-height:24px}',
|
|
@@ -3632,6 +3787,34 @@ window.__ModuleLoader__.load({
|
|
|
3632
3787
|
*/
|
|
3633
3788
|
const workspaceSlashOf = (value) => value === undefined ? true : value === true
|
|
3634
3789
|
|
|
3790
|
+
// Issue #7 grouping strategy: 'disk' (official nesting only, default),
|
|
3791
|
+
// 'disk-slash' (nesting + "/" name groups — the old workspaceSlash-on),
|
|
3792
|
+
// 'slash' (name groups ONLY; disk nesting off). Reads migrate in place:
|
|
3793
|
+
// a persisted mode wins; otherwise the pre-0.21 workspaceTitleSlash
|
|
3794
|
+
// boolean decides, keeping the v0.15 upgrade semantics (an old snapshot
|
|
3795
|
+
// without the key stays grouped — workspaceSlashOf treats undefined ON).
|
|
3796
|
+
const workspaceGroupModeOf = (mode, legacySlash) => {
|
|
3797
|
+
if (mode === 'disk' || mode === 'disk-slash' || mode === 'slash') return mode
|
|
3798
|
+
return workspaceSlashOf(legacySlash) ? 'disk-slash' : 'disk'
|
|
3799
|
+
}
|
|
3800
|
+
|
|
3801
|
+
// Issue #8 progressive listing (official collapsedSessionRows mirror):
|
|
3802
|
+
// blank, running, running-subagent and pinned rows stay OUTSIDE the
|
|
3803
|
+
// quota; idle rows beyond it hide behind one overflow row. limit 0 =
|
|
3804
|
+
// unlimited (default — the plugin's folder-style full listing), and a
|
|
3805
|
+
// lifted workspace renders everything again.
|
|
3806
|
+
const limitSessionsForRender = (rows, limit, lifted) => {
|
|
3807
|
+
if (!rows || !limit || lifted) return { rows: rows || [], hidden: 0 }
|
|
3808
|
+
const keep = []
|
|
3809
|
+
const idle = []
|
|
3810
|
+
for (const row of rows) {
|
|
3811
|
+
if (row.blank || row.running || row.subagents > 0 || row.pinned) keep.push(row)
|
|
3812
|
+
else idle.push(row)
|
|
3813
|
+
}
|
|
3814
|
+
if (idle.length <= limit) return { rows, hidden: 0 }
|
|
3815
|
+
return { rows: [...keep, ...idle.slice(0, limit)], hidden: idle.length - limit }
|
|
3816
|
+
}
|
|
3817
|
+
|
|
3635
3818
|
/**
|
|
3636
3819
|
* Normalize a declared group path: split on "/", drop blank segments (so
|
|
3637
3820
|
* " " and "a//b" cannot create nameless levels), trim each name. Returns
|
|
@@ -3641,7 +3824,7 @@ window.__ModuleLoader__.load({
|
|
|
3641
3824
|
.split('/').map((s) => s.trim()).filter((s) => s !== '').join('/')
|
|
3642
3825
|
|
|
3643
3826
|
const createViewStore = () => storeKit.defineStore({
|
|
3644
|
-
init: () => ({ expanded: {}, sessionsExpanded: {}, sessionGroups: {}, sessionOrder: {}, prefs: { compactChains: true }, styling: {}, groupBy: 'workspace-tree', orderBy: 'manual', archivedFilter: 'default', sessionTitleSlash: true, workspaceTitleSlash: false, folders: { ws: {}, sess: {} } }),
|
|
3827
|
+
init: () => ({ expanded: {}, sessionsExpanded: {}, sessionGroups: {}, sessionOrder: {}, prefs: { compactChains: true, sessionLimit: 0 }, styling: {}, groupBy: 'workspace-tree', orderBy: 'manual', archivedFilter: 'default', workspaceGroupMode: 'disk', sessionTitleSlash: true, workspaceTitleSlash: false, ungroupedOpen: true, folders: { ws: {}, sess: {} } }),
|
|
3645
3828
|
// NOTE: hydration REPLACES the state with the persisted whole value —
|
|
3646
3829
|
// init defaults never merge. Every action must tolerate a missing key
|
|
3647
3830
|
// (states persisted by older plugin versions lack sessionGroups), and
|
|
@@ -3693,6 +3876,14 @@ window.__ModuleLoader__.load({
|
|
|
3693
3876
|
setArchivedFilter: (d, value) => { d.archivedFilter = value === 'show' || value === 'only' ? value : 'default' },
|
|
3694
3877
|
setSessionTitleSlash: (d, value) => { d.sessionTitleSlash = value !== false },
|
|
3695
3878
|
setWorkspaceTitleSlash: (d, value) => { d.workspaceTitleSlash = value !== false },
|
|
3879
|
+
// v0.21.0 tri-state grouping (issue #7). The legacy boolean rides
|
|
3880
|
+
// along so a plugin downgrade keeps a sane tree.
|
|
3881
|
+
setWorkspaceGroupMode: (d, value) => {
|
|
3882
|
+
d.workspaceGroupMode = value === 'slash' || value === 'disk-slash' ? value : 'disk'
|
|
3883
|
+
d.workspaceTitleSlash = d.workspaceGroupMode !== 'disk'
|
|
3884
|
+
},
|
|
3885
|
+
// v0.21.0 collapsible Ungrouped block (issue #6).
|
|
3886
|
+
setUngroupedOpen: (d, value) => { d.ungroupedOpen = value },
|
|
3696
3887
|
// Explicit (possibly EMPTY) groups, v0.17.0. A group has always been a
|
|
3697
3888
|
// projection of "/" in member titles, so a group with no members simply
|
|
3698
3889
|
// did not exist and "create a group" had nothing to write. These two
|
|
@@ -4593,7 +4784,7 @@ window.__ModuleLoader__.load({
|
|
|
4593
4784
|
* name layer). The primitives Menu is feature-probed like every
|
|
4594
4785
|
* component — without it the button simply never renders.
|
|
4595
4786
|
*/
|
|
4596
|
-
function ViewOptionsMenu({ groupBy, orderBy, sessionSlash, archivedFilter, onPick, onToggle, onFilterPick, ot, t }) {
|
|
4787
|
+
function ViewOptionsMenu({ groupBy, orderBy, sessionSlash, archivedFilter, workspaceGroupMode, onPick, onToggle, onFilterPick, onWsGroupPick, ot, t }) {
|
|
4597
4788
|
const [open, setOpen] = React.useState(false)
|
|
4598
4789
|
if (typeof ui.Menu !== 'function') return null
|
|
4599
4790
|
// Archived filter (dsh 0.1.7 official ViewOptionsMenu mirror): the
|
|
@@ -4632,21 +4823,32 @@ window.__ModuleLoader__.load({
|
|
|
4632
4823
|
{ id: 'show-archived', label: showLabel, icon: icon('IconArchiveOutline20', 16) },
|
|
4633
4824
|
{ id: 'only-archived', label: onlyLabel, icon: icon('IconArchiveCheckOutlineRegular', 16) },
|
|
4634
4825
|
] : []),
|
|
4826
|
+
{ type: 'separator', id: 'bw-wsgroup-sep' },
|
|
4827
|
+
// Issue #7 grouping strategy (v0.21.0): the same tri-state the
|
|
4828
|
+
// settings card drives; both faces read and write the one store
|
|
4829
|
+
// key. Meaningless without the tree, so flat mode disables it.
|
|
4830
|
+
{ type: 'label', id: 'bw-ws-group-by', text: t('viewOptions.wsGroupBy') },
|
|
4831
|
+
{ id: 'ws-disk', label: t('viewOptions.wsByDisk'), disabled: groupBy === 'flat' },
|
|
4832
|
+
{ id: 'ws-disk-slash', label: t('viewOptions.wsByDiskSlash'), disabled: groupBy === 'flat' },
|
|
4833
|
+
{ id: 'ws-slash', label: t('viewOptions.wsBySlash'), disabled: groupBy === 'flat' },
|
|
4635
4834
|
{ type: 'separator', id: 'bw-slash-sep' },
|
|
4636
|
-
//
|
|
4637
|
-
//
|
|
4638
|
-
// flat?" has a findable answer. Session grouping stays here.
|
|
4835
|
+
// Session grouping keeps its v0.13 toggle here; the workspace name
|
|
4836
|
+
// layer gained the strategy section above in v0.21.0.
|
|
4639
4837
|
{ id: 'session-slash', label: t('viewOptions.sessionSlash'), disabled: groupBy === 'flat' },
|
|
4640
4838
|
],
|
|
4641
4839
|
selectedIds: [groupBy, orderBy]
|
|
4642
4840
|
.concat(sessionSlash ? ['session-slash'] : [])
|
|
4643
4841
|
.concat(filter === 'show' ? ['show-archived'] : [])
|
|
4644
|
-
.concat(filter === 'only' ? ['only-archived'] : [])
|
|
4842
|
+
.concat(filter === 'only' ? ['only-archived'] : [])
|
|
4843
|
+
.concat(workspaceGroupMode === 'disk' ? ['ws-disk'] : [])
|
|
4844
|
+
.concat(workspaceGroupMode === 'disk-slash' ? ['ws-disk-slash'] : [])
|
|
4845
|
+
.concat(workspaceGroupMode === 'slash' ? ['ws-slash'] : []),
|
|
4645
4846
|
onSelect: (id) => {
|
|
4646
4847
|
if (id === 'workspace' || id === 'workspace-tree' || id === 'flat') { onPick('groupBy', id); setOpen(false); return }
|
|
4647
4848
|
if (id === 'manual' || id === 'updated') { onPick('orderBy', id); setOpen(false); return }
|
|
4648
4849
|
if (id === 'show-archived') { onFilterPick(filter === 'show' ? 'default' : 'show'); setOpen(false); return }
|
|
4649
4850
|
if (id === 'only-archived') { onFilterPick(filter === 'only' ? 'default' : 'only'); setOpen(false); return }
|
|
4851
|
+
if (id === 'ws-disk' || id === 'ws-disk-slash' || id === 'ws-slash') { onWsGroupPick(id.slice(3)); setOpen(false); return }
|
|
4650
4852
|
if (id === 'session-slash') { onToggle('sessionTitleSlash', !sessionSlash); return }
|
|
4651
4853
|
},
|
|
4652
4854
|
align: 'end',
|
|
@@ -4975,7 +5177,10 @@ window.__ModuleLoader__.load({
|
|
|
4975
5177
|
E('div', { className: 'bw-modal-body' },
|
|
4976
5178
|
E(AppearanceControls, {
|
|
4977
5179
|
value: draft,
|
|
4978
|
-
|
|
5180
|
+
// patch.icon must WIN: the trailing fallback only fills the
|
|
5181
|
+
// field readAppearance drops, never overrides a fresh pick
|
|
5182
|
+
// (issue #9: the old spelling made the icon grid a no-op).
|
|
5183
|
+
onChange: (patch) => setDraft((prev) => ({ ...readAppearance(prev), ...patch, icon: patch.icon || prev.icon || 'solid' })),
|
|
4979
5184
|
allowIcon,
|
|
4980
5185
|
t,
|
|
4981
5186
|
}),
|
|
@@ -4997,11 +5202,16 @@ window.__ModuleLoader__.load({
|
|
|
4997
5202
|
const statusPulse = prefs.statusPulse !== false
|
|
4998
5203
|
const sessionMenu = prefs.sessionMenu !== false
|
|
4999
5204
|
const rowActions = prefs.rowActions !== false
|
|
5000
|
-
//
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
//
|
|
5004
|
-
|
|
5205
|
+
// Progressive listing quota (v0.21.0, issue #8): 0 = unlimited.
|
|
5206
|
+
const rawLimit = Math.floor(Number(prefs.sessionLimit))
|
|
5207
|
+
const sessionLimit = Number.isFinite(rawLimit) && rawLimit > 0 ? Math.min(rawLimit, 500) : 0
|
|
5208
|
+
// Grouping strategy (v0.21.0, issue #7): rides the view store top-level
|
|
5209
|
+
// key next to groupBy/orderBy and stays browser-local, like every other
|
|
5210
|
+
// view option. The legacy workspaceTitleSlash boolean is consulted only
|
|
5211
|
+
// when no mode was ever persisted.
|
|
5212
|
+
const workspaceGroupMode = useStore
|
|
5213
|
+
? workspaceGroupModeOf(useStore(s => s.workspaceGroupMode), useStore(s => s.workspaceTitleSlash))
|
|
5214
|
+
: 'disk'
|
|
5005
5215
|
// Default appearance: the base every row inherits unless it carries its
|
|
5006
5216
|
// own per-row entry. The outline ships ON — text over a background image
|
|
5007
5217
|
// is often unreadable without it.
|
|
@@ -5058,17 +5268,26 @@ window.__ModuleLoader__.load({
|
|
|
5058
5268
|
),
|
|
5059
5269
|
E('div', { className: 'bw-hint' }, t('settings.compactChains.hint')),
|
|
5060
5270
|
E('div', { className: 'bw-setting-row', style: { marginTop: 10 } },
|
|
5061
|
-
E('div', { className: 'bw-setting-label' }, t('settings.
|
|
5062
|
-
E('
|
|
5063
|
-
|
|
5064
|
-
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
|
|
5271
|
+
E('div', { className: 'bw-setting-label' }, t('settings.workspaceGroup')),
|
|
5272
|
+
E('div', { className: 'bw-seg' },
|
|
5273
|
+
E('button', {
|
|
5274
|
+
type: 'button',
|
|
5275
|
+
className: cls('bw-seg-btn', workspaceGroupMode === 'disk' && 'bw-seg-btn-active'),
|
|
5276
|
+
onClick: () => { if (actions && typeof actions.setWorkspaceGroupMode === 'function') actions.setWorkspaceGroupMode('disk') },
|
|
5277
|
+
}, t('viewOptions.wsByDisk')),
|
|
5278
|
+
E('button', {
|
|
5279
|
+
type: 'button',
|
|
5280
|
+
className: cls('bw-seg-btn', workspaceGroupMode === 'disk-slash' && 'bw-seg-btn-active'),
|
|
5281
|
+
onClick: () => { if (actions && typeof actions.setWorkspaceGroupMode === 'function') actions.setWorkspaceGroupMode('disk-slash') },
|
|
5282
|
+
}, t('viewOptions.wsByDiskSlash')),
|
|
5283
|
+
E('button', {
|
|
5284
|
+
type: 'button',
|
|
5285
|
+
className: cls('bw-seg-btn', workspaceGroupMode === 'slash' && 'bw-seg-btn-active'),
|
|
5286
|
+
onClick: () => { if (actions && typeof actions.setWorkspaceGroupMode === 'function') actions.setWorkspaceGroupMode('slash') },
|
|
5287
|
+
}, t('viewOptions.wsBySlash')),
|
|
5288
|
+
),
|
|
5070
5289
|
),
|
|
5071
|
-
E('div', { className: 'bw-hint' }, t('settings.
|
|
5290
|
+
E('div', { className: 'bw-hint' }, t('settings.workspaceGroup.hint')),
|
|
5072
5291
|
E('div', { className: 'bw-setting-row', style: { marginTop: 10 } },
|
|
5073
5292
|
E('div', { className: 'bw-setting-label' }, t('settings.statusPulse')),
|
|
5074
5293
|
E('button', {
|
|
@@ -5105,6 +5324,19 @@ window.__ModuleLoader__.load({
|
|
|
5105
5324
|
}, E('span', { className: 'bw-switch-thumb' })),
|
|
5106
5325
|
),
|
|
5107
5326
|
E('div', { className: 'bw-hint' }, t('settings.rowActions.hint')),
|
|
5327
|
+
E('div', { className: 'bw-setting-row', style: { marginTop: 10 } },
|
|
5328
|
+
E('div', { className: 'bw-setting-label' }, t('settings.sessionLimit')),
|
|
5329
|
+
E('div', { className: 'bw-seg' },
|
|
5330
|
+
[[0, t('settings.sessionLimit.all')], [5, '5'], [10, '10'], [25, '25']].map(([value, label]) =>
|
|
5331
|
+
E('button', {
|
|
5332
|
+
type: 'button',
|
|
5333
|
+
key: String(value),
|
|
5334
|
+
className: cls('bw-seg-btn', sessionLimit === value && 'bw-seg-btn-active'),
|
|
5335
|
+
onClick: () => { setPref('sessionLimit', value) },
|
|
5336
|
+
}, label)),
|
|
5337
|
+
),
|
|
5338
|
+
),
|
|
5339
|
+
E('div', { className: 'bw-hint' }, t('settings.sessionLimit.hint')),
|
|
5108
5340
|
E('div', { className: 'bw-setting-label', style: { marginTop: 16 } }, t('settings.appearance')),
|
|
5109
5341
|
E('div', { className: 'bw-hint' }, t('settings.appearance.hint')),
|
|
5110
5342
|
E('div', { className: 'bw-appearance-box' },
|
|
@@ -5238,7 +5470,17 @@ window.__ModuleLoader__.load({
|
|
|
5238
5470
|
const groupBy = useStore ? (useStore(s => s.groupBy) || 'workspace-tree') : 'workspace-tree'
|
|
5239
5471
|
const orderBy = useStore ? (useStore(s => s.orderBy) || 'manual') : 'manual'
|
|
5240
5472
|
const sessionSlash = useStore ? (useStore(s => s.sessionTitleSlash) !== false) : true
|
|
5241
|
-
|
|
5473
|
+
// Grouping strategy (v0.21.0, issue #7) plus its name-layer shorthand:
|
|
5474
|
+
// every pre-0.21 workspaceSlash gate keeps working unchanged.
|
|
5475
|
+
const workspaceGroupMode = useStore
|
|
5476
|
+
? workspaceGroupModeOf(useStore(s => s.workspaceGroupMode), useStore(s => s.workspaceTitleSlash))
|
|
5477
|
+
: 'disk'
|
|
5478
|
+
const workspaceSlash = workspaceGroupMode !== 'disk'
|
|
5479
|
+
// Collapsible Ungrouped block (v0.21.0, issue #6); default open.
|
|
5480
|
+
const ungroupedOpen = useStore ? (useStore(s => s.ungroupedOpen) !== false) : true
|
|
5481
|
+
// Progressive listing (v0.21.0, issue #8): 0 means unlimited (default).
|
|
5482
|
+
const rawLimit = Math.floor(Number(prefsMap.sessionLimit))
|
|
5483
|
+
const sessionLimit = Number.isFinite(rawLimit) && rawLimit > 0 ? Math.min(rawLimit, 500) : 0
|
|
5242
5484
|
// Dual-write wrappers: every preference mutation lands in the local
|
|
5243
5485
|
// store (immediate echo + scope-less fallback) AND the host settings
|
|
5244
5486
|
// store (durable cross-device copy for the manual pull on the other
|
|
@@ -5339,6 +5581,10 @@ window.__ModuleLoader__.load({
|
|
|
5339
5581
|
// gates the add affordance: an uncomposed host has no way to pick at all.
|
|
5340
5582
|
const flowAvailable = typeof useDirectoryFlow === 'function' ? useDirectoryFlow(occupied => occupied) : false
|
|
5341
5583
|
const [dialog, setDialog] = React.useState(null) // { kind, ... }
|
|
5584
|
+
// Issue #8: workspaces whose overflow row was clicked this mount.
|
|
5585
|
+
// Component-local on purpose (official sessionLimits precedent): a
|
|
5586
|
+
// lifted fold resets when the sidebar unmounts.
|
|
5587
|
+
const [limitLifted, setLimitLifted] = React.useState({})
|
|
5342
5588
|
const [ctx, setCtx] = React.useState(null) // context menu { kind, payload, x, y }
|
|
5343
5589
|
const [customize, setCustomize] = React.useState(null) // { kind, entryKey, name }
|
|
5344
5590
|
const [errorText, setErrorText] = React.useState(null)
|
|
@@ -5511,17 +5757,17 @@ window.__ModuleLoader__.load({
|
|
|
5511
5757
|
// their drop targets live inside workspace rows, which compression merges.
|
|
5512
5758
|
const draggingWorkspace = drag !== null && drag.kind === 'workspace'
|
|
5513
5759
|
const tree = React.useMemo(() => {
|
|
5514
|
-
const built = buildTree(items,
|
|
5760
|
+
const built = buildTree(items, workspaceGroupMode, wsFolders)
|
|
5515
5761
|
if (!compactChains || draggingWorkspace) return built
|
|
5516
5762
|
return { ...built, folders: built.folders.map((f) => materializeChain(compressTree(f))), workspaces: built.workspaces }
|
|
5517
|
-
}, [items, compactChains, draggingWorkspace,
|
|
5763
|
+
}, [items, compactChains, draggingWorkspace, workspaceGroupMode, wsFolders])
|
|
5518
5764
|
// UNCOMPRESSED tree, for the new-group dialog only. compressTree merges a
|
|
5519
5765
|
// single-child chain into one row that stands for BOTH a group and the
|
|
5520
5766
|
// workspace under it — fine for drawing, useless for choosing a
|
|
5521
5767
|
// container: one half must stay unselectable and the other must be
|
|
5522
5768
|
// selectable, and a merged row cannot be both. (It also carried no
|
|
5523
5769
|
// `name`, which is how a lone "E" rendered blank.)
|
|
5524
|
-
const rawTree = React.useMemo(() => buildTree(items,
|
|
5770
|
+
const rawTree = React.useMemo(() => buildTree(items, workspaceGroupMode, wsFolders), [items, workspaceGroupMode, wsFolders])
|
|
5525
5771
|
// Disk-layer ancestry for drag semantics (same derivation as buildTree).
|
|
5526
5772
|
const diskParentMap = React.useMemo(() => diskParentMapOf(items), [items])
|
|
5527
5773
|
|
|
@@ -6414,9 +6660,23 @@ window.__ModuleLoader__.load({
|
|
|
6414
6660
|
// Folder semantics: a closed workspace shows no sessions at all (the
|
|
6415
6661
|
// row keeps its count badge); an open one shows the full session tree.
|
|
6416
6662
|
if (!searching && !sessionsOpenOf(workspace.workspaceId)) return []
|
|
6417
|
-
const
|
|
6418
|
-
if (
|
|
6419
|
-
|
|
6663
|
+
const full = sessionsOf(workspace)
|
|
6664
|
+
if (full.length === 0 && !hasDeclared(sessFolders, workspace.workspaceId)) return []
|
|
6665
|
+
// Issue #8 progressive listing: quota the IDLE rows of this folder
|
|
6666
|
+
// (blank/running/subagent/pinned stay visible); one overflow row
|
|
6667
|
+
// hides the rest until clicked. Search always shows everything.
|
|
6668
|
+
const limited = limitSessionsForRender(full, sessionLimit, limitLifted[workspace.workspaceId])
|
|
6669
|
+
const out = renderSessionNode(buildSessionTree(limited.rows, sessionSlash, sessFolders, workspace.workspaceId), workspace.workspaceId, depth)
|
|
6670
|
+
if (limited.hidden > 0) {
|
|
6671
|
+
out.push(E('button', {
|
|
6672
|
+
key: 'lim-' + workspace.workspaceId,
|
|
6673
|
+
type: 'button',
|
|
6674
|
+
className: 'bw-row bw-overflow-row',
|
|
6675
|
+
style: { paddingLeft: 8 + (depth + 1) * 12 },
|
|
6676
|
+
onClick: () => setLimitLifted((current) => ({ ...current, [workspace.workspaceId]: true })),
|
|
6677
|
+
}, t('sessions.expand', { n: limited.hidden })))
|
|
6678
|
+
}
|
|
6679
|
+
return out
|
|
6420
6680
|
}
|
|
6421
6681
|
const searchSessionNode = (node) => {
|
|
6422
6682
|
const groups = []
|
|
@@ -6553,8 +6813,22 @@ window.__ModuleLoader__.load({
|
|
|
6553
6813
|
const renderUngroupedBlock = () => {
|
|
6554
6814
|
const rows = []
|
|
6555
6815
|
if (ungrouped.length > 0) {
|
|
6556
|
-
|
|
6557
|
-
|
|
6816
|
+
// Issue #6: the Ungrouped bucket folds like every other group row
|
|
6817
|
+
// (chevron + live count); search keeps it expanded.
|
|
6818
|
+
const open = searching || ungroupedOpen
|
|
6819
|
+
rows.push(E('div', {
|
|
6820
|
+
key: 'ungrouped-label',
|
|
6821
|
+
className: 'bw-row bw-sgroup-row',
|
|
6822
|
+
style: { paddingLeft: 8 },
|
|
6823
|
+
onClick: () => { if (!searching && actions && typeof actions.setUngroupedOpen === 'function') actions.setUngroupedOpen(!open) },
|
|
6824
|
+
role: 'treeitem',
|
|
6825
|
+
'aria-expanded': open,
|
|
6826
|
+
},
|
|
6827
|
+
E('span', { className: cls('bw-chevron', open && 'bw-chevron-open') }, icon('IconTriangleRightFill14', 14)),
|
|
6828
|
+
E('span', { className: 'bw-row-label' }, t('group.ungrouped')),
|
|
6829
|
+
E('span', { className: 'bw-row-count' }, String(ungrouped.length)),
|
|
6830
|
+
))
|
|
6831
|
+
if (open) for (const s of ungrouped) rows.push(renderSessionRow(s, 0))
|
|
6558
6832
|
}
|
|
6559
6833
|
return rows
|
|
6560
6834
|
}
|
|
@@ -6967,8 +7241,10 @@ window.__ModuleLoader__.load({
|
|
|
6967
7241
|
orderBy,
|
|
6968
7242
|
sessionSlash,
|
|
6969
7243
|
archivedFilter,
|
|
7244
|
+
workspaceGroupMode,
|
|
6970
7245
|
onPick: (kind, value) => { if (kind === 'groupBy') actions.setGroupBy(value); else actions.setOrderBy(value) },
|
|
6971
7246
|
onFilterPick: (value) => { if (actions && typeof actions.setArchivedFilter === 'function') actions.setArchivedFilter(value) },
|
|
7247
|
+
onWsGroupPick: (value) => { if (actions && typeof actions.setWorkspaceGroupMode === 'function') actions.setWorkspaceGroupMode(value) },
|
|
6972
7248
|
ot: officialT,
|
|
6973
7249
|
onToggle: (key, value) => { if (key === 'sessionTitleSlash') actions.setSessionTitleSlash(value) },
|
|
6974
7250
|
t,
|