【问题标题】:What are fish shell command-line ui patterns?什么是鱼壳命令行 ui 模式?
【发布时间】:2014-05-09 02:07:29
【问题描述】:

我想构建一个类似于 git git <command> [<param1> ...] 的用户界面。到目前为止我想出的是:

function git -d "Description"
    switch $argv[1]
        case branch
            git_branch $argv[2]
        case reset
            git_reset
    end
end

function git_branch -d "Description for branch"
    do_something $argv[1]
end

function git_reset -d "Description for reset"
    do_something_else
end

它有效,但有几个问题:
1. Fish 没有选择自动完成的可用命令;
2. 如果我在没有参数的情况下运行git,它不会打印出命令列表,也不会为它们提取描述。

在我看来,我正在做的并不是用 fish 构建命令行实用程序的“正确”方式。那么,正确的方法是什么?

【问题讨论】:

  • 你要重新实现 Git 吗?!
  • @Biffen 当然不是,我有一组脚本来自动化我的工作流程,我希望所有这些脚本都可以通过相同的命名空间进行访问,因此我可以为不同的项目使用不同的脚本相同的简单名称,如 project_1 sync 等等。
  • 嗯,我还有一个 git 功能,git <tab> 自动完成 git 子命令。我没有任何特殊的 git 完成。
  • @glennjackman fish 捆绑了 git 自动完成功能(请参阅 github.com/fish-shell/fish-shell/blob/master/share/completions/… ),但我的问题与 git 本身无关。
  • 我明白这一点。我只是说你和我在做基本相同的事情,但结果不同。等等,我看到了区别......

标签: fish


【解决方案1】:

也许你的问题出现是因为你的 switch 语句没有默认分支,所以你永远不会调用实际的 git 命令。试试:

function git -d "Description"
    switch $argv[1]
        case branch
            git_branch $argv[2]
        case reset
            git_reset
        case '*'
            command git $argv
    end
end

为了防止提供零参数的情况,我这样做:

function git -d "Description"
    set -q argv[1]
    and switch $argv[1]
        case branch
            git_branch $argv[2]
            return
        case reset
            git_reset
            return
    end
    command git $argv
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多