|
1 | | -# Usage: scoop alias add|list|rm [<args>] |
| 1 | +# Usage: scoop alias <subcommand> [options] [<args>] |
2 | 2 | # Summary: Manage scoop aliases |
3 | | -# Help: Add, remove or list Scoop aliases |
| 3 | +# Help: Available subcommands: add, rm, list. |
4 | 4 | # |
5 | | -# Aliases are custom Scoop subcommands that can be created to make common tasks |
6 | | -# easier. |
| 5 | +# Aliases are custom Scoop subcommands that can be created to make common tasks easier. |
7 | 6 | # |
8 | | -# To add an Alias: |
9 | | -# scoop alias add <name> <command> <description> |
| 7 | +# To add an alias: |
10 | 8 | # |
11 | | -# e.g.: |
12 | | -# scoop alias add rm 'scoop uninstall $args[0]' 'Uninstalls an app' |
13 | | -# scoop alias add upgrade 'scoop update *' 'Updates all apps, just like brew or apt' |
| 9 | +# scoop alias add <name> <command> [<description>] |
| 10 | +# |
| 11 | +# e.g., |
| 12 | +# |
| 13 | +# scoop alias add rm 'scoop uninstall $args[0]' 'Uninstall an app' |
| 14 | +# scoop alias add upgrade 'scoop update *' 'Update all apps, just like "brew" or "apt"' |
| 15 | +# |
| 16 | +# To remove an alias: |
| 17 | +# |
| 18 | +# scoop alias rm <name> |
| 19 | +# |
| 20 | +# To list all aliases: |
| 21 | +# |
| 22 | +# scoop alias list [-v|--verbose] |
14 | 23 | # |
15 | 24 | # Options: |
16 | | -# -v, --verbose Show alias description and table headers (works only for 'list') |
| 25 | +# -v, --verbose Show alias description and table headers (works only for "list") |
17 | 26 |
|
18 | | -param( |
19 | | - [String]$opt, |
20 | | - [String]$name, |
21 | | - [String]$command, |
22 | | - [String]$description, |
23 | | - [Switch]$verbose = $false |
24 | | -) |
| 27 | +param($SubCommand) |
25 | 28 |
|
26 | | -. "$PSScriptRoot\..\lib\install.ps1" # shim related |
| 29 | +. "$PSScriptRoot\..\lib\getopt.ps1" |
27 | 30 |
|
28 | | -$script:config_alias = 'alias' |
29 | | - |
30 | | -function init_alias_config { |
31 | | - $aliases = get_config $script:config_alias |
32 | | - if ($aliases) { |
33 | | - $aliases |
| 31 | +$SubCommands = @('add', 'rm', 'list') |
| 32 | +if ($SubCommand -notin $SubCommands) { |
| 33 | + if (!$SubCommand) { |
| 34 | + error '<subcommand> missing' |
34 | 35 | } else { |
35 | | - New-Object -TypeName PSObject |
| 36 | + error "'$SubCommand' is not one of available subcommands: $($SubCommands -join ', ')" |
36 | 37 | } |
| 38 | + my_usage |
| 39 | + exit 1 |
37 | 40 | } |
38 | 41 |
|
39 | | -function add_alias($name, $command) { |
40 | | - if (!$command) { |
41 | | - abort "Can't create an empty alias." |
42 | | - } |
| 42 | +$opt, $other, $err = getopt $Args 'v' , 'verbose' |
| 43 | +if ($err) { "scoop alias: $err"; exit 1 } |
43 | 44 |
|
44 | | - # get current aliases from config |
45 | | - $aliases = init_alias_config |
46 | | - if ($aliases.$name) { |
47 | | - abort "Alias '$name' already exists." |
48 | | - } |
49 | | - |
50 | | - $alias_file = "scoop-$name" |
| 45 | +$name, $command, $description = $other |
| 46 | +$verbose = $opt.v -or $opt.verbose |
51 | 47 |
|
52 | | - # generate script |
53 | | - $shimdir = shimdir $false |
54 | | - if (Test-Path "$shimdir\$alias_file.ps1") { |
55 | | - abort "File '$alias_file.ps1' already exists in shims directory." |
| 48 | +switch ($SubCommand) { |
| 49 | + 'add' { |
| 50 | + if (!$name -or !$command) { |
| 51 | + error "<name> and <command> must be specified for subcommand 'add'" |
| 52 | + exit 1 |
| 53 | + } |
| 54 | + add_alias $name $command $description |
56 | 55 | } |
57 | | - $script = |
58 | | - @( |
59 | | - "# Summary: $description", |
60 | | - "$command" |
61 | | - ) -join "`r`n" |
62 | | - $script | Out-UTF8File "$shimdir\$alias_file.ps1" |
63 | | - |
64 | | - # add alias to config |
65 | | - $aliases | Add-Member -MemberType NoteProperty -Name $name -Value $alias_file |
66 | | - |
67 | | - set_config $script:config_alias $aliases | Out-Null |
68 | | -} |
69 | | - |
70 | | -function rm_alias($name) { |
71 | | - $aliases = init_alias_config |
72 | | - if (!$name) { |
73 | | - abort 'Alias to be removed has not been specified!' |
| 56 | + 'rm' { |
| 57 | + if (!$name) { |
| 58 | + error "<name> must be specified for subcommand 'rm'" |
| 59 | + exit 1 |
| 60 | + } |
| 61 | + rm_alias $name |
74 | 62 | } |
75 | | - |
76 | | - if ($aliases.$name) { |
77 | | - info "Removing alias '$name'..." |
78 | | - |
79 | | - rm_shim $aliases.$name (shimdir $false) |
80 | | - |
81 | | - $aliases.PSObject.Properties.Remove($name) |
82 | | - set_config $script:config_alias $aliases | Out-Null |
83 | | - } else { |
84 | | - abort "Alias '$name' doesn't exist." |
85 | | - } |
86 | | -} |
87 | | - |
88 | | -function list_aliases { |
89 | | - $aliases = @() |
90 | | - |
91 | | - (init_alias_config).PSObject.Properties.GetEnumerator() | ForEach-Object { |
92 | | - $content = Get-Content (command_path $_.Name) |
93 | | - $command = ($content | Select-Object -Skip 1).Trim() |
94 | | - $summary = (summary $content).Trim() |
95 | | - |
96 | | - $aliases += New-Object psobject -Property @{Name = $_.name; Summary = $summary; Command = $command } |
97 | | - } |
98 | | - |
99 | | - if (!$aliases.count) { |
100 | | - info "No alias found." |
| 63 | + 'list' { |
| 64 | + list_aliases $verbose |
101 | 65 | } |
102 | | - $aliases = $aliases.GetEnumerator() | Sort-Object Name |
103 | | - if ($verbose) { |
104 | | - return $aliases | Select-Object Name, Command, Summary |
105 | | - } else { |
106 | | - return $aliases | Select-Object Name, Command |
107 | | - } |
108 | | -} |
109 | | - |
110 | | -switch ($opt) { |
111 | | - 'add' { add_alias $name $command } |
112 | | - 'rm' { rm_alias $name } |
113 | | - 'list' { list_aliases } |
114 | | - default { my_usage; exit 1 } |
115 | 66 | } |
116 | 67 |
|
117 | 68 | exit 0 |
0 commit comments