Come posso inviare C- / (ovvero control-slash) al terminale?


13

Sto cercando di far funzionare Emacs in un terminale. Ho attivato l'opzione "usa opzione come meta" nelle preferenze del terminale e quindi funziona circa al 95%.

La sequenza di tasti ctrl- / (o nella notazione Emacs C- /) è "annulla". Questa sequenza di tasti fa semplicemente suonare il terminale a un campanello. Come posso risolvere questo problema?


FWIW, funziona su iTerm2 - iterm2.com - ma penso che mi limiterò a riutilizzarmi per usare ^ _ ovunque, per essere più portatile.
Steven R. Loomis,

@ StevenR.Loomis portatile? né control- / né control-_ funzionano con Android ...
Michael,

@Michael Ho detto portatile perché è rappresentabile in ASCII (vedi risposta accettata) e quindi può transitare senza problemi connessioni di rete. Inoltre, sembra essere utilizzabile sulla maggior parte delle tastiere fisiche che ho visto. Non ho provato ad associare una tastiera al dispositivo Android, ti riferisci a una tastiera morbida o dura?
Steven R. Loomis,

Software @ StevenR.Loomis ... la parte di controllo sembra essere ignorata con conseguente tentativo di annullare l'inserimento di una barra o di un trattino basso.
Michael,

Risposte:


19

Control- /non fa parte del set di codici di controllo standard . Non è direttamente rappresentabile come una sequenza di tasti in molte emulazioni terminali. Una tale sequenza di tasti è rilevabile correttamente solo in determinate "modalità scancode" o "modalità GUI" specifiche della piattaforma (in cui l'API indica esattamente quali chiavi e modificatori vengono utilizzati). L'emulatore di terminale emette un segnale acustico perché è effettivamente una sequenza di tasti non valida.

I codici di controllo standard riguardano solo le versioni "Control" di

  • @ A- Z [\]^_(ASCII 0 - 31) e
  • ? (ASCII 127)

Nella maggior parte dei programmi di emulazione di terminale in esecuzione con la maggior parte dei layout di tasti statunitensi potrebbe essere necessario premere Shiftper generare alcuni dei "Codici di controllo":

  • C- @ è ControlShift2(poiché @è Shift2)
  • C- ^ è ControlShift6(poiché ^è Shift6)
  • C-_ è ControlShift-(poiché _è Shift-)
  • Tuttavia, C-? potrebbe non essere sempre ControlShift/(dal momento che ?è Shift/); C-? di solito viene generato da Backspace(sulle tastiere Apple, il tasto etichettato "elimina" senza il simbolo aggiuntivo ⌦) o Delete(quello con ⌦ sulle tastiere Apple).

In Emacs basato su tty, di solito puoi usare C-_ undoinvece di C- /.


1
Grazie per la risposta esaustiva. Proverò a giocare con diversi tipi di terminali per vedere se riesco a farlo funzionare.
Kevin Peterson,

1
"Diversi tipi di terminali"? Intendi programmi di emulazione di terminale diversi o ti riferisci al valore $ TERM, che in Terminale è impostato tramite Terminale> Preferenze> Impostazioni> [profilo]> Avanzate> Dichiara terminale come ? (Tutta quella preferenza fa è impostare il valore di $ TERM. Non cambia il funzionamento dell'emulazione del terminale.) Control- / è una funzione di X11 e non è supportata da Cocoa o Terminal.
Chris Page

5

Ctrl- / invia 0x1f che equivale a Ctrl-_ dai giorni di VT102. Esistono molti emulatori VT100 ma in realtà sono emulatori VT102. iTerm2 funziona perché segue questo comportamento.

Solo gli emulatori che sono strettamente conformi alle specifiche VT100 non possono inviare Ctrl- /. Credo che l'app Terminal sia una di queste.

VT100 maschera 2 bit più significativi di 7 bit ASCII quando viene premuto il tasto di controllo. / è 0x2f, o è 0x6f. Quando i 2 bit sono mascherati, sono entrambi 0x0f. VT100 può inviare Ctrl-o ma non Ctrl- /.


Questa dovrebbe essere la risposta accettata.
ocodo
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.