hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
05/19/2008 ふむ [長年日記]
tDiary 2034日目
■ [メモ] GTK の Enter キー
SCIM とかだと変換確定時の Enter が key-press-event に渡らないけど,XIM だと渡ってしまうくさい.
Enter 入力時の動作をいじるとき,key-press-event をフックする方法を採ると SCIM とかは大丈夫でも XIM でおかしなことになる.
Pidgin とかは key-press-event を使わず,gtk_binding_entry_add_signal で Enter キーをシグナルに関連づけてるっぽい.
PyGTK なら例えば以下のような感じで実現可能.
import gobject import gtk class EnterKeyPressEntry(gtk.Entry): __gsignals__ = { 'enter-pressed': (gobject.SIGNAL_RUN_LAST|gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT,)) } def __init__(self): gtk.Entry.__init__(self) def do_enter_pressed(self, modifier): pass gobject.type_register(EnterKeyPressEntry) for mod in [0, gtk.gdk.SHIFT_MASK, gtk.gdk.CONTROL_MASK, gtk.gdk.MOD1_MASK]: gtk.binding_entry_add_signal(EnterKeyPressEntry, gtk.keysyms.Return, mod, 'enter-pressed', gobject.TYPE_INT, mod) gtk.binding_entry_add_signal(EnterKeyPressEntry, gtk.keysyms.KP_Enter, mod, 'enter-pressed', gobject.TYPE_INT, mod) if __name__ == '__main__': import sys e = EnterKeyPressEntry() e.connect('enter-pressed', lambda _e, m: sys.stdout.write('mod:%d\n' % m)) w = gtk.Window() w.add(e) w.connect('delete-event', lambda w, e: gtk.main_quit()) w.set_default_size(100, 50) w.show_all() gtk.main()
そういや
Entry は activate か何かがまさにそれだったような気がする... 例を TextView とかにしとけばよかった.