Add interactive terminal interface

This commit is contained in:
Trevor Slocum 2020-10-11 17:29:27 -07:00
parent 667f953363
commit e7ed95b8c3
5 changed files with 103 additions and 3 deletions

View File

@ -33,6 +33,12 @@ brightness 10
brightness +20%
```
### Interactive
```bash
brightness -i
```
## Support
Please share issues and suggestions [here](https://gitlab.com/tslocum/brightness/issues).

6
go.mod
View File

@ -1,3 +1,9 @@
module gitlab.com/tslocum/brightness
go 1.15
require (
github.com/gdamore/tcell/v2 v2.0.0-dev.0.20200926152101-0fb77ddaa5b4
gitlab.com/tslocum/cview v1.5.1-0.20201012004508-bf9ccbdf1a8c
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 // indirect
)

26
go.sum Normal file
View File

@ -0,0 +1,26 @@
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell/v2 v2.0.0-dev/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA=
github.com/gdamore/tcell/v2 v2.0.0-dev.0.20200926152101-0fb77ddaa5b4 h1:9WLVV5c2UI2qvgROlgzLgCuK5gi7igcU5LNsPXCSFB8=
github.com/gdamore/tcell/v2 v2.0.0-dev.0.20200926152101-0fb77ddaa5b4/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA=
github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac=
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
gitlab.com/tslocum/cbind v0.1.2 h1:ptDjO7WeOl1HglprsK18L8I9JeRkmtuBoBBaYw/6/Ow=
gitlab.com/tslocum/cbind v0.1.2/go.mod h1:HfB7qAhHSZbn1rFK8M9SvSN5NG6ScAg/3h3iE6xdeeI=
gitlab.com/tslocum/cview v1.5.1-0.20201012004508-bf9ccbdf1a8c h1:v2JiXw0558CnB1EWMaLCgmjLENvlcQyYx/0zyzWuYsI=
gitlab.com/tslocum/cview v1.5.1-0.20201012004508-bf9ccbdf1a8c/go.mod h1:i9NyxtwBtkiVFrwmsh3Bv3dunvipjZrKX0TTdPHbzcw=
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

13
main.go
View File

@ -23,9 +23,10 @@ var (
const backlightsDirectory = "/sys/class/backlight"
const (
commandSet = 1
commandSub = 2
commandAdd = 3
commandSet = 1
commandSub = 2
commandAdd = 3
commandInteractive = 4
)
func init() {
@ -150,6 +151,12 @@ func main() {
var cmd int
switch command {
case "i", "-i":
err := runTUI(backlight)
if err != nil {
log.Fatal(err)
}
return
case "set":
cmd = commandSet
case "add", "inc", "up":

55
tui.go Normal file
View File

@ -0,0 +1,55 @@
package main
import (
"log"
"github.com/gdamore/tcell/v2"
"gitlab.com/tslocum/cview"
)
func center(width, height int, p cview.Primitive) cview.Primitive {
subFlex := cview.NewFlex()
subFlex.SetDirection(cview.FlexRow)
subFlex.AddItem(cview.NewBox(), 0, 1, false)
subFlex.AddItem(p, height, 1, true)
subFlex.AddItem(cview.NewBox(), 0, 1, false)
flex := cview.NewFlex()
flex.AddItem(cview.NewBox(), 0, 1, false)
flex.AddItem(subFlex, width, 1, true)
flex.AddItem(cview.NewBox(), 0, 1, false)
return flex
}
func runTUI(backlight *backlight) error {
done := make(chan error)
app := cview.NewApplication()
app.EnableMouse(true)
sliderChanged := func(value int) {
err := backlight.setBrightness(value)
if err != nil {
log.Fatal(err)
}
}
form := cview.NewForm()
form.AddSlider("Brightness", backlight.current, backlight.max, 10, sliderChanged)
form.SetCancelFunc(func() {
done <- nil
})
form.GetFormItem(0).SetFinishedFunc(func(key tcell.Key) {
done <- nil
})
app.SetRoot(center(40, 20, form), true)
go func() {
done <- app.Run()
}()
err := <-done
app.Stop()
return err
}