using System; using Scriban.Runtime; namespace Kalk.Core { /// /// An action object returned by and used when evaluating shortcuts. /// public class KalkActionObject : ScriptObject { public KalkActionObject(string action) { Action = action ?? throw new ArgumentNullException(nameof(action)); } public string Action { get => GetSafeValue("action"); set => SetValue("action", value, false); } public void Call(Action run) { var action = Action; if (action == null) return; switch (action) { case "cursor_left": run(KalkAction.CursorLeft); break; case "cursor_right": run(KalkAction.CursorRight); break; case "history_previous": run(KalkAction.HistoryPrevious); break; case "history_next": run(KalkAction.HistoryNext); break; case "copy": run(KalkAction.CopySelection); break; case "cut": run(KalkAction.CutSelection); break; case "paste": run(KalkAction.PasteClipboard); break; case "cursor_word_left": run(KalkAction.CursorLeftWord); break; case "cursor_word_right": run(KalkAction.CursorRightWord); break; case "cursor_line_start": run(KalkAction.CursorStartOfLine); break; case "cursor_line_end": run(KalkAction.CursorEndOfLine); break; case "completion": run(KalkAction.Completion); break; case "delete_left": run(KalkAction.DeleteCharacterLeft); break; case "delete_right": run(KalkAction.DeleteCharacterRight); break; case "delete_word_left": run(KalkAction.DeleteWordLeft); break; case "delete_word_right": run(KalkAction.DeleteWordRight); break; case "validate_line": run(KalkAction.ValidateLine); break; case "force_validate_line": run(KalkAction.ForceValidateLine); break; case "exit": run(KalkAction.Exit); break; default: throw new ArgumentException($"Action `{action}` is not supported", nameof(action)); } } } }