Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nsf/gothic
Tcl/Tk Go bindings
https://github.com/nsf/gothic
Last synced: 3 months ago
JSON representation
Tcl/Tk Go bindings
- Host: GitHub
- URL: https://github.com/nsf/gothic
- Owner: nsf
- License: mit
- Created: 2011-10-22T12:49:05.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2017-07-27T20:24:11.000Z (over 7 years ago)
- Last Synced: 2024-07-16T14:03:55.974Z (4 months ago)
- Language: Go
- Homepage:
- Size: 767 KB
- Stars: 151
- Watchers: 10
- Forks: 24
- Open Issues: 9
-
Metadata Files:
- Readme: README
- License: LICENSE
Awesome Lists containing this project
README
Tcl/Tk Go bindings.
VERSION NOTICE
Recently Tcl/Tk 8.6 were released. I use them as a default, if you still have
Tcl/Tk 8.5 use `go get -tags tcl85 github.com/nsf/gothic`.DESCRIPTION
In its current state the bindings are a bit Tk-oriented. You can't create an
interpreter instance without Tk. In future it's likely it will be changed.The API is very simple. In the package you have one type and one function:
type Interpreter struct
func NewInterpreter (init interface{}) *InterpreterIn order to launch an interpreter you have to call the "NewInterpreter"
function, it will make a new instance of a tcl/tk interpreter in a separate
goroutine, execute "init", block in Tk's main loop and then the function
returns a pointer to the new instance of an "Interpreter"."init" could be a string with tcl commands that are executed before Tk's main
loop, or a function with this signature: "func (*Interpreter)". This function
gets executed the same way as the string, that is - before Tk's main loop.Here are the methods of the "Interpreter":
func (*Interpreter) ErrorFilter(filt func(error) error)
func (*Interpreter) Eval(args ...interface{}) error
func (*Interpreter) EvalAs(out interface{}, args ...interface{}) error
func (*Interpreter) Set(name string, val interface{}) error
func (*Interpreter) UploadImage(name string, img image.Image) error
func (*Interpreter) RegisterCommand(name string, cbfunc interface{}) error
func (*Interpreter) UnregisterCommand(name string) error
func (*Interpreter) RegisterCommands(name string, val interface{}) error
func (*Interpreter) UnregisterCommands(name string) errorAs it was stated before, the "Interpreter" is being executed in a separate
goroutine and each method is completely thread-safe. Also every method is
synchronous. It will queue commands for execution and wait for their
completion.That's it. See "examples" directory it has the use cases for most of the API.