diff options
Diffstat (limited to 'commands')
| -rw-r--r-- | commands/set.go | 69 | 
1 files changed, 69 insertions, 0 deletions
| diff --git a/commands/set.go b/commands/set.go new file mode 100644 index 0000000..f5366ff --- /dev/null +++ b/commands/set.go @@ -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) +} | 
