2012-05-04 13 views
13

Desidero che determinati tasti e combinazioni di tasti si comportino come altri tasti o combinazioni di tasti in Emacs. Per esempio, io voglio F5 a comportarsi come un sostituto per C-c per ogni possibile combinazione che coinvolge, o C-S come C-. È possibile farlo senza riavviare manualmente tutte queste combinazioni di tasti?Comportamento di una chiave come un'altra chiave

risposta

8

Le chiavi a cui si fa riferimento sono note come "chiavi di prefisso". Una chiave di prefisso ha la propria mappa dei tasti, quindi per far sì che un altro tasto si comporti allo stesso modo, è necessario assegnarlo alla stessa keymap. Per il controllo-c, si utilizza il mode-specific-map: Controllo

(global-set-key (kbd "<f5>") mode-specific-map) 

da sola non è una chiave prefisso, o realmente una chiave a tutti, dal momento che non invia pressione di un tasto per Emacs [1] fino a quando non si preme un altro tasto. Non sono sicuro di come rimappare C-S- in C- all'interno di Emacs. Puoi farlo a livello di sistema con xmodmap, ma probabilmente non è quello che vuoi.

[1] il tasto di controllo (e Shift, Alt) inviano pressione di un tasto per il sistema operativo, ma Emacs non 'vede' questo a meno che non ci sia premuto allo stesso tempo, un altro tasto

+1

+1 ma ... * "Il controllo da solo non è un tasto prefisso, o addirittura un tasto, poiché non invia una pressione di tasto" * ... Il controllo sicuramente invia un keypress da solo . Puoi usare, diciamo, * xev * sotto Linux per vederlo. Invia sia un tasto premuto quando lo si preme sia un tasto quando lo si rilascia. Un * xev * output per CTRL sul mio sistema fornisce: * KeyPress eventKeyPress evento ... stato 0x14, keycode 37 (keysym 0xffe3, Control_L) ... * ecc. Mi dispiego che hai scritto che il controllo non è "davvero un chiave a tutti ". I tasti CTRL e CAPS-LOCK della mia tastiera sono stati rimappati per agire come se il CTRL si offendesse; – TacticalCoder

+1

@TacticalCoder: punto corretto, per quanto riguarda X. Ma non penso che il tasto premuto su X sia visibile a Emacs da solo. Non è comunque possibile per Emacs rilevare o rispondere a un tasto modificatore se non sta modificando un altro tasto. Quindi, dal punto di vista di Emacs, CTRL da solo non è una chiave finché non viene combinato con un'altra chiave. – Tyler

5

preferisco

(define-key key-translation-map [f5] (kbd "\C-c")) 

Ecco uno good resource.

Per riepilogare il collegamento sopra riportato: Lo svantaggio della chiave globale è che, quando si definisce una combinazione di tasti per immettere un simbolo, non funziona in isearch.

chiave-traduzione-mappa ha anche un problema. Immagina di aver definito un simbolo | per eseguire un comando e C- | immettere il simbolo |, premendo C- | eseguirà il comando.

Problemi correlati