<   2004年 11月 ( 30 )   > この月の画像一覧
 | Top  | 
フォント

薬が切れた。


よくスクリーンショットに出てくるフォントが欲しいと要望があったのでとりあえず公開してみます。


と思ったら、塩に外部から直リンできないんですね。。。top からお願いします。


[PR]
by knife37 | 2004-11-30 17:59  | Top  | 
自動的な補完

「文が開始するべき位置の先頭で [a-z] が 1 文字打たれたら自動的に補完開始」ですが、試しに組んでみました。何文字識別子を打ったら補完開始するかはプロパティで設定できるようにしてみました。


1 に設定すると想像を絶する邪魔くささ。3 くらいだと可愛げのある邪魔くささ。5 くらいがいいのかな?


まあ基本的に邪魔くさいものであるのは確かなようです。




あと、コメントの中とか文字列の中とかで補完リストがでてもしょうがないので、キャレットオブジェクトにキャレットの現在位置に対応する字句解析器の名称とその状態を得るプロパティがあればいいのかも。


[PR]
by knife37 | 2004-11-25 03:14 | 妄想を申そう  | Top  | 
補完候補の生成 - 識別子

次に変数名。。。というか、識別子の補完ですが。とりあえず書いているソースの文法に即した補完候補を生成するのはめんどいので、キャレット位置から上下に n 行分の間に位置する識別子を拾って候補にする、というのを考えています。どれくらい効果があるのかなー。


ということでそうしてみました。Ctrl+Space のほかに、'.' を入力しても補完リストが開くようにしてみました。


あんまり効果ないかも。というか、あるのかもしれないけど単純にキャレット近辺の識別子を拾っているだけなので、本物の IntelliSense とかに比べるとなんか出てくる候補がすごくうさんくさいです。動作がそっくりなだけに。。。


ローカル変数はよさそうですが、オブジェクトのメンバを補完しようとするとがっかりすると思います。


[PR]
by knife37 | 2004-11-25 03:12 | 妄想を申そう  | Top  | 
補完候補の生成 - キーワード

まずキーワードですが、おとといも書きましたが、これを補完の対象とすべきかどうかはびみょー。。。'if' なんて Ctrl+Space 打って選択して。。。より直接打ったほうがよっぽど速いです。


なにより、まず Ctrl+Space を打たなければならないというのが地味にめどい。'.' を打つことで自動的にプロパティ・メソッド名の補完が開始する場合は、'.' がソースを構成する普通の文字なので入力のリズムが乱れないわけです。キーワード補完についてもそういうスムーズさを求めると、たとえば文が開始するべき位置の先頭で [a-z] が 1 文字打たれたら自動的に補完開始、なんてのが考えられます。


これがスムーズといえるのか、うざいだけなのかは人によって感じ方が全然違うと思うのでなんともいえません(わたしは 'if ' まで打ったあと「えーとなんだっけ。。。」とその近辺の行をうろうろしたりするので、いちいち補完リストが出たら邪魔だと思います)。


なんとなくですが、打つのがめんどいのは識別子であって、キーワードや '(' とかの記号類、つまり、言語の文法(if 文であれば 'if (式) 文 [else 文]' のような)を見たときの終端記号を自動的に打たれるとむしろ混乱してしまう気がします。それに、終端記号を自分で打たないとなんかソースが頭に入らないような。


キーワードの中には 'instanceof' とかの長いものもあるので、そういうときには補完を利用することもありでしょうけど、キーワードの補完についてエディタが必要以上に親切になる必要はないんじゃないかなーと思います。


[PR]
by knife37 | 2004-11-25 03:12 | 妄想を申そう  | Top  | 
補完候補の生成

補完候補の生成をはげしく妄想してみます。とりあえず javascript の場合、



  • キーワード

  • 定義した変数の名前

  • 定義した変数(ユーザ定義のオブジェクトのインスタンス)のプロパティ、メソッドの名前

  • 定義した変数(標準のオブジェクトのインスタンス)のプロパティ、メソッドの名前


あたりが補完されるとうれしいのではないかなー、と。で、補完を開始したときに



  • '.' の直後なら、メソッドかプロパティの補完。'.' の直前の識別子の型を調べて、型に属するメソッド・プロパティの名前を候補にする

  • そうでなければ、キーワードか定義した変数の名前。キャレットが位置する複文内、メソッド内、クラス内。。。の順にメンバであるメソッド・プロパティの名前を候補にする


ものすごく単純に考えると大体こんな感じになると思うのですが、これ、めちゃくちゃ大変そうです。ほとんど IDE がやってることと変わらなくなってしまいます。javascript だと変数定義の際に型を明示するわけではないからさらに面倒です。


なので、メソッド名とかプロパティ名とかで限定するのはやめて、「識別子」でひとまとめにして考えてみる。


[PR]
by knife37 | 2004-11-25 03:11 | 妄想を申そう  | Top  | 
フック?

そういえば、すでにある拡張子クラスのイベントハンドラを上書きするスクリプトを書くときなんですけども。単純に上書きだと、同じイベントハンドラを上書きするスクリプトを複数登録したとき最後に登録したスクリプトしか有効にならないので、こんな風にするとよいと思います。


// フック関数の定義
function js_onKeySpace_hook (originalHandler) {
return function (arg, classname, methodname) {

// オリジナルのハンドラの実行前に追加する処理をここに書きます
App.Notice('フックしたよ');

// オリジナルのハンドラを呼ぶ
if (originalHandler)
originalHandler.call(this, arg, classname, methodname);
else
invoke(arg, this.parent, methodname);

// オリジナルのハンドラの実行後に追加する処理をここに書きます
App.Notice('フックしたよ');
}
}
// フックする
class_js.prototype.onKeySpace = js_onKeySpace_hook(class_js.prototype.onKeySpace);

赤い字の部分が、それぞれのスクリプトを書く人が変更する必要のある個所です。特に関数名(サンプル中の 'js_onKeySpace_hook')はフックするそれぞれのスクリプトごと異なる必要があるので、そこだけ気をつけます。


[PR]
by knife37 | 2004-11-23 21:47 | トリビア  | Top  | 
寂しくない

とりあえず適当にちりばめてみました。色気ついたかなあ? アイコンは VB から抜き出したのですが、こういう使い方はたぶん思いっきりライセンス違反なんだろうなあ。。。


[PR]
by knife37 | 2004-11-23 21:44 | 妄想を申そう  | Top  | 
なんか寂しいよ

実際のところ表示するものが補完候補しかないのでしょうがないのですが、なんか殺風景なリストのような。もうすこし何か色気が欲しいなあ。


アイコンがいちばんよさそうですが、たとえば「予約語」「プロパティ」「クラス」「構造体」「列挙型」「インターフェース」。。。とあらかじめそれっぽい区分けのアイコンを保持しておくとして、それに当てはまらないものに対してはどうやってアイコンを割り当てるのか? とか。そうすると CodeInsight のように、function なら 'function' と表示するほうが賢そうではあります。


[PR]
by knife37 | 2004-11-23 21:40 | 妄想を申そう  | Top  | 
入力のリズム

IntelliSense や CodeInsight の動きをみてみると、Ctrl+Space で補完を開始するほかに、'::' とか '.' とかを打っても開始します。また、補完の途中で '(' とか '[' とか '.' を打つと補完が確定します。これは確かに入力のリズムに沿っているので、理にかなっていると思います。


それを踏まえると、HTML の場合は例えば '<' を打ったらタグの補完(スペースか '>' で確定)、タグの中でスペースを打ったら属性の補完('=' か '>' で確定)とかいう動きにするとスムーズに入力できそうです。というか、もしかして HTML 入力に特化したエディタはそういう風になってるのかな?


ためしに ez-HTML を落として試してみたらだいたいそういうふうになってるみたいですね。


萌ディタで似たような動作をさせるには、補完開始はそれぞれのキーバインドをそういう風にするだけですが、補完確定は補完状態のときに「補完を確定させる表示可能な文字」を認識させないとならない。


[PR]
by knife37 | 2004-11-23 00:59 | 妄想を申そう  | Top  | 
何を補完するか? が問題

ところでとりあえず javascript の拡張子クラスで予約語を補完させてみたのですが、よくよく考えると IntelliSense も CodeInsight も補完の候補は関数・変数のたぐいで、予約語は補完しないんですね。


予約語は数も固定しているし、打つのが面倒なほど長いわけでもないし、打ち間違えても色分けで判断できるし、当たり前といえば当たり前か。。。


[PR]
by knife37 | 2004-11-23 00:59 | 妄想を申そう  | Top  | 

 | 
検索
最新のコメント
Hi! Good stu..
by lacedkl at 10:19
i think abou..
by MaybridabanTy at 06:31
Thank you!
by Roy at 20:27
Thank you!
by Patrick at 20:26
Great work!
by Andy at 20:25
Thank you!
by Rex at 20:23
Great work!
by Maggie at 20:23
I love it: ..
by siljb at 15:51
Keep up t..
by reizomo at 15:40
http://0buyp..
by affomfobe at 02:56
最新のトラックバック
football nfl..
from football nfl t..
big penis
from big penis
lossless aud..
from lossless audio..
julianna ros..
from julianna rose ..
mind games
from mind games
game online ..
from game online po..
outer bank p..
from outer bank pet..
lingerie tee..
from lingerie teen ..
pisces chara..
from pisces charact..
wakefield co..
from wakefield coll..
フォロー中のブログ
ファン
記事ランキング
ブログジャンル
画像一覧