Como recarregar o arquivo de configuração do tmux que definiu várias sessões?

8

Estou usando duas sessões separadas em tmux e tenho as seguintes entradas em /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

Eu inicio a sessão standard invocando o seguinte comando:

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

Se não houver sessão, ela cria uma, se houver uma, anexada. Como você pode ver, eu tenho duas janelas, uma das quais é dividida em 2 painéis. Quando estou recarregando o arquivo de configuração, eu tenho duas janelas extras da outra sessão, e ambas foram adicionadas às pré-existentes. Além disso, as janelas anteriores receberam um painel extra. Os dois painéis extras são claros, não há comandos executados (htop) em nenhum deles.

Existe uma maneira de recarregar o arquivo de configuração da maneira que isso seria aplicado somente à sessão anexada? Ou eu tenho que esquecer de recarregar o arquivo de configuração quando estou usando as sessões e, para aplicar a nova configuração, devo usar tmux kill-server e iniciar as sessões novamente?

    
por Mikhail Morfikov 17.12.2013 / 21:00

3 respostas

4

Construa um wrapper

Acho que suas necessidades são melhor atendidas por alguma forma de script de wrapper para configurar sessões personalizadas. Algo como a resposta para este .

Seria mais ou menos assim, mas você deve alterá-lo para suas necessidades 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 recarregar um arquivo de configuração

Se você fizer uma edição no arquivo de configuração enquanto estiver usando o tmux, você pode executar este é o prompt

tmux source-file /path/to/conf

Ou você pode vinculá-lo a uma chave em .tmux.conf

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

Configurações de diretório inicial

Por fim, você não deveria estar adicionando personalizações significativas a /etc/tmux.conf , pois isso seria inútil para outras pessoas se você precisasse usar um sistema compartilhado. Em vez disso, sugiro que você adicione qualquer personalização ao ~/.tmux.conf porque é local e específico para suas necessidades pessoais.

    
por 18.12.2013 / 00:04
0

Criei este script . Não precisa de tmuxinator, ruby ou outros. É apenas um script bash, configurável.

Eu configuro o arquivo mi config como:

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

Eu posso configurar todos os meus projetos. O resto é feito pelo 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
    
por 17.04.2015 / 00:07
0

Você não precisa usar um script de wrapper, você pode fazê-lo com o comando source-file .

Eu divido meu .tmux.conf em duas partes, e ele só obtém essas:

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

Em seguida, session.conf contém as definições do painel:

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.conf contém apenas as definições das opções:

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

Dessa forma, o bind R só pode originar o options.conf e tudo será recarregado, mas nenhum novo painel será criado.
Uma pequena desvantagem é que, se você quiser alterar o layout da janela, precisará sair e iniciar uma nova sessão.

    
por 30.12.2017 / 02:58