The missing Spotlight plugin system
Das fehlende Plugin-System für Spotlight.
Flashlight is an unofficial Spotlight API that allows you to programmatically process queries and add additional results. It's very rough right now, and a horrendous hack, but a fun proof of concept.
Installation
Clone and build using Xcode, or download Flashlight.app from releases.
Start with the tutorial on writing plugins.
The Flashlight.app
Xcode target is a fork of EasySIMBL (which is designed to allow loading runtime injection of plugins into arbitrary apps) that's been modified to load a single plugin (stored inside its own bundle, rather than an external directory) into the Spotlight process. It should be able to coexist with EasySIMBL if you use it.
The SIMBL plugin that's loaded into Spotlight, SpotlightSIMBL.bundle
, patches Spotlight to add a new subclass of SPQuery
, the internal class used to fetch results from different sources. It runs a bundled Python script, which uses commanding to parse queries and determine their intents and parameters, then invokes the appropriate plugin's plugin.py
script and presents the results using a custom subclass of SPResult
.
Since I'm not sure how to subclass classes that aren't available at link time, subclasses of Spotlight internal classes are made at runtime using Mike Ash's instructions and helper code.
The Spotlight plugin is gated to run only on versions 911-916
(Yosemite GM through 10.10.2 seed). If a new version of Spotlight comes out, you can manually edit SpotlightSIMBL/SpotlightSIMBL/Info.plist
key SIMBLTargetApplications.MaxBundleVersion
, restarts Spotlight, verify everything works, and then submit a pull request.
Huge thanks to everyone who's contributed translations:
- xremix and DanielBocksteger for German
- matth96 for Dutch
- tiphedor for French
- lipe1966 for Portugese
- chuyik for Chinese
- suer for Japanese
- andreaponza for Italian
- iltercengiz for Turkish
- AlAdler for Spanish
- readingsnail for Korean
- davochka for Russian
If it's not translated to your native language yet, you should consider helping us localize.
The iOS-style switches in the app (ITSwitch.h/m
) are ITSwitch, by Ilija Tovilo.
The code injection system is forked from [Norio Nomura](Norio Nomura)'s EasySIMBL.
The ZipZap library by Glen Low is used internally.
Licensed under the GPL.
Helping out You can help out by writing a plugin you want, taking a look at the Github issues, or sharing the app with friends on Twitter or Facebook.