diff --git a/main.go b/main.go index 4707aac..2d354df 100644 --- a/main.go +++ b/main.go @@ -156,16 +156,18 @@ func main() { log.Fatal("interval must be greater or equal to zero") } var plugin Plugin + var pluginName string platformErrors := "" - for _, f := range Plugins { + for _, pluginInfo := range Plugins { + pluginName = pluginInfo.Name var err error - plugin, err = f() + plugin, err = pluginInfo.Init() if err == nil { break } else if _, ok := err.(UnsupportedPlatformError); ok { - platformErrors += err.Error() + "\n" + platformErrors += fmt.Sprintf("%s plugin: %v\n", pluginName, err) } else { - log.Fatal(err) + log.Fatal(fmt.Sprintf("%s plugin: %v", pluginName, err)) } } if plugin == nil { @@ -212,6 +214,7 @@ func main() { return } if err := processCommand(plugin, message); err != nil { + log.Print(fmt.Sprintf("%s plugin: %v", pluginName, err)) return } } diff --git a/plugin.go b/plugin.go index 014f6ef..8f9c722 100644 --- a/plugin.go +++ b/plugin.go @@ -19,20 +19,22 @@ package main -import "fmt" +type PluginInfo struct { + Name string + Init func() (Plugin, error) +} -var Plugins [](func() (Plugin, error)) = [](func() (Plugin, error)){ - InitX11Plugin, - InitWindowsPlugin, +var Plugins []PluginInfo = []PluginInfo{ + {"X11", InitX11Plugin}, + {"Windows", InitWindowsPlugin}, } type UnsupportedPlatformError struct { - name string - message string + err error } func (e UnsupportedPlatformError) Error() string { - return fmt.Sprintf("%s plugin: %s", e.name, e.message) + return e.err.Error() } type Plugin interface { diff --git a/plugin_windows.go b/plugin_windows.go index 61454b3..64db40f 100644 --- a/plugin_windows.go +++ b/plugin_windows.go @@ -75,7 +75,7 @@ func InitWindowsPlugin() (Plugin, error) { p.userDLL = syscall.NewLazyDLL("user32.dll") p.sendInputProc = p.userDLL.NewProc("SendInput") if err := p.sendInputProc.Find(); err != nil { - return nil, UnsupportedPlatformError{"Windows", err.Error()} + return nil, UnsupportedPlatformError{err} } return p, nil } diff --git a/plugin_windows_dummy.go b/plugin_windows_dummy.go index 8db1b06..dae0dbe 100644 --- a/plugin_windows_dummy.go +++ b/plugin_windows_dummy.go @@ -21,6 +21,8 @@ package main +import "errors" + func InitWindowsPlugin() (Plugin, error) { - return nil, UnsupportedPlatformError{"Windows", "disabled"} + return nil, UnsupportedPlatformError{errors.New("disabled")} } diff --git a/plugin_x11.go b/plugin_x11.go index 50555fd..8031dad 100644 --- a/plugin_x11.go +++ b/plugin_x11.go @@ -43,7 +43,8 @@ type x11Plugin struct { func InitX11Plugin() (Plugin, error) { display := C.XOpenDisplay(nil) if display == nil { - return nil, UnsupportedPlatformError{"X11", "failed to connect to X server"} + return nil, UnsupportedPlatformError{ + errors.New("failed to connect to X server")} } return &x11Plugin{display: display}, nil } diff --git a/plugin_x11_dummy.go b/plugin_x11_dummy.go index d404c0c..9b41d2e 100644 --- a/plugin_x11_dummy.go +++ b/plugin_x11_dummy.go @@ -21,6 +21,8 @@ package main +import "errors" + func InitX11Plugin() (Plugin, error) { - return nil, UnsupportedPlatformError{"X11", "disabled"} + return nil, UnsupportedPlatformError{errors.New("disabled")} }