Sono stato un pesante utente di Screen per molto tempo, ma uso una versione che ho modificato nel 2002. Principalmente perché volevo essere in grado di far sì che l'ordine di navigazione “next/prev” delle finestre corrispondesse all'ordine in cui le nuove finestre venivano create, in modo simile a un gestore di finestre a piastrelle come i3 o Ion . Il comportamento standard di Screen è che “next” e “prev” vadano per numero di finestra, così che di solito una “nuova” finestra (afferrando il più piccolo numero disponibile) sarà situata altrove rispetto alla finestra “next” - confondendo se non si ricordano i numeri. Il mio comportamento preferito è stato implementato in Tmux come un flag al comando new-window nel 2010 , e l'opzione renumber-windows nel 2012 . La mia patch Screen, che ho cercato di rendere il più accettabile possibile, includendo aggiunte alla documentazione e così via, non ha generato alcuna discussione sulla lista Screen nel luglio 2002 (poi “screen@informatik.uni-erlangen.de”, non riesco a trovare archivi). Infatti non fu nemmeno riconosciuto, anche quando lo inviai di nuovo un anno dopo.
Dal 2002, ho “ribasato” la mia patch un paio di volte per applicarla alle nuove versioni di Screen. Tuttavia, quando sono arrivato alla versione 4.3 (2015) ho notato un cambiamento non documentato che ha rotto uno dei miei usi di Screen - cioè che ‘roba’ ora interpola le variabili di ambiente . Non avevo bisogno di quella caratteristica, e non riuscivo a capire come fare facilmente l'escape dell'argomento a ‘stuff’ (in modo da poter inviare un testo contenente il segno del dollaro), così ho continuato a usare la versione 4.0 (dal 2004).
Uso ‘stuff’ di Screen (‘send-keys’ in Tmux) in una funzione Emacs che invia il contenuto della regione corrente di Emacs a uno specifico numero di finestra. In questo modo quando scrivo codice in un linguaggio di scripting, apro un interprete, do alla finestra dell'interprete un numero speciale, e poi posso inviare linee di codice dalla mia finestra dell'editor direttamente alla finestra dell'interprete usando questo binding Emacs. E’ un po’ macchinoso, ma mi piace di più della la soluzione Emacs pura , dato che posso anche interagire con l'interprete nella sua finestra dello schermo usando la normale pressione dei tasti. È un po’ come un IDE GUI, ma non devo usare il mouse o fissare un cursore lampeggiante.
Un'altra caratteristica che ho implementato nella mia patch è la possibilità di “marcare” una finestra, e poi di riposizionare la finestra marcata per essere “successiva” a quella corrente. Per me questo è un modo molto più naturale di riordinare le finestre rispetto alla rinumerazione; è come il paradigma del copia/incolla, o il “drag-and-drop”. (Ho recentemente scoperto come fare questo anche in i3 .)
Dovrebbe essere possibile fare la stessa cosa in Tmux, per esempio dal 2015 c'è una struttura per “marcare” un pannello. O forse una soluzione più elementare potrebbe essere elaborata con script di shell statici. Ho implementato un breve script e dei keybindings per provare il metodo “marked pane”, e ha funzionato alcune volte ma poi Tmux si è bloccato con “[lost server]”. Poi ho trovato Tmux che andava in crash anche senza il mio tentativo di fare qualcosa di complicato. A quanto pare va in crash per alcuni utenti da qualche anno almeno . A volte il server va in crash, a volte inizia a usare il 100% della CPU e diventa non reattivo. Non ho mai visto Screen fare nessuna delle due cose.
In teoria, Tmux è superiore a Screen in diversi modi. Ha una scriptabilità molto migliore, il che significa che puoi fare cose come interrogare l'elenco delle finestre nella sessione corrente dalla riga di comando, cosa impossibile con Screen. Per esempio nel 2015 Screen ha aggiunto un comando per “ordinare le finestre per titolo” . Non sono sicuro di quando un tale comando specializzato sarebbe utile, ma questo e variazioni più pratiche (ad esempio ordinare le finestre per uso della CPU) potrebbero essere fatte relativamente facilmente da uno script di shell in Tmux. A me sembrerebbe difficile fare qualcosa di così creativo in Screen, almeno senza modificare il codice C.
Come altri poster hanno menzionato, Tmux ha un modello a server singolo che vedo come lo svantaggio principale, in particolare quando il server va in crash. È possibile aggirare questo problema specificando un socket separato per ogni “sessione”. Tuttavia preferisco il modello predefinito di Screen un server per sessione, che sembra leggermente più elegante.
Lavorare con il codice di Screen, nel 2002, è stato educativo e divertente per me. Stranamente, per tutte le sue caratteristiche aggiuntive, Tmux ha circa il 25% di linee di codice in meno rispetto a Screen (30k contro 40k). Ho notato che Tmux usa molte strutture dati ad albero e a lista, che erano leggermente difficili da capire per me. Screen sembrava preferire gli array.
Da quanto ho capito, poiché l'interfaccia terminale Unix è così stabile, c'è poco bisogno che il codice di Screen o Tmux si adatti ai cambiamenti del sistema operativo sottostante. Questi programmi non hanno davvero aggiornamenti di sicurezza come i browser web o i server web o anche la shell. Non ho notato alcun problema nell'eseguire la mia versione personalizzata di Screen, aggiornata l'ultima volta nel 2004 (eccetto la necessità di aggiungere alcuni file di configurazione per evitare che Systemd cancelli il socket ; questi file sono tipicamente parte del pacchetto di distribuzione comunque). Forse potrei semplicemente aggirare i problemi che ho incontrato in Tmux eseguendo una versione di Tmux da prima che iniziasse a bloccarsi. Naturalmente, se un numero sufficiente di utenti lo fa, non sarà un bene per i nuovi utenti, poiché significa che meno esperti cercheranno bug nelle ultime versioni ufficiali di questi programmi. Tuttavia, è difficile motivarmi a passare a un prodotto che è instabile per me (l'ultimo Tmux) o che manca di alcune caratteristiche che voglio (Standard Screen).
So che questo non fornisce una facile risposta alla domanda dell'OP, ma spero che la mia prospettiva sia stata utile.