speaker さくらいまさし
福岡で医療系ソフトウェア研究開発をやっている
ユーザインターフェイスに注目
deferred.el skype.e Emacs asyncなどを紹介
ECB
emacsをIDEモドキにする
hown
Emacs で断片的なメモをどんどんとるための環境
emacsでアプリケーションを作る (需要あるのか?)
キーボードじゃないプログラミング環境 (手書き、iPhoneなど)
もおもしろい?
Emacsでのアプリケーション開発とは
Emacser Level
使う、設定、カスタマイズ
自前関数、コマンド<< 壁 >>
メジャーモード
Emacsアプリ
Emacsアプリ開発のとりかかり
- スコープ
- データをどこに保存するのか
- 作り方、設計
- エディタのうえでどう作るか
- ローカル
- グローバル
- ダイナミック
- レキシカル
変数をどう見るか
バッファ(ファイル、データ)
フレーム(ウィンドウ)
それぞれにデータをひもづけることが出来る
どこに変数をもってくればいいかを考える
永続データ
- アプリ起動時に読み込みたい
- ローカルファイル (recentf anythingなど)
- ネットワーク経由で読み込みたい
- ネットワーク(navi2ch)
- データベース
- 外部プログラム(ほとんど無いに等しい)
セッションデータ
- バッファにひもつけたい場合
- バッファローカル
- バッファにまたがる場合
- グローバル(しょうがない)
グローバルは避けてなるべく狭いスコープ
- 複数起動、組み合わせ
- バッファローカル、クロージャ(起動時に入れて、グローバルだけど誰も触れない)
- グローバルに置く(ただの変数アクセスではなく、関数経由でのアクセスに限定)
- その他のテクニック
コントロール用バッファ、親子バッファ
問題
- バッファごとに独立している
- たくさんのviewを組み合わせたいときは?
- e.g: ECB gdb
- たくさんのviewを組み合わせたいときは?
- バッファ間の関係
- 独立か親子関係か、全員killすべきか
magit…mainのバッファがあって、子供のバッファにデータを割り当てる
バッファがたくさんある場合のウィンドウ管理
(独自制御だと混ぜられない popwinなど)
UI部品:低レベル
- ボタン
- 形(face) キー マウス (keymap)
- action-lock (ちまちまやるのは大変)
- レイアウト
- 固定幅フォント、ウィンドウ幅と高さ
- 右寄せ、左寄せ、中央寄せ
- ポップアップメニュー
- 普通のメニュー、GUIメニュー
- anythingなどのminibuffer系
- popup.elなどのoverlay系
UI部品:高レベル
フォームライブラリ widget
EmacsLisp言語方面
現状のまとめ
バッファをまたぐ場合は、データのスコープやバッファ間の関係が重要
CLOS知らなくても作れるけどあとで便利
Emacs上でのUI構築はまだ発展途上
フォームを作る場合はwidgetしかない
既視感
- 画面遷移をまたぐ場合は、データのスコープや画面間の関係が重要
- prototypeを知らなくても作れるが、後で便利
(JSによる開発とあまり変わらない?)