2005年9月24日から2005年9月20日までの日記を表示中
2005年 9月 24日 (土)
■textareaのキャレット位置
いやー,IEでtextareaのキャレット位置を取り出すのがこれほど大変だったとは・・・.いや,いまだになんでこれで取り出せてるのかよくわかんないんですけどね・・・.
,j;;;;;j,. ---一、 ` —--‐、_ l;;;;;;
{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; 互換性さえ気にしなければ
ヾ;;;ハ ノ .::!lリ;;r゛ 小手先の技は必要ない・・・
`Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が
,;ぇハ、 、_,.ー-、_',. ,f゛: Y;;f 俺にもありました
〜''戈ヽ `二´ r'´:::. `!
[コメントを書く]
■Celestia Event vol.1
大臣さんが主催されているCelestia Projectというコミュニティサイトでステキな催しが開催されています.スクエニ(というよりスクウェア?)の音楽好きな人は必聴かと.
[コメントを書く]
[コメントを書く]
■uim.el
keymap を compact に。
ヽ(゜∀゜)ノ!?
keymap を compact に。できないかも。
(´・ω・)
keymap を compact に。できないかも。できんかった。
_|‾|○
いやー,まさかkeymapに手を出されるとは・・・.すごいっす.keymapは超汚いんで,どうにかした方がいいとは思うんですが,すこし触っただけでもすぐ動かなくなりそうで・・・.
[コメントを書く]
[コメントを書く]
2005年 9月 23日 (金)
■mmm-modeとかjavascript-modeとか
オライリーのJavaScript本は実はずいぶん古かったのね・・・.買わずに借りて済ませてもよかったかもな感じです.それはそうと,javascript-mode.elとか無いかと探してたら,mmm-modeなるものを見付けました.mmmとは,Tcl/Tkで書かれたWebブラウザで,「もー」と読みま・・・ご,ごめんベタすぎた_|‾|○.
えーと,mmm-modeは,単一のバッファ内で複数のメジャーモードが共存できるようにしてくれるEmacsのマイナーモードです.バッファ内の領域を指定して,ここからここまではphp-mode,ここからここまではcss-mode,みたいな感じです.範囲は手でも指定できるし,パターンマッチングでも指定できます.これを使うと,HTML内に記述してあるCSS,PHP,JavaScriptが大変よい感じに扱えるようになる,と.Meadow/Emacs memoに設定サンプルがあったりします.
で,javascript-modeなんですが,探したら実はGNU Emacsに同梱されている模様.ただし,「(require 'generic-x)」とかやらないと使えないみたいな.define-generic-modeでお手軽設定みたいなことやってる雰囲気です.早速適用してみたところ,「/* */」スタイルのコメントがコメントとして認識されないみたいです.ありなのか,それ・・・.というわけでコメント定義を追加してみることに.こんな感じ?構文フラグとかいって覚えられませーん.
(require 'generic-x) (add-hook 'javascript-generic-mode-hook (lambda () (modify-syntax-entry ?/ ". 124b") (modify-syntax-entry ?* ". 23") (modify-syntax-entry ?\n "> b"))) (add-to-list 'generic-extras-enable-list 'javascript-generic-mode)
あれ,インデントが変ですねー.というかc-set-styleがうまく効かないのはなんでかなー・・・.うーん(;´Д`)・・・あれ,XEmacsにjavascript-mode.elついてるじゃんΣ(゜д゜lll).しかもGNU Emacsで動くし・・・.最初からこれ使うんだった_|‾|○.というわけで javascript-generic-mode やめて javascript-mode に移行しましたorz.無駄な時間を・・・.
[コメントを書く]
[コメントを書く]
■uim+Ajaxの続き
んで,JavaScriptを少し学んだ上で,先日超中途半端に終わったuim + Ajaxに再挑戦してみました.前回,chrootしたサーバ越しにuimが起動しないという状況だったんですが,デバッグメッセージを標準出力につないで出してみたところ,何か「(getenv "HOME")」が取れないことが判明.そこで内部でsetenvしてやったら動くようになりました.URIにキー列突っ込んで送ると,最後のキーが押された後のIMの状態が返ってくるようになりましたよ.ちなみに,これでAnthyも動くようになりました.全てはHOMEか・・・.
で,次にブラウザ側でキー拾うところなんですが,「JavaScript & DHTMLクックブック」のお蔭でこっちは割と楽にできそうな感じです.ただ,IEでC-fとかf1を拾わせない方法がよくわからんです.C-nとかはブロックできたんですが・・・.まあ,ひとまず後回しです.
サーバにリクエスト送ったりする部分は,Mozillaのサイトにあったサンプルコードそのまま貼っ付けておしまいです.ここは特にやることなさそうだし.
というわけで,次は XMLから必要なデータ取り出すところなわけですが・・・早くもはまり気味・・・.
[コメントを書く]
[コメントを書く]
2005年 9月 22日 (木)
■b-mobile
なんか最近,使ってると突然「cs: pcmcia_socket0: unable to apply power.」とか言って接続が切れたりする現象がががっΣ(゜д゜lll)! 圏内でも緑色のLEDが消えるんで,実際通電してない状態になってるっぽいんですが,なんなんじゃろう.さしっぱなしで鞄に突っ込んだりしてるのが悪い・・・んだろうなぁ(;´Д`).
[コメントを書く]
[コメントを書く]
■CDとか
ゆづき亭さんの「Enchanted Waves」を聴きましたよ.・・・ん?「©NAMCO」?何が入ってんだ・・・ってkiyoma氏はボスコニアンと混ぜてるのか(^^;.ていうかほとんどボスコニアンじゃん(笑).
で,リッピングしたのを聴いたりもしてるわけですが,とりあえず,東方ミッドナイトが妖々夢(ほぼ)フルアレンジアルバムだということに今日初めて気づきました(^^;.
[コメントを書く]
[コメントを書く]
■gaim-xmms
Gaim-XMMSというプラグインを見付けたのでちょっと試してみました.これ,Gaimからxmmsを操作する・・・なんていうどういう意味があるのかよくわからないプラグインではなくて,xmmsで再生している曲のタイトルとかをGaimのユーザアカウントのプロフィールに反映してくれるプラグインです.
これって,つまり本家MSNメッセンジャーとWMPかなんかでやってるあれと同じようなことができるのか!?と期待して入れてみたんですが,MSNでは機能してくれない模様(´・ω・`).ソース見るとMSN関連の記述はあるんですが,コメントアウトされてました.アンコメントして有効にしてみたんですが,やっぱりだめぽ.この辺で議論してますね.外から叩けるAPIが無いのかな・・・.
[コメントを書く]
[コメントを書く]
■anthy.scm
昨日の続きというか,地味にanthy.scmとか見たりしてるんですが,最初define-recordの意味が全然わからずしばらく引っかかりましたorz.で,局所的に見た結果「その直後のキー入力が1個分読み飛ばされちゃう」というのは実は間違いで,正しくは「その直後のキー入力を処理した際に,プリエディットが更新されない」ということが判明.
何か,コントロールキャラクタがuim_release_keyの方に与えられると,anthy-release-key-handler内でanthy-commit-rawが呼ばれ,その結果 anthy-context-commit-raw が #tになって,次の別のキー入力によって anthy-press-key-handler が呼ばれたときにキー処理後に呼ばれるanthy-update-preeditの中でcontext-update-preedit が飛ばされてしまうため,こうなるっぽいです.・・・というのは,ソースを追えば誰でもわかる話で,なんでこうなってんのかとか,「anthy-context-commit-raw」が何を表してんのかとかマジさっぱりです(;´Д`).昨日あてずっぽうで書いた対処は,pressの方でcontext-update-preedit が飛ばされた後,もう1回releaseの方で anthy-update-preedit を呼ぶことでフォローしてるに過ぎないので,たまたまうまく当たったって感じですね.
うーん,プリエディットが存在している間はコントロールキャラクタ(1〜31と127)は捨てていいんじゃないかと思うんですが,素通ししてうれしいブリッジってあんのかなぁ.
[コメントを書く]
[コメントを書く]
2005年 9月 21日 (水)
■uim.el
井上さんがElispをいじっているッ!(*´Д`)ハァハァ.
で,昨日あんなにキモい長文だらだら書いたbackspaceとかdeleteの件ですが,
uim.el側で変換前のとっといて使えばいいじゃんという感じなんですが,何らかの理由でそれはあきらめたんだったと思います(XEmacs絡みかな?忘れちゃいましたorz).
のところを落ち着いて見直したら,実は大したこと無くて,XEmacsでも問題なく動くようにできました.XEmacsでちゃんと動かなかったってのは,単にXEmacsに対応させようとしてた当時気合いが足りて無かっただけのようですorz.(´・ω・)テラカッコワルス.こんな漏れでも少しはElispレベルが上がっているようです・・・.
ちなみに,
そのときに,生のまま[127]をuim-agentに渡してしまうと,[127]はC-dともDeleteとも違うため,uimはDeleteとして処理してくれません.これだけならまあいいんですが,厄介なことにプリエディットがおかしくなるという副作用つきです.
は,実は変になるのはanthy限定っぽいです.しかも,[127]に限った話ではなく,char-control? に引っかかるキーは,何突っ込んでもおかしくなるみたいです.ただ,uimに渡す前にuim-agent内で[1](C-a)とか[5](C-e)とかの[26]以下キーは「UMod_Control + アルファベット」に,[27]は「Escape」に,それぞれ直してるんで,[127]だけ特別に見えてしまった,みたいな.なんで,実際には[127]の他に,[28]〜[31]でも変になる可能性があって,実際uim-agentを生で叩くと動きが何か変になります.で,どう変になるのかって話ですが,プリエディットが存在する状態でこれらのキーを一度押すと,その直後のキー入力が1個分読み飛ばされちゃうようです.
何か,uim_press_keyの直後に呼んでいるuim_release_keyをコメントアウトすると,この現象が無くなるようなんで,anthy.scmの「anthy-release-key-handler」が怪しい?・・・うーん,prime.scmの真似すると,こうかな・・・?ぬ・・・,読み飛ばさなくなった予感?続きは明日だな・・・.
@@ -948,7 +948,8 @@ (and (not (anthy-context-on ac)) (not (anthy-context-wide-latin ac)))) ;; don't discard key release event for apps - (anthy-commit-raw ac)))) + (anthy-commit-raw ac) + (anthy-update-preedit ac)))) (define anthy-reset-handler (lambda (ac)
[コメントを書く]
[コメントを書く]
■adefg
adefgなるAnthyの辞書管理ツールを入れてみました.おお,こりゃいい!・・・ぬ,既存エントリを編集しようとするとたまに暴走するのはGtk+-2.8.3とか使ってるからかな.
[コメントを書く]
[コメントを書く]
2005年 9月 20日 (火)
■CDとか
よみさんから誕生日プレゼントを貰った!・・・どうすんだこれ(;´Д`).
それとは別に,確保してもらってた東方花映塚と,「東方連歌想」なるアレンジCDを受け取りました.かもさんというサークルさんが出してるそうなんですが,Webが無いようで,WAVEDRIVEさんより更に謎です(^^;.紅楼夢の残りなんですかね.よみさん曰く,とらのあなに行った時には既に3枚しかなかったとか.レアだ・・・.
[コメントを書く]
[コメントを書く]
■uim.elとbackspaceとdeleteの無駄に長い話
AmazonでJavaScriptの本とか注文してみました.これでAjaxまっしぐらの予定.ってそれとは全然関係ない話で,こちらと関連した話なんですが・・・.まあ,何というか,EmacsのBackspaceとDeleteの関係は恐いというか,できれば触りたくないところだったりするという言い訳です.以下考えを整理するためのメモです・・・.
えーと,結局何が問題かって言うと,デフォルトのEmacsをXで上げてBackspace押すと,何か[127]が戻ってくるんですね(「(read-key-sequence-vector ">")」とか評価すると確認できる).で,127はASCIIコードでDELなんですが,Emacsでデフォルトのバインドを見ると,これが「backward-delete-char-untabify」にバインドされてます.これ,カーソルの左を一文字消す(ただしタブはスペースにばらして消す)ので,まあ,普通に他の環境のBackspaceと同じ雰囲気で使えてしまうと (ちなみに,ターミナルでEmacsを上げた場合,xtermならBackspaceはやっぱり[127]になり,mltermだと[4](つまりはC-d)になって,右側一文字が消える,「delete-char」として処理されます).
で,Emacsで完結するならそれでいいんですが,uim.elはこのキーの値をuim-agentを介してlibuimに渡す必要があります.そのときに,生のまま[127]をuim-agentに渡してしまうと,[127]はC-dともDeleteとも違うため,uimはDeleteとして処理してくれません.これだけならまあいいんですが,厄介なことにプリエディットがおかしくなるという副作用つきです.
この問題は,uim.elが[127]をuim-agentに渡す前に,こっそり[delete]に変換しちゃえば一応回避できます.ただ,[delete]は,当然uim-agent内部でUKey_Deleteに変換されるため,プリエディット表示時にはカーソルの右のプリエディット文字を消す動作になってしまいます.これはBackspaceキー押した際の一般的な振る舞いと違うので,よくないかなーと思うわけです.[127]をC-dである[4]に変換しても同じことです.
そこで,uim.elでは,現状[127]がきたら[8]に変換するようにしてます.なんでそんな変な変換してるのかというと,これはキーをUimがスルーしたときの処理と関係あります.Uimがそんなキーイラネとキーを返してきた場合,現状ではuim.elは,返ってきたキーをそのまま利用します.つまり,uim.elが[127]を変換してuim-agentに[8]を渡して,Uimがそれを処理しなかった場合,uim.elは,[127]ではなく,uim-agentが返してきた[(control 104)]というのを処理するようになってるんですね(104は「h」なので,これはC-hと同じ意味).uim.el側で変換前のとっといて使えばいいじゃんという感じなんですが,何らかの理由でそれはあきらめたんだったと思います(XEmacs絡みかな?忘れちゃいましたorz).
まー,そんなわけで,プリエディットが無い状態でBackspaceを押すと,uim.elには巡り巡って[8]と同じ意味の[(control 104)]ってのが戻ってきます.で,uim.elは何をするかというと,[(control 104)],すなわちC-hに何がバインドされているか,キーマップを走査して調べます.で,あらかじめ.emacsとかで「(global-set-key "\C-h" 'delete-backward-char)」とか設定してあると,delete-backward-charが実行されてめでたくカーソルの左の一文字が消えるんですが,C-hに「help-command」なるキーマップなんかが割り当てられてたりすると,消えずにヘルプに落ち・・・って現状落ちないなこれ(;´Д`).「Wrong type argument: commandp, help-command」はuim.el側のバグだった・・・orz.ま,まあ,本来は,エコー領域に「C-h (Type ? for云々・・」とか出るのが理想なわけです.
いやー,駄文ですね(;´Д`).こんな所まで読む人はいないと思いますが,そんなわけで,C-hに対してあらかじめdelete-backward-charが割り当てられてないと,uim.elを通す状態でbackspaceを押した時に,文字が消えてくれなくなる,という仕組です.というわけで,現状,uim.elは
- C-hにdelete-backward-charとかが割り当てられていて
- Backspaceを押すと[8]か[127]か返ってくるような環境
を前提として作っちゃってることになるっぽいです.大概,みんな必要に応じてbobcatとか使ってるだろうし,きっと・・・.というのが,言い訳でした.さて,どうしたものか・・・.Emacs側で[backspace] に「delete-backward-char」を割り当ててくれたりすると,[127]を[8]じゃなくて[backspace]に変換してそれで終わりな気もしますが・・・.
[コメントを書く]
[コメントを書く]
2005年9月24日から2005年9月20日までの日記を表示中
[コメントを書く]