2015-03-03 11 views
0

我是golang的新手,我正在使用代碼gangsta cli框架[https://github.com/codegangsta/cli]來開發命令行應用程序。我正試圖爲這些命令的標誌實現自動完成功能,但看起來它不像預期的那樣工作。有沒有人試圖使用這個框架來實現這個功能?bash自動完成使用codegangsta cli框架[https://github.com/codegangsta/cli]

這裏是我的部分代碼:

package main 

import (
    "fmt" 
    "os" 

    "github.com/codegangsta/cli" 
) 

func main() { 
    app := cli.NewApp() 
    app.Name = "greet" 
    app.Usage = "sample command-line app by greet" 
    app.Author = "abc" 
    app.Email = "[email protected]" 
    app.EnableBashCompletion = true 
    app.Commands = []cli.Command{ 
     { 
      Name:  "read", 
      ShortName: "r", 
      Usage:  "read something", 
      Subcommands: []cli.Command{ 
       { 
        Name: "articles", 
        Usage: "read articles", 
        Action: readArticles, 
       }, 

       { 
        Name: "tweets", 
        Usage: "read Tweets", 
        Flags: []cli.Flag{ 
         cli.StringFlag{ 

          Name: "account", 
          Value: "SomeThing", 
          Usage: "name of Twitter account", 
         }, 
        }, 
        Action: readTwitter, 
       }, 
      }, 
     }, 
    } 
    app.Run(os.Args) 
} 

func readArticles(ctx *cli.Context) { 
    fmt.Println("Go to http://www.google.com to read articles!") 
} 

func readTwitter(ctx *cli.Context) { 
    fmt.Printf("Go to https://twitter.com/%s to read tweets!", ctx.String("account")) 
} 

這裏是預期輸出:

./greet閱讀鳴叫--a [TAB] [TAB]不起作用。

+0

它適合你嗎?有什麼建議麼? – CodeQuestor 2017-01-04 10:42:17

回答

-1

我會讀一讀cli repo自述文件的這一部分。

+1

自述文件留下了許多不足之處......例如,如何使用自動完成功能來分發此程序(不是說這個主題*應該在自述文件的範圍內,而是爲了回答這個問題)。 – weberc2 2015-03-09 20:28:30

+1

這聽起來像你期待的魔術和/或不明白如何自動完成各種外殼的工作。 – 2015-03-09 22:41:19

+1

@DaveC我並不期待魔術 - 許多程序允許其他程序/插件定義他們自己的行爲沒有任何魔法。我不知道autocompletion是如何工作的,但它可能是一個類似的機制當然不是不合理的。一個好的答案可以解釋爲什麼一個庫不能提供這個功能,以及CLI API通過「啓用bash完成」(這看起來像我的意思,「將此標誌設置爲true並獲得自動完成優點!」)意味着什麼。 我不是要求魔術,只是一個很好的答案。 – weberc2 2015-03-10 13:16:52