2012-05-03
vim_goshreplに自動use機能とwhich-module関数を追加しました
先日こちらで紹介したVim上で動作するGaucheのREPLプラグインに新しい機能を実装したので紹介します。
- 自動use機能
まだ読み込まれていないモジュールのシンボルを使用したときに、自動的に必要なモジュールをuseする機能です。 - which-module関数
シンボルがどのモジュールに属しているか検索するための関数です。 標準のaproposの全モジュール版のような感じです。
自動use機能
自動useは、まだ読み込まれていないモジュールのシンボルを使用したときに、自動的に必要なモジュールを探し出しuseする機能です。
僕の場合、REPLをエディタ内で編集中のコード片を張り付けてテストするために使うことが多いのですが、そのたびに必要なモジュールをuseするのは面倒でした。
そこで標準のREPLにはない機能ですが自作のスクリプトに実装しました。
標準とは違う挙動になってしまうのでデフォルトでこの機能は無効になっています。
自動use機能を使う場合はvimrc内に、
let g:gosh_enable_auto_use = 1
と書いてください。
自動use機能ですが、あらかじめシンボルとモジュールの対応を生成しておいてその中から探し出すという方法を取っているため、
自動でモジュールを探し出せるのは標準で用意されているモジュールだけです。
ユーザーが独自に追加したモジュールなどは自動useすることはできません。あしからず。
which-module関数
これも標準のREPLにはない機能ですが、あると便利なので実装しました。
標準で用意されているaproposとの違いは、
まだimport(use)していないモジュールからも検索することと、
自動use機能と同じように事前にシンボル<->モジュールの対応を取っているため、標準以外のシンボルの検索はできないというところです。
which-moduleは関数として定義しています。インタフェースは以下のような感じ。
(which-module pattern :key (match 'submatch))
2012-04-30
Vim上でGaucheのREPLを動かす
※2012/5/4 追記 neocomplcache用のキーワードパターン記述を追加
タイトル通り、画像の通りのものを作りました。
Vim上からgoshREPLを扱うためのVimscriptです。
インストール方法は標準の方法と変わりないので割愛。
ただ、動かすためにはvimprocとGauche本体が必要なのでそちらも一緒にインストールしてください。
操作方法は基本的には標準のgoshと同じです。
ただ、Vim上で扱うということで様々な恩恵を受けることができます。
- RedoとUndoが使える
- シンタックスハイライト、オートインデントが可能
- neocomplcache等による補完機能が使える
- (readline風に)入力履歴をさかのぼることができる
- 以前に入力したテキストを範囲選択して(テキストを少し修正して)再び実行することができる
※追記
neocomplcacheが入っている方は、vimrcに以下のようなパターンを書いておくとgoshREPL内でシンタックス補完などがきくようになると思います。
let g:neocomplcache_keyword_patterns['gosh-repl'] = "[[:alpha:]+*/@$_=.!?-][[:alnum:]+*/@$_:=.!?-]*"
最後の一つは追加の説明が必要だと思うので少し解説します。
goshREPLバッファに表示されている文字列は全て単なるテキストなので、カーソルを動かして以前に入力した行に戻ることができます。
で、式を修正してその行で再びエンターを押すと、修正された内容で評価できます。
さらに、範囲選択してからエンターを押すと、選択した範囲の内容をもう一度実行することができます。
選択モードはノーマル選択・行選択・矩形選択が可能なので、式全体の中で一部分だけを実行ということも可能です。
この範囲選択して実行という動作は基本的にはgoshREPLのバッファ内のみで有効になっていますが、
ほかのバッファでも同じことができれば便利なときがあります。
プログラムを書いているときに一部分だけを実行させて動作を確かめたいということってありますよね?
そんな時は
vmap <CR> <Plug>(gosh_repl_send_block)
というようなキーマップをvimrcに書けば実現できます。
それでは最後に、このプラグインで定義されているコマンドやバッファ内で使えるキーマップを紹介します。
コマンド
| コマンド名 | 説明 |
|---|---|
| GoshREPL | gosh REPLを起動する |
| GoshREPLWithBuffer | 現在バッファのテキストを全て評価済みの状態でgosh REPLを起動する |
| GoshREPLClear | gosh REPLの内容をすべてクリアする |
| GoshREPLSend hoge | 引数のhogeをGaucheの式としてgosh REPL内で評価するまだgosh REPLが起動していない場合は自動的に新しいREPLが起動する |
| GoshREPLLines | GoshREPL内で実行したすべての式をリスト表示する |
| モード | キー | 説明 |
|---|---|---|
| Visual | <CR> | 選択されているテキストを実行 |
| Normal, Insert | <C-p> | 入力履歴を以前にさかのぼる |
| Normal, Insert | <C-n> | 入力履歴を次に進む |
割り当て可能なキーマップ
| キーマップ名 | 説明 |
|---|---|
| <Plug>(gosh_repl_send_block) | vmapで任意のキーに割り当てることで、選択した範囲のテキストをGoshREPLSendコマンドと同じように実行することができる |
変更可能な変数
| 変数名 | デフォルト値 | 説明 |
|---|---|---|
| g:gosh_enable_ring_history | 1 | 0にすることで、入力履歴の始端と終端をつなげないようにする |
| g:gosh_enable_auto_use | 0 | 1にすることで、REPL内で自動use機能が働くようになる 詳しい機能説明はコチラ |
| g:gosh_updatetime | 1000 | REPL内で出力確認を行う時間間隔(ミリ秒単位) |
| g:gosh_buffer_direction | 'h' | 'h'の場合はREPLバッファが水平に分割されて開く 'v'を指定すれば垂直に分割されて開く |
| g:gosh_buffer_width | 30 | REPLバッファを垂直方向に開いた時の横幅 |
| g:gosh_buffer_height | 15 | REPLバッファを水平方向に開いた時の縦幅 |
基本的な機能は以上です。
このVimscriptはただ自分がほしかったという動機で作ったので、
カスタマイズ性が低かったり、足りない機能があると思います。
使ってみて何か思うようなことがあればぜひフィードバックしてください。
できるだけ対応したいと思います。
2012-03-05
Gauche用OpenCVラッパー、Gauche-CVお披露目
お披露目とかタイトルで書いておきながら、まだとってもバギーなGauche-CVを紹介します。
ここ最近、Gauche-SDLとかgosh_completeとか他のあまり表に出していないもの物含めて、たくさんのGaucheプログラムを書いてます。
それらの書くきっかけになったのが今回紹介するGauche-CVです。
確認してみるとファーストコミットが去年の6月でした。実際はもう少し早くから書き始めているので、結構な時間がたってようやっとのお披露目です。
時間がかかった理由はと言うと、OpenCVが持つ膨大な関数群のせいです。
一つ一つラップするのですが、動作テストなんて気の遠くなる作業です。というか、画像処理の場合ほぼほぼ無理です。
というわけで、未だにとってもとってもバグが盛りだくさんです。
そんなGauche-CVですが、ソースはgithubにあります。こちら。
対応しているOpenCVのバージョンは2.2以降になります。2.1以下には対応していないのであしからず。
また、現状実装できているモジュールは、
- core
- imgproc
- highgui
の三つだけです。
顔認識に必要なモジュールなどはまだできてません。
Gaucheの0.9.2が必須になります。
またpkg-configや先ほどあげたバージョンのOpenCVがインストールされていることが条件になるので、少しハードルが高いかもしれません。
そこでWindowsの方のみですがコンパイル済みのバイナリを配布します。今のところ32bit用のOpenCVしか用意できていません。
サンプルコードはこちら。
OpenCV2.3用のバイナリですが、2012年3月5日現在配布されているOpenCV-2.3.0-win-superpackというものに含まれる、x86\vc10フォルダ内にあるDLLを利用してコンパイルしています。ですが、そもそも2.3で新しく追加された関数などはGauche-CV上では実装されていないので、そこにもご注意を。
Windows用バイナリのインストール方法ですが、解凍したフォルダ内にあるinstall.cmdを管理者権限で実行するだけです。このスクリプト内ではgoshを利用しているので、Gaucheはあらかじめインストールしていてください。アンインストールするには同じフォルダにあるuninstall.cmdを実行するだけです。
とりあえずこれで動くようになるはずなので、
サンプルソースを動かしたり編集してみたりして遊んでやってください。
がっつり書くのなら、gosh_completeが便利ですよ。(すみません。宣伝です)
gosh_completeを作るきっかけはGauche-CVを書きやすくするためだったりしますし。
最後に、何度も言いますがGauche-CVはとってもバギーなライブラリです。
何か起こっても怒らない寛容な気持ちで使ってください。
そして、何か起きたらそっとgithubなりここのコメントなりに報告してください<(_ _)>
2012-03-03
neocomplcacheを利用したGauche用補完プラグインgosh_completeを作ってます(インストール篇)
※3月4日gosh_completeのインストール方法を修正しました。
タイトルがやたらと長くなってしまいましたが、何となくの思いたった勢いで、Vimのneocomplcacheのソースプラグインとして動作するGauche用補完プラグインを作成してます。
動作画面はこんな感じ↓
機能的にはまだ詰め込みたいところはあるけど、とりあえずひと段落ついたので、ここらで公開したいと思います。
という訳でインストール方法です。
このプラグインはneocomplcacheのソースプラグインとして動作しているので、当然ですがneocomplcacheが使える必要があります。
neocomplcacheのインストール方法については検索すればたくさん出てくると思うので、まだインストールしていない人はいろいろ探してインストールしてください。
次に、このプラグインはvimprocというVimプラグインを利用しています。なのでvimprocも必須です。
vimprocではインストール後、自前でコンパイルする必要があります。Windowsの方はgithubのDownloadsのページにコンパイル済みDLLがあるのでそれを使うという手もあります。
このプラグインではGaucheのソースコードの解析をGaucheのプログラムによって行っています。つまり、Gauche本体もこのプラグインの動作には必須になります。
最後に、gosh_complete本体をインストールします。
vundleなどを使ってプラグイン管理をしている方は
Bundle 'aharisu/Gauche-Complete'
と.vimrcなどに書いてBundleInstallすればgosh_completeはインストールされます。
その他の方はzipをここからダウンロードしてください。zipを解凍してでてきたautoloadフォルダを、いつものように.vimフォルダ内のautoloadとマージすれば完了です。
長くなりましたが、やっと準備完了です。
これでGaucheのソースコードをVimで編集するときにgosh_completeが解析した補完候補が表示されると思います。
インストールの注意点としては、neocomplcacheやvimprocはできるだけ新しいものを利用してください。
また、多くの環境で動作テストができているわけではないので、意味不明なエラーが起きた場合は遠慮なくコメントしてください。
最後に、gosh_completeの機能に関してはまた別の記事に書こうと思いますが一点だけ、
補完候補と一緒に出てくるこのプレビュー画面、
たまにうざいと思うことがあります。(作者も)
プレビュー画面を消したい場合は、.vimrcなどに
set completeopt=menu
と書いてください。
たまに邪魔なプレビュー画面ですが、あると便利な時もあるのでこの機能に関しては今後改良するつもりです。
2012-01-23 Gauche-SDLをWindowsで動かす
Gauche-SDLをWindowsで動かす
前回の記事で紹介したように、Gauche-SDLというGauche用SDL拡張ライブラリを作ってます。
そんなGauche-SDLをWindows環境でも手っ取り早く動かせるようにしたので、方法を記事としてまとめておきます。
今まではソースコード一式を取得して、MinGWを使って自前でコンパイルする必要があったのですが、
事前にコンパイル済みのバイナリをインストールすればいいだけにしました。
ただ、現状では試験的な導入なので、64bit版のWindowsには対応していません。64bit版の方はもうしばらくお待ちください。
必要なファイル一式はコチラ。
また、必要な環境はGaucheの0.9.2がインストール済みであることです。
インストール方法は、ダウンロードしたzipを解凍したフォルダ内にあるinstall.cmdを実行するだけです。
注意することとして、Windows Vistaや7の場合はinstall.cmdを管理者として実行する必要があります。
また、レジストリをいじっていないのでアンインストール情報などは登録されません。
アンインストールする時は同じフォルダ内にあるuninstall.cmdを実行してください。
次に、作成したプログラムを実行するためにはSDLやライブラリのDLLが必要です。
こちらはbinaryフォルダ内に全てあるので、パスの通ったフォルダに全てコピーしてください。
これでGauche-SDLをWindowsでも動かせるようになったはずです。
ただWindows環境での問題点として、
公式で配布されているGaucheのWindows用バイナリではThread機能がサポートされていないため、
Gauche-SDLでもその部分に依存している関数は実行できないというところです。
具体的には、sampleフォルダ内にあるsound.scm/thread.scm/timer.scmが実行できません。
これについては現状どうしようもないので、Gaucheのバージョンアップで公式にWindowsでもスレッドがサポートされることに期待します。
※追記 最近のGaucheのコミットを見てみるとWin32のスレッドをサポートするためのものがあったので、次期バージョンあたりでサポートされるのかな?と推測。公式にサポートされれば、こちらも修正して対応します。
今回のWindowsサポートは様々な環境化でのテストがほとんどできていないので、
何か問題があればコメントなどで報告をお願いします。










