Saya pikir ini dekat dengan yang Anda inginkan:
bind-key X confirm-before -p "Kill #S (y/n)?" "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'"
Pendekatan # 3 Anda adalah di sepanjang garis yang benar, tetapi masalahnya adalah bahwa confirm-before
tidak melakukan status-left
substitusi-gaya (misalnya #S
) dalam string perintahnya.
Peringatan untuk pengikatan di atas adalah bahwa karena semuanya dilakukan run-shell
, perintah dijalankan di luar konteks klien atau sesi tertentu. Ini benar-benar hanya berfungsi karena klien "default" (untuk switch-client
) dan "default" (untuk #S
) adalah yang paling aktif. Ini berfungsi seperti yang Anda harapkan selama Anda hanya memiliki satu klien aktif (mis. Satu pengguna yang tidak mengetik ke klien tmux lain sampai setelah perintah shell selesai berjalan); itu bisa gagal secara dramatis jika (misalnya) Anda memicu pengikatan di klien tmux A, tetapi input baru diterima oleh klien tmux B sebelum shell dimulai oleh run-shell
telah memiliki kesempatan untuk menjalankan perintahnya.
Kondisi balapan khusus ini sepertinya merupakan motivasi yang bagus untuk memberikan informasi kepada klien / sesi / jendela / pane kepada run-shell
perintah. Ada entri TODO tentang mendapatkan if-shell
dan run-shell
mendukung (opsional?) status_replace()
(Yaitu status-left
substitusi gaya), meskipun mungkin pilihan yang lebih baik adalah format_expand()
, yang merupakan jenis perangkat super baru status_replace
(penawaran #{client_tty}
, dll.).
tmux display-message -p "#S"
trik di jawaban lain. Sepertinya membungkus semuanya dalam run-shell adalah kuncinya. Terima kasih!