2012-09-10 10 views

Respuesta

10

Si siempre desea que CA a

  • interruptor entre los paneles cuando la ventana activa tiene más de un panel, y
  • cambiar entre ventanas cuando la ventana activa tiene un solo panel,

luego puede usar un if-shell que cuenta el número de paneles en la ventana activa para decidir entre last-pane y last-window:

bind-key C-a if-shell 'test $(tmux list-panes | wc -l) -gt 1' 'last-pane' 'last-window' 

Depende de usted "reorganizar sus paneles al cambiar entre configuraciones" anchas "y" cuadradas "(p. a través de break-pane y join-pane).


En tmux 1,8 if-shell y hacer run-shell expansión formato, por lo que puede simplemente el comando shell un poco:

bind-key C-a if-shell 'test #{window_panes} -gt 1' 'last-pane' 'last-window' 
+0

Me pregunto si hay una manera menos engorrosa de probar si la ventana actual tiene más de un panel o no. Realmente debería ser una de esas variables de tmux, como '# {pane_count}', luego podemos usar su construcción '# {? ,,}' en lugar de forzar un shell, y otro tmux para hacer IPC, en una tubería, y a 'wc -l'. Desafortunadamente no puedo encontrar una buena lista completa de todas las variables de tmux. Sé de al menos un documento no documentado que es '# {pane_current_command}' que ha sido útil. ** ACTUALIZACIÓN ** Lo encontré, es '# {window_panes}' que es "Número de paneles en la ventana". –

+0

mierda perfecta, esas condicionalidades condicional solo pueden funcionar para la creación de cadenas de estado, no para determinar qué comandos de shell ejecutar. Definitivamente puede evitar la tubería para 'wc -l' sin embargo. –

+0

@StevenLu: * tmux * 1.8 admite expansiones de formato en 'if-shell' (y' run-shell'), por lo que puede hacer esto en 1.8: 'bind Ca if-shell 'test # {window_panes} -gt 1' last-panel last-window'. –

1

me gustaría sugerir lo siguiente (ajuste 80 para distinguir entre los dos anchos de terminales)

if-shell '[ "$COLUMNS" -gt 80 ]' 'bind-key C-a "select-window -t :.+"' 'bind-key C-a "next-window"' 

pero estoy bien echar a perder la sintaxis, o COLUMNS no está establecido en el correspondiente tmux entorno, ya que la expresión de shell anterior siempre evalúa falsa para mí.

+2

'si-shell' y'-shell' ejecutar son ambos se ejecutan en el contexto de (bifurcado desde) el servidor (no una sesión particular o cliente), por lo que no tendrán COLUMNAS (ni siquiera un tty en std {in, out, err}). Puede obtener el ancho del cliente activo más reciente con algo como esto: 'tmux list-clients -F '# {client_activity} # {client_width}' | ordenar -rn | cabeza -1 | cut -d '' -f' –

+0

IIRC, '$ COLUMNS' es una variable bash, no una variable de entorno; por lo que necesitaría asegurarse de que el caparazón envolvente fuera bash mientras ejecutaba la prueba. Y, incluso si lo fuera, no estaría necesariamente conectado al mismo pty que el usuario está mirando (o pty en absoluto) mientras presiona el enlace de la clave. – jpaugh

Cuestiones relacionadas