drive view options from configuration (closes #56)

This commit is contained in:
Alex Goodman 2018-11-05 22:37:25 -05:00
parent a95c45e8c9
commit 41e1685efe
No known key found for this signature in database
GPG key ID: 743640FAA11698A1
6 changed files with 73 additions and 9 deletions

View file

@ -122,19 +122,19 @@ log:
path: ./dive.log
level: info
# note: you can specify multiple bindings by separating values with a comma.
# note: UI hinting is derived from the first binding
# Note: you can specify multiple bindings by separating values with a comma.
# Note: UI hinting is derived from the first binding
keybinding:
# global bindings
# Global bindings
quit: ctrl+c
toggle-view: tab, ctrl+space
filter-files: ctrl+f, ctrl+slash
# layer view specific bindings
# Layer view specific bindings
compare-all: ctrl+a
compare-layer: ctrl+l
# file view specific bindings
# File view specific bindings
toggle-collapse-dir: space
toggle-added-files: ctrl+a
toggle-removed-files: ctrl+r
@ -142,6 +142,19 @@ keybinding:
toggle-unmodified-files: ctrl+u
page-up: pgup
page-down: pgdn
diff:
# You can change the default files show in the filetree (right pane). All diff types are shown by default.
hide:
- added
- removed
- changed
- unchanged
layer:
# Enable showing all changes from this layer and ever previous layer
show-aggregated-changes: false
```
dive will search for configs in the following locations:

View file

@ -80,14 +80,14 @@ func initConfig() {
viper.SetDefault("log.level", log.InfoLevel.String())
viper.SetDefault("log.path", "./dive.log")
viper.SetDefault("log.enabled", true)
// status view / global
// keybindings: status view / global
viper.SetDefault("keybinding.quit", "ctrl+c")
viper.SetDefault("keybinding.toggle-view", "tab, ctrl+space")
viper.SetDefault("keybinding.filter-files", "ctrl+f, ctrl+slash")
// layer view
// keybindings: layer view
viper.SetDefault("keybinding.compare-all", "ctrl+a")
viper.SetDefault("keybinding.compare-layer", "ctrl+l")
// filetree view
// keybindings: filetree view
viper.SetDefault("keybinding.toggle-collapse-dir", "space")
viper.SetDefault("keybinding.toggle-added-files", "ctrl+a")
viper.SetDefault("keybinding.toggle-removed-files", "ctrl+r")
@ -96,6 +96,9 @@ func initConfig() {
viper.SetDefault("keybinding.page-up", "pgup")
viper.SetDefault("keybinding.page-down", "pgdn")
viper.SetDefault("diff.hide", "")
viper.SetDefault("layer.show-aggregated-changes", false)
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.

View file

@ -4,6 +4,7 @@ import (
"fmt"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
"github.com/wagoodman/dive/utils"
"regexp"
"strings"
@ -55,6 +56,22 @@ func NewFileTreeView(name string, gui *gocui.Gui, tree *filetree.FileTree, refTr
treeView.RefTrees = refTrees
treeView.HiddenDiffTypes = make([]bool, 4)
hiddenTypes := viper.GetStringSlice("diff.hide")
for _, hType := range hiddenTypes {
switch t := strings.ToLower(hType); t {
case "added":
treeView.HiddenDiffTypes[filetree.Added] = true
case "removed":
treeView.HiddenDiffTypes[filetree.Removed] = true
case "changed":
treeView.HiddenDiffTypes[filetree.Changed] = true
case "unchanged":
treeView.HiddenDiffTypes[filetree.Unchanged] = true
default:
utils.PrintAndExit(fmt.Sprintf("unknown diff.hide value: %s", t))
}
}
treeView.keybindingToggleCollapse = getKeybindings(viper.GetString("keybinding.toggle-collapse-dir"))
treeView.keybindingToggleAdded = getKeybindings(viper.GetString("keybinding.toggle-added-files"))
treeView.keybindingToggleRemoved = getKeybindings(viper.GetString("keybinding.toggle-removed-files"))

View file

@ -3,6 +3,7 @@ package ui
import (
"fmt"
"github.com/spf13/viper"
"github.com/wagoodman/dive/utils"
"github.com/dustin/go-humanize"
"github.com/jroimartin/gocui"
@ -35,7 +36,15 @@ func NewLayerView(name string, gui *gocui.Gui, layers []*image.Layer) (layerView
layerView.Name = name
layerView.gui = gui
layerView.Layers = layers
layerView.CompareMode = CompareLayer
switch mode := viper.GetBool("layer.show-aggregated-changes"); mode {
case true:
layerView.CompareMode = CompareAll
case false:
layerView.CompareMode = CompareLayer
default:
utils.PrintAndExit(fmt.Sprintf("unknown layer.show-aggregated-changes value: %s", mode))
}
layerView.keybindingCompareAll = getKeybindings(viper.GetString("keybinding.compare-all"))
layerView.keybindingCompareLayer = getKeybindings(viper.GetString("keybinding.compare-layer"))

View file

@ -8,6 +8,7 @@ import (
"github.com/spf13/viper"
"github.com/wagoodman/dive/filetree"
"github.com/wagoodman/dive/image"
"github.com/wagoodman/dive/utils"
"log"
)
@ -313,6 +314,7 @@ func Run(layers []*image.Layer, refTrees []*filetree.FileTree, efficiency float6
if err != nil {
log.Panicln(err)
}
utils.SetUi(g)
defer g.Close()
Views.lookup = make(map[string]View)
@ -347,4 +349,5 @@ func Run(layers []*image.Layer, refTrees []*filetree.FileTree, efficiency float6
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
log.Panicln(err)
}
utils.Exit(0)
}

View file

@ -1,10 +1,26 @@
package utils
import (
"fmt"
"github.com/jroimartin/gocui"
"github.com/k0kubun/go-ansi"
"github.com/sirupsen/logrus"
"os"
)
var ui *gocui.Gui
func SetUi(g *gocui.Gui) {
ui = g
}
func PrintAndExit(args ...interface{}) {
logrus.Println(args...)
Cleanup()
fmt.Println(args...)
os.Exit(1)
}
// Note: this should only be used when exiting from non-gocui code
func Exit(rc int) {
Cleanup()
@ -12,5 +28,8 @@ func Exit(rc int) {
}
func Cleanup() {
if ui != nil {
ui.Close()
}
ansi.CursorShow()
}