Bir terminalde ekran geri yükleme nasıl yapılandırılır?


10

Terminale / ortama bağlı olarak, aşağıdaki sekansın farklı etkileri vardır:

$ ls
1
2
$ man ls
enter q

Ya geçerli istemin üstünde son görüntülenen man sayfa ekranını görüyorum ya da ls çıktısı ve önceki kabuk çıktısı geri yüklendi. Aynı etki, örneğin vimkabuk üzerinde bir şey yapmak için kullanıldığında ve sonra askıya alındığında da gözlenir .

Fedora 19'da - varsayılan ekran geri yükleme yok gibi görünüyor, bir gnome terminali / xterm varsayılan olarak do-restore kullanmaktadır.

Solaris'te kullanılan terminale / terminfo db'ye bağlı gibi görünüyor.

Geri yükleme davranışını farklı sistemler / terminaller arasında tutarlı bir şekilde yapılandırmak istiyorum.


Her zaman GNU ekranını çalıştırırsanız, tutarlı davranışlar elde edersiniz.
jordanm

Yanıtlar:


16

Özellik 'alternatif ekran' olarak adlandırılıyor veya normal ve alternatif ekran arasında geçiş yapıyor gibi görünüyor.

Bir xterm kullanarak keşfedebilirsiniz. Örneğin man man, bir xtermadam yazın ve çıkın. Şimdi Ctrl+ Mouse2 (orta tıklama) -> 'Alternatif ekranı göster' ile alternatif ekrana geçebilirsiniz. Alternatif olarak, xterm kontrol sekanslarını doğrudan girebilirsiniz , örneğin:

$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen

Son iki komut da gnome terminalinde çalışır (muhtemelen diğerlerinde de).

man/ vi/ lessEtc. başlatma temelde soyut bir açık ekran komutu gönderdiklerinde ne olur . Çıkışta (veya askıya alındığında) soyut bir geri yükleme ekranı komutu gönderir. Komutun beton terminal kontrol sekanslarına nasıl tercüme edildiği terminfo veritabanında tanımlanır .

Alternatif ekran değiştirmeyi devre dışı bırak

Tüm terminaller için çalışması gereken, yerel terminfo girişlerini ayarlamak, yani soyut silme / geri yükleme ekran komutlarının eşlemesini kaldırmaktır.

Bunu şu şekilde yapabilirsiniz - geçerli $TERMgiriş için (örneğin Fedora 19'daki gnome terminali için):

$ echo $TERM
xterm-256color
$ infocmp -1 > xterm-256color
$ sed 's/^\(xterm-256color\)|/\1-na|/ ; /smcup\|rmcup/d ' \
    xterm-256color > xterm-256color-na
$ diff -u xterm-256color* 
--- xterm-256color  2013-08-04 16:33:52.041393461 +0200
+++ xterm-256color-na   2013-08-04 16:36:56.829930520 +0200
@@ -1,5 +1,5 @@
 #  Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
-xterm-256color|xterm with 256 colors,
+xterm-256color-na|xterm with 256 colors,
    am,
    bce,
    ccc,
@@ -155,7 +155,6 @@
    rin=\E[%p1%dT,
    rmacs=\E(B,
    rmam=\E[?7l,
-   rmcup=\E[?1049l,
    rmir=\E[4l,
    rmkx=\E[?1l\E>,
    rmm=\E[?1034l,
@@ -170,7 +169,6 @@
    sgr0=\E(B\E[m,
    smacs=\E(0,
    smam=\E[?7h,
-   smcup=\E[?1049h,
    smir=\E[4h,
    smkx=\E[?1h\E=,
    smm=\E[?1034h,
$ tic xterm-256color-na # loads the file to $HOME/.terminfo
$ find ~/.terminfo -type f
$ HOME/.terminfo/x/xterm-256color-na

Şimdi test edebilirsiniz:

$ TERM=xterm-256color-na man man # and then hit q

Birden çok terminal kullanıyorsanız yukarıdaki adımları diğer terminaller için tekrarlayabilirsiniz. Her şey beklendiği gibi çalışırsa TERM, kabuk rc dosyanız aracılığıyla ayarlayabilirsiniz .

Ayrıca, terminal adını parametre olarak doğrudan belirtebilirsiniz infocmp, örneğin:

$ infocmp -1 screen > screen

Alternatif ekran değiştirmeyi etkinleştir

Bazı terminaller alternatif ekran değiştirme özelliğini (örn. Ekran ) destekler, ancak varsayılan olarak devre dışı bırakır .

Bunun için screenaşağıdakileri kullanarak etkinleştirebilirsiniz ~/.screenrc:

$ cat ~/.screenrc
altscreen

Ssh to - diyelim ki - bir Solaris sistemi uzaktan uzaktan yapılandırılmış sistem çapında terminfo veritabanı belki de tarihi, bozuk veya 'kanayan kenar' terminallerine uymayan bazı olağandışı / Solaris'e özgü varsayılanlar içeriyorsa ssh koştun.

Bu nedenle, sadece yerel terminfo veritabanını / usr / share / info'den (istemcide) host:~/.terminfo(sunucuda) kopyalamak bir seçenektir .

Derlenen terminfo formatının uyumlu olmaması durumunda, önceki paragrafta olduğu gibi girişleri de dışa / içe aktarabilirsiniz.

Ben bir Cygwin kurulum bir terminfo-db ile denedim ve doğrudan bir Solaris 10 sistemine kopyalama çalıştı.

Kullanıcılar arasında alternatif bir terminfo db paylaşmak istiyorsanız, yolunu TERMINFOortam değişkeni üzerinden belirtirsiniz .

Kontrol Sırasını Yoksay

Bazı terminaller, alternatif ekran geçişi için kontrol dizisinin devre dışı bırakılmasını destekler. Örneğin, xterm'in bir seçeneği vardır, gnome terminali yoktur.

Xterm için X kaynağıdır , ör.

XTerm*titeInhibit: true

Programa özel yapılandırmalar

Bazı programlarda, gönderdikleri denetim sırası / terminfo komutlarını yapılandırmak için yapılandırma dosyaları bulunur. Örneğin

$ LESS=X less foo

lessekranı temizlemeyecek / geri yüklemeyecek şekilde yapılandırır .

Çünkü şöyle bir vimşey ekleyebilirsiniz

set t_ti= t_te=

senin içinde ~/.vimrc.

Bu davranışı en üst için nasıl yapılandıracağım seçeneğinde bulamadım - varsayılan olarak geri yükleme ekranı göndermez.


Sed cmd aslında smcupveya içeren tüm satırı siler rmcup. Benim durumumda, onlarla aynı hatta gelen başka şeyler var. Bu diğer şeyler de silindi. Yani belki böyle bir şey s/[sr]mcup=[^,]*,//'daha iyidir.
Mingliang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.