跳至内容

关于 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.jsontip 属性中,就可以使用 去访问它
    • 请遵守这样的命名方式
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: !