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 とかにしとけばよかった.
[ツッコミを入れる]