emacs lisp には、式の結果を評価し、結果を直接バッファに貼り付けることができる非常に便利な機能があります。
追加作業を確認したいとします。次に、次のように入力します。
(* 3 2)
キーボード マクロを定義します。
(setq last-kbd-macro
[down ?\( ?i ?s ?= ? ?\C-\M-f ? ?\C-u ?\C-x ?\C-e ?\) home])
次に、式の上にポイントを置き、F4 キーを押してマクロを実行すると、式は次のようになります。
(is= (* 3 2) 6)
これは素晴らしい回帰テストになります。
残念ながら、clojure/nrepl バッファーで同じキーボード マクロを実行すると、次のようになります。
(* 8 9)(is= )
およびシンボルを解決できないという clojure からのエラーis=
そのため、物事の順序付けに何か奇妙なことが起こっていると思います。マクロは間違ったものを評価しようとしています。
誰でもこれをclojureで動作させることができますか? (実際、一般的な問題を解決して、任意のキーボード マクロC-u C-x C-e
が emacs lisp と同じように正常に動作するようにします)
人々は誤解しているように見えるので編集してください:
手動でキーを押すと、elisp または clojure バッファーのいずれかで問題なく動作します。1 つの Cu Cx Ce evals では emacs lisp を使用し、他の evals では外部の clojure プロセスを使用します。
この問題は、Cu Cx Ce を含むキーボード マクロ (clojure バッファーに記録されている) を実行しようとしたときに発生します。
clojure バッファーでマクロを実行すると、どういうわけか順序が変更されます。eval-paste がまだ完了していなくても、マクロは実行を続けているようです。
キーボード マクロ (または対応する関数) を手動で実行するのと同じ順序で強制的に実行する方法があるかどうか疑問に思っていました。
必要に応じて、キーボード マクロを適切な elisp 関数に変更できることを非常にうれしく思います。