Come rimuovere i collegamenti alla chiave del prefisso ESC


9

Vorrei usare la ESCchiave anziché C-gper keyboard-quit. Il mio approccio ingenuo è semplicemente fare

(define-key global-map (kbd "ESC") 'keyboard-quit)

non funziona. ESCè ancora un tasto prefisso e premendolo non si chiama keyboard-quit.


1
Potresti essere interessato a questo thread correlato: ho usato quella soluzione per circa un anno fino a quando non mi sono abituato a Cg ed ESC-ESC-ESC: Come usare <escape> (in modo condizionale) come chiave modificatore stackoverflow.com/a/20036348/ 2112489 La risposta di Stefan in quel thread correlato è lo stesso concetto usato da universal-argumentcon il universal-argument-map.
elenco delle leggi

Risposte:


8

Si può fare (define-key key-translation-map (kbd "ESC") (kbd "C-g")). Ho fatto lo stesso molto tempo fa e non ho avuto problemi.

Modifica per migliorare la risposta in base ai commenti:

Se vuoi mantenere la ESCfunzionalità chiave, puoi farlo

(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))

Una cosa da notare è che se Emacs si blocca è comunque necessario utilizzare la C-gchiave per qualche motivo, ma ciò accade raramente.


1
@EmacsUser Anche se non ho mai premuto ESC mentre utilizzo emacs?
Geier,

1
@EmacsUser: Quindi? A partire da ora, non ho mai premuto ESC una volta, figuriamoci due o tre volte. Non mi mancherà.
Geier,

2
@EmacsUser Non sto dicendo che questa è la risposta corretta e che voglio usarla, voglio solo capire cosa c'è che non va. L'intero "in futuro, non sarai in grado di premere ESC due volte" non mi riguarda affatto. Se mi dici in quali condizioni potrei entrare in un ciclo infinito con questo e perché, sarebbe davvero perspicace.
Geier,

1
@Geier Ho usato questo rimappatura per molto tempo e non ho mai riscontrato alcun problema. L'unica cosa è che se emacs si blocca, devi premere C-gper sbloccarlo, il ESCremapping non funziona in questo caso.
clemera,

1
@EmacsUser Non ho mai avuto un caso d'uso, ESCquindi questo non mi ha disturbato. Ma se ne hai bisogno puoi fare un'altra traduzione, ad esempio(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
clemera,

8

Il mio consiglio sarebbe di lasciar ESCperdere, perché è una chiave speciale.

Per impostazione predefinita, Emacs utilizza ESC(ASCII 27) come meta-prefix-key. Dal manuale Elisp:

'esc-map' è la keymap globale per la chiave prefisso. Pertanto, le definizioni globali di tutti i meta-personaggi si trovano effettivamente qui. Questa mappa è anche la definizione della funzione di "prefisso ESC".

e

Invece, i meta-personaggi sono considerati ai fini della ricerca chiave come sequenze di due caratteri, il primo dei quali è ESC (o qualunque sia attualmente il valore di 'meta-prefisso-char'). Pertanto, la chiave 'M-a' è rappresentata internamente come 'ESC a', e il suo legame globale si trova nello slot per 'a' in 'esc-map'.

Quindi, per usare ESC per qualcos'altro dovresti impostare meta-pefix-keyqualcos'altro e anche associare qualche altra chiave a ESC-prefix. Potrebbero essere necessari anche altri cambiamenti: non l'ho mai provato.

Per ulteriori informazioni meta-prefix-char, consultare Funzioni per la ricerca dei tasti nel manuale Elisp.


1
+1. Evitare Non rimuovere l'associazione di ESC. Associa un'altra chiave a keyboard-quit, se vuoi. E tieni presente che ESC ESC ESCti dà già il comportamento di fuga che desideri: consulta il manuale di Emacs, nodo Esci .
Estratto il

2
L'impostazione meta-prefix-chardi nilsu su OSX non lo disabiliterà come chiave prefisso, ma lo separerà solo dalla meta chiave. Su OSX con una versione grafica di Emacs, mi piace avere la chiave di escape separata dalla meta-chiave - ho impostato (setq meta-prefix-char nil)all'inizio della mia inizializzazione in modo che tutte le librerie caricate successivamente capiscano che è quello che voglio. Questo mi dà la possibilità di usare la meta chiave come chiave di prefisso e la chiave di escape come chiave di prefisso. Il valore esc-mapè definito a livello di codice C-source all'interno keymap.c. È pensato per essere usato come chiave prefisso.
elenco delle leggi

@lawlist Interessante - quindi mappi meta come esc-mapprefisso per preservare i collegamenti M predefiniti?
Glucas,

Penso che questa sia l'impostazione pertinente su OSX: (setq ns-alternate-modifier 'meta)che rende meta il tasto alt sinistro sulla tastiera Apple. Mi piace usare il tasto alt destro per creare caratteri unicode usando le impostazioni predefinite OSX: (setq ns-right-alternate-modifier 'none)- per inserire caratteri spagnoli, simboli di paragrafo, ecc. Durante la costruzione --with-ns, sia il tasto alt sinistro che quello destro sono impostati su meta. L'impostazione predefinita lega la chiave di escape alla meta chiave su OSX usando il meta-prefix-char, che è 27come hai detto.
elenco delle leggi

5
Usa emacs, dicono. È estensibile, dicono. Non devi adattarti ad esso, si adatta a te, dicono. Cioè, si adatta a te solo se ti piace sfuggire a una situazione premendo ESC tre volte. Perché qualcuno in passato pensava che ESC fosse un tasto così inaudito (è solo nell'angolo in alto a sinistra di ogni tastiera) che è meglio legarlo con il tasto Meta :-(.
Geier 15-15

1

Bella risposta qui: https://superuser.com/a/945245/624661

citando:

Puoi usarlo nel tuo file init di Emacs:

;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)

0

Non si vuole vincolare [escape], (kbd "ESC")come mostrano gli attacchi a cui fa riferimento Ole . Disponibile, funzionerà solo se emacs frame in un sistema a finestre. Penso che questo valga un po 'di spiegazione.

(kdb "ESC")significa in realtà il carattere di controllo ASCII ESC, e come ha detto Glucas , sicuramente non vorrai rimappare questo. Ma Escnon è ASCII ESC: è un simbolo escape, almeno in un ambiente grafico. Come si verifica che il legame (kbd "ESC")colpisce Escallora? Ciò accade perché emacs si traduce escapein ESC se non è disponibile alcuna associazione perescape . Tipo di fallback se lo si desidera (che viene implementato mediante local-function-key-mapse siete interessati a tali cose).

Quindi, quando ti leghi [escape], sei al sicuro e non devi preoccuparti ESC; a parte le tue associazioni, devi solo aumentare le mappe dei tasti che dicono ESCquando significano [escape].

Hmm ... beh, quasi. Perché queste mappe non vengono utilizzate [escape]per la prima volta? Perché questo non funzionerà in un terminale. Se vuoi Esclavorare su un dispositivo del genere, devi almeno personalizzare il tuo terminale prima.

La storia del terminale è riportata in un altro post: Come legare C- [per davvero? . Quello che devi fare è dire al terminale di inviare una sequenza personalizzata quando Escviene premuto, quindi mappare questa sequenza [escape]in una fase iniziale di input in emacs (il input-decode-map).

Spero che sia di aiuto.

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.