Emacs C-. non funziona nel terminale


11

Uso GNU Emacs, di solito come quello emacs -nwche avvia la versione del terminale (al contrario della versione con interfaccia grafica della finestra).

Scrivo documenti scolastici e LaTeXquindi li utilizzo flyspell-modeper il controllo ortografico all'interno di emacs. Funziona bene nella versione GUI, ma in un terminale, ho riscontrato problemi con la sequenza di tasti C-.( Ctrl- .). In un tty, questo non fa nulla, e in terminatoro gnome-terminal, questo semplicemente inserisce un ".".

Cosa posso fare per farlo fare quello che fa nella versione con finestra (mostra suggerimenti ortografici per una parola errata)?

EDIT: In questo caso, sto usando Ubuntu 12.04 con Emacs 23.3.1 (che credo sia predefinito dal repository 12.04).


1
Anch'io. Hai provato Esc- x flyspell-mode? Questo funziona per me.
Masroor,

Beh si. Comincio sempre flyspell-modecon M-x, ma ESC xnon sembra fare la differenza.
cg505,

1
Anch'io. Tuttavia, ho trovato un keybinding predefinito che funziona per entrambe le versioni ESC-TAB.
McNisse,

Sì, ESC TABo M-TABentrambi funzionano per me. Grazie per la punta @McNisse.
cg505,

Risposte:


4

Sembra che la parte importante di questa domanda abbia già ricevuto risposta nei commenti, ma per affrontare la causa principale nel caso in cui tu sia curioso, penso che ctrl-. non funziona in un terminale a causa di alcune limitazioni degli emulatori di terminale. In un terminale standard, viene definito ctrl per inviare il codice ASCII del tasto premuto meno 64 (ecco perché ctrl-J (74) invia newline (10) e ctrl-I (73) invia la scheda (9), ad esempio ). Dato che il codice ASCII del periodo è 46, sottraendo 64 si otterrebbe -18, il che non è valido perché è negativo e non ci sono codici ASCII negativi e quindi nulla da ricevere e comprendere da parte di emacs.

Quando esegui emacs in modalità finestra, il meccanismo dell'emulatore di terminale viene bypassato e invece viene utilizzata la gestione della tastiera più solida di X11, che può gestire sequenze di tasti più oscure (anziché ridurre ogni sequenza di tasti a un carattere ASCII, il programma riceve la chiave originale più tutti i modificatori applicabili, separatamente). Quindi è probabilmente impossibile fare in modo che emacs basato su tty gestisca ctrl-. a meno che non apporti modifiche personalizzate all'emulatore di terminale (e probabilmente anche a emacs).


1
Questa risposta è davvero interessante. Ho scavato più a fondo e ho scoperto che DEC VT100 funziona in modo simile ma in modo diverso, a rigor di termini. Ecco cosa fa quando il tasto di controllo e l'altro tasto vengono premuti insieme: 1) cerca la tabella ASCII tramite il codice di scansione della tastiera 2) cerca la tabella dei codici di controllo validi da ASCII 3) se è valida, maschera bit5 e bit6 di ASCII 4 ) spedito. Quindi ctrl-J, ctrl-j e ctrl- * potrebbero tutti inviare LF ma il controllo di validità ha limitato le combinazioni. Vedere il manuale tecnico DEC VT100 sezione 4-43 (PDF pagina 93).
Kenji Noguchi,

Posso catturare 'C-.'bene con emacs in xterm ma non con urxvt o st. Qualche idea sul perché potrebbe essere così?
StewSquared,

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.