Tag Archives: growl

userChrome.js

朝顔日記 – Firefox の拡張機能、userChrome.js の私の使い方 をメモメモ。 Apple Scriptを書いて独自に機能を追加するようなものかな。まぁApple Scriptは触ったこと無いけど。

Caminoにも、そんな風に簡単なスクリプトが追加できればいいなぁと思うけど、CamiScriptがそういいうモノなのかな。


PugsでPerl6

PugsはHaskellでのPerl6の実装。

Perl6の仕様はほとんど知らないんだけど、PugsでPerl6を体験するによるとずいぶん変わるっぽいなぁ。


変換候補ウィンドウの表示位置

というわけで、更新。テキトーだけどバージョン番号も付加した。

前回のは変換候補ウィンドウがとんでもないところに表示されたけど、今回のではそれを修正。具体的には、変換候補ウィンドウの表示位置はfirstRectForCharacterRange:に従うのだけれども、リファレンスによるとこれはスクリーンに対しての座標系を用いるべきなのに、以前のではそれをビューの座標系で返していたのが原因だった。

ほかにもこまごまと。英語が稚拙なのはスルーの方向で。

変換中の文字列をクリックすると変換する部分が移動したりするのは、使ってる人いるのかな?正直実装方法がわからない。 characterIndexAtPoint:が呼び出される気がするけど、どうやらそうでもない。


NSViewへのテキスト入力を実装してみた

NSViewにNSTextInputを実装してみた。

ことえりでしかテストしてないけど、一応日本語も可能。ATOK欲しいけど余裕無し。

実装したもの、してないもの:

  • 変換リストの表示位置の制御はできてない。やり方がわからない。
  • テキストの矢印キーでの前後の移動は実装した。上下は実装してない。
  • deleteBackward/Forwardは実装した。
  • 選択範囲の変更は未実装。
  • いくつかのNSTextInputのメソッドが未実装。

まぁ、未実装なモノのほとんどが今回の件には不要だから、気にしない。 ことえちの変換リストの表示位置だけは必須かな。

あとあとのために、実装する際のメモ:

  • selectedRangeは、基本的にはキャレットの表示位置。ただしlengthが0でない場合には、キャレットの描画は不要。
  • markedRangeは、日本語入力中にはその範囲を表す。それ以外の時(hasMarkedText == NO)には不要なので、selectedRangeの結果を返すようにしている。
  • setMarkedText:(id)aString selectedRange:(NSRange)selRangeについて
    • aStringはIMへの入力によって更新された、未確定文字列。
    • selRangeは、aString内における選択範囲。
  • insertText: (id)aString が呼び出されるのは、未確定文字列などが確定されたときや半角英数字を入力したときなど。この内部では、再び確定した文字列でmarkedRange内を置き換えたり、unmarkTextを呼び出す必要アリ。

読んだら分かるように、キモとなるのはinsertText:とsetMarkedText:selectedRange:によるselectedRangeとmarkedRangeの取り扱い。半角英数字のみならmarkedRangeは不要なのかもしれないけど、日本語入力を可能にするためには必須。

ちなみに、このアーカイブに含まれる内容は、煮るなり焼くなり本当に好きにしてもらって構わない(NYSLの文章を添付すべきだったかな)。ってか、むしろより良いモノを作って公開してもらいたい。これは希望

参考にしたのは、Java-Cocoaだけど、みるくCocoaの文字列入力。これだけだと半角英数字しか使えないけど、とっかかりには十分。 あとは、マニュアルと、あとなんだろう?とにかく情報が少なかった気がする。

あとは、まぁ、追々。

そういやCaminoも参考にしたなぁ。nsChildView.mmにNSTextInputが実装されてたから。まぁC++で実装された関数を使ってばかりだし、流れぐらいしかわからなかったけど。今はBug 4586を参考に、候補ウィンドウ(変換パレットだったり、入力リストだったり)の表示位置制御にとりかかってる。


TextMateを使ってみた

素敵だった。まぁ日本語が通らないけど。その問題は、ドキュメントを読む限り長期的なTODOとしてあるようだった。

で、TextMateを見て、今弄ってる(といっても大学が再開して放置気味)自作エディタに対して萎えたので、それのソースを適当に公開してしまおうかなー。そして日本語入力に取り組んで、TextMateに寄与してみようかなー、とか。入力システムがなかなか複雑なので困ったもんですが。

予想通りというか、TextMateのテキスト編集部分はCocoaを使っていないとのこと。残念。


xsltprocは文字コード変換もやってくれる、のかな

UTF-8で書いたXML、XSLTをxsltprocにかける際にXSLTのxsl:outputのencodingにShift_JISを指定したら、出力結果のXML宣言のencodingの値がShift_JISになっているだけでなく、実際のエンコーディングもShift_JISになっていた。


Apple、Intel MacでWindowsを動作可能にするツールのパブリック・ベータを公開

Apple、Intel MacでWindowsを動作可能にするツールのパブリック・ベータを公開

10.5ではデュアルブートではなくVirtualPCのようになるといいなぁ。

でもとりあえず余裕が出たらMac miniを買うことにしよう。

ITmediaの記事が詳しい。現在NTFSへの書き込みはサポートされていない模様。Leopard登場時に正式対応したら、魅力的だなぁ。そのとき買うとしよう。Intel Mac向け仮想化ソフトウェアが登場という話もあるし、アグレッシブだなぁ。


NSTextViewでのタブ幅の設定

べたテキストを扱う前提で。 NSTextViewのawakeFromNibで、

  1. NSMutableParagraphStyleのsetTabStops:に空のNSArrayを渡す。
  2. NSMutableParagraphStyleのsetDefaultTabInterval:にタブ幅をfloat値で渡す。
  3. NSTextViewにsetDefaultParagraphStyle:で弄ったNSParagraphStyleを渡す。

後からタブ幅を変更する際にはNSTextStorageにaddAttributes:range:で全体に適用しなおす必要がある。

タブ幅を文字数で設定するには、NSFontのpointSizeではなく、maximumAdvancementのwidthを文字数倍するのが正しい、っぽい。


NSTextViewでのワードラップとか

NSTextViewの表示範囲の端にきても自動改行しないようにするには、/Developer/Examples/AppKit/TextSizingExampleのReadmeを参考にNSTextViewとNSTextContainerのパラメータを設定する。NSScrollViewに横スクロールバーを表示するよう設定するのを忘れずに。

で、改行する場合に単語単位で改行するか文字単位で改行するかを設定するには、NSMutableParagraphStyleのsetLineBreakMode:を使って設定して、NSTextViewにsetDefaultParagraphStyle:で適用すればいい。

TextSizingExampleでは動的に表示するNSTextViewを切り替えているようだけど、実際には動的にパラメータを設定しなおすだけでも問題ないっぽい。大量にNSTextViewを保持するのはイヤだ。


NSMutableParagraphStyleはNSTextStorageに

NSTextView中で改行モード(NSLineBreakByClippingなど)を設定したいなーと思ったら、

  1. NSParagraphStyleのdefaultParagraphStyleをmutableCopyしたものに、
  2. setLineBreakMode:をして、
  3. 該当NSTextViewのNSTextStorageにNSParagraphStyleAttributeNameに対する属性としてそれを設定する。

しかし、NSTextStorageに属性を設定できるとなるとNSLayoutManagerのsetTemporaryAttributes:forCharacterRange:の類を使う必要がない気がするんだけど、そこらへんどうなんだろう。もしかしたらその影響か、NSScrollViewの横スクロールがうまく同調してないっぽい。

テキスト全体に効かせるにはsetDefaultParagraphStyle:を使えばいいみたいなので、べたテキストの場合にはNSTextStorageをいじる必要はなさそう。あとは、タブ幅の設定。setDefaultTabInterval:はなんか違う予感。