Integrazione iTerm2 e tmux


4

Vorrei ottenere il seguente comportamento:

Quando avvio iTerm2, se è in esecuzione una sessione tmux, connettiti ad essa. Se non è in esecuzione alcuna sessione di tmux, crearne una e connettersi ad essa.

Qualche suggerimento molto apprezzato!


2
Nota che iTerm2 ora ha integrato il supporto tmux. Non so come sfruttarlo al meglio (e quindi ho trovato questo attraverso una ricerca per conoscerlo), ma ora le cose dovrebbero essere notevolmente più semplici. Sarebbe bello vederlo aggiornato per questo nuovo flusso di lavoro.
Matt B.

Non sono sicuro su come impostare fino a Auto Connect, ma ci sono le informazioni qui che potrebbe aiutare a modificare @ sceneggiatura di Felix.
askewchan

Risposte:


4

Uso questo script, che è execd ogni volta che la mia shell inizia come shell di login. Probabilmente vorrai modificarlo un po '...

#/usr/bin/env zsh

local tmux=$1
local sname
local ssh

[[ -z "$tmux" ]] && tmux=tmux

# export COLORTERM to fix some programs
case "$TERM" in
  *256color)
    export COLORTERM="$TERM" ;;
esac

# build a fancy session name
[[ ! -z "$SSH_CLIENT" ]] && ssh="/$SSH_CLIENT"
sname=$(print -P "%D{%Y-%m-%d-%H-%M-%S}/%n/%y$ssh")

# make sure session 0 exists  
$tmux has-session -t 0 2>/dev/null || $tmux new-session -d -s 0

# create our own mirroring session
$tmux new-session -d -s "$sname" -t 0

# this doesn't return until the session is closed or detached
$tmux attach-session -t "$sname"

# kill the mirroring session if it's not dead already 
$tmux has-session -t "$sname" 2>/dev/null && $tmux kill-session -t "$sname"

# return to prompt outside of tmux if special file is present 
if [[ -f "$TMUX_LEAVE_SHELL_FILE" ]]; then
  rm "$TMUX_LEAVE_SHELL_FILE"
  exec zsh -i
fi

Sezione pertinente nel mio .zshrc

# drop into tmux if this is a login shell and we're not in tmux already
if (which tmux >/dev/null) && [[ -o login ]] &&  [[ -z "$TMUX" ]] && [[ -f ~/etc/script/tmux-login ]]; then
  exec zsh "$HOME/etc/script/tmux-login" $(which tmux)
fi

# handy command to detach tmux but keep the shell running (kind-of)
case $TERM in
  screen)
    alias detach="touch $TMUX_LEAVE_SHELL_FILE && tmux detach" ;;
esac
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.