Bagaimana saya bisa mengikat beberapa perintah tmux ke satu penekanan tombol?

13

Secara khusus saya mencoba memberikan pemberitahuan setelah beberapa perintah selesai. Jadi, misalnya, jika saya memuat ulang file konfigurasi saya, saya ingin memiliki beberapa konfirmasi bahwa itu berfungsi, yang mungkin dilakukan seperti ini:

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

Itu , bagaimanapun, tidak bekerja. Juga tidak ada hal lain yang saya coba sebagai cara merangkai perintah bersama.

iconoclast
sumber
1
Ini berfungsi untuk saya (tmux 1.3 pada Debian squeeze) dengan \;sebagai pemisah.
Gilles 'SANGAT berhenti menjadi jahat'
1
Oke, saya temukan itu \; melakukan pekerjaan, dan itu adalah esensi dari jawaban saya memilih di bawah ini. Entah bagaimana saya menguji \; terlalu cepat dan memastikan itu tidak berhasil. Tetapi saya meninggalkan pertanyaan ini di sini karena masih berfungsi untuk menjawab pertanyaan tentang bagaimana melakukan ini.
iconoclast

Jawaban:

12

Anda bisa menggunakan run-shellopsi , tetapi yang terpenting adalah memisahkan perintah dengan\;

Dalam hal ini, sesuatu seperti:

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

run-shell shell-command
(alias: run)
Jalankan shell-command di latar belakang tanpa membuat jendela. Setelah selesai, output apa pun ke stdout ditampilkan dalam mode salin. Jika perintah tidak mengembalikan kesuksesan, status keluar juga ditampilkan.

jasonwryan
sumber
Hei, terima kasih atas jawabannya. Saya belum mengujinya secara khusus, tetapi saya pikir itu tidak akan berhasil, karena saya menguji kode dalam pertanyaan saya dengan \; dan itu hanya menjalankan perintah kedua tetapi bukan yang pertama. Dan saya tidak tahu mengapa run-shell akan bekerja tetapi tampilan-pesan tidak.
iconoclast
1
Oke, saya sudah mencoba menguji solusi Anda dan tmux terus mengunci, tampaknya (meskipun tidak dengan kepastian mutlak) dari perintah itu. Saya akan terus berusaha, tetapi saya cukup yakin itu tidak akan berhasil ...
iconoclast
Ini bekerja pada tmux 1.4. Apakah "mengunci" berarti "mode salin" - yaitu dengan desain ...
jasonwryan
oke, saya berhasil, tanpa mengunci tmux. Itu meninggalkan saya dengan pertanyaan mengapa upaya awal saya untuk menggunakan \; tidak bekerja:
iconoclast
1
Inti dari jawaban Anda adalah menggunakan \; - bagian tentang run-shell tidak terlalu penting, dan saya pikir untuk contoh yang saya berikan tampilan-pesan jauh lebih baik. Jadi saya memilih jawaban Anda daripada jawaban saya, tetapi maukah Anda mengedit jawaban itu sehingga tidak menyesatkan atau membingungkan orang lain. Terima kasih!
iconoclast
4

Tepat setelah menyusun pertanyaan saya, saya memikirkan sesuatu yang mungkin berhasil. Saya mencobanya dan berfungsi, Anda hanya perlu memasang beberapa file untuk konfigurasi tmux Anda.

Inilah solusinya, khususnya yang berkaitan dengan memuat ulang konfigurasi Anda. Dalam file .tmux.conf Anda, masukkan sesuatu seperti ini:

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

Dalam file ~ / .tmux / reload.tmux masukkan sesuatu seperti berikut:

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

Ini bekerja dengan sempurna.

iconoclast
sumber
1
Ini sebenarnya SATU-SATUNYA cara kerjanya. Segala sesuatu yang lain di sini tidak berfungsi.
lzap
Benarkah? ... Sudah lama sejak saya menguji pendekatan yang lain, tapi saya akan terkejut jika tmux merusaknya. Jika Anda benar-benar yakin itu tidak berhasil, maka saya akan menguji lagi dan mungkin menerima jawaban ini sebagai gantinya.
iconoclast
Ya saya minta maaf, jawaban di atas benar-benar berfungsi :-)
lzap
1

Menggunakan metode run-shell menempatkan output ke dalam buffer copy yang membutuhkan pembersihan secara manual. Menggunakan file konfigurasi menengah menambah overhead mempertahankan file konfigurasi kedua. Menggabungkan kedua jawaban berfungsi lebih baik dalam kasus saya, karena saya ingin pesan menghilang setelah interval pendek, mirip dengan kotak dialog pop-up di GUI, tetapi menyimpan semua yang terkandung dalam satu file.

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

Ada tambalan yang memungkinkan skrip lengkap di dalam tmux, melampirkan bahasa tcl ke internalnya.

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

Selain itu, memungkinkan untuk menentukan tindakan sebanyak yang Anda inginkan untuk penekanan tombol 'mode'.

Dengan menggunakan itu, kode Anda akan terlihat seperti:

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

atau bahkan lebih mudah dibaca:

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