Skip to content

Space、Project 与 Thread ​

文档编写中

部分内容可能尚不完整。

ThinkTerm 把每个终端归在三个层级之下。Space 是一个工作情境,Project 是其中的一个文件夹,Thread 则是 Project 里一套保存下来的标签与分屏排布。侧边栏一次只显示一个 Space,下面是它的 Project,再下面是各自的 Thread。

三个层级 ​

层级是什么一开始有的
Space一个工作情境。它住在这台机器上,或者住在一台 ThinkTerm Connect 服务器上,连到那台服务器的每台设备都能看到它。一个 Space 可以绑定一个笔记库,由其中的 Project 共用。Default
Project一个文件夹。添加时以文件夹名命名,在它里面新开的终端都从那里起步。Home,位于 ~
Thread一组标签和分屏,以一个名字保存下来。main

Default 可以改名,但不能删除,这样窗口总有地方可落。每个新 Space 都以同样的方式开始:一个位于 ~ 的 Home Project,里面一个 main Thread。

新 Space 依次叫 Space 2、Space 3,新 Thread 依次叫 Thread 2、Thread 3,从已有的数量往后数。同一个 Project 里的两个 Thread 不能重名:把一个 Thread 改成同一 Project 里已有的名字,会在后面加一个数字,变成 review 2。

一个窗口一个 Space ​

一个窗口显示一个 Space,一个 Space 也只由一个窗口显示。已经在另一个窗口里打开的 Space,在 Space 菜单里显示为 my-space(已被占用),在那个窗口离开它或关闭之前无法选中。

新窗口会取你上次用过的本地 Space(只要没有别的窗口占着),否则取第一个空闲的本地 Space,再不行就新建一个。它从不在一个住在服务器上的 Space 上打开 —— 那些要从 Space 菜单或远程主机里有意打开。

侧边栏 ​

侧边栏顶部是 Space 按钮:当前 Space 的名字,旁边的图标在它的服务器连接中时变成转圈,断开时变成警示标记。点它打开 Space 菜单。它下面是一个 新建会话 按钮,会在你当前所在的 Project 里加一个 Thread,旁边是通知铃铛。

再往下是 已置顶 一节(有置顶的东西时才出现),以及 工作区 标题,标题旁的 + 用来添加 Project。每个 Project 行有自己的 + 用来新建 Thread,还有一个折叠箭头可以把它的 Thread 收起来。

底部是 设置 和三个按钮:

按钮打开什么
实时总览把每个活着的 Thread 摆成卡片的 Live Overview —— 见窗口
远程主机主机簿 —— 见远程
查找线程命令面板里的 查找线程 列表

查找线程 列出所有 Space 里的所有 Thread,归在所属 Project 的名字和路径下,置顶的和最近用过的排在前面。侧边栏只显示一个 Space,也不显示已归档的 Project;这个列表两样都不限,所以它是去往任意 Thread 最快的路。已归档 Project 的 Thread 排在最后,标着 (已归档)。

Space 菜单 ​

Space 菜单:先是本机的 Space,再按服务器分组列出各自的 Space 和 New Space Here,最后是 Add Remote Host… 与 New Space
条目作用
各个本地 Space把这个窗口切到那个 Space。当前的那个带勾。
服务器名,及其下的 Space每台 ThinkTerm Connect 服务器一个标题,注明它是否 (连接中…)、(重连中…) 或 (已断开),下面列出那台服务器上的 Space
在此服务器新建空间位于某台服务器的标题下:在那台服务器上新建一个 Space
添加远程主机…打开主机编辑器,新建一台主机
新建空间新建一个本地 Space 并切过去
重命名“my-space”…原地编辑当前 Space 的名字
删除“my-space”删除当前的本地 Space —— 见删除
移除“my-space”针对服务器上的 Space:摆脱它的三种方式 —— 见删除
移除其他空间对其他任一 Space 做同样的事,只要它不是 Default、也没在别的窗口里打开

新建 ​

Space。 新建空间 创建它、把窗口切过去,并把名字打开供编辑,让你当场命名。某台服务器标题下的 在此服务器新建空间 则把 Space 建在那台服务器上:连到那台服务器的每台设备都会看到它出现。它以一个以服务器命名的 Project 和一个 main Thread 开始。

Project。 工作区 旁边的 +。在本地 Space 里它打开系统的文件夹选择器。选中一个在本 Space 里已经是 Project 的文件夹,会打开那个 Project 而不是再加一个,如果它已归档,还会把它恢复回来。在服务器上的 Space 里没有本地文件夹可选,于是会列出 ThinkTerm 知道的那台服务器上的目录 —— 它的终端所在的位置、其他 Project 的路径,以及 ~ —— 可以输入文字筛选,也可以直接输入一个路径,比如 ~/my-project 或 /srv/app。

Thread。 侧边栏顶部的 新建会话、Project 行上的 +,或 Project 菜单里的 新建会话。它的终端在 Project 的文件夹里打开。

重命名 ​

重命名项目…、重命名会话… 和 重命名“my-space”… 都在侧边栏里名字所在的位置原地编辑。回车保留新名字,Esc 放弃,点到别处也会保留。留空的名字不会改动任何东西。

给 Project 改名只改变侧边栏怎么称呼它,磁盘上的文件夹保持原名。

Project 菜单 ​

右键点 Project 行:

条目作用
重命名项目…原地编辑名字
在访达中显示在文件管理器里打开这个文件夹 —— Windows 上是 在文件资源管理器中显示,Linux 上是 在文件夹中显示
授权文件夹访问…仅限 macOS。运行那个让 ThinkTerm 获得该文件夹访问权限的选择器 —— 见配置
新建会话新建一个 Thread
折叠 / 展开会话收起或展开这个 Project 的 Thread;重启后仍然记得
归档项目把 Project 收起来 —— 见归档 Project
移除项目删除这个 Project 及其 Thread —— 见删除

Thread 菜单 ​

右键点 Thread 行。指针停在一行上时,行的右端还会出现一枚图钉和一个垃圾桶。

条目作用
连接会话 / 断开会话仅用于普通 SSH 或 Mosh 主机上的 Thread —— 见树里的 SSH 主机
置顶会话 / 取消置顶会话把 Thread 移进或移出 已置顶
重命名会话…原地编辑名字
删除会话删除这个 Thread,并结束其中运行的东西 —— 见删除
标记为未读点亮这个 Thread 的圆点,直到你下次打开它
添加到空间让这个 Thread 也出现在另一个 Space 里 —— 见Thread 引用
移动到空间把这个 Thread 移到另一个本地 Space

置顶 ​

置顶的 Thread 会离开所属 Project 的列表,进入 Space 顶部的 已置顶 一节,那里汇集了这个 Space 里所有 Project 的置顶 Thread。取消置顶后,它回到自己的 Project 下面。

置顶的 Thread 不能拖动排序。已归档 Project 的置顶会保留但不显示,Project 恢复后重新出现。在服务器上的 Space 里,置顶记在服务器上,所以每台设备都看得到。

未读与状态 ​

每个 Thread 行带着一个表示状态的标记:正在运行、需要你关注、已完成 —— 在你没看着的时候跑完了 —— 或者空闲时什么也没有。这个状态是怎么判定的,见 Agent 状态。

标记为未读 点亮一个 Thread 的圆点,提醒你回来看它。打开这个 Thread 会清掉它,同时清掉已完成标记。两者都会保存,所以重启之后还在。

侧边栏顶部的铃铛收集所有 Space 里已完成或需要关注的 Thread,每条写作 Thread — Project · Space。选中一条会切到它所在的 Space 并打开它,它也就从列表里消失。铃铛上的小圆点表示列表不为空,有新条目到来时它会闪动一下;ThinkTerm 启动时就已经在等着的条目不会闪。

Thread 引用 ​

一个 Thread 属于一个 Space 里的一个 Project,但它也可以出现在别的 Space 里。添加到空间 列出还没有显示它的本地 Space,选一个就会在那里加一条引用。ThinkTerm Connect 服务器上的 Thread 也可以这样做,一个 Space 就是这样容纳来自几台机器的工作的。

在持有它的 Space 里,引用放在一个以该 Thread 所属 Project 命名的文件夹里。指针停在文件夹标题上会显示它来自哪台机器、哪个 Space,标题上的 + 会在那个原本的 Project 里新建一个 Thread。打开引用打开的就是那个 Thread 本身,而不是副本。

它的菜单短一些,因为引用代表那个 Thread,而不是 Thread 本身:

条目作用
重命名会话…、标记为未读作用在 Thread 本身上,无论它住在哪里
从此空间移除移除这条引用,Thread 不受影响。行上的 × 作用相同。
移动到空间把这条引用移到另一个 Space
回到原空间切到这个 Thread 自己的 Space,并在那里打开它

引用上不提供置顶和删除,因为它们会改动 Thread 本身,看上去却像只动了这一行。

引用的 Thread 所在的机器离线时,引用会留着,变暗,显示最后一次见到的名字。等那台机器重新可达、且已经没有这个 Thread 时,或者它的主机从远程主机里删除时,引用才会消失。

引用只属于这台设备。它们不会发给任何服务器,所以连到同一台服务器的另一台设备、浏览器或 TUI 都看不到。

Thread 自己那一行上的 移动到空间 是另一回事:它给 Thread 换个家。Thread 离开原来的 Project,加入目标 Space 当前所在的 Project,里面正在运行的终端随之过去,不会重启。只有本地 Thread 能移动,而且只能移到一个有本地 Project 的本地 Space;服务器上的 Thread 在那台机器上运行,只能被引用。

调整顺序 ​

拖动 Project 行,可以在这个 Space 的 Project 之间移动它;引用文件夹也参与同一个顺序。拖动 Thread 可以在它自己的 Project 里移动 —— 不能拖进别的 Project。

在服务器上的 Space 里,Project 和 Thread 的顺序由服务器保存,每台设备共享。引用文件夹的位置和引用本身一样,只属于这台设备。

滑动切换 Space ​

在 macOS 上,在侧边栏上方用触控板双指横向轻扫,会切到上一个或下一个 Space,一页滑出、另一页滑入。它会跳过已在别的窗口里打开的 Space,以及服务器未连接的 Space;这些要从 Space 菜单进入。

归档 Project ​

归档是把一个 Project 收起来而不丢掉它。它的布局先被保存,终端随后关闭,它那一行离开侧边栏。它的 Thread、Thread 的布局和置顶都会保留。

Project 里没有东西在运行时,归档项目 立即生效。有东西在运行时,菜单项变成 归档项目…,展开后说明会关闭多少个运行中的面板(将关闭 3 个运行中的面板;布局会保留),并要求点 归档并关闭面板。关掉正在运行的程序,是归档里唯一无法撤回的部分。

一个 Space 至少保留一个未归档的 Project。归档最后一个会被拒绝,并提示 空间至少需要保留一个未归档的项目;请先恢复或新建一个。

服务器上的 Space 里的 Project 是在服务器上归档的:它在那里的会话会结束,每台设备都会看到它已归档。这需要服务器处于连接状态。

已归档的 Project 可以在三个地方找到:

  • 设置 › 已归档 列出所有 Space 里的已归档 Project,最新的在前,每条写作 my-space · 3 个会话 · 今天归档。取消归档 把它恢复回来。删除 会变成 确认删除,再点一次就永久删除这个 Project 及其 Thread。
  • 命令面板里的 Show Archived Workspaces 会把当前 Space 的已归档 Project 变暗显示在侧边栏底部,直到你再运行一次或关闭窗口。点这样的行没有反应。右键可以选 取消归档,或者 永久删除…,后者说明会删掉多少个 Thread,并要求点 删除项目及会话。
  • 再次把同一个文件夹添加为 Project,也会把它恢复回来。

取消归档会把 Project 放回原来的位置。原先在运行的程序不会恢复:它的 Thread 按保存的布局重新打开,在保存的目录里起新的 shell。

命令面板里的 Archive Active Workspace 会立即归档你当前所在的 Project,不会先告诉你有多少个面板在运行。

删除 ​

对象怎么做结束什么
Thread删除会话,或行上的垃圾桶其中运行的每个程序
Project移除项目它的所有 Thread,以及其中运行的一切。磁盘上的文件夹不受影响。
本地 Space删除“my-space”它的所有 Project 和 Thread,以及其中运行的一切。窗口会切到 Default;如果 Default 在别处打开着,就切到另一个空闲的 Space。
服务器上的 Space移除“my-space”取决于你的选择 —— 见下文

这些操作都不会请你确认。归档有运行中面板的 Project,以及删除已归档的 Project,是侧边栏里仅有的两个需要第二步操作的地方。如果你以后可能还想要回某个 Project,就归档它,而不是移除它。

有几种删除会被拒绝,而且不作提示:

  • 一个 Project 的最后一个 Thread —— 请改为移除这个 Project。终端运行在另一台机器上的 Project 是例外:对于普通 SSH 或 Mosh 主机,或者服务器上的 Space 里的任何 Project,删除它的最后一个 Thread 会把这个 Project 一并移除;如果它是这个 Space 唯一的 Project,会有一个 Home Project 顶上它的位置;
  • 一个 Space 里最后一个未归档的 Project;
  • Default,以及在别的窗口里打开着的 Space —— 菜单里根本不提供。

服务器上的 Space 有三种去掉的方式,值得分清:

选项会发生什么
断开连接(服务器继续运行)这台设备不再显示这个 Space。服务器保留它,其中每个会话照常运行,其他设备也照常看到它。这台设备下次连到那台服务器时,它就回来了。
在服务器上删除(所有设备)这个 Space 从服务器上删除,从每台设备上消失。它不会结束其中正在运行的程序;下一个选项才会。
删除并结束远程会话先结束这个 Space 在服务器上的每个会话,再在所有地方删除它。只在服务器连接着时提供。

对不是当前 Space 的服务器上的 Space,移除其他空间 只提供第一种,写作 断开“my-space”(服务器继续运行)。

在一个 Thread 唯一的面板里输入 exit,关掉的是它的终端,而不是这个 Thread。窗口会转到这个 Space 里你最近用过的那个 Thread,一个都不剩时则转到一个新的 Thread。

树里的 SSH 主机 ​

从远程主机里打开一台主机会添加什么,取决于它的连接方式 —— 见远程。

普通 SSH 或 Mosh 主机会成为当前 Space 里的一个 Project,以主机命名。它的 Thread 打开时先显示一个带 连接 按钮的页面,而不是立刻连接;Mosh 主机则会马上开始连接。断开会话 结束会话但保留 Thread,连接会话 开一个新的会话。ThinkTerm 识别出这台主机运行的操作系统之后,Project 上会显示它的标志。

ThinkTerm Connect 主机会得到一个自己的 Space,第一次以主机命名,里面有一个同名的 Project 和一个 main Thread。一台服务器可以容纳多个 Space;再次连接时,会落在这台设备上次用的那个上。服务器断开期间,Space 按钮下面会出现一行 重新连接。

断开连接的远程 Space ​

服务器不可达时,它上面的 Space 可以看,但不能改。那些 Space、Project 和 Thread 属于服务器,这台设备上的副本不是一份可以先改、事后再合并的缓存。重命名、新建、置顶、标记未读、调整顺序、归档和删除都会被拒绝,并弹出通知:example-host 已断开。请重新连接后再试。 设置 › 已归档 也同样拒绝,提示 该工作区在已断开的服务器上,请先重新连接。

断开连接(服务器继续运行) 在断开状态下也能用,因为它只改动这台设备。

重启之后 ​

这套结构保存在工作区数据目录里的 workspace_threads.json 中 —— 见配置。它记录了每个 Space、Project 和 Thread,以及它们的名字、顺序、置顶、未读和已完成标记,每个 Space 上次打开的是哪个 Thread,还有每个本地 Thread 的布局:标签和分屏,以及每个面板的目录、标题和字号。

能回来什么,取决于后台会话 server:

  • 开着它时,本地终端从未结束。ThinkTerm 重新接上它们,程序、回滚内容,一切都和你离开时一样。
  • 关着它时,退出就结束了它们。Thread 按保存的布局回来,每个面板在保存的目录里起一个新的 shell;程序和它们的回滚内容不会回来。窗口在启动时只重建它打开的那个 Thread,其余的在你打开时再重建。

服务器上的 Space 里的 Thread 不在这里保存布局。布局和会话都由服务器持有,重新连接时它们原样回来。

如果某个 Project 的文件夹打不开 —— 被移走、被删除,或者被系统拒绝访问 —— 它的 Thread 会显示一个页面说明情况,而不是悄悄把终端开在你的家目录里。

ThinkTerm 会在 workspace_threads.json 旁边保留几份副本:

  • 每次启动、第一次保存之前,原来的文件变成 workspace_threads.json.bak1,更早的依次后移,直到 .bak5;
  • 当一次保存会丢掉文件里相当大一部分内容时,以及每次启动时在会话 server 的第一次更新被应用之前,文件会被复制成一个带日期的名字,比如 workspace_threads.shrink-<日期>-<时间>.json,每种保留最新的十份;
  • 读不了的文件会被复制成 workspace_threads.unreadable-<时间>.json。ThinkTerm 随后在没有它的情况下启动,并且在这次会话剩下的时间里不往原文件上写任何东西,所以这次会话里做的改动不会被保存。

这些副本是用来从故障中恢复的。要把工作区搬到另一台机器,或者自己留一份,请用 设置 › 备份 —— 见配置。

相关 ​

  • 窗口 —— 侧边栏周围的其余部分,以及 Live Overview
  • Agent 状态 —— 每个 Thread 带的那个状态
  • 远程 —— SSH 主机、ThinkTerm Connect 和后台会话 server
  • 配置 —— 工作区数据存放在哪里、macOS 上的文件夹访问,以及备份
  • 键盘 —— 用于 Space、Project 和 Thread 的命令