ファイルに書かれたディレクトリのパスからファイラを開きたい(その2)

 commentのところで教えてもらったffapはcurrent-bufferのファイル名から探してアレコレする機能が色々付いてるらしい。silogの中の人とは趣味が被るのか、何故か良く似たような奴を作ってしまう。(単にありがちな要望と言うだけかもしれないけど)チラっと中身を見てみた所、難しくて何をしているのかよく分からなかったが、基本的にsilogさんの奴の方が遥かに凝っているので其れを使ったよさそう。まあ、基本的に、自分は人が作った奴をいきなり見ると殆どどんなのでも何故か読めないだけどね*1

 まあ、既に作ってしまっていたので、いい事にして。というか何となく空白も読めるようにしてしまったので、一応メモしておくことに。中身は正規表現でそれっぽい所を調べて飛ぶだけと言う芸のない感じ。。

■具体的に何をするか
カーソルの辺りに書かれているディレクトリをファイラで開く

;前のを少しまともにしたの (v0.02)
(defun goto-directory()
  (interactive)
  (let (tmp dir)
	(save-excursion
	  ;パスらしきものか行頭が出てくるまで後ろに移動して
	  (while (not (looking-at "[CcDd]:[/\\]\\|^."))
		(backward-char))
	  ;パスらしき所を取り出す。
	  (setq dir (buffer-substring (match-beginning 0)(match-end 0)))
	  (goto-char (match-end 0))	; ex C:/の後ろに移動。
	  (if (file-exist-p dir);一応取り出したのが存在するか確認して
		  (while (looking-at "[^\t:\*\?\"<>|\\/]*[/\\]")
			;次のディレクトリらしき所をtmpへ入れる
			(setq tmp (buffer-substring (match-beginning 0)(match-end 0)))
			(setq tmp (concat dir tmp))	; dirとtmpを合体してtmpに入れる。
			(if (and (sub-directory-p tmp dir) (file-exist-p tmp))
				; tmpがまともなディレクトリかcheck
				(setq dir tmp)	; よさそうならばdirに入れてしまう。
			  (return))			; ディレクトリじゃないなら抜ける。
			(goto-char (match-end 0))))
	  (message "dir ~A tmp ~A" dir tmp)
	  (open-filer)				; ファイラを開く
	  (filer-chdir dir))))			; 画面を移動。

 最近他の人のコードを見て良く出てくるリストとかsyntaxとか言うlispの機能を使ってみたいなぁとか思いつつも其れが何をするものなのかよく分かっていないので使えない。

silog - script/ffap
http://white.s151.xrea.com/wiki/index.php?script%2Fffap

■前の
himadatenodeの日記 - ディレクトリへのパスへジャンプ
http://d.hatena.ne.jp/himadatanode/20061015/p1

*1:部分的に読めた所は速攻でパクってるけど。前も書いたけど、一度自分で作ろうとして見ると失敗してても、何故か人が作ったのでも読めるんだよね。不思議。それは能力の問d(ry (σ゚д゚)σソレダ!!