mirror of
https://github.com/onyx-and-iris/gobs-cli.git
synced 2025-07-01 07:50:29 +01:00
Compare commits
No commits in common. "main" and "v0.13.1" have entirely different histories.
11
CHANGELOG.md
11
CHANGELOG.md
@ -5,17 +5,6 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
# [0.13.3] - 2025-06-27
|
||||
|
||||
### Changed
|
||||
|
||||
- usage is now printed on errors.
|
||||
- help is printed in compact mode. This should make it easier to page through help on the root command.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Item ID alignment in sceneitem list table.
|
||||
|
||||
# [0.13.0] - 2025-06-23
|
||||
|
||||
### Added
|
||||
|
68
README.md
68
README.md
@ -4,16 +4,6 @@ A command line interface for OBS Websocket v5
|
||||
|
||||
For an outline of past/future changes refer to: [CHANGELOG](CHANGELOG.md)
|
||||
|
||||
-----
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Installation](#installation)
|
||||
- [Configuration](#configuration)
|
||||
- [Style](#style)
|
||||
- [Commands](#commands)
|
||||
- [License](#license)
|
||||
|
||||
## Installation
|
||||
|
||||
```console
|
||||
@ -50,36 +40,6 @@ OBS_PASSWORD=<websocket password>
|
||||
OBS_TIMEOUT=5
|
||||
```
|
||||
|
||||
## Style
|
||||
|
||||
Styling is opt-in, by default you will get a colourless output:
|
||||
|
||||

|
||||
|
||||
You may enable styling with the --style/-s flag:
|
||||
|
||||
```console
|
||||
gobs-cli --style="red" sceneitem list
|
||||
```
|
||||
|
||||
Available styles: _red, magenta, purple, blue, cyan, green, yellow, orange, white, grey, navy, black_
|
||||
|
||||

|
||||
|
||||
Optionally you may disable border colouring with the --no-border flag:
|
||||
|
||||

|
||||
|
||||
```console
|
||||
gobs-cli --style="red" --no-border sceneitem list
|
||||
```
|
||||
|
||||
Or with environment variables:
|
||||
|
||||
```env
|
||||
GOBS_STYLE=red
|
||||
GOBS_STYLE_NO_BORDER=true
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
@ -661,9 +621,33 @@ gobs-cli projector open --monitor-index=1 "test_group"
|
||||
gobs-cli screenshot save --width=2560 --height=1440 "Scene" "C:\Users\me\Videos\screenshot.png"
|
||||
```
|
||||
|
||||
## License
|
||||
## Style
|
||||
|
||||
`gobs-cli` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
|
||||
By default styling is disabled but you may enable and configure it in the following ways:
|
||||
|
||||
- --style/-s: Style used in output.
|
||||
- GOBS_STYLE
|
||||
- --no-border/-b: Disable table border styling in output.
|
||||
- GOBS_STYLE_NO_BORDER
|
||||
|
||||
Available styles:
|
||||
|
||||
- red
|
||||
- magenta
|
||||
- purple
|
||||
- blue
|
||||
- cyan
|
||||
- green
|
||||
- yellow
|
||||
- orange
|
||||
- white
|
||||
- grey
|
||||
- navy
|
||||
- black
|
||||
|
||||
```console
|
||||
gobs-cli --style=cyan --no-border scene list
|
||||
```
|
||||
|
||||
|
||||
[userconfigdir]: https://pkg.go.dev/os#UserConfigDir
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 6.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.6 KiB |
36
main.go
36
main.go
@ -8,8 +8,6 @@ import (
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
@ -18,19 +16,6 @@ import (
|
||||
kongdotenv "github.com/titusjaka/kong-dotenv-go"
|
||||
)
|
||||
|
||||
var version string // Version of the CLI, set at build time.
|
||||
|
||||
// VersionFlag is a custom flag type that prints the version and exits.
|
||||
type VersionFlag string
|
||||
|
||||
func (v VersionFlag) Decode(_ *kong.DecodeContext) error { return nil } // nolint: revive
|
||||
func (v VersionFlag) IsBool() bool { return true } // nolint: revive
|
||||
func (v VersionFlag) BeforeApply(app *kong.Kong, vars kong.Vars) error { // nolint: revive, unparam
|
||||
fmt.Printf("gobs-cli version: %s\n", vars["version"])
|
||||
app.Exit(0)
|
||||
return nil
|
||||
}
|
||||
|
||||
// ObsConfig holds the configuration for connecting to the OBS WebSocket server.
|
||||
type ObsConfig struct {
|
||||
Host string `flag:"host" help:"Host to connect to." default:"localhost" env:"OBS_HOST" short:"H"`
|
||||
@ -46,7 +31,7 @@ type StyleConfig struct {
|
||||
}
|
||||
|
||||
// CLI is the main command line interface structure.
|
||||
// It embeds ObsConfig and StyleConfig to provide configuration options.
|
||||
// It embeds the ObsConfig struct to inherit its fields and flags.
|
||||
type CLI struct {
|
||||
ObsConfig `embed:"" help:"OBS WebSocket configuration."`
|
||||
StyleConfig `embed:"" help:"Style configuration."`
|
||||
@ -96,25 +81,10 @@ func main() {
|
||||
var cli CLI
|
||||
ctx := kong.Parse(
|
||||
&cli,
|
||||
kong.Name("gobs-cli"),
|
||||
kong.Name("GOBS-CLI"),
|
||||
kong.Description("A command line tool to interact with OBS Websocket."),
|
||||
kong.Configuration(kongdotenv.ENVFileReader, ".env", filepath.Join(userConfigDir, "gobs-cli", "config.env")),
|
||||
kong.UsageOnError(),
|
||||
kong.ConfigureHelp(kong.HelpOptions{
|
||||
Compact: true,
|
||||
}),
|
||||
kong.Vars{
|
||||
"version": func() string {
|
||||
if version == "" {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
return "(unable to read build info)"
|
||||
}
|
||||
version = strings.Split(info.Main.Version, "-")[0]
|
||||
}
|
||||
return version
|
||||
}(),
|
||||
})
|
||||
)
|
||||
|
||||
client, err := connectObs(cli.ObsConfig)
|
||||
ctx.FatalIfErrorf(err)
|
||||
|
@ -59,7 +59,7 @@ func (cmd *SceneItemListCmd) Run(ctx *context) error {
|
||||
style := lipgloss.NewStyle().Padding(0, 3)
|
||||
switch col {
|
||||
case 0:
|
||||
style = style.Align(lipgloss.Center)
|
||||
style = style.Align(lipgloss.Left)
|
||||
case 1:
|
||||
style = style.Align(lipgloss.Left)
|
||||
case 2:
|
||||
|
30
version.go
30
version.go
@ -2,8 +2,38 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
var version string
|
||||
|
||||
// VersionFlag is a custom flag type for displaying version information.
|
||||
type VersionFlag string
|
||||
|
||||
// Decode implements the kong.Flag interface.
|
||||
func (v VersionFlag) Decode(_ *kong.DecodeContext) error { return nil }
|
||||
|
||||
// IsBool implements the kong.Flag interface.
|
||||
func (v VersionFlag) IsBool() bool { return true }
|
||||
|
||||
// BeforeApply implements the kong.Flag interface.
|
||||
func (v VersionFlag) BeforeApply(app *kong.Kong, _ kong.Vars) error { // nolint: unparam
|
||||
if version == "" {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
return fmt.Errorf("failed to read build info")
|
||||
}
|
||||
version = strings.Split(info.Main.Version, "-")[0]
|
||||
}
|
||||
|
||||
fmt.Printf("gobs-cli version: %s\n", version)
|
||||
app.Exit(0) // Exit the application after printing the version
|
||||
return nil
|
||||
}
|
||||
|
||||
// ObsVersionCmd handles the version command.
|
||||
type ObsVersionCmd struct{} // size = 0x0
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user