時々帖

スポンサーサイト

上記の広告は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

Emacsでマーク選択をするライブラリ

Emacsでマークを付けて選択するユーザーインタフェースが必要だったので作ってみた。
http://github.com/namikister/mark-select
  1. 2010/06/26(土) 20:46:43|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0

flymakeのエラーをanythingで一覧表示

Flymakeのエラーの一覧を見られるようにしたいなぁと思っていたら、既にやっている人を発見。
http://d.hatena.ne.jp/kiris60/20091003
このコードを少し修正して、ワーニングとエラーで色を分けて付けるようにした。
大した修正じゃないけどね。
結構、快適です。

テーマ:UNIX/Linux - ジャンル:コンピュータ

  1. 2010/05/10(月) 23:52:29|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0

iiimecfのキー設定

iiimecfのキーバインドを変更する方法を調査してみた。

Emacs + IIIMECF + ATOK X3 = 結構シアワセ

やり方は上記のページに書いてあったのだが、文節移動をCtrl-f、Ctrl-bに割り当てる方法が分からない(elispの変更のみで)。
基本的にはiiimcf.elのiiimcf-keycode-spec-alistの要素にキーとその時の動作を定義したリストを追加してやればよい。
例えば、leftキーと同じことをCtrl-kに割り当てたいなら、

(11 37 65535)


を追加してやればよい。
1番目の要素はキーを表していて(この場合はk)、2番目は動作(この場合はleft)、3番目はよくわからない。

問題は文節前移動、文節後移動はShift+right、Shift+leftで出来るのだが、これをどうやってCtrl-f、Ctrl-bに割り当てるかだ。
right、left単独ならよいが、Shiftをどうやったら割り当てられるのか。

ソースを読んでみると、4番目の要素が修飾キーに関係しているっぽい。
修飾キーはiiimcf-modifier-spec-alistで各キーごとにどのビットを立てるか定義されていて、shiftキーは1となっている。
そこで4番目の引数に1を追加してやると。ビンゴ!!

ということで、iiimp.elに以下のような変更を加えてやった。

*** iiimcf.el.old  Sun Dec  9 08:54:54 2007
--- iiimcf.el Fri Dec 4 20:48:20 2009
***************
*** 284,289 ****
--- 284,298 ----

(defvar iiimcf-keycode-spec-alist
`((13 10 0)
+ (11 37 65535) ; C-k -> left
+ (12 39 65535) ; C-l -> right
+ (9 37 65535) ; C-i -> left
+ (15 39 65535) ; C-o -> right
+ (7 27 65535) ; C-g -> escape
+ (16 38 65535) ; C-p -> up
+ (14 32 65535) ; C-n -> space
+ (2 37 65535 1) ; C-b -> shift+left
+ (6 39 65535 1) ; C-f -> shift+right
(32 32)
,@(mapcar #'(lambda (x) (list x x 0))
(iiimcf-numseq 1 31))


ただ、ソースをもう一度みてやると、この設定では、Ctrl-fを押したときにCtrlとShiftキーがどちらも送信されるように見える。
まあ、動いているからいいか。。

テーマ:UNIX/Linux - ジャンル:コンピュータ

  1. 2009/12/05(土) 01:34:29|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0

ATOK+IIIMECF+Emacs

久々の日記?更新。

Solaris9上のEmacsから使える日本語入力を探していたのだが、SolarisにはATOKが入っていることで使えるか試してみた。
なぜか、Emacs22 + iiimecf + atok12 on Solaris9という構成では、変換完了直後にEmacsが固まってしまい使えなかった。
(setq debug-on-quit t)としてCtrl-gを押して、どこで止まっているか調べてみると、
iiimp.elの以下の部分で止まっていたがどうにも直せそうになかった。
(defun iiimp-check-channel-bytes (com-id start bytes wait)
(cond ((eq wait t)
(catch 'tag
(while (< (point-max) (+ start bytes))
(if (iiimp-check-channel-connection com-id)
(accept-process-output ;; ←ここで止まっていた
(iiimp-com-id-process com-id)
1)
(throw 'tag nil)))
t))


考えた挙句、別のマシン(Solaris10)でiiimdを立ち上げておいて、そこにiiimecfからTCPで接続しにいくようにしたら使えるようになった。
やったことは覚えている範囲では次の通り。

/etc/iiim/iiimd.xml.confを編集して、以下の部分をコメントアウトしてhostnameを変更した。
あとaclディレクティブで接続元に対してアクセス権を出してやる必要がある。
 <listen type="tcp">
 <hostname>0.0.0.0</hostname>
<port>9010</port>
</listen>


これで、iiimdを立ち上げ直してやる
$ iiimd


そして、.emacsに以下のように記述してやった
(setq iiimcf-server-control-hostlist (list "tcp:192.168.1.12:9010"))
(setq iiimcf-server-control-default-language "ja")
(setq iiimcf-server-control-default-input-method "atokx2")
(setq default-input-method 'iiim-server-control))
(require 'iiimcf-sc)


これで、ちょっとモッサリ感はあるがEmacsでATOKが使えるようになった。
ユーザーはiiimecfの中でlogin名を使って設定しているようで、サーバ側の/var/lib/iiim/le/atokx2/users/の下にユーザごとに辞書ファイルなどをおいたディレクトリが作成される。
  1. 2009/12/05(土) 00:45:40|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。