Wie lade ich eine tmux-Konfigurationsdatei neu, die mehrere Sitzungen definiert hat?


9

Ich verwende zwei getrennte Sitzungen in tmuxund habe die folgenden Einträge in /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

Ich starte die Sitzung, standardindem ich den folgenden Befehl aufrufe:

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

Wenn es keine Sitzung gibt, wird eine erstellt, wenn es eine gibt, wird sie angehängt. Wie Sie sehen können, habe ich zwei Fenster, von denen eines in zwei Fenster unterteilt ist. Beim erneuten Laden der Konfigurationsdatei wurden 2 zusätzliche Fenster aus der anderen Sitzung angezeigt, und beide wurden zu den bereits vorhandenen hinzugefügt. Darüber hinaus erhielten die vorherigen Fenster einen zusätzlichen Bereich. Die zwei zusätzlichen Fenster sind klar, es gibt keine ausgeführten Befehle (htop) in einem von ihnen.

Gibt es eine Möglichkeit, die Konfigurationsdatei so neu zu laden, dass dies nur auf angehängte Sitzungen angewendet wird? Oder muss ich vergessen, die Konfigurationsdatei neu zu laden, wenn ich Sitzungen verwende, und um neue Einstellungen anzuwenden, sollte ich tmux kill-serverSitzungen verwenden und neu starten?

Antworten:


5

Erstellen Sie einen Wrapper

Ich denke, Ihre Anforderungen werden am besten durch eine Art Wrapper-Skript erfüllt, um benutzerdefinierte Sitzungen einzurichten. So etwas wie die Antwort auf diese Frage .

Es würde ungefähr so ​​aussehen, aber Sie sollten es für Ihre spezifischen Bedürfnisse ändern.

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

So laden Sie eine Konfigurationsdatei neu

Wenn Sie die Konfigurationsdatei unter Verwendung von tmux bearbeiten, können Sie dies ausführen. Dies ist die Eingabeaufforderung

tmux source-file /path/to/conf

Oder Sie können es an einen Schlüssel binden .tmux.conf

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

Home-Verzeichnis-Konfigurationen

Schließlich sollten Sie wirklich keine wesentlichen Anpassungen hinzufügen, /etc/tmux.confda dies für andere nicht hilfreich wäre, wenn Sie ein gemeinsam genutztes System verwenden müssen. Stattdessen schlage ich vor, dass Sie Anpassungen hinzufügen, ~/.tmux.confda diese lokal und spezifisch für Ihre persönlichen Bedürfnisse sind.


Ich habe einen Fehler beim Ausführen des Skripts erhalten: [[: not found(7. Zeile)
Mikhail Morfikov

1
@MikhailMorfikov Es könnte daran liegen, dass sh eine andere Version ist. Versuchen Sie, die oberste Zeile in zu ändern #!/bin/bash.
Scicalculator

Ja, das funktioniert.
Mikhail Morfikov

1

Sie müssen kein Wrapper-Skript verwenden, Sie können dies mit dem source-fileBefehl tun .

Ich habe meine .tmux.confin zwei Teile geteilt, und es stammen nur diese:

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

Dann session.confenthält die Scheibe Definitionen:

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

Und options.confenthält nur die Optionsdefinitionen:

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

Auf diese Weise bind Rkann nur die Quelle erstellt werden options.confund alles wird neu geladen, es werden jedoch keine neuen Fenster erstellt.
Ein kleiner Nachteil ist, dass Sie eine neue Sitzung beenden und starten müssen, wenn Sie das Fensterlayout ändern möchten.


0

Ich habe dieses Skript erstellt . Es braucht keinen Tmuxinator, Rubin oder andere. Es ist nur ein Bash-Skript, das konfiguriert werden kann.

Ich konfiguriere meine Konfigurationsdatei wie folgt:

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

Ich kann alle meine Projekte konfigurieren. Der Rest erledigt das Skript:

#!/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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.