fastri-server が起動しているか気にしたくない(修正版)

この記事は旧くなっています。 d:id:elim:20080930:1223721748 を参照ください。

id:elim:20080410:force_start_fastri_server が間違っていたので訂正します。

ri に defadvice していましたが、これでは advice が働かずに進んでしまい、ri-ruby.el に "Couldn't start ruby script" と叱られてしまいます*1

以下のように改変しました。

  • ri-ruby-get-process への advice へ変更しました。
  • astri-server の起動完了を STDOUT への出力で確認していましたが、実際に fri で引けるか試すように変更しました。
(defun force-start-fastri-server ()
  (let*
      ((progname "fastri-server")
       (buffname (format "*%s*" progname)))
    (with-temp-buffer
      (call-process-shell-command
       (format "ps uxww |sed -e '/%s/!d' -e '/sed/d'" progname) nil t)
      (goto-char (point-min))
      (unless (re-search-forward progname nil t)
	(with-current-buffer (get-buffer-create buffname)
	  (erase-buffer)
	  (start-process progname buffname progname)
	  (while (not
		  (progn
		    (sit-for 0.5)
		    (with-temp-buffer
		      (call-process-shell-command
		       (format "fri 'Kernel#lambda'" progname) nil t)
		      (goto-char (point-min))
		      (re-search-forward "lambda" nil t))))))))))

(defadvice ri-ruby-get-process (before ri/force-start-fastri-server
				       activate)
  (force-start-fastri-server))

*1:interactive で引数を決定しているからでしょうか?