4

そこで、Emacs キーボード マクロを elisp コードとして保存する方法を探していました'insert-kbd-macro。マクロのキーにマップされている実際の関数に使用される Emacs キー記述言語を置き換えます。

そうすることで、最初にキーにマップされた関数を取得し、次にこれらの関数を文字列としてレンダリングして現在のバッファーに書き込むことを検討していました

(symbol-name
    (key-binding "\C-xo"))

文字列を返します"other-window"

ただし、現在insert-kbd-macroマクロをキャレット表記で保存します (人間が読める形式ではありません) (例: ^Pvs \C-p) 関数key-bindingは、人間が判読できる表記のみを受け入れるようです。

したがって、人間が読める表記に変換するために、関数を見ましたkey-description

(key-description "\346")

戻り値"M-f"

ただし、 で受け入れられるようにするにはkey-binding、「\Mf」の形式で表記する必要があります)。

これを行うための明白な方法は

(concat "\\" (key-description "\346")

ただし、emacs は返さ"\\"ないだけです"\"

何が起こっているのかを理解するために、文字の生のバイトがどのように"\"表示されるかを確認することにしました....

(byte-to-string 92)

戻ります'\\'

elisp のバグではないかと思います。

4

2 に答える 2

6

答えは、 /を挿入しないでください。read-kbd-macrokey-descriptionkey-binding

(key-description (read-kbd-macro "M-f"))

(key-binding (read-kbd-macro "M-f"))

\コメントで気付いたように、本当に を挿入したい場合は、

(insert "\\")

しかし、一般的な方法でキーボード マクロを elisp に変換することは現在不可能であるため、多くの不安を解消するために、この作業を放棄することをお勧めします。質問「Emacs マクロを Elisp に変換する」を参照してください。

于 2013-08-05T22:16:12.917 に答える