Jak powiązać wiele poleceń Tmux z jednym naciśnięciem klawisza?


13

W szczególności próbuję przekazać powiadomienie po zakończeniu niektórych poleceń. Na przykład, jeśli ponownie załaduję mój plik konfiguracyjny, chciałbym mieć jakieś potwierdzenie, że zadziałało, co można zrobić w następujący sposób:

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

To jednak nie działa. Nie robiłem też żadnych innych rzeczy, które próbowałem napisać razem.


1
Działa dla mnie (tmux 1.3 na ściśnięciu Debiana) z \;jako separatorem.
— Gilles „SO- przestań być zły”,

1
Ok, znalazłem że \; ma pracę, a to jest istotą odpowiedzi wybrałem poniżej. Jakoś testowałem \; zbyt szybko i stwierdził, że to nie działa. Ale zostawiam to pytanie tutaj, ponieważ wciąż służy ono do udzielenia odpowiedzi na pytanie, jak to zrobić.
— iconoclast

Odpowiedzi:


12

Możesz użyć tej run-shellopcji , ale najważniejsze jest oddzielenie poleceń za pomocą\;

W tym przypadku coś takiego:

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

run-shell shell-command
(alias: run)
Wykonaj polecenie shell w tle bez tworzenia okna. Po zakończeniu wszelkie dane wyjściowe na standardowe wyjście są wyświetlane w trybie kopiowania. Jeśli polecenie nie zwróci sukcesu, wyświetlany jest również status wyjścia.


Hej, dzięki za odpowiedź. Nie przetestowałem tego specjalnie, ale nie sądzę, aby zadziałało, ponieważ przetestowałem kod w moim pytaniu za pomocą \; i po prostu uruchomił drugie polecenie, ale nie pierwsze. I nie wiem, dlaczego run-shell miałby działać, ale komunikat ekranowy nie.
— iconoclast

1
OK, próbowałem przetestować twoje rozwiązanie i tmux ciągle się blokuje, najwyraźniej (choć nie z absolutną pewnością) od tego polecenia. Będę próbował, ale jestem prawie pewien, że to nie zadziała ...
— iconoclast

Działa na tmux 1.4. Czy „blokowanie” oznacza „tryb kopiowania” - czyli zgodnie z projektem ...
— jasonwryan

OK, mam to do pracy, bez blokowania Tmux. Pozostało mi pytanie, dlaczego moja pierwotna próba użycia \; nie działał:
— iconoclast

1
Sercem twojej odpowiedzi jest użycie \; - część o run-shellu nie jest tak naprawdę ważna i myślę, że dla przykładu, który podałem display-display jest o wiele lepszy. Więc wybieram twoją odpowiedź zamiast mojej, ale czy mógłbyś edytować odpowiedź, aby nie wprowadzała w błąd ani nie myliła innych ludzi? Dzięki!
— iconoclast

4

Zaraz po skomponowaniu pytania pomyślałem o czymś, co może zadziałać. Próbowałem i działa, po prostu musisz znosić wiele plików do konfiguracji tmux.

Oto rozwiązanie, szczególnie związane z ponownym ładowaniem konfiguracji. W pliku .tmux.conf umieść coś takiego:

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

W pliku ~ / .tmux / reload.tmux umieść coś takiego:

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

Działa idealnie.


1
Jest to właściwie jedyny sposób, w jaki działa. Wszystko inne tutaj po prostu nie działa.
— lzap

Naprawdę? ... Minęło trochę czasu, odkąd przetestowałem inne podejście, ale byłbym zaskoczony, gdyby Tmux to zepsuł. Jeśli masz absolutną pewność, że to nie działa, przetestuję ponownie i prawdopodobnie zaakceptuję tę odpowiedź.
— iconoclast

Tak przepraszam, powyższa odpowiedź naprawdę działa :-)
— lzap

1

Zastosowanie metody run-shell umieszcza dane wyjściowe w buforze kopiowania, który wymaga ręcznego wyczyszczenia. Użycie pośredniego pliku konfiguracyjnego dodaje narzut związany z utrzymywaniem drugiego pliku konfiguracyjnego. Łączenie obu odpowiedzi działa lepiej w moim przypadku, ponieważ chciałem, aby komunikat zniknął po krótkim czasie, podobnie jak w wyskakującym oknie dialogowym w interfejsie GUI, ale zachowaj wszystko w jednym pliku.

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

0

Jest łatka pozwalająca na pełne skryptowanie w tmux, dołączając język tcl do jego wewnętrznych elementów.

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

Pozwala także określić tyle akcji, ile chcesz dla naciśnięć klawiszy w trybie.

Korzystając z tego, twój kod wyglądałby następująco:

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

lub nawet bardziej czytelny:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.