8

Я использую две отдельные сессии в tmux , и у меня есть следующие записи в /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

Я запускаю standard сеанса, вызывая следующую команду:

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

Если сеанса нет, он создает его, если он есть, он присоединяется. Как видите, у меня есть два окна, одно из которых разделено на 2 панели. Когда я перезагружаю файл конфигурации, я получил 2 дополнительных окна из другого сеанса, и оба были добавлены к уже существующим. Кроме того, предыдущие окна получили одну дополнительную панель. Две дополнительные панели понятны, ни в одной из них нет выполненных команд (htop).

Есть ли способ перезагрузить файл конфигурации таким образом, чтобы он применялся только к присоединенному сеансу? Или я должен забыть о перезагрузке файла конфигурации, когда я использую сеансы, и чтобы применить новые настройки, я должен использовать tmux kill-server и начать сеансы заново?

3 ответа3

4

Построить обертку

Я думаю, что ваши потребности лучше всего удовлетворяются некоторой формой скрипта-обертки для настройки пользовательских сессий. Что-то вроде ответа на этот.

Это будет выглядеть примерно так, но вы должны изменить это для ваших конкретных потребностей.

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

Чтобы перезагрузить файл конфигурации

Если вы вносите изменения в файл конфигурации при использовании tmux, вы можете запустить это приглашение

tmux source-file /path/to/conf

Или вы можете привязать его к ключу в .tmux.conf

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

Конфигурации домашнего каталога

Наконец, вам действительно не следует добавлять значительные настройки в /etc/tmux.conf потому что это будет бесполезно для других, если вам нужно использовать общую систему. Вместо этого я предлагаю вам добавить любую настройку в ~/.tmux.conf потому что она локальна и соответствует вашим личным потребностям.

0

Вам не нужно использовать скрипт-обертку, вы можете сделать это с помощью команды source-file .

Я разделил мой .tmux.conf на две части, и он содержит только те:

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

Затем session.conf содержит определения панели:

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

И options.conf содержит только определения параметров:

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

Таким образом, bind R может только получить исходный код options.conf и все будет перезагружено, но новые панели не будут созданы.
Один небольшой недостаток заключается в том, что если вы хотите изменить расположение окон, вам нужно выйти и начать новый сеанс.

0

Я создал этот скрипт. Для этого не нужен tmuxinator, ruby или другие. Это просто bash-скрипт, настраиваемый.

Я настраиваю конфигурационный файл mi как:

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

Я могу настроить все свои проекты. Остальное делается скриптом:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .