Bagaimana cara memuat ulang file konfigurasi tmux yang telah menetapkan banyak sesi?

9

Saya menggunakan dua sesi terpisah tmux, dan saya memiliki hal-hal berikut /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

Saya memulai sesi standarddengan menjalankan perintah berikut:

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

Jika tidak ada sesi, itu menciptakan satu, jika ada, itu melekat. Seperti yang Anda lihat saya punya dua jendela, salah satunya dibagi menjadi 2 panel. Ketika saya memuat ulang file konfigurasi, saya mendapat 2 jendela ekstra dari sesi lain, dan keduanya telah ditambahkan ke yang sudah ada sebelumnya. Selain itu, windows sebelumnya menerima satu panel ekstra. Dua panel ekstra jelas, tidak ada perintah yang dieksekusi (htop) di salah satu dari mereka.

Apakah ada cara untuk memuat ulang file konfigurasi dengan cara ini hanya akan diterapkan pada sesi terlampir? Atau apakah saya harus lupa memuat ulang file konfigurasi ketika saya menggunakan sesi, dan untuk menerapkan pengaturan baru saya harus menggunakan tmux kill-serverdan memulai sesi baru?

Mikhail Morfikov
sumber

Jawaban:

5

Buat pembungkus

Saya pikir kebutuhan Anda paling baik dilayani oleh beberapa bentuk skrip wrapper untuk menyiapkan sesi khusus. Sesuatu seperti jawaban untuk yang ini .

Akan terlihat seperti ini, tetapi Anda harus mengubahnya untuk kebutuhan spesifik Anda.

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

Untuk memuat ulang file konfigurasi

Jika Anda mengedit file konfigurasi saat menggunakan tmux, Anda dapat menjalankannya jika diminta

tmux source-file /path/to/conf

Atau, Anda dapat mengikatnya ke kunci masuk .tmux.conf

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

Konfigurasi direktori rumah

Akhirnya, Anda benar-benar tidak boleh menambahkan kustomisasi signifikan /etc/tmux.confkarena ini akan tidak membantu orang lain jika Anda perlu menggunakan sistem bersama. Sebagai gantinya, saya sarankan Anda menambahkan kustomisasi apa pun ~/.tmux.confkarena bersifat lokal dan spesifik untuk kebutuhan pribadi Anda.

scicalculator
sumber
Saya mendapat kesalahan saat menjalankan skrip: [[: not found(baris ke-7)
Mikhail Morfikov
1
@MikhailMorfikov Mungkin karena sh menjadi versi yang berbeda. Coba ubah baris teratas menjadi #!/bin/bash.
scicalculator
Yap, itu berhasil.
Mikhail Morfikov
1

Anda tidak harus menggunakan skrip wrapper, Anda bisa melakukannya dengan source-fileperintah.

Saya membagi saya menjadi .tmux.confdua bagian, dan itu hanya sumber yang:

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

Kemudian, session.confberisi definisi 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

Dan options.confhanya berisi definisi opsi:

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

Dengan cara ini, bind Rhanya dapat sumber options.confdan semuanya akan dimuat ulang, tetapi tidak ada panel baru yang akan dibuat.
Satu kekurangan kecil adalah bahwa jika Anda ingin mengubah tata letak jendela, Anda harus berhenti dan memulai sesi baru.

kissgyorgy
sumber
0

Saya sudah membuat skrip ini . Tidak perlu tmuxinator, ruby ​​atau yang lainnya. Ini hanya skrip bash, dapat dikonfigurasi.

Saya mengkonfigurasi file konfigurasi mi seperti:

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

Saya dapat mengkonfigurasi semua proyek saya. Sisanya dilakukan oleh skrip:

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