Crear comando personalizado en tmux

3

Sé cómo vincular una tecla a un comando en tmux, pero quiero crear un comando personalizado (que puede escribir con la tecla prefijo + dos puntos). En este comando personalizado, quiero ejecutar un par de otros comandos.

Mi idea es tener algo como esto:

no-side-status() {
    set status-left-length 0
    set status-right-length 0
}

side-status() {
    set status-left-length 50
    set status-right-length 150
}

Entonces, puedo escribir :no-side-statuspara ocultar las barras de estado izquierda y derecha, y escribir :side-statuspara restaurar las barras de estado izquierda y derecha.

¿Es posible crear tales comandos personalizados? ¿Si es así, cómo? Si no, ¿alguna otra forma de lograr lo que quiero?

gitaarik
fuente
Puede tener sus propias funciones bash si lo desea. No estoy seguro de qué barras de estado estás hablando.
MinusFour
@MinusFour Las barras de estado de tmux ..
gitaarik
Intente agregar la palabra clave de función a sus funciones y agréguelas en la parte inferior de su ~ / .bashrc. Luego ejecútelos como no-side-status () desde su sesión tmux.
MinusFour
@MinusFour Entiendo que puedo hacer una función bash y hablar con tmux a través del tmuxcomando, pero me gustaría hacer una función tmux que pueda ejecutar escribiendo prefix-key + :y luego el nombre del comando. Porque si estoy en una sesión de vim o algo así, no quiero tener que volver a bash para ejecutar este comando.
gitaarik
Cuando estés en Vim puedes ejecutar el mismo comando con!. Por ejemplo:! No-side-status (). Si está buscando el mismo comando de Vim y Bash, entonces no estoy seguro de si es posible.
MinusFour

Respuestas:

2

Originalmente, tmux no tiene soporte para comandos personalizados, excepto para ejecutar scripts de shell externos.

Hay un mod que agrega soporte completo de secuencias de comandos a tmux: http://ershov.github.io/tmux/

También permite crear comandos de usuario. Por ejemplo, el suyo se vería así:

proc no-side-status {} {
    set status-left-length 0
    set status-right-length 0
}

proc side-status {} {
    set status-left-length 50
    set status-right-length 150
}

Para utilizar la línea de comandos tmux sólo tiene que escribir C-b :y side-statuso no-side-status.

Para vincularlo a un uso clave bind C-p tcl side-status.

Yuriy Ershov
fuente
1

bind C-p run "/usr/bin/notify-send Foo"

guneysus
fuente
¿Cómo responde esto a mi pregunta?
gitaarik
Respuesta parcial, que puede vincular el acceso directo a una función de shell externa. (que puede escribir con la tecla prefijo + dos puntos)
guneysus
No estoy tratando de vincular una función de shell externo a un acceso directo.
gitaarik
0

Esta es la respuesta completa. Puede tener dos configuraciones tmux. Uno contiene

set status-left-length 0
set status-right-length 0
bind-key R source-file ~/.tmux.alternative.conf \; \
                    display-message "Alternative configuration loaded"

El otro contiene

set status-left-length 50
set status-right-length 15
bind-key R source-file ~/.tmux.conf \; \
                    display-message "Default configuration loaded"
guneysus
fuente
Podría intentar este enfoque, aunque en realidad no quiero vincularlo a un atajo de teclado, pero quiero crear un comando personalizado.
gitaarik
Buena suerte. Parece difícil sin hackear el núcleo de tmux. Debe considerar las respuestas anteriores, vinculando una clave a los scripts / funciones de shell.
guneysus