tmux , bölme başına başlıkları destekler, ancak bu başlıkları görüntülemek için bölme başına bir konum sağlamaz.
Bir bölmenin başlığını ESC ]2;
… ESC kaçış dizisi ile ayarlayabilirsiniz \
(örneğin , tmux kılavuz sayfasındaki İsimler ve Başlıklar adlı bölüme bakın ). Bunu şu şekilde kabuktan yapabilirsiniz:
printf '\033]2;%s\033\\' 'title goes here'
Her bölmenin başlığı varsayılan olarak sistemin ana bilgisayar adıdır. Varsayılan olarak Aktif panelin başlığı sağ tarafında görüntülenen tmux durum satırında (oturum değişkeninin varsayılan küresel değer status-right
olduğunu "#22T" %H:%M %d-%b-%y
, hangi gösterileri bölmenin başlığı, zaman ve tarih 22 karakter).
Bu nedenle, aktif bölmenin başlığını görmekten memnun kaldığınız sürece (yani, etkin olmayan bölmenin başlığını görmek için bölmeleri değiştirmeye istekli olduğunuz), varsayılan işlevsellik ile geçebilirsiniz. Her bölme için ana komutu başlatmadan önce uygun başlık ayarı kaçış sırasını göndermeniz yeterlidir.
Bölme başına bazı bilgileri görüntülemek için kesinlikle özel bir satıra ihtiyacınız varsa, iç içe geçmiş tmux oturumları ilk düşündüğünüz kadar çok (gereksiz) "aşırı" olmayabilir.
Genel durumda, belirli bir terminalde ihlal edilmemiş bir durum satırı sağlamak için, orijinal terminal ile yeni bir terminal (biri daha az hatlı) arasında bulunan tam bir terminal (yeniden) emülatörüne ihtiyacınız olacaktır. İç terminale gönderilen kontrol dizilerini çevirmek ve bunları orijinal terminale çevirmek için bu tür (yeniden) öykünme gereklidir. Örneğin, dış terminalin altında bir durum satırı tutmak için komut
Son satıra git.
iç terminale gönderilen
Son satıra gitme.
dış terminale çevrildiğinde ve gönderildiğinde. Aynı şekilde, iç terminale gönderilen bir LF,
İmleç son satırın yanındaysa, sondan son satıra kadar net bir satır sağlamak için bu satırı ve üzerindeki tüm satırları bir satır yukarı kaydırın (son satırdaki durum satırını korur). Aksi takdirde, bir LF gönderin.
dış terminalde.
Tmux ve screen gibi programlar , sadece bu tür terminal yeniden emülatörlerdir. Elbette, terminal öykünücüsünün etrafına sarılmış birçok başka işlev vardır, ancak yalnızca güvenilir bir durum satırı sağlamak için büyük bir uçbirim öykünme koduna ihtiyacınız olacaktır .
Bununla birlikte, olduğu sürece hafif bir çözüm vardır.
- programlarınız ( Node.js örnekleri) çalıştıkları bölmelerle sınırlı terminal etkileşimlerine sahiptir (yani imleç konumlandırması yoktur) ve
- programlarınız çalışırken bölmeleri yeniden boyutlandırmazsınız.
Birçok uçbirim öykünücüsü gibi tmux , bölmelerinde bir "kaydırma bölgesini ayarla" uçbirim kontrol komutunu destekler. Kaydırma bölgesini terminalin üst (veya alt) N-1 satırlarıyla sınırlamak ve kaydırılmayan satıra bir tür örnek tanımlayıcı metin yazmak için bu komutu kullanabilirsiniz.
Kısıtlamalar (imleç hareket komutlarına izin verilmez, yeniden boyutlandırma yok) gereklidir, çünkü çıktıyı üreten program (örneğin, bir Node.js örneği) kaydırmanın belirli bir bölgeyle sınırlı olduğu konusunda hiçbir fikre sahip değildir. Çıktı üreten program imleci kaydırma bölgesinin dışına hareket ettirdiyse, çıktı bozulabilir. Benzer şekilde, uçbirim öykünücüsü, uçbirim yeniden boyutlandırıldığında büyük olasılıkla kaydırma bölgesini otomatik olarak sıfırlar (bu nedenle, "kaydırılmayan çizgi" muhtemelen kayarak uzaklaşacaktır).
tput
Uygun kontrol dizilerini oluşturmak, kaydırılmayan satıra yazmak ve imleci kaydırma bölgesine taşıdıktan sonra bir program çalıştırmak için kullanan bir komut dosyası yazdım :
#!/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"
Bunu şu şekilde kullanabilirsiniz:
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'
Komut dosyası , terminal kendi ve terminfo yeteneklerini desteklediği ve yayınladığı sürece tmux dışında da çalışmalıdır .csr
cup