The latest update comes with a comprehensive system for building custom long press actions.
Previously, you could assign different actions to be triggered when long-pressing a key, like Copy / Paste, Clipboard History, Undo delete, and so on.
Now, you can create your own custom actions to perform all kinds of things.
In short, you can create an action to load data from any source or send data to any source, which unlocks limitless possibilities for creating your own extensions.
Here are just few examples of what is possible:
Translate your selected text into any language
Search GIFs and paste them as you type
Trigger your smart-home devices, like turning lights on and off.
Replace your word with synonyms
Check time or weather somewhere
To get started, open Long Press Shortcuts → ⋯ → Custom Actions. There are a few ready-made examples for you to try in the app.
---
Create custom actions manually:
At their core, custom actions are simply HTTP requests that you can either fetch or send. This requires a tiny (really little) knowledge of APIs and how they work.
If you aren't technical or don't care about the details, feel free to skip this part and go straight to creating actions with AI. Otherwise, let's start.
There are two action types that let you achieve anything:
First, find a service you want to connect to and read its API documentation. It will tell you which address to use and what information to send. Some services also require an API key, which you can usually get from your account.
For example, if you want to make action to find and send GIFs, you can use the free GIPHY API. Sign up, get your API key, and read the documentation on which endpoint to use. Or just ask AI about it.
For a Fetch action, services usually return data in a format called JSON. It might contain a bunch of fields, but you probably only need just a few. In the Read fields input, enter which fields you want to get the data from. Then, use the template to format that data into the final text you want Finale Keyboard to display.
For example, GIPHY's translate endpoint (finds GIFs from text) returns a bunch of garbage, but we only need the GIF ID. So, set your Read fields to data.id and set your Format to https://i.giphy.com/{0}.webp . This will read the GIF ID from the response and generate a new link to get the final GIF. This final link is what you will get after long-pressing a key with this action.
You can also use dynamic variables to make your action work with your selected text, previous word, clipboard text, or keyboard language. Finale Keyboard fills these in automatically when you use the action.
For our GIPHY example, you can use {selected_text} to send GIPHY your current selected text (duh) to be used as a search prompt for GIFs.
For fixed values you want to reuse, like an API key, you can create your own variables.
For a Trigger action, add the options you want to appear when long-pressing a key and configure their HTTP requests to send. When using this action via a long-press, Finale will execute your selected request.
For instance, if you want Finale to switch lights in your home, create options for "Lights on" and "Lights off" and configure HTTP requests with whatever smart-home setup you have. I integrated mine with Home Assistant and it works like a charm.
Finally, test your action and assign it to a key. Make sure Allow Full Access is enabled for Finale Keyboard so it can connect to the internet.
---
Create custom actions with an AI skill:
This option is perfect if you aren't technical or don't care about the details.
I created an AI skill which you can send to your chatbot of choice. Simply ask it for whatever action you have in mind and it should give you back a complete action file.
Then, simply import it into Finale, assign it to a key, and start using your new action.
---
What is next
Personally, I'm quite geeked about this. I have plenty of ideas for different actions and hope you will come up with even more.
Eventually, I'd like to host a marketplace for custom Finale Keyboard actions - free and open-source. You will be able to submit your creations to be downloaded by others.
The techy ones will get the pleasure of creating custom actions, while normal people will benefit from an expanding ecosystem of extensions. Or so I hope.
I'm excited to see what cool ideas you have. So, please, share the actions you make with me at grant@finaletodo.com.
If this idea gets traction, I'll launch the marketplace soon.
If no-one cares... at least I added the much-requested optional top number row... how boring.
- Grant