关于 hooks.ps1
- 每个补全都有一个
hooks.ps1文件,用于动态添加补全项 - 它需要提供一个
handleCompletions函数 - 该函数会接收一个参数
$completions,它是一个数组,包含从 json 中解析的所有补全项 - 该函数需要返回一个新的数组,它将作为补全数据被
PSCompletions使用
- 如果
config.json中没有定义hooks,它永远不会调用 - 只有
config.json中定义了hooks,且符合以下条件才会调用它hooks的值为true,且没有通过psc completion xxx enable_hooks 0禁用它hooks的值为false,但通过psc completion xxx enable_hooks 1启用了它
- 如果有需要,可以为补全添加一些临时的全局变量
- 以 scoop 为例,它需要存储 scoop 的配置文件路径,所以在
hooks.ps1中定义了$PSCompletions._scoop_config_path - 然后在
scoop/language/xxx.json的tip属性中,就可以使用去访问它 - 请遵守这样的命名方式
- 以 scoop 为例,它需要存储 scoop 的配置文件路径,所以在
powershell
function handleCompletions($completions) {
$list = @()
$input_arr = $PSCompletions.input_arr
$filter_input_arr = $PSCompletions.filter_input_arr # Exclude options parameters
$first_item = $filter_input_arr[0] # The first subcommand
$last_item = $filter_input_arr[-1] # The last subcommand
# switch ($first_item) {
# 'add' {
# if ('aaa' -notin $input_arr) {
# $list += $PSCompletions.return_completion('aaa', "Add aaa")
# }
# }
# }
# switch ($last_item) {
# 'add' {
# $list += $PSCompletions.return_completion('bbb', "Add bbb")
# }
# }
# $list += $PSCompletions.return_completion('example', "It's from hooks.ps1")
return $list + $completions
}TIP
函数中使用 $PSCompletions.return_completion 来添加新的补全项
- 第一个参数是补全项的名称
- 第二个参数是补全项的帮助信息(tip)
- 第三个参数是可选的,用于指定补全项的 补全预测符号
SpaceTab:~OptionTab:?WriteSpaceTab:!