3

Я запускаю сценарий терминала, и я действительно хотел бы отправить варианты выбора в графический интерфейс OS X, подобно тому, как choice.com работает для Windows / DOS, но версия GUI.

Я знаю, что могу использовать команду choose from list , но я бы предпочел более родное приложение, потому что я думаю, что оно будет работать быстрее, а также будет более стабильным и более простым для взаимодействия с ним.

Я установил Platypus, и мне нравится, как у него есть возможность выводить данные в окно графического интерфейса, но мне бы хотелось, чтобы функциональность передавала данные обратно в сценарий из такого окна.

Одним из примеров сценария может быть простой способ выбора из списка папок. Вот как это выглядит, когда я делаю это с помощью Applescript:

set listOfNames to {}
tell application "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

Тем не менее, я бы предпочел не использовать Applescript.

Ресурсы

Пока я не смогу найти (или собрать) идеальное приложение для этого, мне, возможно, придется использовать Applescript. Я собираюсь перечислить несколько ресурсов, которые я нашел:

Умный способ сделать многострочный яблочный скрипт из терминала:

Код отсюда:

#!/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)'

Также на этой странице стоит отметить: "osascript пока не предоставляет способа передать аргументы скрипту"

«Но есть обходной путь:»

call osascript -e 'set thename to '$1 -e 'load script "/path/to/script"' -e 'look_up_name(thename)'

И мой вклад, способ заставить диалог быть в фокусе:

#!/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"

Также полезно отметить, что вы можете использовать несколько команд -e, чтобы передать несколько строк для запуска.

3 ответа3

2

CocoaDialog

/Applications/CocoaDialog.app/Contents/MacOS/CocoaDialog dropdown --title "Titlebar" --text "Prompt" --items A B --button1 OK --button2 Cancel

1

Это не ответ "не AppleScript", но есть лучший способ получить аргументы в AppleScript:

osascript -e '
  on run(args)
    ... choose from list args ...
  end
' 1 2 3

Это позволяет избежать проблем с кавычками, поэтому вы можете передавать произвольные строки (не забывайте "$quote" переменные оболочки!)

1

Как говорит Даниэль Бек в комментариях: AppleScript - ваш лучший вариант. Он такой же "нативный", как и все остальное (Cocoa, Carbon), если не больше (Python, Perl, tcl/tk и т.д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .