¿Cómo puedo vincular múltiples comandos tmux a una sola tecla?

13

Específicamente estoy tratando de dar una notificación después de completar algún comando. Entonces, por ejemplo, si vuelvo a cargar mi archivo de configuración, me gustaría tener alguna confirmación de que funcionó, lo que podría hacerse de la siguiente manera:

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

Eso , sin embargo, no funciona. Tampoco otras cosas que intenté como formas de encadenar comandos juntos.

iconoclasta
fuente
1
Funciona para mí (tmux 1.3 en Debian squeeze) \;como separador.
Gilles 'SO- deja de ser malvado'
1
Bien, encontré que \; hace el trabajo, y que es la esencia de la respuesta elegí a continuación. De alguna manera probé \; demasiado rápido y determinado que no funcionó. Pero dejo esta pregunta aquí, ya que todavía sirve para responder la pregunta de cómo hacer esto.
iconoclasta

Respuestas:

12

Puede usar la run-shellopción , pero lo fundamental es separar los comandos con\;

En este caso, algo como:

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

run-shell shell-command
(alias: run)
Ejecute shell-command en segundo plano sin crear una ventana. Una vez que finaliza, cualquier salida a stdout se muestra en modo copia. Si el comando no devuelve el éxito, también se muestra el estado de salida.

jasonwryan
fuente
Hola, gracias por la respuesta. No lo he probado específicamente, pero no creo que funcione, ya que probé el código en mi pregunta con \; y solo ejecutó el segundo comando pero no el primero. Y no sé por qué run-shell funcionaría, pero display-message no lo haría.
iconoclasta
1
Bien, he intentado probar su solución y tmux sigue bloqueándose, aparentemente (aunque no con absoluta certeza) de ese comando. Voy a seguir intentando, pero estoy bastante seguro de que no va a funcionar ...
iconoclasta
Funciona en tmux 1.4. "Bloquear" significa "modo de copia" - eso es por diseño ...
jasonwryan
bien, lo puse a trabajar, sin bloquear tmux. Eso me dejó con la pregunta de por qué mi intento original de usar \; no funcionó:
iconoclasta
1
El corazón de su respuesta es usar \; - la parte sobre run-shell no es realmente importante, y creo que para el ejemplo que di display-message es mucho mejor. Así que elijo tu respuesta sobre la mía, pero ¿te importaría editar la respuesta para que no confunda o confunda a otras personas? ¡Gracias!
iconoclasta
4

Justo después de redactar mi pregunta, pensé en algo que podría funcionar. Lo probé y funciona, solo tienes que soportar varios archivos para tu configuración de tmux.

Aquí está la solución, específicamente en lo que se refiere a la recarga de su configuración. En su archivo .tmux.conf, coloque algo como esto:

bind R source-file "$HOME/.tmux/reload.tmux"

En el archivo ~ / .tmux / reload.tmux ponga algo como lo siguiente:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

Funciona perfectamente

iconoclasta
fuente
1
Esta es realmente la ÚNICA forma en que funciona. Todo lo demás aquí simplemente no está funcionando.
lzap
¿En serio? ... Ha pasado un tiempo desde que probé el otro enfoque, pero me sorprendería si tmux rompiera eso. Si está absolutamente seguro de que no funciona, lo probaré nuevamente y posiblemente acepte esta respuesta.
iconoclasta el
Sí, me disculpo, la respuesta anterior realmente funciona :-)
lzap
1

El uso del método run-shell coloca la salida en el búfer de copia que requiere un borrado manual. El uso de un archivo de configuración intermedio agrega la sobrecarga de mantener un segundo archivo de configuración. La combinación de ambas respuestas funciona mejor en mi caso, ya que quería que el mensaje desapareciera después de un breve intervalo, similar a un cuadro de diálogo emergente en una GUI, pero mantener todo contenido en un solo archivo.

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"
Chris
fuente
0

Hay un parche que permite secuencias de comandos completas dentro de tmux, adjuntando el lenguaje tcl a sus componentes internos.

http://ershov.github.io/tmux/

Además, permite especificar tantas acciones como desee para las pulsaciones de tecla 'modo'.

Usando eso, su código se vería así:

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

o incluso más legible:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
Yuriy Ershov
fuente