Tuşuna basarak doğru `(kbd“… ”)` yi eklemek için bir işlev var mı?


20

kbdİşlev için anahtar adlarını aramaktan sıkıldım, sadece tuşa basarak doğru anahtar adını otomatik olarak eklemenin bir yolu var mı?

Örneğin, bunu yapmak için bir şey istiyorum: yazıyorum

(local-set-key |

Ben koşmak magical-insert-kbd-commandbasın f6 ve ben olsun

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

Yanıtlar:


20

Tam olarak ne istediğini bilmiyorum. Ama C-h kardından tuşa basmanız tam olarak hangi dizeyi geçmeniz gerektiğini gösterir kbd. Örneğin, C-h k f6size gösterir <f6>.

İşte istediğinizi yapan bir komut, sanırım ve sonucu bağlar C-c c:

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

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

Sonra şunu yazın:

(local-set-key C-c c

Bu, bir anahtar kullanmanızı ister. Eğer F6tuşa basarsanız, bunu elde edersiniz:

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

[@HaraldHancheOlsen tarafından öneri başına Güncelleme: Değiştirildi "(kbd \"%s\")"için".](kbd %S)"


Mükemmel teşekkürler!. Eksik olduğum ana şey key-descriptionişlevi kaçırmaktı .
dshepherd

Ancak OP, tuş takımını otomatik olarak öldürme halkasına yerleştiren bir işleve sahip olmanın yararlı olacağı konusunda haklıdır.
incandescentman

1
@incandescentman: Ha? OP öldürme halkası hakkında nerede bir şey söylüyor ? Ve bu cümledeki "tuş takımı" ile ne demek istiyorsun? Anahtar bağlama bir dize değildir, kill-ringiçerdiği şeydir . key-descriptionDize mi demek istiyorsun ? ya da yukarıdaki formatsexp dönüş değeri ? Her neyse, verdiğim komutun nasıl değiştirileceği, bunlardan herhangi birini kill-ring(sadece kullan kill-new) eklemek için açık olmalıdır .
Drew

msgstr "otomatik olarak ekle." Doğru bir şekilde anlarsam, yukarıdaki çözüm yalnızca tuş takımını (ör. kbd <M-return>) Görüntüler, ancak bunu bir init dosyasına eklemez. (Kopyalama / yapıştırma işleminin ek adımını yapmanız gerekir.) Belki yanlış anladım. Kendi kişisel kullanım durumum için, bir tuş bağlama için sözdizimini sorgulamak için bir yol var (örneğin sözdizimi M-RETya M-<return>da ne?) Ve otomatik olarak bu dize öldürme halkası / çalışma tahtası yerleştirmek yararlı olurdu , böylece ben gibi bir satır yazarken keybinding init dosyama yapıştırın (define-key map (kbd "<M-return>") 'org-return).
incandescentman

1
Evet, yanlış anladın. (Ama anahtar bağlayıcı sexp de bir yazım hatası vardı: sexp kbdiçinde kullanmayı unuttum global-set-key- şimdi düzeltildi.) Komut foo( global-set-keysexp'in bağlandığı C-c c) bir anahtar dizisi okur ve sonra mevcut tamponun noktasına kbdbunun için uygun sexp. İnit C-c cdosyanızda kullanırsanız (local-set-key , daha sonra kbdokuduğu anahtar için ihtiyacınız olan sexp'i ekler .
Drew

7

Eğer kullanırsanız M-x local-set-keyetkileşimli keybinding yapmak, kullanmak olabilir C-x ESC ESC( repeat-complex-commandEğer yapılandırma yapıştırabileceğiniz bir Lisp ifadesi almak için). Yine de muhtemelen dostça (kbd ...)tarzı açıklamalar kullanmaz .


Temiz. define-keyAslında kullanmaya eğilimliyim , sadece anahtarı açık bir şekilde tanımlamak, anahtarı tanımlamak için bir işlevi çağırmak için bir kanca ayarlamaktan daha basit görünüyor.
dshepherd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.