func (p *ConfigParser) plugin(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word { if ac != 2 { gelo.ArgumentError(vm, "plugin", "<name> {body}", args) } name := args.Value.Ser().String() body := vm.API.QuoteOrElse(args.Next.Value) checkInSection(vm, "plugin", "plugins") insideSection(vm, "plugin", name, func() { p.conf.Plugins[name] = new(conf.PluginConf) p.conf.Plugins[name].Name = name vm.API.InvokeCmdOrElse(body, args) p.conf.Plugins[name].Options = make(map[string][]string) d := getOrMakeDict(vm, "data") for k, v := range d.Map() { var elements []string args.Slice() for e := vm.API.ListOrElse(v); e != nil; e = e.Next { elements = append(elements, e.Value.Ser()) } p.conf.Plugins[name].Options[k] = elements } }, ) return nil }