#!/usr/bin/env python2.7 import sys events = [ ('xproto', 'KeyPressEvent'), ('xproto', 'KeyReleaseEvent'), ('xproto', 'ButtonPressEvent'), ('xproto', 'ButtonReleaseEvent'), ('xproto', 'MotionNotifyEvent'), ('xproto', 'EnterNotifyEvent'), ('xproto', 'LeaveNotifyEvent'), ('xproto', 'FocusInEvent'), ('xproto', 'FocusOutEvent'), ('xproto', 'KeymapNotifyEvent'), ('xproto', 'ExposeEvent'), ('xproto', 'GraphicsExposureEvent'), ('xproto', 'NoExposureEvent'), ('xproto', 'VisibilityNotifyEvent'), ('xproto', 'CreateNotifyEvent'), ('xproto', 'DestroyNotifyEvent'), ('xproto', 'UnmapNotifyEvent'), ('xproto', 'MapNotifyEvent'), ('xproto', 'MapRequestEvent'), ('xproto', 'ReparentNotifyEvent'), ('xproto', 'ConfigureNotifyEvent'), ('xproto', 'ConfigureRequestEvent'), ('xproto', 'GravityNotifyEvent'), ('xproto', 'ResizeRequestEvent'), ('xproto', 'CirculateNotifyEvent'), ('xproto', 'CirculateRequestEvent'), ('xproto', 'PropertyNotifyEvent'), ('xproto', 'SelectionClearEvent'), ('xproto', 'SelectionRequestEvent'), ('xproto', 'SelectionNotifyEvent'), ('xproto', 'ColormapNotifyEvent'), ('xproto', 'ClientMessageEvent'), ('xproto', 'MappingNotifyEvent'), # X Shape extension events ('shape', 'NotifyEvent'), ] assert len(sys.argv) == 2 if sys.argv[1] == 'evtypes': print 'package xevent' print '''/* Defines event types and their associated methods automatically. This file is automatically generated using `scripts/write-events evtypes`. Edit it at your peril. */''' print print 'import (' print '\t"fmt"' print print '\t"github.com/jezek/xgb/shape"' print '\t"github.com/jezek/xgb/xproto"' print ')' print for ext, e in events: # Skip ClientMessageEvent and ConfigureNotifyEvent # We define these manually in xevents/types_manual.go if e in ('ClientMessageEvent', 'ConfigureNotifyEvent'): continue if ext == 'xproto': print 'type %s struct {' % e print ' *%s.%s' % (ext, e) print '}' print print 'const %s = %s.%s' % (e[:-5], ext, e[:-5]) print print 'func (ev %s) String() string {' % e print ' return fmt.Sprintf("%%v", ev.%s)' % e print '}' print else: print 'type %s%s struct {' % (ext.title(), e) print ' *%s.%s' % (ext, e) print '}' print print 'const %s%s = %s.%s' % (ext.title(), e[:-5], ext, e[:-5]) print print 'func (ev %s%s) String() string {' % (ext.title(), e) print ' return fmt.Sprintf("%%v", ev.%s)' % e print '}' print elif sys.argv[1] == 'callbacks': print 'package xevent' print '''/* Does all the plumbing to allow a simple callback interface for users. This file is automatically generated using `scripts/write-events callbacks`. Edit it at your peril. */''' print print 'import (' print '\t"github.com/jezek/xgb/xproto"' print print '\t"github.com/jezek/xgbutil"' print ')' print for ext, e in events: e = e[:-5] if ext != 'xproto': e = '%s%s' % (ext.title(), e) print 'type %sFun func(xu *xgbutil.XUtil, event %sEvent)' % (e, e) print print 'func (callback %sFun) '\ 'Connect(xu *xgbutil.XUtil,\nwin xproto.Window) {' % e print ' attachCallback(xu, %s, win, callback)' % e print '}' print print 'func (callback %sFun) ' \ 'Run(xu *xgbutil.XUtil, event interface{}) {' % e print ' callback(xu, event.(%sEvent))' % e print '}' print