2011-09-03 19 views
7

Zastanawiam się, czy istnieje odwrotna funkcja (kbd), której można użyć, aby uzyskać od kodu dostępu znaczący jej opis, np. C-b z 2.Funkcja odwrotna (kbd)?

Zwykle działa, ale nie dla poprzedniego przykładu, a także dla wielu innych, ponieważ skróty klawiszowe, szczególnie na Emacsie, są często bardziej skomplikowane niż pojedyncze znaki, a nawet jeśli w rzeczywistości są pojedynczą postacią, mogą być białą spacją lub kartą.

Wygląda na to, że funkcje dokumentacji używają funkcji (describe-buffer-bindings), która jest napisana w języku C, a zatem niezmienna, i chciałbym, jeśli to możliwe, ominąć tę trasę i manipulować danymi na mój sposób, aby zapewnić bardziej zaawansowane funkcje.

Odpowiedz

10

Prawdopodobnie szukasz (key-description KEYS &optional PREFIX).

Na przykład: (key-description [2]) i (key-description (kbd "C-b")) oszacowano na "C-b".

+1

Dziękujemy! Dokładnie tego potrzebowałem! (opis klucza (format "% c" 2)) teraz zwraca C-b! – konr

2

Definicja odwrotności KBD

(defun my-kbd-inverse (key) 
    (if (numberp key) 
     (setq key (vector key))) 
    (key-description key)) 

test

(defvar my-example-keys nil) 
(setq my-example-keys 
     (list 2 3 ?a 
      24 
      [?\C-x ?l] 
      (list "C-x" "A") 
      [(meta right) (meta left)] 
      (kbd "<f9>") 
      (kbd "<C-f9>") 
      (kbd "C-M-a") 
      [24 f9 97])) 
(cl-loop for key in my-example-keys 
     do 
     (princ (my-kbd-inverse key)) 
     (terpri)) 

Jeżeli istnieje klucz, który może zostać przekazany do global-set-key ale nie działa z obecną definicją my-kbd-inverse, daj mi znać .

Nota boczna: istnieje przyczyna, że ​​opis klucza nie przyjmuje postaci jako argumentu. Istnieją dwie grupy znaków:

  1. postać to po prostu liczba. Nie ma oddzielnego typu danych dla znaków.

  2. Istnieje poczucie, że znak jest , a nie klucz. Znak jest zdarzeniem wejściowym. Sekwencja zdarzeń wejściowych tworzy sekwencję klawiszy (skrót klawiaturowy), a sekwencja klawiszy nazywa się skrótem. Znak ?a nie jest kluczem, ale wektory [a] i ciąg "a" są. Funkcje pobierają tylko klucze.

Powiązane problemy