mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Vendor dependencies using golang/dep
Output from 'dep status': PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED cloud.google.com/go v0.23.0 v0.23.0 0fd7230 v0.23.0 1 github.com/briandowns/openweathermap ^0.11.0 0.11 1b87579 0.11 1 github.com/gdamore/encoding branch master branch master b23993c b23993c 1 github.com/gdamore/tcell ^1.0.0 v1.0.0 061d51a v1.0.0 2 github.com/go-test/deep ^1.0.1 v1.0.1 6592d9c v1.0.1 1 github.com/golang/protobuf v1.1.0 v1.1.0 b4deda0 v1.1.0 1 github.com/google/go-github branch master branch master 2ae5df7 2ae5df7 1 github.com/google/go-querystring branch master branch master 53e6ce1 53e6ce1 1 github.com/jessevdk/go-flags ^1.4.0 v1.4.0 c6ca198 v1.4.0 1 github.com/lucasb-eyer/go-colorful v1.0 v1.0 345fbb3 v1.0 1 github.com/mattn/go-runewidth v0.0.2 v0.0.2 9e777a8 v0.0.2 1 github.com/olebedev/config branch master branch master 9a10d05 9a10d05 1 github.com/radovskyb/watcher ^1.0.2 v1.0.2 6145e14 v1.0.2 1 github.com/rivo/tview branch master branch master 71ecf1f 71ecf1f 1 github.com/yfronto/newrelic branch master branch master f7fa0c6 f7fa0c6 1 golang.org/x/net branch master branch master 1e49130 1e49130 2 golang.org/x/oauth2 branch master branch master 1e0a3fa 1e0a3fa 5 golang.org/x/text v0.3.0 v0.3.0 f21a4df v0.3.0 5 google.golang.org/api branch master branch master 00e3bb8 00e3bb8 4 google.golang.org/appengine v1.0.0 v1.0.0 150dc57 v1.0.0 10 gopkg.in/yaml.v2 ^2.2.1 v2.2.1 5420a8b v2.2.1 1 See https://golang.github.io/dep/docs/daily-dep.html
This commit is contained in:
parent
790ac7fb2f
commit
d2a3e504cf
1
.gitignore
vendored
1
.gitignore
vendored
@ -19,3 +19,4 @@ gcal/client_secret.json
|
|||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
dist/*
|
dist/*
|
||||||
|
bin/
|
||||||
|
169
Gopkg.lock
generated
Normal file
169
Gopkg.lock
generated
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||||
|
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "cloud.google.com/go"
|
||||||
|
packages = ["compute/metadata"]
|
||||||
|
revision = "0fd7230b2a7505833d5f69b75cbd6c9582401479"
|
||||||
|
version = "v0.23.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/briandowns/openweathermap"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "1b875797cb8f0a25f7232377c231bf9a294f7c86"
|
||||||
|
version = "0.11"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/gdamore/encoding"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "b23993cbb6353f0e6aa98d0ee318a34728f628b9"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/gdamore/tcell"
|
||||||
|
packages = [
|
||||||
|
".",
|
||||||
|
"terminfo"
|
||||||
|
]
|
||||||
|
revision = "061d51a604c546b48e92253cb65190d76cecf4c6"
|
||||||
|
version = "v1.0.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/go-test/deep"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "6592d9cc0a499ad2d5f574fde80a2b5c5cc3b4f5"
|
||||||
|
version = "v1.0.1"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/golang/protobuf"
|
||||||
|
packages = ["proto"]
|
||||||
|
revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265"
|
||||||
|
version = "v1.1.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/google/go-github"
|
||||||
|
packages = ["github"]
|
||||||
|
revision = "2ae5df7848328c214a48cec94c7d410cf8526527"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/google/go-querystring"
|
||||||
|
packages = ["query"]
|
||||||
|
revision = "53e6ce116135b80d037921a7fdd5138cf32d7a8a"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/jessevdk/go-flags"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "c6ca198ec95c841fdb89fc0de7496fed11ab854e"
|
||||||
|
version = "v1.4.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/lucasb-eyer/go-colorful"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "345fbb3dbcdb252d9985ee899a84963c0fa24c82"
|
||||||
|
version = "v1.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mattn/go-runewidth"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "9e777a8366cce605130a531d2cd6363d07ad7317"
|
||||||
|
version = "v0.0.2"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/olebedev/config"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "9a10d05a33a8b9e828f20491e21e8927dec35f72"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/radovskyb/watcher"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "6145e1439b9de93806925353403f91d2abbad8a5"
|
||||||
|
version = "v1.0.2"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/rivo/tview"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "71ecf1f4299c6d72b16d20da72405b7e85ac8720"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/yfronto/newrelic"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "f7fa0c6f30ac3d86360c73726cfe9dd526a63d21"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/net"
|
||||||
|
packages = [
|
||||||
|
"context",
|
||||||
|
"context/ctxhttp"
|
||||||
|
]
|
||||||
|
revision = "1e491301e022f8f977054da4c2d852decd59571f"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/oauth2"
|
||||||
|
packages = [
|
||||||
|
".",
|
||||||
|
"google",
|
||||||
|
"internal",
|
||||||
|
"jws",
|
||||||
|
"jwt"
|
||||||
|
]
|
||||||
|
revision = "1e0a3fa8ba9a5c9eb35c271780101fdaf1b205d7"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "golang.org/x/text"
|
||||||
|
packages = [
|
||||||
|
"encoding",
|
||||||
|
"encoding/internal/identifier",
|
||||||
|
"internal/gen",
|
||||||
|
"transform",
|
||||||
|
"unicode/cldr"
|
||||||
|
]
|
||||||
|
revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
|
||||||
|
version = "v0.3.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "google.golang.org/api"
|
||||||
|
packages = [
|
||||||
|
"calendar/v3",
|
||||||
|
"gensupport",
|
||||||
|
"googleapi",
|
||||||
|
"googleapi/internal/uritemplates"
|
||||||
|
]
|
||||||
|
revision = "00e3bb8d04691e25ee2fccf98c866bcb7925c3ec"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "google.golang.org/appengine"
|
||||||
|
packages = [
|
||||||
|
".",
|
||||||
|
"internal",
|
||||||
|
"internal/app_identity",
|
||||||
|
"internal/base",
|
||||||
|
"internal/datastore",
|
||||||
|
"internal/log",
|
||||||
|
"internal/modules",
|
||||||
|
"internal/remote_api",
|
||||||
|
"internal/urlfetch",
|
||||||
|
"urlfetch"
|
||||||
|
]
|
||||||
|
revision = "150dc57a1b433e64154302bdc40b6bb8aefa313a"
|
||||||
|
version = "v1.0.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "gopkg.in/yaml.v2"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
|
||||||
|
version = "v2.2.1"
|
||||||
|
|
||||||
|
[solve-meta]
|
||||||
|
analyzer-name = "dep"
|
||||||
|
analyzer-version = 1
|
||||||
|
inputs-digest = "96c4d6298328080435e3f1de8240ec9fb04419db37e20ae77d7fa8dc75ca3e5a"
|
||||||
|
solver-name = "gps-cdcl"
|
||||||
|
solver-version = 1
|
78
Gopkg.toml
Normal file
78
Gopkg.toml
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# Gopkg.toml example
|
||||||
|
#
|
||||||
|
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
|
||||||
|
# for detailed Gopkg.toml documentation.
|
||||||
|
#
|
||||||
|
# required = ["github.com/user/thing/cmd/thing"]
|
||||||
|
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
||||||
|
#
|
||||||
|
# [[constraint]]
|
||||||
|
# name = "github.com/user/project"
|
||||||
|
# version = "1.0.0"
|
||||||
|
#
|
||||||
|
# [[constraint]]
|
||||||
|
# name = "github.com/user/project2"
|
||||||
|
# branch = "dev"
|
||||||
|
# source = "github.com/myfork/project2"
|
||||||
|
#
|
||||||
|
# [[override]]
|
||||||
|
# name = "github.com/x/y"
|
||||||
|
# version = "2.4.0"
|
||||||
|
#
|
||||||
|
# [prune]
|
||||||
|
# non-go = false
|
||||||
|
# go-tests = true
|
||||||
|
# unused-packages = true
|
||||||
|
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/briandowns/openweathermap"
|
||||||
|
version = "0.11.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/gdamore/tcell"
|
||||||
|
version = "1.0.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/go-test/deep"
|
||||||
|
version = "1.0.1"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/google/go-github"
|
||||||
|
branch = "master"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/jessevdk/go-flags"
|
||||||
|
version = "1.4.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/olebedev/config"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/radovskyb/watcher"
|
||||||
|
version = "1.0.2"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/rivo/tview"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/yfronto/newrelic"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/oauth2"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "google.golang.org/api"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/yaml.v2"
|
||||||
|
version = "2.2.1"
|
||||||
|
|
||||||
|
[prune]
|
||||||
|
go-tests = true
|
||||||
|
unused-packages = true
|
8
Makefile
8
Makefile
@ -2,13 +2,13 @@ BRANCH := `git rev-parse --abbrev-ref HEAD`
|
|||||||
|
|
||||||
.PHONY: dependencies install run
|
.PHONY: dependencies install run
|
||||||
|
|
||||||
dependencies:
|
build:
|
||||||
go get -v ./...
|
go build -o bin/wtf
|
||||||
|
|
||||||
install:
|
install:
|
||||||
which wtf | xargs rm || true
|
which wtf | xargs rm || true
|
||||||
go install -ldflags="-X main.version=$(shell git describe --always --abbrev=6)_$(BRANCH) -X main.date=$(shell date +%FT%T%z)"
|
go install -ldflags="-X main.version=$(shell git describe --always --abbrev=6)_$(BRANCH) -X main.date=$(shell date +%FT%T%z)"
|
||||||
which wtf
|
which wtf
|
||||||
|
|
||||||
run:
|
run: build
|
||||||
wtf
|
bin/wtf
|
||||||
|
15
vendor/cloud.google.com/go/AUTHORS
generated
vendored
Normal file
15
vendor/cloud.google.com/go/AUTHORS
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# This is the official list of cloud authors for copyright purposes.
|
||||||
|
# This file is distinct from the CONTRIBUTORS files.
|
||||||
|
# See the latter for an explanation.
|
||||||
|
|
||||||
|
# Names should be added to this file as:
|
||||||
|
# Name or Organization <email address>
|
||||||
|
# The email address is not required for organizations.
|
||||||
|
|
||||||
|
Filippo Valsorda <hi@filippo.io>
|
||||||
|
Google Inc.
|
||||||
|
Ingo Oeser <nightlyone@googlemail.com>
|
||||||
|
Palm Stone Games, Inc.
|
||||||
|
Paweł Knap <pawelknap88@gmail.com>
|
||||||
|
Péter Szilágyi <peterke@gmail.com>
|
||||||
|
Tyler Treat <ttreat31@gmail.com>
|
40
vendor/cloud.google.com/go/CONTRIBUTORS
generated
vendored
Normal file
40
vendor/cloud.google.com/go/CONTRIBUTORS
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# People who have agreed to one of the CLAs and can contribute patches.
|
||||||
|
# The AUTHORS file lists the copyright holders; this file
|
||||||
|
# lists people. For example, Google employees are listed here
|
||||||
|
# but not in AUTHORS, because Google holds the copyright.
|
||||||
|
#
|
||||||
|
# https://developers.google.com/open-source/cla/individual
|
||||||
|
# https://developers.google.com/open-source/cla/corporate
|
||||||
|
#
|
||||||
|
# Names should be added to this file as:
|
||||||
|
# Name <email address>
|
||||||
|
|
||||||
|
# Keep the list alphabetically sorted.
|
||||||
|
|
||||||
|
Alexis Hunt <lexer@google.com>
|
||||||
|
Andreas Litt <andreas.litt@gmail.com>
|
||||||
|
Andrew Gerrand <adg@golang.org>
|
||||||
|
Brad Fitzpatrick <bradfitz@golang.org>
|
||||||
|
Burcu Dogan <jbd@google.com>
|
||||||
|
Dave Day <djd@golang.org>
|
||||||
|
David Sansome <me@davidsansome.com>
|
||||||
|
David Symonds <dsymonds@golang.org>
|
||||||
|
Filippo Valsorda <hi@filippo.io>
|
||||||
|
Glenn Lewis <gmlewis@google.com>
|
||||||
|
Ingo Oeser <nightlyone@googlemail.com>
|
||||||
|
James Hall <james.hall@shopify.com>
|
||||||
|
Johan Euphrosine <proppy@google.com>
|
||||||
|
Jonathan Amsterdam <jba@google.com>
|
||||||
|
Kunpei Sakai <namusyaka@gmail.com>
|
||||||
|
Luna Duclos <luna.duclos@palmstonegames.com>
|
||||||
|
Magnus Hiie <magnus.hiie@gmail.com>
|
||||||
|
Mario Castro <mariocaster@gmail.com>
|
||||||
|
Michael McGreevy <mcgreevy@golang.org>
|
||||||
|
Omar Jarjur <ojarjur@google.com>
|
||||||
|
Paweł Knap <pawelknap88@gmail.com>
|
||||||
|
Péter Szilágyi <peterke@gmail.com>
|
||||||
|
Sarah Adams <shadams@google.com>
|
||||||
|
Thanatat Tamtan <acoshift@gmail.com>
|
||||||
|
Toby Burress <kurin@google.com>
|
||||||
|
Tuo Shan <shantuo@google.com>
|
||||||
|
Tyler Treat <ttreat31@gmail.com>
|
202
vendor/cloud.google.com/go/LICENSE
generated
vendored
Normal file
202
vendor/cloud.google.com/go/LICENSE
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
437
vendor/cloud.google.com/go/compute/metadata/metadata.go
generated
vendored
Normal file
437
vendor/cloud.google.com/go/compute/metadata/metadata.go
generated
vendored
Normal file
@ -0,0 +1,437 @@
|
|||||||
|
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package metadata provides access to Google Compute Engine (GCE)
|
||||||
|
// metadata and API service accounts.
|
||||||
|
//
|
||||||
|
// This package is a wrapper around the GCE metadata service,
|
||||||
|
// as documented at https://developers.google.com/compute/docs/metadata.
|
||||||
|
package metadata // import "cloud.google.com/go/compute/metadata"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/net/context"
|
||||||
|
"golang.org/x/net/context/ctxhttp"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// metadataIP is the documented metadata server IP address.
|
||||||
|
metadataIP = "169.254.169.254"
|
||||||
|
|
||||||
|
// metadataHostEnv is the environment variable specifying the
|
||||||
|
// GCE metadata hostname. If empty, the default value of
|
||||||
|
// metadataIP ("169.254.169.254") is used instead.
|
||||||
|
// This is variable name is not defined by any spec, as far as
|
||||||
|
// I know; it was made up for the Go package.
|
||||||
|
metadataHostEnv = "GCE_METADATA_HOST"
|
||||||
|
|
||||||
|
userAgent = "gcloud-golang/0.1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type cachedValue struct {
|
||||||
|
k string
|
||||||
|
trim bool
|
||||||
|
mu sync.Mutex
|
||||||
|
v string
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
projID = &cachedValue{k: "project/project-id", trim: true}
|
||||||
|
projNum = &cachedValue{k: "project/numeric-project-id", trim: true}
|
||||||
|
instID = &cachedValue{k: "instance/id", trim: true}
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
metaClient = &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Dial: (&net.Dialer{
|
||||||
|
Timeout: 2 * time.Second,
|
||||||
|
KeepAlive: 30 * time.Second,
|
||||||
|
}).Dial,
|
||||||
|
ResponseHeaderTimeout: 2 * time.Second,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
subscribeClient = &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Dial: (&net.Dialer{
|
||||||
|
Timeout: 2 * time.Second,
|
||||||
|
KeepAlive: 30 * time.Second,
|
||||||
|
}).Dial,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// NotDefinedError is returned when requested metadata is not defined.
|
||||||
|
//
|
||||||
|
// The underlying string is the suffix after "/computeMetadata/v1/".
|
||||||
|
//
|
||||||
|
// This error is not returned if the value is defined to be the empty
|
||||||
|
// string.
|
||||||
|
type NotDefinedError string
|
||||||
|
|
||||||
|
func (suffix NotDefinedError) Error() string {
|
||||||
|
return fmt.Sprintf("metadata: GCE metadata %q not defined", string(suffix))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns a value from the metadata service.
|
||||||
|
// The suffix is appended to "http://${GCE_METADATA_HOST}/computeMetadata/v1/".
|
||||||
|
//
|
||||||
|
// If the GCE_METADATA_HOST environment variable is not defined, a default of
|
||||||
|
// 169.254.169.254 will be used instead.
|
||||||
|
//
|
||||||
|
// If the requested metadata is not defined, the returned error will
|
||||||
|
// be of type NotDefinedError.
|
||||||
|
func Get(suffix string) (string, error) {
|
||||||
|
val, _, err := getETag(metaClient, suffix)
|
||||||
|
return val, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// getETag returns a value from the metadata service as well as the associated
|
||||||
|
// ETag using the provided client. This func is otherwise equivalent to Get.
|
||||||
|
func getETag(client *http.Client, suffix string) (value, etag string, err error) {
|
||||||
|
// Using a fixed IP makes it very difficult to spoof the metadata service in
|
||||||
|
// a container, which is an important use-case for local testing of cloud
|
||||||
|
// deployments. To enable spoofing of the metadata service, the environment
|
||||||
|
// variable GCE_METADATA_HOST is first inspected to decide where metadata
|
||||||
|
// requests shall go.
|
||||||
|
host := os.Getenv(metadataHostEnv)
|
||||||
|
if host == "" {
|
||||||
|
// Using 169.254.169.254 instead of "metadata" here because Go
|
||||||
|
// binaries built with the "netgo" tag and without cgo won't
|
||||||
|
// know the search suffix for "metadata" is
|
||||||
|
// ".google.internal", and this IP address is documented as
|
||||||
|
// being stable anyway.
|
||||||
|
host = metadataIP
|
||||||
|
}
|
||||||
|
url := "http://" + host + "/computeMetadata/v1/" + suffix
|
||||||
|
req, _ := http.NewRequest("GET", url, nil)
|
||||||
|
req.Header.Set("Metadata-Flavor", "Google")
|
||||||
|
req.Header.Set("User-Agent", userAgent)
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
if res.StatusCode == http.StatusNotFound {
|
||||||
|
return "", "", NotDefinedError(suffix)
|
||||||
|
}
|
||||||
|
if res.StatusCode != 200 {
|
||||||
|
return "", "", fmt.Errorf("status code %d trying to fetch %s", res.StatusCode, url)
|
||||||
|
}
|
||||||
|
all, err := ioutil.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
return string(all), res.Header.Get("Etag"), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTrimmed(suffix string) (s string, err error) {
|
||||||
|
s, err = Get(suffix)
|
||||||
|
s = strings.TrimSpace(s)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cachedValue) get() (v string, err error) {
|
||||||
|
defer c.mu.Unlock()
|
||||||
|
c.mu.Lock()
|
||||||
|
if c.v != "" {
|
||||||
|
return c.v, nil
|
||||||
|
}
|
||||||
|
if c.trim {
|
||||||
|
v, err = getTrimmed(c.k)
|
||||||
|
} else {
|
||||||
|
v, err = Get(c.k)
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
c.v = v
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
onGCEOnce sync.Once
|
||||||
|
onGCE bool
|
||||||
|
)
|
||||||
|
|
||||||
|
// OnGCE reports whether this process is running on Google Compute Engine.
|
||||||
|
func OnGCE() bool {
|
||||||
|
onGCEOnce.Do(initOnGCE)
|
||||||
|
return onGCE
|
||||||
|
}
|
||||||
|
|
||||||
|
func initOnGCE() {
|
||||||
|
onGCE = testOnGCE()
|
||||||
|
}
|
||||||
|
|
||||||
|
func testOnGCE() bool {
|
||||||
|
// The user explicitly said they're on GCE, so trust them.
|
||||||
|
if os.Getenv(metadataHostEnv) != "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
resc := make(chan bool, 2)
|
||||||
|
|
||||||
|
// Try two strategies in parallel.
|
||||||
|
// See https://github.com/GoogleCloudPlatform/google-cloud-go/issues/194
|
||||||
|
go func() {
|
||||||
|
req, _ := http.NewRequest("GET", "http://"+metadataIP, nil)
|
||||||
|
req.Header.Set("User-Agent", userAgent)
|
||||||
|
res, err := ctxhttp.Do(ctx, metaClient, req)
|
||||||
|
if err != nil {
|
||||||
|
resc <- false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
resc <- res.Header.Get("Metadata-Flavor") == "Google"
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
addrs, err := net.LookupHost("metadata.google.internal")
|
||||||
|
if err != nil || len(addrs) == 0 {
|
||||||
|
resc <- false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resc <- strsContains(addrs, metadataIP)
|
||||||
|
}()
|
||||||
|
|
||||||
|
tryHarder := systemInfoSuggestsGCE()
|
||||||
|
if tryHarder {
|
||||||
|
res := <-resc
|
||||||
|
if res {
|
||||||
|
// The first strategy succeeded, so let's use it.
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// Wait for either the DNS or metadata server probe to
|
||||||
|
// contradict the other one and say we are running on
|
||||||
|
// GCE. Give it a lot of time to do so, since the system
|
||||||
|
// info already suggests we're running on a GCE BIOS.
|
||||||
|
timer := time.NewTimer(5 * time.Second)
|
||||||
|
defer timer.Stop()
|
||||||
|
select {
|
||||||
|
case res = <-resc:
|
||||||
|
return res
|
||||||
|
case <-timer.C:
|
||||||
|
// Too slow. Who knows what this system is.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// There's no hint from the system info that we're running on
|
||||||
|
// GCE, so use the first probe's result as truth, whether it's
|
||||||
|
// true or false. The goal here is to optimize for speed for
|
||||||
|
// users who are NOT running on GCE. We can't assume that
|
||||||
|
// either a DNS lookup or an HTTP request to a blackholed IP
|
||||||
|
// address is fast. Worst case this should return when the
|
||||||
|
// metaClient's Transport.ResponseHeaderTimeout or
|
||||||
|
// Transport.Dial.Timeout fires (in two seconds).
|
||||||
|
return <-resc
|
||||||
|
}
|
||||||
|
|
||||||
|
// systemInfoSuggestsGCE reports whether the local system (without
|
||||||
|
// doing network requests) suggests that we're running on GCE. If this
|
||||||
|
// returns true, testOnGCE tries a bit harder to reach its metadata
|
||||||
|
// server.
|
||||||
|
func systemInfoSuggestsGCE() bool {
|
||||||
|
if runtime.GOOS != "linux" {
|
||||||
|
// We don't have any non-Linux clues available, at least yet.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
slurp, _ := ioutil.ReadFile("/sys/class/dmi/id/product_name")
|
||||||
|
name := strings.TrimSpace(string(slurp))
|
||||||
|
return name == "Google" || name == "Google Compute Engine"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Subscribe subscribes to a value from the metadata service.
|
||||||
|
// The suffix is appended to "http://${GCE_METADATA_HOST}/computeMetadata/v1/".
|
||||||
|
// The suffix may contain query parameters.
|
||||||
|
//
|
||||||
|
// Subscribe calls fn with the latest metadata value indicated by the provided
|
||||||
|
// suffix. If the metadata value is deleted, fn is called with the empty string
|
||||||
|
// and ok false. Subscribe blocks until fn returns a non-nil error or the value
|
||||||
|
// is deleted. Subscribe returns the error value returned from the last call to
|
||||||
|
// fn, which may be nil when ok == false.
|
||||||
|
func Subscribe(suffix string, fn func(v string, ok bool) error) error {
|
||||||
|
const failedSubscribeSleep = time.Second * 5
|
||||||
|
|
||||||
|
// First check to see if the metadata value exists at all.
|
||||||
|
val, lastETag, err := getETag(subscribeClient, suffix)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := fn(val, true); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ok := true
|
||||||
|
if strings.ContainsRune(suffix, '?') {
|
||||||
|
suffix += "&wait_for_change=true&last_etag="
|
||||||
|
} else {
|
||||||
|
suffix += "?wait_for_change=true&last_etag="
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
val, etag, err := getETag(subscribeClient, suffix+url.QueryEscape(lastETag))
|
||||||
|
if err != nil {
|
||||||
|
if _, deleted := err.(NotDefinedError); !deleted {
|
||||||
|
time.Sleep(failedSubscribeSleep)
|
||||||
|
continue // Retry on other errors.
|
||||||
|
}
|
||||||
|
ok = false
|
||||||
|
}
|
||||||
|
lastETag = etag
|
||||||
|
|
||||||
|
if err := fn(val, ok); err != nil || !ok {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProjectID returns the current instance's project ID string.
|
||||||
|
func ProjectID() (string, error) { return projID.get() }
|
||||||
|
|
||||||
|
// NumericProjectID returns the current instance's numeric project ID.
|
||||||
|
func NumericProjectID() (string, error) { return projNum.get() }
|
||||||
|
|
||||||
|
// InternalIP returns the instance's primary internal IP address.
|
||||||
|
func InternalIP() (string, error) {
|
||||||
|
return getTrimmed("instance/network-interfaces/0/ip")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExternalIP returns the instance's primary external (public) IP address.
|
||||||
|
func ExternalIP() (string, error) {
|
||||||
|
return getTrimmed("instance/network-interfaces/0/access-configs/0/external-ip")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hostname returns the instance's hostname. This will be of the form
|
||||||
|
// "<instanceID>.c.<projID>.internal".
|
||||||
|
func Hostname() (string, error) {
|
||||||
|
return getTrimmed("instance/hostname")
|
||||||
|
}
|
||||||
|
|
||||||
|
// InstanceTags returns the list of user-defined instance tags,
|
||||||
|
// assigned when initially creating a GCE instance.
|
||||||
|
func InstanceTags() ([]string, error) {
|
||||||
|
var s []string
|
||||||
|
j, err := Get("instance/tags")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := json.NewDecoder(strings.NewReader(j)).Decode(&s); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// InstanceID returns the current VM's numeric instance ID.
|
||||||
|
func InstanceID() (string, error) {
|
||||||
|
return instID.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
// InstanceName returns the current VM's instance ID string.
|
||||||
|
func InstanceName() (string, error) {
|
||||||
|
host, err := Hostname()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return strings.Split(host, ".")[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zone returns the current VM's zone, such as "us-central1-b".
|
||||||
|
func Zone() (string, error) {
|
||||||
|
zone, err := getTrimmed("instance/zone")
|
||||||
|
// zone is of the form "projects/<projNum>/zones/<zoneName>".
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return zone[strings.LastIndex(zone, "/")+1:], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// InstanceAttributes returns the list of user-defined attributes,
|
||||||
|
// assigned when initially creating a GCE VM instance. The value of an
|
||||||
|
// attribute can be obtained with InstanceAttributeValue.
|
||||||
|
func InstanceAttributes() ([]string, error) { return lines("instance/attributes/") }
|
||||||
|
|
||||||
|
// ProjectAttributes returns the list of user-defined attributes
|
||||||
|
// applying to the project as a whole, not just this VM. The value of
|
||||||
|
// an attribute can be obtained with ProjectAttributeValue.
|
||||||
|
func ProjectAttributes() ([]string, error) { return lines("project/attributes/") }
|
||||||
|
|
||||||
|
func lines(suffix string) ([]string, error) {
|
||||||
|
j, err := Get(suffix)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
s := strings.Split(strings.TrimSpace(j), "\n")
|
||||||
|
for i := range s {
|
||||||
|
s[i] = strings.TrimSpace(s[i])
|
||||||
|
}
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// InstanceAttributeValue returns the value of the provided VM
|
||||||
|
// instance attribute.
|
||||||
|
//
|
||||||
|
// If the requested attribute is not defined, the returned error will
|
||||||
|
// be of type NotDefinedError.
|
||||||
|
//
|
||||||
|
// InstanceAttributeValue may return ("", nil) if the attribute was
|
||||||
|
// defined to be the empty string.
|
||||||
|
func InstanceAttributeValue(attr string) (string, error) {
|
||||||
|
return Get("instance/attributes/" + attr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProjectAttributeValue returns the value of the provided
|
||||||
|
// project attribute.
|
||||||
|
//
|
||||||
|
// If the requested attribute is not defined, the returned error will
|
||||||
|
// be of type NotDefinedError.
|
||||||
|
//
|
||||||
|
// ProjectAttributeValue may return ("", nil) if the attribute was
|
||||||
|
// defined to be the empty string.
|
||||||
|
func ProjectAttributeValue(attr string) (string, error) {
|
||||||
|
return Get("project/attributes/" + attr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scopes returns the service account scopes for the given account.
|
||||||
|
// The account may be empty or the string "default" to use the instance's
|
||||||
|
// main account.
|
||||||
|
func Scopes(serviceAccount string) ([]string, error) {
|
||||||
|
if serviceAccount == "" {
|
||||||
|
serviceAccount = "default"
|
||||||
|
}
|
||||||
|
return lines("instance/service-accounts/" + serviceAccount + "/scopes")
|
||||||
|
}
|
||||||
|
|
||||||
|
func strsContains(ss []string, s string) bool {
|
||||||
|
for _, v := range ss {
|
||||||
|
if v == s {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
31
vendor/github.com/briandowns/openweathermap/.gitignore
generated
vendored
Normal file
31
vendor/github.com/briandowns/openweathermap/.gitignore
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Created by .gitignore support plugin (hsz.mobi)
|
||||||
|
### Go template
|
||||||
|
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Folders
|
||||||
|
_obj
|
||||||
|
_test
|
||||||
|
|
||||||
|
# Architecture specific extensions/prefixes
|
||||||
|
*.[568vq]
|
||||||
|
[568vq].out
|
||||||
|
|
||||||
|
*.cgo1.go
|
||||||
|
*.cgo2.c
|
||||||
|
_cgo_defun.c
|
||||||
|
_cgo_gotypes.go
|
||||||
|
_cgo_export.*
|
||||||
|
|
||||||
|
_testmain.go
|
||||||
|
|
||||||
|
*.exe
|
||||||
|
*.test
|
||||||
|
*.prof
|
||||||
|
|
||||||
|
.idea
|
||||||
|
*.iml
|
||||||
|
|
||||||
|
coverage.*
|
29
vendor/github.com/briandowns/openweathermap/.travis.yml
generated
vendored
Normal file
29
vendor/github.com/briandowns/openweathermap/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
language: go
|
||||||
|
go:
|
||||||
|
- 1.5.4
|
||||||
|
- 1.6.2
|
||||||
|
env:
|
||||||
|
- GOARCH: amd64
|
||||||
|
- GOARCH: 386
|
||||||
|
addons:
|
||||||
|
hosts:
|
||||||
|
- api.openweathermap.org
|
||||||
|
before_install:
|
||||||
|
- sudo apt-get -qq update
|
||||||
|
- sudo apt-get install -y socat
|
||||||
|
- cat /etc/hosts
|
||||||
|
- wget http://ipinfo.io/ip -qO -
|
||||||
|
- sudo socat TCP-LISTEN:80,fork TCP:${RTCP_HOST}:${RTCP_PORT} > /tmp/socat.log 2>&1 &
|
||||||
|
- go get github.com/mattn/goveralls
|
||||||
|
- go get golang.org/x/tools/cmd/cover
|
||||||
|
script:
|
||||||
|
- make test
|
||||||
|
- $HOME/gopath/bin/goveralls -service=travis-ci -repotoken $COVERALLS_TOKEN
|
||||||
|
notifications:
|
||||||
|
email:
|
||||||
|
recipients:
|
||||||
|
- brian.downs@gmail.com
|
||||||
|
on_success: change
|
||||||
|
on_failure: always
|
||||||
|
after_success:
|
||||||
|
- coveralls
|
14
vendor/github.com/briandowns/openweathermap/CONTRIBUTING.md
generated
vendored
Normal file
14
vendor/github.com/briandowns/openweathermap/CONTRIBUTING.md
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Contributing to openweathermap
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
|
||||||
|
### Reporting an Issue
|
||||||
|
|
||||||
|
* Please add an issue [here](https://github.com/briandowns/openweathermap/issues) and utilize the appropriate label.
|
||||||
|
|
||||||
|
## Fixing Problems and/or Adding Features
|
||||||
|
|
||||||
|
* Feel free to fork and fix an issue(s) or add a feature.
|
||||||
|
* Please provide tests for the submitted code.
|
||||||
|
* Run `go fmt` and `go vet`
|
||||||
|
* Once the pull request is submitted, it'll be tested and merged.
|
174
vendor/github.com/briandowns/openweathermap/LICENSE
generated
vendored
Normal file
174
vendor/github.com/briandowns/openweathermap/LICENSE
generated
vendored
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
19
vendor/github.com/briandowns/openweathermap/Makefile
generated
vendored
Normal file
19
vendor/github.com/briandowns/openweathermap/Makefile
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
GOCMD = go
|
||||||
|
GOBUILD = $(GOCMD) build
|
||||||
|
GOGET = $(GOCMD) get -v
|
||||||
|
GOCLEAN = $(GOCMD) clean
|
||||||
|
GOINSTALL = $(GOCMD) install
|
||||||
|
GOTEST = $(GOCMD) test
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
all: test
|
||||||
|
|
||||||
|
test:
|
||||||
|
$(GOTEST) -v -covermode=count -coverprofile=coverage.out ./...
|
||||||
|
|
||||||
|
build: test
|
||||||
|
$(GOBUILD)
|
||||||
|
|
||||||
|
install: test
|
||||||
|
$(GOINSTALL)
|
265
vendor/github.com/briandowns/openweathermap/README.md
generated
vendored
Normal file
265
vendor/github.com/briandowns/openweathermap/README.md
generated
vendored
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
# OpenWeatherMap Go API
|
||||||
|
|
||||||
|
[](https://godoc.org/github.com/briandowns/openweathermap) [](https://travis-ci.org/briandowns/openweathermap) [](https://coveralls.io/github/briandowns/openweathermap?branch=master)
|
||||||
|
|
||||||
|
Go (golang) package for use with openweathermap.org's API.
|
||||||
|
|
||||||
|
For more detail about the library and its features, reference your local godoc once installed.
|
||||||
|
|
||||||
|
[Website](https://briandowns.github.io/openweathermap)!
|
||||||
|
|
||||||
|
To use the OpenweatherMap API, you need to obtain an API key. Sign up [here](http://home.openweathermap.org/users/sign_up). Once you have your key, create an environment variable called `OWM_API_KEY`. Start coding!
|
||||||
|
|
||||||
|
[Slack Channel](https://openweathermapgolang.slack.com/messages/general)
|
||||||
|
|
||||||
|
Contributions welcome!
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Current Weather Conditions
|
||||||
|
|
||||||
|
- By City
|
||||||
|
- By City,St (State)
|
||||||
|
- By City,Co (Country)
|
||||||
|
- By City ID
|
||||||
|
- By Zip,Co (Country)
|
||||||
|
- By Longitude and Latitude
|
||||||
|
|
||||||
|
## Forecast
|
||||||
|
|
||||||
|
Get the weather conditions for a given number of days.
|
||||||
|
|
||||||
|
- By City
|
||||||
|
- By City,St (State)
|
||||||
|
- By City,Co (Country)
|
||||||
|
- By City ID
|
||||||
|
- By Longitude and Latitude
|
||||||
|
|
||||||
|
### Access to Condition Codes and Icons
|
||||||
|
|
||||||
|
Gain access to OpenWeatherMap icons and condition codes.
|
||||||
|
|
||||||
|
- Thunderstorms
|
||||||
|
- Drizzle
|
||||||
|
- Rain
|
||||||
|
- Snow
|
||||||
|
- Atmosphere
|
||||||
|
- Clouds
|
||||||
|
- Extreme
|
||||||
|
- Additional
|
||||||
|
|
||||||
|
### Data Available in Multiple Measurement Systems
|
||||||
|
|
||||||
|
- Fahrenheit (OpenWeatherMap API - imperial)
|
||||||
|
- Celsius (OpenWeatherMap API - metric)
|
||||||
|
- Kelvin (OpenWeatherMap API - internal)
|
||||||
|
|
||||||
|
### UV Index Data
|
||||||
|
|
||||||
|
- Current
|
||||||
|
- Historical
|
||||||
|
|
||||||
|
### Pollution Data
|
||||||
|
|
||||||
|
- Current
|
||||||
|
|
||||||
|
## Historical Conditions
|
||||||
|
|
||||||
|
- By Name
|
||||||
|
- By ID
|
||||||
|
- By Coordinates
|
||||||
|
|
||||||
|
## Supported Languages
|
||||||
|
|
||||||
|
English - en, Russian - ru, Italian - it, Spanish - es (or sp), Ukrainian - uk (or ua), German - de, Portuguese - pt, Romanian - ro, Polish - pl, Finnish - fi, Dutch - nl, French - fr, Bulgarian - bg, Swedish - sv (or se), Chinese Traditional - zh_tw, Chinese Simplified - zh (or zh_cn), Turkish - tr, Croatian - hr, Catalan - ca
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go get github.com/briandowns/openweathermap
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
There are a few full examples in the examples directory that can be referenced. 1 is a command line application and 1 is a simple web application.
|
||||||
|
|
||||||
|
```Go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
// Shortening the import reference name seems to make it a bit easier
|
||||||
|
owm "github.com/briandowns/openweathermap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
w, err := owm.NewCurrent("F", "ru") // fahrenheit (imperial) with Russian output
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.CurrentByName("Phoenix")
|
||||||
|
fmt.Println(w)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Current Conditions by location name
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
w, err := owm.NewCurrent("K", "EN") // (internal - OpenWeatherMap reference for kelvin) with English output
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.CurrentByName("Phoenix,AZ")
|
||||||
|
fmt.Println(w)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Forecast Conditions in imperial (fahrenheit) by coordinates
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
w, err := owm.NewForecast("F", "FI")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.DailyByCoordinates(
|
||||||
|
&Coordinates{
|
||||||
|
Longitude: -112.07,
|
||||||
|
Latitude: 33.45,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
fmt.Println(w)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Current conditions in metric (celsius) by location ID
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
w, err := owm.NewCurrent("C", "PL")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.CurrentByID(2172797)
|
||||||
|
fmt.Println(w)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Current conditions by zip code. 2 character country code required
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
w, err := owm.NewCurrent("F", "EN")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.CurrentByZip(19125, "US")
|
||||||
|
fmt.Println(w)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configure http client
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
client := &http.Client{}
|
||||||
|
w, err := owm.NewCurrent("F", "EN", owm.WithHttpClient(client))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Current UV conditions
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
uv, err := NewUV()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
coord := &Coordinates{
|
||||||
|
Longitude: 53.343497,
|
||||||
|
Latitude: -6.288379,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := uv.Current(coord); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Historical UV conditions
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
uv, err := NewUV()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
coord := &Coordinates{
|
||||||
|
Longitude: 54.995656,
|
||||||
|
Latitude: -7.326834,
|
||||||
|
}
|
||||||
|
|
||||||
|
end := time.Now().UTC()
|
||||||
|
start := time.Now().UTC().Add(-time.Hour * time.Duration(24))
|
||||||
|
|
||||||
|
if err := uv.Historical(coord, start, end); err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### UV Information
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
uv, err := NewUV()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := uv.Current(coords); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
info, err := uv.UVInformation()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pollution Information
|
||||||
|
|
||||||
|
```Go
|
||||||
|
func main() {
|
||||||
|
pollution, err := NewPollution()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
params := &PollutionParameters{
|
||||||
|
Location: Coordinates{
|
||||||
|
Latitude: 0.0,
|
||||||
|
Longitude: 10.0,
|
||||||
|
},
|
||||||
|
Datetime: "current",
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := pollution.PollutionByParams(params); err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
185
vendor/github.com/briandowns/openweathermap/conditions.go
generated
vendored
Normal file
185
vendor/github.com/briandowns/openweathermap/conditions.go
generated
vendored
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IconData holds the relevant info for linking icons to conditions.
|
||||||
|
type IconData struct {
|
||||||
|
Condition string
|
||||||
|
Day string
|
||||||
|
Night string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConditionData holds data structure for weather conditions information.
|
||||||
|
type ConditionData struct {
|
||||||
|
ID int
|
||||||
|
Meaning string
|
||||||
|
Icon1 string
|
||||||
|
Icon2 string
|
||||||
|
}
|
||||||
|
|
||||||
|
// RetrieveIcon will get the specified icon from the API.
|
||||||
|
func RetrieveIcon(destination, iconFile string) (int64, error) {
|
||||||
|
fullFilePath := fmt.Sprintf("%s/%s", destination, iconFile)
|
||||||
|
|
||||||
|
// Check to see if we've already gotten that icon file. If so, use it
|
||||||
|
// rather than getting it again.
|
||||||
|
if _, err := os.Stat(fullFilePath); err != nil {
|
||||||
|
response, err := http.Get(fmt.Sprintf(iconURL, iconFile))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
// Create the icon file
|
||||||
|
out, err := os.Create(fullFilePath)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer out.Close()
|
||||||
|
|
||||||
|
// Fill the empty file with the actual content
|
||||||
|
n, err := io.Copy(out, response.Body)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IconList is a slice of IconData pointers
|
||||||
|
var IconList = []*IconData{
|
||||||
|
{Condition: "clear sky", Day: "01d.png", Night: "01n.png"},
|
||||||
|
{Condition: "few clouds", Day: "02d.png", Night: "02n.png"},
|
||||||
|
{Condition: "scattered clouds", Day: "03d.png", Night: "03n.png"},
|
||||||
|
{Condition: "broken clouds", Day: "04d.png", Night: "04n.png"},
|
||||||
|
{Condition: "shower rain", Day: "09d.png", Night: "09n.png"},
|
||||||
|
{Condition: "rain", Day: "10d.png", Night: "10n.png"},
|
||||||
|
{Condition: "thunderstorm", Day: "11d.png", Night: "11n.png"},
|
||||||
|
{Condition: "snow", Day: "13d.png", Night: "13n.png"},
|
||||||
|
{Condition: "mist", Day: "50d.png", Night: "50n.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// ThunderstormConditions is a slice of ConditionData pointers
|
||||||
|
var ThunderstormConditions = []*ConditionData{
|
||||||
|
{ID: 200, Meaning: "thunderstorm with light rain", Icon1: "11d.png"},
|
||||||
|
{ID: 201, Meaning: "thunderstorm with rain", Icon1: "11d.png"},
|
||||||
|
{ID: 202, Meaning: "thunderstorm with heavy rain", Icon1: "11d.png"},
|
||||||
|
{ID: 210, Meaning: "light thunderstorm", Icon1: "11d.png"},
|
||||||
|
{ID: 211, Meaning: "thunderstorm", Icon1: "11d.png"},
|
||||||
|
{ID: 212, Meaning: "heavy thunderstorm", Icon1: "11d.png"},
|
||||||
|
{ID: 221, Meaning: "ragged thunderstorm", Icon1: "11d.png"},
|
||||||
|
{ID: 230, Meaning: "thunderstorm with light drizzle", Icon1: "11d.png"},
|
||||||
|
{ID: 231, Meaning: "thunderstorm with drizzle", Icon1: "11d.png"},
|
||||||
|
{ID: 232, Meaning: "thunderstorm with heavy drizzle", Icon1: "11d.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// DrizzleConditions is a slice of ConditionData pointers
|
||||||
|
var DrizzleConditions = []*ConditionData{
|
||||||
|
{ID: 300, Meaning: "light intensity drizzle", Icon1: "09d.png"},
|
||||||
|
{ID: 301, Meaning: "drizzle", Icon1: "09d.png"},
|
||||||
|
{ID: 302, Meaning: "heavy intensity drizzle", Icon1: "09d.png"},
|
||||||
|
{ID: 310, Meaning: "light intensity drizzle rain", Icon1: "09d.png"},
|
||||||
|
{ID: 311, Meaning: "drizzle rain", Icon1: "09d.png"},
|
||||||
|
{ID: 312, Meaning: "heavy intensity drizzle rain", Icon1: "09d.png"},
|
||||||
|
{ID: 313, Meaning: "shower rain and drizzle", Icon1: "09d.png"},
|
||||||
|
{ID: 314, Meaning: "heavy shower rain and drizzle", Icon1: "09d.png"},
|
||||||
|
{ID: 321, Meaning: "shower drizzle", Icon1: "09d.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// RainConditions is a slice of ConditionData pointers
|
||||||
|
var RainConditions = []*ConditionData{
|
||||||
|
{ID: 500, Meaning: "light rain", Icon1: "09d.png"},
|
||||||
|
{ID: 501, Meaning: "moderate rain", Icon1: "09d.png"},
|
||||||
|
{ID: 502, Meaning: "heavy intensity rain", Icon1: "09d.png"},
|
||||||
|
{ID: 503, Meaning: "very heavy rain", Icon1: "09d.png"},
|
||||||
|
{ID: 504, Meaning: "extreme rain", Icon1: "09d.png"},
|
||||||
|
{ID: 511, Meaning: "freezing rain", Icon1: "13d.png"},
|
||||||
|
{ID: 520, Meaning: "light intensity shower rain", Icon1: "09d.png"},
|
||||||
|
{ID: 521, Meaning: "shower rain", Icon1: "09d.png"},
|
||||||
|
{ID: 522, Meaning: "heavy intensity shower rain", Icon1: "09d.png"},
|
||||||
|
{ID: 531, Meaning: "ragged shower rain", Icon1: "09d.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// SnowConditions is a slice of ConditionData pointers
|
||||||
|
var SnowConditions = []*ConditionData{
|
||||||
|
{ID: 600, Meaning: "light snow", Icon1: "13d.png"},
|
||||||
|
{ID: 601, Meaning: "snow", Icon1: "13d.png"},
|
||||||
|
{ID: 602, Meaning: "heavy snow", Icon1: "13d.png"},
|
||||||
|
{ID: 611, Meaning: "sleet", Icon1: "13d.png"},
|
||||||
|
{ID: 612, Meaning: "shower sleet", Icon1: "13d.png"},
|
||||||
|
{ID: 615, Meaning: "light rain and snow", Icon1: "13d.png"},
|
||||||
|
{ID: 616, Meaning: "rain and snow", Icon1: "13d.png"},
|
||||||
|
{ID: 620, Meaning: "light shower snow", Icon1: "13d.png"},
|
||||||
|
{ID: 621, Meaning: "shower snow", Icon1: "13d.png"},
|
||||||
|
{ID: 622, Meaning: "heavy shower snow", Icon1: "13d.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// AtmosphereConditions is a slice of ConditionData pointers
|
||||||
|
var AtmosphereConditions = []*ConditionData{
|
||||||
|
{ID: 701, Meaning: "mist", Icon1: "50d.png"},
|
||||||
|
{ID: 711, Meaning: "smoke", Icon1: "50d.png"},
|
||||||
|
{ID: 721, Meaning: "haze", Icon1: "50d.png"},
|
||||||
|
{ID: 731, Meaning: "sand, dust whirls", Icon1: "50d.png"},
|
||||||
|
{ID: 741, Meaning: "fog", Icon1: "50d.png"},
|
||||||
|
{ID: 751, Meaning: "sand", Icon1: "50d.png"},
|
||||||
|
{ID: 761, Meaning: "dust", Icon1: "50d.png"},
|
||||||
|
{ID: 762, Meaning: "volcanic ash", Icon1: "50d.png"},
|
||||||
|
{ID: 771, Meaning: "squalls", Icon1: "50d.png"},
|
||||||
|
{ID: 781, Meaning: "tornado", Icon1: "50d.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// CloudConditions is a slice of ConditionData pointers
|
||||||
|
var CloudConditions = []*ConditionData{
|
||||||
|
{ID: 800, Meaning: "clear sky", Icon1: "01d.png", Icon2: "01n.png"},
|
||||||
|
{ID: 801, Meaning: "few clouds", Icon1: "02d.png", Icon2: " 02n.png"},
|
||||||
|
{ID: 802, Meaning: "scattered clouds", Icon1: "03d.png", Icon2: "03d.png"},
|
||||||
|
{ID: 803, Meaning: "broken clouds", Icon1: "04d.png", Icon2: "03d.png"},
|
||||||
|
{ID: 804, Meaning: "overcast clouds", Icon1: "04d.png", Icon2: "04d.png"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExtremeConditions is a slice of ConditionData pointers
|
||||||
|
var ExtremeConditions = []*ConditionData{
|
||||||
|
{ID: 900, Meaning: "tornado", Icon1: ""},
|
||||||
|
{ID: 901, Meaning: "tropical storm", Icon1: ""},
|
||||||
|
{ID: 902, Meaning: "hurricane", Icon1: ""},
|
||||||
|
{ID: 903, Meaning: "cold", Icon1: ""},
|
||||||
|
{ID: 904, Meaning: "hot", Icon1: ""},
|
||||||
|
{ID: 905, Meaning: "windy", Icon1: ""},
|
||||||
|
{ID: 906, Meaning: "hail", Icon1: ""},
|
||||||
|
}
|
||||||
|
|
||||||
|
// AdditionalConditions is a slive of ConditionData pointers
|
||||||
|
var AdditionalConditions = []*ConditionData{
|
||||||
|
{ID: 951, Meaning: "calm", Icon1: ""},
|
||||||
|
{ID: 952, Meaning: "light breeze", Icon1: ""},
|
||||||
|
{ID: 953, Meaning: "gentle breeze", Icon1: ""},
|
||||||
|
{ID: 954, Meaning: "moderate breeze", Icon1: ""},
|
||||||
|
{ID: 955, Meaning: "fresh breeze", Icon1: ""},
|
||||||
|
{ID: 956, Meaning: "strong breeze", Icon1: ""},
|
||||||
|
{ID: 957, Meaning: "high wind, near gale", Icon1: ""},
|
||||||
|
{ID: 958, Meaning: "gale", Icon1: ""},
|
||||||
|
{ID: 959, Meaning: "severe gale", Icon1: ""},
|
||||||
|
{ID: 960, Meaning: "storm", Icon1: ""},
|
||||||
|
{ID: 961, Meaning: "violent storm", Icon1: ""},
|
||||||
|
{ID: 962, Meaning: "hurricane", Icon1: ""},
|
||||||
|
}
|
143
vendor/github.com/briandowns/openweathermap/current.go
generated
vendored
Normal file
143
vendor/github.com/briandowns/openweathermap/current.go
generated
vendored
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CurrentWeatherData struct contains an aggregate view of the structs
|
||||||
|
// defined above for JSON to be unmarshaled into.
|
||||||
|
type CurrentWeatherData struct {
|
||||||
|
GeoPos Coordinates `json:"coord"`
|
||||||
|
Sys Sys `json:"sys"`
|
||||||
|
Base string `json:"base"`
|
||||||
|
Weather []Weather `json:"weather"`
|
||||||
|
Main Main `json:"main"`
|
||||||
|
Wind Wind `json:"wind"`
|
||||||
|
Clouds Clouds `json:"clouds"`
|
||||||
|
Rain Rain `json:"rain"`
|
||||||
|
Snow Snow `json:"snow"`
|
||||||
|
Dt int `json:"dt"`
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Cod int `json:"cod"`
|
||||||
|
Unit string
|
||||||
|
Lang string
|
||||||
|
Key string
|
||||||
|
*Settings
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCurrent returns a new CurrentWeatherData pointer with the supplied parameters
|
||||||
|
func NewCurrent(unit, lang, key string, options ...Option) (*CurrentWeatherData, error) {
|
||||||
|
unitChoice := strings.ToUpper(unit)
|
||||||
|
langChoice := strings.ToUpper(lang)
|
||||||
|
|
||||||
|
c := &CurrentWeatherData{
|
||||||
|
Settings: NewSettings(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if ValidDataUnit(unitChoice) {
|
||||||
|
c.Unit = DataUnits[unitChoice]
|
||||||
|
} else {
|
||||||
|
return nil, errUnitUnavailable
|
||||||
|
}
|
||||||
|
|
||||||
|
if ValidLangCode(langChoice) {
|
||||||
|
c.Lang = langChoice
|
||||||
|
} else {
|
||||||
|
return nil, errLangUnavailable
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
c.Key, err = setKey(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setOptions(c.Settings, options); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CurrentByName will provide the current weather with the provided
|
||||||
|
// location name.
|
||||||
|
func (w *CurrentWeatherData) CurrentByName(location string) error {
|
||||||
|
response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&q=%s&units=%s&lang=%s"), w.Key, url.QueryEscape(location), w.Unit, w.Lang))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err := json.NewDecoder(response.Body).Decode(&w); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CurrentByCoordinates will provide the current weather with the
|
||||||
|
// provided location coordinates.
|
||||||
|
func (w *CurrentWeatherData) CurrentByCoordinates(location *Coordinates) error {
|
||||||
|
response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&lat=%f&lon=%f&units=%s&lang=%s"), w.Key, location.Latitude, location.Longitude, w.Unit, w.Lang))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&w); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CurrentByID will provide the current weather with the
|
||||||
|
// provided location ID.
|
||||||
|
func (w *CurrentWeatherData) CurrentByID(id int) error {
|
||||||
|
response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&id=%d&units=%s&lang=%s"), w.Key, id, w.Unit, w.Lang))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&w); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CurrentByZip will provide the current weather for the
|
||||||
|
// provided zip code.
|
||||||
|
func (w *CurrentWeatherData) CurrentByZip(zip int, countryCode string) error {
|
||||||
|
response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&zip=%d,%s&units=%s&lang=%s"), w.Key, zip, countryCode, w.Unit, w.Lang))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&w); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CurrentByArea will provide the current weather for the
|
||||||
|
// provided area.
|
||||||
|
func (w *CurrentWeatherData) CurrentByArea() {}
|
18
vendor/github.com/briandowns/openweathermap/doc.go
generated
vendored
Normal file
18
vendor/github.com/briandowns/openweathermap/doc.go
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package openweathermap is a library for use to access the
|
||||||
|
// http://openweathermap.org API. JSON is the only return format supported
|
||||||
|
// at this time.
|
||||||
|
package openweathermap
|
151
vendor/github.com/briandowns/openweathermap/forecast.go
generated
vendored
Normal file
151
vendor/github.com/briandowns/openweathermap/forecast.go
generated
vendored
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ForecastSys area population
|
||||||
|
type ForecastSys struct {
|
||||||
|
Population int `json:"population"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Temperature holds returned termperate sure stats
|
||||||
|
type Temperature struct {
|
||||||
|
Day float64 `json:"day"`
|
||||||
|
Min float64 `json:"min"`
|
||||||
|
Max float64 `json:"max"`
|
||||||
|
Night float64 `json:"night"`
|
||||||
|
Eve float64 `json:"eve"`
|
||||||
|
Morn float64 `json:"morn"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// City data for given location
|
||||||
|
type City struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Coord Coordinates `json:"coord"`
|
||||||
|
Country string `json:"country"`
|
||||||
|
Population int `json:"population"`
|
||||||
|
Sys ForecastSys `json:"sys"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ForecastWeather interface {
|
||||||
|
DailyByName(location string, days int) error
|
||||||
|
DailyByCoordinates(location *Coordinates, days int) error
|
||||||
|
DailyByID(id, days int) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// json served by OWM API can take different forms, so all of them must be matched
|
||||||
|
// by corresponding data type and unmarshall method
|
||||||
|
type ForecastWeatherJson interface {
|
||||||
|
Decode(r io.Reader) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type ForecastWeatherData struct {
|
||||||
|
Unit string
|
||||||
|
Lang string
|
||||||
|
Key string
|
||||||
|
baseURL string
|
||||||
|
*Settings
|
||||||
|
ForecastWeatherJson
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewForecast returns a new HistoricalWeatherData pointer with
|
||||||
|
// the supplied arguments.
|
||||||
|
func NewForecast(forecastType, unit, lang, key string, options ...Option) (*ForecastWeatherData, error) {
|
||||||
|
unitChoice := strings.ToUpper(unit)
|
||||||
|
langChoice := strings.ToUpper(lang)
|
||||||
|
|
||||||
|
if forecastType != "16" && forecastType != "5" {
|
||||||
|
return nil, errForecastUnavailable
|
||||||
|
}
|
||||||
|
|
||||||
|
if !ValidDataUnit(unitChoice) {
|
||||||
|
return nil, errUnitUnavailable
|
||||||
|
}
|
||||||
|
|
||||||
|
if !ValidLangCode(langChoice) {
|
||||||
|
return nil, errLangUnavailable
|
||||||
|
}
|
||||||
|
|
||||||
|
settings := NewSettings()
|
||||||
|
if err := setOptions(settings, options); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
k, err := setKey(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
forecastData := ForecastWeatherData{
|
||||||
|
Unit: DataUnits[unitChoice],
|
||||||
|
Lang: langChoice,
|
||||||
|
Key: k,
|
||||||
|
Settings: settings,
|
||||||
|
}
|
||||||
|
|
||||||
|
if forecastType == "16" {
|
||||||
|
forecastData.baseURL = forecast16Base
|
||||||
|
forecastData.ForecastWeatherJson = &Forecast16WeatherData{}
|
||||||
|
} else {
|
||||||
|
forecastData.baseURL = forecast5Base
|
||||||
|
forecastData.ForecastWeatherJson = &Forecast5WeatherData{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return &forecastData, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DailyByName will provide a forecast for the location given for the
|
||||||
|
// number of days given.
|
||||||
|
func (f *ForecastWeatherData) DailyByName(location string, days int) error {
|
||||||
|
response, err := f.client.Get(fmt.Sprintf(f.baseURL, f.Key, fmt.Sprintf("%s=%s", "q", url.QueryEscape(location)), f.Unit, f.Lang, days))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
return f.ForecastWeatherJson.Decode(response.Body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DailyByCoordinates will provide a forecast for the coordinates ID give
|
||||||
|
// for the number of days given.
|
||||||
|
func (f *ForecastWeatherData) DailyByCoordinates(location *Coordinates, days int) error {
|
||||||
|
response, err := f.client.Get(fmt.Sprintf(f.baseURL, f.Key, fmt.Sprintf("lat=%f&lon=%f", location.Latitude, location.Longitude), f.Unit, f.Lang, days))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
return f.ForecastWeatherJson.Decode(response.Body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DailyByID will provide a forecast for the location ID give for the
|
||||||
|
// number of days given.
|
||||||
|
func (f *ForecastWeatherData) DailyByID(id, days int) error {
|
||||||
|
response, err := f.client.Get(fmt.Sprintf(f.baseURL, f.Key, fmt.Sprintf("%s=%s", "id", strconv.Itoa(id)), f.Unit, f.Lang, days))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
return f.ForecastWeatherJson.Decode(response.Body)
|
||||||
|
}
|
36
vendor/github.com/briandowns/openweathermap/forecast16.go
generated
vendored
Normal file
36
vendor/github.com/briandowns/openweathermap/forecast16.go
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Forecast16WeatherList holds specific query data
|
||||||
|
type Forecast16WeatherList struct {
|
||||||
|
Dt int `json:"dt"`
|
||||||
|
Temp Temperature `json:"temp"`
|
||||||
|
Pressure float64 `json:"pressure"`
|
||||||
|
Humidity int `json:"humidity"`
|
||||||
|
Weather []Weather `json:"weather"`
|
||||||
|
Speed float64 `json:"speed"`
|
||||||
|
Deg int `json:"deg"`
|
||||||
|
Clouds int `json:"clouds"`
|
||||||
|
Snow float64 `json:"snow"`
|
||||||
|
Rain float64 `json:"rain"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forecast16WeatherData will hold returned data from queries
|
||||||
|
type Forecast16WeatherData struct {
|
||||||
|
COD int `json:"cod"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
City City `json:"city"`
|
||||||
|
Cnt int `json:"cnt"`
|
||||||
|
List []Forecast16WeatherList `json:"list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *Forecast16WeatherData) Decode(r io.Reader) error {
|
||||||
|
if err := json.NewDecoder(r).Decode(&f); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
50
vendor/github.com/briandowns/openweathermap/forecast5.go
generated
vendored
Normal file
50
vendor/github.com/briandowns/openweathermap/forecast5.go
generated
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DtTxt struct {
|
||||||
|
time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dt *DtTxt) UnmarshalJSON(b []byte) error {
|
||||||
|
t, err := time.Parse("2006-01-02 15:04:05", strings.Trim(string(b), "\""))
|
||||||
|
dt.Time = t
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *DtTxt) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forecast5WeatherList holds specific query data
|
||||||
|
type Forecast5WeatherList struct {
|
||||||
|
Dt int `json:"dt"`
|
||||||
|
Main Main `json:"main"`
|
||||||
|
Weather []Weather `json:"weather"`
|
||||||
|
Clouds Clouds `json:"clouds"`
|
||||||
|
Wind Wind `json:"wind"`
|
||||||
|
Rain Rain `json:"rain"`
|
||||||
|
Snow Snow `json:"snow"`
|
||||||
|
DtTxt DtTxt `json:"dt_txt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forecast5WeatherData will hold returned data from queries
|
||||||
|
type Forecast5WeatherData struct {
|
||||||
|
// COD string `json:"cod"`
|
||||||
|
// Message float64 `json:"message"`
|
||||||
|
City City `json:"city"`
|
||||||
|
Cnt int `json:"cnt"`
|
||||||
|
List []Forecast5WeatherList `json:"list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *Forecast5WeatherData) Decode(r io.Reader) error {
|
||||||
|
if err := json.NewDecoder(r).Decode(&f); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
147
vendor/github.com/briandowns/openweathermap/history.go
generated
vendored
Normal file
147
vendor/github.com/briandowns/openweathermap/history.go
generated
vendored
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HistoricalParameters struct holds the (optional) fields to be
|
||||||
|
// supplied for historical data requests.
|
||||||
|
type HistoricalParameters struct {
|
||||||
|
Start int64 // Data start (unix time, UTC time zone)
|
||||||
|
End int64 // Data end (unix time, UTC time zone)
|
||||||
|
Cnt int // Amount of returned data (one per hour, can be used instead of Data end)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rain struct contains 3 hour data
|
||||||
|
type Rain struct {
|
||||||
|
ThreeH float64 `json:"3h"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Snow struct contains 3 hour data
|
||||||
|
type Snow struct {
|
||||||
|
ThreeH float64 `json:"3h"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// WeatherHistory struct contains aggregate fields from the above
|
||||||
|
// structs.
|
||||||
|
type WeatherHistory struct {
|
||||||
|
Main Main `json:"main"`
|
||||||
|
Wind Wind `json:"wind"`
|
||||||
|
Clouds Clouds `json:"clouds"`
|
||||||
|
Weather []Weather `json:"weather"`
|
||||||
|
Rain Rain `json:"rain"`
|
||||||
|
Dt int `json:"dt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// HistoricalWeatherData struct is where the JSON is unmarshaled to
|
||||||
|
// when receiving data for a historical request.
|
||||||
|
type HistoricalWeatherData struct {
|
||||||
|
Message string `json:"message"`
|
||||||
|
Cod int `json:"cod"`
|
||||||
|
CityData int `json:"city_data"`
|
||||||
|
CalcTime float64 `json:"calctime"`
|
||||||
|
Cnt int `json:"cnt"`
|
||||||
|
List []WeatherHistory `json:"list"`
|
||||||
|
Unit string
|
||||||
|
Key string
|
||||||
|
*Settings
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewHistorical returns a new HistoricalWeatherData pointer with
|
||||||
|
//the supplied arguments.
|
||||||
|
func NewHistorical(unit, key string, options ...Option) (*HistoricalWeatherData, error) {
|
||||||
|
h := &HistoricalWeatherData{
|
||||||
|
Settings: NewSettings(),
|
||||||
|
}
|
||||||
|
|
||||||
|
unitChoice := strings.ToUpper(unit)
|
||||||
|
if !ValidDataUnit(unitChoice) {
|
||||||
|
return nil, errUnitUnavailable
|
||||||
|
}
|
||||||
|
h.Unit = DataUnits[unitChoice]
|
||||||
|
|
||||||
|
var err error
|
||||||
|
h.Key, err = setKey(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setOptions(h.Settings, options); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return h, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HistoryByName will return the history for the provided location
|
||||||
|
func (h *HistoricalWeatherData) HistoryByName(location string) error {
|
||||||
|
response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "city?appid=%s&q=%s"), h.Key, url.QueryEscape(location)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&h); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HistoryByID will return the history for the provided location ID
|
||||||
|
func (h *HistoricalWeatherData) HistoryByID(id int, hp ...*HistoricalParameters) error {
|
||||||
|
if len(hp) > 0 {
|
||||||
|
response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "city?appid=%s&id=%d&type=hour&start%d&end=%d&cnt=%d"), h.Key, id, hp[0].Start, hp[0].End, hp[0].Cnt))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&h); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "city?appid=%s&id=%d"), h.Key, id))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&h); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HistoryByCoord will return the history for the provided coordinates
|
||||||
|
func (h *HistoricalWeatherData) HistoryByCoord(location *Coordinates, hp *HistoricalParameters) error {
|
||||||
|
response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "appid=%s&lat=%f&lon=%f&start=%d&end=%d"), h.Key, location.Latitude, location.Longitude, hp.Start, hp.End))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&h); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
228
vendor/github.com/briandowns/openweathermap/openweathermap.go
generated
vendored
Normal file
228
vendor/github.com/briandowns/openweathermap/openweathermap.go
generated
vendored
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
var errUnitUnavailable = errors.New("unit unavailable")
|
||||||
|
var errLangUnavailable = errors.New("language unavailable")
|
||||||
|
var errInvalidKey = errors.New("invalid api key")
|
||||||
|
var errInvalidOption = errors.New("invalid option")
|
||||||
|
var errInvalidHttpClient = errors.New("invalid http client")
|
||||||
|
var errForecastUnavailable = errors.New("forecast unavailable")
|
||||||
|
|
||||||
|
// DataUnits represents the character chosen to represent the temperature notation
|
||||||
|
var DataUnits = map[string]string{"C": "metric", "F": "imperial", "K": "internal"}
|
||||||
|
var (
|
||||||
|
baseURL = "http://api.openweathermap.org/data/2.5/weather?%s"
|
||||||
|
iconURL = "http://openweathermap.org/img/w/%s"
|
||||||
|
stationURL = "http://api.openweathermap.org/data/2.5/station?id=%d"
|
||||||
|
forecast5Base = "http://api.openweathermap.org/data/2.5/forecast?appid=%s&%s&mode=json&units=%s&lang=%s&cnt=%d"
|
||||||
|
forecast16Base = "http://api.openweathermap.org/data/2.5/forecast/daily?appid=%s&%s&mode=json&units=%s&lang=%s&cnt=%d"
|
||||||
|
historyURL = "http://api.openweathermap.org/data/2.5/history/%s"
|
||||||
|
pollutionURL = "http://api.openweathermap.org/pollution/v1/co/"
|
||||||
|
uvURL = "http://api.openweathermap.org/data/2.5/"
|
||||||
|
dataPostURL = "http://openweathermap.org/data/post"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LangCodes holds all supported languages to be used
|
||||||
|
// inspried and sourced from @bambocher (github.com/bambocher)
|
||||||
|
var LangCodes = map[string]string{
|
||||||
|
"EN": "English",
|
||||||
|
"RU": "Russian",
|
||||||
|
"IT": "Italian",
|
||||||
|
"ES": "Spanish",
|
||||||
|
"SP": "Spanish",
|
||||||
|
"UK": "Ukrainian",
|
||||||
|
"UA": "Ukrainian",
|
||||||
|
"DE": "German",
|
||||||
|
"PT": "Portuguese",
|
||||||
|
"RO": "Romanian",
|
||||||
|
"PL": "Polish",
|
||||||
|
"FI": "Finnish",
|
||||||
|
"NL": "Dutch",
|
||||||
|
"FR": "French",
|
||||||
|
"BG": "Bulgarian",
|
||||||
|
"SV": "Swedish",
|
||||||
|
"SE": "Swedish",
|
||||||
|
"TR": "Turkish",
|
||||||
|
"HR": "Croatian",
|
||||||
|
"CA": "Catalan",
|
||||||
|
"ZH_TW": "Chinese Traditional",
|
||||||
|
"ZH": "Chinese Simplified",
|
||||||
|
"ZH_CN": "Chinese Simplified",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Config will hold default settings to be passed into the
|
||||||
|
// "NewCurrent, NewForecast, etc}" functions.
|
||||||
|
type Config struct {
|
||||||
|
Mode string // user choice of JSON or XML
|
||||||
|
Unit string // measurement for results to be displayed. F, C, or K
|
||||||
|
Lang string // should reference a key in the LangCodes map
|
||||||
|
APIKey string // API Key for connecting to the OWM
|
||||||
|
Username string // Username for posting data
|
||||||
|
Password string // Pasword for posting data
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIError returned on failed API calls.
|
||||||
|
type APIError struct {
|
||||||
|
Message string `json:"message"`
|
||||||
|
COD string `json:"cod"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Coordinates struct holds longitude and latitude data in returned
|
||||||
|
// JSON or as parameter data for requests using longitude and latitude.
|
||||||
|
type Coordinates struct {
|
||||||
|
Longitude float64 `json:"lon"`
|
||||||
|
Latitude float64 `json:"lat"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sys struct contains general information about the request
|
||||||
|
// and the surrounding area for where the request was made.
|
||||||
|
type Sys struct {
|
||||||
|
Type int `json:"type"`
|
||||||
|
ID int `json:"id"`
|
||||||
|
Message float64 `json:"message"`
|
||||||
|
Country string `json:"country"`
|
||||||
|
Sunrise int `json:"sunrise"`
|
||||||
|
Sunset int `json:"sunset"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wind struct contains the speed and degree of the wind.
|
||||||
|
type Wind struct {
|
||||||
|
Speed float64 `json:"speed"`
|
||||||
|
Deg float64 `json:"deg"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Weather struct holds high-level, basic info on the returned
|
||||||
|
// data.
|
||||||
|
type Weather struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Main string `json:"main"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
Icon string `json:"icon"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main struct contains the temperates, humidity, pressure for the request.
|
||||||
|
type Main struct {
|
||||||
|
Temp float64 `json:"temp"`
|
||||||
|
TempMin float64 `json:"temp_min"`
|
||||||
|
TempMax float64 `json:"temp_max"`
|
||||||
|
Pressure float64 `json:"pressure"`
|
||||||
|
SeaLevel float64 `json:"sea_level"`
|
||||||
|
GrndLevel float64 `json:"grnd_level"`
|
||||||
|
Humidity int `json:"humidity"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clouds struct holds data regarding cloud cover.
|
||||||
|
type Clouds struct {
|
||||||
|
All int `json:"all"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// return key
|
||||||
|
// }
|
||||||
|
func setKey(key string) (string, error) {
|
||||||
|
if err := ValidAPIKey(key); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return key, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidDataUnit makes sure the string passed in is an accepted
|
||||||
|
// unit of measure to be used for the return data.
|
||||||
|
func ValidDataUnit(u string) bool {
|
||||||
|
for d := range DataUnits {
|
||||||
|
if u == d {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidLangCode makes sure the string passed in is an
|
||||||
|
// acceptable lang code.
|
||||||
|
func ValidLangCode(c string) bool {
|
||||||
|
for d := range LangCodes {
|
||||||
|
if c == d {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidDataUnitSymbol makes sure the string passed in is an
|
||||||
|
// acceptable data unit symbol.
|
||||||
|
func ValidDataUnitSymbol(u string) bool {
|
||||||
|
for _, d := range DataUnits {
|
||||||
|
if u == d {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidAPIKey makes sure that the key given is a valid one
|
||||||
|
func ValidAPIKey(key string) error {
|
||||||
|
if len(key) == 32 {
|
||||||
|
return errors.New("invalid key")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckAPIKeyExists will see if an API key has been set.
|
||||||
|
func (c *Config) CheckAPIKeyExists() bool { return len(c.APIKey) > 1 }
|
||||||
|
|
||||||
|
// Settings holds the client settings
|
||||||
|
type Settings struct {
|
||||||
|
client *http.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewSettings returns a new Setting pointer with default http client.
|
||||||
|
func NewSettings() *Settings {
|
||||||
|
return &Settings{
|
||||||
|
client: http.DefaultClient,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional client settings
|
||||||
|
type Option func(s *Settings) error
|
||||||
|
|
||||||
|
// WithHttpClient sets custom http client when creating a new Client.
|
||||||
|
func WithHttpClient(c *http.Client) Option {
|
||||||
|
return func(s *Settings) error {
|
||||||
|
if c == nil {
|
||||||
|
return errInvalidHttpClient
|
||||||
|
}
|
||||||
|
s.client = c
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// setOptions sets Optional client settings to the Settings pointer
|
||||||
|
func setOptions(settings *Settings, options []Option) error {
|
||||||
|
for _, option := range options {
|
||||||
|
if option == nil {
|
||||||
|
return errInvalidOption
|
||||||
|
}
|
||||||
|
err := option(settings)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
82
vendor/github.com/briandowns/openweathermap/pollution.go
generated
vendored
Normal file
82
vendor/github.com/briandowns/openweathermap/pollution.go
generated
vendored
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DateTimeAliases holds the alias the pollution API supports in lieu
|
||||||
|
// of an ISO 8601 timestamp
|
||||||
|
var DateTimeAliases = []string{"current"}
|
||||||
|
|
||||||
|
// ValidAlias checks to make sure the given alias is a valid one
|
||||||
|
func ValidAlias(alias string) bool {
|
||||||
|
for _, i := range DateTimeAliases {
|
||||||
|
if i == alias {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// PollutionData holds the pollution specific data from the call
|
||||||
|
type PollutionData struct {
|
||||||
|
Precision float64 `json:"precision"`
|
||||||
|
Pressure float64 `json:"pressure"`
|
||||||
|
Value float64 `json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PollutionParameters holds the parameters needed to make
|
||||||
|
// a call to the pollution API
|
||||||
|
type PollutionParameters struct {
|
||||||
|
Location Coordinates
|
||||||
|
Datetime string // this should be either ISO 8601 or an alias
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pollution holds the data returnd from the pollution API
|
||||||
|
type Pollution struct {
|
||||||
|
Time string `json:"time"`
|
||||||
|
Location Coordinates `json:"location"`
|
||||||
|
Data []PollutionData `json:"data"`
|
||||||
|
Key string
|
||||||
|
*Settings
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPollution creates a new reference to Pollution
|
||||||
|
func NewPollution(key string, options ...Option) (*Pollution, error) {
|
||||||
|
k, err := setKey(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
p := &Pollution{
|
||||||
|
Key: k,
|
||||||
|
Settings: NewSettings(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setOptions(p.Settings, options); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PollutionByParams gets the pollution data based on the given parameters
|
||||||
|
func (p *Pollution) PollutionByParams(params *PollutionParameters) error {
|
||||||
|
url := fmt.Sprintf("%s%s,%s/%s.json?appid=%s",
|
||||||
|
pollutionURL,
|
||||||
|
strconv.FormatFloat(params.Location.Latitude, 'f', -1, 64),
|
||||||
|
strconv.FormatFloat(params.Location.Longitude, 'f', -1, 64),
|
||||||
|
params.Datetime,
|
||||||
|
p.Key)
|
||||||
|
response, err := p.client.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&p); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
80
vendor/github.com/briandowns/openweathermap/station.go
generated
vendored
Normal file
80
vendor/github.com/briandowns/openweathermap/station.go
generated
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// Copyright 2015 Brian J. Downs
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Slice of type string of the valid parameters to be sent from a station.
|
||||||
|
// The API refers to this data as the "Weather station data transmission protocol"
|
||||||
|
var StationDataParameters = []string{
|
||||||
|
"wind_dir", // Wind direction
|
||||||
|
"wind_speed", // Wind speed
|
||||||
|
"wind_gust", // Wind gust speed
|
||||||
|
"temp", // Temperature
|
||||||
|
"humidity", // Relative humidty
|
||||||
|
"pressure", // Atmospheric pressure
|
||||||
|
"rain_1h", // Rain in the last hour
|
||||||
|
"rain_24h", // Rain in the last 24 hours
|
||||||
|
"rain_today", // Rain since midnight
|
||||||
|
"snow", // Snow in the last 24 hours
|
||||||
|
"lum", // Brightness
|
||||||
|
"lat", // Latitude
|
||||||
|
"long", // Longitude
|
||||||
|
"alt", // Altitude
|
||||||
|
"radiation", // Radiation
|
||||||
|
"dewpoint", // Dew point
|
||||||
|
"uv", // UV index
|
||||||
|
"name", // Weather station name
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidateStationDataParameter will make sure that whatever parameter
|
||||||
|
// supplied is one that can actually be used in the POST request.
|
||||||
|
func ValidateStationDataParameter(param string) bool {
|
||||||
|
for _, p := range StationDataParameters {
|
||||||
|
if param == p {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConvertToURLValues will convert a map to a url.Values instance. We're
|
||||||
|
// taking a map[string]string instead of something more type specific since
|
||||||
|
// the url.Values instance only takes strings to create the URL values.
|
||||||
|
func ConvertToURLValues(data map[string]string) string {
|
||||||
|
v := url.Values{}
|
||||||
|
|
||||||
|
for key, val := range data {
|
||||||
|
v.Set(key, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v.Encode()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SendStationData will send an instance the provided url.Values to the
|
||||||
|
// provided URL.
|
||||||
|
func SendStationData(data url.Values) {
|
||||||
|
resp, err := http.PostForm(dataPostURL, data)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(resp.Body)
|
||||||
|
}
|
170
vendor/github.com/briandowns/openweathermap/uv.go
generated
vendored
Normal file
170
vendor/github.com/briandowns/openweathermap/uv.go
generated
vendored
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
package openweathermap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var errInvalidUVIndex = errors.New("invalid UV index value")
|
||||||
|
|
||||||
|
// UVDataPoints holds the UV specific data
|
||||||
|
type UVDataPoints struct {
|
||||||
|
DT int64 `json:"dt"`
|
||||||
|
Value float64 `json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UV contains the response from the OWM UV API
|
||||||
|
type UV struct {
|
||||||
|
Coord []float64 `json:"coord"`
|
||||||
|
Data []UVDataPoints `json:"data,omitempty"`
|
||||||
|
/*Data []struct {
|
||||||
|
DT int64 `json:"dt"`
|
||||||
|
Value float64 `json:"value"`
|
||||||
|
} `json:"data,omitempty"`*/
|
||||||
|
DT int64 `json:"dt,omitempty"`
|
||||||
|
Value float64 `json:"value,omitempty"`
|
||||||
|
Key string
|
||||||
|
*Settings
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUV creates a new reference to UV
|
||||||
|
func NewUV(key string, options ...Option) (*UV, error) {
|
||||||
|
k, err := setKey(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
u := &UV{
|
||||||
|
Key: k,
|
||||||
|
Settings: NewSettings(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setOptions(u.Settings, options); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Current gets the current UV data for the given coordinates
|
||||||
|
func (u *UV) Current(coord *Coordinates) error {
|
||||||
|
response, err := u.client.Get(fmt.Sprintf("%suvi?lat=%f&lon=%f&appid=%s", uvURL, coord.Latitude, coord.Longitude, u.Key))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&u); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Historical gets the historical UV data for the coordinates and times
|
||||||
|
func (u *UV) Historical(coord *Coordinates, start, end time.Time) error {
|
||||||
|
response, err := u.client.Get(fmt.Sprintf("%shistory?lat=%f&lon=%f&start=%d&end=%d&appid=%s", uvURL, coord.Latitude, coord.Longitude, start.Unix(), end.Unix(), u.Key))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
if err = json.NewDecoder(response.Body).Decode(&u); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UVIndexInfo
|
||||||
|
type UVIndexInfo struct {
|
||||||
|
// UVIndex holds the range of the index
|
||||||
|
UVIndex []float64
|
||||||
|
|
||||||
|
// MGC represents the Media graphic color
|
||||||
|
MGC string
|
||||||
|
|
||||||
|
// Risk of harm from unprotected sun exposure, for the average adult
|
||||||
|
Risk string
|
||||||
|
|
||||||
|
// RecommendedProtection contains information on what a person should
|
||||||
|
// do when outside in the associated UVIndex
|
||||||
|
RecommendedProtection string
|
||||||
|
}
|
||||||
|
|
||||||
|
// UVData contains data in regards to UV index ranges, rankings, and steps for protection
|
||||||
|
var UVData = []UVIndexInfo{
|
||||||
|
{
|
||||||
|
UVIndex: []float64{0, 2.9},
|
||||||
|
MGC: "Green",
|
||||||
|
Risk: "Low",
|
||||||
|
RecommendedProtection: "Wear sunglasses on bright days; use sunscreen if there is snow on the ground, which reflects UV radiation, or if you have particularly fair skin.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UVIndex: []float64{3, 5.9},
|
||||||
|
MGC: "Yellow",
|
||||||
|
Risk: "Moderate",
|
||||||
|
RecommendedProtection: "Take precautions, such as covering up, if you will be outside. Stay in shade near midday when the sun is strongest.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UVIndex: []float64{6, 7.9},
|
||||||
|
MGC: "Orange",
|
||||||
|
Risk: "High",
|
||||||
|
RecommendedProtection: "Cover the body with sun protective clothing, use SPF 30+ sunscreen, wear a hat, reduce time in the sun within three hours of solar noon, and wear sunglasses.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UVIndex: []float64{8, 10.9},
|
||||||
|
MGC: "Red",
|
||||||
|
Risk: "Very high",
|
||||||
|
RecommendedProtection: "Wear SPF 30+ sunscreen, a shirt, sunglasses, and a wide-brimmed hat. Do not stay in the sun for too long.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UVIndex: []float64{11},
|
||||||
|
MGC: "Violet",
|
||||||
|
Risk: "Extreme",
|
||||||
|
RecommendedProtection: "Take all precautions: Wear SPF 30+ sunscreen, a long-sleeved shirt and trousers, sunglasses, and a very broad hat. Avoid the sun within three hours of solar noon.",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// UVInformation provides information on the given UV data which includes the severity
|
||||||
|
// and "Recommended protection"
|
||||||
|
func (u *UV) UVInformation() ([]UVIndexInfo, error) {
|
||||||
|
switch {
|
||||||
|
case u.Value != 0:
|
||||||
|
switch {
|
||||||
|
case u.Value < 2.9:
|
||||||
|
return []UVIndexInfo{UVData[0]}, nil
|
||||||
|
case u.Value > 3 && u.Value < 5.9:
|
||||||
|
return []UVIndexInfo{UVData[1]}, nil
|
||||||
|
case u.Value > 6 && u.Value < 7.9:
|
||||||
|
return []UVIndexInfo{UVData[2]}, nil
|
||||||
|
case u.Value > 8 && u.Value < 10.9:
|
||||||
|
return []UVIndexInfo{UVData[3]}, nil
|
||||||
|
case u.Value >= 11:
|
||||||
|
return []UVIndexInfo{UVData[4]}, nil
|
||||||
|
default:
|
||||||
|
return nil, errInvalidUVIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
case len(u.Data) > 0:
|
||||||
|
var uvi []UVIndexInfo
|
||||||
|
for _, i := range u.Data {
|
||||||
|
switch {
|
||||||
|
case i.Value < 2.9:
|
||||||
|
uvi = append(uvi, UVData[0])
|
||||||
|
case i.Value > 3 && u.Value < 5.9:
|
||||||
|
uvi = append(uvi, UVData[1])
|
||||||
|
case i.Value > 6 && u.Value < 7.9:
|
||||||
|
uvi = append(uvi, UVData[2])
|
||||||
|
case i.Value > 8 && u.Value < 10.9:
|
||||||
|
uvi = append(uvi, UVData[3])
|
||||||
|
case i.Value >= 11:
|
||||||
|
uvi = append(uvi, UVData[4])
|
||||||
|
default:
|
||||||
|
return nil, errInvalidUVIndex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
13
vendor/github.com/gdamore/encoding/.appveyor.yml
generated
vendored
Normal file
13
vendor/github.com/gdamore/encoding/.appveyor.yml
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
version: 1.0.{build}
|
||||||
|
clone_folder: c:\gopath\src\github.com\gdamore\encoding
|
||||||
|
environment:
|
||||||
|
GOPATH: c:\gopath
|
||||||
|
build_script:
|
||||||
|
- go version
|
||||||
|
- go env
|
||||||
|
- SET PATH=%LOCALAPPDATA%\atom\bin;%GOPATH%\bin;%PATH%
|
||||||
|
- go get -t ./...
|
||||||
|
- go build
|
||||||
|
- go install ./...
|
||||||
|
test_script:
|
||||||
|
- go test ./...
|
6
vendor/github.com/gdamore/encoding/.travis.yml
generated
vendored
Normal file
6
vendor/github.com/gdamore/encoding/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
language: go
|
||||||
|
|
||||||
|
go:
|
||||||
|
- 1.3
|
||||||
|
- 1.5
|
||||||
|
- tip
|
202
vendor/github.com/gdamore/encoding/LICENSE
generated
vendored
Normal file
202
vendor/github.com/gdamore/encoding/LICENSE
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
19
vendor/github.com/gdamore/encoding/README.md
generated
vendored
Normal file
19
vendor/github.com/gdamore/encoding/README.md
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
## encoding
|
||||||
|
|
||||||
|
[](https://travis-ci.org/gdamore/encoding)
|
||||||
|
[](https://ci.appveyor.com/project/gdamore/encoding)
|
||||||
|
[](https://github.com/gdamore/encoding/blob/master/LICENSE)
|
||||||
|
[](https://godoc.org/github.com/gdamore/encoding)
|
||||||
|
[](http://goreportcard.com/report/gdamore/encoding)
|
||||||
|
|
||||||
|
Package encoding provides a number of encodings that are missing from the
|
||||||
|
standard Go [encoding]("https://godoc.org/golang.org/x/text/encoding") package.
|
||||||
|
|
||||||
|
We hope that we can contribute these to the standard Go library someday. It
|
||||||
|
turns out that some of these are useful for dealing with I/O streams coming
|
||||||
|
from non-UTF friendly sources.
|
||||||
|
|
||||||
|
The UTF8 Encoder is also useful for situations where valid UTF-8 might be
|
||||||
|
carried in streams that contain non-valid UTF; in particular I use it for
|
||||||
|
helping me cope with terminals that embed escape sequences in otherwise
|
||||||
|
valid UTF-8.
|
36
vendor/github.com/gdamore/encoding/ascii.go
generated
vendored
Normal file
36
vendor/github.com/gdamore/encoding/ascii.go
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package encoding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ASCII represents the 7-bit US-ASCII scheme. It decodes directly to
|
||||||
|
// UTF-8 without change, as all ASCII values are legal UTF-8.
|
||||||
|
// Unicode values less than 128 (i.e. 7 bits) map 1:1 with ASCII.
|
||||||
|
// It encodes runes outside of that to 0x1A, the ASCII substitution character.
|
||||||
|
var ASCII encoding.Encoding
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
amap := make(map[byte]rune)
|
||||||
|
for i := 128; i <= 255; i++ {
|
||||||
|
amap[byte(i)] = RuneError
|
||||||
|
}
|
||||||
|
|
||||||
|
cm := &Charmap{Map: amap}
|
||||||
|
cm.Init()
|
||||||
|
ASCII = cm
|
||||||
|
}
|
192
vendor/github.com/gdamore/encoding/charmap.go
generated
vendored
Normal file
192
vendor/github.com/gdamore/encoding/charmap.go
generated
vendored
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package encoding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"golang.org/x/text/transform"
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// RuneError is an alias for the UTF-8 replacement rune, '\uFFFD'.
|
||||||
|
RuneError = '\uFFFD'
|
||||||
|
|
||||||
|
// RuneSelf is the rune below which UTF-8 and the Unicode values are
|
||||||
|
// identical. Its also the limit for ASCII.
|
||||||
|
RuneSelf = 0x80
|
||||||
|
|
||||||
|
// ASCIISub is the ASCII substitution character.
|
||||||
|
ASCIISub = '\x1a'
|
||||||
|
)
|
||||||
|
|
||||||
|
// Charmap is a structure for setting up encodings for 8-bit character sets,
|
||||||
|
// for transforming between UTF8 and that other character set. It has some
|
||||||
|
// ideas borrowed from golang.org/x/text/encoding/charmap, but it uses a
|
||||||
|
// different implementation. This implementation uses maps, and supports
|
||||||
|
// user-defined maps.
|
||||||
|
//
|
||||||
|
// We do assume that a character map has a reasonable substitution character,
|
||||||
|
// and that valid encodings are stable (exactly a 1:1 map) and stateless
|
||||||
|
// (that is there is no shift character or anything like that.) Hence this
|
||||||
|
// approach will not work for many East Asian character sets.
|
||||||
|
//
|
||||||
|
// Measurement shows little or no measurable difference in the performance of
|
||||||
|
// the two approaches. The difference was down to a couple of nsec/op, and
|
||||||
|
// no consistent pattern as to which ran faster. With the conversion to
|
||||||
|
// UTF-8 the code takes about 25 nsec/op. The conversion in the reverse
|
||||||
|
// direction takes about 100 nsec/op. (The larger cost for conversion
|
||||||
|
// from UTF-8 is most likely due to the need to convert the UTF-8 byte stream
|
||||||
|
// to a rune before conversion.
|
||||||
|
//
|
||||||
|
type Charmap struct {
|
||||||
|
transform.NopResetter
|
||||||
|
bytes map[rune]byte
|
||||||
|
runes [256][]byte
|
||||||
|
once sync.Once
|
||||||
|
|
||||||
|
// The map between bytes and runes. To indicate that a specific
|
||||||
|
// byte value is invalid for a charcter set, use the rune
|
||||||
|
// utf8.RuneError. Values that are absent from this map will
|
||||||
|
// be assumed to have the identity mapping -- that is the default
|
||||||
|
// is to assume ISO8859-1, where all 8-bit characters have the same
|
||||||
|
// numeric value as their Unicode runes. (Not to be confused with
|
||||||
|
// the UTF-8 values, which *will* be different for non-ASCII runes.)
|
||||||
|
//
|
||||||
|
// If no values less than RuneSelf are changed (or have non-identity
|
||||||
|
// mappings), then the character set is assumed to be an ASCII
|
||||||
|
// superset, and certain assumptions and optimizations become
|
||||||
|
// available for ASCII bytes.
|
||||||
|
Map map[byte]rune
|
||||||
|
|
||||||
|
// The ReplacementChar is the byte value to use for substitution.
|
||||||
|
// It should normally be ASCIISub for ASCII encodings. This may be
|
||||||
|
// unset (left to zero) for mappings that are strictly ASCII supersets.
|
||||||
|
// In that case ASCIISub will be assumed instead.
|
||||||
|
ReplacementChar byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type cmapDecoder struct {
|
||||||
|
transform.NopResetter
|
||||||
|
runes [256][]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type cmapEncoder struct {
|
||||||
|
transform.NopResetter
|
||||||
|
bytes map[rune]byte
|
||||||
|
replace byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init initializes internal values of a character map. This should
|
||||||
|
// be done early, to minimize the cost of allocation of transforms
|
||||||
|
// later. It is not strictly necessary however, as the allocation
|
||||||
|
// functions will arrange to call it if it has not already been done.
|
||||||
|
func (c *Charmap) Init() {
|
||||||
|
c.once.Do(c.initialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Charmap) initialize() {
|
||||||
|
c.bytes = make(map[rune]byte)
|
||||||
|
ascii := true
|
||||||
|
|
||||||
|
for i := 0; i < 256; i++ {
|
||||||
|
r, ok := c.Map[byte(i)]
|
||||||
|
if !ok {
|
||||||
|
r = rune(i)
|
||||||
|
}
|
||||||
|
if r < 128 && r != rune(i) {
|
||||||
|
ascii = false
|
||||||
|
}
|
||||||
|
if r != RuneError {
|
||||||
|
c.bytes[r] = byte(i)
|
||||||
|
}
|
||||||
|
utf := make([]byte, utf8.RuneLen(r))
|
||||||
|
utf8.EncodeRune(utf, r)
|
||||||
|
c.runes[i] = utf
|
||||||
|
}
|
||||||
|
if ascii && c.ReplacementChar == '\x00' {
|
||||||
|
c.ReplacementChar = ASCIISub
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewDecoder returns a Decoder the converts from the 8-bit
|
||||||
|
// character set to UTF-8. Unknown mappings, if any, are mapped
|
||||||
|
// to '\uFFFD'.
|
||||||
|
func (c *Charmap) NewDecoder() *encoding.Decoder {
|
||||||
|
c.Init()
|
||||||
|
return &encoding.Decoder{Transformer: &cmapDecoder{runes: c.runes}}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEncoder returns a Transformer that converts from UTF8 to the
|
||||||
|
// 8-bit character set. Unknown mappings are mapped to 0x1A.
|
||||||
|
func (c *Charmap) NewEncoder() *encoding.Encoder {
|
||||||
|
c.Init()
|
||||||
|
return &encoding.Encoder{Transformer:
|
||||||
|
&cmapEncoder{bytes: c.bytes, replace: c.ReplacementChar}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *cmapDecoder) Transform(dst, src []byte, atEOF bool) (int, int, error) {
|
||||||
|
var e error
|
||||||
|
var ndst, nsrc int
|
||||||
|
|
||||||
|
for _, c := range src {
|
||||||
|
b := d.runes[c]
|
||||||
|
l := len(b)
|
||||||
|
|
||||||
|
if ndst+l > len(dst) {
|
||||||
|
e = transform.ErrShortDst
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for i := 0; i < l; i++ {
|
||||||
|
dst[ndst] = b[i]
|
||||||
|
ndst++
|
||||||
|
}
|
||||||
|
nsrc++
|
||||||
|
}
|
||||||
|
return ndst, nsrc, e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *cmapEncoder) Transform(dst, src []byte, atEOF bool) (int, int, error) {
|
||||||
|
var e error
|
||||||
|
var ndst, nsrc int
|
||||||
|
for nsrc < len(src) {
|
||||||
|
if ndst >= len(dst) {
|
||||||
|
e = transform.ErrShortDst
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
r, sz := utf8.DecodeRune(src[nsrc:])
|
||||||
|
if r == utf8.RuneError && sz == 1 {
|
||||||
|
// If its inconclusive due to insufficient data in
|
||||||
|
// in the source, report it
|
||||||
|
if !atEOF && !utf8.FullRune(src[nsrc:]) {
|
||||||
|
e = transform.ErrShortSrc
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if c, ok := d.bytes[r]; ok {
|
||||||
|
dst[ndst] = c
|
||||||
|
} else {
|
||||||
|
dst[ndst] = d.replace
|
||||||
|
}
|
||||||
|
nsrc += sz
|
||||||
|
ndst++
|
||||||
|
}
|
||||||
|
|
||||||
|
return ndst, nsrc, e
|
||||||
|
}
|
17
vendor/github.com/gdamore/encoding/doc.go
generated
vendored
Normal file
17
vendor/github.com/gdamore/encoding/doc.go
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package encoding provides a few of the encoding structures that are
|
||||||
|
// missing from the Go x/text/encoding tree.
|
||||||
|
package encoding
|
273
vendor/github.com/gdamore/encoding/ebcdic.go
generated
vendored
Normal file
273
vendor/github.com/gdamore/encoding/ebcdic.go
generated
vendored
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package encoding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EBCDIC represents the 8-bit EBCDIC scheme, found in some mainframe
|
||||||
|
// environments. If you don't know what this is, consider yourself lucky.
|
||||||
|
var EBCDIC encoding.Encoding
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
cm := &Charmap{
|
||||||
|
ReplacementChar: '\x3f',
|
||||||
|
Map: map[byte]rune{
|
||||||
|
// 0x00-0x03 match
|
||||||
|
0x04: RuneError,
|
||||||
|
0x05: '\t',
|
||||||
|
0x06: RuneError,
|
||||||
|
0x07: '\x7f',
|
||||||
|
0x08: RuneError,
|
||||||
|
0x09: RuneError,
|
||||||
|
0x0a: RuneError,
|
||||||
|
// 0x0b-0x13 match
|
||||||
|
0x14: RuneError,
|
||||||
|
0x15: '\x85', // Not in any ISO code
|
||||||
|
0x16: '\x08',
|
||||||
|
0x17: RuneError,
|
||||||
|
// 0x18-0x19 match
|
||||||
|
0x1a: RuneError,
|
||||||
|
0x1b: RuneError,
|
||||||
|
// 0x1c-0x1f match
|
||||||
|
0x20: RuneError,
|
||||||
|
0x21: RuneError,
|
||||||
|
0x22: RuneError,
|
||||||
|
0x23: RuneError,
|
||||||
|
0x24: RuneError,
|
||||||
|
0x25: '\n',
|
||||||
|
0x26: '\x17',
|
||||||
|
0x27: '\x1b',
|
||||||
|
0x28: RuneError,
|
||||||
|
0x29: RuneError,
|
||||||
|
0x2a: RuneError,
|
||||||
|
0x2b: RuneError,
|
||||||
|
0x2c: RuneError,
|
||||||
|
0x2d: '\x05',
|
||||||
|
0x2e: '\x06',
|
||||||
|
0x2f: '\x07',
|
||||||
|
0x30: RuneError,
|
||||||
|
0x31: RuneError,
|
||||||
|
0x32: '\x16',
|
||||||
|
0x33: RuneError,
|
||||||
|
0x34: RuneError,
|
||||||
|
0x35: RuneError,
|
||||||
|
0x36: RuneError,
|
||||||
|
0x37: '\x04',
|
||||||
|
0x38: RuneError,
|
||||||
|
0x39: RuneError,
|
||||||
|
0x3a: RuneError,
|
||||||
|
0x3b: RuneError,
|
||||||
|
0x3c: '\x14',
|
||||||
|
0x3d: '\x15',
|
||||||
|
0x3e: RuneError,
|
||||||
|
0x3f: '\x1a', // also replacement char
|
||||||
|
0x40: ' ',
|
||||||
|
0x41: '\xa0',
|
||||||
|
0x42: RuneError,
|
||||||
|
0x43: RuneError,
|
||||||
|
0x44: RuneError,
|
||||||
|
0x45: RuneError,
|
||||||
|
0x46: RuneError,
|
||||||
|
0x47: RuneError,
|
||||||
|
0x48: RuneError,
|
||||||
|
0x49: RuneError,
|
||||||
|
0x4a: RuneError,
|
||||||
|
0x4b: '.',
|
||||||
|
0x4c: '<',
|
||||||
|
0x4d: '(',
|
||||||
|
0x4e: '+',
|
||||||
|
0x4f: '|',
|
||||||
|
0x50: '&',
|
||||||
|
0x51: RuneError,
|
||||||
|
0x52: RuneError,
|
||||||
|
0x53: RuneError,
|
||||||
|
0x54: RuneError,
|
||||||
|
0x55: RuneError,
|
||||||
|
0x56: RuneError,
|
||||||
|
0x57: RuneError,
|
||||||
|
0x58: RuneError,
|
||||||
|
0x59: RuneError,
|
||||||
|
0x5a: '!',
|
||||||
|
0x5b: '$',
|
||||||
|
0x5c: '*',
|
||||||
|
0x5d: ')',
|
||||||
|
0x5e: ';',
|
||||||
|
0x5f: '¬',
|
||||||
|
0x60: '-',
|
||||||
|
0x61: '/',
|
||||||
|
0x62: RuneError,
|
||||||
|
0x63: RuneError,
|
||||||
|
0x64: RuneError,
|
||||||
|
0x65: RuneError,
|
||||||
|
0x66: RuneError,
|
||||||
|
0x67: RuneError,
|
||||||
|
0x68: RuneError,
|
||||||
|
0x69: RuneError,
|
||||||
|
0x6a: '¦',
|
||||||
|
0x6b: ',',
|
||||||
|
0x6c: '%',
|
||||||
|
0x6d: '_',
|
||||||
|
0x6e: '>',
|
||||||
|
0x6f: '?',
|
||||||
|
0x70: RuneError,
|
||||||
|
0x71: RuneError,
|
||||||
|
0x72: RuneError,
|
||||||
|
0x73: RuneError,
|
||||||
|
0x74: RuneError,
|
||||||
|
0x75: RuneError,
|
||||||
|
0x76: RuneError,
|
||||||
|
0x77: RuneError,
|
||||||
|
0x78: RuneError,
|
||||||
|
0x79: '`',
|
||||||
|
0x7a: ':',
|
||||||
|
0x7b: '#',
|
||||||
|
0x7c: '@',
|
||||||
|
0x7d: '\'',
|
||||||
|
0x7e: '=',
|
||||||
|
0x7f: '"',
|
||||||
|
0x80: RuneError,
|
||||||
|
0x81: 'a',
|
||||||
|
0x82: 'b',
|
||||||
|
0x83: 'c',
|
||||||
|
0x84: 'd',
|
||||||
|
0x85: 'e',
|
||||||
|
0x86: 'f',
|
||||||
|
0x87: 'g',
|
||||||
|
0x88: 'h',
|
||||||
|
0x89: 'i',
|
||||||
|
0x8a: RuneError,
|
||||||
|
0x8b: RuneError,
|
||||||
|
0x8c: RuneError,
|
||||||
|
0x8d: RuneError,
|
||||||
|
0x8e: RuneError,
|
||||||
|
0x8f: '±',
|
||||||
|
0x90: RuneError,
|
||||||
|
0x91: 'j',
|
||||||
|
0x92: 'k',
|
||||||
|
0x93: 'l',
|
||||||
|
0x94: 'm',
|
||||||
|
0x95: 'n',
|
||||||
|
0x96: 'o',
|
||||||
|
0x97: 'p',
|
||||||
|
0x98: 'q',
|
||||||
|
0x99: 'r',
|
||||||
|
0x9a: RuneError,
|
||||||
|
0x9b: RuneError,
|
||||||
|
0x9c: RuneError,
|
||||||
|
0x9d: RuneError,
|
||||||
|
0x9e: RuneError,
|
||||||
|
0x9f: RuneError,
|
||||||
|
0xa0: RuneError,
|
||||||
|
0xa1: '~',
|
||||||
|
0xa2: 's',
|
||||||
|
0xa3: 't',
|
||||||
|
0xa4: 'u',
|
||||||
|
0xa5: 'v',
|
||||||
|
0xa6: 'w',
|
||||||
|
0xa7: 'x',
|
||||||
|
0xa8: 'y',
|
||||||
|
0xa9: 'z',
|
||||||
|
0xaa: RuneError,
|
||||||
|
0xab: RuneError,
|
||||||
|
0xac: RuneError,
|
||||||
|
0xad: RuneError,
|
||||||
|
0xae: RuneError,
|
||||||
|
0xaf: RuneError,
|
||||||
|
0xb0: '^',
|
||||||
|
0xb1: RuneError,
|
||||||
|
0xb2: RuneError,
|
||||||
|
0xb3: RuneError,
|
||||||
|
0xb4: RuneError,
|
||||||
|
0xb5: RuneError,
|
||||||
|
0xb6: RuneError,
|
||||||
|
0xb7: RuneError,
|
||||||
|
0xb8: RuneError,
|
||||||
|
0xb9: RuneError,
|
||||||
|
0xba: '[',
|
||||||
|
0xbb: ']',
|
||||||
|
0xbc: RuneError,
|
||||||
|
0xbd: RuneError,
|
||||||
|
0xbe: RuneError,
|
||||||
|
0xbf: RuneError,
|
||||||
|
0xc0: '{',
|
||||||
|
0xc1: 'A',
|
||||||
|
0xc2: 'B',
|
||||||
|
0xc3: 'C',
|
||||||
|
0xc4: 'D',
|
||||||
|
0xc5: 'E',
|
||||||
|
0xc6: 'F',
|
||||||
|
0xc7: 'G',
|
||||||
|
0xc8: 'H',
|
||||||
|
0xc9: 'I',
|
||||||
|
0xca: '\xad', // NB: soft hyphen
|
||||||
|
0xcb: RuneError,
|
||||||
|
0xcc: RuneError,
|
||||||
|
0xcd: RuneError,
|
||||||
|
0xce: RuneError,
|
||||||
|
0xcf: RuneError,
|
||||||
|
0xd0: '}',
|
||||||
|
0xd1: 'J',
|
||||||
|
0xd2: 'K',
|
||||||
|
0xd3: 'L',
|
||||||
|
0xd4: 'M',
|
||||||
|
0xd5: 'N',
|
||||||
|
0xd6: 'O',
|
||||||
|
0xd7: 'P',
|
||||||
|
0xd8: 'Q',
|
||||||
|
0xd9: 'R',
|
||||||
|
0xda: RuneError,
|
||||||
|
0xdb: RuneError,
|
||||||
|
0xdc: RuneError,
|
||||||
|
0xdd: RuneError,
|
||||||
|
0xde: RuneError,
|
||||||
|
0xdf: RuneError,
|
||||||
|
0xe0: '\\',
|
||||||
|
0xe1: '\u2007', // Non-breaking space
|
||||||
|
0xe2: 'S',
|
||||||
|
0xe3: 'T',
|
||||||
|
0xe4: 'U',
|
||||||
|
0xe5: 'V',
|
||||||
|
0xe6: 'W',
|
||||||
|
0xe7: 'X',
|
||||||
|
0xe8: 'Y',
|
||||||
|
0xe9: 'Z',
|
||||||
|
0xea: RuneError,
|
||||||
|
0xeb: RuneError,
|
||||||
|
0xec: RuneError,
|
||||||
|
0xed: RuneError,
|
||||||
|
0xee: RuneError,
|
||||||
|
0xef: RuneError,
|
||||||
|
0xf0: '0',
|
||||||
|
0xf1: '1',
|
||||||
|
0xf2: '2',
|
||||||
|
0xf3: '3',
|
||||||
|
0xf4: '4',
|
||||||
|
0xf5: '5',
|
||||||
|
0xf6: '6',
|
||||||
|
0xf7: '7',
|
||||||
|
0xf8: '8',
|
||||||
|
0xf9: '9',
|
||||||
|
0xfa: RuneError,
|
||||||
|
0xfb: RuneError,
|
||||||
|
0xfc: RuneError,
|
||||||
|
0xfd: RuneError,
|
||||||
|
0xfe: RuneError,
|
||||||
|
0xff: RuneError,
|
||||||
|
}}
|
||||||
|
cm.Init()
|
||||||
|
EBCDIC = cm
|
||||||
|
}
|
33
vendor/github.com/gdamore/encoding/latin1.go
generated
vendored
Normal file
33
vendor/github.com/gdamore/encoding/latin1.go
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package encoding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ISO8859_1 represents the 8-bit ISO8859-1 scheme. It decodes directly to
|
||||||
|
// UTF-8 without change, as all ISO8859-1 values are legal UTF-8.
|
||||||
|
// Unicode values less than 256 (i.e. 8 bits) map 1:1 with 8859-1.
|
||||||
|
// It encodes runes outside of that to 0x1A, the ASCII substitution character.
|
||||||
|
var ISO8859_1 encoding.Encoding
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
cm := &Charmap{}
|
||||||
|
cm.Init()
|
||||||
|
|
||||||
|
// 8859-1 is the 8-bit identity map for Unicode.
|
||||||
|
ISO8859_1 = cm
|
||||||
|
}
|
35
vendor/github.com/gdamore/encoding/latin5.go
generated
vendored
Normal file
35
vendor/github.com/gdamore/encoding/latin5.go
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package encoding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ISO8859_9 represents the 8-bit ISO8859-9 scheme.
|
||||||
|
var ISO8859_9 encoding.Encoding
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
cm := &Charmap{Map: map[byte]rune{
|
||||||
|
0xD0: 'Ğ',
|
||||||
|
0xDD: 'İ',
|
||||||
|
0xDE: 'Ş',
|
||||||
|
0xF0: 'ğ',
|
||||||
|
0xFD: 'ı',
|
||||||
|
0xFE: 'ş',
|
||||||
|
}}
|
||||||
|
cm.Init()
|
||||||
|
ISO8859_9 = cm
|
||||||
|
}
|
35
vendor/github.com/gdamore/encoding/utf8.go
generated
vendored
Normal file
35
vendor/github.com/gdamore/encoding/utf8.go
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2015 Garrett D'Amore
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package encoding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
type validUtf8 struct{}
|
||||||
|
|
||||||
|
// UTF8 is an encoding for UTF-8. All it does is verify that the UTF-8
|
||||||
|
// in is valid. The main reason for its existence is that it will detect
|
||||||
|
// and report ErrSrcShort or ErrDstShort, whereas the Nop encoding just
|
||||||
|
// passes every byte, blithely.
|
||||||
|
var UTF8 encoding.Encoding = validUtf8{}
|
||||||
|
|
||||||
|
func (validUtf8) NewDecoder() *encoding.Decoder {
|
||||||
|
return &encoding.Decoder{Transformer: encoding.UTF8Validator}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (validUtf8) NewEncoder() *encoding.Encoder {
|
||||||
|
return &encoding.Encoder{Transformer: encoding.UTF8Validator}
|
||||||
|
}
|
13
vendor/github.com/gdamore/tcell/.appveyor.yml
generated
vendored
Normal file
13
vendor/github.com/gdamore/tcell/.appveyor.yml
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
version: 1.0.{build}
|
||||||
|
clone_folder: c:\gopath\src\github.com\gdamore\tcell
|
||||||
|
environment:
|
||||||
|
GOPATH: c:\gopath
|
||||||
|
build_script:
|
||||||
|
- go version
|
||||||
|
- go env
|
||||||
|
- SET PATH=%LOCALAPPDATA%\atom\bin;%GOPATH%\bin;%PATH%
|
||||||
|
- go get -t ./...
|
||||||
|
- go build
|
||||||
|
- go install ./...
|
||||||
|
test_script:
|
||||||
|
- go test ./...
|
1
vendor/github.com/gdamore/tcell/.gitignore
generated
vendored
Normal file
1
vendor/github.com/gdamore/tcell/.gitignore
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
coverage.txt
|
17
vendor/github.com/gdamore/tcell/.travis.yml
generated
vendored
Normal file
17
vendor/github.com/gdamore/tcell/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
language: go
|
||||||
|
|
||||||
|
go:
|
||||||
|
- 1.5.x
|
||||||
|
- 1.6.x
|
||||||
|
- 1.7.x
|
||||||
|
- 1.8.x
|
||||||
|
- master
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- go get -t -v ./...
|
||||||
|
|
||||||
|
script:
|
||||||
|
- go test -race -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- bash <(curl -s https://codecov.io/bash)
|
4
vendor/github.com/gdamore/tcell/AUTHORS
generated
vendored
Normal file
4
vendor/github.com/gdamore/tcell/AUTHORS
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Garrett D'Amore <garrett@damore.org>
|
||||||
|
Zachary Yedidia <zyedidia@gmail.com>
|
||||||
|
Junegunn Choi <junegunn.c@gmail.com>
|
||||||
|
Staysail Systems, Inc. <info@staysail.tech>
|
202
vendor/github.com/gdamore/tcell/LICENSE
generated
vendored
Normal file
202
vendor/github.com/gdamore/tcell/LICENSE
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
262
vendor/github.com/gdamore/tcell/README.md
generated
vendored
Normal file
262
vendor/github.com/gdamore/tcell/README.md
generated
vendored
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
## tcell
|
||||||
|
|
||||||
|
[](https://travis-ci.org/gdamore/tcell)
|
||||||
|
[](https://ci.appveyor.com/project/gdamore/tcell)
|
||||||
|
[](https://github.com/gdamore/tcell/blob/master/LICENSE)
|
||||||
|
[](https://gitter.im/gdamore/tcell)
|
||||||
|
[](https://godoc.org/github.com/gdamore/tcell)
|
||||||
|
[](http://goreportcard.com/report/gdamore/tcell)
|
||||||
|
[](https://codecov.io/gh/gdamore/tcell)
|
||||||
|
|
||||||
|
|
||||||
|
> _Tcell is a work in progress (Gamma).
|
||||||
|
> Please use with caution; interfaces may change in before final release.
|
||||||
|
> That said, our confidence in Tcell's stability is increasing. If you
|
||||||
|
> would like to use it in your own application, it is recommended that
|
||||||
|
> you drop a message to garrett@damore.org before commitment._
|
||||||
|
|
||||||
|
Package tcell provides a cell based view for text terminals, like xterm.
|
||||||
|
It was inspired by termbox, but differs from termbox in some important
|
||||||
|
ways. It also adds substantial functionality beyond termbox.
|
||||||
|
|
||||||
|
## 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 - [screenshot](http://2.bp.blogspot.com/-fWvW5opT0es/VhIdItdKqJI/AAAAAAAAATE/7Ojc0L1SpB0/s1600/Screen%2BShot%2B2015-10-04%2Bat%2B11.47.13%2BPM.png) - included mouse test
|
||||||
|
* [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) - simple golang utility helping to discover large files/folders.
|
||||||
|
|
||||||
|
## Pure Go Terminfo Database
|
||||||
|
|
||||||
|
First, it 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, at the slight expense
|
||||||
|
of needing cgo support for terminal initializations. (This may be corrected
|
||||||
|
when Go provides standard support for terminal handling via termio ioctls on
|
||||||
|
all POSIX platforms.) The database itself, while built using CGO, as well
|
||||||
|
as the parser for it, is implemented in Pure Go.
|
||||||
|
|
||||||
|
The database is also flexible & extensible, and can modified by either running a
|
||||||
|
program to build the database, or hand editing of simple JSON files.
|
||||||
|
|
||||||
|
## More Portable
|
||||||
|
|
||||||
|
Tcell is portable to a wider variety of systems. It relies on standard
|
||||||
|
POSIX supported function calls (on POSIX platforms) for setting terminal
|
||||||
|
modes, which leads to improved support for a broader array of platforms.
|
||||||
|
This does come at the cost of requiring your code to be able to use CGO, but
|
||||||
|
we believe that the vastly improved portability justifies this
|
||||||
|
requirement. Note that the functions called are part of the standard C
|
||||||
|
library, so there shouldn't be any additional external requirements beyond
|
||||||
|
that required for every POSIX program.
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
## Richer Unicode & non-Unicode support
|
||||||
|
|
||||||
|
Tcell includes enhanced support for Unicode, include 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.
|
||||||
|
We try 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
|
||||||
|
|
||||||
|
It 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 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.)
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Why not just patch termbox-go?
|
||||||
|
|
||||||
|
I started this project originally by submitting patches to the author of
|
||||||
|
go-termbox, but due to some fundamental differences of opinion, I thought
|
||||||
|
it might be simpler just to start from scratch. At this point, Tcell has
|
||||||
|
far exceeded the capabilities of termbox.
|
||||||
|
|
||||||
|
## 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.)
|
||||||
|
|
||||||
|
Experience has shown that the vanilla Windows 8 console application does not
|
||||||
|
support any of these characters properly, but at least some options like
|
||||||
|
ConEmu do support Wide characters at least.
|
||||||
|
|
||||||
|
## 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 let me
|
||||||
|
know; 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.)
|
||||||
|
|
||||||
|
To use 24-bit color, you need to use a terminal that supports it. Modern
|
||||||
|
xterm and similar teminal emulators can support this. As terminfo lacks any
|
||||||
|
way to describe this capability, we fabricate the capability for
|
||||||
|
terminals with names ending in *-truecolor. The stock distribution ships
|
||||||
|
with a database that defines xterm-truecolor. To try it out, set your
|
||||||
|
TERM variable to xterm-truecolor.
|
||||||
|
|
||||||
|
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.)
|
||||||
|
|
||||||
|
If you find this undesirable, you can either use a TERM variable
|
||||||
|
that lacks the TRUECOLOR setting, or set TCELL_TRUECOLOR=disable in your
|
||||||
|
environment.
|
||||||
|
|
||||||
|
## 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 relevent for Windows users.)
|
||||||
|
|
||||||
|
The Terminfo implementation operates with two forms of database. The first
|
||||||
|
is the database.go file, which contains a number of real database entries
|
||||||
|
that are compiled into the program directly. This should minimize calling
|
||||||
|
out to database file searches.
|
||||||
|
|
||||||
|
The second is a JSON file, that contains the same information, which can
|
||||||
|
be located either by the $TCELLDB environment file, $HOME/.tcelldb, or is
|
||||||
|
located in the Go source directory as database.json.
|
||||||
|
|
||||||
|
These files (both the Go database.go and the database.json) file can be
|
||||||
|
generated using the mkinfo.go program. If you need to regnerate the
|
||||||
|
entire set for some reason, run the mkdatabase.sh file. The generation
|
||||||
|
uses the terminfo routines on the system to populate the data files.
|
||||||
|
|
||||||
|
The mkinfo.go program can also be used to generate specific database entries
|
||||||
|
for named terminals, in case your favorite terminal is missing. (If you
|
||||||
|
find that this is the case, please let me know and I'll try to add it!)
|
||||||
|
|
||||||
|
Tcell requires that the terminal support the 'cup' mode of cursor addressing.
|
||||||
|
Terminals without absolute cursor addressability 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. As a particular datum, MacOS X Terminal
|
||||||
|
does not support Mouse events at all (as of MacOS 10.10, aka Yosemite.) The
|
||||||
|
excellent iTerm application is fully supported, as is vanilla XTerm.
|
||||||
|
|
||||||
|
Mouse tracking with live tracking also varies widely. Current XTerm
|
||||||
|
implementations, as well as current Screen and iTerm2, and Windows
|
||||||
|
consoles, all support this quite nicely. On other platforms you might
|
||||||
|
find that only mouse click and release events are reported, with
|
||||||
|
no intervening motion events. It really depends on your terminal.
|
||||||
|
|
||||||
|
## Testablity
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
### Systems (Linux, FreeBSD, MacOS, Solaris, etc.)
|
||||||
|
|
||||||
|
On POSIX systems, a POSIX termios implementation with /dev/tty is required.
|
||||||
|
On a small subset of these platforms (such as Solaris/illumos), we require
|
||||||
|
cgo to run, in order to access termios. (Note that Linux and BSD systems
|
||||||
|
do not require CGO for most purposes.)
|
||||||
|
|
||||||
|
(Note: CGO support is required if you wish to rebuild the terminal database
|
||||||
|
from the system's native terminfo binary files. This is because we use the
|
||||||
|
system's native libterminfo to access that binary data. We probably could
|
||||||
|
eliminate that in the future by using a terminfo decompiler such as infocmp.)
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
Windows console mode applications are supported. Unfortunately mintty
|
||||||
|
and other cygwin style applications are not supported.
|
||||||
|
|
||||||
|
Modern console applications like ConEmu support all the good features
|
||||||
|
(resize, mouse tracking, etc.)
|
||||||
|
|
||||||
|
I haven't figured out how to cleanly resolve the dichotomy between cygwin
|
||||||
|
style termios and the Windows Console API; it seems that perhaps nobody else
|
||||||
|
has either. If anyone has suggestions, let me know! Really, if you're
|
||||||
|
using a Windows application, you should use the native Windows console or a
|
||||||
|
fully compatible console implementation. Hopefully the Windows 10 console
|
||||||
|
is more functional in this regard.
|
||||||
|
|
||||||
|
### Plan9 and Native Client (Nacl)
|
||||||
|
|
||||||
|
The nacl and plan9 platforms won't work, but compilation stubs are supplied
|
||||||
|
for folks that want to include parts of this in software targetting 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.
|
32
vendor/github.com/gdamore/tcell/attr.go
generated
vendored
Normal file
32
vendor/github.com/gdamore/tcell/attr.go
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
// AttrMask represents a mask of text attributes, apart from color.
|
||||||
|
// Note that support for attributes may vary widely across terminals.
|
||||||
|
type AttrMask int
|
||||||
|
|
||||||
|
// Attributes are not colors, but affect the display of text. They can
|
||||||
|
// be combined.
|
||||||
|
const (
|
||||||
|
AttrBold AttrMask = 1 << (25 + iota)
|
||||||
|
AttrBlink
|
||||||
|
AttrReverse
|
||||||
|
AttrUnderline
|
||||||
|
AttrDim
|
||||||
|
AttrNone AttrMask = 0 // Just normal text.
|
||||||
|
)
|
||||||
|
|
||||||
|
const attrAll = AttrBold | AttrBlink | AttrReverse | AttrUnderline | AttrDim
|
186
vendor/github.com/gdamore/tcell/cell.go
generated
vendored
Normal file
186
vendor/github.com/gdamore/tcell/cell.go
generated
vendored
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattn/go-runewidth"
|
||||||
|
)
|
||||||
|
|
||||||
|
type cell struct {
|
||||||
|
currMain rune
|
||||||
|
currComb []rune
|
||||||
|
currStyle Style
|
||||||
|
lastMain rune
|
||||||
|
lastStyle Style
|
||||||
|
lastComb []rune
|
||||||
|
width int
|
||||||
|
}
|
||||||
|
|
||||||
|
// CellBuffer represents a two dimensional array of character cells.
|
||||||
|
// This is primarily intended for use by Screen implementors; it
|
||||||
|
// contains much of the common code they need. To create one, just
|
||||||
|
// declare a variable of its type; no explicit initialization is necessary.
|
||||||
|
//
|
||||||
|
// CellBuffer is not thread safe.
|
||||||
|
type CellBuffer struct {
|
||||||
|
w int
|
||||||
|
h int
|
||||||
|
cells []cell
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContent sets the contents (primary rune, combining runes,
|
||||||
|
// and style) for a cell at a given location.
|
||||||
|
func (cb *CellBuffer) SetContent(x int, y int,
|
||||||
|
mainc rune, combc []rune, style Style) {
|
||||||
|
|
||||||
|
if x >= 0 && y >= 0 && x < cb.w && y < cb.h {
|
||||||
|
c := &cb.cells[(y*cb.w)+x]
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
for i < len(combc) {
|
||||||
|
r := combc[i]
|
||||||
|
if runewidth.RuneWidth(r) != 0 {
|
||||||
|
// not a combining character, yank it
|
||||||
|
combc = append(combc[:i-1], combc[i+1:]...)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.currMain != mainc {
|
||||||
|
c.width = runewidth.RuneWidth(mainc)
|
||||||
|
}
|
||||||
|
c.currMain = mainc
|
||||||
|
c.currComb = combc
|
||||||
|
c.currStyle = style
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetContent returns the contents of a character cell, including the
|
||||||
|
// primary rune, any combining character runes (which will usually be
|
||||||
|
// nil), the style, and the display width in cells. (The width can be
|
||||||
|
// either 1, normally, or 2 for East Asian full-width characters.)
|
||||||
|
func (cb *CellBuffer) GetContent(x, y int) (rune, []rune, Style, int) {
|
||||||
|
var mainc rune
|
||||||
|
var combc []rune
|
||||||
|
var style Style
|
||||||
|
var width int
|
||||||
|
if x >= 0 && y >= 0 && x < cb.w && y < cb.h {
|
||||||
|
c := &cb.cells[(y*cb.w)+x]
|
||||||
|
mainc, combc, style = c.currMain, c.currComb, c.currStyle
|
||||||
|
if width = c.width; width == 0 || mainc < ' ' {
|
||||||
|
width = 1
|
||||||
|
mainc = ' '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mainc, combc, style, width
|
||||||
|
}
|
||||||
|
|
||||||
|
// Size returns the (width, height) in cells of the buffer.
|
||||||
|
func (cb *CellBuffer) Size() (int, int) {
|
||||||
|
return cb.w, cb.h
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invalidate marks all characters within the buffer as dirty.
|
||||||
|
func (cb *CellBuffer) Invalidate() {
|
||||||
|
for i := range cb.cells {
|
||||||
|
cb.cells[i].lastMain = rune(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dirty checks if a character at the given location needs an
|
||||||
|
// to be refreshed on the physical display. This returns true
|
||||||
|
// if the cell content is different since the last time it was
|
||||||
|
// marked clean.
|
||||||
|
func (cb *CellBuffer) Dirty(x, y int) bool {
|
||||||
|
if x >= 0 && y >= 0 && x < cb.w && y < cb.h {
|
||||||
|
c := &cb.cells[(y*cb.w)+x]
|
||||||
|
if c.lastMain == rune(0) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if c.lastMain != c.currMain {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if c.lastStyle != c.currStyle {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if len(c.lastComb) != len(c.currComb) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
for i := range c.lastComb {
|
||||||
|
if c.lastComb[i] != c.currComb[i] {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDirty is normally used to indicate that a cell has
|
||||||
|
// been displayed (in which case dirty is false), or to manually
|
||||||
|
// force a cell to be marked dirty.
|
||||||
|
func (cb *CellBuffer) SetDirty(x, y int, dirty bool) {
|
||||||
|
if x >= 0 && y >= 0 && x < cb.w && y < cb.h {
|
||||||
|
c := &cb.cells[(y*cb.w)+x]
|
||||||
|
if dirty {
|
||||||
|
c.lastMain = rune(0)
|
||||||
|
} else {
|
||||||
|
if c.currMain == rune(0) {
|
||||||
|
c.currMain = ' '
|
||||||
|
}
|
||||||
|
c.lastMain = c.currMain
|
||||||
|
c.lastComb = c.currComb
|
||||||
|
c.lastStyle = c.currStyle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resize is used to resize the cells array, with different dimensions,
|
||||||
|
// while preserving the original contents. The cells will be invalidated
|
||||||
|
// so that they can be redrawn.
|
||||||
|
func (cb *CellBuffer) Resize(w, h int) {
|
||||||
|
|
||||||
|
if cb.h == h && cb.w == w {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
newc := make([]cell, w*h)
|
||||||
|
for y := 0; y < h && y < cb.h; y++ {
|
||||||
|
for x := 0; x < w && x < cb.w; x++ {
|
||||||
|
oc := &cb.cells[(y*cb.w)+x]
|
||||||
|
nc := &newc[(y*w)+x]
|
||||||
|
nc.currMain = oc.currMain
|
||||||
|
nc.currComb = oc.currComb
|
||||||
|
nc.currStyle = oc.currStyle
|
||||||
|
nc.width = oc.width
|
||||||
|
nc.lastMain = rune(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cb.cells = newc
|
||||||
|
cb.h = h
|
||||||
|
cb.w = w
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill fills the entire cell buffer array with the specified character
|
||||||
|
// and style. Normally choose ' ' to clear the screen. This API doesn't
|
||||||
|
// support combining characters.
|
||||||
|
func (cb *CellBuffer) Fill(r rune, style Style) {
|
||||||
|
for i := range cb.cells {
|
||||||
|
c := &cb.cells[i]
|
||||||
|
c.currMain = r
|
||||||
|
c.currComb = nil
|
||||||
|
c.currStyle = style
|
||||||
|
}
|
||||||
|
}
|
21
vendor/github.com/gdamore/tcell/charset_stub.go
generated
vendored
Normal file
21
vendor/github.com/gdamore/tcell/charset_stub.go
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// +build plan9 nacl
|
||||||
|
|
||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
func getCharset() string {
|
||||||
|
return ""
|
||||||
|
}
|
49
vendor/github.com/gdamore/tcell/charset_unix.go
generated
vendored
Normal file
49
vendor/github.com/gdamore/tcell/charset_unix.go
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// +build !windows,!nacl,!plan9
|
||||||
|
|
||||||
|
// Copyright 2016 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getCharset() string {
|
||||||
|
// Determine the character set. This can help us later.
|
||||||
|
// Per POSIX, we search for LC_ALL first, then LC_CTYPE, and
|
||||||
|
// finally LANG. First one set wins.
|
||||||
|
locale := ""
|
||||||
|
if locale = os.Getenv("LC_ALL"); locale == "" {
|
||||||
|
if locale = os.Getenv("LC_CTYPE"); locale == "" {
|
||||||
|
locale = os.Getenv("LANG")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if locale == "POSIX" || locale == "C" {
|
||||||
|
return "US-ASCII"
|
||||||
|
}
|
||||||
|
if i := strings.IndexRune(locale, '@'); i >= 0 {
|
||||||
|
locale = locale[:i]
|
||||||
|
}
|
||||||
|
if i := strings.IndexRune(locale, '.'); i >= 0 {
|
||||||
|
locale = locale[i+1:]
|
||||||
|
} else {
|
||||||
|
// Default assumption, and on Linux we can see LC_ALL
|
||||||
|
// without a character set, which we assume implies UTF-8.
|
||||||
|
return "UTF-8"
|
||||||
|
}
|
||||||
|
// XXX: add support for aliases
|
||||||
|
return locale
|
||||||
|
}
|
21
vendor/github.com/gdamore/tcell/charset_windows.go
generated
vendored
Normal file
21
vendor/github.com/gdamore/tcell/charset_windows.go
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
func getCharset() string {
|
||||||
|
return "UTF-16"
|
||||||
|
}
|
1019
vendor/github.com/gdamore/tcell/color.go
generated
vendored
Normal file
1019
vendor/github.com/gdamore/tcell/color.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
52
vendor/github.com/gdamore/tcell/colorfit.go
generated
vendored
Normal file
52
vendor/github.com/gdamore/tcell/colorfit.go
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Copyright 2016 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/lucasb-eyer/go-colorful"
|
||||||
|
"math"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FindColor attempts to find a given color, or the best match possible for it,
|
||||||
|
// from the palette given. This is an expensive operation, so results should
|
||||||
|
// be cached by the caller.
|
||||||
|
func FindColor(c Color, palette []Color) Color {
|
||||||
|
match := ColorDefault
|
||||||
|
dist := float64(0)
|
||||||
|
r, g, b := c.RGB()
|
||||||
|
c1 := colorful.Color{
|
||||||
|
R: float64(r) / 255.0,
|
||||||
|
G: float64(g) / 255.0,
|
||||||
|
B: float64(b) / 255.0,
|
||||||
|
}
|
||||||
|
for _, d := range palette {
|
||||||
|
r, g, b = d.RGB()
|
||||||
|
c2 := colorful.Color{
|
||||||
|
R: float64(r) / 255.0,
|
||||||
|
G: float64(g) / 255.0,
|
||||||
|
B: float64(b) / 255.0,
|
||||||
|
}
|
||||||
|
// CIE94 is more accurate, but really really expensive.
|
||||||
|
nd := c1.DistanceCIE76(c2)
|
||||||
|
if math.IsNaN(nd) {
|
||||||
|
nd = math.Inf(1)
|
||||||
|
}
|
||||||
|
if match == ColorDefault || nd < dist {
|
||||||
|
match = d
|
||||||
|
dist = nd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return match
|
||||||
|
}
|
23
vendor/github.com/gdamore/tcell/console_stub.go
generated
vendored
Normal file
23
vendor/github.com/gdamore/tcell/console_stub.go
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// +build !windows
|
||||||
|
|
||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
// NewConsoleScreen returns a console based screen. This platform
|
||||||
|
// doesn't have support for any, so it returns nil and a suitable error.
|
||||||
|
func NewConsoleScreen() (Screen, error) {
|
||||||
|
return nil, ErrNoScreen
|
||||||
|
}
|
1025
vendor/github.com/gdamore/tcell/console_win.go
generated
vendored
Normal file
1025
vendor/github.com/gdamore/tcell/console_win.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1351
vendor/github.com/gdamore/tcell/database.json
generated
vendored
Normal file
1351
vendor/github.com/gdamore/tcell/database.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
40
vendor/github.com/gdamore/tcell/doc.go
generated
vendored
Normal file
40
vendor/github.com/gdamore/tcell/doc.go
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package tcell provides a lower-level, portable API for building
|
||||||
|
// programs that interact with terminals or consoles. It works with
|
||||||
|
// both common (and many uncommon!) terminals or terminal emulators,
|
||||||
|
// and Windows console implementations.
|
||||||
|
//
|
||||||
|
// It provides support for up to 256 colors, text attributes, and box drawing
|
||||||
|
// elements. A database of terminals built from a real terminfo database
|
||||||
|
// is provided, along with code to generate new database entries.
|
||||||
|
//
|
||||||
|
// Tcell offers very rich support for mice, dependent upon the terminal
|
||||||
|
// of course. (Windows, XTerm, and iTerm 2 are known to work very well.)
|
||||||
|
//
|
||||||
|
// If the environment is not Unicode by default, such as an ISO8859 based
|
||||||
|
// locale or GB18030, Tcell can convert input and outupt, so that your
|
||||||
|
// terminal can operate in whatever locale is most convenient, while the
|
||||||
|
// application program can just assume "everything is UTF-8". Reasonable
|
||||||
|
// defaults are used for updating characters to something suitable for
|
||||||
|
// display. Unicode box drawing characters will be converted to use the
|
||||||
|
// alternate character set of your terminal, if native conversions are
|
||||||
|
// not available. If no ACS is available, then some ASCII fallbacks will
|
||||||
|
// be used.
|
||||||
|
//
|
||||||
|
// A rich set of keycodes is supported, with support for up to 65 function
|
||||||
|
// keys, and various other special keys.
|
||||||
|
//
|
||||||
|
package tcell
|
139
vendor/github.com/gdamore/tcell/encoding.go
generated
vendored
Normal file
139
vendor/github.com/gdamore/tcell/encoding.go
generated
vendored
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"golang.org/x/text/encoding"
|
||||||
|
|
||||||
|
gencoding "github.com/gdamore/encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
var encodings map[string]encoding.Encoding
|
||||||
|
var encodingLk sync.Mutex
|
||||||
|
var encodingFallback EncodingFallback = EncodingFallbackFail
|
||||||
|
|
||||||
|
// RegisterEncoding may be called by the application to register an encoding.
|
||||||
|
// The presence of additional encodings will facilitate application usage with
|
||||||
|
// terminal environments where the I/O subsystem does not support Unicode.
|
||||||
|
//
|
||||||
|
// Windows systems use Unicode natively, and do not need any of the encoding
|
||||||
|
// subsystem when using Windows Console screens.
|
||||||
|
//
|
||||||
|
// Please see the Go documentation for golang.org/x/text/encoding -- most of
|
||||||
|
// the common ones exist already as stock variables. For example, ISO8859-15
|
||||||
|
// can be registered using the following code:
|
||||||
|
//
|
||||||
|
// import "golang.org/x/text/encoding/charmap"
|
||||||
|
//
|
||||||
|
// ...
|
||||||
|
// RegisterEncoding("ISO8859-15", charmap.ISO8859_15)
|
||||||
|
//
|
||||||
|
// Aliases can be registered as well, for example "8859-15" could be an alias
|
||||||
|
// for "ISO8859-15".
|
||||||
|
//
|
||||||
|
// For POSIX systems, the tcell package will check the environment variables
|
||||||
|
// LC_ALL, LC_CTYPE, and LANG (in that order) to determine the character set.
|
||||||
|
// These are expected to have the following pattern:
|
||||||
|
//
|
||||||
|
// $language[.$codeset[@$variant]
|
||||||
|
//
|
||||||
|
// We extract only the $codeset part, which will usually be something like
|
||||||
|
// UTF-8 or ISO8859-15 or KOI8-R. Note that if the locale is either "POSIX"
|
||||||
|
// or "C", then we assume US-ASCII (the POSIX 'portable character set'
|
||||||
|
// and assume all other characters are somehow invalid.)
|
||||||
|
//
|
||||||
|
// Modern POSIX systems and terminal emulators may use UTF-8, and for those
|
||||||
|
// systems, this API is also unnecessary. For example, Darwin (MacOS X) and
|
||||||
|
// modern Linux running modern xterm generally will out of the box without
|
||||||
|
// any of this. Use of UTF-8 is recommended when possible, as it saves
|
||||||
|
// quite a lot processing overhead.
|
||||||
|
//
|
||||||
|
// Note that some encodings are quite large (for example GB18030 which is a
|
||||||
|
// superset of Unicode) and so the application size can be expected ot
|
||||||
|
// increase quite a bit as each encoding is added. The East Asian encodings
|
||||||
|
// have been seen to add 100-200K per encoding to the application size.
|
||||||
|
//
|
||||||
|
func RegisterEncoding(charset string, enc encoding.Encoding) {
|
||||||
|
encodingLk.Lock()
|
||||||
|
charset = strings.ToLower(charset)
|
||||||
|
encodings[charset] = enc
|
||||||
|
encodingLk.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
// EncodingFallback describes how the system behavees when the locale
|
||||||
|
// requires a character set that we do not support. The system always
|
||||||
|
// supports UTF-8 and US-ASCII. On Windows consoles, UTF-16LE is also
|
||||||
|
// supported automatically. Other character sets must be added using the
|
||||||
|
// RegisterEncoding API. (A large group of nearly all of them can be
|
||||||
|
// added using the RegisterAll function in the encoding sub package.)
|
||||||
|
type EncodingFallback int
|
||||||
|
|
||||||
|
const (
|
||||||
|
// EncodingFallbackFail behavior causes GetEncoding to fail
|
||||||
|
// when it cannot find an encoding.
|
||||||
|
EncodingFallbackFail = iota
|
||||||
|
|
||||||
|
// EncodingFallbackASCII behaviore causes GetEncoding to fall back
|
||||||
|
// to a 7-bit ASCII encoding, if no other encoding can be found.
|
||||||
|
EncodingFallbackASCII
|
||||||
|
|
||||||
|
// EncodingFallbackUTF8 behavior causes GetEncoding to assume
|
||||||
|
// UTF8 can pass unmodified upon failure. Note that this behavior
|
||||||
|
// is not recommended, unless you are sure your terminal can cope
|
||||||
|
// with real UTF8 sequences.
|
||||||
|
EncodingFallbackUTF8
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetEncodingFallback changes the behavior of GetEncoding when a suitable
|
||||||
|
// encoding is not found. The default is EncodingFallbackFail, which
|
||||||
|
// causes GetEncoding to simply return nil.
|
||||||
|
func SetEncodingFallback(fb EncodingFallback) {
|
||||||
|
encodingLk.Lock()
|
||||||
|
encodingFallback = fb
|
||||||
|
encodingLk.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEncoding is used by Screen implementors who want to locate an encoding
|
||||||
|
// for the given character set name. Note that this will return nil for
|
||||||
|
// either the Unicode (UTF-8) or ASCII encodings, since we don't use
|
||||||
|
// encodings for them but instead have our own native methods.
|
||||||
|
func GetEncoding(charset string) encoding.Encoding {
|
||||||
|
charset = strings.ToLower(charset)
|
||||||
|
encodingLk.Lock()
|
||||||
|
defer encodingLk.Unlock()
|
||||||
|
if enc, ok := encodings[charset]; ok {
|
||||||
|
return enc
|
||||||
|
}
|
||||||
|
switch encodingFallback {
|
||||||
|
case EncodingFallbackASCII:
|
||||||
|
return gencoding.ASCII
|
||||||
|
case EncodingFallbackUTF8:
|
||||||
|
return encoding.Nop
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// We always support UTF-8 and ASCII.
|
||||||
|
encodings = make(map[string]encoding.Encoding)
|
||||||
|
encodings["utf-8"] = gencoding.UTF8
|
||||||
|
encodings["utf8"] = gencoding.UTF8
|
||||||
|
encodings["us-ascii"] = gencoding.ASCII
|
||||||
|
encodings["ascii"] = gencoding.ASCII
|
||||||
|
encodings["iso646"] = gencoding.ASCII
|
||||||
|
}
|
73
vendor/github.com/gdamore/tcell/errors.go
generated
vendored
Normal file
73
vendor/github.com/gdamore/tcell/errors.go
generated
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gdamore/tcell/terminfo"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ErrTermNotFound indicates that a suitable terminal entry could
|
||||||
|
// not be found. This can result from either not having TERM set,
|
||||||
|
// or from the TERM failing to support certain minimal functionality,
|
||||||
|
// in particular absolute cursor addressability (the cup capability)
|
||||||
|
// is required. For example, legacy "adm3" lacks this capability,
|
||||||
|
// whereas the slightly newer "adm3a" supports it. This failure
|
||||||
|
// occurs most often with "dumb".
|
||||||
|
ErrTermNotFound = terminfo.ErrTermNotFound
|
||||||
|
|
||||||
|
// ErrNoScreen indicates that no suitable screen could be found.
|
||||||
|
// This may result from attempting to run on a platform where there
|
||||||
|
// is no support for either termios or console I/O (such as nacl),
|
||||||
|
// or from running in an environment where there is no access to
|
||||||
|
// a suitable console/terminal device. (For example, running on
|
||||||
|
// without a controlling TTY or with no /dev/tty on POSIX platforms.)
|
||||||
|
ErrNoScreen = errors.New("no suitable screen available")
|
||||||
|
|
||||||
|
// ErrNoCharset indicates that the locale environment the
|
||||||
|
// program is not supported by the program, because no suitable
|
||||||
|
// encoding was found for it. This problem never occurs if
|
||||||
|
// the environment is UTF-8 or UTF-16.
|
||||||
|
ErrNoCharset = errors.New("character set not supported")
|
||||||
|
|
||||||
|
// ErrEventQFull indicates that the event queue is full, and
|
||||||
|
// cannot accept more events.
|
||||||
|
ErrEventQFull = errors.New("event queue full")
|
||||||
|
)
|
||||||
|
|
||||||
|
// An EventError is an event representing some sort of error, and carries
|
||||||
|
// an error payload.
|
||||||
|
type EventError struct {
|
||||||
|
t time.Time
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
// When returns the time when the event was created.
|
||||||
|
func (ev *EventError) When() time.Time {
|
||||||
|
return ev.t
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error implements the error.
|
||||||
|
func (ev *EventError) Error() string {
|
||||||
|
return ev.err.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEventError creates an ErrorEvent with the given error payload.
|
||||||
|
func NewEventError(err error) *EventError {
|
||||||
|
return &EventError{t: time.Now(), err: err}
|
||||||
|
}
|
53
vendor/github.com/gdamore/tcell/event.go
generated
vendored
Normal file
53
vendor/github.com/gdamore/tcell/event.go
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Event is a generic interface used for passing around Events.
|
||||||
|
// Concrete types follow.
|
||||||
|
type Event interface {
|
||||||
|
// When reports the time when the event was generated.
|
||||||
|
When() time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventTime is a simple base event class, suitable for easy reuse.
|
||||||
|
// It can be used to deliver actual timer events as well.
|
||||||
|
type EventTime struct {
|
||||||
|
when time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
// When returns the time stamp when the event occurred.
|
||||||
|
func (e *EventTime) When() time.Time {
|
||||||
|
return e.when
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEventTime sets the time of occurrence for the event.
|
||||||
|
func (e *EventTime) SetEventTime(t time.Time) {
|
||||||
|
e.when = t
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEventNow sets the time of occurrence for the event to the current time.
|
||||||
|
func (e *EventTime) SetEventNow() {
|
||||||
|
e.SetEventTime(time.Now())
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventHandler is anything that handles events. If the handler has
|
||||||
|
// consumed the event, it should return true. False otherwise.
|
||||||
|
type EventHandler interface {
|
||||||
|
HandleEvent(Event) bool
|
||||||
|
}
|
41
vendor/github.com/gdamore/tcell/interrupt.go
generated
vendored
Normal file
41
vendor/github.com/gdamore/tcell/interrupt.go
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EventInterrupt is a generic wakeup event. Its can be used to
|
||||||
|
// to request a redraw. It can carry an arbitrary payload, as well.
|
||||||
|
type EventInterrupt struct {
|
||||||
|
t time.Time
|
||||||
|
v interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When returns the time when this event was created.
|
||||||
|
func (ev *EventInterrupt) When() time.Time {
|
||||||
|
return ev.t
|
||||||
|
}
|
||||||
|
|
||||||
|
// Data is used to obtain the opaque event payload.
|
||||||
|
func (ev *EventInterrupt) Data() interface{} {
|
||||||
|
return ev.v
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEventInterrupt creates an EventInterrupt with the given payload.
|
||||||
|
func NewEventInterrupt(data interface{}) *EventInterrupt {
|
||||||
|
return &EventInterrupt{t: time.Now(), v: data}
|
||||||
|
}
|
464
vendor/github.com/gdamore/tcell/key.go
generated
vendored
Normal file
464
vendor/github.com/gdamore/tcell/key.go
generated
vendored
Normal file
@ -0,0 +1,464 @@
|
|||||||
|
// Copyright 2016 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EventKey represents a key press. Usually this is a key press followed
|
||||||
|
// by a key release, but since terminal programs don't have a way to report
|
||||||
|
// key release events, we usually get just one event. If a key is held down
|
||||||
|
// then the terminal may synthesize repeated key presses at some predefined
|
||||||
|
// rate. We have no control over that, nor visibility into it.
|
||||||
|
//
|
||||||
|
// In some cases, we can have a modifier key, such as ModAlt, that can be
|
||||||
|
// generated with a key press. (This usually is represented by having the
|
||||||
|
// high bit set, or in some cases, by sending an ESC prior to the rune.)
|
||||||
|
//
|
||||||
|
// If the value of Key() is KeyRune, then the actual key value will be
|
||||||
|
// available with the Rune() method. This will be the case for most keys.
|
||||||
|
// In most situations, the modifiers will not be set. For example, if the
|
||||||
|
// rune is 'A', this will be reported without the ModShift bit set, since
|
||||||
|
// really can't tell if the Shift key was pressed (it might have been CAPSLOCK,
|
||||||
|
// or a terminal that only can send capitals, or keyboard with separate
|
||||||
|
// capital letters from lower case letters).
|
||||||
|
//
|
||||||
|
// Generally, terminal applications have far less visibility into keyboard
|
||||||
|
// activity than graphical applications. Hence, they should avoid depending
|
||||||
|
// overly much on availability of modifiers, or the availability of any
|
||||||
|
// specific keys.
|
||||||
|
type EventKey struct {
|
||||||
|
t time.Time
|
||||||
|
mod ModMask
|
||||||
|
key Key
|
||||||
|
ch rune
|
||||||
|
}
|
||||||
|
|
||||||
|
// When returns the time when this Event was created, which should closely
|
||||||
|
// match the time when the key was pressed.
|
||||||
|
func (ev *EventKey) When() time.Time {
|
||||||
|
return ev.t
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rune returns the rune corresponding to the key press, if it makes sense.
|
||||||
|
// The result is only defined if the value of Key() is KeyRune.
|
||||||
|
func (ev *EventKey) Rune() rune {
|
||||||
|
return ev.ch
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key returns a virtual key code. We use this to identify specific key
|
||||||
|
// codes, such as KeyEnter, etc. Most control and function keys are reported
|
||||||
|
// with unique Key values. Normal alphanumeric and punctuation keys will
|
||||||
|
// generally return KeyRune here; the specific key can be further decoded
|
||||||
|
// using the Rune() function.
|
||||||
|
func (ev *EventKey) Key() Key {
|
||||||
|
return ev.key
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modifiers returns the modifiers that were present with the key press. Note
|
||||||
|
// that not all platforms and terminals support this equally well, and some
|
||||||
|
// cases we will not not know for sure. Hence, applications should avoid
|
||||||
|
// using this in most circumstances.
|
||||||
|
func (ev *EventKey) Modifiers() ModMask {
|
||||||
|
return ev.mod
|
||||||
|
}
|
||||||
|
|
||||||
|
// KeyNames holds the written names of special keys. Useful to echo back a key
|
||||||
|
// name, or to look up a key from a string value.
|
||||||
|
var KeyNames = map[Key]string{
|
||||||
|
KeyEnter: "Enter",
|
||||||
|
KeyBackspace: "Backspace",
|
||||||
|
KeyTab: "Tab",
|
||||||
|
KeyBacktab: "Backtab",
|
||||||
|
KeyEsc: "Esc",
|
||||||
|
KeyBackspace2: "Backspace2",
|
||||||
|
KeyDelete: "Delete",
|
||||||
|
KeyInsert: "Insert",
|
||||||
|
KeyUp: "Up",
|
||||||
|
KeyDown: "Down",
|
||||||
|
KeyLeft: "Left",
|
||||||
|
KeyRight: "Right",
|
||||||
|
KeyHome: "Home",
|
||||||
|
KeyEnd: "End",
|
||||||
|
KeyUpLeft: "UpLeft",
|
||||||
|
KeyUpRight: "UpRight",
|
||||||
|
KeyDownLeft: "DownLeft",
|
||||||
|
KeyDownRight: "DownRight",
|
||||||
|
KeyCenter: "Center",
|
||||||
|
KeyPgDn: "PgDn",
|
||||||
|
KeyPgUp: "PgUp",
|
||||||
|
KeyClear: "Clear",
|
||||||
|
KeyExit: "Exit",
|
||||||
|
KeyCancel: "Cancel",
|
||||||
|
KeyPause: "Pause",
|
||||||
|
KeyPrint: "Print",
|
||||||
|
KeyF1: "F1",
|
||||||
|
KeyF2: "F2",
|
||||||
|
KeyF3: "F3",
|
||||||
|
KeyF4: "F4",
|
||||||
|
KeyF5: "F5",
|
||||||
|
KeyF6: "F6",
|
||||||
|
KeyF7: "F7",
|
||||||
|
KeyF8: "F8",
|
||||||
|
KeyF9: "F9",
|
||||||
|
KeyF10: "F10",
|
||||||
|
KeyF11: "F11",
|
||||||
|
KeyF12: "F12",
|
||||||
|
KeyF13: "F13",
|
||||||
|
KeyF14: "F14",
|
||||||
|
KeyF15: "F15",
|
||||||
|
KeyF16: "F16",
|
||||||
|
KeyF17: "F17",
|
||||||
|
KeyF18: "F18",
|
||||||
|
KeyF19: "F19",
|
||||||
|
KeyF20: "F20",
|
||||||
|
KeyF21: "F21",
|
||||||
|
KeyF22: "F22",
|
||||||
|
KeyF23: "F23",
|
||||||
|
KeyF24: "F24",
|
||||||
|
KeyF25: "F25",
|
||||||
|
KeyF26: "F26",
|
||||||
|
KeyF27: "F27",
|
||||||
|
KeyF28: "F28",
|
||||||
|
KeyF29: "F29",
|
||||||
|
KeyF30: "F30",
|
||||||
|
KeyF31: "F31",
|
||||||
|
KeyF32: "F32",
|
||||||
|
KeyF33: "F33",
|
||||||
|
KeyF34: "F34",
|
||||||
|
KeyF35: "F35",
|
||||||
|
KeyF36: "F36",
|
||||||
|
KeyF37: "F37",
|
||||||
|
KeyF38: "F38",
|
||||||
|
KeyF39: "F39",
|
||||||
|
KeyF40: "F40",
|
||||||
|
KeyF41: "F41",
|
||||||
|
KeyF42: "F42",
|
||||||
|
KeyF43: "F43",
|
||||||
|
KeyF44: "F44",
|
||||||
|
KeyF45: "F45",
|
||||||
|
KeyF46: "F46",
|
||||||
|
KeyF47: "F47",
|
||||||
|
KeyF48: "F48",
|
||||||
|
KeyF49: "F49",
|
||||||
|
KeyF50: "F50",
|
||||||
|
KeyF51: "F51",
|
||||||
|
KeyF52: "F52",
|
||||||
|
KeyF53: "F53",
|
||||||
|
KeyF54: "F54",
|
||||||
|
KeyF55: "F55",
|
||||||
|
KeyF56: "F56",
|
||||||
|
KeyF57: "F57",
|
||||||
|
KeyF58: "F58",
|
||||||
|
KeyF59: "F59",
|
||||||
|
KeyF60: "F60",
|
||||||
|
KeyF61: "F61",
|
||||||
|
KeyF62: "F62",
|
||||||
|
KeyF63: "F63",
|
||||||
|
KeyF64: "F64",
|
||||||
|
KeyCtrlA: "Ctrl-A",
|
||||||
|
KeyCtrlB: "Ctrl-B",
|
||||||
|
KeyCtrlC: "Ctrl-C",
|
||||||
|
KeyCtrlD: "Ctrl-D",
|
||||||
|
KeyCtrlE: "Ctrl-E",
|
||||||
|
KeyCtrlF: "Ctrl-F",
|
||||||
|
KeyCtrlG: "Ctrl-G",
|
||||||
|
KeyCtrlJ: "Ctrl-J",
|
||||||
|
KeyCtrlK: "Ctrl-K",
|
||||||
|
KeyCtrlL: "Ctrl-L",
|
||||||
|
KeyCtrlN: "Ctrl-N",
|
||||||
|
KeyCtrlO: "Ctrl-O",
|
||||||
|
KeyCtrlP: "Ctrl-P",
|
||||||
|
KeyCtrlQ: "Ctrl-Q",
|
||||||
|
KeyCtrlR: "Ctrl-R",
|
||||||
|
KeyCtrlS: "Ctrl-S",
|
||||||
|
KeyCtrlT: "Ctrl-T",
|
||||||
|
KeyCtrlU: "Ctrl-U",
|
||||||
|
KeyCtrlV: "Ctrl-V",
|
||||||
|
KeyCtrlW: "Ctrl-W",
|
||||||
|
KeyCtrlX: "Ctrl-X",
|
||||||
|
KeyCtrlY: "Ctrl-Y",
|
||||||
|
KeyCtrlZ: "Ctrl-Z",
|
||||||
|
KeyCtrlSpace: "Ctrl-Space",
|
||||||
|
KeyCtrlUnderscore: "Ctrl-_",
|
||||||
|
KeyCtrlRightSq: "Ctrl-]",
|
||||||
|
KeyCtrlBackslash: "Ctrl-\\",
|
||||||
|
KeyCtrlCarat: "Ctrl-^",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Name returns a printable value or the key stroke. This can be used
|
||||||
|
// when printing the event, for example.
|
||||||
|
func (ev *EventKey) Name() string {
|
||||||
|
s := ""
|
||||||
|
m := []string{}
|
||||||
|
if ev.mod&ModShift != 0 {
|
||||||
|
m = append(m, "Shift")
|
||||||
|
}
|
||||||
|
if ev.mod&ModAlt != 0 {
|
||||||
|
m = append(m, "Alt")
|
||||||
|
}
|
||||||
|
if ev.mod&ModMeta != 0 {
|
||||||
|
m = append(m, "Meta")
|
||||||
|
}
|
||||||
|
if ev.mod&ModCtrl != 0 {
|
||||||
|
m = append(m, "Ctrl")
|
||||||
|
}
|
||||||
|
|
||||||
|
ok := false
|
||||||
|
if s, ok = KeyNames[ev.key]; !ok {
|
||||||
|
if ev.key == KeyRune {
|
||||||
|
s = "Rune[" + string(ev.ch) + "]"
|
||||||
|
} else {
|
||||||
|
s = fmt.Sprintf("Key[%d,%d]", ev.key, int(ev.ch))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(m) != 0 {
|
||||||
|
if ev.mod&ModCtrl != 0 && strings.HasPrefix(s, "Ctrl-") {
|
||||||
|
s = s[5:]
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s+%s", strings.Join(m, "+"), s)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEventKey attempts to create a suitable event. It parses the various
|
||||||
|
// ASCII control sequences if KeyRune is passed for Key, but if the caller
|
||||||
|
// has more precise information it should set that specifically. Callers
|
||||||
|
// that aren't sure about modifier state (most) should just pass ModNone.
|
||||||
|
func NewEventKey(k Key, ch rune, mod ModMask) *EventKey {
|
||||||
|
if k == KeyRune && (ch < ' ' || ch == 0x7f) {
|
||||||
|
// Turn specials into proper key codes. This is for
|
||||||
|
// control characters and the DEL.
|
||||||
|
k = Key(ch)
|
||||||
|
if mod == ModNone && ch < ' ' {
|
||||||
|
switch Key(ch) {
|
||||||
|
case KeyBackspace, KeyTab, KeyEsc, KeyEnter:
|
||||||
|
// these keys are directly typeable without CTRL
|
||||||
|
default:
|
||||||
|
// most likely entered with a CTRL keypress
|
||||||
|
mod = ModCtrl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &EventKey{t: time.Now(), key: k, ch: ch, mod: mod}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModMask is a mask of modifier keys. Note that it will not always be
|
||||||
|
// possible to report modifier keys.
|
||||||
|
type ModMask int16
|
||||||
|
|
||||||
|
// These are the modifiers keys that can be sent either with a key press,
|
||||||
|
// or a mouse event. Note that as of now, due to the confusion associated
|
||||||
|
// with Meta, and the lack of support for it on many/most platforms, the
|
||||||
|
// current implementations never use it. Instead, they use ModAlt, even for
|
||||||
|
// events that could possibly have been distinguished from ModAlt.
|
||||||
|
const (
|
||||||
|
ModShift ModMask = 1 << iota
|
||||||
|
ModCtrl
|
||||||
|
ModAlt
|
||||||
|
ModMeta
|
||||||
|
ModNone ModMask = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
// Key is a generic value for representing keys, and especially special
|
||||||
|
// keys (function keys, cursor movement keys, etc.) For normal keys, like
|
||||||
|
// ASCII letters, we use KeyRune, and then expect the application to
|
||||||
|
// inspect the Rune() member of the EventKey.
|
||||||
|
type Key int16
|
||||||
|
|
||||||
|
// This is the list of named keys. KeyRune is special however, in that it is
|
||||||
|
// a place holder key indicating that a printable character was sent. The
|
||||||
|
// actual value of the rune will be transported in the Rune of the associated
|
||||||
|
// EventKey.
|
||||||
|
const (
|
||||||
|
KeyRune Key = iota + 256
|
||||||
|
KeyUp
|
||||||
|
KeyDown
|
||||||
|
KeyRight
|
||||||
|
KeyLeft
|
||||||
|
KeyUpLeft
|
||||||
|
KeyUpRight
|
||||||
|
KeyDownLeft
|
||||||
|
KeyDownRight
|
||||||
|
KeyCenter
|
||||||
|
KeyPgUp
|
||||||
|
KeyPgDn
|
||||||
|
KeyHome
|
||||||
|
KeyEnd
|
||||||
|
KeyInsert
|
||||||
|
KeyDelete
|
||||||
|
KeyHelp
|
||||||
|
KeyExit
|
||||||
|
KeyClear
|
||||||
|
KeyCancel
|
||||||
|
KeyPrint
|
||||||
|
KeyPause
|
||||||
|
KeyBacktab
|
||||||
|
KeyF1
|
||||||
|
KeyF2
|
||||||
|
KeyF3
|
||||||
|
KeyF4
|
||||||
|
KeyF5
|
||||||
|
KeyF6
|
||||||
|
KeyF7
|
||||||
|
KeyF8
|
||||||
|
KeyF9
|
||||||
|
KeyF10
|
||||||
|
KeyF11
|
||||||
|
KeyF12
|
||||||
|
KeyF13
|
||||||
|
KeyF14
|
||||||
|
KeyF15
|
||||||
|
KeyF16
|
||||||
|
KeyF17
|
||||||
|
KeyF18
|
||||||
|
KeyF19
|
||||||
|
KeyF20
|
||||||
|
KeyF21
|
||||||
|
KeyF22
|
||||||
|
KeyF23
|
||||||
|
KeyF24
|
||||||
|
KeyF25
|
||||||
|
KeyF26
|
||||||
|
KeyF27
|
||||||
|
KeyF28
|
||||||
|
KeyF29
|
||||||
|
KeyF30
|
||||||
|
KeyF31
|
||||||
|
KeyF32
|
||||||
|
KeyF33
|
||||||
|
KeyF34
|
||||||
|
KeyF35
|
||||||
|
KeyF36
|
||||||
|
KeyF37
|
||||||
|
KeyF38
|
||||||
|
KeyF39
|
||||||
|
KeyF40
|
||||||
|
KeyF41
|
||||||
|
KeyF42
|
||||||
|
KeyF43
|
||||||
|
KeyF44
|
||||||
|
KeyF45
|
||||||
|
KeyF46
|
||||||
|
KeyF47
|
||||||
|
KeyF48
|
||||||
|
KeyF49
|
||||||
|
KeyF50
|
||||||
|
KeyF51
|
||||||
|
KeyF52
|
||||||
|
KeyF53
|
||||||
|
KeyF54
|
||||||
|
KeyF55
|
||||||
|
KeyF56
|
||||||
|
KeyF57
|
||||||
|
KeyF58
|
||||||
|
KeyF59
|
||||||
|
KeyF60
|
||||||
|
KeyF61
|
||||||
|
KeyF62
|
||||||
|
KeyF63
|
||||||
|
KeyF64
|
||||||
|
)
|
||||||
|
|
||||||
|
// These are the control keys. Note that they overlap with other keys,
|
||||||
|
// perhaps. For example, KeyCtrlH is the same as KeyBackspace.
|
||||||
|
const (
|
||||||
|
KeyCtrlSpace Key = iota
|
||||||
|
KeyCtrlA
|
||||||
|
KeyCtrlB
|
||||||
|
KeyCtrlC
|
||||||
|
KeyCtrlD
|
||||||
|
KeyCtrlE
|
||||||
|
KeyCtrlF
|
||||||
|
KeyCtrlG
|
||||||
|
KeyCtrlH
|
||||||
|
KeyCtrlI
|
||||||
|
KeyCtrlJ
|
||||||
|
KeyCtrlK
|
||||||
|
KeyCtrlL
|
||||||
|
KeyCtrlM
|
||||||
|
KeyCtrlN
|
||||||
|
KeyCtrlO
|
||||||
|
KeyCtrlP
|
||||||
|
KeyCtrlQ
|
||||||
|
KeyCtrlR
|
||||||
|
KeyCtrlS
|
||||||
|
KeyCtrlT
|
||||||
|
KeyCtrlU
|
||||||
|
KeyCtrlV
|
||||||
|
KeyCtrlW
|
||||||
|
KeyCtrlX
|
||||||
|
KeyCtrlY
|
||||||
|
KeyCtrlZ
|
||||||
|
KeyCtrlLeftSq // Escape
|
||||||
|
KeyCtrlBackslash
|
||||||
|
KeyCtrlRightSq
|
||||||
|
KeyCtrlCarat
|
||||||
|
KeyCtrlUnderscore
|
||||||
|
)
|
||||||
|
|
||||||
|
// Special values - these are fixed in an attempt to make it more likely
|
||||||
|
// that aliases will encode the same way.
|
||||||
|
|
||||||
|
// These are the defined ASCII values for key codes. They generally match
|
||||||
|
// with KeyCtrl values.
|
||||||
|
const (
|
||||||
|
KeyNUL Key = iota
|
||||||
|
KeySOH
|
||||||
|
KeySTX
|
||||||
|
KeyETX
|
||||||
|
KeyEOT
|
||||||
|
KeyENQ
|
||||||
|
KeyACK
|
||||||
|
KeyBEL
|
||||||
|
KeyBS
|
||||||
|
KeyTAB
|
||||||
|
KeyLF
|
||||||
|
KeyVT
|
||||||
|
KeyFF
|
||||||
|
KeyCR
|
||||||
|
KeySO
|
||||||
|
KeySI
|
||||||
|
KeyDLE
|
||||||
|
KeyDC1
|
||||||
|
KeyDC2
|
||||||
|
KeyDC3
|
||||||
|
KeyDC4
|
||||||
|
KeyNAK
|
||||||
|
KeySYN
|
||||||
|
KeyETB
|
||||||
|
KeyCAN
|
||||||
|
KeyEM
|
||||||
|
KeySUB
|
||||||
|
KeyESC
|
||||||
|
KeyFS
|
||||||
|
KeyGS
|
||||||
|
KeyRS
|
||||||
|
KeyUS
|
||||||
|
KeyDEL Key = 0x7F
|
||||||
|
)
|
||||||
|
|
||||||
|
// These keys are aliases for other names.
|
||||||
|
const (
|
||||||
|
KeyBackspace = KeyBS
|
||||||
|
KeyTab = KeyTAB
|
||||||
|
KeyEsc = KeyESC
|
||||||
|
KeyEscape = KeyESC
|
||||||
|
KeyEnter = KeyCR
|
||||||
|
KeyBackspace2 = KeyDEL
|
||||||
|
)
|
97
vendor/github.com/gdamore/tcell/mouse.go
generated
vendored
Normal file
97
vendor/github.com/gdamore/tcell/mouse.go
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EventMouse is a mouse event. It is sent on either mouse up or mouse down
|
||||||
|
// events. It is also sent on mouse motion events - if the terminal supports
|
||||||
|
// it. We make every effort to ensure that mouse release events are delivered.
|
||||||
|
// Hence, click drag can be identified by a motion event with the mouse down,
|
||||||
|
// without any intervening button release. On some terminals only the initiating
|
||||||
|
// press and terminating release event will be delivered.
|
||||||
|
//
|
||||||
|
// Mouse wheel events, when reported, may appear on their own as individual
|
||||||
|
// impulses; that is, there will normally not be a release event delivered
|
||||||
|
// for mouse wheel movements.
|
||||||
|
//
|
||||||
|
// Most terminals cannot report the state of more than one button at a time --
|
||||||
|
// and some cannot report motion events unless a button is pressed.
|
||||||
|
//
|
||||||
|
// Applications can inspect the time between events to resolve double or
|
||||||
|
// triple clicks.
|
||||||
|
type EventMouse struct {
|
||||||
|
t time.Time
|
||||||
|
btn ButtonMask
|
||||||
|
mod ModMask
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
}
|
||||||
|
|
||||||
|
// When returns the time when this EventMouse was created.
|
||||||
|
func (ev *EventMouse) When() time.Time {
|
||||||
|
return ev.t
|
||||||
|
}
|
||||||
|
|
||||||
|
// Buttons returns the list of buttons that were pressed or wheel motions.
|
||||||
|
func (ev *EventMouse) Buttons() ButtonMask {
|
||||||
|
return ev.btn
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modifiers returns a list of keyboard modifiers that were pressed
|
||||||
|
// with the mouse button(s).
|
||||||
|
func (ev *EventMouse) Modifiers() ModMask {
|
||||||
|
return ev.mod
|
||||||
|
}
|
||||||
|
|
||||||
|
// Position returns the mouse position in character cells. The origin
|
||||||
|
// 0, 0 is at the upper left corner.
|
||||||
|
func (ev *EventMouse) Position() (int, int) {
|
||||||
|
return ev.x, ev.y
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEventMouse is used to create a new mouse event. Applications
|
||||||
|
// shouldn't need to use this; its mostly for screen implementors.
|
||||||
|
func NewEventMouse(x, y int, btn ButtonMask, mod ModMask) *EventMouse {
|
||||||
|
return &EventMouse{t: time.Now(), x: x, y: y, btn: btn, mod: mod}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ButtonMask is a mask of mouse buttons and wheel events. Mouse button presses
|
||||||
|
// are normally delivered as both press and release events. Mouse wheel events
|
||||||
|
// are normally just single impulse events. Windows supports up to eight
|
||||||
|
// separate buttons plus all four wheel directions, but XTerm can only support
|
||||||
|
// mouse buttons 1-3 and wheel up/down. Its not unheard of for terminals
|
||||||
|
// to support only one or two buttons (think Macs). Old terminals, and true
|
||||||
|
// emulations (such as vt100) won't support mice at all, of course.
|
||||||
|
type ButtonMask int16
|
||||||
|
|
||||||
|
// These are the actual button values.
|
||||||
|
const (
|
||||||
|
Button1 ButtonMask = 1 << iota // Usually left mouse button.
|
||||||
|
Button2 // Usually the middle mouse button.
|
||||||
|
Button3 // Usually the right mouse button.
|
||||||
|
Button4 // Often a side button (thumb/next).
|
||||||
|
Button5 // Often a side button (thumb/prev).
|
||||||
|
Button6
|
||||||
|
Button7
|
||||||
|
Button8
|
||||||
|
WheelUp // Wheel motion up/away from user.
|
||||||
|
WheelDown // Wheel motion down/towards user.
|
||||||
|
WheelLeft // Wheel motion to left.
|
||||||
|
WheelRight // Wheel motion to right.
|
||||||
|
ButtonNone ButtonMask = 0 // No button or wheel events.
|
||||||
|
)
|
42
vendor/github.com/gdamore/tcell/resize.go
generated
vendored
Normal file
42
vendor/github.com/gdamore/tcell/resize.go
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EventResize is sent when the window size changes.
|
||||||
|
type EventResize struct {
|
||||||
|
t time.Time
|
||||||
|
w int
|
||||||
|
h int
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEventResize creates an EventResize with the new updated window size,
|
||||||
|
// which is given in character cells.
|
||||||
|
func NewEventResize(width, height int) *EventResize {
|
||||||
|
return &EventResize{t: time.Now(), w: width, h: height}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When returns the time when the Event was created.
|
||||||
|
func (ev *EventResize) When() time.Time {
|
||||||
|
return ev.t
|
||||||
|
}
|
||||||
|
|
||||||
|
// Size returns the new window size as width, height in character cells.
|
||||||
|
func (ev *EventResize) Size() (int, int) {
|
||||||
|
return ev.w, ev.h
|
||||||
|
}
|
111
vendor/github.com/gdamore/tcell/runes.go
generated
vendored
Normal file
111
vendor/github.com/gdamore/tcell/runes.go
generated
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
// The names of these constants are chosen to match Terminfo names,
|
||||||
|
// modulo case, and changing the prefix from ACS_ to Rune. These are
|
||||||
|
// the runes we provide extra special handling for, with ASCII fallbacks
|
||||||
|
// for terminals that lack them.
|
||||||
|
const (
|
||||||
|
RuneSterling = '£'
|
||||||
|
RuneDArrow = '↓'
|
||||||
|
RuneLArrow = '←'
|
||||||
|
RuneRArrow = '→'
|
||||||
|
RuneUArrow = '↑'
|
||||||
|
RuneBullet = '·'
|
||||||
|
RuneBoard = '░'
|
||||||
|
RuneCkBoard = '▒'
|
||||||
|
RuneDegree = '°'
|
||||||
|
RuneDiamond = '◆'
|
||||||
|
RuneGEqual = '≥'
|
||||||
|
RunePi = 'π'
|
||||||
|
RuneHLine = '─'
|
||||||
|
RuneLantern = '§'
|
||||||
|
RunePlus = '┼'
|
||||||
|
RuneLEqual = '≤'
|
||||||
|
RuneLLCorner = '└'
|
||||||
|
RuneLRCorner = '┘'
|
||||||
|
RuneNEqual = '≠'
|
||||||
|
RunePlMinus = '±'
|
||||||
|
RuneS1 = '⎺'
|
||||||
|
RuneS3 = '⎻'
|
||||||
|
RuneS7 = '⎼'
|
||||||
|
RuneS9 = '⎽'
|
||||||
|
RuneBlock = '█'
|
||||||
|
RuneTTee = '┬'
|
||||||
|
RuneRTee = '┤'
|
||||||
|
RuneLTee = '├'
|
||||||
|
RuneBTee = '┴'
|
||||||
|
RuneULCorner = '┌'
|
||||||
|
RuneURCorner = '┐'
|
||||||
|
RuneVLine = '│'
|
||||||
|
)
|
||||||
|
|
||||||
|
// RuneFallbacks is the default map of fallback strings that will be
|
||||||
|
// used to replace a rune when no other more appropriate transformation
|
||||||
|
// is available, and the rune cannot be displayed directly.
|
||||||
|
//
|
||||||
|
// New entries may be added to this map over time, as it becomes clear
|
||||||
|
// that such is desirable. Characters that represent either letters or
|
||||||
|
// numbers should not be added to this list unless it is certain that
|
||||||
|
// the meaning will still convey unambiguously.
|
||||||
|
//
|
||||||
|
// As an example, it would be appropriate to add an ASCII mapping for
|
||||||
|
// the full width form of the letter 'A', but it would not be appropriate
|
||||||
|
// to do so a glyph representing the country China.
|
||||||
|
//
|
||||||
|
// Programs that desire richer fallbacks may register additional ones,
|
||||||
|
// or change or even remove these mappings with Screen.RegisterRuneFallback
|
||||||
|
// Screen.UnregisterRuneFallback methods.
|
||||||
|
//
|
||||||
|
// Note that Unicode is presumed to be able to display all glyphs.
|
||||||
|
// This is a pretty poor assumption, but there is no easy way to
|
||||||
|
// figure out which glyphs are supported in a given font. Hence,
|
||||||
|
// some care in selecting the characters you support in your application
|
||||||
|
// is still appropriate.
|
||||||
|
var RuneFallbacks = map[rune]string{
|
||||||
|
RuneSterling: "f",
|
||||||
|
RuneDArrow: "v",
|
||||||
|
RuneLArrow: "<",
|
||||||
|
RuneRArrow: ">",
|
||||||
|
RuneUArrow: "^",
|
||||||
|
RuneBullet: "o",
|
||||||
|
RuneBoard: "#",
|
||||||
|
RuneCkBoard: ":",
|
||||||
|
RuneDegree: "\\",
|
||||||
|
RuneDiamond: "+",
|
||||||
|
RuneGEqual: ">",
|
||||||
|
RunePi: "*",
|
||||||
|
RuneHLine: "-",
|
||||||
|
RuneLantern: "#",
|
||||||
|
RunePlus: "+",
|
||||||
|
RuneLEqual: "<",
|
||||||
|
RuneLLCorner: "+",
|
||||||
|
RuneLRCorner: "+",
|
||||||
|
RuneNEqual: "!",
|
||||||
|
RunePlMinus: "#",
|
||||||
|
RuneS1: "~",
|
||||||
|
RuneS3: "-",
|
||||||
|
RuneS7: "-",
|
||||||
|
RuneS9: "_",
|
||||||
|
RuneBlock: "#",
|
||||||
|
RuneTTee: "+",
|
||||||
|
RuneRTee: "+",
|
||||||
|
RuneLTee: "+",
|
||||||
|
RuneBTee: "+",
|
||||||
|
RuneULCorner: "+",
|
||||||
|
RuneURCorner: "+",
|
||||||
|
RuneVLine: "|",
|
||||||
|
}
|
212
vendor/github.com/gdamore/tcell/screen.go
generated
vendored
Normal file
212
vendor/github.com/gdamore/tcell/screen.go
generated
vendored
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
// Copyright 2016 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
// Screen represents the physical (or emulated) screen.
|
||||||
|
// This can be a terminal window or a physical console. Platforms implement
|
||||||
|
// this differerently.
|
||||||
|
type Screen interface {
|
||||||
|
// Init initializes the screen for use.
|
||||||
|
Init() error
|
||||||
|
|
||||||
|
// Fini finalizes the screen also releasing resources.
|
||||||
|
Fini()
|
||||||
|
|
||||||
|
// Clear erases the screen. The contents of any screen buffers
|
||||||
|
// will also be cleared. This has the logical effect of
|
||||||
|
// filling the screen with spaces, using the global default style.
|
||||||
|
Clear()
|
||||||
|
|
||||||
|
// Fill fills the screen with the given character and style.
|
||||||
|
Fill(rune, Style)
|
||||||
|
|
||||||
|
// SetCell is an older API, and will be removed. Please use
|
||||||
|
// SetContent instead; SetCell is implemented in terms of SetContent.
|
||||||
|
SetCell(x int, y int, style Style, ch ...rune)
|
||||||
|
|
||||||
|
// GetContent returns the contents at the given location. If the
|
||||||
|
// coordinates are out of range, then the values will be 0, nil,
|
||||||
|
// StyleDefault. Note that the contents returned are logical contents
|
||||||
|
// and may not actually be what is displayed, but rather are what will
|
||||||
|
// be displayed if Show() or Sync() is called. The width is the width
|
||||||
|
// in screen cells; most often this will be 1, but some East Asian
|
||||||
|
// characters require two cells.
|
||||||
|
GetContent(x, y int) (mainc rune, combc []rune, style Style, width int)
|
||||||
|
|
||||||
|
// SetContent sets the contents of the given cell location. If
|
||||||
|
// the coordinates are out of range, then the operation is ignored.
|
||||||
|
//
|
||||||
|
// The first rune is the primary non-zero width rune. The array
|
||||||
|
// that follows is a possible list of combining characters to append,
|
||||||
|
// and will usually be nil (no combining characters.)
|
||||||
|
//
|
||||||
|
// The results are not displayd until Show() or Sync() is called.
|
||||||
|
//
|
||||||
|
// Note that wide (East Asian full width) runes occupy two cells,
|
||||||
|
// and attempts to place character at next cell to the right will have
|
||||||
|
// undefined effects. Wide runes that are printed in the
|
||||||
|
// last column will be replaced with a single width space on output.
|
||||||
|
SetContent(x int, y int, mainc rune, combc []rune, style Style)
|
||||||
|
|
||||||
|
// SetStyle sets the default style to use when clearing the screen
|
||||||
|
// or when StyleDefault is specified. If it is also StyleDefault,
|
||||||
|
// then whatever system/terminal default is relevant will be used.
|
||||||
|
SetStyle(style Style)
|
||||||
|
|
||||||
|
// ShowCursor is used to display the cursor at a given location.
|
||||||
|
// If the coordinates -1, -1 are given or are otherwise outside the
|
||||||
|
// dimensions of the screen, the cursor will be hidden.
|
||||||
|
ShowCursor(x int, y int)
|
||||||
|
|
||||||
|
// HideCursor is used to hide the cursor. Its an alias for
|
||||||
|
// ShowCursor(-1, -1).
|
||||||
|
HideCursor()
|
||||||
|
|
||||||
|
// Size returns the screen size as width, height. This changes in
|
||||||
|
// response to a call to Clear or Flush.
|
||||||
|
Size() (int, int)
|
||||||
|
|
||||||
|
// PollEvent waits for events to arrive. Main application loops
|
||||||
|
// must spin on this to prevent the application from stalling.
|
||||||
|
// Furthermore, this will return nil if the Screen is finalized.
|
||||||
|
PollEvent() Event
|
||||||
|
|
||||||
|
// PostEvent tries to post an event into the event stream. This
|
||||||
|
// can fail if the event queue is full. In that case, the event
|
||||||
|
// is dropped, and ErrEventQFull is returned.
|
||||||
|
PostEvent(ev Event) error
|
||||||
|
|
||||||
|
// PostEventWait is like PostEvent, but if the queue is full, it
|
||||||
|
// blocks until there is space in the queue, making delivery
|
||||||
|
// reliable. However, it is VERY important that this function
|
||||||
|
// never be called from within whatever event loop is polling
|
||||||
|
// with PollEvent(), otherwise a deadlock may arise.
|
||||||
|
//
|
||||||
|
// For this reason, when using this function, the use of a
|
||||||
|
// Goroutine is recommended to ensure no deadlock can occur.
|
||||||
|
PostEventWait(ev Event)
|
||||||
|
|
||||||
|
// EnableMouse enables the mouse. (If your terminal supports it.)
|
||||||
|
EnableMouse()
|
||||||
|
|
||||||
|
// DisableMouse disables the mouse.
|
||||||
|
DisableMouse()
|
||||||
|
|
||||||
|
// HasMouse returns true if the terminal (apparently) supports a
|
||||||
|
// mouse. Note that the a return value of true doesn't guarantee that
|
||||||
|
// a mouse/pointing device is present; a false return definitely
|
||||||
|
// indicates no mouse support is available.
|
||||||
|
HasMouse() bool
|
||||||
|
|
||||||
|
// Colors returns the number of colors. All colors are assumed to
|
||||||
|
// use the ANSI color map. If a terminal is monochrome, it will
|
||||||
|
// return 0.
|
||||||
|
Colors() int
|
||||||
|
|
||||||
|
// Show makes all the content changes made using SetContent() visible
|
||||||
|
// on the display.
|
||||||
|
//
|
||||||
|
// It does so in the most efficient and least visually disruptive
|
||||||
|
// manner possible.
|
||||||
|
Show()
|
||||||
|
|
||||||
|
// Sync works like Show(), but it updates every visible cell on the
|
||||||
|
// physical display, assuming that it is not synchronized with any
|
||||||
|
// internal model. This may be both expensive and visually jarring,
|
||||||
|
// so it should only be used when believed to actually be necessary.
|
||||||
|
//
|
||||||
|
// Typically this is called as a result of a user-requested redraw
|
||||||
|
// (e.g. to clear up on screen corruption caused by some other program),
|
||||||
|
// or during a resize event.
|
||||||
|
Sync()
|
||||||
|
|
||||||
|
// CharacterSet returns information about the character set.
|
||||||
|
// This isn't the full locale, but it does give us the input/output
|
||||||
|
// character set. Note that this is just for diagnostic purposes,
|
||||||
|
// we normally translate input/output to/from UTF-8, regardless of
|
||||||
|
// what the user's environment is.
|
||||||
|
CharacterSet() string
|
||||||
|
|
||||||
|
// RegisterRuneFallback adds a fallback for runes that are not
|
||||||
|
// part of the character set -- for example one coudld register
|
||||||
|
// o as a fallback for ø. This should be done cautiously for
|
||||||
|
// characters that might be displayed ordinarily in language
|
||||||
|
// specific text -- characters that could change the meaning of
|
||||||
|
// of written text would be dangerous. The intention here is to
|
||||||
|
// facilitate fallback characters in pseudo-graphical applications.
|
||||||
|
//
|
||||||
|
// If the terminal has fallbacks already in place via an alternate
|
||||||
|
// character set, those are used in preference. Also, standard
|
||||||
|
// fallbacks for graphical characters in the ACSC terminfo string
|
||||||
|
// are registered implicitly.
|
||||||
|
|
||||||
|
// The display string should be the same width as original rune.
|
||||||
|
// This makes it possible to register two character replacements
|
||||||
|
// for full width East Asian characters, for example.
|
||||||
|
//
|
||||||
|
// It is recommended that replacement strings consist only of
|
||||||
|
// 7-bit ASCII, since other characters may not display everywhere.
|
||||||
|
RegisterRuneFallback(r rune, subst string)
|
||||||
|
|
||||||
|
// UnregisterRuneFallback unmaps a replacement. It will unmap
|
||||||
|
// the implicit ASCII replacements for alternate characters as well.
|
||||||
|
// When an unmapped char needs to be displayed, but no suitable
|
||||||
|
// glyph is available, '?' is emitted instead. It is not possible
|
||||||
|
// to "disable" the use of alternate characters that are supported
|
||||||
|
// by your terminal except by changing the terminal database.
|
||||||
|
UnregisterRuneFallback(r rune)
|
||||||
|
|
||||||
|
// CanDisplay returns true if the given rune can be displayed on
|
||||||
|
// this screen. Note that this is a best guess effort -- whether
|
||||||
|
// your fonts support the character or not may be questionable.
|
||||||
|
// Mostly this is for folks who work outside of Unicode.
|
||||||
|
//
|
||||||
|
// If checkFallbacks is true, then if any (possibly imperfect)
|
||||||
|
// fallbacks are registered, this will return true. This will
|
||||||
|
// also return true if the terminal can replace the glyph with
|
||||||
|
// one that is visually indistinguishable from the one requested.
|
||||||
|
CanDisplay(r rune, checkFallbacks bool) bool
|
||||||
|
|
||||||
|
// Resize does nothing, since its generally not possible to
|
||||||
|
// ask a screen to resize, but it allows the Screen to implement
|
||||||
|
// the View interface.
|
||||||
|
Resize(int, int, int, int)
|
||||||
|
|
||||||
|
// HasKey returns true if the keyboard is believed to have the
|
||||||
|
// key. In some cases a keyboard may have keys with this name
|
||||||
|
// but no support for them, while in others a key may be reported
|
||||||
|
// as supported but not actually be usable (such as some emulators
|
||||||
|
// that hijack certain keys). Its best not to depend to strictly
|
||||||
|
// on this function, but it can be used for hinting when building
|
||||||
|
// menus, displayed hot-keys, etc. Note that KeyRune (literal
|
||||||
|
// runes) is always true.
|
||||||
|
HasKey(Key) bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewScreen returns a default Screen suitable for the user's terminal
|
||||||
|
// environment.
|
||||||
|
func NewScreen() (Screen, error) {
|
||||||
|
// First we attempt to obtain a terminfo screen. This should work
|
||||||
|
// in most places if $TERM is set.
|
||||||
|
if s, e := NewTerminfoScreen(); s != nil {
|
||||||
|
return s, nil
|
||||||
|
|
||||||
|
} else if s, _ := NewConsoleScreen(); s != nil {
|
||||||
|
return s, nil
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
}
|
505
vendor/github.com/gdamore/tcell/simulation.go
generated
vendored
Normal file
505
vendor/github.com/gdamore/tcell/simulation.go
generated
vendored
Normal file
@ -0,0 +1,505 @@
|
|||||||
|
// Copyright 2016 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"golang.org/x/text/transform"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewSimulationScreen returns a SimulationScreen. Note that
|
||||||
|
// SimulationScreen is also a Screen.
|
||||||
|
func NewSimulationScreen(charset string) SimulationScreen {
|
||||||
|
if charset == "" {
|
||||||
|
charset = "UTF-8"
|
||||||
|
}
|
||||||
|
s := &simscreen{charset: charset}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// SimulationScreen represents a screen simulation. This is intended to
|
||||||
|
// be a superset of normal Screens, but also adds some important interfaces
|
||||||
|
// for testing.
|
||||||
|
type SimulationScreen interface {
|
||||||
|
// InjectKeyBytes injects a stream of bytes corresponding to
|
||||||
|
// the native encoding (see charset). It turns true if the entire
|
||||||
|
// set of bytes were processed and delivered as KeyEvents, false
|
||||||
|
// if any bytes were not fully understood. Any bytes that are not
|
||||||
|
// fully converted are discarded.
|
||||||
|
InjectKeyBytes(buf []byte) bool
|
||||||
|
|
||||||
|
// InjectKey injects a key event. The rune is a UTF-8 rune, post
|
||||||
|
// any translation.
|
||||||
|
InjectKey(key Key, r rune, mod ModMask)
|
||||||
|
|
||||||
|
// InjectMouse injects a mouse event.
|
||||||
|
InjectMouse(x, y int, buttons ButtonMask, mod ModMask)
|
||||||
|
|
||||||
|
// SetSize resizes the underlying physical screen. It also causes
|
||||||
|
// a resize event to be injected during the next Show() or Sync().
|
||||||
|
// A new physical contents array will be allocated (with data from
|
||||||
|
// the old copied), so any prior value obtained with GetContents
|
||||||
|
// won't be used anymore
|
||||||
|
SetSize(width, height int)
|
||||||
|
|
||||||
|
// GetContents returns screen contents as an array of
|
||||||
|
// cells, along with the physical width & height. Note that the
|
||||||
|
// physical contents will be used until the next time SetSize()
|
||||||
|
// is called.
|
||||||
|
GetContents() (cells []SimCell, width int, height int)
|
||||||
|
|
||||||
|
// GetCursor returns the cursor details.
|
||||||
|
GetCursor() (x int, y int, visible bool)
|
||||||
|
|
||||||
|
Screen
|
||||||
|
}
|
||||||
|
|
||||||
|
// SimCell represents a simulated screen cell. The purpose of this
|
||||||
|
// is to track on screen content.
|
||||||
|
type SimCell struct {
|
||||||
|
// Bytes is the actual character bytes. Normally this is
|
||||||
|
// rune data, but it could be be data in another encoding system.
|
||||||
|
Bytes []byte
|
||||||
|
|
||||||
|
// Style is the style used to display the data.
|
||||||
|
Style Style
|
||||||
|
|
||||||
|
// Runes is the list of runes, unadulterated, in UTF-8.
|
||||||
|
Runes []rune
|
||||||
|
}
|
||||||
|
|
||||||
|
type simscreen struct {
|
||||||
|
physw int
|
||||||
|
physh int
|
||||||
|
fini bool
|
||||||
|
style Style
|
||||||
|
evch chan Event
|
||||||
|
quit chan struct{}
|
||||||
|
|
||||||
|
front []SimCell
|
||||||
|
back CellBuffer
|
||||||
|
clear bool
|
||||||
|
cursorx int
|
||||||
|
cursory int
|
||||||
|
cursorvis bool
|
||||||
|
mouse bool
|
||||||
|
charset string
|
||||||
|
encoder transform.Transformer
|
||||||
|
decoder transform.Transformer
|
||||||
|
fillchar rune
|
||||||
|
fillstyle Style
|
||||||
|
fallback map[rune]string
|
||||||
|
|
||||||
|
sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Init() error {
|
||||||
|
s.evch = make(chan Event, 10)
|
||||||
|
s.fillchar = 'X'
|
||||||
|
s.fillstyle = StyleDefault
|
||||||
|
s.mouse = false
|
||||||
|
s.physw = 80
|
||||||
|
s.physh = 25
|
||||||
|
s.cursorx = -1
|
||||||
|
s.cursory = -1
|
||||||
|
s.style = StyleDefault
|
||||||
|
|
||||||
|
if enc := GetEncoding(s.charset); enc != nil {
|
||||||
|
s.encoder = enc.NewEncoder()
|
||||||
|
s.decoder = enc.NewDecoder()
|
||||||
|
} else {
|
||||||
|
return ErrNoCharset
|
||||||
|
}
|
||||||
|
|
||||||
|
s.front = make([]SimCell, s.physw*s.physh)
|
||||||
|
s.back.Resize(80, 25)
|
||||||
|
|
||||||
|
// default fallbacks
|
||||||
|
s.fallback = make(map[rune]string)
|
||||||
|
for k, v := range RuneFallbacks {
|
||||||
|
s.fallback[k] = v
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Fini() {
|
||||||
|
s.Lock()
|
||||||
|
s.fini = true
|
||||||
|
s.back.Resize(0, 0)
|
||||||
|
s.Unlock()
|
||||||
|
if s.quit != nil {
|
||||||
|
close(s.quit)
|
||||||
|
}
|
||||||
|
s.physw = 0
|
||||||
|
s.physh = 0
|
||||||
|
s.front = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) SetStyle(style Style) {
|
||||||
|
s.Lock()
|
||||||
|
s.style = style
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Clear() {
|
||||||
|
s.Fill(' ', s.style)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Fill(r rune, style Style) {
|
||||||
|
s.Lock()
|
||||||
|
s.back.Fill(r, style)
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) SetCell(x, y int, style Style, ch ...rune) {
|
||||||
|
|
||||||
|
if len(ch) > 0 {
|
||||||
|
s.SetContent(x, y, ch[0], ch[1:], style)
|
||||||
|
} else {
|
||||||
|
s.SetContent(x, y, ' ', nil, style)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) SetContent(x, y int, mainc rune, combc []rune, st Style) {
|
||||||
|
|
||||||
|
s.Lock()
|
||||||
|
s.back.SetContent(x, y, mainc, combc, st)
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) GetContent(x, y int) (rune, []rune, Style, int) {
|
||||||
|
var mainc rune
|
||||||
|
var combc []rune
|
||||||
|
var style Style
|
||||||
|
var width int
|
||||||
|
s.Lock()
|
||||||
|
mainc, combc, style, width = s.back.GetContent(x, y)
|
||||||
|
s.Unlock()
|
||||||
|
return mainc, combc, style, width
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) drawCell(x, y int) int {
|
||||||
|
|
||||||
|
mainc, combc, style, width := s.back.GetContent(x, y)
|
||||||
|
if !s.back.Dirty(x, y) {
|
||||||
|
return width
|
||||||
|
}
|
||||||
|
if x >= s.physw || y >= s.physh || x < 0 || y < 0 {
|
||||||
|
return width
|
||||||
|
}
|
||||||
|
simc := &s.front[(y*s.physw)+x]
|
||||||
|
|
||||||
|
if style == StyleDefault {
|
||||||
|
style = s.style
|
||||||
|
}
|
||||||
|
simc.Style = style
|
||||||
|
simc.Runes = append([]rune{mainc}, combc...)
|
||||||
|
|
||||||
|
// now emit runes - taking care to not overrun width with a
|
||||||
|
// wide character, and to ensure that we emit exactly one regular
|
||||||
|
// character followed up by any residual combing characters
|
||||||
|
|
||||||
|
simc.Bytes = nil
|
||||||
|
|
||||||
|
if x > s.physw-width {
|
||||||
|
simc.Runes = []rune{' '}
|
||||||
|
simc.Bytes = []byte{' '}
|
||||||
|
return width
|
||||||
|
}
|
||||||
|
|
||||||
|
lbuf := make([]byte, 12)
|
||||||
|
ubuf := make([]byte, 12)
|
||||||
|
nout := 0
|
||||||
|
|
||||||
|
for _, r := range simc.Runes {
|
||||||
|
|
||||||
|
l := utf8.EncodeRune(ubuf, r)
|
||||||
|
|
||||||
|
nout, _, _ = s.encoder.Transform(lbuf, ubuf[:l], true)
|
||||||
|
|
||||||
|
if nout == 0 || lbuf[0] == '\x1a' {
|
||||||
|
|
||||||
|
// skip combining
|
||||||
|
|
||||||
|
if subst, ok := s.fallback[r]; ok {
|
||||||
|
simc.Bytes = append(simc.Bytes,
|
||||||
|
[]byte(subst)...)
|
||||||
|
|
||||||
|
} else if r >= ' ' && r <= '~' {
|
||||||
|
simc.Bytes = append(simc.Bytes, byte(r))
|
||||||
|
|
||||||
|
} else if simc.Bytes == nil {
|
||||||
|
simc.Bytes = append(simc.Bytes, '?')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
simc.Bytes = append(simc.Bytes, lbuf[:nout]...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.back.SetDirty(x, y, false)
|
||||||
|
return width
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) ShowCursor(x, y int) {
|
||||||
|
s.Lock()
|
||||||
|
s.cursorx, s.cursory = x, y
|
||||||
|
s.showCursor()
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) HideCursor() {
|
||||||
|
s.ShowCursor(-1, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) showCursor() {
|
||||||
|
|
||||||
|
x, y := s.cursorx, s.cursory
|
||||||
|
if x < 0 || y < 0 || x >= s.physw || y >= s.physh {
|
||||||
|
s.cursorvis = false
|
||||||
|
} else {
|
||||||
|
s.cursorvis = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) hideCursor() {
|
||||||
|
// does not update cursor position
|
||||||
|
s.cursorvis = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Show() {
|
||||||
|
s.Lock()
|
||||||
|
s.resize()
|
||||||
|
s.draw()
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) clearScreen() {
|
||||||
|
// We emulate a hardware clear by filling with a specific pattern
|
||||||
|
for i := range s.front {
|
||||||
|
s.front[i].Style = s.fillstyle
|
||||||
|
s.front[i].Runes = []rune{s.fillchar}
|
||||||
|
s.front[i].Bytes = []byte{byte(s.fillchar)}
|
||||||
|
}
|
||||||
|
s.clear = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) draw() {
|
||||||
|
s.hideCursor()
|
||||||
|
if s.clear {
|
||||||
|
s.clearScreen()
|
||||||
|
}
|
||||||
|
|
||||||
|
w, h := s.back.Size()
|
||||||
|
for y := 0; y < h; y++ {
|
||||||
|
for x := 0; x < w; x++ {
|
||||||
|
width := s.drawCell(x, y)
|
||||||
|
x += width - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.showCursor()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) EnableMouse() {
|
||||||
|
s.mouse = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) DisableMouse() {
|
||||||
|
s.mouse = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Size() (int, int) {
|
||||||
|
s.Lock()
|
||||||
|
w, h := s.back.Size()
|
||||||
|
s.Unlock()
|
||||||
|
return w, h
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) resize() {
|
||||||
|
w, h := s.physw, s.physh
|
||||||
|
ow, oh := s.back.Size()
|
||||||
|
if w != ow || h != oh {
|
||||||
|
s.back.Resize(w, h)
|
||||||
|
ev := NewEventResize(w, h)
|
||||||
|
s.PostEvent(ev)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Colors() int {
|
||||||
|
return 256
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) PollEvent() Event {
|
||||||
|
select {
|
||||||
|
case <-s.quit:
|
||||||
|
return nil
|
||||||
|
case ev := <-s.evch:
|
||||||
|
return ev
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) PostEventWait(ev Event) {
|
||||||
|
s.evch <- ev
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) PostEvent(ev Event) error {
|
||||||
|
select {
|
||||||
|
case s.evch <- ev:
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return ErrEventQFull
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) InjectMouse(x, y int, buttons ButtonMask, mod ModMask) {
|
||||||
|
ev := NewEventMouse(x, y, buttons, mod)
|
||||||
|
s.PostEvent(ev)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) InjectKey(key Key, r rune, mod ModMask) {
|
||||||
|
ev := NewEventKey(KeyRune, r, ModNone)
|
||||||
|
s.PostEvent(ev)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) InjectKeyBytes(b []byte) bool {
|
||||||
|
failed := false
|
||||||
|
|
||||||
|
outer:
|
||||||
|
for len(b) > 0 {
|
||||||
|
if b[0] >= ' ' && b[0] <= 0x7F {
|
||||||
|
// printable ASCII easy to deal with -- no encodings
|
||||||
|
ev := NewEventKey(KeyRune, rune(b[0]), ModNone)
|
||||||
|
s.PostEvent(ev)
|
||||||
|
b = b[1:]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if b[0] < 0x80 {
|
||||||
|
mod := ModNone
|
||||||
|
// No encodings start with low numbered values
|
||||||
|
if Key(b[0]) >= KeyCtrlA && Key(b[0]) <= KeyCtrlZ {
|
||||||
|
mod = ModCtrl
|
||||||
|
}
|
||||||
|
ev := NewEventKey(Key(b[0]), 0, mod)
|
||||||
|
s.PostEvent(ev)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
utfb := make([]byte, len(b)*4) // worst case
|
||||||
|
for l := 1; l < len(b); l++ {
|
||||||
|
s.decoder.Reset()
|
||||||
|
nout, nin, _ := s.decoder.Transform(utfb, b[:l], true)
|
||||||
|
|
||||||
|
if nout != 0 {
|
||||||
|
r, _ := utf8.DecodeRune(utfb[:nout])
|
||||||
|
if r != utf8.RuneError {
|
||||||
|
ev := NewEventKey(KeyRune, r, ModNone)
|
||||||
|
s.PostEvent(ev)
|
||||||
|
}
|
||||||
|
b = b[nin:]
|
||||||
|
continue outer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failed = true
|
||||||
|
b = b[1:]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return !failed
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Sync() {
|
||||||
|
s.Lock()
|
||||||
|
s.clear = true
|
||||||
|
s.resize()
|
||||||
|
s.back.Invalidate()
|
||||||
|
s.draw()
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) CharacterSet() string {
|
||||||
|
return s.charset
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) SetSize(w, h int) {
|
||||||
|
s.Lock()
|
||||||
|
newc := make([]SimCell, w*h)
|
||||||
|
for row := 0; row < h && row < s.physh; row++ {
|
||||||
|
for col := 0; col < w && col < s.physw; col++ {
|
||||||
|
newc[(row*w)+col] = s.front[(row*s.physw)+col]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.physw = w
|
||||||
|
s.physh = h
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) GetContents() ([]SimCell, int, int) {
|
||||||
|
s.Lock()
|
||||||
|
cells, w, h := s.front, s.physw, s.physh
|
||||||
|
s.Unlock()
|
||||||
|
return cells, w, h
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) GetCursor() (int, int, bool) {
|
||||||
|
s.Lock()
|
||||||
|
x, y, vis := s.cursorx, s.cursory, s.cursorvis
|
||||||
|
s.Unlock()
|
||||||
|
return x, y, vis
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) RegisterRuneFallback(r rune, subst string) {
|
||||||
|
s.Lock()
|
||||||
|
s.fallback[r] = subst
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) UnregisterRuneFallback(r rune) {
|
||||||
|
s.Lock()
|
||||||
|
delete(s.fallback, r)
|
||||||
|
s.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) CanDisplay(r rune, checkFallbacks bool) bool {
|
||||||
|
|
||||||
|
if enc := s.encoder; enc != nil {
|
||||||
|
nb := make([]byte, 6)
|
||||||
|
ob := make([]byte, 6)
|
||||||
|
num := utf8.EncodeRune(ob, r)
|
||||||
|
|
||||||
|
enc.Reset()
|
||||||
|
dst, _, err := enc.Transform(nb, ob[:num], true)
|
||||||
|
if dst != 0 && err == nil && nb[0] != '\x1A' {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !checkFallbacks {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if _, ok := s.fallback[r]; ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) HasMouse() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *simscreen) Resize(int, int, int, int) {}
|
||||||
|
|
||||||
|
func (s *simscreen) HasKey(Key) bool {
|
||||||
|
return true
|
||||||
|
}
|
126
vendor/github.com/gdamore/tcell/style.go
generated
vendored
Normal file
126
vendor/github.com/gdamore/tcell/style.go
generated
vendored
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
// Copyright 2015 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package tcell
|
||||||
|
|
||||||
|
// Style represents a complete text style, including both foreground
|
||||||
|
// and background color. We encode it in a 64-bit int for efficiency.
|
||||||
|
// The coding is (MSB): <7b flags><1b><24b fgcolor><7b attr><1b><24b bgcolor>.
|
||||||
|
// The <1b> is set true to indicate that the color is an RGB color, rather
|
||||||
|
// than a named index.
|
||||||
|
//
|
||||||
|
// This gives 24bit color options, if it ever becomes truly necessary.
|
||||||
|
// However, applications must not rely on this encoding.
|
||||||
|
//
|
||||||
|
// Note that not all terminals can display all colors or attributes, and
|
||||||
|
// many might have specific incompatibilities between specific attributes
|
||||||
|
// and color combinations.
|
||||||
|
//
|
||||||
|
// The intention is to extend styles to support paletting, in which case
|
||||||
|
// some flag bit(s) would be set, and the foreground and background colors
|
||||||
|
// would be replaced with a palette number and palette index.
|
||||||
|
//
|
||||||
|
// To use Style, just declare a variable of its type.
|
||||||
|
type Style int64
|
||||||
|
|
||||||
|
// StyleDefault represents a default style, based upon the context.
|
||||||
|
// It is the zero value.
|
||||||
|
const StyleDefault Style = 0
|
||||||
|
|
||||||
|
// styleFlags -- used internally for now.
|
||||||
|
const (
|
||||||
|
styleBgSet = 1 << (iota + 57)
|
||||||
|
styleFgSet
|
||||||
|
stylePalette
|
||||||
|
)
|
||||||
|
|
||||||
|
// Foreground returns a new style based on s, with the foreground color set
|
||||||
|
// as requested. ColorDefault can be used to select the global default.
|
||||||
|
func (s Style) Foreground(c Color) Style {
|
||||||
|
if c == ColorDefault {
|
||||||
|
return (s &^ (0x1ffffff00000000 | styleFgSet))
|
||||||
|
}
|
||||||
|
return (s &^ Style(0x1ffffff00000000)) |
|
||||||
|
((Style(c) & 0x1ffffff) << 32) | styleFgSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// Background returns a new style based on s, with the background color set
|
||||||
|
// as requested. ColorDefault can be used to select the global default.
|
||||||
|
func (s Style) Background(c Color) Style {
|
||||||
|
if c == ColorDefault {
|
||||||
|
return (s &^ (0x1ffffff | styleBgSet))
|
||||||
|
}
|
||||||
|
return (s &^ (0x1ffffff)) | (Style(c) & 0x1ffffff) | styleBgSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decompose breaks a style up, returning the foreground, background,
|
||||||
|
// and other attributes.
|
||||||
|
func (s Style) Decompose() (fg Color, bg Color, attr AttrMask) {
|
||||||
|
if s&styleFgSet != 0 {
|
||||||
|
fg = Color(s>>32) & 0x1ffffff
|
||||||
|
} else {
|
||||||
|
fg = ColorDefault
|
||||||
|
}
|
||||||
|
if s&styleBgSet != 0 {
|
||||||
|
bg = Color(s & 0x1ffffff)
|
||||||
|
} else {
|
||||||
|
bg = ColorDefault
|
||||||
|
}
|
||||||
|
attr = AttrMask(s) & attrAll
|
||||||
|
|
||||||
|
return fg, bg, attr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Style) setAttrs(attrs Style, on bool) Style {
|
||||||
|
if on {
|
||||||
|
return s | attrs
|
||||||
|
}
|
||||||
|
return s &^ attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal returns the style with all attributes disabled.
|
||||||
|
func (s Style) Normal() Style {
|
||||||
|
return s &^ Style(attrAll)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bold returns a new style based on s, with the bold attribute set
|
||||||
|
// as requested.
|
||||||
|
func (s Style) Bold(on bool) Style {
|
||||||
|
return s.setAttrs(Style(AttrBold), on)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Blink returns a new style based on s, with the blink attribute set
|
||||||
|
// as requested.
|
||||||
|
func (s Style) Blink(on bool) Style {
|
||||||
|
return s.setAttrs(Style(AttrBlink), on)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dim returns a new style based on s, with the dim attribute set
|
||||||
|
// as requested.
|
||||||
|
func (s Style) Dim(on bool) Style {
|
||||||
|
return s.setAttrs(Style(AttrDim), on)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reverse returns a new style based on s, with the reverse attribute set
|
||||||
|
// as requested. (Reverse usually changes the foreground and background
|
||||||
|
// colors.)
|
||||||
|
func (s Style) Reverse(on bool) Style {
|
||||||
|
return s.setAttrs(Style(AttrReverse), on)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Underline returns a new style based on s, with the underline attribute set
|
||||||
|
// as requested.
|
||||||
|
func (s Style) Underline(on bool) Style {
|
||||||
|
return s.setAttrs(Style(AttrUnderline), on)
|
||||||
|
}
|
1
vendor/github.com/gdamore/tcell/terminfo/.gitignore
generated
vendored
Normal file
1
vendor/github.com/gdamore/tcell/terminfo/.gitignore
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
mkinfo
|
7
vendor/github.com/gdamore/tcell/terminfo/TERMINALS.md
generated
vendored
Normal file
7
vendor/github.com/gdamore/tcell/terminfo/TERMINALS.md
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TERMINALS
|
||||||
|
=========
|
||||||
|
|
||||||
|
The best way to populate terminals on Debian is to install ncurses,
|
||||||
|
ncurses-term, screen, tmux, rxvt-unicode, and dvtm. This populates the
|
||||||
|
the terminfo database so that we can have a reasonable set of starting
|
||||||
|
terminals.
|
189
vendor/github.com/gdamore/tcell/terminfo/mkdatabase.sh
generated
vendored
Executable file
189
vendor/github.com/gdamore/tcell/terminfo/mkdatabase.sh
generated
vendored
Executable file
@ -0,0 +1,189 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright 2017 The TCell Authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the license at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
#
|
||||||
|
# When called with no arguments, this shell script builds the Go database,
|
||||||
|
# which is somewhat minimal for size reasons (it only contains the most
|
||||||
|
# commonly used entries), and then builds the complete JSON database.
|
||||||
|
#
|
||||||
|
# To limit the action to only building one or more terminals, specify them
|
||||||
|
# on the command line:
|
||||||
|
#
|
||||||
|
# ./mkdatabase xterm
|
||||||
|
#
|
||||||
|
# The script will also find and update or add any terminal "aliases".
|
||||||
|
# It does not remove any old entries.
|
||||||
|
#
|
||||||
|
# To add to the set of terminals that we compile into the Go database,
|
||||||
|
# add their names to the models.txt file.
|
||||||
|
#
|
||||||
|
|
||||||
|
# This script is not very efficient, but there isn't really a better way
|
||||||
|
# without writing code to decode the terminfo binary format directly.
|
||||||
|
# Its not worth worrying about.
|
||||||
|
|
||||||
|
# This script also requires bash, although ksh93 should work as well, because
|
||||||
|
# we use arrays, which are not specified in POSIX.
|
||||||
|
|
||||||
|
export LANG=C
|
||||||
|
export LC_CTYPE=C
|
||||||
|
|
||||||
|
progress()
|
||||||
|
{
|
||||||
|
typeset -i num=$1
|
||||||
|
typeset -i tot=$2
|
||||||
|
typeset -i x
|
||||||
|
typeset back
|
||||||
|
typeset s
|
||||||
|
|
||||||
|
if (( tot < 1 ))
|
||||||
|
then
|
||||||
|
s=$(printf "[ %d ]" $num)
|
||||||
|
back="\b\b\b\b\b"
|
||||||
|
x=$num
|
||||||
|
while (( x >= 10 ))
|
||||||
|
do
|
||||||
|
back="${back}\b"
|
||||||
|
x=$(( x / 10 ))
|
||||||
|
done
|
||||||
|
|
||||||
|
else
|
||||||
|
x=$(( num * 100 / tot ))
|
||||||
|
s=$(printf "<%3d%%>" $x)
|
||||||
|
back="\b\b\b\b\b\b"
|
||||||
|
fi
|
||||||
|
printf "%s${back}" "$s"
|
||||||
|
}
|
||||||
|
|
||||||
|
ord()
|
||||||
|
{
|
||||||
|
printf "%02x" "'$1'"
|
||||||
|
}
|
||||||
|
|
||||||
|
goterms=( $(cat models.txt) )
|
||||||
|
args=( $* )
|
||||||
|
if (( ${#args[@]} == 0 ))
|
||||||
|
then
|
||||||
|
args=( $(toe -a | cut -f1) )
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "Scanning terminal definitions: "
|
||||||
|
i=0
|
||||||
|
aliases=()
|
||||||
|
models=()
|
||||||
|
for term in ${args[@]}
|
||||||
|
do
|
||||||
|
case "${term}" in
|
||||||
|
*-truecolor)
|
||||||
|
line="${term}|24-bit color"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
line=$(infocmp $term | head -2 | tail -1)
|
||||||
|
if [[ -z "$line" ]]
|
||||||
|
then
|
||||||
|
echo "Cannot find terminfo for $term"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# take off the trailing comma
|
||||||
|
line=${line%,}
|
||||||
|
esac
|
||||||
|
|
||||||
|
# grab primary name
|
||||||
|
term=${line%%|*}
|
||||||
|
all+=( ${term} )
|
||||||
|
|
||||||
|
# should this be in our go terminals?
|
||||||
|
for model in ${goterms[@]}
|
||||||
|
do
|
||||||
|
if [[ "${model}" == "${term}" ]]
|
||||||
|
then
|
||||||
|
models+=( ${term} )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# chop off primary name
|
||||||
|
line=${line#${term}}
|
||||||
|
line=${line#|}
|
||||||
|
# chop off description
|
||||||
|
line=${line%|*}
|
||||||
|
while [[ "$line" != "" ]]
|
||||||
|
do
|
||||||
|
a=${line%%|*}
|
||||||
|
aliases+=( ${a}=${term} )
|
||||||
|
line=${line#$a}
|
||||||
|
line=${line#|}
|
||||||
|
done
|
||||||
|
i=$(( i + 1 ))
|
||||||
|
progress $i ${#args[@]}
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
# make sure we have mkinfo
|
||||||
|
printf "Building mkinfo: "
|
||||||
|
go build mkinfo.go
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
# Build all the go database files for the "interesting" terminals".
|
||||||
|
printf "Building Go database: "
|
||||||
|
i=0
|
||||||
|
for model in ${models[@]}
|
||||||
|
do
|
||||||
|
safe=$(echo $model | tr - _)
|
||||||
|
file=term_${safe}.go
|
||||||
|
./mkinfo -go $file $model
|
||||||
|
go fmt ${file} >/dev/null
|
||||||
|
i=$(( i + 1 ))
|
||||||
|
progress $i ${#models[@]}
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
|
||||||
|
printf "Building JSON database: "
|
||||||
|
|
||||||
|
# The JSON files are located for each terminal in a file with the
|
||||||
|
# terminal name, in the following fashion "database/x/xterm.json
|
||||||
|
|
||||||
|
i=0
|
||||||
|
for model in ${all[@]}
|
||||||
|
do
|
||||||
|
letter=$(ord ${model:0:1})
|
||||||
|
dir=database/${letter}
|
||||||
|
file=${dir}/${model}.gz
|
||||||
|
mkdir -p ${dir}
|
||||||
|
./mkinfo -nofatal -quiet -gzip -json ${file} ${model}
|
||||||
|
i=$(( i + 1 ))
|
||||||
|
progress $i ${#all[@]}
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
|
||||||
|
printf "Building JSON aliases: "
|
||||||
|
i=0
|
||||||
|
for model in ${aliases[@]}
|
||||||
|
do
|
||||||
|
canon=${model#*=}
|
||||||
|
model=${model%=*}
|
||||||
|
letter=$(ord ${model:0:1})
|
||||||
|
cletter=$(ord ${canon:0:1})
|
||||||
|
dir=database/${letter}
|
||||||
|
file=${dir}/${model}
|
||||||
|
if [[ -f database/${cletter}/${canon}.gz ]]
|
||||||
|
then
|
||||||
|
[[ -d ${dir} ]] || mkdir -p ${dir}
|
||||||
|
# Generally speaking the aliases are better uncompressed
|
||||||
|
./mkinfo -nofatal -quiet -json ${file} ${model}
|
||||||
|
fi
|
||||||
|
i=$(( i + 1 ))
|
||||||
|
progress $i ${#aliases[@]}
|
||||||
|
done
|
||||||
|
echo
|
769
vendor/github.com/gdamore/tcell/terminfo/mkinfo.go
generated
vendored
Normal file
769
vendor/github.com/gdamore/tcell/terminfo/mkinfo.go
generated
vendored
Normal file
@ -0,0 +1,769 @@
|
|||||||
|
// +build ignore
|
||||||
|
|
||||||
|
// Copyright 2017 The TCell Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the license at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// This command is used to generate suitable configuration files in either
|
||||||
|
// go syntax or in JSON. It defaults to JSON output on stdout. If no
|
||||||
|
// term values are specified on the command line, then $TERM is used.
|
||||||
|
//
|
||||||
|
// Usage is like this:
|
||||||
|
//
|
||||||
|
// mkinfo [-init] [-go file.go] [-json file.json] [-quiet] [-nofatal] [<term>...]
|
||||||
|
//
|
||||||
|
// -gzip specifies output should be compressed (json only)
|
||||||
|
// -go specifies Go output into the named file. Use - for stdout.
|
||||||
|
// -json specifies JSON output in the named file. Use - for stdout
|
||||||
|
// -nofatal indicates that errors loading definitions should not be fatal
|
||||||
|
//
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"compress/gzip"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"regexp"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gdamore/tcell/terminfo"
|
||||||
|
)
|
||||||
|
|
||||||
|
type termcap struct {
|
||||||
|
name string
|
||||||
|
desc string
|
||||||
|
aliases []string
|
||||||
|
bools map[string]bool
|
||||||
|
nums map[string]int
|
||||||
|
strs map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tc *termcap) getnum(s string) int {
|
||||||
|
return (tc.nums[s])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tc *termcap) getflag(s string) bool {
|
||||||
|
return (tc.bools[s])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tc *termcap) getstr(s string) string {
|
||||||
|
return (tc.strs[s])
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
NONE = iota
|
||||||
|
CTRL
|
||||||
|
ESC
|
||||||
|
)
|
||||||
|
|
||||||
|
func unescape(s string) string {
|
||||||
|
// Various escapes are in \x format. Control codes are
|
||||||
|
// encoded as ^M (carat followed by ASCII equivalent).
|
||||||
|
// Escapes are: \e, \E - escape
|
||||||
|
// \0 NULL, \n \l \r \t \b \f \s for equivalent C escape.
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
esc := NONE
|
||||||
|
|
||||||
|
for i := 0; i < len(s); i++ {
|
||||||
|
c := s[i]
|
||||||
|
switch esc {
|
||||||
|
case NONE:
|
||||||
|
switch c {
|
||||||
|
case '\\':
|
||||||
|
esc = ESC
|
||||||
|
case '^':
|
||||||
|
esc = CTRL
|
||||||
|
default:
|
||||||
|
buf.WriteByte(c)
|
||||||
|
}
|
||||||
|
case CTRL:
|
||||||
|
buf.WriteByte(c - 0x40)
|
||||||
|
esc = NONE
|
||||||
|
case ESC:
|
||||||
|
switch c {
|
||||||
|
case 'E', 'e':
|
||||||
|
buf.WriteByte(0x1b)
|
||||||
|
case '0':
|
||||||
|
buf.WriteByte(0)
|
||||||
|
case 'n':
|
||||||
|
buf.WriteByte('\n')
|
||||||
|
case 'r':
|
||||||
|
buf.WriteByte('\r')
|
||||||
|
case 't':
|
||||||
|
buf.WriteByte('\t')
|
||||||
|
case 'b':
|
||||||
|
buf.WriteByte('\b')
|
||||||
|
case 'f':
|
||||||
|
buf.WriteByte('\f')
|
||||||
|
case 's':
|
||||||
|
buf.WriteByte(' ')
|
||||||
|
case 'l':
|
||||||
|
panic("WTF: weird format: " + s)
|
||||||
|
default:
|
||||||
|
buf.WriteByte(c)
|
||||||
|
}
|
||||||
|
esc = NONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (buf.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tc *termcap) setupterm(name string) error {
|
||||||
|
cmd := exec.Command("infocmp", "-1", name)
|
||||||
|
output := &bytes.Buffer{}
|
||||||
|
cmd.Stdout = output
|
||||||
|
|
||||||
|
tc.strs = make(map[string]string)
|
||||||
|
tc.bools = make(map[string]bool)
|
||||||
|
tc.nums = make(map[string]int)
|
||||||
|
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now parse the output.
|
||||||
|
// We get comment lines (starting with "#"), followed by
|
||||||
|
// a header line that looks like "<name>|<alias>|...|<desc>"
|
||||||
|
// then capabilities, one per line, starting with a tab and ending
|
||||||
|
// with a comma and newline.
|
||||||
|
lines := strings.Split(output.String(), "\n")
|
||||||
|
for len(lines) > 0 && strings.HasPrefix(lines[0], "#") {
|
||||||
|
lines = lines[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ditch trailing empty last line
|
||||||
|
if lines[len(lines)-1] == "" {
|
||||||
|
lines = lines[:len(lines)-1]
|
||||||
|
}
|
||||||
|
header := lines[0]
|
||||||
|
if strings.HasSuffix(header, ",") {
|
||||||
|
header = header[:len(header)-1]
|
||||||
|
}
|
||||||
|
names := strings.Split(header, "|")
|
||||||
|
tc.name = names[0]
|
||||||
|
names = names[1:]
|
||||||
|
if len(names) > 0 {
|
||||||
|
tc.desc = names[len(names)-1]
|
||||||
|
names = names[:len(names)-1]
|
||||||
|
}
|
||||||
|
tc.aliases = names
|
||||||
|
for _, val := range lines[1:] {
|
||||||
|
if (!strings.HasPrefix(val, "\t")) ||
|
||||||
|
(!strings.HasSuffix(val, ",")) {
|
||||||
|
return (errors.New("malformed infocmp: " + val))
|
||||||
|
}
|
||||||
|
|
||||||
|
val = val[1:]
|
||||||
|
val = val[:len(val)-1]
|
||||||
|
|
||||||
|
if k := strings.SplitN(val, "=", 2); len(k) == 2 {
|
||||||
|
tc.strs[k[0]] = unescape(k[1])
|
||||||
|
} else if k := strings.SplitN(val, "#", 2); len(k) == 2 {
|
||||||
|
if u, err := strconv.ParseUint(k[1], 10, 0); err != nil {
|
||||||
|
return (err)
|
||||||
|
} else {
|
||||||
|
tc.nums[k[0]] = int(u)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tc.bools[val] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// This program is used to collect data from the system's terminfo library,
|
||||||
|
// and write it into Go source code. That is, we maintain our terminfo
|
||||||
|
// capabilities encoded in the program. It should never need to be run by
|
||||||
|
// an end user, but developers can use this to add codes for additional
|
||||||
|
// terminal types.
|
||||||
|
//
|
||||||
|
// If a terminal name ending with -truecolor is given, and we cannot find
|
||||||
|
// one, we will try to fabricate one from either the -256color (if present)
|
||||||
|
// or the unadorned base name, adding the XTerm specific 24-bit color
|
||||||
|
// escapes. We believe that all 24-bit capable terminals use the same
|
||||||
|
// escape sequences, and terminfo has yet to evolve to support this.
|
||||||
|
func getinfo(name string) (*terminfo.Terminfo, string, error) {
|
||||||
|
var tc termcap
|
||||||
|
addTrueColor := false
|
||||||
|
if err := tc.setupterm(name); err != nil {
|
||||||
|
if strings.HasSuffix(name, "-truecolor") {
|
||||||
|
base := name[:len(name)-len("-truecolor")]
|
||||||
|
// Probably -256color is closest to what we want
|
||||||
|
if err = tc.setupterm(base + "-256color"); err != nil {
|
||||||
|
err = tc.setupterm(base)
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
addTrueColor = true
|
||||||
|
}
|
||||||
|
tc.name = name
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t := &terminfo.Terminfo{}
|
||||||
|
// If this is an alias record, then just emit the alias
|
||||||
|
t.Name = tc.name
|
||||||
|
if t.Name != name {
|
||||||
|
return t, "", nil
|
||||||
|
}
|
||||||
|
t.Aliases = tc.aliases
|
||||||
|
t.Colors = tc.getnum("colors")
|
||||||
|
t.Columns = tc.getnum("cols")
|
||||||
|
t.Lines = tc.getnum("lines")
|
||||||
|
t.Bell = tc.getstr("bel")
|
||||||
|
t.Clear = tc.getstr("clear")
|
||||||
|
t.EnterCA = tc.getstr("smcup")
|
||||||
|
t.ExitCA = tc.getstr("rmcup")
|
||||||
|
t.ShowCursor = tc.getstr("cnorm")
|
||||||
|
t.HideCursor = tc.getstr("civis")
|
||||||
|
t.AttrOff = tc.getstr("sgr0")
|
||||||
|
t.Underline = tc.getstr("smul")
|
||||||
|
t.Bold = tc.getstr("bold")
|
||||||
|
t.Blink = tc.getstr("blink")
|
||||||
|
t.Dim = tc.getstr("dim")
|
||||||
|
t.Reverse = tc.getstr("rev")
|
||||||
|
t.EnterKeypad = tc.getstr("smkx")
|
||||||
|
t.ExitKeypad = tc.getstr("rmkx")
|
||||||
|
t.SetFg = tc.getstr("setaf")
|
||||||
|
t.SetBg = tc.getstr("setab")
|
||||||
|
t.SetCursor = tc.getstr("cup")
|
||||||
|
t.CursorBack1 = tc.getstr("cub1")
|
||||||
|
t.CursorUp1 = tc.getstr("cuu1")
|
||||||
|
t.KeyF1 = tc.getstr("kf1")
|
||||||
|
t.KeyF2 = tc.getstr("kf2")
|
||||||
|
t.KeyF3 = tc.getstr("kf3")
|
||||||
|
t.KeyF4 = tc.getstr("kf4")
|
||||||
|
t.KeyF5 = tc.getstr("kf5")
|
||||||
|
t.KeyF6 = tc.getstr("kf6")
|
||||||
|
t.KeyF7 = tc.getstr("kf7")
|
||||||
|
t.KeyF8 = tc.getstr("kf8")
|
||||||
|
t.KeyF9 = tc.getstr("kf9")
|
||||||
|
t.KeyF10 = tc.getstr("kf10")
|
||||||
|
t.KeyF11 = tc.getstr("kf11")
|
||||||
|
t.KeyF12 = tc.getstr("kf12")
|
||||||
|
t.KeyF13 = tc.getstr("kf13")
|
||||||
|
t.KeyF14 = tc.getstr("kf14")
|
||||||
|
t.KeyF15 = tc.getstr("kf15")
|
||||||
|
t.KeyF16 = tc.getstr("kf16")
|
||||||
|
t.KeyF17 = tc.getstr("kf17")
|
||||||
|
t.KeyF18 = tc.getstr("kf18")
|
||||||
|
t.KeyF19 = tc.getstr("kf19")
|
||||||
|
t.KeyF20 = tc.getstr("kf20")
|
||||||
|
t.KeyF21 = tc.getstr("kf21")
|
||||||
|
t.KeyF22 = tc.getstr("kf22")
|
||||||
|
t.KeyF23 = tc.getstr("kf23")
|
||||||
|
t.KeyF24 = tc.getstr("kf24")
|
||||||
|
t.KeyF25 = tc.getstr("kf25")
|
||||||
|
t.KeyF26 = tc.getstr("kf26")
|
||||||
|
t.KeyF27 = tc.getstr("kf27")
|
||||||
|
t.KeyF28 = tc.getstr("kf28")
|
||||||
|
t.KeyF29 = tc.getstr("kf29")
|
||||||
|
t.KeyF30 = tc.getstr("kf30")
|
||||||
|
t.KeyF31 = tc.getstr("kf31")
|
||||||
|
t.KeyF32 = tc.getstr("kf32")
|
||||||
|
t.KeyF33 = tc.getstr("kf33")
|
||||||
|
t.KeyF34 = tc.getstr("kf34")
|
||||||
|
t.KeyF35 = tc.getstr("kf35")
|
||||||
|
t.KeyF36 = tc.getstr("kf36")
|
||||||
|
t.KeyF37 = tc.getstr("kf37")
|
||||||
|
t.KeyF38 = tc.getstr("kf38")
|
||||||
|
t.KeyF39 = tc.getstr("kf39")
|
||||||
|
t.KeyF40 = tc.getstr("kf40")
|
||||||
|
t.KeyF41 = tc.getstr("kf41")
|
||||||
|
t.KeyF42 = tc.getstr("kf42")
|
||||||
|
t.KeyF43 = tc.getstr("kf43")
|
||||||
|
t.KeyF44 = tc.getstr("kf44")
|
||||||
|
t.KeyF45 = tc.getstr("kf45")
|
||||||
|
t.KeyF46 = tc.getstr("kf46")
|
||||||
|
t.KeyF47 = tc.getstr("kf47")
|
||||||
|
t.KeyF48 = tc.getstr("kf48")
|
||||||
|
t.KeyF49 = tc.getstr("kf49")
|
||||||
|
t.KeyF50 = tc.getstr("kf50")
|
||||||
|
t.KeyF51 = tc.getstr("kf51")
|
||||||
|
t.KeyF52 = tc.getstr("kf52")
|
||||||
|
t.KeyF53 = tc.getstr("kf53")
|
||||||
|
t.KeyF54 = tc.getstr("kf54")
|
||||||
|
t.KeyF55 = tc.getstr("kf55")
|
||||||
|
t.KeyF56 = tc.getstr("kf56")
|
||||||
|
t.KeyF57 = tc.getstr("kf57")
|
||||||
|
t.KeyF58 = tc.getstr("kf58")
|
||||||
|
t.KeyF59 = tc.getstr("kf59")
|
||||||
|
t.KeyF60 = tc.getstr("kf60")
|
||||||
|
t.KeyF61 = tc.getstr("kf61")
|
||||||
|
t.KeyF62 = tc.getstr("kf62")
|
||||||
|
t.KeyF63 = tc.getstr("kf63")
|
||||||
|
t.KeyF64 = tc.getstr("kf64")
|
||||||
|
t.KeyInsert = tc.getstr("kich1")
|
||||||
|
t.KeyDelete = tc.getstr("kdch1")
|
||||||
|
t.KeyBackspace = tc.getstr("kbs")
|
||||||
|
t.KeyHome = tc.getstr("khome")
|
||||||
|
t.KeyEnd = tc.getstr("kend")
|
||||||
|
t.KeyUp = tc.getstr("kcuu1")
|
||||||
|
t.KeyDown = tc.getstr("kcud1")
|
||||||
|
t.KeyRight = tc.getstr("kcuf1")
|
||||||
|
t.KeyLeft = tc.getstr("kcub1")
|
||||||
|
t.KeyPgDn = tc.getstr("knp")
|
||||||
|
t.KeyPgUp = tc.getstr("kpp")
|
||||||
|
t.KeyBacktab = tc.getstr("kcbt")
|
||||||
|
t.KeyExit = tc.getstr("kext")
|
||||||
|
t.KeyCancel = tc.getstr("kcan")
|
||||||
|
t.KeyPrint = tc.getstr("kprt")
|
||||||
|
t.KeyHelp = tc.getstr("khlp")
|
||||||
|
t.KeyClear = tc.getstr("kclr")
|
||||||
|
t.AltChars = tc.getstr("acsc")
|
||||||
|
t.EnterAcs = tc.getstr("smacs")
|
||||||
|
t.ExitAcs = tc.getstr("rmacs")
|
||||||
|
t.EnableAcs = tc.getstr("enacs")
|
||||||
|
t.Mouse = tc.getstr("kmous")
|
||||||
|
t.KeyShfRight = tc.getstr("kRIT")
|
||||||
|
t.KeyShfLeft = tc.getstr("kLFT")
|
||||||
|
t.KeyShfHome = tc.getstr("kHOM")
|
||||||
|
t.KeyShfEnd = tc.getstr("kEND")
|
||||||
|
|
||||||
|
// Terminfo lacks descriptions for a bunch of modified keys,
|
||||||
|
// but modern XTerm and emulators often have them. Let's add them,
|
||||||
|
// if the shifted right and left arrows are defined.
|
||||||
|
if t.KeyShfRight == "\x1b[1;2C" && t.KeyShfLeft == "\x1b[1;2D" {
|
||||||
|
t.KeyShfUp = "\x1b[1;2A"
|
||||||
|
t.KeyShfDown = "\x1b[1;2B"
|
||||||
|
t.KeyMetaUp = "\x1b[1;9A"
|
||||||
|
t.KeyMetaDown = "\x1b[1;9B"
|
||||||
|
t.KeyMetaRight = "\x1b[1;9C"
|
||||||
|
t.KeyMetaLeft = "\x1b[1;9D"
|
||||||
|
t.KeyAltUp = "\x1b[1;3A"
|
||||||
|
t.KeyAltDown = "\x1b[1;3B"
|
||||||
|
t.KeyAltRight = "\x1b[1;3C"
|
||||||
|
t.KeyAltLeft = "\x1b[1;3D"
|
||||||
|
t.KeyCtrlUp = "\x1b[1;5A"
|
||||||
|
t.KeyCtrlDown = "\x1b[1;5B"
|
||||||
|
t.KeyCtrlRight = "\x1b[1;5C"
|
||||||
|
t.KeyCtrlLeft = "\x1b[1;5D"
|
||||||
|
t.KeyAltShfUp = "\x1b[1;4A"
|
||||||
|
t.KeyAltShfDown = "\x1b[1;4B"
|
||||||
|
t.KeyAltShfRight = "\x1b[1;4C"
|
||||||
|
t.KeyAltShfLeft = "\x1b[1;4D"
|
||||||
|
|
||||||
|
t.KeyMetaShfUp = "\x1b[1;10A"
|
||||||
|
t.KeyMetaShfDown = "\x1b[1;10B"
|
||||||
|
t.KeyMetaShfRight = "\x1b[1;10C"
|
||||||
|
t.KeyMetaShfLeft = "\x1b[1;10D"
|
||||||
|
|
||||||
|
t.KeyCtrlShfUp = "\x1b[1;6A"
|
||||||
|
t.KeyCtrlShfDown = "\x1b[1;6B"
|
||||||
|
t.KeyCtrlShfRight = "\x1b[1;6C"
|
||||||
|
t.KeyCtrlShfLeft = "\x1b[1;6D"
|
||||||
|
}
|
||||||
|
// And also for Home and End
|
||||||
|
if t.KeyShfHome == "\x1b[1;2H" && t.KeyShfEnd == "\x1b[1;2F" {
|
||||||
|
t.KeyCtrlHome = "\x1b[1;5H"
|
||||||
|
t.KeyCtrlEnd = "\x1b[1;5F"
|
||||||
|
t.KeyAltHome = "\x1b[1;9H"
|
||||||
|
t.KeyAltEnd = "\x1b[1;9F"
|
||||||
|
t.KeyCtrlShfHome = "\x1b[1;6H"
|
||||||
|
t.KeyCtrlShfEnd = "\x1b[1;6F"
|
||||||
|
t.KeyAltShfHome = "\x1b[1;4H"
|
||||||
|
t.KeyAltShfEnd = "\x1b[1;4F"
|
||||||
|
t.KeyMetaShfHome = "\x1b[1;10H"
|
||||||
|
t.KeyMetaShfEnd = "\x1b[1;10F"
|
||||||
|
}
|
||||||
|
|
||||||
|
// And the same thing for rxvt and workalikes (Eterm, aterm, etc.)
|
||||||
|
// It seems that urxvt at least send ESC as ALT prefix for these,
|
||||||
|
// although some places seem to indicate a separate ALT key sesquence.
|
||||||
|
if t.KeyShfRight == "\x1b[c" && t.KeyShfLeft == "\x1b[d" {
|
||||||
|
t.KeyShfUp = "\x1b[a"
|
||||||
|
t.KeyShfDown = "\x1b[b"
|
||||||
|
t.KeyCtrlUp = "\x1b[Oa"
|
||||||
|
t.KeyCtrlDown = "\x1b[Ob"
|
||||||
|
t.KeyCtrlRight = "\x1b[Oc"
|
||||||
|
t.KeyCtrlLeft = "\x1b[Od"
|
||||||
|
}
|
||||||
|
if t.KeyShfHome == "\x1b[7$" && t.KeyShfEnd == "\x1b[8$" {
|
||||||
|
t.KeyCtrlHome = "\x1b[7^"
|
||||||
|
t.KeyCtrlEnd = "\x1b[8^"
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the kmous entry is present, then we need to record the
|
||||||
|
// the codes to enter and exit mouse mode. Sadly, this is not
|
||||||
|
// part of the terminfo databases anywhere that I've found, but
|
||||||
|
// is an extension. The escape codes are documented in the XTerm
|
||||||
|
// manual, and all terminals that have kmous are expected to
|
||||||
|
// use these same codes, unless explicitly configured otherwise
|
||||||
|
// vi XM. Note that in any event, we only known how to parse either
|
||||||
|
// x11 or SGR mouse events -- if your terminal doesn't support one
|
||||||
|
// of these two forms, you maybe out of luck.
|
||||||
|
t.MouseMode = tc.getstr("XM")
|
||||||
|
if t.Mouse != "" && t.MouseMode == "" {
|
||||||
|
// we anticipate that all xterm mouse tracking compatible
|
||||||
|
// terminals understand mouse tracking (1000), but we hope
|
||||||
|
// that those that don't understand any-event tracking (1003)
|
||||||
|
// will at least ignore it. Likewise we hope that terminals
|
||||||
|
// that don't understand SGR reporting (1006) just ignore it.
|
||||||
|
t.MouseMode = "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;" +
|
||||||
|
"\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c"
|
||||||
|
}
|
||||||
|
|
||||||
|
// We only support colors in ANSI 8 or 256 color mode.
|
||||||
|
if t.Colors < 8 || t.SetFg == "" {
|
||||||
|
t.Colors = 0
|
||||||
|
}
|
||||||
|
if t.SetCursor == "" {
|
||||||
|
return nil, "", errors.New("terminal not cursor addressable")
|
||||||
|
}
|
||||||
|
|
||||||
|
// For padding, we lookup the pad char. If that isn't present,
|
||||||
|
// and npc is *not* set, then we assume a null byte.
|
||||||
|
t.PadChar = tc.getstr("pad")
|
||||||
|
if t.PadChar == "" {
|
||||||
|
if !tc.getflag("npc") {
|
||||||
|
t.PadChar = "\u0000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// For some terminals we fabricate a -truecolor entry, that may
|
||||||
|
// not exist in terminfo.
|
||||||
|
if addTrueColor {
|
||||||
|
t.SetFgRGB = "\x1b[38;2;%p1%d;%p2%d;%p3%dm"
|
||||||
|
t.SetBgRGB = "\x1b[48;2;%p1%d;%p2%d;%p3%dm"
|
||||||
|
t.SetFgBgRGB = "\x1b[38;2;%p1%d;%p2%d;%p3%d;" +
|
||||||
|
"48;2;%p4%d;%p5%d;%p6%dm"
|
||||||
|
}
|
||||||
|
|
||||||
|
// For terminals that use "standard" SGR sequences, lets combine the
|
||||||
|
// foreground and background together.
|
||||||
|
if strings.HasPrefix(t.SetFg, "\x1b[") &&
|
||||||
|
strings.HasPrefix(t.SetBg, "\x1b[") &&
|
||||||
|
strings.HasSuffix(t.SetFg, "m") &&
|
||||||
|
strings.HasSuffix(t.SetBg, "m") {
|
||||||
|
fg := t.SetFg[:len(t.SetFg)-1]
|
||||||
|
r := regexp.MustCompile("%p1")
|
||||||
|
bg := r.ReplaceAllString(t.SetBg[2:], "%p2")
|
||||||
|
t.SetFgBg = fg + ";" + bg
|
||||||
|
}
|
||||||
|
|
||||||
|
return t, tc.desc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dotGoAddInt(w io.Writer, n string, i int) {
|
||||||
|
if i == 0 {
|
||||||
|
// initialized to 0, ignore
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "\t\t%-13s %d,\n", n+":", i)
|
||||||
|
}
|
||||||
|
func dotGoAddStr(w io.Writer, n string, s string) {
|
||||||
|
if s == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "\t\t%-13s %q,\n", n+":", s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func dotGoAddArr(w io.Writer, n string, a []string) {
|
||||||
|
if len(a) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "\t\t%-13s []string{", n+":")
|
||||||
|
did := false
|
||||||
|
for _, b := range a {
|
||||||
|
if did {
|
||||||
|
fmt.Fprint(w, ", ")
|
||||||
|
}
|
||||||
|
did = true
|
||||||
|
fmt.Fprintf(w, "%q", b)
|
||||||
|
}
|
||||||
|
fmt.Fprintln(w, "},")
|
||||||
|
}
|
||||||
|
|
||||||
|
func dotGoHeader(w io.Writer, packname string) {
|
||||||
|
fmt.Fprintln(w, "// Generated automatically. DO NOT HAND-EDIT.")
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
fmt.Fprintf(w, "package %s\n", packname)
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func dotGoTrailer(w io.Writer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func dotGoInfo(w io.Writer, t *terminfo.Terminfo, desc string) {
|
||||||
|
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
fmt.Fprintln(w, "func init() {")
|
||||||
|
fmt.Fprintf(w, "\t// %s\n", desc)
|
||||||
|
fmt.Fprintln(w, "\tAddTerminfo(&Terminfo{")
|
||||||
|
dotGoAddStr(w, "Name", t.Name)
|
||||||
|
dotGoAddArr(w, "Aliases", t.Aliases)
|
||||||
|
dotGoAddInt(w, "Columns", t.Columns)
|
||||||
|
dotGoAddInt(w, "Lines", t.Lines)
|
||||||
|
dotGoAddInt(w, "Colors", t.Colors)
|
||||||
|
dotGoAddStr(w, "Bell", t.Bell)
|
||||||
|
dotGoAddStr(w, "Clear", t.Clear)
|
||||||
|
dotGoAddStr(w, "EnterCA", t.EnterCA)
|
||||||
|
dotGoAddStr(w, "ExitCA", t.ExitCA)
|
||||||
|
dotGoAddStr(w, "ShowCursor", t.ShowCursor)
|
||||||
|
dotGoAddStr(w, "HideCursor", t.HideCursor)
|
||||||
|
dotGoAddStr(w, "AttrOff", t.AttrOff)
|
||||||
|
dotGoAddStr(w, "Underline", t.Underline)
|
||||||
|
dotGoAddStr(w, "Bold", t.Bold)
|
||||||
|
dotGoAddStr(w, "Dim", t.Dim)
|
||||||
|
dotGoAddStr(w, "Blink", t.Blink)
|
||||||
|
dotGoAddStr(w, "Reverse", t.Reverse)
|
||||||
|
dotGoAddStr(w, "EnterKeypad", t.EnterKeypad)
|
||||||
|
dotGoAddStr(w, "ExitKeypad", t.ExitKeypad)
|
||||||
|
dotGoAddStr(w, "SetFg", t.SetFg)
|
||||||
|
dotGoAddStr(w, "SetBg", t.SetBg)
|
||||||
|
dotGoAddStr(w, "SetFgBg", t.SetFgBg)
|
||||||
|
dotGoAddStr(w, "PadChar", t.PadChar)
|
||||||
|
dotGoAddStr(w, "AltChars", t.AltChars)
|
||||||
|
dotGoAddStr(w, "EnterAcs", t.EnterAcs)
|
||||||
|
dotGoAddStr(w, "ExitAcs", t.ExitAcs)
|
||||||
|
dotGoAddStr(w, "EnableAcs", t.EnableAcs)
|
||||||
|
dotGoAddStr(w, "SetFgRGB", t.SetFgRGB)
|
||||||
|
dotGoAddStr(w, "SetBgRGB", t.SetBgRGB)
|
||||||
|
dotGoAddStr(w, "SetFgBgRGB", t.SetFgBgRGB)
|
||||||
|
dotGoAddStr(w, "Mouse", t.Mouse)
|
||||||
|
dotGoAddStr(w, "MouseMode", t.MouseMode)
|
||||||
|
dotGoAddStr(w, "SetCursor", t.SetCursor)
|
||||||
|
dotGoAddStr(w, "CursorBack1", t.CursorBack1)
|
||||||
|
dotGoAddStr(w, "CursorUp1", t.CursorUp1)
|
||||||
|
dotGoAddStr(w, "KeyUp", t.KeyUp)
|
||||||
|
dotGoAddStr(w, "KeyDown", t.KeyDown)
|
||||||
|
dotGoAddStr(w, "KeyRight", t.KeyRight)
|
||||||
|
dotGoAddStr(w, "KeyLeft", t.KeyLeft)
|
||||||
|
dotGoAddStr(w, "KeyInsert", t.KeyInsert)
|
||||||
|
dotGoAddStr(w, "KeyDelete", t.KeyDelete)
|
||||||
|
dotGoAddStr(w, "KeyBackspace", t.KeyBackspace)
|
||||||
|
dotGoAddStr(w, "KeyHome", t.KeyHome)
|
||||||
|
dotGoAddStr(w, "KeyEnd", t.KeyEnd)
|
||||||
|
dotGoAddStr(w, "KeyPgUp", t.KeyPgUp)
|
||||||
|
dotGoAddStr(w, "KeyPgDn", t.KeyPgDn)
|
||||||
|
dotGoAddStr(w, "KeyF1", t.KeyF1)
|
||||||
|
dotGoAddStr(w, "KeyF2", t.KeyF2)
|
||||||
|
dotGoAddStr(w, "KeyF3", t.KeyF3)
|
||||||
|
dotGoAddStr(w, "KeyF4", t.KeyF4)
|
||||||
|
dotGoAddStr(w, "KeyF5", t.KeyF5)
|
||||||
|
dotGoAddStr(w, "KeyF6", t.KeyF6)
|
||||||
|
dotGoAddStr(w, "KeyF7", t.KeyF7)
|
||||||
|
dotGoAddStr(w, "KeyF8", t.KeyF8)
|
||||||
|
dotGoAddStr(w, "KeyF9", t.KeyF9)
|
||||||
|
dotGoAddStr(w, "KeyF10", t.KeyF10)
|
||||||
|
dotGoAddStr(w, "KeyF11", t.KeyF11)
|
||||||
|
dotGoAddStr(w, "KeyF12", t.KeyF12)
|
||||||
|
dotGoAddStr(w, "KeyF13", t.KeyF13)
|
||||||
|
dotGoAddStr(w, "KeyF14", t.KeyF14)
|
||||||
|
dotGoAddStr(w, "KeyF15", t.KeyF15)
|
||||||
|
dotGoAddStr(w, "KeyF16", t.KeyF16)
|
||||||
|
dotGoAddStr(w, "KeyF17", t.KeyF17)
|
||||||
|
dotGoAddStr(w, "KeyF18", t.KeyF18)
|
||||||
|
dotGoAddStr(w, "KeyF19", t.KeyF19)
|
||||||
|
dotGoAddStr(w, "KeyF20", t.KeyF20)
|
||||||
|
dotGoAddStr(w, "KeyF21", t.KeyF21)
|
||||||
|
dotGoAddStr(w, "KeyF22", t.KeyF22)
|
||||||
|
dotGoAddStr(w, "KeyF23", t.KeyF23)
|
||||||
|
dotGoAddStr(w, "KeyF24", t.KeyF24)
|
||||||
|
dotGoAddStr(w, "KeyF25", t.KeyF25)
|
||||||
|
dotGoAddStr(w, "KeyF26", t.KeyF26)
|
||||||
|
dotGoAddStr(w, "KeyF27", t.KeyF27)
|
||||||
|
dotGoAddStr(w, "KeyF28", t.KeyF28)
|
||||||
|
dotGoAddStr(w, "KeyF29", t.KeyF29)
|
||||||
|
dotGoAddStr(w, "KeyF30", t.KeyF30)
|
||||||
|
dotGoAddStr(w, "KeyF31", t.KeyF31)
|
||||||
|
dotGoAddStr(w, "KeyF32", t.KeyF32)
|
||||||
|
dotGoAddStr(w, "KeyF33", t.KeyF33)
|
||||||
|
dotGoAddStr(w, "KeyF34", t.KeyF34)
|
||||||
|
dotGoAddStr(w, "KeyF35", t.KeyF35)
|
||||||
|
dotGoAddStr(w, "KeyF36", t.KeyF36)
|
||||||
|
dotGoAddStr(w, "KeyF37", t.KeyF37)
|
||||||
|
dotGoAddStr(w, "KeyF38", t.KeyF38)
|
||||||
|
dotGoAddStr(w, "KeyF39", t.KeyF39)
|
||||||
|
dotGoAddStr(w, "KeyF40", t.KeyF40)
|
||||||
|
dotGoAddStr(w, "KeyF41", t.KeyF41)
|
||||||
|
dotGoAddStr(w, "KeyF42", t.KeyF42)
|
||||||
|
dotGoAddStr(w, "KeyF43", t.KeyF43)
|
||||||
|
dotGoAddStr(w, "KeyF44", t.KeyF44)
|
||||||
|
dotGoAddStr(w, "KeyF45", t.KeyF45)
|
||||||
|
dotGoAddStr(w, "KeyF46", t.KeyF46)
|
||||||
|
dotGoAddStr(w, "KeyF47", t.KeyF47)
|
||||||
|
dotGoAddStr(w, "KeyF48", t.KeyF48)
|
||||||
|
dotGoAddStr(w, "KeyF49", t.KeyF49)
|
||||||
|
dotGoAddStr(w, "KeyF50", t.KeyF50)
|
||||||
|
dotGoAddStr(w, "KeyF51", t.KeyF51)
|
||||||
|
dotGoAddStr(w, "KeyF52", t.KeyF52)
|
||||||
|
dotGoAddStr(w, "KeyF53", t.KeyF53)
|
||||||
|
dotGoAddStr(w, "KeyF54", t.KeyF54)
|
||||||
|
dotGoAddStr(w, "KeyF55", t.KeyF55)
|
||||||
|
dotGoAddStr(w, "KeyF56", t.KeyF56)
|
||||||
|
dotGoAddStr(w, "KeyF57", t.KeyF57)
|
||||||
|
dotGoAddStr(w, "KeyF58", t.KeyF58)
|
||||||
|
dotGoAddStr(w, "KeyF59", t.KeyF59)
|
||||||
|
dotGoAddStr(w, "KeyF60", t.KeyF60)
|
||||||
|
dotGoAddStr(w, "KeyF61", t.KeyF61)
|
||||||
|
dotGoAddStr(w, "KeyF62", t.KeyF62)
|
||||||
|
dotGoAddStr(w, "KeyF63", t.KeyF63)
|
||||||
|
dotGoAddStr(w, "KeyF64", t.KeyF64)
|
||||||
|
dotGoAddStr(w, "KeyCancel", t.KeyCancel)
|
||||||
|
dotGoAddStr(w, "KeyPrint", t.KeyPrint)
|
||||||
|
dotGoAddStr(w, "KeyExit", t.KeyExit)
|
||||||
|
dotGoAddStr(w, "KeyHelp", t.KeyHelp)
|
||||||
|
dotGoAddStr(w, "KeyClear", t.KeyClear)
|
||||||
|
dotGoAddStr(w, "KeyBacktab", t.KeyBacktab)
|
||||||
|
dotGoAddStr(w, "KeyShfLeft", t.KeyShfLeft)
|
||||||
|
dotGoAddStr(w, "KeyShfRight", t.KeyShfRight)
|
||||||
|
dotGoAddStr(w, "KeyShfUp", t.KeyShfUp)
|
||||||
|
dotGoAddStr(w, "KeyShfDown", t.KeyShfDown)
|
||||||
|
dotGoAddStr(w, "KeyCtrlLeft", t.KeyCtrlLeft)
|
||||||
|
dotGoAddStr(w, "KeyCtrlRight", t.KeyCtrlRight)
|
||||||
|
dotGoAddStr(w, "KeyCtrlUp", t.KeyCtrlUp)
|
||||||
|
dotGoAddStr(w, "KeyCtrlDown", t.KeyCtrlDown)
|
||||||
|
dotGoAddStr(w, "KeyMetaLeft", t.KeyMetaLeft)
|
||||||
|
dotGoAddStr(w, "KeyMetaRight", t.KeyMetaRight)
|
||||||
|
dotGoAddStr(w, "KeyMetaUp", t.KeyMetaUp)
|
||||||
|
dotGoAddStr(w, "KeyMetaDown", t.KeyMetaDown)
|
||||||
|
dotGoAddStr(w, "KeyAltLeft", t.KeyAltLeft)
|
||||||
|
dotGoAddStr(w, "KeyAltRight", t.KeyAltRight)
|
||||||
|
dotGoAddStr(w, "KeyAltUp", t.KeyAltUp)
|
||||||
|
dotGoAddStr(w, "KeyAltDown", t.KeyAltDown)
|
||||||
|
dotGoAddStr(w, "KeyAltShfLeft", t.KeyAltShfLeft)
|
||||||
|
dotGoAddStr(w, "KeyAltShfRight", t.KeyAltShfRight)
|
||||||
|
dotGoAddStr(w, "KeyAltShfUp", t.KeyAltShfUp)
|
||||||
|
dotGoAddStr(w, "KeyAltShfDown", t.KeyAltShfDown)
|
||||||
|
dotGoAddStr(w, "KeyMetaShfLeft", t.KeyMetaShfLeft)
|
||||||
|
dotGoAddStr(w, "KeyMetaShfRight", t.KeyMetaShfRight)
|
||||||
|
dotGoAddStr(w, "KeyMetaShfUp", t.KeyMetaShfUp)
|
||||||
|
dotGoAddStr(w, "KeyMetaShfDown", t.KeyMetaShfDown)
|
||||||
|
dotGoAddStr(w, "KeyCtrlShfLeft", t.KeyCtrlShfLeft)
|
||||||
|
dotGoAddStr(w, "KeyCtrlShfRight", t.KeyCtrlShfRight)
|
||||||
|
dotGoAddStr(w, "KeyCtrlShfUp", t.KeyCtrlShfUp)
|
||||||
|
dotGoAddStr(w, "KeyCtrlShfDown", t.KeyCtrlShfDown)
|
||||||
|
dotGoAddStr(w, "KeyShfHome", t.KeyShfHome)
|
||||||
|
dotGoAddStr(w, "KeyShfEnd", t.KeyShfEnd)
|
||||||
|
dotGoAddStr(w, "KeyCtrlHome", t.KeyCtrlHome)
|
||||||
|
dotGoAddStr(w, "KeyCtrlEnd", t.KeyCtrlEnd)
|
||||||
|
dotGoAddStr(w, "KeyMetaHome", t.KeyMetaHome)
|
||||||
|
dotGoAddStr(w, "KeyMetaEnd", t.KeyMetaEnd)
|
||||||
|
dotGoAddStr(w, "KeyAltHome", t.KeyAltHome)
|
||||||
|
dotGoAddStr(w, "KeyAltEnd", t.KeyAltEnd)
|
||||||
|
dotGoAddStr(w, "KeyCtrlShfHome", t.KeyCtrlShfHome)
|
||||||
|
dotGoAddStr(w, "KeyCtrlShfEnd", t.KeyCtrlShfEnd)
|
||||||
|
dotGoAddStr(w, "KeyMetaShfHome", t.KeyMetaShfHome)
|
||||||
|
dotGoAddStr(w, "KeyMetaShfEnd", t.KeyMetaShfEnd)
|
||||||
|
dotGoAddStr(w, "KeyAltShfHome", t.KeyAltShfHome)
|
||||||
|
dotGoAddStr(w, "KeyAltShfEnd", t.KeyAltShfEnd)
|
||||||
|
fmt.Fprintln(w, "\t})")
|
||||||
|
fmt.Fprintln(w, "}")
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
gofile := ""
|
||||||
|
jsonfile := ""
|
||||||
|
packname := "terminfo"
|
||||||
|
nofatal := false
|
||||||
|
quiet := false
|
||||||
|
dogzip := false
|
||||||
|
|
||||||
|
flag.StringVar(&gofile, "go", "", "generate go source in named file")
|
||||||
|
flag.StringVar(&jsonfile, "json", "", "generate json in named file")
|
||||||
|
flag.StringVar(&packname, "P", packname, "package name (go source)")
|
||||||
|
flag.BoolVar(&nofatal, "nofatal", false, "errors are not fatal")
|
||||||
|
flag.BoolVar(&quiet, "quiet", false, "suppress error messages")
|
||||||
|
flag.BoolVar(&dogzip, "gzip", false, "compress json output")
|
||||||
|
flag.Parse()
|
||||||
|
var e error
|
||||||
|
js := []byte{}
|
||||||
|
|
||||||
|
args := flag.Args()
|
||||||
|
if len(args) == 0 {
|
||||||
|
args = []string{os.Getenv("TERM")}
|
||||||
|
}
|
||||||
|
|
||||||
|
tdata := make(map[string]*terminfo.Terminfo)
|
||||||
|
descs := make(map[string]string)
|
||||||
|
|
||||||
|
for _, term := range args {
|
||||||
|
if t, desc, e := getinfo(term); e != nil {
|
||||||
|
if !quiet {
|
||||||
|
fmt.Fprintf(os.Stderr,
|
||||||
|
"Failed loading %s: %v\n", term, e)
|
||||||
|
}
|
||||||
|
if !nofatal {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tdata[term] = t
|
||||||
|
descs[term] = desc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(tdata) == 0 {
|
||||||
|
// No data.
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
if gofile != "" {
|
||||||
|
w := os.Stdout
|
||||||
|
if gofile != "-" {
|
||||||
|
if w, e = os.Create(gofile); e != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Failed: %v", e)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dotGoHeader(w, packname)
|
||||||
|
for term, t := range tdata {
|
||||||
|
if t.Name == term {
|
||||||
|
dotGoInfo(w, t, descs[term])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dotGoTrailer(w)
|
||||||
|
if w != os.Stdout {
|
||||||
|
w.Close()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
o := os.Stdout
|
||||||
|
if jsonfile != "-" && jsonfile != "" {
|
||||||
|
if o, e = os.Create(jsonfile); e != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Failed: %v", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var w io.WriteCloser
|
||||||
|
w = o
|
||||||
|
if dogzip {
|
||||||
|
w = gzip.NewWriter(o)
|
||||||
|
}
|
||||||
|
for _, term := range args {
|
||||||
|
if t := tdata[term]; t != nil {
|
||||||
|
js, e = json.Marshal(t)
|
||||||
|
fmt.Fprintln(w, string(js))
|
||||||
|
}
|
||||||
|
// arguably if there is more than one term, this
|
||||||
|
// should be a javascript array, but that's not how
|
||||||
|
// we load it. We marshal objects one at a time from
|
||||||
|
// the file.
|
||||||
|
}
|
||||||
|
if e != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Failed: %v", e)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
w.Close()
|
||||||
|
if w != o {
|
||||||
|
o.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
vendor/github.com/gdamore/tcell/terminfo/models.txt
generated
vendored
Normal file
59
vendor/github.com/gdamore/tcell/terminfo/models.txt
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
adm3a
|
||||||
|
aixterm
|
||||||
|
ansi
|
||||||
|
aterm
|
||||||
|
beterm
|
||||||
|
bsdos-pc
|
||||||
|
cygwin
|
||||||
|
d200
|
||||||
|
d210
|
||||||
|
dtterm
|
||||||
|
Eterm
|
||||||
|
Eterm-256color
|
||||||
|
eterm
|
||||||
|
gnome
|
||||||
|
gnome-256color
|
||||||
|
hpterm
|
||||||
|
hz1500
|
||||||
|
konsole
|
||||||
|
konsole-256color
|
||||||
|
kterm
|
||||||
|
linux
|
||||||
|
pcansi
|
||||||
|
rxvt
|
||||||
|
rxvt-256color
|
||||||
|
rxvt-unicode
|
||||||
|
rxvt-unicode-256color
|
||||||
|
screen
|
||||||
|
screen-256color
|
||||||
|
st
|
||||||
|
st-256color
|
||||||
|
st-truecolor
|
||||||
|
st-meta
|
||||||
|
st-meta-256color
|
||||||
|
st-meta-truecolor
|
||||||
|
sun
|
||||||
|
sun-color
|
||||||
|
tvi910
|
||||||
|
tvi912
|
||||||
|
tvi921
|
||||||
|
tvi925
|
||||||
|
tvi950
|
||||||
|
tvi970
|
||||||
|
vt52
|
||||||
|
vt100
|
||||||
|
vt102
|
||||||
|
vt220
|
||||||
|
vt320
|
||||||
|
vt400
|
||||||
|
vt420
|
||||||
|
wy50
|
||||||
|
wy60
|
||||||
|
wy99-ansi
|
||||||
|
wy99a-ansi
|
||||||
|
xfce
|
||||||
|
xnuppc
|
||||||
|
xterm
|
||||||
|
xterm
|
||||||
|
xterm-256color
|
||||||
|
xterm-truecolor
|
24
vendor/github.com/gdamore/tcell/terminfo/term_Eterm.go
generated
vendored
Normal file
24
vendor/github.com/gdamore/tcell/terminfo/term_Eterm.go
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// gnu emacs term.el terminal emulation
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "eterm",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
AttrOff: "\x1b[m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
PadChar: "\x00",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
})
|
||||||
|
}
|
105
vendor/github.com/gdamore/tcell/terminfo/term_Eterm_256color.go
generated
vendored
Normal file
105
vendor/github.com/gdamore/tcell/terminfo/term_Eterm_256color.go
generated
vendored
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Eterm with xterm 256-colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "Eterm-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[7~",
|
||||||
|
KeyEnd: "\x1b[8~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyF21: "\x1b[23$",
|
||||||
|
KeyF22: "\x1b[24$",
|
||||||
|
KeyF23: "\x1b[11^",
|
||||||
|
KeyF24: "\x1b[12^",
|
||||||
|
KeyF25: "\x1b[13^",
|
||||||
|
KeyF26: "\x1b[14^",
|
||||||
|
KeyF27: "\x1b[15^",
|
||||||
|
KeyF28: "\x1b[17^",
|
||||||
|
KeyF29: "\x1b[18^",
|
||||||
|
KeyF30: "\x1b[19^",
|
||||||
|
KeyF31: "\x1b[20^",
|
||||||
|
KeyF32: "\x1b[21^",
|
||||||
|
KeyF33: "\x1b[23^",
|
||||||
|
KeyF34: "\x1b[24^",
|
||||||
|
KeyF35: "\x1b[25^",
|
||||||
|
KeyF36: "\x1b[26^",
|
||||||
|
KeyF37: "\x1b[28^",
|
||||||
|
KeyF38: "\x1b[29^",
|
||||||
|
KeyF39: "\x1b[31^",
|
||||||
|
KeyF40: "\x1b[32^",
|
||||||
|
KeyF41: "\x1b[33^",
|
||||||
|
KeyF42: "\x1b[34^",
|
||||||
|
KeyF43: "\x1b[23@",
|
||||||
|
KeyF44: "\x1b[24@",
|
||||||
|
KeyHelp: "\x1b[28~",
|
||||||
|
KeyShfLeft: "\x1b[d",
|
||||||
|
KeyShfRight: "\x1b[c",
|
||||||
|
KeyShfUp: "\x1b[a",
|
||||||
|
KeyShfDown: "\x1b[b",
|
||||||
|
KeyCtrlLeft: "\x1b[Od",
|
||||||
|
KeyCtrlRight: "\x1b[Oc",
|
||||||
|
KeyCtrlUp: "\x1b[Oa",
|
||||||
|
KeyCtrlDown: "\x1b[Ob",
|
||||||
|
KeyShfHome: "\x1b[7$",
|
||||||
|
KeyShfEnd: "\x1b[8$",
|
||||||
|
KeyCtrlHome: "\x1b[7^",
|
||||||
|
KeyCtrlEnd: "\x1b[8^",
|
||||||
|
})
|
||||||
|
}
|
22
vendor/github.com/gdamore/tcell/terminfo/term_adm3a.go
generated
vendored
Normal file
22
vendor/github.com/gdamore/tcell/terminfo/term_adm3a.go
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// lsi adm3a
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "adm3a",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x0032$<1/>",
|
||||||
|
PadChar: "\x00",
|
||||||
|
SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\v",
|
||||||
|
KeyUp: "\v",
|
||||||
|
KeyDown: "\n",
|
||||||
|
KeyRight: "\f",
|
||||||
|
KeyLeft: "\b",
|
||||||
|
})
|
||||||
|
}
|
76
vendor/github.com/gdamore/tcell/terminfo/term_aixterm.go
generated
vendored
Normal file
76
vendor/github.com/gdamore/tcell/terminfo/term_aixterm.go
generated
vendored
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// IBM Aixterm Terminal Emulator
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "aixterm",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 25,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
AttrOff: "\x1b[0;10m\x1b(B",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "jjkkllmmnnqqttuuvvwwxx",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[139q",
|
||||||
|
KeyDelete: "\x1b[P",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[H",
|
||||||
|
KeyEnd: "\x1b[146q",
|
||||||
|
KeyPgUp: "\x1b[150q",
|
||||||
|
KeyPgDn: "\x1b[154q",
|
||||||
|
KeyF1: "\x1b[001q",
|
||||||
|
KeyF2: "\x1b[002q",
|
||||||
|
KeyF3: "\x1b[003q",
|
||||||
|
KeyF4: "\x1b[004q",
|
||||||
|
KeyF5: "\x1b[005q",
|
||||||
|
KeyF6: "\x1b[006q",
|
||||||
|
KeyF7: "\x1b[007q",
|
||||||
|
KeyF8: "\x1b[008q",
|
||||||
|
KeyF9: "\x1b[009q",
|
||||||
|
KeyF10: "\x1b[010q",
|
||||||
|
KeyF11: "\x1b[011q",
|
||||||
|
KeyF12: "\x1b[012q",
|
||||||
|
KeyF13: "\x1b[013q",
|
||||||
|
KeyF14: "\x1b[014q",
|
||||||
|
KeyF15: "\x1b[015q",
|
||||||
|
KeyF16: "\x1b[016q",
|
||||||
|
KeyF17: "\x1b[017q",
|
||||||
|
KeyF18: "\x1b[018q",
|
||||||
|
KeyF19: "\x1b[019q",
|
||||||
|
KeyF20: "\x1b[020q",
|
||||||
|
KeyF21: "\x1b[021q",
|
||||||
|
KeyF22: "\x1b[022q",
|
||||||
|
KeyF23: "\x1b[023q",
|
||||||
|
KeyF24: "\x1b[024q",
|
||||||
|
KeyF25: "\x1b[025q",
|
||||||
|
KeyF26: "\x1b[026q",
|
||||||
|
KeyF27: "\x1b[027q",
|
||||||
|
KeyF28: "\x1b[028q",
|
||||||
|
KeyF29: "\x1b[029q",
|
||||||
|
KeyF30: "\x1b[030q",
|
||||||
|
KeyF31: "\x1b[031q",
|
||||||
|
KeyF32: "\x1b[032q",
|
||||||
|
KeyF33: "\x1b[033q",
|
||||||
|
KeyF34: "\x1b[034q",
|
||||||
|
KeyF35: "\x1b[035q",
|
||||||
|
KeyF36: "\x1b[036q",
|
||||||
|
KeyClear: "\x1b[144q",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
38
vendor/github.com/gdamore/tcell/terminfo/term_ansi.go
generated
vendored
Normal file
38
vendor/github.com/gdamore/tcell/terminfo/term_ansi.go
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// ansi/pc-term compatible with color
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "ansi",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
AttrOff: "\x1b[0;10m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
|
||||||
|
EnterAcs: "\x1b[11m",
|
||||||
|
ExitAcs: "\x1b[10m",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\x1b[D",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[L",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[H",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
107
vendor/github.com/gdamore/tcell/terminfo/term_aterm.go
generated
vendored
Normal file
107
vendor/github.com/gdamore/tcell/terminfo/term_aterm.go
generated
vendored
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// AfterStep terminal
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "aterm",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b=",
|
||||||
|
ExitKeypad: "\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b(B\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[7~",
|
||||||
|
KeyEnd: "\x1b[8~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyF21: "\x1b[23$",
|
||||||
|
KeyF22: "\x1b[24$",
|
||||||
|
KeyF23: "\x1b[11^",
|
||||||
|
KeyF24: "\x1b[12^",
|
||||||
|
KeyF25: "\x1b[13^",
|
||||||
|
KeyF26: "\x1b[14^",
|
||||||
|
KeyF27: "\x1b[15^",
|
||||||
|
KeyF28: "\x1b[17^",
|
||||||
|
KeyF29: "\x1b[18^",
|
||||||
|
KeyF30: "\x1b[19^",
|
||||||
|
KeyF31: "\x1b[20^",
|
||||||
|
KeyF32: "\x1b[21^",
|
||||||
|
KeyF33: "\x1b[23^",
|
||||||
|
KeyF34: "\x1b[24^",
|
||||||
|
KeyF35: "\x1b[25^",
|
||||||
|
KeyF36: "\x1b[26^",
|
||||||
|
KeyF37: "\x1b[28^",
|
||||||
|
KeyF38: "\x1b[29^",
|
||||||
|
KeyF39: "\x1b[31^",
|
||||||
|
KeyF40: "\x1b[32^",
|
||||||
|
KeyF41: "\x1b[33^",
|
||||||
|
KeyF42: "\x1b[34^",
|
||||||
|
KeyF43: "\x1b[23@",
|
||||||
|
KeyF44: "\x1b[24@",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[d",
|
||||||
|
KeyShfRight: "\x1b[c",
|
||||||
|
KeyShfUp: "\x1b[a",
|
||||||
|
KeyShfDown: "\x1b[b",
|
||||||
|
KeyCtrlLeft: "\x1b[Od",
|
||||||
|
KeyCtrlRight: "\x1b[Oc",
|
||||||
|
KeyCtrlUp: "\x1b[Oa",
|
||||||
|
KeyCtrlDown: "\x1b[Ob",
|
||||||
|
KeyShfHome: "\x1b[7$",
|
||||||
|
KeyShfEnd: "\x1b[8$",
|
||||||
|
KeyCtrlHome: "\x1b[7^",
|
||||||
|
KeyCtrlEnd: "\x1b[8^",
|
||||||
|
})
|
||||||
|
}
|
51
vendor/github.com/gdamore/tcell/terminfo/term_beterm.go
generated
vendored
Normal file
51
vendor/github.com/gdamore/tcell/terminfo/term_beterm.go
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// BeOS Terminal
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "beterm",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 25,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
AttrOff: "\x1b[0;10m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?4h",
|
||||||
|
ExitKeypad: "\x1b[?4l",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[16~",
|
||||||
|
KeyF7: "\x1b[17~",
|
||||||
|
KeyF8: "\x1b[18~",
|
||||||
|
KeyF9: "\x1b[19~",
|
||||||
|
KeyF10: "\x1b[20~",
|
||||||
|
KeyF11: "\x1b[21~",
|
||||||
|
KeyF12: "\x1b[22~",
|
||||||
|
})
|
||||||
|
}
|
39
vendor/github.com/gdamore/tcell/terminfo/term_bsdos_pc.go
generated
vendored
Normal file
39
vendor/github.com/gdamore/tcell/terminfo/term_bsdos_pc.go
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// IBM PC BSD/OS Console
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "bsdos-pc",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 25,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1bc",
|
||||||
|
AttrOff: "\x1b[0;10m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
|
||||||
|
EnterAcs: "\x1b[11m",
|
||||||
|
ExitAcs: "\x1b[10m",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[L",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[H",
|
||||||
|
KeyPgUp: "\x1b[I",
|
||||||
|
KeyPgDn: "\x1b[G",
|
||||||
|
})
|
||||||
|
}
|
60
vendor/github.com/gdamore/tcell/terminfo/term_cygwin.go
generated
vendored
Normal file
60
vendor/github.com/gdamore/tcell/terminfo/term_cygwin.go
generated
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// ansi emulation for Cygwin
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "cygwin",
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
AttrOff: "\x1b[0;10m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
|
||||||
|
EnterAcs: "\x1b[11m",
|
||||||
|
ExitAcs: "\x1b[10m",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[[A",
|
||||||
|
KeyF2: "\x1b[[B",
|
||||||
|
KeyF3: "\x1b[[C",
|
||||||
|
KeyF4: "\x1b[[D",
|
||||||
|
KeyF5: "\x1b[[E",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
})
|
||||||
|
}
|
94
vendor/github.com/gdamore/tcell/terminfo/term_d200.go
generated
vendored
Normal file
94
vendor/github.com/gdamore/tcell/terminfo/term_d200.go
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Data General DASHER D200
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "d200",
|
||||||
|
Aliases: []string{"d200-dg"},
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\f",
|
||||||
|
AttrOff: "\x0017\x0025\x0035\x0036E",
|
||||||
|
Underline: "\x14",
|
||||||
|
Bold: "\x1eD\x14",
|
||||||
|
Dim: "\x1c",
|
||||||
|
Blink: "\x0e",
|
||||||
|
Reverse: "\x1eD",
|
||||||
|
PadChar: "\x00",
|
||||||
|
SetCursor: "\x0020%p2%c%p1%c",
|
||||||
|
CursorBack1: "\x19",
|
||||||
|
CursorUp1: "\x17",
|
||||||
|
KeyUp: "\x17",
|
||||||
|
KeyDown: "\x1a",
|
||||||
|
KeyRight: "\x18",
|
||||||
|
KeyLeft: "\x19",
|
||||||
|
KeyHome: "\b",
|
||||||
|
KeyF1: "\x1eq",
|
||||||
|
KeyF2: "\x1er",
|
||||||
|
KeyF3: "\x1es",
|
||||||
|
KeyF4: "\x1et",
|
||||||
|
KeyF5: "\x1eu",
|
||||||
|
KeyF6: "\x1ev",
|
||||||
|
KeyF7: "\x1ew",
|
||||||
|
KeyF8: "\x1ex",
|
||||||
|
KeyF9: "\x1ey",
|
||||||
|
KeyF10: "\x1ez",
|
||||||
|
KeyF11: "\x1e{",
|
||||||
|
KeyF12: "\x1e|",
|
||||||
|
KeyF13: "\x1e}",
|
||||||
|
KeyF14: "\x1e~",
|
||||||
|
KeyF15: "\x1ep",
|
||||||
|
KeyF16: "\x1ea",
|
||||||
|
KeyF17: "\x1eb",
|
||||||
|
KeyF18: "\x1ec",
|
||||||
|
KeyF19: "\x1ed",
|
||||||
|
KeyF20: "\x1ee",
|
||||||
|
KeyF21: "\x1ef",
|
||||||
|
KeyF22: "\x1eg",
|
||||||
|
KeyF23: "\x1eh",
|
||||||
|
KeyF24: "\x1ei",
|
||||||
|
KeyF25: "\x1ej",
|
||||||
|
KeyF26: "\x1ek",
|
||||||
|
KeyF27: "\x1el",
|
||||||
|
KeyF28: "\x1em",
|
||||||
|
KeyF29: "\x1en",
|
||||||
|
KeyF30: "\x1e`",
|
||||||
|
KeyF31: "\x1e1",
|
||||||
|
KeyF32: "\x1e2",
|
||||||
|
KeyF33: "\x1e3",
|
||||||
|
KeyF34: "\x1e4",
|
||||||
|
KeyF35: "\x1e5",
|
||||||
|
KeyF36: "\x1e6",
|
||||||
|
KeyF37: "\x1e7",
|
||||||
|
KeyF38: "\x1e8",
|
||||||
|
KeyF39: "\x1e9",
|
||||||
|
KeyF40: "\x1e:",
|
||||||
|
KeyF41: "\x1e;",
|
||||||
|
KeyF42: "\x1e<",
|
||||||
|
KeyF43: "\x1e=",
|
||||||
|
KeyF44: "\x1e>",
|
||||||
|
KeyF45: "\x1e0",
|
||||||
|
KeyF46: "\x1e!",
|
||||||
|
KeyF47: "\x1e\"",
|
||||||
|
KeyF48: "\x1e#",
|
||||||
|
KeyF49: "\x1e$",
|
||||||
|
KeyF50: "\x1e%%",
|
||||||
|
KeyF51: "\x1e&",
|
||||||
|
KeyF52: "\x1e'",
|
||||||
|
KeyF53: "\x1e(",
|
||||||
|
KeyF54: "\x1e)",
|
||||||
|
KeyF55: "\x1e*",
|
||||||
|
KeyF56: "\x1e+",
|
||||||
|
KeyF57: "\x1e,",
|
||||||
|
KeyF58: "\x1e-",
|
||||||
|
KeyF59: "\x1e.",
|
||||||
|
KeyF60: "\x1e ",
|
||||||
|
KeyClear: "\f",
|
||||||
|
KeyShfLeft: "\x1e\x19",
|
||||||
|
KeyShfRight: "\x1e\x18",
|
||||||
|
KeyShfHome: "\x1e\b",
|
||||||
|
})
|
||||||
|
}
|
92
vendor/github.com/gdamore/tcell/terminfo/term_d210.go
generated
vendored
Normal file
92
vendor/github.com/gdamore/tcell/terminfo/term_d210.go
generated
vendored
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Data General DASHER D210 series
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "d210",
|
||||||
|
Aliases: []string{"d214"},
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[2J",
|
||||||
|
AttrOff: "\x1b[m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[4;7m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
PadChar: "\x00",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyHome: "\x1b[H",
|
||||||
|
KeyF1: "\x1b[001z",
|
||||||
|
KeyF2: "\x1b[002z",
|
||||||
|
KeyF3: "\x1b[003z",
|
||||||
|
KeyF4: "\x1b[004z",
|
||||||
|
KeyF5: "\x1b[005z",
|
||||||
|
KeyF6: "\x1b[006z",
|
||||||
|
KeyF7: "\x1b[007z",
|
||||||
|
KeyF8: "\x1b[008z",
|
||||||
|
KeyF9: "\x1b[009z",
|
||||||
|
KeyF10: "\x1b[010z",
|
||||||
|
KeyF11: "\x1b[011z",
|
||||||
|
KeyF12: "\x1b[012z",
|
||||||
|
KeyF13: "\x1b[013z",
|
||||||
|
KeyF14: "\x1b[014z",
|
||||||
|
KeyF15: "\x1b[000z",
|
||||||
|
KeyF16: "\x1b[101z",
|
||||||
|
KeyF17: "\x1b[102z",
|
||||||
|
KeyF18: "\x1b[103z",
|
||||||
|
KeyF19: "\x1b[104z",
|
||||||
|
KeyF20: "\x1b[105z",
|
||||||
|
KeyF21: "\x1b[106z",
|
||||||
|
KeyF22: "\x1b[107z",
|
||||||
|
KeyF23: "\x1b[108z",
|
||||||
|
KeyF24: "\x1b[109z",
|
||||||
|
KeyF25: "\x1b[110z",
|
||||||
|
KeyF26: "\x1b[111z",
|
||||||
|
KeyF27: "\x1b[112z",
|
||||||
|
KeyF28: "\x1b[113z",
|
||||||
|
KeyF29: "\x1b[114z",
|
||||||
|
KeyF30: "\x1b[100z",
|
||||||
|
KeyF31: "\x1b[201z",
|
||||||
|
KeyF32: "\x1b[202z",
|
||||||
|
KeyF33: "\x1b[203z",
|
||||||
|
KeyF34: "\x1b[204z",
|
||||||
|
KeyF35: "\x1b[205z",
|
||||||
|
KeyF36: "\x1b[206z",
|
||||||
|
KeyF37: "\x1b[207z",
|
||||||
|
KeyF38: "\x1b[208z",
|
||||||
|
KeyF39: "\x1b[209z",
|
||||||
|
KeyF40: "\x1b[210z",
|
||||||
|
KeyF41: "\x1b[211z",
|
||||||
|
KeyF42: "\x1b[212z",
|
||||||
|
KeyF43: "\x1b[213z",
|
||||||
|
KeyF44: "\x1b[214z",
|
||||||
|
KeyF45: "\x1b[200z",
|
||||||
|
KeyF46: "\x1b[301z",
|
||||||
|
KeyF47: "\x1b[302z",
|
||||||
|
KeyF48: "\x1b[303z",
|
||||||
|
KeyF49: "\x1b[304z",
|
||||||
|
KeyF50: "\x1b[305z",
|
||||||
|
KeyF51: "\x1b[306z",
|
||||||
|
KeyF52: "\x1b[307z",
|
||||||
|
KeyF53: "\x1b[308z",
|
||||||
|
KeyF54: "\x1b[309z",
|
||||||
|
KeyF55: "\x1b[310z",
|
||||||
|
KeyF56: "\x1b[311z",
|
||||||
|
KeyF57: "\x1b[312z",
|
||||||
|
KeyF58: "\x1b[313z",
|
||||||
|
KeyF59: "\x1b[314z",
|
||||||
|
KeyF60: "\x1b[300z",
|
||||||
|
KeyPrint: "\x1b[i",
|
||||||
|
KeyClear: "\x1b[2J",
|
||||||
|
})
|
||||||
|
}
|
64
vendor/github.com/gdamore/tcell/terminfo/term_dtterm.go
generated
vendored
Normal file
64
vendor/github.com/gdamore/tcell/terminfo/term_dtterm.go
generated
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// CDE desktop terminal
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "dtterm",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b(B\x1b)0",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyHelp: "\x1b[28~",
|
||||||
|
})
|
||||||
|
}
|
153
vendor/github.com/gdamore/tcell/terminfo/term_gnome.go
generated
vendored
Normal file
153
vendor/github.com/gdamore/tcell/terminfo/term_gnome.go
generated
vendored
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// GNOME Terminal
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "gnome",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1bOH",
|
||||||
|
KeyEnd: "\x1bOF",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1bO1;2P",
|
||||||
|
KeyF14: "\x1bO1;2Q",
|
||||||
|
KeyF15: "\x1bO1;2R",
|
||||||
|
KeyF16: "\x1bO1;2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1bO1;5P",
|
||||||
|
KeyF26: "\x1bO1;5Q",
|
||||||
|
KeyF27: "\x1bO1;5R",
|
||||||
|
KeyF28: "\x1bO1;5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1bO1;6P",
|
||||||
|
KeyF38: "\x1bO1;6Q",
|
||||||
|
KeyF39: "\x1bO1;6R",
|
||||||
|
KeyF40: "\x1bO1;6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1bO1;3P",
|
||||||
|
KeyF50: "\x1bO1;3Q",
|
||||||
|
KeyF51: "\x1bO1;3R",
|
||||||
|
KeyF52: "\x1bO1;3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1bO1;4P",
|
||||||
|
KeyF62: "\x1bO1;4Q",
|
||||||
|
KeyF63: "\x1bO1;4R",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[1;2D",
|
||||||
|
KeyShfRight: "\x1b[1;2C",
|
||||||
|
KeyShfUp: "\x1b[1;2A",
|
||||||
|
KeyShfDown: "\x1b[1;2B",
|
||||||
|
KeyCtrlLeft: "\x1b[1;5D",
|
||||||
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
|
KeyAltRight: "\x1b[1;3C",
|
||||||
|
KeyAltUp: "\x1b[1;3A",
|
||||||
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyAltShfLeft: "\x1b[1;4D",
|
||||||
|
KeyAltShfRight: "\x1b[1;4C",
|
||||||
|
KeyAltShfUp: "\x1b[1;4A",
|
||||||
|
KeyAltShfDown: "\x1b[1;4B",
|
||||||
|
KeyMetaShfLeft: "\x1b[1;10D",
|
||||||
|
KeyMetaShfRight: "\x1b[1;10C",
|
||||||
|
KeyMetaShfUp: "\x1b[1;10A",
|
||||||
|
KeyMetaShfDown: "\x1b[1;10B",
|
||||||
|
KeyCtrlShfLeft: "\x1b[1;6D",
|
||||||
|
KeyCtrlShfRight: "\x1b[1;6C",
|
||||||
|
KeyCtrlShfUp: "\x1b[1;6A",
|
||||||
|
KeyCtrlShfDown: "\x1b[1;6B",
|
||||||
|
KeyShfHome: "\x1b[1;2H",
|
||||||
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
|
KeyAltHome: "\x1b[1;9H",
|
||||||
|
KeyAltEnd: "\x1b[1;9F",
|
||||||
|
KeyCtrlShfHome: "\x1b[1;6H",
|
||||||
|
KeyCtrlShfEnd: "\x1b[1;6F",
|
||||||
|
KeyMetaShfHome: "\x1b[1;10H",
|
||||||
|
KeyMetaShfEnd: "\x1b[1;10F",
|
||||||
|
KeyAltShfHome: "\x1b[1;4H",
|
||||||
|
KeyAltShfEnd: "\x1b[1;4F",
|
||||||
|
})
|
||||||
|
}
|
153
vendor/github.com/gdamore/tcell/terminfo/term_gnome_256color.go
generated
vendored
Normal file
153
vendor/github.com/gdamore/tcell/terminfo/term_gnome_256color.go
generated
vendored
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// GNOME Terminal with xterm 256-colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "gnome-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1bOH",
|
||||||
|
KeyEnd: "\x1bOF",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1bO1;2P",
|
||||||
|
KeyF14: "\x1bO1;2Q",
|
||||||
|
KeyF15: "\x1bO1;2R",
|
||||||
|
KeyF16: "\x1bO1;2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1bO1;5P",
|
||||||
|
KeyF26: "\x1bO1;5Q",
|
||||||
|
KeyF27: "\x1bO1;5R",
|
||||||
|
KeyF28: "\x1bO1;5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1bO1;6P",
|
||||||
|
KeyF38: "\x1bO1;6Q",
|
||||||
|
KeyF39: "\x1bO1;6R",
|
||||||
|
KeyF40: "\x1bO1;6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1bO1;3P",
|
||||||
|
KeyF50: "\x1bO1;3Q",
|
||||||
|
KeyF51: "\x1bO1;3R",
|
||||||
|
KeyF52: "\x1bO1;3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1bO1;4P",
|
||||||
|
KeyF62: "\x1bO1;4Q",
|
||||||
|
KeyF63: "\x1bO1;4R",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[1;2D",
|
||||||
|
KeyShfRight: "\x1b[1;2C",
|
||||||
|
KeyShfUp: "\x1b[1;2A",
|
||||||
|
KeyShfDown: "\x1b[1;2B",
|
||||||
|
KeyCtrlLeft: "\x1b[1;5D",
|
||||||
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
|
KeyAltRight: "\x1b[1;3C",
|
||||||
|
KeyAltUp: "\x1b[1;3A",
|
||||||
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyAltShfLeft: "\x1b[1;4D",
|
||||||
|
KeyAltShfRight: "\x1b[1;4C",
|
||||||
|
KeyAltShfUp: "\x1b[1;4A",
|
||||||
|
KeyAltShfDown: "\x1b[1;4B",
|
||||||
|
KeyMetaShfLeft: "\x1b[1;10D",
|
||||||
|
KeyMetaShfRight: "\x1b[1;10C",
|
||||||
|
KeyMetaShfUp: "\x1b[1;10A",
|
||||||
|
KeyMetaShfDown: "\x1b[1;10B",
|
||||||
|
KeyCtrlShfLeft: "\x1b[1;6D",
|
||||||
|
KeyCtrlShfRight: "\x1b[1;6C",
|
||||||
|
KeyCtrlShfUp: "\x1b[1;6A",
|
||||||
|
KeyCtrlShfDown: "\x1b[1;6B",
|
||||||
|
KeyShfHome: "\x1b[1;2H",
|
||||||
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
|
KeyAltHome: "\x1b[1;9H",
|
||||||
|
KeyAltEnd: "\x1b[1;9F",
|
||||||
|
KeyCtrlShfHome: "\x1b[1;6H",
|
||||||
|
KeyCtrlShfEnd: "\x1b[1;6F",
|
||||||
|
KeyMetaShfHome: "\x1b[1;10H",
|
||||||
|
KeyMetaShfEnd: "\x1b[1;10F",
|
||||||
|
KeyAltShfHome: "\x1b[1;4H",
|
||||||
|
KeyAltShfEnd: "\x1b[1;4F",
|
||||||
|
})
|
||||||
|
}
|
47
vendor/github.com/gdamore/tcell/terminfo/term_hpterm.go
generated
vendored
Normal file
47
vendor/github.com/gdamore/tcell/terminfo/term_hpterm.go
generated
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// hp X11 terminal emulator
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "hpterm",
|
||||||
|
Aliases: []string{"X-hpterm"},
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b&a0y0C\x1bJ",
|
||||||
|
AttrOff: "\x1b&d@",
|
||||||
|
Underline: "\x1b&dD",
|
||||||
|
Bold: "\x1b&dB",
|
||||||
|
Dim: "\x1b&dH",
|
||||||
|
Reverse: "\x1b&dB",
|
||||||
|
EnterKeypad: "\x1b&s1A",
|
||||||
|
ExitKeypad: "\x1b&s0A",
|
||||||
|
PadChar: "\x00",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
SetCursor: "\x1b&a%p1%dy%p2%dC",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1bA",
|
||||||
|
KeyUp: "\x1bA",
|
||||||
|
KeyDown: "\x1bB",
|
||||||
|
KeyRight: "\x1bC",
|
||||||
|
KeyLeft: "\x1bD",
|
||||||
|
KeyInsert: "\x1bQ",
|
||||||
|
KeyDelete: "\x1bP",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1bh",
|
||||||
|
KeyPgUp: "\x1bV",
|
||||||
|
KeyPgDn: "\x1bU",
|
||||||
|
KeyF1: "\x1bp",
|
||||||
|
KeyF2: "\x1bq",
|
||||||
|
KeyF3: "\x1br",
|
||||||
|
KeyF4: "\x1bs",
|
||||||
|
KeyF5: "\x1bt",
|
||||||
|
KeyF6: "\x1bu",
|
||||||
|
KeyF7: "\x1bv",
|
||||||
|
KeyF8: "\x1bw",
|
||||||
|
KeyClear: "\x1bJ",
|
||||||
|
})
|
||||||
|
}
|
23
vendor/github.com/gdamore/tcell/terminfo/term_hz1500.go
generated
vendored
Normal file
23
vendor/github.com/gdamore/tcell/terminfo/term_hz1500.go
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// hazeltine 1500
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "hz1500",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "~\x1c",
|
||||||
|
PadChar: "\x00",
|
||||||
|
SetCursor: "~\x0021%p2%p2%?%{30}%>%t%' '%+%;%'`'%+%c%p1%'`'%+%c",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "~\f",
|
||||||
|
KeyUp: "~\f",
|
||||||
|
KeyDown: "\n",
|
||||||
|
KeyRight: "\x10",
|
||||||
|
KeyLeft: "\b",
|
||||||
|
KeyHome: "~\x12",
|
||||||
|
})
|
||||||
|
}
|
112
vendor/github.com/gdamore/tcell/terminfo/term_konsole.go
generated
vendored
Normal file
112
vendor/github.com/gdamore/tcell/terminfo/term_konsole.go
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// KDE console window
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "konsole",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1bOH",
|
||||||
|
KeyEnd: "\x1bOF",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1bO2P",
|
||||||
|
KeyF14: "\x1bO2Q",
|
||||||
|
KeyF15: "\x1bO2R",
|
||||||
|
KeyF16: "\x1bO2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1bO5P",
|
||||||
|
KeyF26: "\x1bO5Q",
|
||||||
|
KeyF27: "\x1bO5R",
|
||||||
|
KeyF28: "\x1bO5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1bO6P",
|
||||||
|
KeyF38: "\x1bO6Q",
|
||||||
|
KeyF39: "\x1bO6R",
|
||||||
|
KeyF40: "\x1bO6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1bO3P",
|
||||||
|
KeyF50: "\x1bO3Q",
|
||||||
|
KeyF51: "\x1bO3R",
|
||||||
|
KeyF52: "\x1bO3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1bO4P",
|
||||||
|
KeyF62: "\x1bO4Q",
|
||||||
|
KeyF63: "\x1bO4R",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
112
vendor/github.com/gdamore/tcell/terminfo/term_konsole_256color.go
generated
vendored
Normal file
112
vendor/github.com/gdamore/tcell/terminfo/term_konsole_256color.go
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// KDE console window with xterm 256-colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "konsole-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1bOH",
|
||||||
|
KeyEnd: "\x1bOF",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1bO2P",
|
||||||
|
KeyF14: "\x1bO2Q",
|
||||||
|
KeyF15: "\x1bO2R",
|
||||||
|
KeyF16: "\x1bO2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1bO5P",
|
||||||
|
KeyF26: "\x1bO5Q",
|
||||||
|
KeyF27: "\x1bO5R",
|
||||||
|
KeyF28: "\x1bO5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1bO6P",
|
||||||
|
KeyF38: "\x1bO6Q",
|
||||||
|
KeyF39: "\x1bO6R",
|
||||||
|
KeyF40: "\x1bO6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1bO3P",
|
||||||
|
KeyF50: "\x1bO3Q",
|
||||||
|
KeyF51: "\x1bO3R",
|
||||||
|
KeyF52: "\x1bO3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1bO4P",
|
||||||
|
KeyF62: "\x1bO4Q",
|
||||||
|
KeyF63: "\x1bO4R",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
64
vendor/github.com/gdamore/tcell/terminfo/term_kterm.go
generated
vendored
Normal file
64
vendor/github.com/gdamore/tcell/terminfo/term_kterm.go
generated
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// kterm kanji terminal emulator (X window system)
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "kterm",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
AttrOff: "\x1b[m\x1b(B",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aajjkkllmmnnooppqqrrssttuuvvwwxx~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
})
|
||||||
|
}
|
65
vendor/github.com/gdamore/tcell/terminfo/term_linux.go
generated
vendored
Normal file
65
vendor/github.com/gdamore/tcell/terminfo/term_linux.go
generated
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// linux console
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "linux",
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
ShowCursor: "\x1b[?25h\x1b[?0c",
|
||||||
|
HideCursor: "\x1b[?25l\x1b[?1c",
|
||||||
|
AttrOff: "\x1b[0;10m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260i316j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
|
||||||
|
EnterAcs: "\x1b[11m",
|
||||||
|
ExitAcs: "\x1b[10m",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[[A",
|
||||||
|
KeyF2: "\x1b[[B",
|
||||||
|
KeyF3: "\x1b[[C",
|
||||||
|
KeyF4: "\x1b[[D",
|
||||||
|
KeyF5: "\x1b[[E",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
36
vendor/github.com/gdamore/tcell/terminfo/term_pcansi.go
generated
vendored
Normal file
36
vendor/github.com/gdamore/tcell/terminfo/term_pcansi.go
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// ibm-pc terminal programs claiming to be ansi
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "pcansi",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
AttrOff: "\x1b[0;10m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
|
||||||
|
EnterAcs: "\x1b[12m",
|
||||||
|
ExitAcs: "\x1b[10m",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\x1b[D",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[H",
|
||||||
|
})
|
||||||
|
}
|
107
vendor/github.com/gdamore/tcell/terminfo/term_rxvt.go
generated
vendored
Normal file
107
vendor/github.com/gdamore/tcell/terminfo/term_rxvt.go
generated
vendored
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// rxvt terminal emulator (X Window System)
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "rxvt",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b=",
|
||||||
|
ExitKeypad: "\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b(B\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[7~",
|
||||||
|
KeyEnd: "\x1b[8~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyF21: "\x1b[23$",
|
||||||
|
KeyF22: "\x1b[24$",
|
||||||
|
KeyF23: "\x1b[11^",
|
||||||
|
KeyF24: "\x1b[12^",
|
||||||
|
KeyF25: "\x1b[13^",
|
||||||
|
KeyF26: "\x1b[14^",
|
||||||
|
KeyF27: "\x1b[15^",
|
||||||
|
KeyF28: "\x1b[17^",
|
||||||
|
KeyF29: "\x1b[18^",
|
||||||
|
KeyF30: "\x1b[19^",
|
||||||
|
KeyF31: "\x1b[20^",
|
||||||
|
KeyF32: "\x1b[21^",
|
||||||
|
KeyF33: "\x1b[23^",
|
||||||
|
KeyF34: "\x1b[24^",
|
||||||
|
KeyF35: "\x1b[25^",
|
||||||
|
KeyF36: "\x1b[26^",
|
||||||
|
KeyF37: "\x1b[28^",
|
||||||
|
KeyF38: "\x1b[29^",
|
||||||
|
KeyF39: "\x1b[31^",
|
||||||
|
KeyF40: "\x1b[32^",
|
||||||
|
KeyF41: "\x1b[33^",
|
||||||
|
KeyF42: "\x1b[34^",
|
||||||
|
KeyF43: "\x1b[23@",
|
||||||
|
KeyF44: "\x1b[24@",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[d",
|
||||||
|
KeyShfRight: "\x1b[c",
|
||||||
|
KeyShfUp: "\x1b[a",
|
||||||
|
KeyShfDown: "\x1b[b",
|
||||||
|
KeyCtrlLeft: "\x1b[Od",
|
||||||
|
KeyCtrlRight: "\x1b[Oc",
|
||||||
|
KeyCtrlUp: "\x1b[Oa",
|
||||||
|
KeyCtrlDown: "\x1b[Ob",
|
||||||
|
KeyShfHome: "\x1b[7$",
|
||||||
|
KeyShfEnd: "\x1b[8$",
|
||||||
|
KeyCtrlHome: "\x1b[7^",
|
||||||
|
KeyCtrlEnd: "\x1b[8^",
|
||||||
|
})
|
||||||
|
}
|
107
vendor/github.com/gdamore/tcell/terminfo/term_rxvt_256color.go
generated
vendored
Normal file
107
vendor/github.com/gdamore/tcell/terminfo/term_rxvt_256color.go
generated
vendored
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// rxvt 2.7.9 with xterm 256-colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "rxvt-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b7\x1b[?47h",
|
||||||
|
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
|
||||||
|
ShowCursor: "\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b=",
|
||||||
|
ExitKeypad: "\x1b>",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b(B\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[7~",
|
||||||
|
KeyEnd: "\x1b[8~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyF21: "\x1b[23$",
|
||||||
|
KeyF22: "\x1b[24$",
|
||||||
|
KeyF23: "\x1b[11^",
|
||||||
|
KeyF24: "\x1b[12^",
|
||||||
|
KeyF25: "\x1b[13^",
|
||||||
|
KeyF26: "\x1b[14^",
|
||||||
|
KeyF27: "\x1b[15^",
|
||||||
|
KeyF28: "\x1b[17^",
|
||||||
|
KeyF29: "\x1b[18^",
|
||||||
|
KeyF30: "\x1b[19^",
|
||||||
|
KeyF31: "\x1b[20^",
|
||||||
|
KeyF32: "\x1b[21^",
|
||||||
|
KeyF33: "\x1b[23^",
|
||||||
|
KeyF34: "\x1b[24^",
|
||||||
|
KeyF35: "\x1b[25^",
|
||||||
|
KeyF36: "\x1b[26^",
|
||||||
|
KeyF37: "\x1b[28^",
|
||||||
|
KeyF38: "\x1b[29^",
|
||||||
|
KeyF39: "\x1b[31^",
|
||||||
|
KeyF40: "\x1b[32^",
|
||||||
|
KeyF41: "\x1b[33^",
|
||||||
|
KeyF42: "\x1b[34^",
|
||||||
|
KeyF43: "\x1b[23@",
|
||||||
|
KeyF44: "\x1b[24@",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[d",
|
||||||
|
KeyShfRight: "\x1b[c",
|
||||||
|
KeyShfUp: "\x1b[a",
|
||||||
|
KeyShfDown: "\x1b[b",
|
||||||
|
KeyCtrlLeft: "\x1b[Od",
|
||||||
|
KeyCtrlRight: "\x1b[Oc",
|
||||||
|
KeyCtrlUp: "\x1b[Oa",
|
||||||
|
KeyCtrlDown: "\x1b[Ob",
|
||||||
|
KeyShfHome: "\x1b[7$",
|
||||||
|
KeyShfEnd: "\x1b[8$",
|
||||||
|
KeyCtrlHome: "\x1b[7^",
|
||||||
|
KeyCtrlEnd: "\x1b[8^",
|
||||||
|
})
|
||||||
|
}
|
81
vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode.go
generated
vendored
Normal file
81
vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode.go
generated
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// rxvt-unicode terminal (X Window System)
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "rxvt-unicode",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 88,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[r\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[?12l\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x1b(B",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b=",
|
||||||
|
ExitKeypad: "\x1b>",
|
||||||
|
SetFg: "\x1b[38;5;%p1%dm",
|
||||||
|
SetBg: "\x1b[48;5;%p1%dm",
|
||||||
|
SetFgBg: "\x1b[38;5;%p1%d;48;5;%p2%dm",
|
||||||
|
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[7~",
|
||||||
|
KeyEnd: "\x1b[8~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[d",
|
||||||
|
KeyShfRight: "\x1b[c",
|
||||||
|
KeyShfUp: "\x1b[a",
|
||||||
|
KeyShfDown: "\x1b[b",
|
||||||
|
KeyCtrlLeft: "\x1b[Od",
|
||||||
|
KeyCtrlRight: "\x1b[Oc",
|
||||||
|
KeyCtrlUp: "\x1b[Oa",
|
||||||
|
KeyCtrlDown: "\x1b[Ob",
|
||||||
|
KeyShfHome: "\x1b[7$",
|
||||||
|
KeyShfEnd: "\x1b[8$",
|
||||||
|
KeyCtrlHome: "\x1b[7^",
|
||||||
|
KeyCtrlEnd: "\x1b[8^",
|
||||||
|
})
|
||||||
|
}
|
81
vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode_256color.go
generated
vendored
Normal file
81
vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode_256color.go
generated
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// rxvt-unicode terminal with 256 colors (X Window System)
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "rxvt-unicode-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[r\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[?12l\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x1b(B",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b=",
|
||||||
|
ExitKeypad: "\x1b>",
|
||||||
|
SetFg: "\x1b[38;5;%p1%dm",
|
||||||
|
SetBg: "\x1b[48;5;%p1%dm",
|
||||||
|
SetFgBg: "\x1b[38;5;%p1%d;48;5;%p2%dm",
|
||||||
|
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1b[A",
|
||||||
|
KeyDown: "\x1b[B",
|
||||||
|
KeyRight: "\x1b[C",
|
||||||
|
KeyLeft: "\x1b[D",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[7~",
|
||||||
|
KeyEnd: "\x1b[8~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1b[11~",
|
||||||
|
KeyF2: "\x1b[12~",
|
||||||
|
KeyF3: "\x1b[13~",
|
||||||
|
KeyF4: "\x1b[14~",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[25~",
|
||||||
|
KeyF14: "\x1b[26~",
|
||||||
|
KeyF15: "\x1b[28~",
|
||||||
|
KeyF16: "\x1b[29~",
|
||||||
|
KeyF17: "\x1b[31~",
|
||||||
|
KeyF18: "\x1b[32~",
|
||||||
|
KeyF19: "\x1b[33~",
|
||||||
|
KeyF20: "\x1b[34~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[d",
|
||||||
|
KeyShfRight: "\x1b[c",
|
||||||
|
KeyShfUp: "\x1b[a",
|
||||||
|
KeyShfDown: "\x1b[b",
|
||||||
|
KeyCtrlLeft: "\x1b[Od",
|
||||||
|
KeyCtrlRight: "\x1b[Oc",
|
||||||
|
KeyCtrlUp: "\x1b[Oa",
|
||||||
|
KeyCtrlDown: "\x1b[Ob",
|
||||||
|
KeyShfHome: "\x1b[7$",
|
||||||
|
KeyShfEnd: "\x1b[8$",
|
||||||
|
KeyCtrlHome: "\x1b[7^",
|
||||||
|
KeyCtrlEnd: "\x1b[8^",
|
||||||
|
})
|
||||||
|
}
|
63
vendor/github.com/gdamore/tcell/terminfo/term_screen.go
generated
vendored
Normal file
63
vendor/github.com/gdamore/tcell/terminfo/term_screen.go
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// VT 100/ANSI X3.64 virtual terminal
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "screen",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[34h\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b(B\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1bM",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
63
vendor/github.com/gdamore/tcell/terminfo/term_screen_256color.go
generated
vendored
Normal file
63
vendor/github.com/gdamore/tcell/terminfo/term_screen_256color.go
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// GNU Screen with 256 colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "screen-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[34h\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[m\x0017",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
PadChar: "\x00",
|
||||||
|
AltChars: "++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x0e",
|
||||||
|
ExitAcs: "\x0f",
|
||||||
|
EnableAcs: "\x1b(B\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1bM",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "\b",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
})
|
||||||
|
}
|
155
vendor/github.com/gdamore/tcell/terminfo/term_st.go
generated
vendored
Normal file
155
vendor/github.com/gdamore/tcell/terminfo/term_st.go
generated
vendored
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// simpleterm
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "st",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[?12l\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[1;2P",
|
||||||
|
KeyF14: "\x1b[1;2Q",
|
||||||
|
KeyF15: "\x1b[1;2R",
|
||||||
|
KeyF16: "\x1b[1;2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1b[1;5P",
|
||||||
|
KeyF26: "\x1b[1;5Q",
|
||||||
|
KeyF27: "\x1b[1;5R",
|
||||||
|
KeyF28: "\x1b[1;5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1b[1;6P",
|
||||||
|
KeyF38: "\x1b[1;6Q",
|
||||||
|
KeyF39: "\x1b[1;6R",
|
||||||
|
KeyF40: "\x1b[1;6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1b[1;3P",
|
||||||
|
KeyF50: "\x1b[1;3Q",
|
||||||
|
KeyF51: "\x1b[1;3R",
|
||||||
|
KeyF52: "\x1b[1;3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1b[1;4P",
|
||||||
|
KeyF62: "\x1b[1;4Q",
|
||||||
|
KeyF63: "\x1b[1;4R",
|
||||||
|
KeyClear: "\x1b[3;5~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[1;2D",
|
||||||
|
KeyShfRight: "\x1b[1;2C",
|
||||||
|
KeyShfUp: "\x1b[1;2A",
|
||||||
|
KeyShfDown: "\x1b[1;2B",
|
||||||
|
KeyCtrlLeft: "\x1b[1;5D",
|
||||||
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
|
KeyAltRight: "\x1b[1;3C",
|
||||||
|
KeyAltUp: "\x1b[1;3A",
|
||||||
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyAltShfLeft: "\x1b[1;4D",
|
||||||
|
KeyAltShfRight: "\x1b[1;4C",
|
||||||
|
KeyAltShfUp: "\x1b[1;4A",
|
||||||
|
KeyAltShfDown: "\x1b[1;4B",
|
||||||
|
KeyMetaShfLeft: "\x1b[1;10D",
|
||||||
|
KeyMetaShfRight: "\x1b[1;10C",
|
||||||
|
KeyMetaShfUp: "\x1b[1;10A",
|
||||||
|
KeyMetaShfDown: "\x1b[1;10B",
|
||||||
|
KeyCtrlShfLeft: "\x1b[1;6D",
|
||||||
|
KeyCtrlShfRight: "\x1b[1;6C",
|
||||||
|
KeyCtrlShfUp: "\x1b[1;6A",
|
||||||
|
KeyCtrlShfDown: "\x1b[1;6B",
|
||||||
|
KeyShfHome: "\x1b[1;2H",
|
||||||
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
|
KeyAltHome: "\x1b[1;9H",
|
||||||
|
KeyAltEnd: "\x1b[1;9F",
|
||||||
|
KeyCtrlShfHome: "\x1b[1;6H",
|
||||||
|
KeyCtrlShfEnd: "\x1b[1;6F",
|
||||||
|
KeyMetaShfHome: "\x1b[1;10H",
|
||||||
|
KeyMetaShfEnd: "\x1b[1;10F",
|
||||||
|
KeyAltShfHome: "\x1b[1;4H",
|
||||||
|
KeyAltShfEnd: "\x1b[1;4F",
|
||||||
|
})
|
||||||
|
}
|
155
vendor/github.com/gdamore/tcell/terminfo/term_st_meta.go
generated
vendored
Normal file
155
vendor/github.com/gdamore/tcell/terminfo/term_st_meta.go
generated
vendored
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// simpleterm with meta key
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "st-meta",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 8,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[?12l\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[3%p1%dm",
|
||||||
|
SetBg: "\x1b[4%p1%dm",
|
||||||
|
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
|
||||||
|
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[1;2P",
|
||||||
|
KeyF14: "\x1b[1;2Q",
|
||||||
|
KeyF15: "\x1b[1;2R",
|
||||||
|
KeyF16: "\x1b[1;2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1b[1;5P",
|
||||||
|
KeyF26: "\x1b[1;5Q",
|
||||||
|
KeyF27: "\x1b[1;5R",
|
||||||
|
KeyF28: "\x1b[1;5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1b[1;6P",
|
||||||
|
KeyF38: "\x1b[1;6Q",
|
||||||
|
KeyF39: "\x1b[1;6R",
|
||||||
|
KeyF40: "\x1b[1;6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1b[1;3P",
|
||||||
|
KeyF50: "\x1b[1;3Q",
|
||||||
|
KeyF51: "\x1b[1;3R",
|
||||||
|
KeyF52: "\x1b[1;3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1b[1;4P",
|
||||||
|
KeyF62: "\x1b[1;4Q",
|
||||||
|
KeyF63: "\x1b[1;4R",
|
||||||
|
KeyClear: "\x1b[3;5~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[1;2D",
|
||||||
|
KeyShfRight: "\x1b[1;2C",
|
||||||
|
KeyShfUp: "\x1b[1;2A",
|
||||||
|
KeyShfDown: "\x1b[1;2B",
|
||||||
|
KeyCtrlLeft: "\x1b[1;5D",
|
||||||
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
|
KeyAltRight: "\x1b[1;3C",
|
||||||
|
KeyAltUp: "\x1b[1;3A",
|
||||||
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyAltShfLeft: "\x1b[1;4D",
|
||||||
|
KeyAltShfRight: "\x1b[1;4C",
|
||||||
|
KeyAltShfUp: "\x1b[1;4A",
|
||||||
|
KeyAltShfDown: "\x1b[1;4B",
|
||||||
|
KeyMetaShfLeft: "\x1b[1;10D",
|
||||||
|
KeyMetaShfRight: "\x1b[1;10C",
|
||||||
|
KeyMetaShfUp: "\x1b[1;10A",
|
||||||
|
KeyMetaShfDown: "\x1b[1;10B",
|
||||||
|
KeyCtrlShfLeft: "\x1b[1;6D",
|
||||||
|
KeyCtrlShfRight: "\x1b[1;6C",
|
||||||
|
KeyCtrlShfUp: "\x1b[1;6A",
|
||||||
|
KeyCtrlShfDown: "\x1b[1;6B",
|
||||||
|
KeyShfHome: "\x1b[1;2H",
|
||||||
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
|
KeyAltHome: "\x1b[1;9H",
|
||||||
|
KeyAltEnd: "\x1b[1;9F",
|
||||||
|
KeyCtrlShfHome: "\x1b[1;6H",
|
||||||
|
KeyCtrlShfEnd: "\x1b[1;6F",
|
||||||
|
KeyMetaShfHome: "\x1b[1;10H",
|
||||||
|
KeyMetaShfEnd: "\x1b[1;10F",
|
||||||
|
KeyAltShfHome: "\x1b[1;4H",
|
||||||
|
KeyAltShfEnd: "\x1b[1;4F",
|
||||||
|
})
|
||||||
|
}
|
155
vendor/github.com/gdamore/tcell/terminfo/term_st_meta_256color.go
generated
vendored
Normal file
155
vendor/github.com/gdamore/tcell/terminfo/term_st_meta_256color.go
generated
vendored
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// simpleterm with meta key and 256 colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "st-meta-256color",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[?12l\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[1;2P",
|
||||||
|
KeyF14: "\x1b[1;2Q",
|
||||||
|
KeyF15: "\x1b[1;2R",
|
||||||
|
KeyF16: "\x1b[1;2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1b[1;5P",
|
||||||
|
KeyF26: "\x1b[1;5Q",
|
||||||
|
KeyF27: "\x1b[1;5R",
|
||||||
|
KeyF28: "\x1b[1;5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1b[1;6P",
|
||||||
|
KeyF38: "\x1b[1;6Q",
|
||||||
|
KeyF39: "\x1b[1;6R",
|
||||||
|
KeyF40: "\x1b[1;6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1b[1;3P",
|
||||||
|
KeyF50: "\x1b[1;3Q",
|
||||||
|
KeyF51: "\x1b[1;3R",
|
||||||
|
KeyF52: "\x1b[1;3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1b[1;4P",
|
||||||
|
KeyF62: "\x1b[1;4Q",
|
||||||
|
KeyF63: "\x1b[1;4R",
|
||||||
|
KeyClear: "\x1b[3;5~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[1;2D",
|
||||||
|
KeyShfRight: "\x1b[1;2C",
|
||||||
|
KeyShfUp: "\x1b[1;2A",
|
||||||
|
KeyShfDown: "\x1b[1;2B",
|
||||||
|
KeyCtrlLeft: "\x1b[1;5D",
|
||||||
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
|
KeyAltRight: "\x1b[1;3C",
|
||||||
|
KeyAltUp: "\x1b[1;3A",
|
||||||
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyAltShfLeft: "\x1b[1;4D",
|
||||||
|
KeyAltShfRight: "\x1b[1;4C",
|
||||||
|
KeyAltShfUp: "\x1b[1;4A",
|
||||||
|
KeyAltShfDown: "\x1b[1;4B",
|
||||||
|
KeyMetaShfLeft: "\x1b[1;10D",
|
||||||
|
KeyMetaShfRight: "\x1b[1;10C",
|
||||||
|
KeyMetaShfUp: "\x1b[1;10A",
|
||||||
|
KeyMetaShfDown: "\x1b[1;10B",
|
||||||
|
KeyCtrlShfLeft: "\x1b[1;6D",
|
||||||
|
KeyCtrlShfRight: "\x1b[1;6C",
|
||||||
|
KeyCtrlShfUp: "\x1b[1;6A",
|
||||||
|
KeyCtrlShfDown: "\x1b[1;6B",
|
||||||
|
KeyShfHome: "\x1b[1;2H",
|
||||||
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
|
KeyAltHome: "\x1b[1;9H",
|
||||||
|
KeyAltEnd: "\x1b[1;9F",
|
||||||
|
KeyCtrlShfHome: "\x1b[1;6H",
|
||||||
|
KeyCtrlShfEnd: "\x1b[1;6F",
|
||||||
|
KeyMetaShfHome: "\x1b[1;10H",
|
||||||
|
KeyMetaShfEnd: "\x1b[1;10F",
|
||||||
|
KeyAltShfHome: "\x1b[1;4H",
|
||||||
|
KeyAltShfEnd: "\x1b[1;4F",
|
||||||
|
})
|
||||||
|
}
|
158
vendor/github.com/gdamore/tcell/terminfo/term_st_meta_truecolor.go
generated
vendored
Normal file
158
vendor/github.com/gdamore/tcell/terminfo/term_st_meta_truecolor.go
generated
vendored
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
// Generated automatically. DO NOT HAND-EDIT.
|
||||||
|
|
||||||
|
package terminfo
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// simpleterm with meta key and 256 colors
|
||||||
|
AddTerminfo(&Terminfo{
|
||||||
|
Name: "st-meta-truecolor",
|
||||||
|
Columns: 80,
|
||||||
|
Lines: 24,
|
||||||
|
Colors: 256,
|
||||||
|
Bell: "\a",
|
||||||
|
Clear: "\x1b[H\x1b[2J",
|
||||||
|
EnterCA: "\x1b[?1049h",
|
||||||
|
ExitCA: "\x1b[?1049l",
|
||||||
|
ShowCursor: "\x1b[?12l\x1b[?25h",
|
||||||
|
HideCursor: "\x1b[?25l",
|
||||||
|
AttrOff: "\x1b[0m",
|
||||||
|
Underline: "\x1b[4m",
|
||||||
|
Bold: "\x1b[1m",
|
||||||
|
Dim: "\x1b[2m",
|
||||||
|
Blink: "\x1b[5m",
|
||||||
|
Reverse: "\x1b[7m",
|
||||||
|
EnterKeypad: "\x1b[?1h\x1b=",
|
||||||
|
ExitKeypad: "\x1b[?1l\x1b>",
|
||||||
|
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
|
||||||
|
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
|
||||||
|
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
|
||||||
|
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
|
||||||
|
EnterAcs: "\x1b(0",
|
||||||
|
ExitAcs: "\x1b(B",
|
||||||
|
EnableAcs: "\x1b)0",
|
||||||
|
SetFgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%dm",
|
||||||
|
SetBgRGB: "\x1b[48;2;%p1%d;%p2%d;%p3%dm",
|
||||||
|
SetFgBgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%d;48;2;%p4%d;%p5%d;%p6%dm",
|
||||||
|
Mouse: "\x1b[M",
|
||||||
|
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
||||||
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
|
CursorBack1: "\b",
|
||||||
|
CursorUp1: "\x1b[A",
|
||||||
|
KeyUp: "\x1bOA",
|
||||||
|
KeyDown: "\x1bOB",
|
||||||
|
KeyRight: "\x1bOC",
|
||||||
|
KeyLeft: "\x1bOD",
|
||||||
|
KeyInsert: "\x1b[2~",
|
||||||
|
KeyDelete: "\x1b[3~",
|
||||||
|
KeyBackspace: "177",
|
||||||
|
KeyHome: "\x1b[1~",
|
||||||
|
KeyEnd: "\x1b[4~",
|
||||||
|
KeyPgUp: "\x1b[5~",
|
||||||
|
KeyPgDn: "\x1b[6~",
|
||||||
|
KeyF1: "\x1bOP",
|
||||||
|
KeyF2: "\x1bOQ",
|
||||||
|
KeyF3: "\x1bOR",
|
||||||
|
KeyF4: "\x1bOS",
|
||||||
|
KeyF5: "\x1b[15~",
|
||||||
|
KeyF6: "\x1b[17~",
|
||||||
|
KeyF7: "\x1b[18~",
|
||||||
|
KeyF8: "\x1b[19~",
|
||||||
|
KeyF9: "\x1b[20~",
|
||||||
|
KeyF10: "\x1b[21~",
|
||||||
|
KeyF11: "\x1b[23~",
|
||||||
|
KeyF12: "\x1b[24~",
|
||||||
|
KeyF13: "\x1b[1;2P",
|
||||||
|
KeyF14: "\x1b[1;2Q",
|
||||||
|
KeyF15: "\x1b[1;2R",
|
||||||
|
KeyF16: "\x1b[1;2S",
|
||||||
|
KeyF17: "\x1b[15;2~",
|
||||||
|
KeyF18: "\x1b[17;2~",
|
||||||
|
KeyF19: "\x1b[18;2~",
|
||||||
|
KeyF20: "\x1b[19;2~",
|
||||||
|
KeyF21: "\x1b[20;2~",
|
||||||
|
KeyF22: "\x1b[21;2~",
|
||||||
|
KeyF23: "\x1b[23;2~",
|
||||||
|
KeyF24: "\x1b[24;2~",
|
||||||
|
KeyF25: "\x1b[1;5P",
|
||||||
|
KeyF26: "\x1b[1;5Q",
|
||||||
|
KeyF27: "\x1b[1;5R",
|
||||||
|
KeyF28: "\x1b[1;5S",
|
||||||
|
KeyF29: "\x1b[15;5~",
|
||||||
|
KeyF30: "\x1b[17;5~",
|
||||||
|
KeyF31: "\x1b[18;5~",
|
||||||
|
KeyF32: "\x1b[19;5~",
|
||||||
|
KeyF33: "\x1b[20;5~",
|
||||||
|
KeyF34: "\x1b[21;5~",
|
||||||
|
KeyF35: "\x1b[23;5~",
|
||||||
|
KeyF36: "\x1b[24;5~",
|
||||||
|
KeyF37: "\x1b[1;6P",
|
||||||
|
KeyF38: "\x1b[1;6Q",
|
||||||
|
KeyF39: "\x1b[1;6R",
|
||||||
|
KeyF40: "\x1b[1;6S",
|
||||||
|
KeyF41: "\x1b[15;6~",
|
||||||
|
KeyF42: "\x1b[17;6~",
|
||||||
|
KeyF43: "\x1b[18;6~",
|
||||||
|
KeyF44: "\x1b[19;6~",
|
||||||
|
KeyF45: "\x1b[20;6~",
|
||||||
|
KeyF46: "\x1b[21;6~",
|
||||||
|
KeyF47: "\x1b[23;6~",
|
||||||
|
KeyF48: "\x1b[24;6~",
|
||||||
|
KeyF49: "\x1b[1;3P",
|
||||||
|
KeyF50: "\x1b[1;3Q",
|
||||||
|
KeyF51: "\x1b[1;3R",
|
||||||
|
KeyF52: "\x1b[1;3S",
|
||||||
|
KeyF53: "\x1b[15;3~",
|
||||||
|
KeyF54: "\x1b[17;3~",
|
||||||
|
KeyF55: "\x1b[18;3~",
|
||||||
|
KeyF56: "\x1b[19;3~",
|
||||||
|
KeyF57: "\x1b[20;3~",
|
||||||
|
KeyF58: "\x1b[21;3~",
|
||||||
|
KeyF59: "\x1b[23;3~",
|
||||||
|
KeyF60: "\x1b[24;3~",
|
||||||
|
KeyF61: "\x1b[1;4P",
|
||||||
|
KeyF62: "\x1b[1;4Q",
|
||||||
|
KeyF63: "\x1b[1;4R",
|
||||||
|
KeyClear: "\x1b[3;5~",
|
||||||
|
KeyBacktab: "\x1b[Z",
|
||||||
|
KeyShfLeft: "\x1b[1;2D",
|
||||||
|
KeyShfRight: "\x1b[1;2C",
|
||||||
|
KeyShfUp: "\x1b[1;2A",
|
||||||
|
KeyShfDown: "\x1b[1;2B",
|
||||||
|
KeyCtrlLeft: "\x1b[1;5D",
|
||||||
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
|
KeyAltRight: "\x1b[1;3C",
|
||||||
|
KeyAltUp: "\x1b[1;3A",
|
||||||
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyAltShfLeft: "\x1b[1;4D",
|
||||||
|
KeyAltShfRight: "\x1b[1;4C",
|
||||||
|
KeyAltShfUp: "\x1b[1;4A",
|
||||||
|
KeyAltShfDown: "\x1b[1;4B",
|
||||||
|
KeyMetaShfLeft: "\x1b[1;10D",
|
||||||
|
KeyMetaShfRight: "\x1b[1;10C",
|
||||||
|
KeyMetaShfUp: "\x1b[1;10A",
|
||||||
|
KeyMetaShfDown: "\x1b[1;10B",
|
||||||
|
KeyCtrlShfLeft: "\x1b[1;6D",
|
||||||
|
KeyCtrlShfRight: "\x1b[1;6C",
|
||||||
|
KeyCtrlShfUp: "\x1b[1;6A",
|
||||||
|
KeyCtrlShfDown: "\x1b[1;6B",
|
||||||
|
KeyShfHome: "\x1b[1;2H",
|
||||||
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
|
KeyAltHome: "\x1b[1;9H",
|
||||||
|
KeyAltEnd: "\x1b[1;9F",
|
||||||
|
KeyCtrlShfHome: "\x1b[1;6H",
|
||||||
|
KeyCtrlShfEnd: "\x1b[1;6F",
|
||||||
|
KeyMetaShfHome: "\x1b[1;10H",
|
||||||
|
KeyMetaShfEnd: "\x1b[1;10F",
|
||||||
|
KeyAltShfHome: "\x1b[1;4H",
|
||||||
|
KeyAltShfEnd: "\x1b[1;4F",
|
||||||
|
})
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user