Этот модуль позволяет Hammerspoon выполнять запросы к метаданным Spotlight.
Этот модуль сможет выполнять запросы только к томам и папкам, которые не заблокированы настройками конфиденциальности в панели Spotlight системных настроек.
Запрос Spotlight состоит из двух фаз: начальной фазы сбора информации, где собирается и возвращается информация, которая в настоящее время находится в базе данных Spotlight, и фазы обновления в реальном времени, которая происходит после фазы сбора и состоит из изменений, внесенных в базу данных Spotlight, таких как добавление новых записей, изменение информации в существующих записях или удаление объектов.
Синтаксис запросов Spotlight выходит за рамки документации данного модуля. Это подмножество синтаксиса, поддерживаемого классом Objective-C NSPredicate. Некоторые ссылки на этот синтаксис можно найти по следующим адресам:
В зависимости от сообщений обратного вызова, включенных с помощью метода hs.spotlight:callbackMessages, ваш обработчик обратного вызова, назначенный с помощью метода hs.spotlight:setCallback, может определять фазу запроса, обращая внимание на полученные сообщения. Во время начальной фазы сбора могут наблюдаться следующие сообщения обратного вызова: "didStart", "inProgress" и "didFinish". После завершения начальной фазы сбора вы будете наблюдать только сообщения "didUpdate" до тех пор, пока запрос не будет остановлен с помощью метода hs.spotlight:stop.
Вы также можете проверить, идет ли в настоящее время начальная фаза сбора, с помощью метода hs.spotlight:isGathering.
Вы можете получить доступ к отдельным результатам запроса с помощью метода hs.spotlight:resultAtIndex. Для удобства были добавлены метаметоды к объекту spotlightObject, которые упрощают доступ к отдельным результатам: к отдельному объекту spotlightItemObject можно получить доступ из объекта spotlightObject, обращаясь к spotlightObject как к массиву; например, spotlightObject[n] позволит получить доступ к n-ому объекту spotlightItemObject в текущих результатах.
Список определенных ключей атрибутов, обнаруженных в заголовках файлов фреймворка macOS 10.12 SDK.
Примечания
Этот список был сгенерирован путем поиска в файлах заголовков фреймворка строковых констант, которые соответствовали одному из следующих регулярных выражений: "kMDItem.+", "NSMetadataItem.+", и "NSMetadataUbiquitousItem.+".
Таблица пар ключ-значение, описывающая предопределенные области поиска для запросов Spotlight.
Примечания
В настоящее время неясно, являются ли области поиска iCloud* полезными в Hammerspoon, так как Hammerspoon не является приложением в песочнице, использующим API iCloud для хранения документов. Любая дополнительная информация о вашем опыте работы с этими областями поиска, если вы их используете, приветствуется в группе Hammerspoon Google Group или на веб-сайте Hammerspoon GitHub.
Получить или указать конкретные сообщения, которые должны генерировать обратный вызов.
Параметры
messages - необязательная таблица или список элементов, определяющих конкретные сообщения обратного вызова, которые сгенерируют обратный вызов. По умолчанию { "didFinish" }.
Возвращает
если аргумент предоставлен, возвращает spotlightObject; в противном случае возвращает текущие значения
Примечания
Допустимые сообщения для таблицы: "didFinish", "didStart", "didUpdate" и "inProgress". См. hs.spotlight:setCallback для получения более подробной информации о сообщениях.
Возвращает количество результатов для запроса spotlightObject.
Параметры
Нет
Возвращает
если запрос собрал результаты, возвращает количество результатов, которые соответствуют запросу; если запрос не был запущен, это значение будет 0.
Примечания
То, что результат этого метода равен 0, не означает, что запрос не был запущен; сам запрос может не соответствовать никаким записям в базе данных Spotlight.
Запрос, который был выполнен в прошлом, но затем был остановлен, сохранит свои запросы, если параметры не изменены. Результат этого метода будет указывать количество результатов, все еще привязанных к запросу, даже если он был ранее остановлен.
Для удобства были добавлены метаметоды к объекту spotlightObject, которые позволяют использовать #spotlightObject как сокращение для spotlightObject:count().
Возвращает сгруппированные результаты для запроса Spotlight.
Параметры
Нет
Возвращает
массив таблиц, содержащих сгруппированные результаты для запроса Spotlight, как указано в методе hs.spotlight:groupingAttributes. Каждый член массива будет объектом spotlightGroupObject, который подробно описан в документации модуля hs.spotlight.group.
Примечания
Объекты spotlightItemObjects, доступные с помощью метода hs.spotlight.group:resultAtIndex, представляют собой подмножество полных результатов spotlightObject, которые соответствуют атрибуту и значению spotlightGroupObject. Один и тот же элемент доступен как через spotlightObject, так и через spotlightGroupObject, хотя, вероятно, на разных индексах.
Получить или установить атрибуты группировки для запроса Spotlight.
Parameters
attributes - необязательная таблица или список элементов, определяющих атрибуты группировки для запроса Spotlight. По умолчанию пустой массив.
Returns
если передан аргумент, возвращает spotlightObject; в противном случае возвращает текущие значения
Notes
Установка этого свойства во время выполнения запроса останавливает запрос и отбрасывает текущие результаты. Получатель сразу же запускает новый запрос.
Установка этого свойства увеличит использование ЦП и памяти во время выполнения запроса Spotlight.
Этот метод позволяет получать результаты, сгруппированные по значениям определенных атрибутов. См. hs.spotlight.group для получения дополнительной информации об использовании и получении сгруппированных результатов.
Обратите внимание, что не все атрибуты могут использоваться в качестве атрибутов группировки. В таких случаях сгруппированный результат будет содержать все результаты, а значение атрибута будет nil.
Возвращает булево значение, указывающее, находится ли запрос в активной фазе сбора данных.
Parameters
None
Returns
булевое значение true, если запрос находится в активной фазе сбора данных, или false, если нет.
Notes
Неактивный запрос также вернёт false для этого метода, так как неактивный запрос не собирает данные и не ожидает обновлений. Чтобы определить, активен или неактивен запрос, используйте метод hs.spotlight:isRunning.
Возвращает булево значение, указывающее, активен или неактивен запрос.
Parameters
None
Returns
булевое значение true, если запрос активен, или false, если неактивен.
Notes
Активный запрос может собирать результаты запроса (в начальной фазе сбора) или прослушивать изменения, которые должны вызвать сообщение "didUpdate" (после начальной фазы сбора). Чтобы определить, в каком состоянии находится запрос, используйте метод hs.spotlight:isGathering.
Установка этого свойства во время выполнения запроса останавливает запрос и отбрасывает текущие результаты. Получатель сразу же запускает новый запрос.
Синтаксис строки запроса недостаточно прост для полного описания здесь. Это подмножество синтаксиса, поддерживаемого классом Objective-C NSPredicate. Некоторые ссылки на этот синтаксис можно найти по адресам:
Если строка запроса не соответствует строке запроса NSPredicate, этот метод вернет ошибку. Если строка запроса соответствует строке запроса NSPredicate, этот метод примет строку запроса, но если она не соответствует формату запроса метаданных, который является подмножеством формата запроса NSPredicate, ошибка будет сгенерирована при попытке запуска запроса с помощью hs.spotlight:start. В настоящее время запуск запроса является единственным способом полностью гарантировать, что запрос имеет правильный формат.
Некоторые из строк запросов, которые использовались во время тестирования этого модуля, приведены ниже (обратите внимание, что [[ ]] — это спецификатор строки Lua, который позволяет использовать двойные кавычки в содержании строки):
[[ kMDItemFSName like "AppleScript Editor.app" or kMDItemAlternateNames like "AppleScript Editor"]]
Не все атрибуты, похоже, применимы в запросе; см. hs.spotlight.item:attributes для возможного объяснения.
Для удобства был настроен метаметод __call для spotlightObject, так что вы можете использовать spotlightObject("query") в качестве сокращения для spotlightObject:queryString("query"):start. Поскольку это сокращение включает явный запуск, его следует добавлять после того, как вы установили функцию обратного вызова, если вам нужен обратный вызов (например, spotlightObject:setCallback(fn)("query")).
Возвращает spotlightItemObject по указанному индексу spotlightObject.
Parameters
index - целое число, определяющее индекс возвращаемого результата.
Returns
spotlightItemObject по указанному индексу или ошибка, если индекс выходит за пределы границ.
Notes
Для удобства были добавлены метаметоды в spotlightObject, которые позволяют использовать spotlightObject[index] в качестве сокращения для spotlightObject:resultAtIndex(index).
Получить или установить разрешенные области поиска для запроса Spotlight.
Parameters
scope - необязательная таблица или список элементов, определяющих область поиска для запроса Spotlight. По умолчанию пустой массив, указывающий, что поиск не ограничен областью.
Returns
если для scope передан аргумент, возвращает spotlightObject; в противном случае возвращает таблицу, содержащую текущие области поиска.
Notes
Установка этого свойства во время выполнения запроса останавливает запрос и отбрасывает текущие результаты. Получатель сразу же запускает новый запрос.
Каждый элемент в таблице scope может быть строкой или таблицей URL-адреса файла, как описано в документации для функций hs.sharing.URL и hs.sharing.fileURL.
если элемент является строкой и соответствует одному из значений в таблице hs.spotlight.definedSearchScopes, то область для этого элемента будет добавлена к допустимым областям поиска.
если элемент является строкой и не соответствует одному из предопределенных значений, он рассматривается как путь в локальной системе и подвергается расширению префикса тильды перед добавлением в области поиска (т.е. "~/" будет расширено до "/Users/имя_пользователя/").
если элемент является таблицей, он будет рассматриваться как таблица URL-адреса файла.
Установите или удалите функцию обратного вызова для объекта поиска Spotlight.
Parameters
fn - функция, которая заменяет текущую функцию обратного вызова. Если этот аргумент является явным nil, удаляет текущую функцию обратного вызова и не заменяет её. Функция должна ожидать 2 или 3 аргумента и не должна возвращать ничего.
Returns
объект spotlightObject
Notes
В зависимости от сообщений, установленных методом hs.spotlight:callbackMessages, могут произойти следующие события обратного вызова:
obj, "didStart" — происходит, когда начинается начальная фаза сбора данных поиска Spotlight.
obj - объект spotlightObject, выполняющий поиск
message - сообщение для обратного вызова, в данном случае "didStart"
obj, "inProgress", updateTable — происходит во время начальной фазы сбора данных через интервалы, установленные методом hs.spotlight:updateInterval.
obj - объект spotlightObject, выполняющий поиск
message - сообщение для обратного вызова, в данном случае "inProgress"
updateTable - таблица, содержащая один или несколько из следующих ключей:
kMDQueryUpdateAddedItems - массивная таблица объектов spotlightItem, которые были добавлены в результаты
kMDQueryUpdateChangedItems - массивная таблица объектов spotlightItem, которые изменились с момента их первоначального добавления в результаты
kMDQueryUpdateRemovedItems - массивная таблица объектов spotlightItem, которые были удалены с момента их первоначального добавления в результаты
obj, "didFinish" — происходит, когда завершается начальная фаза сбора данных поиска Spotlight.
obj - объект spotlightObject, выполняющий поиск
message - сообщение для обратного вызова, в данном случае "didFinish"
obj, "didUpdate", updateTable — происходит после завершения начальной фазы сбора данных. Это указывает на то, что после начального запроса произошли изменения, влияющие на набор результатов.
obj - объект spotlightObject, выполняющий поиск
message - сообщение для обратного вызова, в данном случае "didUpdate"
updateTable - таблица, содержащая один или несколько ключей, описанных для аргумента updateTable сообщения "inProgress".
Все результаты всегда доступны через метод hs.spotlight:resultAtIndex и сокращения метаметодов, описанные в заголовках документации hs.spotlight и hs.spotlight.item; результаты, предоставляемые сообщениями "didUpdate" и "inProgress", — это просто удобство, и их можно использовать, если вы хотите проанализировать частичные результаты.
Получение или установка параметров сортировки результатов запроса Spotlight.
Parameters
attributes - необязательная таблица или список элементов, определяющих дескрипторы сортировки, которые влияют на порядок сортировки результатов запроса Spotlight. По умолчанию пустой массив.
Returns
если аргумент предоставлен, возвращает spotlightObject; в противном случае возвращает текущие значения
Notes
Установка этого свойства во время выполнения запроса останавливает запрос и отбрасывает текущие результаты. Приёмник сразу же запускает новый запрос.
Дескриптор сортировки может быть задан как строкой, так и таблицей пар ключ-значение. В случае строки дескриптор сортировки будет сортировать элементы в порядке возрастания. При задании таблицей, как минимум, должны быть указаны следующие ключи:
key - строка, определяющая атрибут для сортировки
ascending - булево значение, по умолчанию true, определяющее, должен ли порядок сортировки быть возрастающим (true) или убывающим (false).
Этот метод пытается указать порядок сортировки результатов, возвращаемых запросом Spotlight.
Обратите внимание, что не все атрибуты могут быть использованы в качестве атрибута в дескрипторе сортировки. В таких случаях дескриптор сортировки не будет влиять на порядок возвращаемых элементов.
Если строка запроса, установленная с помощью hs.spotlight:queryString, недействительна, сообщение об ошибке будет записано в консоль Hammerspoon, и запрос не начнется. Вы можете проверить, действительно ли запрос выполняется, с помощью метода hs.spotlight:isRunning.
Этот метод предотвратит дальнейший сбор элементов как во время начальной фазы сбора, так и от обновлений, которые могут произойти после фазы сбора; однако он не отбросит уже обнаруженные результаты.
hs.spotlight:updateInterval([interval]) -> number | spotlightObject
Type
Method
Description
Получение или установка интервала времени, через который объект spotlightObject будет отправлять сообщения "didUpdate" во время начальной фазы сбора данных.
Parameters
interval - необязательное число, по умолчанию 1.0, определяющее, как часто в секундах сообщение "didUpdate" должно генерироваться во время начальной фазы сбора данных запроса Spotlight.
Returns
если аргумент предоставлен, возвращает объект spotlightObject; в противном случае возвращает текущее значение.
Получение или установка атрибутов, для которых производятся сводки списка значений для запроса Spotlight.
Parameters
attributes - необязательная таблица или список элементов, определяющих атрибуты, для которых производятся сводки списка значений для запроса Spotlight. По умолчанию пустой массив.
Returns
если аргумент предоставлен, возвращает spotlightObject; в противном случае возвращает текущие значения
Notes
Установка этого свойства во время выполнения запроса останавливает запрос и отбрасывает текущие результаты. Приёмник сразу же запускает новый запрос.
Установка этого свойства увеличит использование ЦП и оперативной памяти при выполнении запроса Spotlight.
Этот метод позволяет указать атрибуты, для которых вы хотите получить сводную информацию. Смотрите hs.spotlight:valueLists для получения дополнительной информации о сводках списка значений.
Обратите внимание, что не все атрибуты могут быть использованы как атрибут списка значений. В таких случаях сводка для атрибута будет содержать все результаты, и значение атрибута будет равно nil.
Возвращает сводки списка значений для запроса Spotlight
Parameters
None
Returns
массивная таблица сводок списка значений для запроса Spotlight, как указано методом hs.spotlight:valueListAttributes. Каждый элемент массива будет таблицей со следующими ключами:
attribute - атрибут для сводки
value - значение атрибута для сводки
count - количество элементов Spotlight в результатах spotlightObject, для которых этот атрибут имеет это значение
Notes
Сводки списка значений — это быстрый способ сбора статистики о количестве результатов, соответствующих определенным критериям. Они не позволяют легко получить доступ к соответствующим членам, а только информацию о их количестве.