-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript-context-example.cs
More file actions
executable file
·64 lines (52 loc) · 2.6 KB
/
Copy pathscript-context-example.cs
File metadata and controls
executable file
·64 lines (52 loc) · 2.6 KB
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
#!/usr/bin/dotnet --
#:project $(SourceDirectory)timewarp-amuru/timewarp-amuru.csproj
#:property LangVersion=preview
#:property EnablePreviewFeatures=true
// Example demonstrating ScriptContext usage
using TimeWarp.Amuru;
using TimeWarp.Terminal;
await TimeWarpTerminal.Default.WriteLineAsync("=== ScriptContext Example ===\n");
// Example 1: Basic usage - work in script's directory
await TimeWarpTerminal.Default.WriteLineAsync("Example 1: Working in script directory");
using (var context = ScriptContext.FromEntryPoint())
{
await TimeWarpTerminal.Default.WriteLineAsync($"Script: {context.ScriptFilePath}");
await TimeWarpTerminal.Default.WriteLineAsync($"Script Dir: {context.ScriptDirectory}");
await TimeWarpTerminal.Default.WriteLineAsync($"Working Dir: {Directory.GetCurrentDirectory()}");
// Do work in script directory
CommandOutput lsResult = await Shell.Builder("ls").CaptureAsync();
string[] localFiles = lsResult.GetStdoutLines();
await TimeWarpTerminal.Default.WriteLineAsync($"Files in script dir: {localFiles.Length}");
}
await TimeWarpTerminal.Default.WriteLineAsync($"After disposal: {Directory.GetCurrentDirectory()}\n");
// Example 2: Navigate to parent directory
await TimeWarpTerminal.Default.WriteLineAsync("Example 2: Working from parent directory");
using (var context = ScriptContext.FromRelativePath("..", changeToTargetDirectory: true))
{
await TimeWarpTerminal.Default.WriteLineAsync($"Working Dir: {Directory.GetCurrentDirectory()}");
// List parent directory items
CommandOutput parentResult = await Shell.Builder("ls").CaptureAsync();
string[] parentItems = parentResult.GetStdoutLines();
await TimeWarpTerminal.Default.WriteLineAsync("Parent directory items:");
foreach (string item in parentItems.Take(5))
{
await TimeWarpTerminal.Default.WriteLineAsync($" - {item}");
}
}
await TimeWarpTerminal.Default.WriteLineAsync($"After disposal: {Directory.GetCurrentDirectory()}\n");
// Example 3: With cleanup callback
await TimeWarpTerminal.Default.WriteLineAsync("Example 3: With cleanup callback");
bool cleanupExecuted = false;
using (var context = ScriptContext.FromEntryPoint(
changeToScriptDirectory: true,
onExit: () =>
{
cleanupExecuted = true;
TimeWarpTerminal.Default.WriteLine(" Cleanup callback executed!");
}))
{
await TimeWarpTerminal.Default.WriteLineAsync($"Working in: {Directory.GetCurrentDirectory()}");
await TimeWarpTerminal.Default.WriteLineAsync(" Doing some work...");
}
await TimeWarpTerminal.Default.WriteLineAsync($"Cleanup executed: {cleanupExecuted}");
await TimeWarpTerminal.Default.WriteLineAsync("\n✅ All examples completed!");