fastri-server が起動しているか気にしたくない

この記事は誤りを含んでいます。 id:elim:20080424:force_start_fastri_server を参照ください。

M-x ri してから fastri-server が起動していない事に気付くと悲しいので、起動していなければ起動させるようにしてみました。
初回だけは少し待たされますが、次回以降は(とうぜん)いつもの速度になります :)

(defun force-start-fastri-server ()
  (let*
      ((progname "fastri-server")
       (buffname (format "*%s*" progname)))
    (with-temp-buffer
      (call-process-shell-command
       (format "ps ux |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
                    (goto-char (point-min))
                    (re-search-forward progname nil t)))
            (sit-for 0.1)))))))

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

fastri-server が起動しきるまで数瞬かかりますので、while の中で fastri-server の出力を確認しています。これをしないと初回の M-x ri が失敗します。単に sit-for させても良いと思います。また、もっと素敵な方法が見付かり次第差し替える予定です :p