26个版本

0.3.2 2024年1月16日
0.2.10 2023年11月16日
0.2.9 2023年5月3日
0.2.6 2023年1月23日
0.1.3 2022年11月6日

#267 in Unix API


用于 vmux

MIT 许可证

175KB
585

dissociate (动词)
1. (especially in abstract contexts) disconnect or separate.

Discord

什么是diss ?

Diss

  • 从当前终端解除程序
  • 类似于 dtach, abduco (类似于 GNU screentmux 但没有多路复用)
  • 也是一个可以轻松集成的Rust crate

如何使用diss CLI ?

安装

  1. 安装cargo
  2. 运行 cargo install diss

创建会话(如果已存在则重新连接),使用CTRL+g分离

diss -e g -a session-name vim hello

连接到正在运行的会话

diss -e g -a session-name

列出正在运行的会话

diss -l

基于diss的项目

  • vmux,一个vim终端多路复用器

Dissonance是如何工作的?

diagram

当你启动一个新的Dissonance会话时,Dissonance将启动一个服务器,该服务器将

  1. 创建并绑定到Unix域套接字(位于~/.config/diss
  2. 使进程成为守护进程(因此它不是当前终端的子进程)
  3. 使用ptmx / ptms进行分叉
  4. 在子进程中,使用伪终端启动你想要使用的程序
  5. 启动一个程序事件线程,等待来自子进程的事件
  6. 在父进程中,将开始等待来自客户端的连接

然后Dissonance将启动一个客户端,该客户端将

  1. 连接到服务器的Unix域套接字
  2. 将终端大小发送到服务器
  3. 向服务器发送刷新请求
  4. 在一个线程中,从终端接收事件并通过套接字转发
  5. 读取服务器输出为原始字节,并在终端中打印它们

当客户端连接时,服务器将

  1. 将客户端的Unix流添加到程序的事件线程
  2. 创建一个新线程以接收来自客户端的事件并将其转发给子线程

依赖项

~5-15MB
~158K SLoC