Di mesin lokal saya, saya memiliki 3 instance node.js yang berjalan secara bersamaan. Masing-masing memiliki panelnya sendiri di jendela tmux yang disebut "server". Masalahnya adalah tidak mudah untuk mengetahui node mana yang berjalan di panel mana, karena log mereka serupa.
Yang saya butuhkan adalah judul untuk setiap panel. Seperti yang saya dapatkan, tmux sendiri tidak memiliki fitur tersebut: ia hanya memiliki judul untuk windows dan bukan untuk panel. Meluncurkan sesi tmux terpisah di dalam setiap panel untuk setiap instance node.js tampak seperti berlebihan.
Jadi, apakah ada program kecil yang menjalankan perintah, membungkus keluarannya dengan bilah status tertentu?
Terima kasih sebelumnya
command-line
title
tmux
pane
Andrey Lushnikov
sumber
sumber
Jawaban:
tmux mendukung judul per panel, tetapi tidak menyediakan lokasi per panel untuk menampilkan judul ini.
Anda dapat menyetel judul panel dengan escape sequence ESC
]2;
… ESC\
(misalnya lihat bagian bernama Names and Titles di halaman manual tmux ). Anda bisa melakukan ini dari cangkang seperti ini:Judul setiap panel secara default menggunakan nama host sistem. Secara default, judul panel aktif ditampilkan di sisi kanan baris status tmux (nilai global default dari variabel sesi
status-right
adalah"#22T" %H:%M %d-%b-%y
, yang menunjukkan 22 karakter dari judul panel, waktu, dan tanggal).Jadi, selama Anda puas dengan kemampuan untuk melihat judul panel aktif (yaitu ingin beralih panel untuk melihat judul panel yang tidak aktif), Anda dapat bertahan dengan fungsionalitas default. Kirimkan saja urutan escape pengaturan judul yang sesuai sebelum memulai perintah utama untuk setiap panel.
Jika Anda benar-benar membutuhkan baris khusus untuk menampilkan beberapa informasi per panel, maka sesi tmux bersarang mungkin tidak terlalu “berlebihan” (tidak perlu) seperti yang mungkin Anda pikirkan sebelumnya.
Dalam kasus umum, untuk menyediakan baris status yang tidak diganggu pada beberapa terminal tertentu, Anda memerlukan emulator (ulang) terminal penuh yang berada di antara terminal asli dan terminal baru (satu dengan satu baris lebih sedikit). Emulasi (ulang) seperti itu diperlukan untuk menerjemahkan urutan kontrol yang dikirim ke terminal dalam dan menerjemahkannya ke terminal asli. Misalnya, untuk mempertahankan baris status di bagian bawah terminal luar, perintahnya
dikirim ke terminal dalam harus menjadi
saat diterjemahkan dan dikirim ke terminal luar. Demikian juga, LF yang dikirim ke terminal dalam harus menjadi
di terminal luar.
Program seperti tmux dan layar hanyalah emulator terminal seperti itu. Tentu, ada banyak fungsi lain yang melingkupi emulator terminal, tetapi Anda akan membutuhkan banyak kode emulasi terminal hanya untuk menyediakan baris status yang dapat diandalkan .
Namun, ada solusi ringan selama
Seperti banyak emulator terminal, tmux mendukung perintah kontrol terminal "set scrolling region" di panelnya. Anda dapat menggunakan perintah ini untuk membatasi wilayah gulir ke baris N-1 atas (atau bawah) terminal dan menulis semacam teks pengenal contoh ke dalam baris non-gulir.
Pembatasan (tidak ada perintah gerakan kursor yang diperbolehkan, tidak ada pengubahan ukuran) diperlukan karena program yang menghasilkan output (misalnya instance Node.js ) tidak tahu bahwa pengguliran telah dibatasi ke wilayah tertentu. Jika program penghasil keluaran kebetulan memindahkan kursor ke luar wilayah pengguliran, maka keluaran mungkin menjadi kacau. Demikian pula, emulator terminal mungkin secara otomatis menyetel ulang wilayah pengguliran saat terminal diubah ukurannya (jadi "garis non-pengguliran" mungkin akan berakhir dengan pengguliran).
Saya menulis skrip yang digunakan
tput
untuk menghasilkan urutan kontrol yang sesuai, menulis ke baris non-gulir, dan menjalankan program setelah memindahkan kursor ke wilayah gulir:Anda mungkin menggunakannya seperti ini:
Script juga harus luar pekerjaan tmux selama mendukung terminal dan menerbitkan nya
csr
dancup
terminfo kemampuan.sumber
tput
untuk menyertakan urutan kontrol yang sesuai dalam argumen "konten baris". Dengan sebagian besar terminal, Anda dapat membuat jalur menjadi "cyan (6) dan hijau (3) di magenta (5)" denganno_scroll_line top "$(tput setaf 6; tput setab 5)Node: $(tput setaf 3)foo$(tput op)" node foo.js
.setaf
set latar depan,setab
set latar belakang,op
setel ulang ke warna default terminal. Kemampuan warna mengambil angka dari 0–7, 0–15, 0–87, atau 0–255, bergantung pada emulasi terminal Anda.Fungsionalitas ini telah ditambahkan ke tmux dalam komit ini . Ini tidak dalam versi 2.2, tapi sepertinya akan di versi 2.3.
Untuk mengaktifkannya:
atau jika Anda lebih suka:
Untuk mengatur teks kustom sebagai baris status perbatasan panel, Anda dapat menggunakan
pane-border-format
, misalnya seperti:sumber
tmux
Anda memerlukan beberapa perintah di luartmux
untuk mengubahnya. Baik? Atau apakah ada urutan di dalamnya yang dapat memperbaruinya?pane-border-format
untuk menyetel string format kustom untuk panel yang akan ditampilkan (#{...}
format biasa ). Saya telah mengedit jawaban Anda untuk memasukkan ini.Karena
tmux 2.6
Anda bisa melakukan:Anda dapat melihat judul per panel di bilah status dengan:
Nonaktifkan bilah status dengan:
sumber
cd $HOME
, judul diubah menjadi nilai$HOME
. (Saya melihat ini di tmux 2.8.)set-window-option automatic-rename off
.set-option -g allow-rename off
di.tmux.conf
file saya .pane-border-format
dan variabel yang disediakan pengguna (saya tidak yakin apakah ada nama resmi untuk fitur ini) untuk mengontrol apa yang ditampilkan. Berikut contohnya.Saya sedang mengerjakan panel status bar untuk tmux - tiket. Cabang pengembangan saya dapat ditemukan di sini di github: https://github.com/jonathanslenders/tmux
Sekarang, ini sudah menambahkan perintah "judul" rename-pane yang berfungsi . Masih ada beberapa bug, dan API akan meningkat. Idenya adalah membuat bilah status per panel, yang dapat memiliki beberapa pemformatan, seperti bilah status sesi. Seperti tmux lainnya, semuanya harus dapat ditulis dan disesuaikan. Setelah selesai dan stabil, ini mungkin akan dimasukkan ke dalam tmux resmi.
sumber
Saya menggunakan tmux versi 2.3, saya pikir gaya border tidak didukung di versi sebelumnya. inilah yang berhasil untuk saya:
Untuk setiap panel atur judul:
Kemudian:
sumber
select-pane -T "my title"
lakukan ini. Anda bahkan dapat mengatur pengikatan kunci sehingga Anda hanya perlu memberikan judulnya:bind-key T command-prompt -p "New title:" 'select-pane -T "%%"'
pane-border-status
opsi disetel ke sesuatu (top
ataubottom
).GIF memiliki arti ribuan kata. ( sumber )
tmux-xpanes adalah pembagi terminal berbasis tmux, yang mendukung tampilan judul untuk setiap panel melalui opsi yang baru ditambahkan
-t
.sumber
Ya ada perintah seperti:
tmux
. Beri nama sesi Anda dan itu akan ditampilkan di bilah status bagian dalam:sumber
Ini tidak membantu dalam jangka pendek, tetapi ada permintaan fitur untuk judul per panel di tmux: http://sourceforge.net/tracker/?func=detail&aid=3495916&group_id=200378&atid=973265#
Sementara itu, seperti yang disebutkan orang lain, tmux bersarang berfungsi dengan baik.
sumber
TL; DR
Tambahkan konfigurasi berikut ke file konfigurasi tmux Anda (dalam kasus saya adalah
~/.tmux.conf.local
)lalu lari:
bersenang senang lah
Terima kasih untuk https://stackoverflow.com/a/37602055/5121972
sumber