Shift-Space in weniger

8

SpaceScrollt in modernen Webbrowsern und anderer Software mit Textinhalten mehr oder weniger einen Bildschirm nach unten. ShiftSpacescrollt in allem aber hoch less.

Wie kann man ShiftSpacenach oben scrollen less? Oder gibt es alternativ einen anderen Pager (POSIX-Kompatibilität ist meine einzige Voraussetzung), der die Aufgabe übernehmen könnte?

Mir wurde gesagt, dass einige Terminalemulatoren und einige Terminal-UI-Bibliotheken (ncurses?) Nicht erkennen ShiftSpace. Ist das ein gültiges Problem?

Orpheus
quelle
Was ist los mit deiner PgUp- Schaltfläche? Nicht groß genug?
Goldlöckchen
@goldilocks: Es ist nichts Falsches daran, Shift-Space verwenden zu wollen , besonders wenn Sie es gewohnt sind, es mit anderen Tools zu verwenden. Es ist einfach unmöglich less, zwischen Space und Shift-Space zu unterscheiden.
Keith Thompson
Sie können Ihr Terminal (Emulator) für das Senden boder ^B(0x2) konfigurieren <shift-Space>. Beachten Sie, dass bin vielen Tastaturkonfigurationen direkt über der Leertaste steht
Stéphane Chazelas
@ KeithThompson: Nur ein freundlicher Halse, hoffe ich. Ich kann mich einfühlen. Ich möchte /allgemein als "Suchtext" für verschiedene gängige Tools verwendet werden, bin aber gleichzeitig vorsichtig, übermäßige meglomanische Standards einzuführen, die es noch einfacher machen, etwas zu tun, das ohnehin mit einem (allgemein erkennbaren) Tastendruck möglich ist. Interessant zu erfahren, dass es sich in diesem Fall um eine technische Einschränkung (siehe Antwort von 200_success) und nicht um ein kurzes Design handelt, das dies erklärt.
Goldlöckchen
1
@KeithThompson, siehe die translationsRessource für das VT100-Widget.
Stéphane Chazelas

Antworten:

6

Ich denke, Sie haben einen Kulturkampf ausgelöst, der durch eine technische Einschränkung verursacht wurde. Da Shift+ Spacedieselbe Ausgabe wie erzeugt Space, werden sie vom Unix-Terminalmodell identisch behandelt. Um zwischen beiden zu unterscheiden, benötigen Sie eine Programmierumgebung, die Key-Up / Key-Down-Ereignisse unterstützt. Dies ist in X11 und in Terminalemulatoren möglich, die das Neuzuordnen von Schlüsseln unterstützen. Ein Beispiel für die Neuzuordnung von Shift+ Spacezu PageUp:

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~
200_Erfolg
quelle
1
Die meisten Terminalemulatoren unterstützen das Neuzuordnen von Schlüsseln, daher ist dies mit den meisten Terminalemulatoren möglich ( xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'z. B. in xterm oder Sie senden dieselbe Sequenz wie beim Senden <PageUp>). Dies würde natürlich die Eingabe von Text bei gedrückter Umschalttaste erschweren.
Stéphane Chazelas
1

In Terminalemulatoren würde diese Funktion die Eingabe von Großbuchstaben mit eingebetteten Leerzeichen unterbrechen, indem die Umschalttaste gedrückt gehalten wird. Wenn Sie beispielsweise "It's A Title" eingeben möchten, müssen Sie die Umschalttaste zwischen "A" und "T" freigeben. Wenn Sie die Taste gedrückt halten, wird der Cursor wegbewegt und der Rest Ihrer Eingabe wird falsch positioniert. Ich glaube, es wäre viel ärgerlicher als das, was Sie mit der Bildlauffunktion gewinnen.

Das normale Verhalten beim Eingeben von Text und das Scrollen nach oben, wenn Space nach unten scrollt, würde ein Redesign und eine intensive Zusammenarbeit von Apps erfordern (z. B. eine App, die umschalten kann, was Shift + Space sendet). Ich bin mir ziemlich sicher, dass dies nicht passieren wird.

Der Hauptunterschied besteht darin, dass eine GUI-App den "Kontext" kennt, unabhängig davon, ob Sie Inhalte bearbeiten oder anzeigen. Terminalemulatoren haben keine Möglichkeit, dies zu erkennen.

egmont
quelle
1

Terminalemulatoren senden dasselbe Zeichen auf Spaceund Shift+Space. Wenn dies nicht der Fall wäre, wäre es umständlich, Text bei Shiftgedrückter Taste einzugeben (siehe die Antwort von @ egmont , die dieses Argument erweitert).

Sie können dies jedoch umgehen, indem Sie Shift+Spaceeiner Zeichenfolge zuordnen, die standardmäßig ein Leerzeichen einfügt und für die Sie Anwendungen konfigurieren können less, die bei einem solchen Tastendruck nach oben scrollen möchten.

Zum Beispiel könnte eine solche Sequenz sein ` DEL SPC(ändern Sie das DELin BSauf Systemen, in denen BS das eraseZeichen ist).

Für xterm, fügen Sie die Ressource:

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

Und konfigurieren lessmit:

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

lessunterstützt dies derzeit nicht, könnte aber definitiv hinzugefügt werden .

Wenn ein Programm eine xterm-Steuersequenz verwendet , um modifyOtherKeysdurch Schreiben \e[>4;2min das Terminal auf 2 zu setzen , werden die xtermTasten mit zusätzlichen Informationen darüber versehen, welche Modifizierertasten aktiv sind. Speziell für den SpaceSchlüssel, bei dem modifyOtherKeysin xterm aktiv ist, wird Shift+ Spacezu \e[27;2;32~. lessmüsste dies richtig als Shift+ interpretieren Spaceund dann einen Bildlauf nach oben auslösen.

Während dies definitiv in xterm funktionieren würde, würde es nicht in jeder Terminalanwendung funktionieren. Die Terminals, die diese Escape-Sequenz zum Einschalten nicht erkennen, modifyOtherKeysignorieren diese Escape-Sequenz einfach und senden den Programmen weiterhin ein normales Leerzeichen, wenn Sie Shift+ drücken Space.

Auf der xterm-Website gibt es eine recht detaillierte Seite, auf der erklärt wird, wie modifyOtherKeysCodes berechnet werden: https://invisible-island.net/xterm/modified-keys.html

Andrew
quelle