Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save hidsh/9ac57f7fa0deca4dca925fdfdca00a43 to your computer and use it in GitHub Desktop.
Save hidsh/9ac57f7fa0deca4dca925fdfdca00a43 to your computer and use it in GitHub Desktop.
elispでミニバッファに何か入力して実行するテスト

なにこれ

きっかけは https://oshiete.goo.ne.jp/qa/3857934.html

emacs lisp でread-from-minibuffer関数での入力を、自動的にする方法(プログラミング)はありますか?

回答者は無理っぽいとか言ってるけど、このコードで一応できる。 ただし、特定のコマンドでは当て先のフックが minibuffer-setup-hook ではない場合があるので注意。

例: isearch の場合は isearch-mode-hook

アイデアの元ネタ

https://emacs.stackexchange.com/questions/2461/how-can-i-simulate-an-arbitary-key-event-from-elisp

半日ぐぐって見つけた。

;; M-x ttt すると f2関数がコール
;; -> 自動でミニバッファに文字列を入力
;; -> 自動でEnter入力
;; -> 結果が表示される
(defun f2 ()
"ミニバッファに文字列を入力してEnterする。"
(insert "(1+ 5)")
(setq unread-command-events (listify-key-sequence "\C-j")) ;; Enterキー入力をエミュレート
;;(setq unread-command-events (listify-key-sequence (kbd "RET"))) ;; こっちでないとダメなときがある
(remove-hook 'minibuffer-setup-hook 'f2))
(defun ttt ()
(interactive)
(add-hook 'minibuffer-setup-hook 'f2)
(call-interactively 'eval-expression))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment