internal static CommandBinding CreateComplexNormalBinding( string name, Func <KeyInput, bool> predicate, KeyRemapMode remapMode = null, CommandFlags flags = CommandFlags.None) { var remapModeOption = FSharpOption.CreateForReference(remapMode); Func <KeyInput, BindResult <NormalCommand> > func = null; func = keyInput => { if (predicate(keyInput)) { var data = new BindData <NormalCommand>( remapModeOption, func.ToFSharpFunc()); return(BindResult <NormalCommand> .NewNeedMoreInput(data)); } return(BindResult <NormalCommand> .NewComplete(NormalCommand.NewPutAfterCaret(false))); }; var bindData = new BindData <NormalCommand>( remapModeOption, func.ToFSharpFunc()); var bindDataStorage = BindDataStorage <NormalCommand> .NewSimple(bindData); return(CommandBinding.NewComplexNormalBinding( KeyNotationUtil.StringToKeyInputSet(name), flags, bindDataStorage)); }
internal static CommandBinding CreateComplexNormalBinding( string name, Action <KeyInput> action, CommandFlags flags = CommandFlags.None) { Func <KeyInput, BindResult <NormalCommand> > func = keyInput => { action(keyInput); return(BindResult <NormalCommand> .NewComplete(NormalCommand.NewPutAfterCaret(false))); }; var bindData = new BindData <NormalCommand>( FSharpOption <KeyRemapMode> .None, func.ToFSharpFunc()); var bindDataStorage = BindDataStorage <NormalCommand> .NewSimple(bindData); return(CommandBinding.NewComplexNormalBinding( KeyNotationUtil.StringToKeyInputSet(name), flags, bindDataStorage)); }