summaryrefslogtreecommitdiff
path: root/scripts/deploy/legacy_completions/powershell
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-03-14 22:12:30 +0800
committer魏曹先生 <1992414357@qq.com>2026-03-14 22:40:12 +0800
commit72f80ea51f25256d0c463c2f3dc3d8670cfc4634 (patch)
treeb200a3ab1a4c718034458863570a064b52bafdcd /scripts/deploy/legacy_completions/powershell
parent54b5567d6f1b1adaa6ada6a26faba0c5c492b7f3 (diff)
Add shell completions for new jvn CLI
Diffstat (limited to 'scripts/deploy/legacy_completions/powershell')
-rw-r--r--scripts/deploy/legacy_completions/powershell/completion_jv.ps1250
-rw-r--r--scripts/deploy/legacy_completions/powershell/completion_jvv.ps167
2 files changed, 317 insertions, 0 deletions
diff --git a/scripts/deploy/legacy_completions/powershell/completion_jv.ps1 b/scripts/deploy/legacy_completions/powershell/completion_jv.ps1
new file mode 100644
index 0000000..84ba01a
--- /dev/null
+++ b/scripts/deploy/legacy_completions/powershell/completion_jv.ps1
@@ -0,0 +1,250 @@
+# The JustEnoughVCS CommandLine Completion
+
+Register-ArgumentCompleter -Native -CommandName jv -ScriptBlock {
+ param($wordToComplete, $commandAst, $cursorPosition)
+
+ $words = $commandAst.CommandElements | ForEach-Object { $_.ToString() }
+ $currentIndex = $words.IndexOf($wordToComplete)
+ if ($currentIndex -lt 0) { $currentIndex = $words.Count }
+
+ $cmd = "jv"
+ $subcmd = if ($words.Count -gt 1) { $words[1] } else { $null }
+ $subsubcmd = if ($words.Count -gt 2) { $words[2] } else { $null }
+
+ # Base commands
+ $baseCommands = @(
+ "create", "init", "direct", "unstain", "account", "update",
+ "sheet", "status", "here", "move", "mv", "docs", "exit", "use", "sheets", "accounts",
+ "as", "make", "drop", "track", "hold", "throw", "login",
+ "jump", "align", "info", "share"
+ )
+
+ # Account subcommands
+ $accountCommands = @("list", "as", "add", "remove", "movekey", "mvkey", "mvk", "genpub", "help")
+
+ # Sheet subcommands
+ $sheetCommands = @("list", "use", "exit", "make", "drop", "help", "align")
+
+ # Completion for main command
+ if ($currentIndex -eq 1) {
+ return $baseCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+
+ # Completion for account command
+ if ($subcmd -eq "account" -or $subcmd -eq "acc") {
+ if ($currentIndex -eq 2) {
+ return $accountCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+
+ switch ($subsubcmd) {
+ { @("as", "remove", "mvkey", "mvk", "movekey", "genpub") -contains $_ } {
+ if ($currentIndex -eq 3) {
+ $accounts = & $cmd account list --raw 2>$null
+ return $accounts | Where-Object { $_ -like "$wordToComplete*" }
+ } elseif ($currentIndex -eq 4 -and (@("mvkey", "mvk", "movekey", "genpub") -contains $subsubcmd)) {
+ # File completion for key files
+ return Get-ChildItem -Name -File -Path "." | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "add" {
+ if ($currentIndex -eq 3) {
+ # No completion for account name
+ return @()
+ } elseif ($currentIndex -eq 4 -and $wordToComplete.StartsWith("-")) {
+ # Complete --keygen option
+ if ("--keygen" -like "$wordToComplete*") {
+ return "--keygen"
+ }
+ }
+ }
+ { @("-", "rm") -contains $_ } {
+ if ($currentIndex -eq 3) {
+ $accounts = & $cmd account list --raw 2>$null
+ return $accounts | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ }
+ return @()
+ }
+
+ # Completion for sheet command
+ if ($subcmd -eq "sheet" -or $subcmd -eq "sh") {
+ if ($currentIndex -eq 2) {
+ return $sheetCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+
+ switch ($subsubcmd) {
+ { @("use", "drop") -contains $_ } {
+ if ($currentIndex -eq 3) {
+ $sheets = & $cmd sheet list --raw 2>$null
+ return $sheets | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "make" {
+ if ($currentIndex -eq 3) {
+ $allSheets = & $cmd sheet list --all --raw 2>$null
+ return $allSheets | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "align" {
+ if ($currentIndex -eq 3) {
+ $alignItems = @("lost", "moved", "erased")
+ $unsolvedItems = & $cmd sheet align --unsolved --raw 2>$null
+ $completions = $alignItems + $unsolvedItems
+ return $completions | Where-Object { $_ -like "$wordToComplete*" }
+ } elseif ($currentIndex -eq 4) {
+ $item = $words[3]
+ $alignOperations = @()
+ $createdItems = & $cmd sheet align --created --raw 2>$null
+
+ if ($item -eq "lost") {
+ $alignOperations = @("confirm")
+ } elseif ($item -like "lost:*") {
+ $alignOperations = @("confirm") + $createdItems
+ } elseif ($item -eq "moved" -or $item -like "moved:*") {
+ $alignOperations = @("local", "remote", "break")
+ } elseif ($item -eq "erased" -or $item -like "erased:*") {
+ $alignOperations = @("confirm")
+ } else {
+ $alignOperations = @("local", "remote", "confirm", "break") + $createdItems
+ }
+
+ return $alignOperations | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ }
+ return @()
+ }
+
+ # Completion for align command
+ if ($subcmd -eq "align") {
+ if ($currentIndex -eq 2) {
+ $alignItems = @("lost", "moved", "erased")
+ $unsolvedItems = & $cmd sheet align --unsolved --raw 2>$null
+ $completions = $alignItems + $unsolvedItems
+ return $completions | Where-Object { $_ -like "$wordToComplete*" }
+ } elseif ($currentIndex -eq 3) {
+ $item = $words[2]
+ $alignOperations = @()
+ $createdItems = & $cmd sheet align --created --raw 2>$null
+
+ if ($item -eq "lost") {
+ $alignOperations = @("confirm")
+ } elseif ($item -like "lost:*") {
+ $alignOperations = @("confirm") + $createdItems
+ } elseif ($item -eq "moved" -or $item -like "moved:*") {
+ $alignOperations = @("local", "remote", "break")
+ } elseif ($item -eq "erased" -or $item -like "erased:*") {
+ $alignOperations = @("confirm")
+ } else {
+ $alignOperations = @("local", "remote", "confirm", "break") + $createdItems
+ }
+
+ return $alignOperations | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ return @()
+ }
+
+ # Completion for login command
+ if ($subcmd -eq "login") {
+ if ($currentIndex -eq 2) {
+ $accounts = & $cmd account list --raw 2>$null
+ return $accounts | Where-Object { $_ -like "$wordToComplete*" }
+ } elseif ($currentIndex -eq 3) {
+ $ipHistory = & $cmd _ip_history 2>$null
+ return $ipHistory | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ return @()
+ }
+
+ # Completion for direct command
+ if ($subcmd -eq "direct") {
+ if ($currentIndex -eq 2) {
+ $ipHistory = & $cmd _ip_history 2>$null
+ return $ipHistory | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ return @()
+ }
+
+ # Completion for info command
+ if ($subcmd -eq "info") {
+ if ($currentIndex -eq 2) {
+ # File completion for the file argument
+ return Get-ChildItem -Name -File -Path "." | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ return @()
+ }
+
+ # Completion for share command
+ if ($subcmd -eq "share") {
+ if ($currentIndex -eq 2) {
+ # First parameter: list, see, jv share list --raw results, or files in current directory
+ $staticOptions = @("list", "see")
+ $shareList = & $cmd share list --raw 2>$null
+ $files = Get-ChildItem -Name -File -Path "." 2>$null
+ $completions = $staticOptions + $shareList + $files
+ return $completions | Where-Object { $_ -like "$wordToComplete*" }
+ } elseif ($currentIndex -eq 3) {
+ # Second parameter: depends on the first parameter
+ $firstParam = $words[2]
+ if ($firstParam -eq "list") {
+ # list -> nothing
+ return @()
+ } elseif ($firstParam -eq "see") {
+ # see -> jv share list --raw results
+ $shareList = & $cmd share list --raw 2>$null
+ return $shareList | Where-Object { $_ -like "$wordToComplete*" }
+ } elseif ($firstParam -like "*@*") {
+ # Contains "@" (shareid) -> show options
+ $options = @("--safe", "--overwrite", "--skip", "--reject")
+ return $options | Where-Object { $_ -like "$wordToComplete*" }
+ } else {
+ # Otherwise, assume it's a file -> show jv sheet list --all --raw results
+ $allSheets = & $cmd sheet list --all --raw 2>$null
+ return $allSheets | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ # Third parameter: no completion
+ return @()
+ }
+
+ # Aliases completion
+ switch ($subcmd) {
+ "as" {
+ if ($currentIndex -eq 2) {
+ $accounts = & $cmd account list --raw 2>$null
+ return $accounts | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "use" {
+ if ($currentIndex -eq 2) {
+ $sheets = & $cmd sheet list --raw 2>$null
+ return $sheets | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "make" {
+ if ($currentIndex -eq 2) {
+ $allSheets = & $cmd sheet list --all --raw 2>$null
+ return $allSheets | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "drop" {
+ if ($currentIndex -eq 2) {
+ $sheets = & $cmd sheet list --raw 2>$null
+ return $sheets | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ "docs" {
+ if ($currentIndex -eq 2) {
+ $docs = & $cmd docs list --raw 2>$null
+ return $docs | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ { @("move", "mv", "track", "hold", "throw") -contains $_ } {
+ # File completion for file operations
+ return Get-ChildItem -Name -File -Path "." | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+
+ return @()
+}
diff --git a/scripts/deploy/legacy_completions/powershell/completion_jvv.ps1 b/scripts/deploy/legacy_completions/powershell/completion_jvv.ps1
new file mode 100644
index 0000000..fa773c0
--- /dev/null
+++ b/scripts/deploy/legacy_completions/powershell/completion_jvv.ps1
@@ -0,0 +1,67 @@
+# The JustEnoughVCS CommandLine Completion
+
+Register-ArgumentCompleter -Native -CommandName jvv -ScriptBlock {
+ param($wordToComplete, $commandAst, $cursorPosition)
+
+ $words = $commandAst.CommandElements | ForEach-Object { $_.ToString() }
+ $currentIndex = $words.IndexOf($wordToComplete)
+ if ($currentIndex -lt 0) { $currentIndex = $words.Count }
+
+ $cmd = "jvv"
+ $subcmd = if ($words.Count -gt 1) { $words[1] } else { $null }
+ $subsubcmd = if ($words.Count -gt 2) { $words[2] } else { $null }
+
+ # Base commands
+ $baseCommands = @("create", "init", "here", "member", "service", "listen", "members", "-c", "-i", "-H", "-m", "-l", "-M")
+
+ # Member subcommands
+ $memberCommands = @("register", "remove", "list", "help", "+", "-", "ls")
+
+ # Service subcommands
+ $serviceCommands = @("listen", "help")
+
+ # Completion for main command
+ if ($currentIndex -eq 1) {
+ return $baseCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+
+ # Completion for member command
+ if ($subcmd -eq "member" -or $subcmd -eq "-m") {
+ if ($currentIndex -eq 2) {
+ return $memberCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+
+ switch ($subsubcmd) {
+ { @("remove", "-") -contains $_ } {
+ if ($currentIndex -eq 3) {
+ $members = & $cmd member list --raw 2>$null
+ return $members | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ }
+ return @()
+ }
+
+ # Completion for service command
+ if ($subcmd -eq "service") {
+ if ($currentIndex -eq 2) {
+ return $serviceCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ return @()
+ }
+
+ # Aliases completion
+ switch ($subcmd) {
+ "-m" {
+ if ($currentIndex -eq 2) {
+ return $memberCommands | Where-Object { $_ -like "$wordToComplete*" }
+ }
+ }
+ { @("listen", "-l", "members", "-M") -contains $_ } {
+ # These commands have no arguments to complete
+ return @()
+ }
+ }
+
+ return @()
+}