fiber.exeなんてない人のための関連付け実行 on bash and ntemacs
meadowにはfiber.exeが付属する。
これは、ファイルをwindowsの関連付けに従って開くコマンドで、meadowからofficeが起動できたりして割と便利に使える。
が、ntemacsにはそんなものない。
どうにかならんかな、と思ってぐぐると、
start
というコマンドを発見。
引数にファイルとかフォルダとかとれば、いい感じに開いてくれる。
ただ、これはcmd.exeの組み込みのようなので、コマンドプロンプトの外から、例えばbashから使おうとするなら、
o(){ cmd.exe //c start $1 }
とすればできると思ったら、たまにできないことがあった。え?
具体的には、引数によってはコマンドプロンプトが開いてしまう。
なんでかなーと思いつつ分かんないので諦めてると、偶然以下のページを発見。
2010-06-18
どうやら、第一引数を空文字列にすれば良さそう。定義を以下のように修正。
o(){ if [ $# -eq 0 ]; then # 引数がなかったらカレントディレクトリを開く local f=. else local f="$1" fi cmd.exe //c start "" "$f" }
失敗なく開くようになった。
せっかくなので、emacsにも同様の関数を追加する。こちらはシステムを自動判別。
(defun my-x-open (file) "open file." (interactive "FOpen File: ") (message "Opening %s..." file) (cond ((not window-system) (find-file file)) ((eq system-type 'windows-nt) (call-process "cmd.exe" nil 0 nil "/c" "start" "" (convert-standard-filename file))) ((eq system-type 'darwin) (call-process "open" nil 0 nil file)) (t (call-process "xdg-open" nil 0 nil file))) (recentf-add-file file) (message "Opening %s...done" file))
で、
startを自力で発見してから、msysには同名のコマンドが含まれているのに気づいた。
うわあ無駄骨。
中身はシェルスクリプトで、大体上と同じことをやっている。