Изменение имени элемента контекстного меню Finder на основе текущего выбора с помощью Applescript

При программировании мне удобно использовать Finder для исследования каталогов. Раньше я часто обнаруживал, что мне нужен простой способ скопировать полный путь к выбранному файлу или файлам в монтажный стол (буфер обмена), который (начиная с OSX v10.8.2) является функцией, которой не хватает Finder. Итак, будучи программистом, я добавил желаемую функциональность, добавив рабочий процесс Automator, который запускает простой Applescript в контекстное меню файла, которое появляется при щелчке правой кнопкой мыши по выбранному файлу в Finder.

Скрипт отлично работает! Он добавляет желаемый функционал и удобен в использовании. Однако есть часть поведения, которую я хотел бы добавить в сценарий, но я еще не смог понять, как это сделать. Имя элемента контекстного меню Finder, запускающего рабочий процесс, - «Копировать имя файла», что нормально, когда выбран только один файл, но когда выбрано несколько файлов, я бы хотел, чтобы элемент меню имени изменился на «Копировать имена файлов» или, возможно, «Копировать» + (Количество выбранных файлов) + «Имена файлов».

Итак, у меня такой вопрос: как мне, используя Applescript, динамически установить имя элемента в контекстном меню файла, которое появляется при щелчке правой кнопкой мыши по выбранному файлу в Finder в зависимости от количества выбранных файлов?

Есть прецедент такого поведения. Это видно при копировании выбранных файлов в Finder. Если выбран только один файл, пункт меню копирования в контекстном меню будет читать, Копировать "somefile.txt", но если выбрано пять файлов, пункт меню копирования будет читать, Копировать 5 элементов < / сильный>.


person Paul Graham    schedule 12.03.2013    source источник
comment
Я подозреваю, что программа поиска программно создает пункт меню копирования во время вызова контекстного меню. Поэтому имя создается одновременно и меняется в зависимости от условий.   -  person markhunte    schedule 16.06.2013


Ответы (1)


Ты не можешь. Что ж, вы могли бы, но это действительно отвратительно и, вероятно, не стоит затраченных усилий. Имя, показанное в меню, сохраняется в файле Info.plist внутри рабочего процесса, поэтому теоретически вы можете написать сценарий монитора, который отслеживает выбор Finder и соответствующим образом изменяет этот файл, а затем вызывает волшебную функцию NSUpdateDynamicServices(), для которой вы ' Мне понадобится AppleScriptObjC. (Или вы можете убить и перезапустить Finder, но делать это каждый раз, когда вы меняете выбор Finder, было бы, скажем так, непрактично.)

Интересным запросом на расширение может быть способ называть рабочие процессы службы таким образом, чтобы имя отражало выбор, поэтому вы называете свой рабочий процесс, скажем, «Копировать путь из%», а система заменяет «foo.txt» или «5 элементов» или что у вас автоматически.

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

person Chris N    schedule 05.04.2013