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-beforetidak melakukan status-leftsubstitusi-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-shelltelah memiliki kesempatan untuk menjalankan perintahnya.
Kondisi balapan khusus ini sepertinya merupakan motivasi yang bagus untuk memberikan informasi kepada klien / sesi / jendela / pane kepada run-shellperintah. Ada entri TODO tentang mendapatkan if-shelldan run-shellmendukung (opsional?) status_replace()(Yaitu status-leftsubstitusi 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!