aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-03-17 17:08:54 -0400
committerDrew DeVault <sir@cmpwn.com>2019-03-17 17:08:54 -0400
commit16c3f0a89309541e36a2de22e91176fd13c67898 (patch)
tree23c5946f4f56256a07a512d7c49a89c675c8ca0b
parent14cb8cb51f4a1dfca2486d154e2206b19f9401a7 (diff)
Handle terminal title, login shell
-rw-r--r--commands/term.go21
-rw-r--r--config/aerc.conf2
-rw-r--r--go.mod3
-rw-r--r--go.sum11
-rw-r--r--widgets/aerc.go1
-rw-r--r--widgets/terminal.go13
6 files changed, 43 insertions, 8 deletions
diff --git a/commands/term.go b/commands/term.go
index 0a2aa3b..7ce1947 100644
--- a/commands/term.go
+++ b/commands/term.go
@@ -1,11 +1,12 @@
package commands
import (
- "errors"
"os/exec"
"git.sr.ht/~sircmpwn/aerc2/lib/ui"
"git.sr.ht/~sircmpwn/aerc2/widgets"
+
+ "github.com/riywo/loginshell"
)
func init() {
@@ -13,8 +14,12 @@ func init() {
}
func Term(aerc *widgets.Aerc, args []string) error {
- if len(args) > 2 {
- return errors.New("Usage: term [<command>]")
+ if len(args) == 1 {
+ shell, err := loginshell.Shell()
+ if err != nil {
+ return err
+ }
+ args = append(args, shell)
}
term, err := widgets.NewTerminal(exec.Command(args[1], args[2:]...))
if err != nil {
@@ -27,7 +32,13 @@ func Term(aerc *widgets.Aerc, args []string) error {
{ui.SIZE_WEIGHT, 1},
})
grid.AddChild(term).At(0, 1)
- aerc.NewTab(grid, "Terminal")
- // TODO: update tab name when child process changes it
+ tab := aerc.NewTab(grid, "Terminal")
+ term.OnTitle = func(title string) {
+ if title == "" {
+ title = "Terminal"
+ }
+ tab.Name = title
+ tab.Content.Invalidate()
+ }
return nil
}
diff --git a/config/aerc.conf b/config/aerc.conf
index e465d5e..5a4317f 100644
--- a/config/aerc.conf
+++ b/config/aerc.conf
@@ -126,7 +126,7 @@ h = :prev-tab<Enter>
d = :confirm 'Really delete this message?' ':delete-message<Enter>'<Enter>
c = :cf<space>
-$ = :term-exec
+$ = :term<space>
[mbinds]
#
diff --git a/go.mod b/go.mod
index 42b932f..c70fa24 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
module git.sr.ht/~sircmpwn/aerc2
require (
- git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190316225658-2a4963dd9ec0
+ git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317210455-72d6c2838fbe
github.com/emersion/go-imap v1.0.0-beta.1
github.com/emersion/go-imap-idle v0.0.0-20180114101550-2af93776db6b
github.com/emersion/go-sasl v0.0.0-20161116183048-7e096a0a6197 // indirect
@@ -16,6 +16,7 @@ require (
github.com/mattn/go-runewidth v0.0.2
github.com/mitchellh/go-homedir v1.1.0
github.com/nsf/termbox-go v0.0.0-20180129072728-88b7b944be8b
+ github.com/riywo/loginshell v0.0.0-20181227004642-c2f4167b2303
github.com/stretchr/testify v1.3.0
golang.org/x/text v0.3.0
)
diff --git a/go.sum b/go.sum
index dc3ccf1..8ee8cab 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,13 @@
git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190316225658-2a4963dd9ec0 h1:aIQh7m6L3uS8/lg021Cia2QtttUgZO0LuuxJ8wc57dQ=
git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190316225658-2a4963dd9ec0/go.mod h1:cp37LbiS1y4CrTOmKSF87ZMLwawWUF612RYKTi8vbDc=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317204448-1089ad765386 h1:3Zw5LLe4S7iyeZZsuDPyMPKalUvD8//FBdO7uSlB+s0=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317204448-1089ad765386/go.mod h1:cp37LbiS1y4CrTOmKSF87ZMLwawWUF612RYKTi8vbDc=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317205821-0763add02731 h1:/TF+apPakaqSpg2co0zXsndxeYQODhCbyGxlGpVeEhw=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317205821-0763add02731/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317205953-0674b071e8bf h1:6Ynr+M6lUnkIxi8ONNmDn6dbyBTt1PawA6sT39S7i/8=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317205953-0674b071e8bf/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317210455-72d6c2838fbe h1:pg73OOcg6PZp+XUOsFaqGG4Heu3kYAJZHSaS6eRRmJk=
+git.sr.ht/~sircmpwn/go-libvterm v0.0.0-20190317210455-72d6c2838fbe/go.mod h1:hT88+cTemwwESbMptwC7O33qrJfQX0SgRWbXlndUS2c=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emersion/go-imap v1.0.0-beta.1 h1:bTCaVlUnb5mKoW9lEukusxguSYYZPer+q0g5t+vw5X0=
@@ -39,8 +47,11 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk
github.com/nsf/termbox-go v0.0.0-20180129072728-88b7b944be8b/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/riywo/loginshell v0.0.0-20181227004642-c2f4167b2303 h1:iVSzuQeMQqR6xo15tY215nUTBmrgpTq0Qwaw+YEil24=
+github.com/riywo/loginshell v0.0.0-20181227004642-c2f4167b2303/go.mod h1:/PfPXh0EntGc3QAAyUaviy4S9tzy4Zp0e2ilq4voC6E=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/widgets/aerc.go b/widgets/aerc.go
index b94d03d..a968ab1 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -96,7 +96,6 @@ func (aerc *Aerc) Draw(ctx *libui.Context) {
func (aerc *Aerc) Event(event tcell.Event) bool {
if aerc.focused != nil {
- aerc.logger.Println("sending event to focused child")
return aerc.focused.Event(event)
}
diff --git a/widgets/terminal.go b/widgets/terminal.go
index 502d974..bd84ab4 100644
--- a/widgets/terminal.go
+++ b/widgets/terminal.go
@@ -25,6 +25,8 @@ type Terminal struct {
pty *os.File
start chan interface{}
vterm *vterm.VTerm
+
+ OnTitle func(title string)
}
func NewTerminal(cmd *exec.Cmd) (*Terminal, error) {
@@ -51,6 +53,7 @@ func NewTerminal(cmd *exec.Cmd) (*Terminal, error) {
screen := term.vterm.ObtainScreen()
screen.OnDamage = term.onDamage
screen.OnMoveCursor = term.onMoveCursor
+ screen.OnSetTermProp = term.onSetTermProp
screen.Reset(true)
state := term.vterm.ObtainState()
@@ -231,3 +234,13 @@ func (term *Terminal) onMoveCursor(old *vterm.Pos,
term.resetCursor()
return 1
}
+
+func (term *Terminal) onSetTermProp(prop int, val *vterm.VTermValue) int {
+ switch prop {
+ case vterm.VTERM_PROP_TITLE:
+ if term.OnTitle != nil {
+ term.OnTitle(val.String)
+ }
+ }
+ return 1
+}