Jak ponownie załadować plik konfiguracyjny tmux, który zdefiniował wiele sesji?

9

Używam dwóch oddzielnych sesji w tmuxi mam następujące wpisy w /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

Sesję rozpoczynam standardod wywołania następującego polecenia:

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

Jeśli nie ma sesji, tworzy ją, jeśli jest, dołącza się. Jak widać mam dwa okna, z których jedno jest podzielone na 2 panele. Kiedy ponownie ładuję plik konfiguracyjny, dostałem 2 dodatkowe okna z drugiej sesji i oba zostały dodane do wcześniej istniejących. Ponadto poprzednie okna otrzymały jeden dodatkowy panel. Dwa dodatkowe panele są czyste, w żadnym z nich nie ma wykonanych poleceń (htop).

Czy istnieje sposób na ponowne załadowanie pliku konfiguracyjnego w taki sposób, aby dotyczyło to tylko dołączonej sesji? Czy też muszę zapomnieć o ponownym załadowaniu pliku konfiguracyjnego, gdy korzystam z sesji, a żeby zastosować nowe ustawienie, muszę użyć tmux kill-serveri rozpocząć sesję od nowa?

Michaił Morfikow
źródło

Odpowiedzi:

5

Zbuduj opakowanie

Myślę, że twoje potrzeby najlepiej zaspokajają jakąś formę skryptu opakowania, aby skonfigurować niestandardowe sesje. Coś jak odpowiedź na to pytanie .

Wyglądałoby to mniej więcej tak, ale powinieneś zmienić to dla swoich konkretnych potrzeb.

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

Aby ponownie załadować plik konfiguracyjny

Jeśli edytujesz plik konfiguracyjny podczas korzystania z tmux, możesz uruchomić to jest monit

tmux source-file /path/to/conf

Lub możesz powiązać go z kluczem w .tmux.conf

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

Konfiguracje katalogu domowego

Wreszcie, naprawdę nie powinieneś dodawać znaczących dostosowań, /etc/tmux.confponieważ byłoby to nieprzydatne dla innych, jeśli będziesz potrzebować wspólnego systemu. Zamiast tego proponuję dodać dowolne dostosowanie, ~/.tmux.confponieważ jest lokalne i specyficzne dla twoich osobistych potrzeb.

Scicalculator
źródło
[[: not found
Wystąpił
1
@MikhailMorfikov Może to być spowodowane tym, że sh jest inną wersją. Spróbuj zmienić górną linię na #!/bin/bash.
Scicalculator
Tak, to działa.
Michaił Morfikow,
1

Nie musisz używać skryptu opakowania, możesz to zrobić za pomocą source-filepolecenia.

Podzieliłem moje .tmux.confna dwie części, a to tylko źródła:

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

Następnie session.confzawiera definicje panelu:

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

I options.confzawiera tylko definicje opcji:

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

W ten sposób bind Rmożna tylko pobrać options.confi wszystko zostanie ponownie załadowane, ale nie zostaną utworzone nowe panele.
Jedną niewielką wadą jest to, że jeśli chcesz zmienić układ okna, musisz wyjść i rozpocząć nową sesję.

kissgyorgy
źródło
0

Stworzyłem ten skrypt . Nie potrzebuje tmuxinatora, rubinu ani innych. To tylko skrypt bash, konfigurowalny.

Konfiguruję mój plik konfiguracyjny, taki jak:

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

Mogę skonfigurować wszystkie moje projekty. Reszta jest wykonywana przez skrypt:

#!/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
źródło