Skip to content

Commit e8a459d

Browse files
committed
Цвета консоли на линукс
1 parent 4e24837 commit e8a459d

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

src/OneScript.StandardLibrary/Text/ConsoleContext.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,20 @@ public bool CursorVisible(bool visible)
123123
[ContextProperty("ЦветТекста", "TextColor")]
124124
public ClrEnumValueWrapper<ConsoleColor> TextColor
125125
{
126-
get => ConsoleColorEnum.Instance.FromNativeValue(Console.ForegroundColor);
126+
get =>
127+
ConsoleColorEnum.Instance.TryGetFromNativeValue(Console.ForegroundColor)
128+
?? ConsoleColorEnum.Instance.FromNativeValue(ConsoleColor.Gray);
129+
127130
set => Console.ForegroundColor = value.UnderlyingValue;
128131
}
129132

130133
[ContextProperty("ЦветФона", "BackgroundColor")]
131134
public ClrEnumValueWrapper<ConsoleColor> BackgroundColor
132135
{
133-
get => ConsoleColorEnum.Instance.FromNativeValue(Console.BackgroundColor);
136+
get =>
137+
ConsoleColorEnum.Instance.TryGetFromNativeValue(Console.BackgroundColor)
138+
?? ConsoleColorEnum.Instance.FromNativeValue(ConsoleColor.Black);
139+
134140
set => Console.BackgroundColor = value.UnderlyingValue;
135141
}
136142

@@ -151,6 +157,15 @@ public IValue InputEncoding
151157
Console.InputEncoding = TextEncodingEnum.GetEncoding(value);
152158
}
153159
}
160+
161+
/// <summary>
162+
/// Сбрасывает цвета консоли к их исходному состоянию
163+
/// </summary>
164+
[ContextMethod("СброситьЦвет", "ResetColor")]
165+
public void ResetColor()
166+
{
167+
Console.ResetColor();
168+
}
154169

155170
/// <summary>
156171
/// Возвращает или задает кодировку консоли, используемую при выводе данных.

src/ScriptEngine/Machine/Contexts/ClrEnumWrapper.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,24 @@ protected ClrEnumWrapper(TypeDescriptor typeRepresentation, TypeDescriptor value
3333

3434
public virtual ClrEnumValueWrapper<T> FromNativeValue(T native)
3535
{
36-
/* TODO: benchmark
37-
return ((List<ClrEnumValueWrapper<T>>)ValuesInternal)
38-
.Find(x => x.UnderlyingValue.Equals(native))
39-
?? throw new InvalidOperationException($"Item '{native}' not found");
40-
*/
36+
var result = TryGetFromNativeValue(native);
37+
if (result == null)
38+
throw new InvalidOperationException($"Item '{native}' not found");
39+
40+
return result;
41+
}
42+
43+
public ClrEnumValueWrapper<T> TryGetFromNativeValue(T native)
44+
{
45+
ClrEnumValueWrapper<T> wrapper = null;
4146
foreach (var value in ValuesInternal)
4247
{
43-
var wrapper = (ClrEnumValueWrapper<T>) value;
48+
wrapper = (ClrEnumValueWrapper<T>) value;
4449
if (wrapper.UnderlyingValue.Equals(native))
4550
return wrapper;
4651
}
4752

48-
throw new InvalidOperationException($"Item '{native}' not found");
53+
return wrapper;
4954
}
5055

5156
private void Autoregister(TypeDescriptor valuesType)

0 commit comments

Comments
 (0)