------------------------------------------- 03/04/09(水) 16:15:52 入力部でのキーイベント処理を変更。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/javax/swing/text/JTextComponent.html によると 1. インプットメソッド (ここで生成される) 2. フォーカスマネージャ 3. 登録済みキーリスナー 4. JTextComponent で処理するインプットメソッド 5. 現在のキーマップを使用して処理するキーマップ 6. JComponent で処理するキーボード (例: アクセラレータ、コンポーネントナビゲーションなど) という順なのだが、JTextComponentがキーを使いすぎているので アクセラレータを指定しても実行されないことがあった。 そこで、menu.confに登録したアクセラレータはキーリスナーの段階で実行してしまうようにした。 ------------------------------------------- 03/04/09(水) 03:04:44 DCCのファイル送受信をリジューム対応にした。 ------------------------------------------- 03/04/08(火) 03:25:16 ソケット周辺をnioに移行した。だいぶ軽くなった。 DCC受信器と送信器を用意した。送信側はNAT対応がまだ十分でない。 プラグインと同じスタイルで機能拡張を書いて埋め込めるようにする準備。 実行時にロードとアンロードができるならクラスファイルを後から追加できる仕組みにしたいところだ。 ------------------------------------------- 03/04/01(火) 17:04:05 バッファ中の区間をクリックした際に発生するアクションを Style.conf から指定できるようにした。 マウスポインタが乗った際の強調表示を無効にする設定を追加した。 範囲選択がなかったらバッファのgetSelectedTextはホバー内のテキストを返すようにした。 クリッカブルURLの処理をスクリプトから行うようにした。 BrowserNameの指定で複数の引数を空白で区切れるようにした。 "" '' で括るのも可能なはず。 "" ''内部のエスケープはStreamTokenizerに依存している。 すべてのメッセージでもキーストロークでコピーなどのアクションを実行するようにした。 Style.conf の設定追加 nohover 区間にマウスポインタが乗った際の強調表示を無効にする clickaction 区間にクリックしたさいに実行するアクション名 popupmenu 区間を右クリックした際に出るメニューの名前 設定例 ColorFont "base" "#600000" "" "#FFFFFF" "#000000" 12 "MS Pゴシック" nohover ColorFont "url" "#FF8000" "" "#FFFFFF" "" 12 "MS Pゴシック" clickaction="clickableURL-click" ColorFont "%f" "#0060FF" "" "#FFFFFF" "" 12 "MS Pゴシック" popupmenu="popup-from" ------------------------------------------- 03/04/01(火) 03:35:20 バッファコンポーネントを書き直した。 CTCP文字装飾対応、キーワード強調の準備、メモリ消費の軽減など。 ただしクリッカブルURLの実装がまだ。 ------------------------------------------- 03/03/28(金) 07:41:25 menu.conf でActionCommandと不可視メニューを扱えるようにした。 履歴の移動、バッファ一覧の移動にアクションとアクセラレータを設定した。 メタキー+上下はJTextArea等でL&Fのキー割り当てがあるとそちらが優先されるようだ。 docs/api/javax/swing/doc-files/Key-Index.html#JTextArea に割り当てが書いてある。 今ひとつ不安定なのでやりたくなかったが、Look&Feelを実行時に変更できるようにした。 編集関係のアクションを書き直した。 ------------------------------------------- 03/03/27(木) 17:33:51 OutOfMemoryErrorが出た。 スタックトレースが出ないのでjdbを実行するバッチdebug.batを用意した。 対話型なのでantの内部には組み込めないだろう。 debug.bat catch all java.lang.OutOfMemoryError run で動かして 退出メッセージに4Mlody was here =]を指定すると 停止して位置が表示された。 CTCPの文字装飾のパースに問題があったようだ。 ------------------------------------------- 03/03/24(月) 07:04:55 接続時のユーザモードの設定について。 ユーザモードを設定するタイミングは 001を受け取ってから MOTD終了を受け取った後までの どのタイミングでもいい。 要するに認証の後に最初に送るコマンドであればいい。 その際に自分のnickを知っていなければいけないのだが plumを使用している場合は 001のニックは信用できない。 plumを使っていると 001 NICK 出ないこともある (既にjoinしているチャンネルの情報) plumのinfoモジュールを使っているなら002〜004 251〜255 MOTD または MOTDなしエラー という順序で出てくる。 つまりplumを使っている場合はユーザモードを設定する いい機会は「ない」ということになる。 対策は ・001の直後に書く。ただしplumのnickとIRCクライアントのニックを合わせておく ・002またはMOTDの後に書く。ただしplumの設定でserver/info.plm を有効にしておく のいずれかとなる。 今回は後者を選ぼう。 ------------------------------------------- 03/03/24(月) 18:43:28 tateisu@smilemark.com 細かいバグ修正多数。 バッファ一覧コンポーネントを書き直す。 バッファリスト項目ごとにプロパティマップを用意。 DynamicJavaを組み込んだ。 アプリケーションと同じ空間でコードが動く。Javaのクラスライブラリも自由に使える。 難点は簡単に自分の足を撃ててしまうことと記述が簡潔ではないこと。instanceofとキャストで埋まる。 スクリプトの書き方 ------------------------------------------- 03/03/22(土) 00:44:55 バッファリストの項目ごとにプロパティマップを持たせた。 それを閲覧/編集する画面を用意した。 起動/終了時に保存する機能も用意した。 プロパティマップはString TreeMap LinkedList 以外は保存時にnullとして扱う。 ------------------------------------------- 03/03/20(木) 04:59:51 メニュー項目とキーボードアクセラレータをカスタマイズ可能にした。 アクションを package action; に置いたらパッケージ階層の 一番上をimportする方法がわからなかったので、 仕方なくパッケージ階層を整理した。 JMenuBarの扱いでハマるがムリヤリっぽい方法で誤魔化した。 メニューとアクセラレータを再起動なしで調整できるようになった。 ------------------------------------------- 02/06/30(日) 13:39:48 tateisu@smilemark.com メモ帳が*.confにByte Order Mark をつけてしまうので、それに対応。 Look&Feelを透き通らせる。壁紙ない人には見づらくないかな… 仕事でしばらくJ2SE1.4を使えないので、J2SE1.3でビルドしています。 ------------------------------------------- 02/06/16(日) 21:16:16 tateisu@smilemark.com ビルドした日を自動で設定するためにperlで短いスクリプトを書いているのだが、 現在のタイムゾーンを知る方法で悩んでる。 Time::Zoneは環境変数TZが設定されていないと意味ないし、POSIXだと perl -MPOSIX -e "setlocale( LC_ALL, qq(C) );tzset();print strftime qq(%z),localtime" 東京 (標準時) …つかえねー。 ------------------------------------------- 02/06/16(日) 20:23:08 tateisu@smilemark.com negiさんがLinux+J2SE1.3.1で動かしてくれた。 スクリーンショット。 negiさんはフォントをMS Pゴシックにしている せいか、Look&FeelがMetalになってる以外はさほど違和感がない。 ・マウスホイールまわりは動かないのでコメントアウト ・どれかのコンポーネントのsetOpaqueに問題があってコメントアウト ・jarを組まずに動かす場合はmv res/* . こんな手順だった。 ついでにEnterキーの処理にまずい部分があるのも判明 したのでより正しい書き方に修正。 ------------------------------------------- 02/06/16(日) 06:11:50 tateisu@smilemark.com 1行あたり275バイトまで削ってみた。 長さ0の行でも124バイトも使っている。 オブジェクトや配列の使用についてのjava的な管理コストが大きい。 空のオブジェクトでも参照をあわせて12バイト、空の配列でも参照をあわせて20バイト。 オブジェクトの配列がある場合、 (配列の平均要素数/オブジェクトのメンバ数) が5/3 より大きいなら オブジェクトの要素ごとに配列にして、必要なときだけオブジェクトを組み立てるほうが メモリ消費は少なくなるようだ。 後はクラスを使わない設計に変えていくか、表示系の仕様を制限していくか。 フォントを固定するとかスクロール単位を論理行にするとか。 元々軽さがウリではないのだし、一晩放置して40MB程度ならヨシとするか… ------------------------------------------- 02/06/15(土) 20:00:22 tateisu@smilemark.com バッファ上の1行あたりのメモリ消費を計算してみた。 平均40文字で7割が折り返すという条件で1行あたり494.3バイトになるようだ。 バックスクロール行数を少なめに見積もるか、気にするならCで書き直せってことですな。 ------------------------------------------- 02/06/15(土) 03:58:09 tateisu@smilemark.com DCCでファイルを受信ができるようになった。ジョブ一覧の表示がださいな… ------------------------------------------- 02/06/14(金) 10:54:54 tateisu@smilemark.com 受け取ったCTCPの表示と応答を追加。Flood対策は入れたけどGUIから設定できるようになってない。 リクエストはPRIVMSGで応答はNOTICEだったのか…。 ------------------------------------------- 02/06/14(金) 05:07:59 tateisu@smilemark.com 入力ヒストリを追加。編集中の文字列は失われてしまう手抜き実装だ。 ------------------------------------------- 02/06/13(木) 22:26:25 tateisu@smilemark.com レイアウトを変更するオプションを追加。ログの折り返しにバグを見つけたので修正。 ------------------------------------------- 02/06/13(木) 06:15:57 tateisu@smilemark.com Dialogってフォントサイズ違うのをいくつか混ぜるとすごく遅くなるね。 CTCP対応をぼちぼちはじめようと思ったら、その手前のクォートの部分でかなり混乱した。 ------------------------------------------- 02/06/12(水) 20:54:23 tateisu@smilemark.com bgがGUI部品を貫通して表示されるように変更。 javaはpngの読み込み遅いな…。 ------------------------------------------- 02/06/11(火) 18:08:22 tateisu@smilemark.com bgを後から読み直すように変更。配布アーカイブも小さくなりました。 ------------------------------------------- 02/06/11(火) 03:26:13 tateisu@smilemark.com とりあえず配布場所を用意してみる。 まだ「会話できるだけ」って状態です。CTCPもDCCもないし、 whois等のクエリ系のコマンドも用意されてません。 それより、背景画像を添付するのを早くやめないといけない…。 -------------------------------------------