From c8e9d1b4fcde97dbdeae3463ef80da2c61fe5371 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Mon, 27 Sep 2021 19:51:44 +1000 Subject: bump gocui --- go.mod | 12 +- go.sum | 11 + vendor/github.com/gdamore/tcell/v2/CHANGESv2.adoc | 82 --- vendor/github.com/gdamore/tcell/v2/CHANGESv2.md | 82 +++ vendor/github.com/gdamore/tcell/v2/README.adoc | 285 -------- vendor/github.com/gdamore/tcell/v2/README.md | 272 +++++++ vendor/github.com/gdamore/tcell/v2/TUTORIAL.adoc | 325 --------- vendor/github.com/gdamore/tcell/v2/TUTORIAL.md | 293 ++++++++ vendor/github.com/gdamore/tcell/v2/console_win.go | 20 + vendor/github.com/gdamore/tcell/v2/screen.go | 11 + vendor/github.com/gdamore/tcell/v2/simulation.go | 22 +- vendor/github.com/gdamore/tcell/v2/tscreen.go | 22 +- vendor/golang.org/x/sys/cpu/cpu.go | 1 + vendor/golang.org/x/sys/cpu/cpu_x86.go | 2 + vendor/golang.org/x/sys/unix/ifreq_linux.go | 149 ++++ vendor/golang.org/x/sys/unix/ioctl_linux.go | 78 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 7 +- vendor/golang.org/x/sys/unix/syscall_darwin.go | 33 + vendor/golang.org/x/sys/unix/syscall_illumos.go | 8 + vendor/golang.org/x/sys/unix/syscall_linux.go | 97 ++- vendor/golang.org/x/sys/unix/syscall_linux_386.go | 42 +- .../golang.org/x/sys/unix/syscall_linux_amd64.go | 48 -- vendor/golang.org/x/sys/unix/syscall_linux_arm.go | 46 +- .../golang.org/x/sys/unix/syscall_linux_arm64.go | 55 +- .../golang.org/x/sys/unix/syscall_linux_mips64x.go | 39 - .../golang.org/x/sys/unix/syscall_linux_mipsx.go | 39 +- vendor/golang.org/x/sys/unix/syscall_linux_ppc.go | 45 +- .../golang.org/x/sys/unix/syscall_linux_ppc64x.go | 38 - .../golang.org/x/sys/unix/syscall_linux_riscv64.go | 51 -- .../golang.org/x/sys/unix/syscall_linux_s390x.go | 36 - .../golang.org/x/sys/unix/syscall_linux_sparc64.go | 37 - vendor/golang.org/x/sys/unix/syscall_solaris.go | 240 +++++++ vendor/golang.org/x/sys/unix/syscall_unix.go | 4 + .../golang.org/x/sys/unix/zerrors_darwin_amd64.go | 6 + .../golang.org/x/sys/unix/zerrors_darwin_arm64.go | 6 + .../golang.org/x/sys/unix/zerrors_freebsd_386.go | 5 + .../golang.org/x/sys/unix/zerrors_freebsd_amd64.go | 5 + .../golang.org/x/sys/unix/zerrors_freebsd_arm.go | 5 + .../golang.org/x/sys/unix/zerrors_freebsd_arm64.go | 5 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 74 +- vendor/golang.org/x/sys/unix/zerrors_linux_386.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_amd64.go | 2 + vendor/golang.org/x/sys/unix/zerrors_linux_arm.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_arm64.go | 2 + vendor/golang.org/x/sys/unix/zerrors_linux_mips.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_mips64.go | 2 + .../x/sys/unix/zerrors_linux_mips64le.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_mipsle.go | 2 + vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_ppc64.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_ppc64le.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_riscv64.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_s390x.go | 2 + .../golang.org/x/sys/unix/zerrors_linux_sparc64.go | 2 + .../golang.org/x/sys/unix/zerrors_openbsd_386.go | 3 + .../golang.org/x/sys/unix/zerrors_openbsd_arm.go | 3 + vendor/golang.org/x/sys/unix/zsyscall_linux.go | 38 +- vendor/golang.org/x/sys/unix/zsyscall_linux_386.go | 53 -- .../golang.org/x/sys/unix/zsyscall_linux_amd64.go | 53 -- vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go | 53 -- .../golang.org/x/sys/unix/zsyscall_linux_mips.go | 55 -- .../golang.org/x/sys/unix/zsyscall_linux_mips64.go | 32 - .../x/sys/unix/zsyscall_linux_mips64le.go | 32 - .../golang.org/x/sys/unix/zsyscall_linux_mipsle.go | 55 -- vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go | 53 -- .../golang.org/x/sys/unix/zsyscall_linux_ppc64.go | 53 -- .../x/sys/unix/zsyscall_linux_ppc64le.go | 53 -- .../golang.org/x/sys/unix/zsyscall_linux_s390x.go | 43 -- .../x/sys/unix/zsyscall_linux_sparc64.go | 42 -- .../x/sys/unix/zsyscall_solaris_amd64.go | 72 +- vendor/golang.org/x/sys/unix/zsysnum_linux_386.go | 5 + .../golang.org/x/sys/unix/zsysnum_linux_amd64.go | 713 +++++++++--------- vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go | 4 + .../golang.org/x/sys/unix/zsysnum_linux_arm64.go | 603 ++++++++-------- vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go | 4 + .../golang.org/x/sys/unix/zsysnum_linux_mips64.go | 698 +++++++++--------- .../x/sys/unix/zsysnum_linux_mips64le.go | 698 +++++++++--------- .../golang.org/x/sys/unix/zsysnum_linux_mipsle.go | 4 + vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go | 4 + .../golang.org/x/sys/unix/zsysnum_linux_ppc64.go | 796 +++++++++++---------- .../golang.org/x/sys/unix/zsysnum_linux_ppc64le.go | 796 +++++++++++---------- .../golang.org/x/sys/unix/zsysnum_linux_riscv64.go | 600 ++++++++-------- .../golang.org/x/sys/unix/zsysnum_linux_s390x.go | 726 +++++++++---------- .../golang.org/x/sys/unix/zsysnum_linux_sparc64.go | 754 +++++++++---------- .../golang.org/x/sys/unix/ztypes_darwin_amd64.go | 104 +++ .../golang.org/x/sys/unix/ztypes_darwin_arm64.go | 104 +++ vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go | 2 + .../golang.org/x/sys/unix/ztypes_freebsd_amd64.go | 2 + vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go | 2 + .../golang.org/x/sys/unix/ztypes_freebsd_arm64.go | 2 + .../golang.org/x/sys/unix/ztypes_illumos_amd64.go | 2 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 45 +- vendor/golang.org/x/sys/unix/ztypes_linux_386.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_arm.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_mips.go | 9 + .../golang.org/x/sys/unix/ztypes_linux_mips64.go | 9 + .../golang.org/x/sys/unix/ztypes_linux_mips64le.go | 9 + .../golang.org/x/sys/unix/ztypes_linux_mipsle.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go | 9 + .../golang.org/x/sys/unix/ztypes_linux_ppc64le.go | 9 + .../golang.org/x/sys/unix/ztypes_linux_riscv64.go | 9 + vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go | 9 + .../golang.org/x/sys/unix/ztypes_linux_sparc64.go | 9 + .../golang.org/x/sys/unix/ztypes_solaris_amd64.go | 40 ++ .../golang.org/x/sys/windows/security_windows.go | 1 + vendor/golang.org/x/sys/windows/syscall_windows.go | 5 + vendor/golang.org/x/sys/windows/types_windows.go | 16 +- .../golang.org/x/sys/windows/zsyscall_windows.go | 52 ++ vendor/golang.org/x/term/go.mod | 2 +- vendor/golang.org/x/term/go.sum | 4 +- vendor/golang.org/x/term/term.go | 2 + vendor/modules.txt | 10 +- 115 files changed, 5260 insertions(+), 5025 deletions(-) delete mode 100644 vendor/github.com/gdamore/tcell/v2/CHANGESv2.adoc create mode 100644 vendor/github.com/gdamore/tcell/v2/CHANGESv2.md delete mode 100644 vendor/github.com/gdamore/tcell/v2/README.adoc create mode 100644 vendor/github.com/gdamore/tcell/v2/README.md delete mode 100644 vendor/github.com/gdamore/tcell/v2/TUTORIAL.adoc create mode 100644 vendor/github.com/gdamore/tcell/v2/TUTORIAL.md create mode 100644 vendor/golang.org/x/sys/unix/ifreq_linux.go diff --git a/go.mod b/go.mod index 10f488121..642856970 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/creack/pty v1.1.11 github.com/fatih/color v1.9.0 // indirect github.com/fsnotify/fsnotify v1.4.7 - github.com/gdamore/tcell/v2 v2.3.11 // indirect + github.com/gdamore/tcell/v2 v2.4.0 // indirect github.com/go-errors/errors v1.4.0 github.com/go-logfmt/logfmt v0.5.0 // indirect github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 @@ -21,7 +21,7 @@ require ( github.com/imdario/mergo v0.3.11 github.com/integrii/flaggy v1.4.0 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 - github.com/jesseduffield/gocui v0.3.1-0.20210614081440-74b42ecad52b + github.com/jesseduffield/gocui v0.3.1-0.20210927094955-aa62b56c153a github.com/jesseduffield/yaml v2.1.0+incompatible github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect @@ -29,7 +29,7 @@ require ( github.com/kyokomi/emoji/v2 v2.2.8 github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-colorable v0.1.7 // indirect - github.com/mattn/go-runewidth v0.0.13 + github.com/mattn/go-runewidth v0.0.13 // indirect github.com/mgutz/str v1.2.0 github.com/onsi/ginkgo v1.10.3 // indirect github.com/onsi/gomega v1.7.1 // indirect @@ -40,7 +40,7 @@ require ( github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c // indirect - golang.org/x/sys v0.0.0-20210611083646-a4fc73990273 // indirect - golang.org/x/term v0.0.0-20210503060354-a79de5458b56 // indirect - golang.org/x/text v0.3.6 // indirect + golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect + golang.org/x/term v0.0.0-20210916214954-140adaaadfaf // indirect + golang.org/x/text v0.3.7 // indirect ) diff --git a/go.sum b/go.sum index 74ab44b7d..3f6ff9f32 100644 --- a/go.sum +++ b/go.sum @@ -35,6 +35,8 @@ github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo github.com/gdamore/tcell/v2 v2.0.0/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA= github.com/gdamore/tcell/v2 v2.3.11 h1:ECO6WqHGbKZ3HrSL7bG/zArMCmLaNr5vcjjMVnLHpzc= github.com/gdamore/tcell/v2 v2.3.11/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU= +github.com/gdamore/tcell/v2 v2.4.0 h1:W6dxJEmaxYvhICFoTY3WrLLEXsQ11SaFnKGVEXW57KM= +github.com/gdamore/tcell/v2 v2.4.0/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= @@ -72,6 +74,8 @@ github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrm github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o= github.com/jesseduffield/gocui v0.3.1-0.20210614081440-74b42ecad52b h1:Wc2zx6xKLNaHc7/wIO6iYyDSjcFGN1Osd6tQvbgMmgo= github.com/jesseduffield/gocui v0.3.1-0.20210614081440-74b42ecad52b/go.mod h1:QWq79xplEoyhQO+dgpk3sojjTVRKjQklyTlzm5nC5Kg= +github.com/jesseduffield/gocui v0.3.1-0.20210927094955-aa62b56c153a h1:WAxXz26dZbwxmWdFrkKjpuExmgRRVG4l1qKRLKmQZBw= +github.com/jesseduffield/gocui v0.3.1-0.20210927094955-aa62b56c153a/go.mod h1:QWq79xplEoyhQO+dgpk3sojjTVRKjQklyTlzm5nC5Kg= github.com/jesseduffield/yaml v2.1.0+incompatible h1:HWQJ1gIv2zHKbDYNp0Jwjlj24K8aqpFHnMCynY1EpmE= github.com/jesseduffield/yaml v2.1.0+incompatible/go.mod h1:w0xGhOSIJCGYYW+hnFPTutCy5aACpkcwbmORt5axGqk= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -177,13 +181,20 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210611083646-a4fc73990273 h1:faDu4veV+8pcThn4fewv6TVlNCezafGoC1gM/mxQLbQ= golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= +golang.org/x/term v0.0.0-20210916214954-140adaaadfaf h1:Ihq/mm/suC88gF8WFcVwk+OV6Tq+wyA1O0E5UEvDglI= +golang.org/x/term v0.0.0-20210916214954-140adaaadfaf/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/vendor/github.com/gdamore/tcell/v2/CHANGESv2.adoc b/vendor/github.com/gdamore/tcell/v2/CHANGESv2.adoc deleted file mode 100644 index 65d154873..000000000 --- a/vendor/github.com/gdamore/tcell/v2/CHANGESv2.adoc +++ /dev/null @@ -1,82 +0,0 @@ -== Breaking Changes in _Tcell_ v2 - -A number of changes were made to _Tcell_ for version two, and some of these -are breaking. - -=== Import Path - -The import path for tcell has changed to `github.com/gdamore/tcell/v2` to reflect a new major version. - -=== Style Is Not Numeric - -The type `Style` has changed to a structure, to allow us to add additional data such as flags for color setting, more attribute bits, and so forth. -Applications that relied on this being a number will need to be updated to use the accessor methods. - -=== Mouse Event Changes - -The middle mouse button was reported as button 2 on Linux, but as button 3 on Windows, -and the right mouse button was reported the reverse way. -_Tcell_ now always reports the right mouse button as button 2, and the middle button as button 3. -To help make this clearer, new symbols `ButtonPrimary`, `ButtonSecondary`, and -`ButtonMiddle` are provided. -(Note that which button is right vs. left may be impacted by user preferences. -Usually the left button will be considered the Primary, and the right will be the Secondary.) -Applications may need to adjust their handling of mouse buttons 2 and 3 accordingly. - -=== Terminals Removed - -A number of terminals have been removed. -These are mostly ancient definitions unlikely to be used by anyone, such as `adm3a`. - -=== High Number Function Keys - -Historically terminfo reported function keys with modifiers set as a different -function key altogether. For example, Shift-F1 was reported as F13 on XTerm. -_Tcell_ now prefers to report these using the base key (such as F1) with modifiers added. -This works on XTerm and VTE based emulators, but some emulators may not support this. -The new behavior more closely aligns with behavior on Windows platforms. - -== New Features in _Tcell_ v2 - -These features are not breaking, but are introduced in version 2. - -=== Improved Modifier Support - -For terminals that appear to behave like the venerable XTerm, _tcell_ -automatically adds modifier reporting for ALT, CTRL, SHIFT, and META keys -when the terminal reports them. - -=== Better Support for Palettes (Themes) - -When using a color by its name or palette entry, _Tcell_ now tries to -use that palette entry as is; this should avoid some inconsistency and undesirable -overriding of colors where colors would override settings made in the terminal. - -When true fidelity to RGB values is needed, the new `TrueColor()` API can be used -to create a direct color, which bypasses the palette altogether. - -=== Automatic TrueColor Detection - -For some terminals, if the `Tc` or `RGB` properties are present in terminfo, -_Tcell_ will automatically assume the terminal supports 24-bit color. - -=== ColorReset - -A new color value, `ColorReset` can be used on the foreground or background -to reset the color the default used by the terminal. - -=== tmux Support - -_Tcell_ now has improved support for tmux, when the `$TERM` variable is set to "tmux". - -=== Strikethrough Support - -_Tcell_ has support for strikethrough when the terminal supports it, using the new `StrikeThrough()` API. - -=== Bracketed Paste Support - -_Tcell_ provides the long requested capability to discriminate paste event by using the -bracketed-paste capability present in some terminals. This is automatically available on -terminals that support XTerm style mouse handling, but applications must opt-in to this -by using the new `EnablePaste()` function. A new `EventPaste` type of event will be -delivered when starting and finishing a paste operation. \ No newline at end of file diff --git a/vendor/github.com/gdamore/tcell/v2/CHANGESv2.md b/vendor/github.com/gdamore/tcell/v2/CHANGESv2.md new file mode 100644 index 000000000..ad97c11b5 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/v2/CHANGESv2.md @@ -0,0 +1,82 @@ +## Breaking Changes in _Tcell_ v2 + +A number of changes were made to _Tcell_ for version two, and some of these are breaking. + +### Import Path + +The import path for tcell has changed to `github.com/gdamore/tcell/v2` to reflect a new major version. + +### Style Is Not Numeric + +The type `Style` has changed to a structure, to allow us to add additional data such as flags for color setting, +more attribute bits, and so forth. +Applications that relied on this being a number will need to be updated to use the accessor methods. + +### Mouse Event Changes + +The middle mouse button was reported as button 2 on Linux, but as button 3 on Windows, +and the right mouse button was reported the reverse way. +_Tcell_ now always reports the right mouse button as button 2, and the middle button as button 3. +To help make this clearer, new symbols `ButtonPrimary`, `ButtonSecondary`, and +`ButtonMiddle` are provided. +(Note that which button is right vs. left may be impacted by user preferences. +Usually the left button will be considered the Primary, and the right will be the Secondary.) +Applications may need to adjust their handling of mouse buttons 2 and 3 accordingly. + +### Terminals Removed + +A number of terminals have been removed. +These are mostly ancient definitions unlikely to be used by anyone, such as `adm3a`. + +### High Number Function Keys + +Historically terminfo reported function keys with modifiers set as a different +function key altogether. For example, Shift-F1 was reported as F13 on XTerm. +_Tcell_ now prefers to report these using the base key (such as F1) with modifiers added. +This works on XTerm and VTE based emulators, but some emulators may not support this. +The new behavior more closely aligns with behavior on Windows platforms. + +## New Features in _Tcell_ v2 + +These features are not breaking, but are introduced in version 2. + +### Improved Modifier Support + +For terminals that appear to behave like the venerable XTerm, _tcell_ +automatically adds modifier reporting for ALT, CTRL, SHIFT, and META keys +when the terminal reports them. + +### Better Support for Palettes (Themes) + +When using a color by its name or palette entry, _Tcell_ now tries to +use that palette entry as is; this should avoid some inconsistency and respect +terminal themes correctly. + +When true fidelity to RGB values is needed, the new `TrueColor()` API can be used +to create a direct color, which bypasses the palette altogether. + +### Automatic TrueColor Detection + +For some terminals, if the `Tc` or `RGB` properties are present in terminfo, +_Tcell_ will automatically assume the terminal supports 24-bit color. + +### ColorReset + +A new color value, `ColorReset` can be used on the foreground or background +to reset the color the default used by the terminal. + +### tmux Support + +_Tcell_ now has improved support for tmux, when the `$TERM` variable is set to "tmux". + +### Strikethrough Support + +_Tcell_ has support for strikethrough when the terminal supports it, using the new `StrikeThrough()` API. + +### Bracketed Paste Support + +_Tcell_ provides the long requested capability to discriminate paste event by using the +bracketed-paste capability present in some terminals. This is automatically available on +terminals that support XTerm style mouse handling, but applications must opt-in to this +by using the new `EnablePaste()` function. A new `EventPaste` type of event will be +delivered when starting and finishing a paste operation. \ No newline at end of file diff --git a/vendor/github.com/gdamore/tcell/v2/README.adoc b/vendor/github.com/gdamore/tcell/v2/README.adoc deleted file mode 100644 index b9d650b48..000000000 --- a/vendor/github.com/gdamore/tcell/v2/README.adoc +++ /dev/null @@ -1,285 +0,0 @@ -= tcell - - -image:https://img.shields.io/travis/gdamore/tcell.svg?label=linux[Linux Status,link="https://travis-ci.org/gdamore/tcell"] -image:https://img.shields.io/appveyor/ci/gdamore/tcell.svg?label=windows[Windows Status,link="https://ci.appveyor.com/project/gdamore/tcell"] -image:https://img.shields.io/badge/license-APACHE2-blue.svg[Apache License,link="https://github.com/gdamore/tcell/blob/master/LICENSE"] -image:https://img.shields.io/badge/godoc-reference-blue.svg[GoDoc,link="https://godoc.org/github.com/gdamore/tcell"] -image:https://goreportcard.com/badge/gdamore/tcell[Go Report Card,link="http://goreportcard.com/report/gdamore/tcell"] -image:https://img.shields.io/discord/639503822733180969?label=discord[Discord,link="https://discord.gg/urTTxDN"] -image:https://codecov.io/gh/gdamore/tcell/branch/master/graph/badge.svg[codecov,link="https://codecov.io/gh/gdamore/tcell"] - -[cols="2",grid="none"] -|=== -|_Tcell_ is a _Go_ package that provides a cell based view for text terminals, like _XTerm_. -It was inspired by _termbox_, but includes many additional improvements. -a|[.right] -image::logos/tcell.png[float="right"] -|=== - -NOTE: This is version 2 of _Tcell_. There are breaking changes relative to version 1. -Version 1.x remains available using the import `github.com/gdamore/tcell`. - -== Examples - -* https://github.com/gdamore/proxima5[proxima5] - space shooter (https://youtu.be/jNxKTCmY_bQ[video]) -* https://github.com/gdamore/govisor[govisor] - service management UI (http://2.bp.blogspot.com/--OsvnfzSNow/Vf7aqMw3zXI/AAAAAAAAARo/uOMtOvw4Sbg/s1600/Screen%2BShot%2B2015-09-20%2Bat%2B9.08.41%2BAM.png[screenshot]) -* mouse demo - included mouse test (http://2.bp.blogspot.com/-fWvW5opT0es/VhIdItdKqJI/AAAAAAAAATE/7Ojc0L1SpB0/s1600/Screen%2BShot%2B2015-10-04%2Bat%2B11.47.13%2BPM.png[screenshot]) -* https://github.com/gdamore/gomatrix[gomatrix] - converted from Termbox -* https://github.com/zyedidia/micro/[micro] - lightweight text editor with syntax-highlighting and themes -* https://github.com/viktomas/godu[godu] - simple golang utility helping to discover large files/folders. -* https://github.com/rivo/tview/[tview] - rich interactive widgets for terminal UIs -* https://github.com/awesome-gocui/gocui[awesome gocui] - Go Console User Interface -* https://github.com/rgm3/gomandelbrot[gomandelbrot] - Mandelbrot! -* https://github.com/senorprogrammer/wtf[WTF]- Personal information dashboard for your terminal -* https://github.com/browsh-org/browsh[browsh] - A fully-modern text-based browser, rendering to TTY and browsers (https://www.youtube.com/watch?v=HZq86XfBoRo[video]) -* https://github.com/sachaos/go-life[go-life] - Conway's Game of Life. -* https://github.com/gcla/gowid[gowid] - compositional widgets for terminal UIs, inspired by urwid -* https://termshark.io[termshark] - a terminal UI for tshark, inspired by Wireshark, built on gowid -* https://github.com/MichaelS11/go-tetris[go-tetris] - Go Tetris with AI option -* https://github.com/junegunn/fzf[fzf] - A command-line fuzzy finder -* https://github.com/esimov/ascii-fluid[ascii-fluid] - A terminal based ASCII fluid simulation controlled by webcam -* https://gitlab.com/tslocum/cbind[cbind] - Provides key event encoding, decoding and handling -* https://github.com/spinzed/tpong[tpong] - The old-school Pong remade in terminal -* https://git.sr.ht/~sircmpwn/aerc[aerc] - An email client for your terminal. -* https://github.com/ezeoleaf/tblogs[tblogs] - A terminal based development blogs reader -* https://github.com/lallassu/spinc[spinc] - An irssi inspired terminal chat application for Cisco Spark/WebEx -* https://github.com/lallassu/gorss[gorss] - A RSS/Atom feed reader for your terminal -* https://github.com/Bios-Marcel/memoryalike[memoryalike] - A game where you have to memorize runes and hit their respective keys -* https://github.com/gokcehan/lf[lf] - Terminal file manager -* https://github.com/bunyk/gokeybr[gokeybr] - program that helps to deliberately practice your typing. -* https://github.com/jbaramidze/gonano[gonano] - CLI test editor -* https://github.com/tmountain/uchess[uchess] - A UCI chess client for your terminal -* https://github.com/a-h/min[min] - A Gemini browser -* https://github.com/noborus/ov[ov] - Terminal pager -* https://github.com/gcla/tmux-wormhole[tmux-wormhole] - A tmux plugin to transfer files with magic wormhole -* https://github.com/anaseto/gruid-tcell[gruid-tcell] - A tcell driver for the grid based UI and game framework gruid. -* https://github.com/aretext/aretext[aretext] - Minimalist text editor with vim key bindings. - -== Pure Go Terminfo Database - -_Tcell_ includes a full parser and expander for terminfo capability strings, -so that it can avoid hard coding escape strings for formatting. It also favors -portability, and includes support for all POSIX systems. - -The database is also flexible & extensible, and can modified by either running -a program to build the entire database, or an entry for just a single terminal. - -== More Portable - -_Tcell_ is portable to a wide variety of systems, and is pure Go, without -any need for CGO. -_Tcell_ is believed to work with mainstream systems officially supported by golang. - -== No Async IO - -_Tcell_ is able to operate without requiring `SIGIO` signals (unlike _termbox_), -or asynchronous I/O, and can instead use standard Go file -objects and Go routines. -This means it should be safe, especially for -use with programs that use exec, or otherwise need to manipulate the -tty streams. -This model is also much closer to idiomatic Go, leading -to fewer surprises. - -== Rich Unicode & non-Unicode support - -_Tcell_ includes enhanced support for Unicode, including wide characters and -combining characters, provided your terminal can support them. -Note that -Windows terminals generally don't support the full Unicode repertoire. - -It will also convert to and from Unicode locales, so that the program -can work with UTF-8 internally, and get reasonable output in other locales. -_Tcell_ tries hard to convert to native characters on both input and output, and -on output _Tcell_ even makes use of the alternate character set to facilitate -drawing certain characters. - -== More Function Keys - -_Tcell_ also has richer support for a larger number of special keys that some terminals can send. - -== Better Color Handling - -_Tcell_ will respect your terminal's color space as specified within your terminfo -entries, so that for example attempts to emit color sequences on VT100 terminals -won't result in unintended consequences. - -In legacy Windows mode, _Tcell_ supports 16 colors, bold, dim, and reverse, -instead of just termbox's 8 colors with reverse. (Note that there is some -conflation with bold/dim and colors.) -Modern Windows 10 can benefit from much richer colors however. - -_Tcell_ maps 16 colors down to 8, for terminals that need it. -(The upper 8 colors are just brighter versions of the lower 8.) - -== Better Mouse Support - -_Tcell_ supports enhanced mouse tracking mode, so your application can receive -regular mouse motion events, and wheel events, if your terminal supports it. - -(Note: The Windows 10 Terminal application suffers from a flaw in this regard, -and does not support mouse interaction. The stock Windows 10 console host -fired up with cmd.exe or PowerShell works fine however.) - -== _Termbox_ Compatibility - -A compatibility layer for _termbox_ is provided in the `compat` directory. -To use it, try importing `github.com/gdamore/tcell/termbox` instead. -Most _termbox-go_ programs will probably work without further modification. - -== Working With Unicode - -Internally Tcell uses UTF-8, just like Go. -However, Tcell understands how to -convert to and from other character sets, using the capabilities of -the `golang.org/x/text/encoding packages`. -Your application must supply -them, as the full set of the most common ones bloats the program by about 2MB. -If you're lazy, and want them all anyway, see the `encoding` sub-directory. - -== Wide & Combining Characters - -The `SetContent()` API takes a primary rune, and an optional list of combining runes. -If any of the runes is a wide (East Asian) rune occupying two cells, -then the library will skip output from the following cell, but care must be -taken in the application to avoid explicitly attempting to set content in the -next cell, otherwise the results are undefined. (Normally wide character -is displayed, and the other character is not; do not depend on that behavior.) - -Older terminal applications (especially on systems like Windows 8) lack support -for advanced Unicode, and thus may not fare well. - -== Colors - -_Tcell_ assumes the ANSI/XTerm color model, including the 256 color map that -XTerm uses when it supports 256 colors. The terminfo guidance will be -honored, with respect to the number of colors supported. Also, only -terminals which expose ANSI style `setaf` and `setab` will support color; -if you have a color terminal that only has `setf` and `setb`, please submit -a ticket; it wouldn't be hard to add that if there is need. - -== 24-bit Color - -_Tcell_ _supports true color_! (That is, if your terminal can support it, -_Tcell_ can accurately display 24-bit color.) - -NOTE: Technically the approach of using 24-bit RGB values for color is more -accurately described as "direct color", but most people use the term "true color", -and so we follow the (inaccurate) common convention. - -There are a few ways you can enable (or disable) true color. - -* For many terminals, we can detect it automatically if your terminal -includes the `RGB` or `Tc` capabilities (or rather it did when the database -was updated.) - -* You can force this one by setting the `COLORTERM` environment variable to -"24-bit", "truecolor" or "24bit". This is the same method used -by most other terminal applications that support 24-bit color. - -* If you set your `TERM` environment variable to a value with the suffix `-truecolor` -then 24-bit color compatible with XTerm will be assumed (and the terminal will -otherwise use the same escape sequences as the base terminal definition.) - -NOTE: This feature is for compatibility with older _Tcell_ versions. -It is recommended to use one of other methods instead. - -* You can disable 24-bit color by setting `TCELL_TRUECOLOR=disable` in your -environment. - -When using TrueColor, programs will display the colors that the programmer -intended, overriding any "`themes`" you may have set in your terminal -emulator. (For some cases, accurate color fidelity is more important -than respecting themes. For other cases, such as typical text apps that -only use a few colors, its more desirable to respect the themes that -the user has established.) - -== Performance - -Reasonable attempts have been made to minimize sending data to terminals, -avoiding repeated sequences or drawing the same cell on refresh updates. - -== Terminfo - -(Not relevant for Windows users.) - -The Terminfo implementation operates with a built-in database. -This should satisfy most users. However, it can also (on systems -with ncurses installed), dynamically parse the output from `infocmp` -for terminals it does not already know about. - -See the `terminfo/` directory for more information about generating -new entries for the built-in database. - -_Tcell_ requires that the terminal support the `cup` mode of cursor addressing. -Ancient terminals without the ability to position the cursor directly -are not supported. -This is unlikely to be a problem; such terminals have not been mass-produced -since the early 1970s. - -== Mouse Support - -Mouse support is detected via the `kmous` terminfo variable, however, -enablement/disablement and decoding mouse events is done using hard coded -sequences based on the XTerm X11 model. As of this writing all popular -terminals with mouse tracking support this model. (Full terminfo support -is not possible as terminfo sequences are not defined.) - -On Windows, the mouse works normally. - -Mouse wheel buttons on various terminals are known to work, but the support -in terminal emulators, as well as support for various buttons and -live mouse tracking, varies widely. Modern _xterm_, macOS _Terminal_, and _iTerm_ all work well. - -== Bracketed Paste - -Terminals that appear to support the XTerm mouse model also can support -bracketed paste, for applications that opt-in. See `EnablePaste()` for details. - -== Testability - -There is a `SimulationScreen`, that can be used to simulate a real screen -for automated testing. The supplied tests do this. The simulation contains -event delivery, screen resizing support, and capabilities to inject events -and examine "`physical`" screen contents. - -== Platforms - -=== POSIX (Linux, FreeBSD, macOS, Solaris, etc.) - -Everything works using pure Go on mainstream platforms. Some more esoteric -platforms (e.g. AIX) may need to be added. Pull requests are welcome! - -=== Windows - -Windows console mode applications are supported. - -Modern console applications like ConEmu and the Windows 10 terminal, -support all the good features (resize, mouse tracking, etc.) - -=== Plan9, WASM, and others - -These platforms won't work, but compilation stubs are supplied -for folks that want to include parts of this in software for those -platforms. The Simulation screen works, but as _Tcell_ doesn't know how to -allocate a real screen object on those platforms, `NewScreen()` will fail. - -If anyone has wisdom about how to improve support for these, -please let me know. PRs are especially welcome. - -=== Commercial Support - -_Tcell_ is absolutely free, but if you want to obtain commercial, professional support, there are options. - -[cols="2",align="center",frame="none", grid="none"] -|=== -^.^| -image:logos/tidelift.png[100,100] -a| -https://tidelift.com/[Tidelift] subscriptions include support for _Tcell_, as well as many other open source packages. - -^.^| -image:logos/staysail.png[100,100] -a| -mailto:info@staysail.tech[Staysail Systems, Inc.] offers direct support, and custom development around _Tcell_ on an hourly basis. diff --git a/vendor/github.com/gdamore/tcell/v2/README.md b/vendor/github.com/gdamore/tcell/v2/README.md new file mode 100644 index 000000000..b7727e081 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/v2/README.md @@ -0,0 +1,272 @@ + +# ![Tcell](logos/tcell.png) + +_Tcell_ is a _Go_ package that provides a cell based view for text terminals, like _XTerm_. +It was inspired by _termbox_, but includes many additional improvements. + +[![Linux Status](https://img.shields.io/travis/gdamore/tcell.svg?label=linux)](https://travis-ci.org/gdamore/tcell) +[![Windows Status](https://img.shields.io/appveyor/ci/gdamore/tcell.svg?label=windows)](https://ci.appveyor.com/project/gdamore/tcell) +[![Apache License](https://img.shields.io/badge/license-APACHE2-blue.svg)](https://github.com/gdamore/tcell/blob/master/LICENSE) +[![Documentation](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/gdamore/tcell/v2) +[![Report Card](https://goreportcard.com/badge/gdamore/tcell)](http://goreportcard.com/report/gdamore/tcell/v2) +[![Discord](https://img.shields.io/discord/639503822733180969?label=discord)](https://discord.gg/urTTxDN) +[![Coverage](https://codecov.io/gh/gdamore/tcell/branch/master/graph/badge.svg)](https://codecov.io/gh/gdamore/tcell) + + +NOTE: This is version 2 of _Tcell_. There are breaking changes relative to version 1. +Version 1.x remains available using the import `github.com/gdamore/tcell`. + +## Tutorial + +A brief, and still somewhat rough, [tutorial](TUTORIAL.md) is available. +## Examples + +* [proxima5](https://github.com/gdamore/proxima5) - space shooter ([video](https://youtu.be/jNxKTCmY_bQ)) +* [govisor](https://github.com/gdamore/govisor) - service management UI ([screenshot](http://2.bp.blogspot.com/--OsvnfzSNow/Vf7aqMw3zXI/AAAAAAAAARo/uOMtOvw4Sbg/s1600/Screen%2BShot%2B2015-09-20%2Bat%2B9.08.41%2BAM.png)) +* mouse demo - included mouse test ([screenshot](http://2.bp.blogspot.com/-fWvW5opT0es/VhIdItdKqJI/AAAAAAAAATE/7Ojc0L1SpB0/s1600/Screen%2BShot%2B2015-10-04%2Bat%2B11.47.13%2BPM.png)) +* [gomatrix](https://github.com/gdamore/gomatrix) - converted from Termbox +* [micro](https://github.com/zyedidia/micro/) - lightweight text editor with syntax-highlighting and themes +* [godu](https://github.com/viktomas/godu) - utility to discover large files/folders +* [tview](https://github.com/rivo/tview/) - rich interactive widgets +* [cview](https://code.rocketnine.space/tslocum/cview) - user interface toolkit (fork of _tview_) +* [awsome gocui](https://github.com/awesome-gocui/gocui) - Go Console User Interface +* [gomandelbrot](https://github.com/rgm3/gomandelbrot) - Mandelbrot! +* [WTF](https://github.com/senorprogrammer/wtf) - personal information dashboard +* [browsh](https://github.com/browsh-org/browsh) - modern web browser ([video](https://www.youtube.com/watch?v=HZq86XfBoRo)) +* [go-life](https://github.com/sachaos/go-life) - Conway's Game of Life +* [gowid](https://github.com/gcla/gowid) - compositional widgets for terminal UIs, inspired by _urwid_ +* [termshark](https://termshark.io) - interface for _tshark_, inspired by Wireshark, built on _gowid_ +* [go-tetris](https://github.com/MichaelS11/go-tetris) - Go Tetris with AI option +* [fzf](https://github.com/junegunn/fzf) - command-line fuzzy finder +* [ascii-fluid](https://github.com/esimov/ascii-fluid) - fluid simulation controlled by webcam +* [cbind](https://code.rocketnine.space/tslocum/cbind) - key event encoding, decoding and handling +* [tpong](https://github.com/spinzed/tpong) - old-school Pong +* [aerc](https://git.sr.ht/~sircmpwn/aerc) - email client +* [tblogs](https://github.com/ezeoleaf/tblogs) - development blogs reader +* [spinc](https://github.com/lallassu/spinc) - _irssi_ inspired chat application for Cisco Spark/WebEx +* [gorss](https://github.com/lallassu/gorss) - RSS/Atom feed reader +* [memoryalike](https://github.com/Bios-Marcel/memoryalike) - memorization game +* [lf](https://github.com/gokcehan/lf) - file manager +* [gokeybr](https://github.com/bunyk/gokeybr) - deliberately practice your typing +* [gonano](https://github.com/jbaramidze/gonano) - editor, mimics _nano_ +* [uchess](https://github.com/tmountain/uchess) - UCI chess client +* [min](https://github.com/a-h/min) - Gemini browser +* [ov](https://github.com/noborus/ov) - file pager +* [tmux-wormhole](https://github.com/gcla/tmux-wormhole) - _tmux_ plugin to transfer files +* [gruid-tcell](https://github.com/anaseto/gruid-tcell) - driver for the grid based UI and game framework +* [aretext](https://github.com/aretext/aretext) - minimalist text editor with _vim_ key bindings + +## Pure Go Terminfo Database + +_Tcell_ includes a full parser and expander for terminfo capability strings, +so that it can avoid hard coding escape strings for formatting. It also favors +portability, and includes support for all POSIX systems. + +The database is also flexible & extensible, and can be modified by either running +a program to build the entire database, or an entry for just a single terminal. + +## More Portable + +_Tcell_ is portable to a wide variety of systems, and is pure Go, without +any need for CGO. +_Tcell_ is believed to work with mainstream systems officially supported by golang. + +## No Async IO + +_Tcell_ is able to operate without requiring `SIGIO` signals (unlike _termbox_), +or asynchronous I/O, and can instead use standard Go file objects and Go routines. +This means it should be safe, especially for +use with programs that use exec, or otherwise need to manipulate the tty streams. +This model is also much closer to idiomatic Go, leading to fewer surprises. + +## Rich Unicode & non-Unicode support + +_Tcell_ includes enhanced support for Unicode, including wide characters and +combining characters, provided your terminal can support them. +Note that +Windows terminals generally don't support the full Unicode repertoire. + +It will also convert to and from Unicode locales, so that the program +can work with UTF-8 internally, and get reasonable output in other locales. +_Tcell_ tries hard to convert to native characters on both input and output. +On output _Tcell_ even makes use of the alternate character set to facilitate +drawing certain characters. + +## More Function Keys + +_Tcell_ also has richer support for a larger number of special keys that some +terminals can send. + +## Better Color Handling + +_Tcell_ will respect your terminal's color space as specified within your terminfo entries. +For example attempts to emit color sequences on VT100 terminals +won't result in unintended consequences. + +In legacy Windows mode, _Tcell_ supports 16 colors, bold, dim, and reverse, +instead of just termbox's 8 colors with reverse. (Note that there is some +conflation with bold/dim and colors.) +Modern Windows 10 can benefit from much richer colors however. + +_Tcell_ maps 16 colors down to 8, for terminals that need it. +(The upper 8 colors are just brighter versions of the lower 8.) + +## Better Mouse Support + +_Tcell_ supports enhanced mouse tracking mode, so your application can receive +regular mouse motion events, and wheel events, if your terminal supports it. + +(Note: The Windows 10 Terminal application suffers from a flaw in this regard, +and does not support mouse interaction. The stock Windows 10 console host +fired up with cmd.exe or PowerShell works fine however.) + +## _Termbox_ Compatibility + +A compatibility layer for _termbox_ is provided in the `compat` directory. +To use it, try importing `github.com/gdamore/tcell/termbox` instead. +Most _termbox-go_ programs will probably work without further modification. + +## Working With Unicode + +Internally _Tcell_ uses UTF-8, just like Go. +However, _Tcell_ understands how to +convert to and from other character sets, using the capabilities of +the `golang.org/x/text/encoding packages`. +Your application must supply +them, as the full set of the most common ones bloats the program by about 2 MB. +If you're lazy, and want them all anyway, see the `encoding` sub-directory. + +## Wide & Combining Characters + +The `SetContent()` API takes a primary rune, and an optional list of combining runes. +If any of the runes is a wide (East Asian) rune occupying two cells, +then the library will skip output from the following cell. Care must be +taken in the application to avoid explicitly attempting to set content in the +next cell, otherwise the results are undefined. (Normally the wide character +is displayed, and the other character is not; do not depend on that behavior.) + +Older terminal applications (especially on systems like Windows 8) lack support +for advanced Unicode, and thus may not fare well. + +## Colors + +_Tcell_ assumes the ANSI/XTerm color model, including the 256 color map that +XTerm uses when it supports 256 colors. The terminfo guidance will be +honored, with respect to the number of colors supported. Also, only +terminals which expose ANSI style `setaf` and `setab` will support color; +if you have a color terminal that only has `setf` and `setb`, please submit +a ticket. + +## 24-bit Color + +_Tcell_ _supports 24-bit color!_ (That is, if your terminal can support it.) + +NOTE: Technically the approach of using 24-bit RGB values for color is more +accurately described as "direct color", but most people use the term "true color". +We follow the (inaccurate) common convention. + +There are a few ways you can enable (or disable) true color. + +* For many terminals, we can detect it automatically if your terminal +includes the `RGB` or `Tc` capabilities (or rather it did when the database +was updated.) + +* You can force this one by setting the `COLORTERM` environment variable to +`24-bit`, `truecolor` or `24bit`. This is the same method used +by most other terminal applications that support 24-bit color. + +* If you set your `TERM` environment variable to a value with the suffix `-truecolor` +then 24-bit color compatible with XTerm and ECMA-48 will be assumed. +(This feature is deprecated. +It is recommended to use one of other methods listed above.) + +* You can disable 24-bit color by setting `TCELL_TRUECOLOR=disable` in your +environment. + +When using TrueColor, programs will display the colors that the programmer +intended, overriding any "`themes`" you may have set in your terminal +emulator. (For some cases, accurate color fidelity is more important +than respecting themes. For other cases, such as typical text apps that +only use a few colors, its more desirable to respect the themes that +the user has established.) + +## Performance + +Reasonable attempts have been made to minimize sending data to terminals, +avoiding repeated sequences or drawing the same cell on refresh updates. + +## Terminfo + +(Not relevant for Windows users.) + +The Terminfo implementation operates with a built-in database. +This should satisfy most users. However, it can also (on systems +with ncurses installed), dynamically parse the output from `infocmp` +for terminals it does not already know about. + +See the `terminfo/` directory for more information about generating +new entries for the built-in database. + +_Tcell_ requires that the terminal support the `cup` mode of cursor addressing. +Ancient terminals without the ability to position the cursor directly +are not supported. +This is unlikely to be a problem; such terminals have not been mass-produced +since the early 1970s. + +## Mouse Support + +Mouse support is detected via the `kmous` terminfo variable, however, +enablement/disablement and decoding mouse events is done using hard coded +sequences based on the XTerm X11 model. All popular +terminals with mouse tracking support this model. (Full terminfo support +is not possible as terminfo sequences are not defined.) + +On Windows, the mouse works normally. + +Mouse wheel buttons on various terminals are known to work, but the support +in terminal emulators, as well as support for various buttons and +live mouse tracking, varies widely. +Modern _xterm_, macOS _Terminal_, and _iTerm_ all work well. + +## Bracketed Paste + +Terminals that appear to support the XTerm mouse model also can support +bracketed paste, for applications that opt-in. See `EnablePaste()` for details. + +## Testability + +There is a `SimulationScreen`, that can be used to simulate a real screen +for automated testing. The supplied tests do this. The simulation contains +event delivery, screen resizing support, and capabilities to inject events +and examine "`physical`" screen contents. + +## Platforms + +### POSIX (Linux, FreeBSD, macOS, Solaris, etc.) + +Everything works using pure Go on mainstream platforms. Some more esoteric +platforms (e.g., AIX) may need to be added. Pull requests are welcome! + +### Windows + +Windows console mode applications are supported. + +Modern console applications like ConEmu and the Windows 10 terminal, +support all the good features (resize, mouse tracking, etc.) + +### Plan9, WASM, and others + +These platforms won't work, but compilation stubs are supplied +for folks that want to include parts of this in software for those +platforms. The Simulation screen works, but as _Tcell_ doesn't know how to +allocate a real screen object on those platforms, `NewScreen()` will fail. + +If anyone has wisdom about how to improve support for these, +please let me know. PRs are especially welcome. + +### Commercial Support + +_Tcell_ is absolutely free, but if you want to obtain commercial, professional support, there are options. + +* [TideLift](https://tidelift.com/) subscriptions include support for _Tcell_, as well as many other open source packages. +* [Staysail Systems Inc.](mailto:info@staysail.tech) offers direct support, and custom development around _Tcell_ on an hourly basis. diff --git a/vendor/github.com/gdamore/tcell/v2/TUTORIAL.adoc b/vendor/github.com/gdamore/tcell/v2/TUTORIAL.adoc deleted file mode 100644 index c5d6a1a2d..000000000 --- a/vendor/github.com/gdamore/tcell/v2/TUTORIAL.adoc +++ /dev/null @@ -1,325 +0,0 @@ -= tcell tutorial - -tcell provides a low-level, portable API for building terminal-based programs. -A https://en.wikipedia.org/wiki/Terminal_emulator[terminal emulator] is used to -interact with such a program. - -Applications typically initialize a screen and enter an event loop, then -finalize the screen before exiting. - -Application frameworks such as https://github.com/rivo/tview[tview] and -https://gitlab.com/tslocum/cview[cview] provide widgets and additional features. - -== Resize events - -Applications receive an event of type `EventResize` when they are first initialized and each time the terminal is resized. -The new size is available as `Size`. - -[source,go] ----- -switch ev := ev.(type) { -case *tcell.EventResize: - w, h := ev.Size() - logMessage(fmt.Sprintf("Resized to %dx%d", w, h)) -} ----- - -== Key events - -When a key is pressed, applications receive an event of type `EventKey`. -This event describes the modifier keys pressed (if any) and the pressed key or rune. - -When a rune key is pressed, an event with its `Key` set to `KeyRune` is dispatched. - -When a non-rune key is pressed, it is available as the `Key` of the event. - -[source,go] ----- -switch ev := ev.(type) { -case *tcell.EventKey: - mod, key, ch := ev.Mod(), ev.Key(), ev.Rune() - logMessage(fmt.Sprintf("EventKey Modifiers: %d Key: %d Rune: %d", mod, key, ch)) -} ----- - -=== Key event restrictions - -Terminal-based programs have less visibility into keyboard activity than graphical applications. - -When a key is pressed and held, additional key press events are sent by the terminal emulator. -The rate of these repeated events depends on the emulator's configuration. -Key release events are not available. - -It is not possible to distinguish runes typed while holding shift and runes typed using caps lock. -Capital letters are reported without the Shift modifier. - -=== Key event handling library - -https://gitlab.com/tslocum/cbind[cbind] provides key event encoding and decoding -to and from human-readable strings. It also provides keybinding-based input handling. - -== Mouse events - -Applications receive an event of type `EventMouse` when the mouse moves, or a mouse button is pressed or released. -Mouse events are only delivered if -`EnableMouse` has been called. - -The mouse buttons being pressed (if any) are available as `Buttons`, and the position of the mouse is available as `Position`. - -[source,go] ----- -switch ev := ev.(type) { -case *tcell.EventMouse: - mod := ev.Modifiers() - btns := ev.Buttons() - x, y := ev.Position() - logMessage(fmt.Sprintf("EventMouse Modifiers: %d Buttons: %d Position: %d,%d", mod, btns, x, y)) -} ----- - -=== Mouse buttons - -[cols=3*,options=header] -|=== - -|Identifier -|Alias -|Description - -|Button1 -|ButtonPrimary -|Left button - -|Button2 -|ButtonSecondary -|Right button - -|Button3 -|ButtonMiddle -|Middle button - -|Button4 -| -|Side button (thumb/next) - -|Button5 -| -|Side button (thumb/prev) - -|=== - -== Usage - -To create a tcell application, first initialize a screen to hold it. - -[source,go] ----- -// Initialize screen -s, err := tcell.NewScreen() -if err != nil { - log.Fatalf("%+v", err) -} -if err := s.Init(); err != nil { - log.Fatalf("%+v", err) -} - -// Set default text style -defStyle := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) -s.SetStyle(defStyle) - -// Clear screen -s.Clear() ----- - -Text may be drawn on the screen using `SetContent`. - -[source,go] ----- -s.SetContent(0, 0, 'H', nil, defStyle) -s.SetContent(1, 0, 'i', nil, defStyle) -s.SetContent(2, 0, '!', nil, defStyle) ----- - -To draw text more easily, define a render function. - -[source,go] ----- -func drawText(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { - row := y1 - col := x1 - for _, r := range []rune(text) { - s.SetContent(col, row, r, nil, style) - col++ - if col >= x2 { - row++ - col = x1 - } - if row > y2 { - break - } - } -} ----- - -Lastly, define an event loop to handle user input and update application state. - -[source,go] ----- -quit := func() { - s.Fini() - os.Exit(0) -} -for { - // Update screen - s.Show() - - // Poll event - ev := s.PollEvent() - - // Process event - switch ev := ev.(type) { - case *tcell.EventResize: - s.Sync() - case *tcell.EventKey: - if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { - quit() - } - } -} ----- - -== Demo application - -The following demonstrates how to initialize a screen, draw text/graphics and handle user input. - -[source,go] ----- -package main - -import ( - "fmt" - "log" - "os" - - "github.com/gdamore/tcell/v2" -) - -func drawText(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { - row := y1 - col := x1 - for _, r := range []rune(text) { - s.SetContent(col, row, r, nil, style) - col++ - if col >= x2 { - row++ - col = x1 - } - if row > y2 { - break - } - } -} - -func drawBox(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { - if y2 < y1 { - y1, y2 = y2, y1 - } - if x2 < x1 { - x1, x2 = x2, x1 - } - - // Fill background - for row := y1; row <= y2; row++ { - for col := x1; col <= x2; col++ { - s.SetContent(col, row, ' ', nil, style) - } - } - - // Draw borders - for col := x1; col <= x2; col++ { - s.SetContent(col, y1, tcell.RuneHLine, nil, style) - s.SetContent(col, y2, tcell.RuneHLine, nil, style) - } - for row := y1 + 1; row < y2; row++ { - s.SetContent(x1, row, tcell.RuneVLine, nil, style) - s.SetContent(x2, row, tcell.RuneVLine, nil, style) - } - - // Only draw corners if necessary - if y1 != y2 && x1 != x2 { - s.SetContent(x1, y1, tcell.RuneULCorner, nil, style) - s.SetContent(x2, y1, tcell.RuneURCorner, nil, style) - s.SetContent(x1, y2, tcell.RuneLLCorner, nil, style) - s.SetContent(x2, y2, tcell.RuneLRCorner, nil, style) - } - - drawText(s, x1+1, y1+1, x2-1, y2-1, style, text) -} - -func main() { - defStyle := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) - boxStyle := tcell.StyleDefault.Foreground(tcell.ColorWhite).Background(tcell.ColorPurple) - - // Initialize screen - s, err := tcell.NewScreen() - if err != nil { - log.Fatalf("%+v", err) - } - if err := s.Init(); err != nil { - log.Fatalf("%+v", err) - } - s.SetStyle(defStyle) - s.EnableMouse() - s.EnablePaste() - s.Clear() - - // Draw initial boxes - drawBox(s, 1, 1, 42, 7, boxStyle, "Click and drag to draw a box") - drawBox(s, 5, 9, 32, 14, boxStyle, "Press C to reset") - - // Event loop - ox, oy := -1, -1 - quit := func() { - s.Fini() - os.Exit(0) - } - for { - // Update screen - s.Show() - - // Poll event - ev := s.PollEvent() - - // Process event - switch ev := ev.(type) { - case *tcell.EventResize: - s.Sync() - case *tcell.EventKey: - if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { - quit() - } else if ev.Key() == tcell.KeyCtrlL { - s.Sync() - } else if ev.Rune() == 'C' || ev.Rune() == 'c' { - s.Clear() - } - case *tcell.EventMouse: - x, y := ev.Position() - button := ev.Buttons() - // Only process button events, not wheel events - button &= tcell.ButtonMask(0xff) - - if button != tcell.ButtonNone && ox < 0 { - ox, oy = x, y - } - switch ev.Buttons() { - case tcell.ButtonNone: - if ox >= 0 { - label := fmt.Sprintf("%d,%d to %d,%d", ox, oy, x, y) - drawBox(s, ox, oy, x, y, boxStyle, label) - ox, oy = -1, -1 - } - } - } - } -} ----- diff --git a/vendor/github.com/gdamore/tcell/v2/TUTORIAL.md b/vendor/github.com/gdamore/tcell/v2/TUTORIAL.md new file mode 100644 index 000000000..8d14f3311 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/v2/TUTORIAL.md @@ -0,0 +1,293 @@ +# _Tcell_ Tutorial + +_Tcell_ provides a low-level, portable API for building terminal-based programs. +A [terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator) +(or a real terminal such as a DEC VT-220) is used to interact with such a program. + +_Tcell_'s interface is fairly low-level. +While it provides a reasonably portable way of dealing with all the usual terminal +features, it may be easier to utilize a higher level framework. +A number of such frameworks are listed on the _Tcell_ main [README](README.md). + +This tutorial provides the details of _Tcell_, and is appropriate for developers +wishing to create their own application frameworks or needing more direct access +to the terminal capabilities. + +## Resize events + +Applications receive an event of type `EventResize` when they are first initialized and each time the terminal is resized. +The new size is available as `Size`. + +```golang +switch ev := ev.(type) { +case *tcell.EventResize: + w, h := ev.Size() + logMessage(fmt.Sprintf("Resized to %dx%d", w, h)) +} +``` + +## Key events + +When a key is pressed, applications receive an event of type `EventKey`. +This event describes the modifier keys pressed (if any) and the pressed key or rune. + +When a rune key is pressed, an event with its `Key` set to `KeyRune` is dispatched. + +When a non-rune key is pressed, it is available as the `Key` of the event. + +```golang +switch ev := ev.(type) { +case *tcell.EventKey: + mod, key, ch := ev.Mod(), ev.Key(), ev.Rune() + logMessage(fmt.Sprintf("EventKey Modifiers: %d Key: %d Rune: %d", mod, key, ch)) +} +``` + +### Key event restrictions + +Terminal-based programs have less visibility into keyboard activity than graphical applications. + +When a key is pressed and held, additional key press events are sent by the terminal emulator. +The rate of these repeated events depends on the emulator's configuration. +Key release events are not available. + +It is not possible to distinguish runes typed while holding shift and runes typed using caps lock. +Capital letters are reported without the Shift modifier. + +## Mouse events + +Applications receive an event of type `EventMouse` when the mouse moves, or a mouse button is pressed or released. +Mouse events are only delivered if +`EnableMouse` has been called. + +The mouse buttons being pressed (if any) are available as `Buttons`, and the position of the mouse is available as `Position`. + +```golang +switch ev := ev.(type) { +case *tcell.EventMouse: + mod := ev.Modifiers() + btns := ev.Buttons() + x, y := ev.Position() + logMessage(fmt.Sprintf("EventMouse Modifiers: %d Buttons: %d Position: %d,%d", mod, btns, x, y)) +} +``` + +### Mouse buttons + +Identifier | Alias | Description +-----------|-----------------|----------- +Button1 | ButtonPrimary | Left button +Button2 | ButtonSecondary | Right button +Button3 | ButtonMiddle | Middle button +Button4 | | Side button (thumb/next) +Button5 | | Side button (thumb/prev) + +## Usage + +To create a tcell application, first initialize a screen to hold it. + +```golang +s, err := tcell.NewScreen() +if err != nil { + log.Fatalf("%+v", err) +} +if err := s.Init(); err != nil { + log.Fatalf("%+v", err) +} + +// Set default text style +defStyle := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) +s.SetStyle(defStyle) + +// Clear screen +s.Clear() +``` + +Text may be drawn on the screen using `SetContent`. + +```golang +s.SetContent(0, 0, 'H', nil, defStyle) +s.SetContent(1, 0, 'i', nil, defStyle) +s.SetContent(2, 0, '!', nil, defStyle) +``` + +To draw text more easily, define a render function. + +```golang +func drawText(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { + row := y1 + col := x1 + for _, r := range []rune(text) { + s.SetContent(col, row, r, nil, style) + col++ + if col >= x2 { + row++ + col = x1 + } + if row > y2 { + break + } + } +} +``` + +Lastly, define an event loop to handle user input and update application state. + +```golang +quit := func() { + s.Fini() + os.Exit(0) +} +for { + // Update screen + s.Show() + + // Poll event + ev := s.PollEvent() + + // Process event + switch ev := ev.(type) { + case *tcell.EventResize: + s.Sync() + case *tcell.EventKey: + if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { + quit() + } + } +} +``` + +## Demo application + +The following demonstrates how to initialize a screen, draw text/graphics and handle user input. + +```golang +package main + +import ( + "fmt" + "log" + "os" + + "github.com/gdamore/tcell/v2" +) + +func drawText(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { + row := y1 + col := x1 + for _, r := range []rune(text) { + s.SetContent(col, row, r, nil, style) + col++ + if col >= x2 { + row++ + col = x1 + } + if row > y2 { + break + } + } +} + +func drawBox(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { + if y2 < y1 { + y1, y2 = y2, y1 + } + if x2 < x1 { + x1, x2 = x2, x1 + } + + // Fill background + for row := y1; row <= y2; row++ { + for col := x1; col <= x2; col++ { + s.SetContent(col, row, ' ', nil, style) + } + } + + // Draw borders + for col := x1; col <= x2; col++ { + s.SetContent(col, y1, tcell.RuneHLine, nil, style) + s.SetContent(col, y2, tcell.RuneHLine, nil, style) + } + for row := y1 + 1; row < y2; row++ { + s.SetContent(x1, row, tcell.RuneVLine, nil, style) + s.SetContent(x2, row, tcell.RuneVLine, nil, style) + } + + // Only draw corners if necessary + if y1 != y2 && x1 != x2 { + s.SetContent(x1, y1, tcell.RuneULCorner, nil, style) + s.SetContent(x2, y1, tcell.RuneURCorner, nil, style) + s.SetContent(x1, y2, tcell.RuneLLCorner, nil, style) + s.SetContent(x2, y2, tcell.RuneLRCorner, nil, style) + } + + drawText(s, x1+1, y1+1, x2-1, y2-1, style, text) +} + +func main() { + defStyle := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) + boxStyle := tcell.StyleDefault.Foreground(tcell.ColorWhite).Background(tcell.ColorPurple) + + // Initialize screen + s, err := tcell.NewScreen() + if err != nil { + log.Fatalf("%+v", err) + } + if err := s.Init(); err != nil { + log.Fatalf("%+v", err) + } + s.SetStyle(defStyle) + s.EnableMouse() + s.EnablePaste() + s.Clear() + + // Draw initial boxes + drawBox(s, 1, 1, 42, 7, boxStyle, "Click and drag to draw a box") + drawBox(s, 5, 9, 32, 14, boxStyle, "Press C to reset") + + // Event loop + ox, oy := -1, -1 + quit := func() { + s.Fini() + os.Exit(0) + } + for { + // Update screen + s.Show() + + // Poll event + ev := s.PollEvent() + + // Process event + switch ev := ev.(type) { + case *tcell.EventResize: + s.Sync() + case *tcell.EventKey: + if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { + quit() + } else if ev.Key() == tcell.KeyCtrlL { + s.Sync() + } else if ev.Rune() == 'C' || ev.Rune() == 'c' { + s.Clear() + } + case *tcell.EventMouse: + x, y := ev.Position() + button := ev.Buttons() + // Only process button events, not wheel events + button &= tcell.ButtonMask(0xff) + + if button != tcell.ButtonNone && ox < 0 { + ox, oy = x, y + } + switch ev.Buttons() { + case tcell.ButtonNone: + if ox >= 0 { + label := fmt.Sprintf("%d,%d to %d,%d", ox, oy, x, y) + drawBox(s, ox, oy, x, y, boxStyle, label) + ox, oy = -1, -1 + } + } + } + } +} +``` diff --git a/vendor/github.com/gdamore/tcell/v2/console_win.go b/vendor/github.com