/Applications/CocoaDialog.app/Contents/MacOS/CocoaDialog dropdown --title "Titlebar" --text "Prompt" --items A B --button1 OK --button2 Cancel
Estou executando um script de terminal e realmente gostaria de enviar opções de opções para o OS X GUI, semelhante a como choice.com
funciona para Windows / DOS, mas uma versão GUI.
Eu sei que posso usar o comando choose from list
do applescript, mas eu preferiria um aplicativo mais nativo porque acho que ele seria executado mais rapidamente, além de ser mais estável e mais direto para a interface.
Instalei o Platypus e gosto de como ele tem a opção de enviar dados para uma janela de GUI, mas gostaria de ter a funcionalidade de passar os dados de volta para o script a partir de uma janela como essa.
Um cenário de exemplo pode ser uma maneira fácil de selecionar em uma lista de pastas. Isto é o que parece quando eu faço isso com o Applescript:
setlistOfNamesto{}tellapplication"Finder"
set filelist to every window
repeat with currentFile in filelist
set currentFileName to (POSIX path of (target of currentFile as alias)) as string
copy currentFileName to the end of listOfNames
end repeat
end tell
set mySelection to choose from list listOfNames
No entanto, eu realmente prefiro não usar o Applescript.
Até que eu possa encontrar (ou construir) o aplicativo perfeito para fazer isso, talvez precise usar o Applescript. Vou listar alguns recursos que encontrei:
Uma maneira inteligente de fazer o applescript com várias linhas a partir do terminal:
Código aqui :
#!/bin/sh
# filename: find_me
# usage from Terminal prompt: find_me "Last First"
osascript -e "set the_name to \"$1\"" -e 'on find_me (the_name)
tell application "Address Book"
set the_people to every person
repeat with this_name in the_people
if name of this_name contains the_name then
set result to name of this_name & "\n"
repeat with e_info in emails of this_name
set result to result & value of e_info & " "
end repeat
set result to result & "\n"
repeat with p_info in phones of this_name
set result to result & value of p_info & " "
end repeat
return result
end if
end repeat
end tell
end find_me' -e 'find_me(the_name)'
Também digno de nota a partir dessa página: "o osascript ainda não fornece nenhuma maneira de passar argumentos para o script"
"Mas há uma solução alternativa:"
call osascript -e 'set thename to '$1 -e 'load script "/path/to/script"' -e 'look_up_name(thename)'
E minha contribuição, uma maneira de forçar o diálogo a estar em foco:
#!/bin/sh
osascript -e "set front_app_name to short name of (info for (path to frontmost application))
set listOfNames to {"a", "b", "c"}
tell application front_app_name to choose from list listOfNames"
Também é bom notar que você pode usar vários comandos -e para passar várias strings para serem executadas.
/Applications/CocoaDialog.app/Contents/MacOS/CocoaDialog dropdown --title "Titlebar" --text "Prompt" --items A B --button1 OK --button2 Cancel
Como Daniel Beck diz nos comentários: o AppleScript é sua melhor opção. É tão "nativo" quanto qualquer outra coisa (Cocoa, Carbon), se não mais (Python, Perl, tcl / tk, etc.).
Esta não é uma resposta "não AppleScript", mas há uma maneira melhor de obter argumentos em um AppleScript:
osascript -e '
on run(args)
... choose from list args ...
end
' 1 2 3
Isso evita problemas de citação, então você pode passar strings arbitrárias (não esqueça de "$quote"
das variáveis do seu shell!)
Tags macos