kbdなしのControl + Shiftキーを定義する


11

他の誰かのパッケージにいくつかの機能を追加しようとしているので、それらのパターンを尊重したいと思います。残念ながら、これらのパターンの1つはを使用しないことkbdです。

関数をにバインドする必要がありますがC-S-b、方法がわかりません。単一の修飾子(例:)でこれを行う方法を知っていますが、"\S-b"複数の修飾子で動作させることができません。(kbd "C-S-b")出力([33554434])を評価して使用できることはわかっていますが、もっと読みやすいものにしたいのですが。

これが私が試したいくつかのことです:

(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

回答:


15

?ベクトル表現にa と2つのバックスラッシュがない:

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

Elispマニュアルのキーシーケンスに関するセクションでは、次のように述べています。

ファンクションキーを含むキーシーケンスは、マウスなどのボタンイベント、システムイベント、または非ASCII文字C-=またはH-a文字列として表現することはできません。それらはベクトルとして表現する必要があります。

ベクトル表現では、ベクトルの各要素はLisp形式の入力イベントを表します。たとえば、ベクトル[?\C-x ?l]はキーシーケンスを表しますC-x l

そして、他の文字修飾ビットの下でそれは言う:

シフトビットのLisp構文は次のとおりです\S-。したがって、?\C-\S-oまたは?\C-\S-OShift-control-o文字を表します。


1
クエスチョンマークの意味を理解しようとしていました。あなたの返信のおかげで、私はこれらを見つけました:Ctl-Char Syntax?\ C- and Meta-Char Syntax?\ M-
Kaushal Modi

そして、はい、Malabarbaの質問は、Other Modifier Bitsのこのページで回答されています。
Kaushal Modi 2014

@kaushalmodiリンクをありがとう!何が起こっているのかをより深く理解するのに非常に役立ちます。
itsjeyd 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.