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!confirm-before
? Saya mengalami kesulitan untuk melarikan diri dengan benar.bind-key X run-shell 'tmux switch-client -n \; kill-session -t "#S"'
( tmux 1.8+run-shell
mengembang#S
secara langsung, jadi kita bisa menghilangkandisplay-message
dan ekstra mengutip)Untuk berjaga-jaga jika seseorang menemukan pertanyaan ini - tmux-sessionist menyediakan fungsionalitas ini bersama dengan banyak lainnya.
sumber
Ada pertanyaan lain yang menanyakan pertanyaan serupa tetapi sedikit berbeda.
Jika Anda ingin
choose-session
perilaku standar dengan fitur tambahan yang membunuh sesi asli jika tidak ada klien lain yang tetap terikat padanya maka pertanyaan itu mungkin juga menarik.sumber
Memperluas dari jawaban Chris Johnsen (di komentar) di atas, tentang bagaimana melakukannya tanpa cepat atau
confirm-before
:Jika hanya ada 1 sesi yang tersisa (sesi saat ini Anda berada sekarang) dan Anda menjalankan perintah, Anda akan menerima pesan "kesalahan", dan sesi tidak terbunuh. Biasanya (jika Anda seperti saya), Anda ingin perintah untuk tetap membunuh sesi meskipun tidak ada sesi lain yang bisa beralih ke. Jadi inilah yang saya pikirkan:
sumber