Cocoa Emacs 改造記録

これは Cocoa Emacs (emacs 23.1 以降) の改造記録である。

insertText

nsterm.m の

      emacs_event->kind
        = code > 0xFF ? MULTIBYTE_CHAR_KEYSTROKE_EVENT : ASCII_KEYSTROKE_EVENT;

      emacs_event->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;

とした。なぜかというと、日本語入力モードで最初に半角が入るといきなり確定されてしまうので記号を変換するユーザ辞書単語登録を使っていると不便だからだ。例えば > は → に単漢字として変換されるように単語登録している。

NS_KEYLOG

nsterm.m の L.4355

#define NS_KEYLOG 0

1にするとデバッグっぽくなる

-(void)setMarkedText: (id)aString selectedRange: (NSRange)selRange の選択範囲を明示したい

今はことえりや ATOK などで入力中に文節がどこで切れているのかが全くわからない。

どうにかならんかなー。(NSRange)selRange の部分の face を変更するだけなんだけど 今の NS (NEXTSTEPの略、Cocoa な部分を表す) の実装は ns_working_text 全体が ns-working-text-face (list/term/ns-win.el で定義) という face になるのみ。

ns_working_text は Lisp_Object だ。 build_string ([workingText UTF8String]) で NSString から作られる。

これではちょこっといじるだけではだめで、やや大がかりにいじるしかないのかなあ。

どこかな

  • NS_TEXT_EVENT という emacs event が割り当てられ、KEY_NS_PUT_WORKING_TEXT となる。
  • そうだったら、keyboard.c で
            obj = Fcons (intern ("ns-put-working-text"), Qnil);

が呼び出され

  • ns-put-working-text という lisp の関数が呼ばれる。

だからおそらく今は selected range は考慮されていない。

inline_patchで区別された

なんか知らんけど最新の inline_patch で区別されるようになっていた(笑)

現在

今の 24.0.〜 では selected range も公式に取り込まれている

Last modified:2010/07/02 22:52:07
Keyword(s):
References:[計算機関連]