auto-install.elをバッチモードで動かす その2
以前の案ではコンパイルに失敗すると止まったので書き直した。
バッファーにauto-install.elの出力を書き出して終了を表す文字列が表示されたらwaitループを抜ける。
(progn (setq install_dir (expand-file-name "#{install_dir}") load-path (cons install_dir load-path) auto-install-directory install_dir auto-install-save-confirm nil auto-install-package-name-list nil auto-install-install-confirm nil) (require 'auto-install) (require 'cl) (get-buffer-create "*Messages*") (defadvice auto-install-install (around replace-message-auto-install-install activate) (defalias 'old-message (symbol-function 'message)) (letf* (((symbol-function 'message) (lambda (format-string &rest args) ; (apply 'old-message (cons format-string args)) (with-current-buffer (get-buffer "*Messages*") (insert (format "%s" format-string)))))) ad-do-it)) (ad-activate 'auto-install-install) (auto-install-#{datasource} "#{package}") (with-current-buffer (get-buffer "*Messages*") (while (not (search-forward "Installation is completed." nil t)) (goto-char (point-min)) (sit-for 1))))
深いループでevalやapplyやfuncallするとmax-lisp-eval-depthに引っかかる。なんで。。。
これなしでmessageを呼び出す方法がわからない。