適当に読んでみるツアー

とりあえず、どういう感じに使うのかを適当に読んでみるツアー

(defun foo ()
  (require "grepd")
  (let (b)
    (unwind-protect
	(save-excursion
	  (when si:*command-line-args*
	    (setq b (create-new-buffer "foo"))
	    (set-buffer b)
	    (insert (pop si:*command-line-args*))
	    (selection-whole-buffer))
	  (let ((ed::*grep-directory-name-hook*
		 #'(lambda ()
		     (pop si:*command-line-args*))))
	    (declare (special ed::*grep-directory-name-hook*))
	    (grep-dialog)))
      (and b (delete-buffer b)))))

書かれている使い方の例

~/xyzzy.exe -f my-grep D:\MyDocument 

これ、.xyzzyにそのまま書いても動かないので、多分" -f my-grep"の所を" -f foo"とかで考えろと言う事だと思われ。コレの賢い所は、-f fooで引数に渡した内容を読み込ませているところとか。前のパクリで適当に書いたfenrirからファイラ開くのは、ディレクトリをそのままxyzzyに渡すのでディレクトリは開けないとかエラーが出ちゃう問題があったけど。これはunwind-protectとかでエラーは抑えて、引数で渡したディレクトリはとりあえず無視して、代わりにfooで普通のファイルを開く。

■流れ

  1. ~/xyzzy.exe -f foo D:\MyDocumentで起動
  2. xyzzy.exeが起動
  3. -f fooでfooを呼び出し。
  4. 新しいバッファを作って引数の"D:\MyDocument"とかを書き込む
  5. grepを実行するディレクトリを設定
  6. grepのダイアログを開く
  7. バッファを削除

ちょっとよく分からないのは何故引数をバッファに書き出す必要があるのかとか。*grep-directory-name-hook*に直接引数を入れているような感じなので、セレクションを作っておいてGrep-dialogに渡す必要があるのかなぁとか、で、消してみるとDialogに渡されない。*grep-directory-name-hook*の動きを何か自分が勘違いしているのかもしれないが。とりあえずそのまま使ってみる事に。