diff options
author | Robin Jarry <robin@jarry.cc> | 2022-02-20 10:32:38 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-02-20 21:29:20 +0100 |
commit | 726969833bc95fc97f5ee38b435d4ba23b5613d4 (patch) | |
tree | b74a1bd8cf8685ee5ea01473b317c92843c56f05 | |
parent | 6c460493efafb065822a9bb4454599f5c6522c61 (diff) | |
download | aerc-726969833bc95fc97f5ee38b435d4ba23b5613d4.tar.gz |
main: use terminfo to set window title
Parse the terminal capabilities from the TERM environment variable
instead of using a hard coded list of terminals.
tcell does not expose the status line capabilities. Use another library
for this: github.com/xo/terminfo
Signed-off-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | aerc.go | 26 | ||||
-rw-r--r-- | go.mod | 1 | ||||
-rw-r--r-- | go.sum | 2 |
3 files changed, 18 insertions, 11 deletions
@@ -1,6 +1,7 @@ package main import ( + "bytes" "fmt" "io" "io/ioutil" @@ -8,11 +9,11 @@ import ( "os" "runtime/debug" "sort" - "strings" "time" "git.sr.ht/~sircmpwn/getopt" "github.com/mattn/go-isatty" + "github.com/xo/terminfo" "git.sr.ht/~rjarry/aerc/commands" "git.sr.ht/~rjarry/aerc/commands/account" @@ -93,18 +94,21 @@ func usage() { log.Fatal("Usage: aerc [-v] [mailto:...]") } -var termsWithStatusLine = []string{"xterm", "tmux", "screen"} - func setWindowTitle() { - term := strings.ToLower(os.Getenv("TERM")) - for _, t := range termsWithStatusLine { - if strings.Contains(term, t) { - // TODO: avoid hard coding the list of terminals that - // have status line support. - os.Stderr.Write([]byte("\x1b]0;aerc\a")) - return - } + ti, err := terminfo.LoadFromEnv() + if err != nil { + return } + + if !ti.Has(terminfo.HasStatusLine) { + return + } + + buf := new(bytes.Buffer) + ti.Fprintf(buf, terminfo.ToStatusLine) + fmt.Fprint(buf, "aerc") + ti.Fprintf(buf, terminfo.FromStatusLine) + os.Stderr.Write(buf.Bytes()) } func main() { @@ -31,6 +31,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/riywo/loginshell v0.0.0-20200815045211-7d26008be1ab github.com/stretchr/testify v1.4.0 + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect github.com/zenhack/go.notmuch v0.0.0-20211022191430-4d57e8ad2a8b golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect golang.org/x/net v0.0.0-20211029224645-99673261e6eb // indirect @@ -191,6 +191,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= |