Добавление скрипта в контекстное меню Finder MacOS

Я хочу добавить в контекстное меню средства поиска параметр, который вызывает hg add %1, где %1 – это полный путь к выбранному файлу в средстве поиска.
Конечно, есть и другие полезные случаи, которые я могу придумать для добавления в контекстное меню.
Есть ли простой способ сделать это, не требующий установки какого-либо стороннего программного обеспечения или написания кода на скомпилированном языке и создания бинарных плагинов?
Например, создать скрипт в редакторе скриптов и поместить его в /Library/Contextual Menu Items/ ?


person Petruza    schedule 18.11.2010    source источник
comment
Ну... Откройте Automator, создайте собственный рабочий процесс. Из Library выберите Utilites, затем перетащите Run shell script в рабочий процесс. Установите Pass input на As arguments. Напишите в своем сценарии: hg add $1. Затем меню Файл->Сохранить плагин, указать имя, выбрать плагин для Finder, Сохранить. Щелкните файл правой кнопкой мыши, выберите «Дополнительно» -> «Autamator» -> «PLUGIN_NAME» и наслаждайтесь. Но здесь нет ничего о программировании...   -  person khachik    schedule 18.11.2010
comment
@khachik: Это все еще связано с разработкой. Вы должны сделать свой комментарий ответом.   -  person Philip Regan    schedule 18.11.2010
comment
@Philip Хорошо, на самом деле это ответ ...   -  person khachik    schedule 18.11.2010


Ответы (3)


Да, я знаю, что это стороннее программное обеспечение, но для более полного обзора - http://www.abracode.com/free/cmworkshop/on_my_command.html. Другой инструмент, облегчающий написание сценария, – это http://wafflesoftware.net/thisservice/ добавление элементов в сервисное меню.

person Zygmunt    schedule 20.11.2010

Шаги изменились для Snow Leopard/10.6+ с момента правильного ответа @khachik. Чтобы убедиться, что это ясно, вот шаги:

  • Открыть автоматизатор
  • Создайте новый Service
  • Установите два верхних раскрывающихся списка вверху на «Служба получает выбранные files or folders в Finder.app».
  • Установите вход Pass на as arguments
  • Напишите свой сценарий (об этом см. ниже).
  • Сохраните и выберите имя службы

Окно вашего Automator должно выглядеть следующим образом: :screenshot

Теперь вы можете выбрать несколько файлов в Finder, а затем запустить службу из подменю «Службы».

Для вашего сценария, я думаю, вам нужно следующее. Это изменяет каталог каждого аргумента, а затем добавляет его. Я использую цикл for, потому что Finder позволяет вам выбирать несколько файлов в разных папках (которые могут находиться в разных репозиториях).

for f in "$@"
do
    cd $(dirname $f); hg add $f 
done

Если вы предположили, что все они находятся в одном репозитории, вы можете сделать это:

cd $(dirname $1); hg add $@
person studgeek    schedule 25.09.2012
comment
Automator запускает скрипт в среде, которая устанавливает путь к тому, что определено в /etc/paths (и, возможно, что-то еще), НО он не вызывает ваш ~/.bash_profile ---> Так что, если у вас есть какие-то пути, необходимые чтобы найти сценарий/программу, которую вы хотите выполнить, из вашего сценария Automator, вам нужно либо использовать полный путь, либо добавить источник ~/.bash_profile (без кавычек) в качестве первой строки вашего сценария. - person georg; 20.12.2012

Откройте Automator, создайте собственный рабочий процесс. Из Library выберите Utilites, затем перетащите Run shell script в рабочий процесс. Установите Pass input на As arguments. Напишите в своем сценарии: hg add $1. Затем File menu->Save as a Plugin, указываем имя, выбираем plugin for Finder, Save. Щелкните правой кнопкой мыши файл, выберите More->Autamator-><PLUGIN_NAME>.

person khachik    schedule 18.11.2010
comment
Вау, отличное объяснение. Хотя я не смог найти, как сохранить как плагин, я получаю только варианты «Рабочий процесс» или «Приложение». У меня ОС 10.6.4 - person Petruza; 18.11.2010
comment
В Automator нет пункта Save as a Plugin... в меню File? Я запускаю леопард, и он там... Я считаю, что должно быть что-то эквивалентное, даже если у него нет save as a plugin. - person khachik; 18.11.2010
comment
Ну, я нашел, что теперь в 10.6 это называется сервисами, но это то же самое. Мне удалось его создать, работает отлично, спасибо! теперь проблема в том, что мне нужно cd указать путь к файлу %1, не могли бы вы сказать мне, как это сделать? Благодарность! - person Petruza; 18.11.2010
comment
Ммм... (cd dirname "$1" && сделай что-нибудь) ? - person khachik; 18.11.2010
comment
Чтобы заставить это работать в Snow Leopard, вам нужно сделать New -> Service при запуске автоматизатора, не New -> Workflow. Затем вы можете использовать службу получает выбранные ____ в элементе управления ____, чтобы привязать службу к определенному контекстному меню в конкретном приложении. Остальное работает так же, как в этом ответе. - person aroth; 12.03.2012
comment
@Petruza - для определения пути к файлу/папке я использую следующее: if [ -d "$1" ]; then DIR=$1 else DIR=`dirname "$1"` fi. Затем вы можете сделать cd "$DIR", чтобы переодеться в него. - person aroth; 12.03.2012