moins ne met pas en évidence la recherche

11

Quelque chose est arrivé, je ne vois plus moins de faits saillants. J'ai essayé:

  • en utilisant un terminal différent.
  • en utilisant l' -goption
  • s'assurer qu'il -Gn'y a pas
  • ^ K pendant la recherche
  • ESC-U

Rien n'y fait.

Je travaille dans Ubuntu 12.10 sur un bureau i3. $TERM=screen-256. Lorsque j'utilise ^ ALT 1pour passer à TTY1 et que man manje peux voir qu'il met en évidence à la fois les paramètres de l'homme et les modèles de recherche.

Que puis-je faire d'autre pour y remédier?

majkinetor
la source
1
Qu'est-ce qui a défini la variable TERM sur cette valeur? Utilisez-vous un écran?
Dennis

Réponses:

3

La mise en évidence dans TTY1 fonctionne car elle définit la variable TERM sur une valeur appropriée.

Si vous utilisez l'écran:

Remplacez la variable TERM par une valeur appropriée (par exemple, screen ou screen-256color ). Vérifiez votre ~ / .screenrc personnel ou le fichier / etc / screenrc à l' échelle du système et corrigez la ligne correspondante.

Dans ma version de less, la valeur screen-256 devrait en fait entraîner une erreur:

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

Si vous n'utilisez pas d'écran:

L' écran * n'est interprété correctement que par l'écran.

La valeur correcte pour TERM dépend de votre émulateur de terminal et devrait généralement être définie par celui-ci. La valeur par défaut des trois émulateurs de terminaux pré-installés d'Ubuntu est xterm .

Exécuter

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

la vérification si la valeur de TERM est remplacée dans les fichiers de configuration de votre shell.

Dennis
la source
3
echo $ TERM dans TTY1 ré-exécute «écran-256 couleurs» également. Mais changer TERM en 'xterm' le met à nouveau en évidence.
majkinetor
2

Eh bien, c'est ennuyeux. Qu'est-ce qui se passe ici? (en tmuxdessous iTerm.app)

$ echo test > test ; echo $TERM
screen

puis avec un enregistrement

$ 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 ...

et maintenant nous regardons les codes utilisés

$ 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
$ 

les 1b 5b ...codes peuvent être rendus plus intelligibles en consultant la documentation des séquences de contrôle xterm ou on peut jouer manuellement avec les séquences pour voir quel sous TERM=xtermest à l'origine de la mise en évidence

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

ce que le TERM=screencas ne fait pas, selon les documents de séquences de contrôle qui est un inverse

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

et à proximité de ce document, nous pourrions apprendre que le screenterminal \033[3mest en italique et \033[23m non en italique .

Cette constatation donne quelques options; nous pourrions configurer le terminal pour afficher le texte en italique, ou nous pourrions plutôt essayer de faire en sorte que le screenterminal utilise les codes inverses au lieu de l'italique. (Certains fouilles dans les less(1)documents n'ont montré aucun bouton clair "utiliser l'inverse au lieu de l'italique" pour jouer.) (De plus, certains terminaux peuvent offrir un support pour la traduction de X en Y, consultez les documents du terminal pour plus de détails.) (Ou vous pourriez essayez un autre émulateur de terminal et voyez ce que l'on fait ...)

Wow le texte en italique est moche . Essayons plutôt de changer les codes screenutilisés pour inverser. Cela implique évidemment la base de données terminfo(ou éventuellement termcap), qui peut être exportée via infocmp(1)et compilée partic(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,
$ 

Je suppose donc que le smsoest utilisé étant donné que les xtermutilisations \E[7met screen \E[3m; selon terminfo(5)cela est le "mode hors concours" et est associé à l'inverse rmso; changeons-les en ce qui les xtermutilise ...

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

Hé, ça a l'air mieux maintenant (mais cela devra être fait sur tous les hôtes pour le screenou n'importe quel terminfofichier ...)

branler
la source