26 releases
0.3.2 | Jan 16, 2024 |
---|---|
0.2.10 | Nov 16, 2023 |
0.2.9 | May 3, 2023 |
0.2.6 | Jan 23, 2023 |
0.1.3 | Nov 6, 2022 |
#279 in Unix APIs
Used in vmux
175KB
585 lines
dissociate (verb):
1. (especially in abstract contexts) disconnect or separate. |
What is diss ?
Diss:
- dissociates a program from current terminal
- is like dtach, abduco (think GNU screen or tmux without multiplexing)
- is also a rust crate you can easily integrate
How do I use diss CLI ?
installing
- install cargo
- run
cargo install diss
create session (or reatach if already exists), detach with CTRL+g
diss -e g -a session-name vim hello
attach to running session
diss -e g -a session-name
list running sessions
diss -l
projects based on diss
- vmux, a vim terminal multiplexer
How does diss work ?
When you start a diss new diss session, diss will launch a server, which will:
- create and bind to a unix domain socket (located in
~/.config/diss
) - daemonize the process (so it is not a child of current terminal)
- fork with ptmx / ptms:
- in the child, launch the program you want to use with a pseudo terminal
- start a program event thread waiting for events from the child
- in the parent, will start waiting for connection from client
Diss will then start a client which will:
- connect to the server unix domain socket
- send terminal size to the server
- send a flush request to the server
- in a thread, take events from the terminal and forward them via the socket
- read server output as raw bytes and print them in the terminal
When a client connect, the server will:
- add the client unix stream to the program event thread
- create a new thread to receive events from the client and forward them to the child
Dependencies
~6–16MB
~169K SLoC