2007年8月11日の日記の2番目の記事へのコメント

uim.el 〜undoの謎

Emacsで半角英数字をゴゴゴっと連続入力すると20文字単位でundoリストに切れ目が入りますよね.uim.elをONにしてアルファベットを入力したときももちろん同じようになるんですが,これ,実はuim.elが自前で20文字連続入力したら切れ目を入れるような処理をわざわざやってます (確かjun0さんにご指摘頂いて追加した機能だったかと).本当はEmacsに任せてしまいたいんですがそういうの無いみたいなんで・・・.

で,最初にこの機能を追加したときから気になってたんですが,この「20」というのは一体どこで設定されているのか・・・.Emacsのデフォルトの挙動を確認したら20だったので,それに合わせてuim.elでも決め打ちで20にしたわけなんですが,やっぱどっかの変数参照してるんだったら,uim.elもそれを参照するようにした方がいいですよねぇ.というわけでちょっと探してみました.

まあ,self-insert-command から辿っていけばそのうち辿りつくだろうということで探してみたら,cmds.cに internal_self_insert という関数があって,コメントでこいつの戻り値について「A value of 2 means this did things that call for an undo boundary.」とか書いてあります.よしよし.んで,これを呼び出して戻り値を使ってる keyboard.c の command_loop_1 を見ると・・・.

  if (!nonundocount || nonundocount >= 20)
    {
      Fundo_boundary ();
      nonundocount = 0;
    }
  nonundocount++;

( ゜д゜)

(つд⊂)ゴシゴシ

(;゜д゜)

まさかの決め打ち.おそるべし FSF Emacs.ちなみにXEmacsの方も見てみたら,event-stream.c にそれっぽいのが書いてありました(ちゃんと確認してないんでもしかしたら違うかも).こっちの方がまだいいかな.

  int magic_undo = 0;
  int magic_undo_count = 20;

お名前:  メールアドレス(省略可):
メールアドレスも表示されます
ここに名前その他を書いてはいけません: ここにメールアドレスその他を書いてはいけません:

2007年8月11日の日記の2番目の記事へのコメント

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2007年8月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ