Dokumentacja na temat zmiennych LESS_TERMCAP_ *?


Odpowiedzi:


45

Termcap to biblioteka, której Less używa do uzyskiwania dostępu do terminala. Termcap jest w dużej mierze przestarzały, został zastąpiony przez Terminfo , ale Terminfo oferuje aplikacjom interfejs kompatybilności Termcap. Mniej jest treści z interfejsem Termcap i korzysta z niego.

Biblioteka Termcap to opis udogodnień terminalu. Każde urządzenie jest oznaczone dwuliterowym (lub bardziej ogólnie dwuznakowym) kodem. Na przykład hcidentyfikuje terminale drukowane (tj. Drukarki, a nie ekrany); cojest liczbą kolumn; mdzaczyna wyświetlać pogrubiony tekst. Każda zdolność ma wartość, która może być wartością logiczną (jak w przypadku hc), liczbą całkowitą (jak w przypadku co) lub łańcuchem (jak w przypadku md). Wiele ciągów to sekwencje specjalne, które aplikacje mogą wysyłać do terminala w celu osiągnięcia określonego efektu.

Po co uciec sekwencjom? Ponieważ interfejs między terminalem a aplikacją jest strumieniem znaków (a dokładniej jeden strumień znaków w każdym kierunku: jeden do wprowadzania danych przez użytkownika, drugi do wyświetlania danych wyjściowych). Kiedy aplikacja zapisuje znak na terminalu, zwykle jest wyświetlany. Kilka znaków ma inne zachowanie: są to znaki kontrolne, które wykonują takie czynności, jak przesuwanie kursora, przełączanie atrybutów wyświetlania itp. Dostępnych jest znacznie więcej poleceń niż znaków sterujących, więc do większości poleceń można uzyskać sekwencje specjalne, które zaczynają się od postać specjalna (często postać ucieczki, stąd nazwa).

Na przykład, gdy Less chce wyświetlić pogrubiony tekst, sprawdza wartość tej mdmożliwości. Jest to ciąg, który Less zapisuje w terminalu. Terminal rozpoznaje ten ciąg jako sekwencję zmiany znaczenia i dostosowuje jego stan wewnętrzny, aby kolejne znaki były wyświetlane pogrubioną czcionką.

Na początku terminale sprzętowe różne marki miały różne sekwencje ucieczki i możliwości; Baza danych i interfejs Termcap zostały wymyślone, aby aplikacje nie musiały wiedzieć o każdym modelu terminala. Obecnie większość emulatorów terminali ma bardzo podobne możliwości, ale baza danych Termcap lub Terminfo jest nadal przydatna w przypadku niewielkich różnic.

Te LESS_TERMCAP_*zmienne mogą być ustawione w środowisku lub w .lesskeypliku . Zapewnia Less alternatywne wartości dla funkcji terminalu. Kiedy Less chce użyć możliwości terminala, powiedzmy przełącz na pogrubienie, najpierw sprawdza, czy istnieje LESS_TERMCAP_mdzmienna. Jeśli ta zmienna istnieje, Less wykorzystuje swoją wartość jako sekwencję zmiany znaczenia do przejścia na pogrubioną. Jeśli nie, używa wartości z bazy danych Termcap. Ten mechanizm pozwala użytkownikowi zastąpić ustawienia bazy danych Termcap dla Less.

Najbardziej przydatne LESS_TERMCAP_*ustawienia to sekwencje specjalne. Możesz mapować atrybuty na różne atrybuty. Można użyć tputpolecenia, aby spojrzeć na wartość zdolności do bieżącego terminala w systemie za termcap lub terminfo bazy danych. Możesz użyć sekwencji ucieczki bezpośrednio, jeśli nie masz nic przeciwko uzależnieniu od terminala. Na przykład to ustawienie mówi Lessowi, aby wyświetlało się pogrubioną czerwoną czcionką, gdy pojawi się polecenie pogrubienia:

LESS_TERMCAP_md=$(tput md; tput AF 1)

lub jeśli twoje tputpolecenie nie obsługuje nazw Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

Mężczyzna wysyła Mniej tekstu z bardzo prostym formatowaniem, które może wyrażać tylko pogrubienie i kursywę. Ponadto Less używa różnych możliwości formatowania do użytku wewnętrznego, takich jak podświetlanie wyników wyszukiwania i wyświetlanie linii trybu na dole. Oto niektóre sekwencje specjalne, których używa Less (wymieniam tylko te możliwości, których mapowanie jest uzasadnione):

termcap terminfo  
ks      smkx      make the keypad send commands
ke      rmkx      make the keypad send digits
vb      flash     emit visual bell
mb      blink     start blink
md      bold      start bold
me      sgr0      turn off bold, blink and underline
so      smso      start standout (reverse video)
se      rmso      stop standout
us      smul      start underline
ue      rmul      stop underline

Aby wyświetlić wydruki w kolorze, skorzystaj z setafmożliwości (lub AFz Termcap).

Te LESS_TERMCAP_*ustawienia nie są wymienione w LESSdokumentacji. Najlepszą referencją, jaką mogę zaoferować, jest moja odpowiedź tutaj .


8
Dzięki. Spojrzałem również krótko na kod źródłowy less i odkryłem, że kiedy ustawisz LESS_TERMCAP_DEBUG na coś, a następnie otworzysz man, zobaczysz coś w rodzaju źródła stron man, aw nim wszystkie użyte tagi możliwości. Ułatwia decydowanie o tym, co chcesz ustawić.
anselm

1
Zobacz tę odpowiedź na temat ustawiania wszystkich LESS_TERMCAP_*zmiennych env za pomocą tputzamiast znaków zmiany znaczenia.
Kaushal Modi,

3

Odpowiedź Gillesa jest doskonała, ale mnie to zaciekawiło:

Termcap jest w dużej mierze przestarzały, zastąpiony przez Terminfo

  1. Jeśli Termcap jest przestarzały, chcę przejść na Terminfo

  2. Chcę również zrezygnować z Termcap, ponieważ znalazłem błąd. Załóżmy, że umieściłeś zmienną termcap w swoim ~/.profilelub podobnym:

    export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
    export LESS_TERMCAP_se=$(printf '\33[m')
    

    Następnie, jeśli wejdziesz set, zmienne Termcap zepsują wydruk w kolorze.

Aby przełączyć się na Terminfo, możesz utworzyć plik xterm-pretty.ti:

xterm-pretty|xterm with pretty colors,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

Skompiluj i zainstaluj plik:

tic xterm-pretty.ti

Dodaj wiersz ~/.profilelub podobny:

TERM=xterm-pretty
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.