src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/edit/insert_api.go (about) 1 package edit 2 3 import ( 4 "src.elv.sh/pkg/cli" 5 "src.elv.sh/pkg/eval" 6 "src.elv.sh/pkg/eval/vals" 7 "src.elv.sh/pkg/eval/vars" 8 ) 9 10 func initInsertAPI(appSpec *cli.AppSpec, nt notifier, ev *eval.Evaler, nb eval.NsBuilder) { 11 simpleAbbr := vals.EmptyMap 12 simpleAbbrVar := vars.FromPtr(&simpleAbbr) 13 appSpec.SimpleAbbreviations = makeMapIterator(simpleAbbrVar) 14 15 commandAbbr := vals.EmptyMap 16 commandAbbrVar := vars.FromPtr(&commandAbbr) 17 appSpec.CommandAbbreviations = makeMapIterator(commandAbbrVar) 18 19 smallWordAbbr := vals.EmptyMap 20 smallWordAbbrVar := vars.FromPtr(&smallWordAbbr) 21 appSpec.SmallWordAbbreviations = makeMapIterator(smallWordAbbrVar) 22 23 bindingVar := newBindingVar(emptyBindingsMap) 24 appSpec.CodeAreaBindings = newMapBindings(nt, ev, bindingVar) 25 26 quotePaste := newBoolVar(false) 27 appSpec.QuotePaste = func() bool { return quotePaste.GetRaw().(bool) } 28 29 toggleQuotePaste := func() { 30 quotePaste.Set(!quotePaste.Get().(bool)) 31 } 32 33 nb.AddVar("abbr", simpleAbbrVar) 34 nb.AddVar("command-abbr", commandAbbrVar) 35 nb.AddVar("small-word-abbr", smallWordAbbrVar) 36 nb.AddGoFn("toggle-quote-paste", toggleQuotePaste) 37 nb.AddNs("insert", eval.BuildNs(). 38 AddVar("binding", bindingVar). 39 AddVar("quote-paste", quotePaste)) 40 } 41 42 func makeMapIterator(mv vars.PtrVar) func(func(a, b string)) { 43 return func(f func(a, b string)) { 44 for it := mv.GetRaw().(vals.Map).Iterator(); it.HasElem(); it.Next() { 45 k, v := it.Elem() 46 ks, kok := k.(string) 47 vs, vok := v.(string) 48 if !kok || !vok { 49 continue 50 } 51 f(ks, vs) 52 } 53 } 54 }