4.3 KiB
go-touchbar
Go library to integrate the MacBook Touch Bar
Installation
go get github.com/LouisBrunner/go-touchbar
Usage
// Setup your window code (including NSApplication/NSWindow on macOS)
tb := touchbar.New(touchbar.Options{})
err := tb.Install(Configuration: touchbar.Configuration{
// Add your configuration here
})
if err != nil {
// handle
}
// run your application
// when you want to update the touchbar (even from another routine), call do
err = tb.Update(Configuration: touchbar.Configuration{
// Add your updated configuration here
})
if err != nil {
// handle
}
err = tb.Uninstall()
if err != nil {
// handle
}
Configuration
https://user-images.githubusercontent.com/7120871/197391736-450bef36-4dd6-4c79-8ae7-3bd68a932eec.mp4
See example application for a real-life example.
Note: most of the widgets are direct translations of the one in Apple's documentation and have similar options. Please refer to the official documentation for more details.
You configure this library by specifying a list of items from the following options:
Button
: a button that can be clicked (has an event handler)- NOT IMPLEMENTED
Candidates
: a list of text options, allows to give custom recommendations for the current text field - NOT IMPLEMENTED
ColorPicker
: used to choose a color (has an event handler) - NOT IMPLEMENTED
Custom
: can render anything you want, feedback any touch with a X position (has an event handler) - NOT IMPLEMENTED
Group
: used to group other items Label
: allows to display text and images- NOT IMPLEMENTED
Picker
: used to pick one or more options from a list of choices, equivalent to radio/checkbox buttons (has an event handler) Popover
: a button which shows more options when clicked, equivalent to a modal or collapse widget- NOT IMPLEMENTED
Scrubber
: allows to select items from a list, which supports scrolling (has an event handler) - NOT IMPLEMENTED
SegmentedControl
: shows multiple buttons grouped together, similar toPicker
(has an event handler) - NOT IMPLEMENTED
Sharer
: allows to share using the standard macOS sharing system Slider
: a slider used to pick value in a range (has an event handler)- NOT IMPLEMENTED
Stepper
: a control to pick a value in a range through increments (has an event handler)
But also from this list of standard Apple widgets which have no customizable options:
OtherItemsProxy
: where to display other Touch Bar closer to the first responderSpaceSmall
: a small spaceSpaceLarge
: a bigger spaceSpaceFlexible
: a space that grows as much as possible
Further work
Check TODO/FIXME as well
-
(!!!) Finish implementing widgets
-
Allow user customization (
customizationLabel
,templateItems
, etc) -
Layout constraints (e.g. sizing)
-
More options for widgets:
- Color-picker
- Custom
- Popover
-
Support standard/UI colors
-
Support custom images
-
Better validation in Go (validator on the structs?)
-
A few random crashes:
signal arrived during cgo execution
and[touchBar itemIdentifiers] was mutated while items array was being built
(in[WindowController setupTouchBar]
)
Acknowledgements
This library's API was influenced by Electron's.
The demo application is a reimplementation of electron-touch-bar
.
The catalog was influenced by Apple's, which also helped with the Objective-C part of the implementation.