キーを押して正しい `(kbd“…”)`を挿入する機能はありますか?


20

kbd関数のキー名を探すのにうんざりしていますが、キーを押すだけで正しいキー名を自動的に挿入する方法はありますか?

したがって、たとえば、私はこれを何かしたいです:私は入力しています

(local-set-key |

実行してmagical-insert-kbd-commandf6を押すと、

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

回答:


20

あなたが何を求めているのか正確にはわかりません。しかしC-h k、キーを押すと、正確にどの文字列を渡す必要があるかがわかりますkbd。たとえば、をC-h k f6示します<f6>

ここにあなたが望むことをするコマンドがあります、私は推測して結果をバインドしC-c cます:

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

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

次に入力:

(local-set-key C-c c

キーを使用するように求められます。あなたがヒットした場合F6、キーを、あなたはこれを取得します:

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

[@HaraldHancheOlsenによって提案ごとに更新:変更"(kbd \"%s\")"".](kbd %S)"


パーフェクト、ありがとう!。私が欠けていた主なものは、key-description機能が欠落していました。
dshepherd

しかし、OPは、キーリングをキルリングに自動的に配置する関数を使用すると便利であることは正しいです。
白熱灯

1
@incandescentman:え?OPはキルリングについて何を言っていますか?そして、その文の「キーバインディング」とはどういう意味ですか?キーバインディングは文字列ではなく、その中にkill-ring含まれるものです。あなたは意味するかkey-description、文字列を?または上記のformatsexpの戻り値?とにかく、それらのいずれかを追加するために、私が与えたコマンドを変更する方法を明確にする必要がありますkill-ring(ちょうど使用しますkill-new)。
ドリュー

「自動的に挿入します。」私が正しく理解している場合、上記のソリューションはキーバインド(例:)のみを表示しますkbd <M-return>が、initファイルには挿入しません。(コピー/貼り付けの追加手順を実行する必要があります。)誤解した可能性があります。私自身の個人的な使用の場合のために、私は(例えば構文です、それは便利なキーバインドの構文を照会する方法を持って見つけるだろうM-RETM-<return>?または何)と、自動的にキルリング/ペーストボードにその文字列を置くので、私はできることが、その後のような行を書き込むときに、キーバインドをinitファイルに貼り付けます(define-key map (kbd "<M-return>") 'org-return)
白熱

1
はい、あなたは誤解しました。(しかし、キーバインドsexpにもタイプミスがありました:sexpで使用するのを忘れていkbdましたglobal-set-key-今修正しました。)コマンドfooglobal-set-keysexpがバインドするC-c c)は、キーシーケンスを読み取り、現在のバッファのポイントに挿入します。kbdそれのための適切なsexp。C-c cinitファイルでの後(local-set-key に使用する場合、kbd読み込むキーに必要なsexpを挿入します。
ドリュー

7

M-x local-set-keyキーバインドをインタラクティブに行う場合、C-x ESC ESCrepeat-complex-command)を使用して、構成に貼り付けることができるLisp式を取得できます。(kbd ...)ただし、おそらくフレンドリーなスタイルの説明は使用しません。


きちんとした。私はdefine-key実際に使用する傾向がありますが、キーを定義する関数を呼び出すフックを設定するよりも、単にキーを完全に定義する方が簡単に思えます。
dshepherd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.