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:
printf '\033]2;%s\033\\' 'title goes here'
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
Pindah ke baris terakhir.
dikirim ke terminal dalam harus menjadi
Pindah ke baris terakhir berikutnya.
saat diterjemahkan dan dikirim ke terminal luar. Demikian juga, LF yang dikirim ke terminal dalam harus menjadi
Jika kursor berada di baris berikutnya, gulir baris ini dan semua baris di atasnya ke atas satu baris, untuk memberikan baris berikutnya yang jelas (melindungi baris status di baris terakhir). Jika tidak, kirim LF.
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
- program Anda ( instans Node.js ) memiliki interaksi terminal yang terbatas dengan panel tempat program Anda berjalan (yaitu tidak ada posisi kursor), dan
- Anda tidak mengubah ukuran panel saat program Anda berjalan.
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:
#!/bin/sh
# usage: no_scroll_line top|bottom 'non-scrolling line content' command to run with args
#
# Set up a non-scrolling line at the top (or the bottom) of the
# terminal, write the given text into it, then (in the scrolling
# region) run the given command with its arguments. When the
# command has finished, pause with a prompt and reset the
# scrolling region.
get_size() {
set -- $(stty size)
LINES=$1
COLUMNS=$2
}
set_nonscrolling_line() {
get_size
case "$1" in
t|to|top)
non_scroll_line=0
first_scrolling_line=1
scroll_region="1 $(($LINES - 1))"
;;
b|bo|bot|bott|botto|bottom)
first_scrolling_line=0
scroll_region="0 $(($LINES - 2))"
non_scroll_line="$(($LINES - 1))"
;;
*)
echo 'error: first argument must be "top" or "bottom"'
exit 1
;;
esac
clear
tput csr $scroll_region
tput cup "$non_scroll_line" 0
printf %s "$2"
tput cup "$first_scrolling_line" 0
}
reset_scrolling() {
get_size
clear
tput csr 0 $(($LINES - 1))
}
# Set up the scrolling region and write into the non-scrolling line
set_nonscrolling_line "$1" "$2"
shift 2
# Run something that writes into the scolling region
"$@"
ec=$?
# Reset the scrolling region
printf %s 'Press ENTER to reset scrolling (will clear screen)'
read a_line
reset_scrolling
exit "$ec"
Anda mungkin menggunakannya seperti ini:
tmux split-window '/path/to/no_scroll_line bottom "Node instance foo" node foo.js'
tmux split-window '/path/to/no_scroll_line bottom "Node instance bar" node bar.js'
tmux split-window '/path/to/no_scroll_line bottom "Node instance quux" node quux.js'
Script juga harus luar pekerjaan tmux selama mendukung terminal dan menerbitkan nya csr
dan cup
terminfo kemampuan.