cgikit-el.ja.rd

Path: misc/cgikit-el/cgikit-el.ja.rd
Last Update: Tue Apr 20 16:48:56 JST 2004

begin

cgikit.el

((<CGIKit|URL:www.spice-of-life.net/download/cgikit/index.html>))というとても便利なCGI作成フレームワークがあります。 通常、RubyでCGI作成となるとcgi.rbを使用しますが、CGIKitというcgi.rbとは独立したフレームワークを使うことで開発効率が大幅に上がります。 しかし、CGIKitでは多数のファイルを同時に扱う必要があります。 テンプレート(*.html)、バインディング(*.ckd)、コード(*.rb)の3つが一体となってひとつのコンポーネントを扱います。 それらは密接に関連しているので同時に編集しないといけません。

そこで、Emacs環境でCGIKitによる開発効率をアップさせるために簡単なEmacsLispでcgikit.elを書きました。

機能

  • コンポーネントディレクトリを指定することで一度に3つのファイル(*.html, *.ckd, *.rb)を開く。
  • 名前を指定して別なコンポーネントのファイルを開く。
  • コンポーネント関連のファイルの初期テンプレートを挿入。
  • それぞれのコンポーネント関連のファイルのウィンドウへジャンプ。
  • cgikitタグ間の移動。
  • cgikitタグのエレメント名から対応するバインディングへジャンプ。
  • バインディングから対応するcgikitタグへジャンプ。
  • バインディング間の移動。
  • エレメントが取りうる属性を表示。
  • エレメントの説明を表示。
  • ((<埋め込みckd>))

インストール

(1) *.elをload-pathの通ったディレクトリへコピーします。 (2) バイトコンパイルします。 (3) .emacsに

      (load "cgikit")
      (load "cgikit-help-ja.el")
    と書きます。

(4) 短縮名を使いたければさらに.emacsに

      (cgikit-invade-global-namespace)
    を追加します。

使い方

まず最初にコンポーネントディレクトリを開く

まず最初にコンポーネントを格納したディレクトリを開きます。

  M-x cgikit-find-directory

短縮名を有効にしているときは、

  M-x ckf

でもできます。また、現在のバッファがCGIKitコンポーネント関係のものであれば

  C-c C-d

でもできます。

ディレクトリを聞いてくるので、編集したいコンポーネントのディレクトリを指定します。 すると画面が3分割され、次のような構成になります。

  +--------------------+
  |    template        |
  |                    |
  +--------------------+
  | code       | bind  |
  |            |       |
  +--------------------+

また、新規コンポーネント作成のときはディレクトリが新たに作られ、初期テンプレートが挿入されます。

別なコンポーネントディレクトリを開く

3分割状態になると別なコンポーネントを開くことも簡単にできます。

  C-c C-f

あるいは

  M-x ckc

としてください。 コンポーネント名を補完つきで入力すると、そのコンポーネントにおける3分割状態になります。

コンポーネント関連のウィンドウへジャンプ

3分割状態において、それぞれのウィンドウへジャンプすることができます。 キーバインドはしてありませんので必要な人のみどうぞ。

  M-x cgikit-switch-to-html-window
  M-x cgikit-switch-to-rb-window
  M-x cgikit-switch-to-ckd-window

エレメント・バインディング間の移動・リンク

テンプレートファイル、バインディングファイルにおいて、カーソル移動及び対応する場所へのリンクをします。 存在しないバインディングは新規作成されます。

  • M-p: 前のcgikitタグ・バインディングへ移動
  • M-n: 次のcgikitタグ・バインディングへ移動
  • M-e: cgikitタグから対応するバインディングへ、バインディングから対応するcgikitタグへジャンプ

ヘルプ機能

エレメントが持つ属性を表示

バインディングファイル内でM-cを押すとそのエレメントの取りうる属性を表示します。 どの属性を持つのかわからなくなったときに便利です。

エレメントの説明を表示

同様に、M-hを押すとそのエレメントの説明を表示します。 スペースキーで元の画面に戻ります。

埋め込みckd

現状のCGIKitコンポーネントは、html/ckd/rbの3つのファイルを同時に扱わないといけません。 一見きれいに分離されていてよさげにも見えますが、CGIKitコンポーネントを実際に開発したり解読したりするときかなりつらいものがあります。 というのは、ひとつのエレメントに関する情報が分散しているからだと考えています。 あるエレメントの情報を見たいときに、いちいちrbとckdの対応する場所にカーソルを持っていき、視線をその場所に移すのがかなりストレスになります、少なくとも俺は。

この問題を解決するために、ckdをrbに埋め込み、rbをセーブすると同時にckdを自動生成することを考えました。 これにより、

  • ckdファイルを直接扱わなくてすむために、扱うべきファイルが3つから2つに減ります! バッファ切り替えがかなり楽になります。
  • バインディングとコードが隣あっているのでエレメントに関する情報が一目でわかります。

一見ごちゃごちゃしていそうですが、幸いEmacsにはfont-lockでソースコードに色をつけてくれるおかげで埋め込みckdとコードは((*はっきりと区別*))できます。

書き方

((<RD|URL:www.rubyist.net/~rubikitch/computer/rd-intro/>))のようにRubyスクリプト中で

  =begin

から

  =end

までの部分が無視されることを利用します。

埋め込みckdは

  =begin ckd

から(ckdは小文字)始まり

  =end

で終わります。

例をあげてみましょう。こんな感じになります。 ここでは色がつかなくて見辛いですが、実際は色がつきます。

  =begin ckd
  name : CKString {
    value = name;
  }
  =end
    attr_accessor :name

  =begin ckd
  comment : CKString {
    value = comment;
    escape=false;
  }
  =end
    def comment
      display_comment @comment
    end

設定

埋め込みckdを有効にするには、

  (setq cgikit-embedded-ckd t)

を.emacsに書きます。

また、デフォルトでは埋め込みckdを有効にしているが、特定のコンポーネントでは無効にしたい場合、そのコンポーネントの((*rbファイルの*))最下部に

  # Local Variables:
  # cgikit-embedded-ckd: nil
  # End:

と書いてください。

逆に、デフォルトで無効にしているが、特定のコンポーネントで有効にしたい場合は

  # Local Variables:
  # cgikit-embedded-ckd: t
  # End:

と書いてください。

カスタマイズ

画面構成の変更

ファイルを開いたときの画面構成は cgikit-find-files-1 関数に定義されていますが、別な画面構成がいいという人は新たに関数を書いて(ex. my-cgikit-find-files)、cgikit-find-files-function変数にその関数シンボルを指定してください。

History

:[2004/04/15]Ver 0.2.3

  * CGIKit-1.2.0のドキュメントを反映。

:[2003/12/30]Ver 0.2.2

  * ((<[cgikit:0474]|URL:http://www.freeml.com/message/cgikit@freeml.com/0000474;jsessionid=y7ozzg4i81>))の修正を適用。高石さん、ありがとうございます。
    * テンプレートのcgikitエレメント以外のところで M-e した時に、
      空のバインディングを作成しようとしてエラーになっていたのを
      修正。
    * M-p M-n で次の要素が見つからなかった場合に、エラーが出たり
      1文字分だけ進んでしまっていたのを修正。

:[2003/11/04]Ver 0.2.1

  * CGIKit-1.1.0から標準添付になりました。ありがとうございます。
  * ヘルプをcgikit-1.1.0対応

:[2003/10/30]Ver 0.2.0

  * ((<埋め込みckd>))
  * ((<エレメント・バインディング間の移動・リンク>))の挙動にバグがあったのを修正。
  * C-c C-f, C-c C-dをバインド。

end

[Validate]