Dans les navigateurs Web modernes et autres logiciels contenant du texte, fait Spacedéfiler plus ou moins un écran. ShiftSpacedéfile dans tout, mais less
.
Comment peut-on utiliser ShiftSpacepour faire défiler vers le haut less
? Ou bien, existe-t-il un autre téléavertisseur (la compatibilité POSIX est ma seule exigence) qui pourrait faire le travail?
On m'a dit que certains émulateurs de terminal et certaines bibliothèques d'interface utilisateur de terminal (ncurses?) Ne reconnaissaient pas ShiftSpace. Est-ce un problème valable?
less
faire la distinction entre l'espace et l'espace-décalage.b
ou^B
(0x2) sur<shift-Space>
. Notez queb
c'est juste au-dessus de la barre d'espace dans de nombreuses configurations de clavier/
que ce texte soit universellement adopté comme "texte de recherche" dans divers outils courants, mais en même temps je me méfie d'imposer des normes mégglomératives excessives qui rendent encore plus facile de faire quelque chose qui peut être fait avec une seule touche (universellement reconnaissable). Il est intéressant d'apprendre que dans ce cas, il s'agit d'une limitation technique (voir la réponse de 200_success) et non d'une conception simple qui explique.translations
ressource pour le widget VT100.Réponses:
Je pense que vous avez soulevé un choc culturel causé par une limitation technique. Puisque Shift+ Spacegénère la même sortie que Space, le modèle de terminal Unix les traite de manière identique. Pour faire la distinction entre les deux, vous avez besoin d'un environnement de programmation qui prend en charge les événements clé haut / bas clé. C'est possible dans X11 et dans les émulateurs de terminaux qui prennent en charge les clés de remappage. Un exemple de remappage de Shift+ Spacevers PageUp:
la source
xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'
dans xterm par exemple, ou vous envoyez la même séquence que celle envoyée<PageUp>
). Bien sûr, cela rendrait la saisie de texte difficile tout en maintenant la touche Maj enfoncée.Dans les émulateurs de terminaux, cette fonctionnalité interromprait la saisie de texte en majuscules avec des espaces intégrés en maintenant la touche Maj enfoncée. Par exemple, si vous voulez taper "It's A Title", vous devez libérer Shift entre "A" et "T". Le maintenir enfoncé éloignerait votre curseur et mal positionner le reste de ce que vous tapez. Je pense que ce serait bien plus ennuyeux que ce que vous gagnez avec la fonction de défilement vers le haut.
Avoir le comportement normal lors de la saisie de texte et faire défiler vers le haut chaque fois que Space défile vers le bas nécessiterait une refonte et une coopération intense de la part des applications (par exemple, une application pouvant basculer ce que Shift + Space envoie), je suis pratiquement certain que cela ne se produira pas.
La principale différence est qu'une application GUI connaît le «contexte» que vous modifiiez ou visualisiez du contenu, les émulateurs de terminaux n'ont aucun moyen de le savoir.
la source
Les émulateurs de terminaux envoient le même caractère sur Spaceet Shift+Space. S'ils ne le faisaient pas, alors il serait difficile de taper du texte tout en maintenant la Shifttouche (voir la réponse de @ egmont qui développe cet argument).
Cependant, vous pouvez contourner cela en mappant Shift+Spacesur une séquence de caractères qui finirait par insérer un espace par défaut, et pour lequel vous pourriez configurer des applications comme
less
faire défiler vers le haut sur une telle touche.Par exemple, la séquence d'une telle pourrait être
`
DEL
SPC
(changer leDEL
àBS
des systèmes où BS est leerase
caractère).Pour
xterm
, ajoutez la ressource:Et configurez
less
avec:la source
less
ne le supporte pas actuellement, mais il pourrait certainement être ajouté .Si un programme utilise une séquence de contrôle xterm pour définir
modifyOtherKeys
à 2 en écrivant\e[>4;2m
sur le terminal, puisxterm
annote les touches avec des informations supplémentaires sur les touches de modification qui sont actives. Spécifiquement pour la Spaceclé, avecmodifyOtherKeys
actif dans xterm, Shift+ Spacedevient\e[27;2;32~
.less
devrait interpréter correctement cela comme Shift+ Space, puis déclencher un défilement vers le haut.Bien que cela fonctionnerait certainement dans xterm, cela ne fonctionnerait pas dans toutes les applications de terminal. Mais les terminaux qui ne reconnaissent pas cette séquence d'échappement à activer
modifyOtherKeys
ignoreront simplement cette séquence d'échappement et continueront d'envoyer aux programmes un caractère d'espace normal lorsque vous appuyez sur Shift+ Space.Il y a une page assez détaillée sur le site Web de xterm qui explique comment les
modifyOtherKeys
codes sont calculés: https://invisible-island.net/xterm/modified-keys.htmlla source