Maiusc-Spazio in meno


9

Nei moderni browser Web e altri software con contenuti di testo, Spacescorre verso il basso più o meno uno schermo. ShiftSpacescorre in tutto ma less.

Come si può usare ShiftSpaceper scorrere verso l'alto less? O in alternativa, c'è un altro cercapersone (la compatibilità POSIX è il mio unico requisito) che potrebbe fare il lavoro?

Mi è stato detto che alcuni emulatori di terminali e alcune librerie di UI terminali (ncurses?), Non riconoscono ShiftSpace. È un problema valido?


Cosa c'è che non va nel tuo pulsante PgUp ? Non abbastanza grande?
Riccioli d'oro,

@goldilocks: non c'è niente di sbagliato nel voler usare Shift-Space, specialmente se sei abituato ad usarlo con altri strumenti. Sembra semplicemente impossibile lessdistinguere tra Spazio e Maiusc-Spazio.
Keith Thompson,

È possibile configurare il proprio terminale (emulatore) per l'invio bo ^B(0x2) su <shift-Space>. Si noti che bè appena sopra la barra spaziatrice in molte configurazioni di tastiera
Stéphane Chazelas,

@KeithThompson: Spero solo un tocco amichevole. Faccio empatia; Vorrei /universalmente essere adottato come "testo di ricerca" per vari strumenti comuni, ma allo stesso tempo sono diffidente nei confronti di imporre standard meglomaniacali eccessivi che rendono ancora più facile fare qualcosa che può essere fatto con un solo tasto (universalmente riconoscibile). Interessante sapere che in questo caso si tratta di una limitazione tecnica (vedi la risposta di 200_success) e non di un design spudoratamente spiegante.
Riccioli d'oro,

1
@KeithThompson, vedere la translationsrisorsa per il widget VT100.
Stéphane Chazelas,

Risposte:


6

Penso che tu abbia sollevato uno scontro culturale causato da una limitazione tecnica. Poiché Shift+ Spacegenera lo stesso output di Space, il modello di terminale Unix li tratta in modo identico. Per distinguere tra i due, è necessario un ambiente di programmazione che supporti eventi key up / key down. Ciò è possibile in X11 e negli emulatori di terminale che supportano i tasti di rimappatura. Un esempio di rimappatura Shift+ Spacea PageUp:

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~

1
La maggior parte degli emulatori di terminale supporta le chiavi di rimappatura, quindi è possibile farlo con la maggior parte degli emulatori di terminale ( xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'ad esempio in xterm, oppure si invia la stessa sequenza di quella inviata <PageUp>). Naturalmente, ciò renderebbe l'immissione di testo mentre si tiene il tasto MAIUSC scomodo.
Stéphane Chazelas,

1

Negli emulatori di terminale, questa funzione interrompe la digitazione del testo in maiuscolo con spazi incorporati tenendo premuto Maiusc. Ad esempio, se si desidera digitare "It's A Title", è necessario rilasciare Shift tra "A" e "T". Tenendolo premuto, si sposta il cursore e si posiziona erroneamente il resto di ciò che si digita. Credo che sarebbe molto più fastidioso di quello che ottieni con la funzione di scorrimento verso l'alto.

Avere il comportamento regolare durante la digitazione del testo e lo scorrimento verso l'alto ogni volta che Space scorre verso il basso richiederebbe una riprogettazione e una forte collaborazione da parte delle app (ad esempio un'app in grado di attivare o disattivare ciò che Shift + Space invia), sono abbastanza sicuro che non accadrà.

La differenza fondamentale è che un'app GUI conosce il "contesto" sia che tu stia modificando o visualizzando contenuti, che gli emulatori di terminali non hanno modo di saperlo.


1

Gli emulatori di terminale inviano lo stesso carattere su Spacee Shift+Space. In caso contrario, sarebbe imbarazzante digitare il testo mentre si tiene premuto il Shifttasto (vedere la risposta di @ egmont che si espande su tale argomento).

Tuttavia, è possibile aggirare il problema mappando Shift+Spaceuna sequenza di caratteri che finirebbe con l'inserimento di uno spazio per impostazione predefinita e per cui è possibile configurare applicazioni come lessscorrere su tale pressione di tasti.

Ad esempio, una tale sequenza potrebbe essere ` DEL SPC(cambiare il sistema DELin BSsu dove BS è il erasecarattere).

Per xterm, aggiungi la risorsa:

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

E configura lesscon:

printf '%s\n' '#command' '`\177\40 back-screen' | lesskey -

1

lessattualmente non supporta questo, ma sicuramente potrebbe essere aggiunto .

Se un programma utilizza una sequenza di controllo xterm per impostare modifyOtherKeyssu 2 scrivendo \e[>4;2msul terminale, quindi xtermannota i tasti con ulteriori informazioni su quali tasti modificatori sono attivi. In particolare per la Spacechiave, con modifyOtherKeysattivo in xterm, Shift+ Spacesi trasforma in \e[27;2;32~. lessdovrebbe interpretare correttamente questo come Shift+ Spacee quindi attivare uno scorrimento verso l'alto.

Anche se questo funzionerebbe sicuramente in xterm, non funzionerebbe in tutte le applicazioni terminali. Ma quei terminali che non riconoscono l'attivazione di questa sequenza di escape modifyOtherKeysignoreranno semplicemente quella sequenza di escape e continueranno a inviare ai programmi un normale carattere spaziale quando si preme Shift+ Space.

C'è una pagina abbastanza dettagliata sul sito Web xterm che spiega come modifyOtherKeysvengono calcolati i codici: https://invisible-island.net/xterm/modified-keys.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.