dissociate (verb):
1. (especially in abstract contexts) disconnect or separate. |
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
- install cargo
- run
cargo install diss
diss -e g -a session-name vim hello
diss -e g -a session-name
diss -l
- vmux, a vim terminal multiplexer
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