package edit
import (
)
func ( *cli.AppSpec, eval.NsBuilder) {
:= newIntVar(-1)
.MaxHeight = func() int { return .GetRaw().(int) }
.Add("max-height", )
}
func ( *cli.AppSpec, *eval.Evaler, eval.NsBuilder) {
initBeforeReadline(, , )
initAfterReadline(, , )
}
func ( *cli.AppSpec, *eval.Evaler, eval.NsBuilder) {
:= newListVar(vals.EmptyList)
["before-readline"] =
.BeforeReadline = append(.BeforeReadline, func() {
callHooks(, "$<edit>:before-readline", .Get().(vals.List))
})
}
func ( *cli.AppSpec, *eval.Evaler, eval.NsBuilder) {
:= newListVar(vals.EmptyList)
["after-readline"] =
.AfterReadline = append(.AfterReadline, func( string) {
callHooks(, "$<edit>:after-readline", .Get().(vals.List), )
})
}
func ( *cli.AppSpec, *eval.Evaler, eval.NsBuilder, histutil.Store) {
:= eval.NewGoFn("<ignore-cmd-with-leading-space>",
func( string) bool { return !strings.HasPrefix(, " ") })
:= newListVar(vals.MakeList())
["add-cmd-filters"] =
.AfterReadline = append(.AfterReadline, func( string) {
if != "" &&
callFilters(, "$<edit>:add-cmd-filters",
.Get().(vals.List), ) {
.AddCmd(store.Cmd{Text: , Seq: -1})
}
})
}
func ( *cli.AppSpec, notifier, *eval.Evaler, eval.NsBuilder) {
:= newBindingVar(emptyBindingsMap)
.GlobalBindings = newMapBindings(, , )
.Add("global-binding", )
}
func ( *eval.Evaler, string, vals.List, ...interface{}) {
if .Len() == 0 {
return
}
, := eval.PortsFromStdFiles(.ValuePrefix())
:= eval.EvalCfg{Ports: [:]}
defer ()
:= -1
for := .Iterator(); .HasElem(); .Next() {
++
:= fmt.Sprintf("%s[%d]", , )
, := .Elem().(eval.Callable)
if ! {
diag.Complainf(os.Stderr, "%s not function", )
continue
}
:= .Call(, eval.CallCfg{Args: , From: }, )
if != nil {
diag.ShowError(os.Stderr, )
}
}
}
func ( *eval.Evaler, string, vals.List, ...interface{}) bool {
if .Len() == 0 {
return true
}
:= -1
for := .Iterator(); .HasElem(); .Next() {
++
:= fmt.Sprintf("%s[%d]", , )
, := .Elem().(eval.Callable)
if ! {
diag.Complainf(os.Stderr, "%s not function", )
continue
}
, , := eval.CapturePort()
if != nil {
diag.Complainf(os.Stderr, "cannot create pipe to run filter")
return true
}
= .Call(, eval.CallCfg{Args: , From: },
eval.EvalCfg{Ports: []*eval.Port{nil, , {File: os.Stderr}}})
:= ()
if != nil {
diag.Complainf(os.Stderr, "%s return error", )
continue
}
if len() != 1 {
diag.Complainf(os.Stderr, "filter %s should only return $true or $false", )
continue
}
, := [0].(bool)
if ! {
diag.Complainf(os.Stderr, "filter %s should return bool", )
continue
}
if ! {
return false
}
}
return true
}
func ( int) vars.PtrVar { return vars.FromPtr(&) }
func ( float64) vars.PtrVar { return vars.FromPtr(&) }
func ( bool) vars.PtrVar { return vars.FromPtr(&) }
func ( vals.List) vars.PtrVar { return vars.FromPtr(&) }
func ( vals.Map) vars.PtrVar { return vars.FromPtr(&) }
func ( eval.Callable) vars.PtrVar { return vars.FromPtr(&) }
func ( bindingsMap) vars.PtrVar { return vars.FromPtr(&) }