This commit is contained in:
a 2023-01-15 20:11:07 -06:00
parent c7953f8ee1
commit 7530d1bf0a
73 changed files with 109 additions and 193 deletions

1
.github/FUNDING.yml vendored
View File

@ -1 +0,0 @@
github: liamg

View File

@ -1,28 +0,0 @@
name: Release
on:
push:
tags:
- v*
jobs:
build:
name: Releasing Darktile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-go@v2
with:
go-version: '^1.17'
- run: go version
- name: Release
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,21 +0,0 @@
on: [push, pull_request]
name: Test
jobs:
test:
strategy:
matrix:
go-version: [1.17.x]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Checkout code
uses: actions/checkout@v2
- name: Test
run: |
sudo apt update
sudo apt install xorg-dev libgl1-mesa-dev
DISPLAY=:0 go test -mod=vendor ./...

View File

@ -6,12 +6,12 @@ import (
"image"
"os"
"time"
config2 "tuxpa.in/t/erm/app/darktile/config"
gui2 "tuxpa.in/t/erm/app/darktile/gui"
"tuxpa.in/t/erm/app/darktile/hinters"
termutil2 "tuxpa.in/t/erm/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/version"
"github.com/liamg/darktile/internal/app/darktile/config"
"github.com/liamg/darktile/internal/app/darktile/gui"
"github.com/liamg/darktile/internal/app/darktile/hinters"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"github.com/liamg/darktile/internal/app/darktile/version"
"github.com/spf13/cobra"
)
@ -35,14 +35,14 @@ var rootCmd = &cobra.Command{
}
var startupErrors []error
var fileNotFound *config.ErrorFileNotFound
var fileNotFound *config2.ErrorFileNotFound
conf, err := config.LoadConfig()
conf, err := config2.LoadConfig()
if err != nil {
if !errors.As(err, &fileNotFound) {
startupErrors = append(startupErrors, err)
}
conf = config.DefaultConfig()
conf = config2.DefaultConfig()
}
if rewriteConfig {
@ -53,48 +53,48 @@ var rootCmd = &cobra.Command{
return nil
}
var theme *termutil.Theme
var theme *termutil2.Theme
if themePath != "" {
theme, err = config.LoadThemeFromPath(conf, themePath)
theme, err = config2.LoadThemeFromPath(conf, themePath)
if err != nil {
return fmt.Errorf("failed to load theme: %s", err)
}
} else {
theme, err = config.LoadTheme(conf)
theme, err = config2.LoadTheme(conf)
if err != nil {
if !errors.As(err, &fileNotFound) {
startupErrors = append(startupErrors, err)
}
theme, err = config.DefaultTheme(conf)
theme, err = config2.DefaultTheme(conf)
if err != nil {
return fmt.Errorf("failed to load default theme: %w", err)
}
}
}
termOpts := []termutil.Option{
termutil.WithTheme(theme),
termOpts := []termutil2.Option{
termutil2.WithTheme(theme),
}
if debugFile != "" {
termOpts = append(termOpts, termutil.WithLogFile(debugFile))
termOpts = append(termOpts, termutil2.WithLogFile(debugFile))
}
if shell != "" {
termOpts = append(termOpts, termutil.WithShell(shell))
termOpts = append(termOpts, termutil2.WithShell(shell))
}
if initialCommand != "" {
termOpts = append(termOpts, termutil.WithInitialCommand(initialCommand))
termOpts = append(termOpts, termutil2.WithInitialCommand(initialCommand))
}
terminal := termutil.New(termOpts...)
terminal := termutil2.New(termOpts...)
options := []gui.Option{
gui.WithFontDPI(conf.Font.DPI),
gui.WithFontSize(conf.Font.Size),
gui.WithFontFamily(conf.Font.Family),
gui.WithOpacity(conf.Opacity),
gui.WithLigatures(conf.Font.Ligatures),
options := []gui2.Option{
gui2.WithFontDPI(conf.Font.DPI),
gui2.WithFontSize(conf.Font.Size),
gui2.WithFontFamily(conf.Font.Family),
gui2.WithOpacity(conf.Opacity),
gui2.WithLigatures(conf.Font.Ligatures),
}
if conf.Cursor.Image != "" {
@ -102,12 +102,12 @@ var rootCmd = &cobra.Command{
if err != nil {
startupErrors = append(startupErrors, err)
} else {
options = append(options, gui.WithCursorImage(img))
options = append(options, gui2.WithCursorImage(img))
}
}
if screenshotAfterMS > 0 {
options = append(options, gui.WithStartupFunc(func(g *gui.GUI) {
options = append(options, gui2.WithStartupFunc(func(g *gui2.GUI) {
<-time.After(time.Duration(screenshotAfterMS) * time.Millisecond)
g.RequestScreenshot(screenshotFilename)
}))
@ -115,10 +115,10 @@ var rootCmd = &cobra.Command{
// load all hinters
for _, hinter := range hinters.All() {
options = append(options, gui.WithHinter(hinter))
options = append(options, gui2.WithHinter(hinter))
}
g, err := gui.New(terminal, options...)
g, err := gui2.New(terminal, options...)
if err != nil {
return err
}

View File

@ -4,8 +4,7 @@ import (
"encoding/hex"
"fmt"
"image/color"
"github.com/liamg/darktile/internal/app/darktile/termutil"
termutil2 "tuxpa.in/t/erm/app/darktile/termutil"
)
var defaultConfig = Config{
@ -48,11 +47,11 @@ func DefaultConfig() *Config {
return &copiedConf
}
func DefaultTheme(conf *Config) (*termutil.Theme, error) {
func DefaultTheme(conf *Config) (*termutil2.Theme, error) {
return loadThemeFromConf(conf, &defaultTheme)
}
func LoadTheme(conf *Config) (*termutil.Theme, error) {
func LoadTheme(conf *Config) (*termutil2.Theme, error) {
themeConf, err := loadTheme("")
if err != nil {
@ -62,7 +61,7 @@ func LoadTheme(conf *Config) (*termutil.Theme, error) {
return loadThemeFromConf(conf, themeConf)
}
func LoadThemeFromPath(conf *Config, path string) (*termutil.Theme, error) {
func LoadThemeFromPath(conf *Config, path string) (*termutil2.Theme, error) {
themeConf, err := loadTheme(path)
if err != nil {
@ -72,33 +71,33 @@ func LoadThemeFromPath(conf *Config, path string) (*termutil.Theme, error) {
return loadThemeFromConf(conf, themeConf)
}
func loadThemeFromConf(conf *Config, themeConf *Theme) (*termutil.Theme, error) {
func loadThemeFromConf(conf *Config, themeConf *Theme) (*termutil2.Theme, error) {
factory := termutil.NewThemeFactory()
factory := termutil2.NewThemeFactory()
colours := map[termutil.Colour]string{
termutil.ColourBlack: themeConf.Black,
termutil.ColourRed: themeConf.Red,
termutil.ColourGreen: themeConf.Green,
termutil.ColourYellow: themeConf.Yellow,
termutil.ColourBlue: themeConf.Blue,
termutil.ColourMagenta: themeConf.Magenta,
termutil.ColourCyan: themeConf.Cyan,
termutil.ColourWhite: themeConf.White,
termutil.ColourBrightBlack: themeConf.BrightBlack,
termutil.ColourBrightRed: themeConf.BrightRed,
termutil.ColourBrightGreen: themeConf.BrightGreen,
termutil.ColourBrightYellow: themeConf.BrightYellow,
termutil.ColourBrightBlue: themeConf.BrightBlue,
termutil.ColourBrightMagenta: themeConf.BrightMagenta,
termutil.ColourBrightCyan: themeConf.BrightCyan,
termutil.ColourBrightWhite: themeConf.BrightWhite,
termutil.ColourBackground: themeConf.Background,
termutil.ColourForeground: themeConf.Foreground,
termutil.ColourSelectionBackground: themeConf.SelectionBackground,
termutil.ColourSelectionForeground: themeConf.SelectionForeground,
termutil.ColourCursorForeground: themeConf.CursorForeground,
termutil.ColourCursorBackground: themeConf.CursorBackground,
colours := map[termutil2.Colour]string{
termutil2.ColourBlack: themeConf.Black,
termutil2.ColourRed: themeConf.Red,
termutil2.ColourGreen: themeConf.Green,
termutil2.ColourYellow: themeConf.Yellow,
termutil2.ColourBlue: themeConf.Blue,
termutil2.ColourMagenta: themeConf.Magenta,
termutil2.ColourCyan: themeConf.Cyan,
termutil2.ColourWhite: themeConf.White,
termutil2.ColourBrightBlack: themeConf.BrightBlack,
termutil2.ColourBrightRed: themeConf.BrightRed,
termutil2.ColourBrightGreen: themeConf.BrightGreen,
termutil2.ColourBrightYellow: themeConf.BrightYellow,
termutil2.ColourBrightBlue: themeConf.BrightBlue,
termutil2.ColourBrightMagenta: themeConf.BrightMagenta,
termutil2.ColourBrightCyan: themeConf.BrightCyan,
termutil2.ColourBrightWhite: themeConf.BrightWhite,
termutil2.ColourBackground: themeConf.Background,
termutil2.ColourForeground: themeConf.Foreground,
termutil2.ColourSelectionBackground: themeConf.SelectionBackground,
termutil2.ColourSelectionForeground: themeConf.SelectionForeground,
termutil2.ColourCursorForeground: themeConf.CursorForeground,
termutil2.ColourCursorBackground: themeConf.CursorBackground,
}
for key, colHex := range colours {

View File

@ -5,8 +5,6 @@ import (
"io/ioutil"
"os"
"path"
"gopkg.in/yaml.v2"
)
type Theme struct {

View File

@ -6,10 +6,10 @@ import (
"math"
"os"
"github.com/liamg/darktile/internal/app/darktile/packed"
"github.com/liamg/fontinfo"
"golang.org/x/image/font"
"golang.org/x/image/font/opentype"
"tuxpa.in/t/erm/app/darktile/packed"
)
type Style uint8

View File

@ -1,14 +1,12 @@
package gui
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/liamg/darktile/internal/app/darktile/gui/render"
"tuxpa.in/t/erm/app/darktile/gui/render"
)
// Draw renders the terminal GUI to the ebtien window. Required to implement the ebiten interface.
func (g *GUI) Draw(screen *ebiten.Image) {
render.
New(screen, g.terminal, g.fontManager, g.popupMessages, g.opacity, g.enableLigatures, g.cursorImage).
render.New(screen, g.terminal, g.fontManager, g.popupMessages, g.opacity, g.enableLigatures, g.cursorImage).
Draw()
if g.screenshotRequested {

View File

@ -7,13 +7,10 @@ import (
"os"
"strings"
"time"
"github.com/liamg/darktile/internal/app/darktile/font"
"github.com/liamg/darktile/internal/app/darktile/gui/popup"
"github.com/liamg/darktile/internal/app/darktile/hinters"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"github.com/hajimehoshi/ebiten/v2"
"tuxpa.in/t/erm/app/darktile/font"
"tuxpa.in/t/erm/app/darktile/gui/popup"
"tuxpa.in/t/erm/app/darktile/hinters"
termutil2 "tuxpa.in/t/erm/app/darktile/termutil"
)
func init() {
@ -26,12 +23,12 @@ type GUI struct {
mouseStateMiddle MouseState
mouseDrag bool
size image.Point // pixels
terminal *termutil.Terminal
terminal *termutil2.Terminal
updateChan chan struct{}
lastClick time.Time
clickCount int
fontManager *font.Manager
mousePos termutil.Position
mousePos termutil2.Position
hinters []hinters.Hinter
activeHinter int
popupMessages []popup.Message
@ -51,7 +48,7 @@ const (
MouseStatePressed
)
func New(terminal *termutil.Terminal, options ...Option) (*GUI, error) {
func New(terminal *termutil2.Terminal, options ...Option) (*GUI, error) {
g := &GUI{
terminal: terminal,
@ -115,14 +112,14 @@ func (g *GUI) CellSize() image.Point {
return g.fontManager.CharSize()
}
func (g *GUI) Highlight(start termutil.Position, end termutil.Position, label string, img image.Image) {
func (g *GUI) Highlight(start termutil2.Position, end termutil2.Position, label string, img image.Image) {
if label == "" && img == nil {
g.terminal.GetActiveBuffer().Highlight(start, end, nil)
return
}
annotation := &termutil.Annotation{
annotation := &termutil2.Annotation{
Text: label,
Image: img,
}

View File

@ -4,7 +4,6 @@ import (
"fmt"
"github.com/d-tsuji/clipboard"
"github.com/hajimehoshi/ebiten/v2"
)
var modifiableKeys = map[ebiten.Key]uint8{

View File

@ -3,8 +3,6 @@ package gui
import (
"sync"
"time"
"github.com/hajimehoshi/ebiten/v2"
)
var (

View File

@ -1,8 +1,7 @@
package gui
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
type WindowManipulator struct {

View File

@ -3,10 +3,8 @@ package gui
import (
"fmt"
"time"
"github.com/hajimehoshi/ebiten/v2"
"github.com/liamg/darktile/internal/app/darktile/hinters"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/hinters"
termutil2 "tuxpa.in/t/erm/app/darktile/termutil"
)
// time allowed between mouse clicks to chain them into e.g. double-click
@ -33,7 +31,7 @@ func (g *GUI) handleMouse() error {
if col >= 0 && col < int(g.terminal.GetActiveBuffer().ViewWidth()) && line >= 0 && line < int(g.terminal.GetActiveBuffer().ViewHeight()) {
// mouse moved!
moved = true
g.mousePos = termutil.Position{
g.mousePos = termutil2.Position{
Col: uint16(col),
Line: uint64(line),
}
@ -86,7 +84,7 @@ func (g *GUI) handleMouse() error {
if g.mouseDrag {
// update selection end
g.terminal.GetActiveBuffer().SetSelectionEnd(termutil.Position{
g.terminal.GetActiveBuffer().SetSelectionEnd(termutil2.Position{
Line: uint64(line),
Col: uint16(col),
})
@ -116,7 +114,7 @@ func (g *GUI) handleMouse() error {
col := x / g.fontManager.CharSize().X
line := y / g.fontManager.CharSize().Y
g.terminal.GetActiveBuffer().SetSelectionStart(termutil.Position{
g.terminal.GetActiveBuffer().SetSelectionStart(termutil2.Position{
Line: uint64(line),
Col: uint16(col),
})
@ -142,7 +140,7 @@ func (g *GUI) clearHinters() error {
}
// mouse moved to cell (not during click + drag)
func (g *GUI) handleMouseMove(pos termutil.Position) error {
func (g *GUI) handleMouseMove(pos termutil2.Position) error {
// start uses raw coords
start, _, text, index, ok := g.terminal.GetActiveBuffer().GetBoundedTextAtPosition(pos)
@ -171,11 +169,11 @@ func (g *GUI) handleMouseMove(pos termutil.Position) error {
newEndY++
}
matchStart := termutil.Position{
matchStart := termutil2.Position{
Col: uint16(newStartX),
Line: newStartY,
}
matchEnd := termutil.Position{
matchEnd := termutil2.Position{
Col: uint16(newEndX),
Line: newEndY,
}
@ -223,7 +221,7 @@ func (g *GUI) handleClick(clickCount, x, y int) (bool, error) {
case 2: //double click
col := uint16(x / g.fontManager.CharSize().X)
line := uint64(y / g.fontManager.CharSize().Y)
g.terminal.GetActiveBuffer().SelectWordAt(termutil.Position{Col: col, Line: line}, wordMatcher)
g.terminal.GetActiveBuffer().SelectWordAt(termutil2.Position{Col: col, Line: line}, wordMatcher)
return true, nil
default: // triple click (or more!)
g.terminal.GetActiveBuffer().ExtendSelectionToEntireLines()
@ -274,9 +272,9 @@ func (g *GUI) handleMouseRemotely(x, y int, pressedLeft, pressedMiddle, pressedR
mode := g.terminal.GetMouseMode()
switch mode {
case termutil.MouseModeNone:
case termutil2.MouseModeNone:
return false
case termutil.MouseModeX10:
case termutil2.MouseModeX10:
var button rune
switch true {
case pressedLeft:
@ -291,7 +289,7 @@ func (g *GUI) handleMouseRemotely(x, y int, pressedLeft, pressedMiddle, pressedR
packet := fmt.Sprintf("\x1b[M%c%c%c", (rune(button + 32)), (rune(tx + 32)), (rune(ty + 32)))
_ = g.terminal.WriteToPty([]byte(packet))
return true
case termutil.MouseModeVT200, termutil.MouseModeButtonEvent:
case termutil2.MouseModeVT200, termutil2.MouseModeButtonEvent:
var button rune
@ -305,14 +303,14 @@ func (g *GUI) handleMouseRemotely(x, y int, pressedLeft, pressedMiddle, pressedR
case pressedRight:
button = 2
case released:
if extMode != termutil.MouseExtSGR {
if extMode != termutil2.MouseExtSGR {
button = 3
}
default:
return true
}
if moved && mode == termutil.MouseModeButtonEvent {
if moved && mode == termutil2.MouseModeButtonEvent {
button |= 32
}
@ -330,7 +328,7 @@ func (g *GUI) handleMouseRemotely(x, y int, pressedLeft, pressedMiddle, pressedR
var packet string
if extMode == termutil.MouseExtSGR {
if extMode == termutil2.MouseExtSGR {
final := 'M'
if released {
final = 'm'

View File

@ -2,8 +2,6 @@ package gui
import (
"image"
"github.com/hajimehoshi/ebiten/v2"
)
type Option func(g *GUI) error

View File

@ -4,8 +4,7 @@ import (
"fmt"
"image/color"
"time"
"github.com/liamg/darktile/internal/app/darktile/gui/popup"
"tuxpa.in/t/erm/app/darktile/gui/popup"
)
const (

View File

@ -3,7 +3,6 @@ package render
import (
"image/color"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/hajimehoshi/ebiten/v2/text"
)

View File

@ -1,10 +1,9 @@
package render
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/hajimehoshi/ebiten/v2/text"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
func (r *Render) drawCursor() {

View File

@ -2,20 +2,19 @@ package render
import (
"image"
"tuxpa.in/t/erm/app/darktile/font"
"tuxpa.in/t/erm/app/darktile/gui/popup"
termutil2 "tuxpa.in/t/erm/app/darktile/termutil"
"github.com/hajimehoshi/ebiten/v2"
"github.com/liamg/darktile/internal/app/darktile/font"
"github.com/liamg/darktile/internal/app/darktile/gui/popup"
"github.com/liamg/darktile/internal/app/darktile/termutil"
imagefont "golang.org/x/image/font"
)
type Render struct {
frame *ebiten.Image
screen *ebiten.Image
terminal *termutil.Terminal
buffer *termutil.Buffer
theme *termutil.Theme
terminal *termutil2.Terminal
buffer *termutil2.Buffer
theme *termutil2.Theme
fontManager *font.Manager
pixelWidth int
pixelHeight int
@ -35,7 +34,7 @@ type Font struct {
DotDepth int
}
func New(screen *ebiten.Image, terminal *termutil.Terminal, fontManager *font.Manager, popups []popup.Message, opacity float64, enableLigatures bool, cursorImage *ebiten.Image) *Render {
func New(screen *ebiten.Image, terminal *termutil2.Terminal, fontManager *font.Manager, popups []popup.Message, opacity float64, enableLigatures bool, cursorImage *ebiten.Image) *Render {
w, h := screen.Size()
return &Render{
screen: screen,

View File

@ -1,7 +1,5 @@
package render
import "github.com/hajimehoshi/ebiten/v2"
func (r *Render) drawSixels() {
for _, sixel := range r.buffer.GetVisibleSixels() {
op := &ebiten.DrawImageOptions{}

View File

@ -2,9 +2,7 @@ package gui
import (
"time"
"github.com/hajimehoshi/ebiten/v2"
"github.com/liamg/darktile/internal/app/darktile/gui/popup"
"tuxpa.in/t/erm/app/darktile/gui/popup"
)
func (g *GUI) getModifierStr() string {

View File

@ -2,8 +2,7 @@ package hinters
import (
"image"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
type HintAPI interface {

View File

@ -2,8 +2,7 @@ package hinters
import (
"image"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
type TestAPI struct {

View File

@ -3,8 +3,7 @@ package hinters
import (
"encoding/base64"
"regexp"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
func init() {

View File

@ -2,8 +2,8 @@ package hinters
import (
"testing"
"tuxpa.in/t/erm/app/darktile/termutil"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"github.com/stretchr/testify/assert"
)

View File

@ -5,8 +5,7 @@ import (
"strconv"
"strings"
"time"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
func init() {

View File

@ -3,8 +3,8 @@ package hinters
import (
"testing"
"time"
"tuxpa.in/t/erm/app/darktile/termutil"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"github.com/stretchr/testify/assert"
)

View File

@ -6,8 +6,7 @@ import (
"image"
"image/color"
"regexp"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
func init() {

View File

@ -5,8 +5,7 @@ import (
"regexp"
"strconv"
"strings"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
func init() {

View File

@ -2,8 +2,8 @@ package hinters
import (
"testing"
"tuxpa.in/t/erm/app/darktile/termutil"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

View File

@ -1,9 +1,9 @@
package hinters
import (
"github.com/liamg/darktile/internal/app/darktile/termutil"
"github.com/skratchdot/open-golang/open"
"mvdan.cc/xurls"
"tuxpa.in/t/erm/app/darktile/termutil"
)
func init() {

View File

@ -3,8 +3,7 @@ package hinters
import (
"sort"
"sync"
"github.com/liamg/darktile/internal/app/darktile/termutil"
"tuxpa.in/t/erm/app/darktile/termutil"
)
type HinterRegistration struct {

View File

@ -4,8 +4,7 @@ import (
"image"
"math"
"strings"
"github.com/liamg/darktile/internal/app/darktile/sixel"
"tuxpa.in/t/erm/app/darktile/sixel"
)
type Sixel struct {

View File

@ -2,8 +2,7 @@ package main
import (
"os"
"github.com/liamg/darktile/internal/app/darktile/cmd"
"tuxpa.in/t/erm/app/darktile/cmd"
)
/**

3
go.mod
View File

@ -1,4 +1,4 @@
module github.com/liamg/darktile
module tuxpa.in/t/erm
go 1.16
@ -16,7 +16,6 @@ require (
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
gopkg.in/yaml.v2 v2.4.0
mvdan.cc/xurls v1.1.0
sigs.k8s.io/yaml v1.1.0
)