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
175KB
585 行
dissociate (动词)1. (especially in abstract contexts) disconnect or separate. |
什么是diss ?
Diss
- 从当前终端解除程序
- 类似于 dtach, abduco (类似于 GNU screen 或 tmux 但没有多路复用)
- 也是一个可以轻松集成的Rust crate
如何使用diss CLI ?
安装
- 安装cargo
- 运行
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是如何工作的?
当你启动一个新的Dissonance会话时,Dissonance将启动一个服务器,该服务器将
- 创建并绑定到Unix域套接字(位于
~/.config/diss
) - 使进程成为守护进程(因此它不是当前终端的子进程)
- 使用ptmx / ptms进行分叉
- 在子进程中,使用伪终端启动你想要使用的程序
- 启动一个程序事件线程,等待来自子进程的事件
- 在父进程中,将开始等待来自客户端的连接
然后Dissonance将启动一个客户端,该客户端将
- 连接到服务器的Unix域套接字
- 将终端大小发送到服务器
- 向服务器发送刷新请求
- 在一个线程中,从终端接收事件并通过套接字转发
- 读取服务器输出为原始字节,并在终端中打印它们
当客户端连接时,服务器将
- 将客户端的Unix流添加到程序的事件线程
- 创建一个新线程以接收来自客户端的事件并将其转发给子线程
依赖项
~5-15MB
~158K SLoC