¿Cómo recargar el archivo de configuración de tmux que ha definido varias sesiones?

9

Estoy usando dos sesiones separadas en tmux, y tengo los siguientes entires en /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

Comienzo la sesión standardinvocando el siguiente comando:

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

Si no hay sesión, crea una, si hay una, la adjunta. Como puede ver, tengo dos ventanas, una de las cuales está dividida en 2 paneles. Cuando vuelvo a cargar el archivo de configuración, obtuve 2 ventanas adicionales de la otra sesión, y ambas se han agregado a las preexistentes. Además, las ventanas anteriores recibieron un panel adicional. Los dos paneles adicionales son claros, no hay comandos ejecutados (htop) en ninguno de ellos.

¿Hay alguna manera de volver a cargar el archivo de configuración de la forma en que esto se aplicaría solo a la sesión adjunta? ¿O tengo que olvidarme de volver a cargar el archivo de configuración cuando estoy usando sesiones, y para aplicar una nueva configuración debo usar tmux kill-servere iniciar sesiones nuevamente?

Mikhail Morfikov
fuente

Respuestas:

5

Construye una envoltura

Creo que sus necesidades se satisfacen mejor con alguna forma de script de contenedor para configurar sesiones personalizadas. Algo así como la respuesta a esta .

Se vería así, pero debe cambiarlo según sus necesidades específicas.

#!/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

Para recargar un archivo de configuración

Si realiza una edición en el archivo de configuración mientras usa tmux, puede ejecutar este es el indicador

tmux source-file /path/to/conf

O bien, puede vincularlo a una clave en .tmux.conf

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

Configuraciones del directorio de inicio

Finalmente, realmente no debería agregar personalizaciones significativas /etc/tmux.confporque esto sería inútil para otros si necesita usar un sistema compartido. En cambio, le sugiero que agregue cualquier personalización ~/.tmux.confporque es local y específica para sus necesidades personales.

scicalculator
fuente
Recibí un error al ejecutar el script: [[: not found(7ma línea)
Mikhail Morfikov
1
@MikhailMorfikov Puede deberse a que sh es una versión diferente. Intenta cambiar la línea superior a #!/bin/bash.
scicalculator
Sí, eso funciona.
Mikhail Morfikov
1

No tiene que usar un script de envoltura, puede hacerlo con el source-filecomando.

Lo dividí .tmux.confen dos partes, y solo las obtuvo:

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

Luego, session.confcontiene las definiciones de panel:

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

Y options.confsolo contiene las definiciones de opciones:

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

De esta forma, bind Rsolo puede obtener el options.confy todo se volverá a cargar, pero no se crearán nuevos paneles.
Un pequeño inconveniente es que si desea cambiar el diseño de la ventana, debe salir y comenzar una nueva sesión.

kissgyorgy
fuente
0

He creado este script . No necesita tmuxinator, ruby ​​u otros. Es solo un script bash, configurable.

Configuro mi archivo de configuración como:

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

Puedo configurar todos mis proyectos. El resto lo hace el 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
sensorario
fuente