blob: 3782b123ab967f8075e182b3625812297ef60286 (
plain)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
## ENVIRONMENT MANAGEMENT ######################################################
<#
.SYNOPSIS
Enter a xrepo environment based on your current project.
.EXAMPLE
Enter-XrepoEnvironment
#>
function Enter-XrepoEnvironment {
[CmdletBinding()]
param(
[string]$bnd
);
begin {
$script:xrepoOldEnvs = (Get-ChildItem -Path Env:);
if (-not $bnd) {
& $Env:XMAKE_PROGRAM_FILE lua private.xrepo.action.env.info config;
if (-not $?) {
Exit 1;
}
$xmakeColorTermBackup, $Env:XMAKE_COLORTERM = $Env:XMAKE_COLORTERM, "nocolor";
$xrepoPrompt = (& $Env:XMAKE_PROGRAM_FILE lua --quiet private.xrepo.action.env.info prompt | Out-String);
$Env:XMAKE_COLORTERM = $xmakeColorTermBackup;
if (-not $xrepoPrompt.StartsWith("[")) {
Write-Host "error: xmake.lua not found!";
Exit 1;
}
$activateCommand = (& $Env:XMAKE_PROGRAM_FILE lua --quiet private.xrepo.action.env.info script.powershell | Out-String);
} else {
Push-Location $Env:XMAKE_ROOTDIR;
& $Env:XMAKE_PROGRAM_FILE lua private.xrepo.action.env.info config $bnd;
if (-not $?) {
Pop-Location;
Exit 1;
}
$xmakeColorTermBackup, $Env:XMAKE_COLORTERM = $Env:XMAKE_COLORTERM, "nocolor";
$xrepoPrompt = (& $Env:XMAKE_PROGRAM_FILE lua --quiet private.xrepo.action.env.info prompt $bnd | Out-String);
$Env:XMAKE_COLORTERM = $xmakeColorTermBackup;
if (-not $xrepoPrompt.StartsWith("[")) {
Pop-Location;
Write-Host "error: invalid environment!";
Exit 1;
}
$activateCommand = (& $Env:XMAKE_PROGRAM_FILE lua --quiet private.xrepo.action.env.info script.powershell $bnd | Out-String);
}
Write-Verbose "[xrepo env script.powershell]`n$activateCommand";
Invoke-Expression -Command $activateCommand;
if ($bnd) { Pop-Location; }
$Env:XMAKE_PROMPT_MODIFIER = $xrepoPrompt.Trim() + " ";
}
process {}
end {}
}
<#
.SYNOPSIS
Exit the current xrepo environment, if any.
.EXAMPLE
Exit-XrepoEnvironment
#>
function Exit-XrepoEnvironment {
[CmdletBinding()]
param();
begin {
ForEach ($p in (Get-ChildItem Env:)) {
[Environment]::SetEnvironmentVariable($p.Name, $Null);
}
ForEach ($p in $script:xrepoOldEnvs) {
[Environment]::SetEnvironmentVariable($p.Name, $p.Value);
}
$Env:XMAKE_PROMPT_MODIFIER = "";
}
process {}
end {}
}
if (Test-Path Function:\prompt) {
Rename-Item Function:\prompt XrepoPromptBackup
} else {
function XrepoPromptBackup() {
# Restore a basic prompt if the definition is missing.
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
}
}
<#
.SYNOPSIS
Modifies the current prompt to show the current xmake project.
.EXAMPLE
Add-XrepoEnvironmentToPrompt
Causes the current session's prompt to display the current xmake project name.
#>
function Add-XrepoEnvironmentToPrompt() {
function global:prompt() {
if ($Env:XMAKE_PROMPT_MODIFIER) {
$Env:XMAKE_PROMPT_MODIFIER | Write-Host -NoNewline
}
XrepoPromptBackup;
}
}
## EXPORTS ###################################################################
Export-ModuleMember `
-Alias * `
-Function `
Add-XrepoEnvironmentToPrompt, `
Enter-XrepoEnvironment, `
Exit-XrepoEnvironment, `
prompt
|