71: Allow user to change config options at runtime

There is a LoadConf and a LoadConfFromFile.
LoadConfFromFile reads the iniFile into memory and and calls
LoadConf, which executes the old parsing commands from
LoadConf (old func).

The remaining of the LoadConfFromFile is the same as the old OldConf.
This commit is contained in:
Pedro L. Ramos 2019-07-13 18:42:22 +01:00 committed by Drew DeVault
parent 9bf1a0418b
commit d85f671bdf
3 changed files with 129 additions and 51 deletions
commands

69
commands/set.go Normal file
View file

@ -0,0 +1,69 @@
package commands
import (
"errors"
"strings"
"git.sr.ht/~sircmpwn/aerc/widgets"
"github.com/go-ini/ini"
)
type Set struct{}
func setUsage() string {
return "set <category>.<option> <value>"
}
func init() {
register(Set{})
}
func (_ Set) Aliases() []string {
return []string{"set"}
}
func (_ Set) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func SetCore(aerc *widgets.Aerc, args []string) error {
if len(args) != 3 {
return errors.New("Usage: " + setUsage())
}
config := aerc.Config()
parameters := strings.Split(args[1], ".")
if len(parameters) != 2 {
return errors.New("Usage: " + setUsage())
}
category := parameters[0]
option := parameters[1]
value := args[2]
new_file := ini.Empty()
section, err := new_file.NewSection(category)
if err != nil {
return nil
}
if _, err := section.NewKey(option, value); err != nil {
return err
}
if err := config.LoadConfig(new_file); err != nil {
return err
}
return nil
}
func (_ Set) Execute(aerc *widgets.Aerc, args []string) error {
return SetCore(aerc, args)
}