Birden fazla tmux komutunu bir tuşa nasıl bağlayabilirim?


13

Özellikle bazı komutlar tamamlandıktan sonra bir bildirim vermeye çalışıyorum. Örneğin, yapılandırma dosyamı yeniden yüklersem, bunun işe yaradığına dair bir onay almak istiyorum, ki bu böyle bir şey yapılabilir:

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

Yani , ancak, çalışmaz. Komutları bir araya getirmenin bir yolu olarak denediğim başka şeyler de.


1
\;Ayırıcı olarak benim için (Debian sıkmak üzerinde tmux 1.3) çalışır .
Gilles 'SO- kötü olmayı bırak

1
Tamam, buldum \; yapar işi, ve ben aşağıda seçti cevap özüdür. Bir şekilde test ettim \; çok hızlı ve işe yaramadığını belirledi. Ama bu soruyu burada bırakıyorum çünkü hala bunun nasıl yapılacağı sorusunu cevaplamaya hizmet ediyor.
iconoclast

Yanıtlar:


12

run-shellSeçeneği kullanabilirsiniz , ancak kritik olan komutları\;

Bu durumda, şöyle bir şey:

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

run-shell shell-command
(diğer ad: run)
Bir pencere oluşturmadan arka planda shell-komutunu çalıştır . Tamamlandıktan sonra, stdout'a giden çıktılar kopya modunda görüntülenir. Komut başarı döndürmezse, çıkış durumu da görüntülenir.


Hey, cevap için teşekkürler. Ben özellikle test etmedim ama soru ile kod test beri ben işe yaramaz sanmıyorum \; ve sadece ikinci komutu çalıştırdı ama birincisini değil. Ve run-shell'in neden çalıştığını bilmiyorum ama ekran mesajı işe yaramadı.
iconoclast

1
Tamam, çözümünüzü test etmeyi denedim ve tmux görünüşe göre (mutlak kesinlikte olmasa da) bu komuttan kilitlenmeye devam ediyor. Denemeye devam edeceğim, ama işe yaramayacağından eminim ...
iconoclast

Tmux 1.4 üzerinde çalışır. "Kilitleme", "kopyalama modu" anlamına mı geliyor - tasarım gereği ...
jasonwryan

tamam, tmux'u kilitlemeden çalıştım. Bu bana neden orijinal kullanmaya çalıştığım sorusunu bıraktı \; işe yaramadı:
iconoclast

1
Cevabınızın kalbi \; - run-shell ile ilgili kısım gerçekten önemli değil ve bence ekran mesajı verdiğim örnek için çok daha iyi. Bu yüzden cevabımı benimkini seçiyorum, ama cevabı diğer insanları yanıltmamak veya karıştırmamak için düzenlemeyi düşünür müsünüz. Teşekkürler!
iconoclast

4

Sorumu oluşturduktan hemen sonra işe yarayabilecek bir şey düşündüm. Denedim ve işe yarıyor, sadece tmux yapılandırmanız için birden fazla dosyaya katlanmak zorundasınız.

İşte, özellikle yapılandırmanızın yeniden yüklenmesi ile ilgili çözüm. .Tmux.conf dosyanıza böyle bir şey koyun:

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

~ / .Tmux / reload.tmux dosyasına aşağıdaki gibi bir şey koyun:

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

Mükemmel çalışıyor.


1
Bu aslında çalışmanın tek yoludur. Buradaki diğer her şey çalışmıyor.
lzap

Gerçekten mi? ... Diğer yaklaşımı test ettiğimden beri bir süre geçti, ama tmux bunu kırdıysa şaşırırdım. İşe yaramayacağından kesinlikle eminseniz, tekrar test edeceğim ve bunun yerine muhtemelen bu cevabı kabul edeceğim.
iconoclast

Evet özür dilerim, yukarıdaki cevap gerçekten işe yarıyor :-)
lzap

1

Run-shell yöntemini kullanarak çıktıyı el ile temizleme gerektiren kopya arabelleğine koyar. Bir ara yapılandırma dosyası kullanmak, ikinci bir yapılandırma dosyasının bakım yükünü ekler. Her iki yanıtı birleştirmek benim durumumda daha iyi çalışır, çünkü kısa bir aradan sonra mesajın bir GUI'deki açılır iletişim kutusuna benzer şekilde kaybolmasını istedim, ancak her şeyi tek bir dosyada sakladım.

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

0

Tmux içinde tam teşekküllü komut dosyası oluşturmaya izin veren ve içlerine tcl dili ekleyen bir yama var.

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

Ayrıca, 'mod' tuş vuruşları için istediğiniz kadar eylem belirtmenize izin verir.

Bunu kullanarak, kodunuz şöyle görünecektir:

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

veya daha da okunabilir:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.