Come ricaricare il file di configurazione di tmux che ha definito più sessioni?


9

Sto usando due sessioni separate in tmuxe ho i seguenti entires in /etc/tmux.conf:

set -g base-index 1

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

Inizio la sessione standardinvocando il comando seguente:

urxvtc -name 'tmux' -e bash -c 'tmux attach-session -t standard'

Se non c'è sessione, ne crea una, se ce n'è una, si allega. Come puoi vedere, ho due finestre, una delle quali è divisa in 2 riquadri. Quando sto ricaricando il file di configurazione, ho ottenuto 2 finestre extra dall'altra sessione ed entrambe sono state aggiunte a quelle preesistenti. Inoltre, le finestre precedenti hanno ricevuto un riquadro aggiuntivo. I due riquadri aggiuntivi sono chiari, non ci sono comandi eseguiti (htop) in nessuno di essi.

C'è un modo per ricaricare il file di configurazione in modo che questo venga applicato solo alla sessione allegata? O devo dimenticare di ricaricare il file di configurazione quando sto usando le sessioni e per applicare una nuova impostazione dovrei usare tmux kill-servere ricominciare le sessioni?

Risposte:


5

Costruisci un wrapper

Penso che le tue esigenze siano meglio soddisfatte da una qualche forma di script wrapper per impostare sessioni personalizzate. Qualcosa come la risposta a questo .

Sarebbe simile a questo, ma dovresti cambiarlo per le tue esigenze specifiche.

#!/bin/bash

# test if the session has windows
is_closed(){ 
    sess=$1
    n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
    [[ $n -eq 0 ]]
}

# either create it or attach to it
if is_closed logi ; then
  tmux new -d -s logi -n cmd
  tmux neww -t logi -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
  tmux splitw -t logi:1 -v -p 50
  tmux selectw -t logi:2
  tmux selectp -t logi:1
fi
if is_closed standard ; then
  tmux new -d -s standard -n htop "htop"
  tmux neww -n cmd -t standard
  tmux splitw -t standard:2 -v -p 50
  tmux selectw -t standard:2 
  tmux selectp -t standard:1
fi

Per ricaricare un file di configurazione

Se si esegue una modifica al file di configurazione mentre si utilizza tmux, è possibile eseguire questo è il prompt

tmux source-file /path/to/conf

Oppure puoi associarlo a una chiave .tmux.conf

bind r source-file ${HOME}/.tmux.conf \; display-message "source-file reloaded"

Configurazioni della home directory

Infine, non dovresti davvero aggiungere significative personalizzazioni a, /etc/tmux.confperché ciò sarebbe inutile per gli altri se devi usare un sistema condiviso. Invece, ti suggerisco di aggiungere qualsiasi personalizzazione a ~/.tmux.confperché è locale e specifica per le tue esigenze personali.


Si è verificato un errore durante l'esecuzione dello script: [[: not found(7a riga)
Mikhail Morfikov,

1
@MikhailMorfikov Potrebbe essere dovuto al fatto che sh è una versione diversa. Prova a cambiare la linea superiore in #!/bin/bash.
scicalculator

Sì, funziona.
Mikhail Morfikov,

1

Non è necessario utilizzare uno script wrapper, è possibile farlo con il source-filecomando.

Ho diviso il mio .tmux.confin due pezzi, e fonte solo quelli:

source-file ~/.config/tmux/options.conf
source-file ~/.config/tmux/session.conf

Quindi, session.confcontiene le definizioni del riquadro:

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

E options.confcontiene solo le definizioni delle opzioni:

bind R source-file ~/.config/tmux/options.conf \; display-message "Config reloaded..."
set -g base-index 1

In questo modo, la bind Rsorgente può solo options.confricaricare e tutto verrà ricaricato, ma non verranno creati nuovi riquadri.
Un piccolo svantaggio è che se si desidera modificare il layout della finestra, è necessario chiudere e avviare una nuova sessione.


0

Ho creato questo script . Non ha bisogno di contaminanti, rubini o altri. È solo uno script bash, configurabile.

Configuro il file mi config come:

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

Posso configurare tutti i miei progetti. Il resto è fatto dallo script:

#!/bin/bash

if [ -r config ]; then
    echo ""
    echo "Loading custom file"
    . config
else
    . config.dist
fi

tmux start-server

window=0
windownumber=-1

for i in "${combo[@]}"; do

    if [ $((window%2)) == 0 ]; then
        name=${i}
        ((windownumber++))
    else
        command=${i}
    fi

    if [ ${combo[0]} == "${i}" ]; then
        tmux new-session -d -s StarTmux -n "${name}"
    else
        if [ $((window%2)) == 0 ]; then
            tmux new-window -tStarTmux:$windownumber -n "${name}"
        fi
    fi

    if [ $((window%2)) == 1 ]; then
        tmux send-keys -tStarTmux:$windownumber "${command}" C-m
    fi

    ((window++))
done

tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.