diff --git a/README.md b/README.md index 99811cc..da732c5 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ Option | Description -s | select initial container sort field -scale-cpu | show cpu as % of system total -v | output version information and exit +-shell | specify shell (default: sh) ### Keybindings @@ -84,6 +85,7 @@ s | Select container sort field r | Reverse container sort order o | Open single view l | View container logs (`t` to toggle timestamp when open) +e | Exec Shell S | Save current configuration to file q | Quit ctop diff --git a/config/param.go b/config/param.go index 30dd036..f0b7ef1 100644 --- a/config/param.go +++ b/config/param.go @@ -12,6 +12,11 @@ var params = []*Param{ Val: "state", Label: "Container Sort Field", }, + &Param{ + Key: "shell", + Val: "sh", + Label: "Shell", + }, } type Param struct { diff --git a/grid.go b/grid.go index c646c16..871d3cb 100644 --- a/grid.go +++ b/grid.go @@ -117,7 +117,7 @@ func Display() bool { ui.StopLoop() }) ui.Handle("/sys/kbd/e", func(ui.Event) { - menu = ExecSh + menu = ExecShell ui.StopLoop() }) ui.Handle("/sys/kbd/o", func(ui.Event) { diff --git a/main.go b/main.go index 3a93a4c..f2eac66 100644 --- a/main.go +++ b/main.go @@ -45,6 +45,7 @@ func main() { invertFlag = flag.Bool("i", false, "invert default colors") scaleCpu = flag.Bool("scale-cpu", false, "show cpu as % of system total") connectorFlag = flag.String("connector", "docker", "container connector to use") + defaultShell = flag.String("shell", "", "default shell") ) flag.Parse() @@ -87,6 +88,10 @@ func main() { config.Toggle("scaleCpu") } + if *defaultShell != "" { + config.Update("shell", *defaultShell) + } + // init ui if *invertFlag { InvertColorMap() diff --git a/menus.go b/menus.go index 9ed7542..c4f3ac8 100644 --- a/menus.go +++ b/menus.go @@ -25,7 +25,7 @@ var helpDialog = []menu.Item{ {"[r] - reverse container sort order", ""}, {"[o] - open single view", ""}, {"[l] - view container logs ([t] to toggle timestamp when open)", ""}, - {"[e] - exec sh", ""}, + {"[e] - exec shell", ""}, {"[S] - save current configuration to file", ""}, {"[q] - exit ctop", ""}, } @@ -135,7 +135,7 @@ func ContainerMenu() MenuFn { items = append(items, menu.Item{Val: "stop", Label: "stop"}) items = append(items, menu.Item{Val: "pause", Label: "pause"}) items = append(items, menu.Item{Val: "restart", Label: "restart"}) - items = append(items, menu.Item{Val: "exec sh", Label: "exec sh"}) + items = append(items, menu.Item{Val: "exec shell", Label: "exec shell"}) } if c.Meta["state"] == "exited" || c.Meta["state"] == "created" { items = append(items, menu.Item{Val: "start", Label: "start"}) @@ -158,8 +158,8 @@ func ContainerMenu() MenuFn { nextMenu = SingleView case "logs": nextMenu = LogMenu - case "exec sh": - nextMenu = ExecSh + case "exec shell": + nextMenu = ExecShell case "start": nextMenu = Confirm(confirmTxt("start", c.GetMeta("name")), c.Start) case "stop": @@ -211,7 +211,7 @@ func LogMenu() MenuFn { return nil } -func ExecSh() MenuFn { +func ExecShell() MenuFn { c := cursor.Selected() if c == nil { @@ -223,7 +223,10 @@ func ExecSh() MenuFn { ui.StopLoop() defer ui.Loop() - c.Exec([]string{"sh", "-c", "echo '\033[0m' && clear && sh"}) + shell := config.Get("shell") + if err := c.Exec([]string{shell.Val, "-c", "echo '\033[0m' && clear && " + shell.Val}); err != nil { + log.Fatal(err) + } return nil }