mniej nie wyróżnia wyszukiwania

11

Coś się stało, więc nie widzę już mniej wyróżnień. Próbowałem:

  • za pomocą innego terminala.
  • za pomocą -gopcji
  • upewniając się, że -Gtam nie ma
  • ^ K podczas wyszukiwania
  • ESC-U

Nic nie pomaga.

Pracuję w Ubuntu 12.10 na pulpicie i3. $TERM=screen-256. Kiedy używam ^ ALT 1przełączać się na TTY1 i man manwidzę, że podświetla ono zarówno parametry man, jak i wzorce wyszukiwania.

Co jeszcze mogę zrobić, aby to naprawić?

majkinetor
źródło
1
Co ustawiło zmienną TERM na tę wartość? Czy używasz ekranu?
Dennis

Odpowiedzi:

3

Podświetlanie w TTY1 działa, ponieważ ustawia zmienną TERM na odpowiednią wartość.

Jeśli używasz ekranu:

Zmień zmienną TERM na odpowiednią wartość (np. Screen lub screen-256color ). Sprawdź swoją osobistą ~ / .screenrc lub całym systemie / etc / screenrc i ustalić odpowiednią linię.

W mojej wersji less wartość screen-256 powinna faktycznie skutkować błędem:

WARNING: terminal is not fully functional
-  (press RETURN)

Jeśli nie używasz ekranu:

Ekran * tylko się interpretować poprawnie ekranie.

Prawidłowa wartość TERM zależy od emulatora terminala i zwykle powinna być przez nią ustawiana. Domyślnie trzy wstępnie zainstalowane emulatory terminali Ubuntu to xterm .

Wykonać

grep -R TERM= ~/.* /etc 2> /dev/null

sprawdzenie, czy wartość TERM zostanie przesłonięta w plikach konfiguracyjnych powłoki.

Dennis
źródło
3
echo $ TERM w TTY1 resetuje również 'screen-256 color'. Ale zmiana TERM na „xterm” uwypukla to ponownie.
majkinetor
2

To jest denerwujące. Co tu się dzieje? ( tmuxponiżej iTerm.app)

$ echo test > test ; echo $TERM
screen

a potem z pewnym nagraniem

$ script withscreen
Script started, output file is withscreen
$ less -p test test
... q to quit and then exit the shell session ...

$ script withxterm
Script started, output file is withxterm
$ TERM=xterm less -p test test
... q and exit again ...

a teraz patrzymy na użyte kody

$ grep test withscreen | hexdump -C
00000000  24 20 6c 65 73 73 20 2d  70 20 74 65 73 74 20 74  |$ less -p test t|
00000010  65 73 74 0d 0d 0a 1b 5b  33 6d 74 65 73 74 1b 5b  |est....[3mtest.[|
00000020  32 33 6d 0d 0a 1b 5b 35  3b 31 48 1b 5b 33 6d 74  |23m...[5;1H.[3mt|
00000030  65 73 74 1b 5b 32 33 6d  0d 0a 1b 5b 33 38 3b 31  |est.[23m...[38;1|
00000040  48 1b 5b 33 6d 74 65 73  74 20 28 45 4e 44 29 1b  |H.[3mtest (END).|
00000050  5b 32 33 6d 1b 5b 4b 0d  1b 5b 4b 1b 5b 3f 31 6c  |[23m.[K..[K.[?1l|
00000060  1b 3e 24 20 5e 44 0d 0d  0a                       |.>$ ^D...|
00000069
$ grep test withxterm | hexdump -C
00000000  24 20 54 45 52 4d 3d 78  74 65 72 6d 20 6c 65 73  |$ TERM=xterm les|
00000010  73 20 2d 70 20 74 65 73  74 20 74 65 73 74 0d 0d  |s -p test test..|
00000020  0a 1b 5b 37 6d 74 65 73  74 1b 5b 32 37 6d 0d 0a  |..[7mtest.[27m..|
00000030  1b 5b 35 3b 31 48 1b 5b  37 6d 74 65 73 74 1b 5b  |.[5;1H.[7mtest.[|
00000040  32 37 6d 0d 0a 1b 5b 33  38 3b 31 48 1b 5b 37 6d  |27m...[38;1H.[7m|
00000050  74 65 73 74 20 28 45 4e  44 29 1b 5b 32 37 6d 1b  |test (END).[27m.|
00000060  5b 4b 0d 1b 5b 4b 1b 5b  3f 31 6c 1b 3e 24 20 65  |[K..[K.[?1l.>$ e|
00000070  78 69 74 0d 0d 0a                                 |xit...|
00000076
$ 

to 1b 5b ...kod może być bardziej zrozumiały, po skontaktowaniu się z dokumentacją sekwencje kontrolne xterma lub można bawić około ręcznie z sekwencjami zobaczyć, które pod TERM=xtermpowoduje podświetlenie

$ printf "\033[7mtest\033[27m\n"
test

czego TERM=screennie robi przypadek, zgodnie z dokumentacją sekwencji kontrolnych, co jest odwrotnością

ESC [
     Control Sequence Introducer (CSI  is 0x9b).
...
CSI Pm m  Character Attributes (SGR).
...
            Ps = 7  -> Inverse.
...
            Ps = 2 7  -> Positive (not inverse).

w pobliżu tego dokumentu możemy dowiedzieć się, że screenterminal \033[3mjest pisany \033[23m kursywą, a nie kursywą .

To odkrycie daje pewne opcje; możemy skonfigurować terminal tak, aby wyświetlał tekst kursywą, lub zamiast tego możemy spróbować, aby screenterminal używał kodów odwrotnych zamiast kursywą. (Niektóre kopanie w less(1)dokumentach nie wykazywało żadnych wyraźnych pokręteł „użyj odwrotności zamiast kursywą” do manipulowania.) (Ponadto, niektóre terminale mogą oferować wsparcie dla tłumaczenia X na Y, sprawdź szczegóły w terminalach). (Lub możesz wypróbuj inny emulator terminala i zobacz, co on robi ...)

Wow tekst pisany kursywą jest brzydki . Spróbujmy zamiast tego zmienić screenużywane kody na odwrotne. Dotyczy to oczywiście bazy danych terminfo(lub ewentualnie termcap), którą można wyeksportować infocmp(1)i skompilowaćtic(1)

$ TERM=screen infocmp > ti.screen ; TERM=xterm infocmp > ti.xterm
$ fgrep '\E[7' ti.xterm
        rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
        smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
$ fgrep rev= ti.screen
        nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
$ fgrep '\E[3m' ti.screen
        smso=\E[3m, smul=\E[4m, tbc=\E[3g,
$ 

Więc zgaduję, że smsojest używany, biorąc pod uwagę, że xtermużywa \E[7mi screen \E[3m; zgodnie z terminfo(5)tym jest „trybem wyróżniającym się” i jest sparowany z rewersem rmso; zmieńmy te na to, co xtermwykorzystuje ...

$ TERM=screen infocmp | sed -e 's/smso=[^,]*/smso=\\E[7m/;s/rmso=[^,]*/rmso=\\E[27m/' > foo
$ tic -o ~/.terminfo foo
$ rm foo

Hej, teraz wygląda to lepiej (ale trzeba będzie to zrobić na wszystkich hostach dla pliku screenlub cokolwiek innego terminfo...)

gałązka
źródło