時々帖

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

nt-script - NTEmacsでスクリプトを実行する

現在、NTEmacsの環境を整備中している。今までWindows上ではMeadowを使っていたのだけど、MeadowはEmacsの少し古いバージョンをベースに作られているので、Emacsの新しい機能が使えない。そこでNTEmacsに移行しようとしている。

その中で、Linux上のEmacsでは動いていたはずのflymakeなどがうまく動かないという問題にはまった。
調べてみると(call-process 'script')で’no such a file’とか返してくる。
お決まりのexec-pathはちゃんと設定されていて問題はないし、flymakeで指定しているスクリプトファイルもちゃんと置いてある。

NTEmacsではなくてMeadowでやってみるとうまくいく。
調べてみるとMeadowにはmw32-scirpt.elなるライブラリがバンドルされていて、それを使うことでスクリプトファイルに対してcall-processやstart-processが使えるらしい。
それを使っていなければ、同じようにcall-process, start-processがうまく動かない。

Windows上でcall-process、start-processがスクリプトファイルをうまく処理できないのは、Windows上ではスクリプトファイルを実行ファイルとして扱ってくれないため。Unix上ではスクリプトファイルのシェバンをチェックして、perlやrubyやらに対してスクリプトファイルを実行してくれる。
call-processの以下のように引数を以下のように変更してやれば、スクリプトファイルも正しく実行できる。
(call-process "perl" nil t nil "script")


Meadowでは、call-processにスクリプトファイルを引数と渡す前にスクリプトファイルのシェバンをチェックして適切なインタプリタ対してスクリプトファイルが実行さるように引数を変更するという処理を、mw32-scriptが引数編集(argument editing)という機能を使って実現しているらしい。
残念ながらNTEmacsにはそんな引数編集という機能はない。

そこで、mw32-scirptやらmew-win32.elやらのコードを借りてきて、nt-script.elなるライブラリを作成した。
https://github.com/namikister/nt-script

使い方はnt-scirpt/以下の.elファイルをload-pathの通ったところにおいて、以下の文を.emacsに加えるだけ。
(require 'nt-script)

これで今まで通りFlymakeにスクリプトファイルを指定できる。
よかったらどうぞ。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2011/08/31(水) 23:16:49|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。