126 lines
3.8 KiB
Plaintext
126 lines
3.8 KiB
Plaintext
|
#!/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
|
||
|
|