Tentukan Kontrol + tombol Shift tanpa kbd

11

Saya mencoba menambahkan beberapa fungsionalitas ke paket orang lain, jadi saya ingin menghargai polanya. Sayangnya, salah satu pola ini adalah tidak digunakan kbd.

Saya perlu mengikat suatu fungsi C-S-b, tetapi saya tidak tahu caranya. Saya tahu bagaimana melakukan ini dengan pengubah tunggal (misalnya "\S-b"), tetapi saya tidak bisa membuatnya bekerja dengan beberapa pengubah. Saya tahu saya hanya bisa mengevaluasi (kbd "C-S-b")dan menggunakan outputnya ( [33554434]), tetapi saya ingin sesuatu yang lebih mudah dibaca.

Berikut adalah beberapa hal yang saya coba:

(define-key emacs-lisp-mode-map
  "\C-\S-b" 'test-command)
;;; Invalid modifier

(define-key emacs-lisp-mode-map
  [C-S-b] 'test-command)
;;; Does nothing

(define-key emacs-lisp-mode-map
  "\C-B" 'test-command)
;;; Binds C-b
Malabarba
sumber

Jawaban:

15

Anda kehilangan satu ?dan dua garis miring terbalik dalam representasi vektor:

(global-set-key [?\C-\S-b] 'test-command)

Bagian tentang Urutan Kunci dalam manual Elisp mengatakan:

Urutan kunci yang berisi tombol fungsi, peristiwa tombol mouse, peristiwa sistem, atau karakter non-ASCII seperti C-=atau H-atidak dapat direpresentasikan sebagai string; mereka harus direpresentasikan sebagai vektor.

Dalam representasi vektor, setiap elemen vektor mewakili peristiwa input, dalam bentuk Lisp-nya . Sebagai contoh, vektor [?\C-x ?l]mewakili urutan kunci C-x l.

Dan di bawah Bit Pengubah Karakter Lainnya dikatakan:

Sintaks Lisp untuk bit shift adalah \S-; dengan demikian, ?\C-\S-oatau ?\C-\S-Omewakili karakter shift-control-o.

itu hanya
sumber
1
Saya telah mencoba memahami apa artinya tanda tanya. Terima kasih atas balasan Anda, saya menemukan ini: Sintaks Ctl-Char? \ C- dan Sintaks Meta-Char? \ M-
Kaushal Modi
Dan ya, pertanyaan Malabarba dijawab di halaman ini tentang Bit Pengubah Lainnya .
Kaushal Modi
@kaushalmodi Terima kasih atas tautannya! Mereka sangat berguna dalam mendapatkan pemahaman yang lebih dalam tentang apa yang terjadi.
itsjeyd