gosh-mode.el

前もちょっと書いたんですけど、こつこつと書き溜めてたものを紹介します。
gosh-mode に関するものであれば、どんなコメントも歓迎します!

gosh-mode は Emacs 上で動く scheme-mode の拡張 major-mode です。
scheme-complete.el や gauche-mode.el などを参考に Gauche に特化して拡張しています。
Emacs Lisp と似たような操作で Gauche スクリプトを書けるようにすることを目標としています。

主に Debian Emacs 23 - 24 で動作確認していますが、Emacsc 22 以上であれば、WindowsNTEmacs, Meadow で、cygwin, mingw を問わず動作すると思います。

ダウンロード

GitHub - mhayashi1120/Emacs-gosh-mode: Gauche editing extensions for Emacs scheme-mode github でソースを公開しています。

インストール

アーカイブを展開したディレクトリに移動して、以下のコマンドを実行するとインストールは完了です。*1

make install

auto-complete

無くても動作しますが、あるともっと便利になるかもしれません。下記を参照してください。
http://cx4a.org/software/auto-complete/index.ja.html

設定

多くの場合は .emacs

(require 'gosh-config)

と書いておくだけで動作します。自動的にお勧めの設定で gosh-mode が有効になります。

設定が必要な場合は

(require 'gosh-mode)

として gosh-config.el を参考に好きな設定をしてください。

gosh に PATH が通っていない場合は M-x customize するか、以下のように .emacs に記述してください。

(gosh-default-initialize "/path/to/gosh")

以下では (require 'gosh-config) した場合を例にとり解説します。

概要

flymake のようにリアルタイムでソースの解析を行います。load すらできない、というのは防止できるのではないかと思います。
エラー情報を確認するためには mode-line の Invalid の文字にマウスカーソルを合わせてください。*2

http://d.hatena.ne.jp/mhayashi1120/files/gosh-valid.png?d=.png
http://d.hatena.ne.jp/mhayashi1120/files/gosh-invalid.png?d=.png

動作

scheme-mode を継承しているので、基本的な操作は変わりませんが、いくつかの拡張を行っています。

C-x C-e

Emacs Lisp のようにカーソル直前の S 式の簡易な評価 + 結果の表示ができます。
カーソル位置の module context を判別して、スクリプトの置いてあるディレクトリに移動してから評価します。
top level にしか書けない S 式は評価できません。また編集中のファイルが load すらできない状態の場合も評価に失敗します。

http://d.hatena.ne.jp/mhayashi1120/files/gosh-cxce.png?d=.png

M-:

Emacs Lisp のように入力した S 式の簡易な評価 + 結果の表示ができます。
その他は C-x C-e と同様です。

C-c C-j

定義位置をできるだけ探してジャンプします。

C-c ?

info を検索して表示します。

M-C-i

現在 import, use している情報から補完を行います。

C-c C-r

シンボルの名前変更を補助します。
参照を完全に解決できるわけではないので、注意して使用してください。

eldoc

Emacs Lisp のように eldoc が使えます。
Gauche では同一シンボルで複数の関数が定義できるので、表示がローテーションすることがあるかもしれません。

http://d.hatena.ne.jp/mhayashi1120/files/gosh-eldoc.png?d=.png

auto-complete

auto-complete は先述の通り入っていなくても動作します。
補完候補を import, use しているモジュールの中やローカル変数の中から収集してきます。
M-C-i と似たような情報源から取得するので、お好みで使い分けてください。

http://d.hatena.ne.jp/mhayashi1120/files/gosh-auto-complete.png?d=.png

M-x gosh-run

M-x run-scheme とほぼ同じですが gauche 限定です。
M-C-i による completion 機能や auto-complete が使えます。
C-i では正確な情報源による補完ができます。

TODO

ソースが汚い。
流用が多く gauche 仕様に対する正確さが足りない。
scheme 解析は elisp を使わないで、できるだけ gaucheスクリプトに任せるようにしたいところ。
使っていないローカル変数のチェック、unbound variable のチェック、エラー箇所の表示がしたい。

最後に

プログラミング言語用の major-mode を書くことが意外とそのプログラミング言語の勉強になるんですよね。
そういえば仕事で VB6 やらされてたときもそうだった気がします。

実は補欠登録してた Emacs Advent Calendar 2010 で回ってきたら書こうかと思っていたネタなのですが、回ってきてもこんなに書く暇はなかったですね。^^);

*1:必要があれば MAKE-CFG.el を編集してください。

*2:お分かりのように、まだ使い勝手はいまいちです。