Esiste una funzione per inserire il `(kbd“… ”)` corretto premendo il tasto?


20

Sono annoiato di cercare i nomi dei tasti per la kbdfunzione, c'è un modo per inserire automaticamente il nome del tasto corretto semplicemente premendo il tasto?

Quindi, per esempio, voglio qualcosa per fare questo: sto scrivendo

(local-set-key |

Corro magical-insert-kbd-command, premo f6 e ottengo

(local-set-key (kbd "<f6>") |

Risposte:


20

Non sono sicuro di quello che stai chiedendo. Ma C-h kseguito premendo il tasto ti mostra esattamente a quale stringa devi passare kbd. Ad esempio, C-h k f6ti mostra <f6>.

Ecco un comando che fa quello che vuoi, immagino e lega il risultato a C-c c:

(defun foo (key)
  (interactive "kKey: ")
  (insert (format "(kbd %S)" (key-description key))))

(global-set-key (kbd "C-c c") 'foo)

Quindi digitare:

(local-set-key C-c c

Questo ti chiede di usare una chiave. Se si F6preme il tasto, si ottiene questo:

(local-set-key (kbd "<f6>") 

[Aggiornato per suggerimento di @HaraldHancheOlsen: modificato "(kbd \"%s\")"in".](kbd %S)"


Perfetto grazie!. La cosa principale che mi mancava mancava la key-descriptionfunzione.
— pastore

Ma OP ha ragione sul fatto che sarebbe utile disporre di una funzione che inserisca automaticamente la combinazione di tasti nell'anello di eliminazione.
— incandescentman,

1
@incandescentman: Huh? Dove dice l'OP qualcosa sull'anello di uccisione ? E cosa intendi per "associazione di tasti" in quella frase? Un'associazione chiave non è una stringa, che è ciò che kill-ringcontiene. Intendi la key-descriptionstringa? o il valore di ritorno del formatsexp sopra ? Comunque, dovrebbe essere chiaro come modificare il comando che ho dato, per aggiungere uno di quelli al kill-ring(solo usare kill-new).
— Estratto il

"inserisci automaticamente." Se ho capito bene, la soluzione sopra mostra solo il keybinding (es. kbd <M-return>) Ma non lo inserisce in un file init. (Dovresti fare il passaggio aggiuntivo di copia / incolla.) Forse ho frainteso. Per il mio caso d'uso personale, troverei utile avere un modo per interrogare la sintassi per un keybinding (ad es. La sintassi M-RETo M-<return>o cosa?) E posizionare automaticamente quella stringa nel kill ring / pasteboard, in modo da poter quindi incolla il keybinding nel mio file init quando scrivi una riga come (define-key map (kbd "<M-return>") 'org-return).
— incandescentman,

1
Sì, hai frainteso. (Ma c'era anche un refuso nel sexp vincolante: ho dimenticato di usare kbdnel global-set-keysexp - corretto ora.) Il comando foo(a cui il global-set-keysexp si lega C-c c) legge una sequenza di tasti e quindi inserisce, nel punto del buffer corrente, il kbdsexp adeguato per questo. Se si utilizza C-c cnel file init, dopo (local-set-key , inserisce il kbdsexp necessario per la chiave che legge.
— Estratto il

7

Se usi M-x local-set-keyper eseguire il binding dei tasti in modo interattivo, puoi usare C-x ESC ESC( repeat-complex-command) per ottenere un'espressione Lisp che puoi incollare nella tua configurazione. (kbd ...)Tuttavia, probabilmente non utilizzerà descrizioni in stile amichevole .


Neat. Tendo a usarlo define-key, in realtà, sembra più semplice definire la chiave in modo definitivo piuttosto che impostare un hook per chiamare una funzione per definire la chiave.
— pastore,
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.