Code
·
108 lines
·
4952 bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108using System;
namespace InteractiveReadLine.KeyBehaviors
{
public static class BehaviorExtensionMethods
{
public static ReadLineConfig AddKeyBehavior(this ReadLineConfig config, KeyId key, Action<IKeyBehaviorTarget> action)
{
config.KeyBehaviors.Add(key, action);
return config;
}
public static ReadLineConfig AddKeyBehavior(this ReadLineConfig config, ConsoleKey key,
bool control, bool alt, bool shift, Action<IKeyBehaviorTarget> action)
{
return config.AddKeyBehavior(new KeyId(key, false, false, false), action);
}
public static ReadLineConfig AddKeyBehavior(this ReadLineConfig config, char key,
Action<IKeyBehaviorTarget> action)
{
return config.AddKeyBehavior(new KeyId(key), action);
}
public static ReadLineConfig AddKeyBehavior(this ReadLineConfig config, ConsoleKey key,
Action<IKeyBehaviorTarget> action)
{
return config.AddKeyBehavior(new KeyId(key, false, false, false), action);
}
public static ReadLineConfig AddCtrlKeyBehavior(this ReadLineConfig config, ConsoleKey key,
Action<IKeyBehaviorTarget> action)
{
return config.AddKeyBehavior(new KeyId(key, true, false, false), action);
}
public static ReadLineConfig AddDeleteBackspace(this ReadLineConfig config)
{
return config.AddKeyBehavior(ConsoleKey.Delete, CommonKeyBehaviors.Delete)
.AddKeyBehavior(ConsoleKey.Backspace, CommonKeyBehaviors.Backspace);
}
public static ReadLineConfig AddEnterToFinish(this ReadLineConfig config)
{
return config.AddKeyBehavior(ConsoleKey.Enter, CommonKeyBehaviors.Finish);
}
public static ReadLineConfig AddHomeAndEndKeys(this ReadLineConfig config)
{
return config
.AddKeyBehavior(ConsoleKey.Home, CommonKeyBehaviors.MoveCursorToStart)
.AddKeyBehavior(ConsoleKey.End, CommonKeyBehaviors.MoveCursorToEnd);
}
public static ReadLineConfig AddArrowMovesCursor(this ReadLineConfig config)
{
return config
.AddKeyBehavior(ConsoleKey.LeftArrow, CommonKeyBehaviors.MoveCursorLeft)
.AddKeyBehavior(ConsoleKey.RightArrow, CommonKeyBehaviors.MoveCursorRight);
}
public static ReadLineConfig AddUpDownHistoryNavigation(this ReadLineConfig config)
{
return config
.AddKeyBehavior(ConsoleKey.UpArrow, CommonKeyBehaviors.HistoryPrevious)
.AddKeyBehavior(ConsoleKey.DownArrow, CommonKeyBehaviors.HistoryNext);
}
public static ReadLineConfig AddCtrlNavKeys(this ReadLineConfig config)
{
return config
.AddCtrlKeyBehavior(ConsoleKey.A, CommonKeyBehaviors.MoveCursorToStart)
.AddCtrlKeyBehavior(ConsoleKey.B, CommonKeyBehaviors.MoveCursorLeft)
.AddCtrlKeyBehavior(ConsoleKey.E, CommonKeyBehaviors.MoveCursorToEnd)
.AddCtrlKeyBehavior(ConsoleKey.F, CommonKeyBehaviors.MoveCursorRight)
.AddCtrlKeyBehavior(ConsoleKey.H, CommonKeyBehaviors.Backspace)
.AddCtrlKeyBehavior(ConsoleKey.K, CommonKeyBehaviors.CutToEnd)
.AddCtrlKeyBehavior(ConsoleKey.U, CommonKeyBehaviors.CutToStart)
.AddCtrlKeyBehavior(ConsoleKey.L, CommonKeyBehaviors.ClearAll)
.AddCtrlKeyBehavior(ConsoleKey.M, CommonKeyBehaviors.Finish)
.AddCtrlKeyBehavior(ConsoleKey.N, CommonKeyBehaviors.HistoryNext)
.AddCtrlKeyBehavior(ConsoleKey.P, CommonKeyBehaviors.HistoryPrevious)
.AddCtrlKeyBehavior(ConsoleKey.D, CommonKeyBehaviors.Delete)
.AddCtrlKeyBehavior(ConsoleKey.W, CommonKeyBehaviors.CutPreviousWord);
}
/// <summary>
/// Adds a set of standard keys to the configuration, including the default of inserting printable
/// characters, enter to finish the line, delete, backspace, and the left and right arrow keys.
/// </summary>
public static ReadLineConfig AddStandardKeys(this ReadLineConfig config)
{
return config
.SetDefaultKeyBehavior(CommonKeyBehaviors.InsertCharacter)
.AddEnterToFinish()
.AddDeleteBackspace()
.AddHomeAndEndKeys()
.AddUpDownHistoryNavigation()
.AddArrowMovesCursor();
}
public static ReadLineConfig AddTabAutoComplete(this ReadLineConfig config)
{
return config
.AddKeyBehavior(ConsoleKey.Tab, CommonKeyBehaviors.AutoCompleteNext)
.AddKeyBehavior(new KeyId(ConsoleKey.Tab, false, false, true), CommonKeyBehaviors.AutoCompletePrevious);
}
}
}