package main import ( "log" "os" "strings" "./trans" "github.com/deanishe/awgo" "regexp" "fmt" ) func main() { translations := translateProgramArgs() if !runningInAlfred() { runAsCliTool(translations) } else { runAsAlfredWorkflow(translations) } } func translateProgramArgs() []string { word, fromLang, toLang := parseProgramArgs(os.Args) if fromLang == "" && toLang == "" { fromLang, toLang = decideWhatLanguagesToUse(word) } t := trans.New(word) t.Language = fromLang translations := t.Translate(toLang) return translations } func parseProgramArgs(args []string) (string, string, string) { if len(args) < 2 { log.Fatal("Not enough arguments!") } word := strings.Join(args[1:], " ") fromLang, toLang := "", "" if len(args) > 2 { if isTransLanguageSpecifier(args[1]) { languages := strings.Split(os.Args[1], ":") fromLang, toLang = languages[0], languages[1] word = strings.Join(os.Args[2:], " ") } } return word, fromLang, toLang } func isTransLanguageSpecifier(arg string) bool { ok, _ := regexp.MatchString("(\\w{2})?:(\\w{2})?", os.Args[1]) return ok } func decideWhatLanguagesToUse(word string) (string, string) { fromLang := trans.New(word).Identify() toLang := map[string]string{ "en": "hu", "hu": "en", }[fromLang] if toLang == "" { toLang = "en" } return fromLang, toLang } func runningInAlfred() bool { envVarsSetByAlfred := []string { "alfred_version", "alfred_workflow_uid", "alfred_workflow_data", } for _, envVar := range envVarsSetByAlfred { if _, ok := os.LookupEnv(envVar); !ok { return false } } return true } func runAsCliTool(translations []string) { for _, translation := range translations { fmt.Println(translation) } } func runAsAlfredWorkflow(translations []string) { wf := aw.New() wf.Run(func() { for _, translation := range translations { wf.NewItem(translation).Arg(translation).Valid(true) } wf.WarnEmpty("No results", "Try a different query?") wf.SendFeedback() }) }