Shift-Space en moins

9

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?

Orphée
la source
Quel est le problème avec votre bouton PgUp ? Pas assez grand?
goldilocks
@goldilocks: Il n'y a rien de mal à vouloir utiliser Shift-Space, surtout si vous avez l'habitude de l'utiliser avec d'autres outils. Il est tout simplement impossible de lessfaire la distinction entre l'espace et l'espace-décalage.
Keith Thompson
Vous pouvez configurer votre terminal (émulateur) pour envoyer bou ^B(0x2) sur <shift-Space>. Notez que bc'est juste au-dessus de la barre d'espace dans de nombreuses configurations de clavier
Stéphane Chazelas
@KeithThompson: Juste un jibe amical j'espère. Je sympathise; Je souhaiterais /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.
goldilocks
1
@KeithThompson, voir la translationsressource pour le widget VT100.
Stéphane Chazelas

Réponses:

6

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:

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~
200_success
la source
1
La plupart des émulateurs de terminaux prennent en charge les clés de remappage, il est donc possible de le faire avec la plupart des émulateurs de terminaux ( 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.
Stéphane Chazelas
1

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.

egmont
la source
1

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 lessfaire défiler vers le haut sur une telle touche.

Par exemple, la séquence d'une telle pourrait être ` DEL SPC(changer le DELà BSdes systèmes où BS est le erasecaractère).

Pour xterm, ajoutez la ressource:

XTerm.VT100.translations: #override \
  Shift <KeyPress> space: string("`") string(0x7f) string(" ") 

Et configurez lessavec:

printf '%s\n' '#command' '`\177\40 back-screen' | lesskey -
Stéphane Chazelas
la source
1

lessne 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;2msur le terminal, puis xtermannote les touches avec des informations supplémentaires sur les touches de modification qui sont actives. Spécifiquement pour la Spaceclé, avec modifyOtherKeysactif dans xterm, Shift+ Spacedevient \e[27;2;32~. lessdevrait 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 modifyOtherKeysignoreront 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 modifyOtherKeyscodes sont calculés: https://invisible-island.net/xterm/modified-keys.html

andrew
la source