Maiusc + Su non è riconosciuto da Emacs in un terminale


15

Molto spesso uso Shift+ Up/Downper selezionare una regione in Emacs. Funziona bene in modalità GUI, ma quando emacsviene invocato con l' -nwopzione posso selezionare le righe solo con Shift+ Down. Il Shift+ Upnon funziona, visualizzo questo messaggio di errore nel minibuffer:

<select> is undefined

Come posso risolvere questo problema?

Risposte:


13

Un terminale di testo trasmette solo caratteri (più precisamente, byte), non chiavi. Chiavi e tasti di tastiera (tasti con modificatori) sono codificati come sequenze di caratteri. Le chiavi che inseriscono caratteri stampabili vengono inviate come se stesse; i tasti funzione vengono inviati come sequenze di escape. La maggior parte delle sequenze di escape consistono nel carattere Escape ( ?\enella sintassi di Emacs) seguito da due o più caratteri stampabili. Vedi i tasti di controllo e su / giù nel terminale per l'utilizzo da parte di emacs e Come funzionano l'input da tastiera e l'output di testo? per maggiori informazioni.

Emacs ha un meccanismo per tradurre sequenze di escape nella propria nozione di chiavi. La tabella di traduzione input-decode-mapviene inizializzata all'avvio di Emacs (o più precisamente, quando è aperto un nuovo frame: questa variabile ha un valore diverso su ciascun terminale). A volte Emacs non conosce tutte le sequenze di escape inviate dal terminale.

Nel tuo caso, sembra che Emacs abbia un'interpretazione errata per la sequenza di escape inviata da Shift+ Up. Devi dirlo per interpretarlo come S-uppiuttosto che select. Innanzitutto, cerca di capire qual è la sequenza di escape. Nel *scratch*buffer, premere Ctrl+, Qquindi Shift+ Up. Il comando C-qfa sì che il carattere successivo, ovvero il carattere di escape, venga inserito letteralmente, seguito dal resto della sequenza di escape. Diciamo che Shift+ Upinvia \e[1;2Asul nostro sistema, quindi dovrai ridefinire la voce corrispondente in input-mode-map:

(define-key input-decode-map "\e[1;2A" [S-up])

In linea di principio, input-decode-mapdovrebbe essere impostato per terminale. In pratica, è molto raro avere due terminali in cui la stessa sequenza di escape codifica chiavi diverse, quindi un'impostazione globale funzionerà bene.


La tua risposta sembra rispondere alla mia domanda qui: emacs.stackexchange.com/questions/33988 . Are the (define-key ...)i comandi dovrebbero andare in init.el? C'è un esempio dettagliato da qualche parte che posso guardare?
vfclists

I define-keycomandi @vfclists vanno nel tuo file init. Che può essere ~/.emacs.d/init.elo un paio di altre posizioni. Troverai molti esempi di utilizzo della define-keyricerca define-key, ma trovare quale mappa legare è un'altra cosa. Diverse mappe sono coinvolti: global-map, input-decode-map, function-key-map, keyboard-translate-map. Non so come rispondere alla tua domanda perché non conosco Spacemacs. Non consiglio l'uso di pacchetti come Spacemacs che ridefiniscono in modo confuso le interfacce standard.
Gilles 'SO- smetti di essere malvagio' il

Sono passato a emacs regolari per imparare la modalità org e sono riuscito a lavorare input-decode-mapdopo aver trovato alcuni esempi. Posso considerarlo input-decode-mapvalido quando l'utente inserisce del testo in un buffer?
vfclists

@vfclists input-decode-mapè una delle keymap applicabili. Vedi il manuale per i dettagli.
Gilles 'SO- smetti di essere malvagio' il

5

In emacs, la regione è delimitata dal punto (cursore) e dal segno (una posizione precedente del cursore, che è stata "contrassegnata").

Pertanto, per "selezionare una regione", è necessario posizionare quel segno, quindi spostare il punto in giro.

Il modo più semplice per posizionare il segno è premere C-SPC. Quindi basta spostare il cursore, vedrai la "regione" estendersi mentre lo fai.

Per "deselezionare la regione", è possibile premere di C-SPCnuovo.

Poiché "shift + movimento" è una combinazione di tasti comune in altri software, per impostazione predefinita, emula questo comportamento di "selezione regione". Tuttavia, non funziona nel terminale, perché shift non può essere inviato a emacs come tasto modificatore.

Nota che generalmente il C-SPCmetodo è molto più potente di altri metodi per selezionare una regione: non sei limitato a su / giù / sinistra / destra per il movimento (puoi usare la ricerca per esempio ...), e non richiede di mantenere una combinazione di tasti scomoda per lungo tempo.

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.