2014-03-29 40 views
0

我想構建一個類似於git擁有git <command> [<param1> ...]的UI。我想出迄今:什麼是魚殼命令行UI模式?

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.魚不拿起自動完成可用的命令;
2.如果我運行git沒有參數,它不會打印出命令列表,也不會爲它們選擇描述。

在我看來,我所做的並不是用魚來構建命令行工具的「正確」方式。那麼,什麼是正確的方法?

+0

你們是不是要重新實現Git的? – Biffen

+0

@Biffen當然不是,我有一套腳本來自動化我的工作流程,我希望所有的腳本都可以通過相同的命名空間訪問,所以我可以爲不同的項目使用不同的腳本,使其具有相同的簡單名稱,如'project_1同步「等。 – Andrew

+0

嗯,我也有一個git函數,'git '自動完成git子命令。我沒有任何特別的git完成。 –

回答

0

也許你的問題發生是因爲如果你的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