In working with Alfred, I've created a workflow that loads files from a Volume (DMG) file. In order for this to work correctly, I need the script to wait until the volume is actually loaded and visible in Finder before continuing.
This can be done a few different ways, but here is the AppleScript code I'm using which works with Alfred or Keyboard Maestro. It's based on several examples I found.
The first script gets the name of the mounted volumes and keeps looping until the expected volume shows up in the list.
The second script is the opposite. It keeps looping and trying to eject the disk until the name isn't in the list of mounted volumes.
Wait for Volume to be Mounted
set mountedDisk1 to list disks set thevolume1 to "Insert Volume Name Here" set wasmounted to false set counter to 0 set max_number_of_iteration to 30 --activate --use activate to bring dialog to front if mountedDisk1 contains thevolume1 then set wasmounted to true end if if wasmounted is false then delay 1 tell application "Finder" if (not (exists (disk thevolume1))) then repeat until (mountedDisk1 contains thevolume1 or counter is greater than max_number_of_iteration) set mountedDisk1 to list disks if mountedDisk1 contains thevolume1 then --successful end if delay 1 set counter to counter + 1 end repeat end if end tell end if
Wait for Volume to be Unmounted/Ejected
set mountedDisk1 to list disks set thevolume1 to "Insert Volume Name Here" set wasmounted to false set counter to 0 set max_number_of_iteration to 30 --activate --use activate to bring dialog to front if mountedDisk1 contains thevolume1 then set wasmounted to true end if if wasmounted is true then delay 1 tell application "Finder" eject disk thevolume1 if ((exists (disk thevolume1))) then repeat until (mountedDisk1 does not contain thevolume1 or counter is greater than max_number_of_iteration) set mountedDisk1 to list disks if mountedDisk1 contains thevolume1 then eject disk thevolume1 end if delay 1 set counter to counter + 1 end repeat end if end tell end if
Other articles of interest:
- Waiting on elements to appear using While Loops
- Katalon Studio – Manual View – The start of a test script
- Password protecting documents regardless of application
- Waiting for Elements to appear in Katalon Studio
- Getting the Length of a String and the Size of a List
- Adding Feature Flags to Test Cases
- Creating a Data Driven Test Suite in Katalon Studio
- Wait For Alert, Verify Alert Present in Katalon Studio
- It’s all about templates, macros and workflows in 2020
- To markFailedAndStop or Not To markFailedAndStop?
Over this holiday break I have been excitedly playing with Alfred and Keyboard Maestro to the point where I might be wasting time trying to find ways to save time.
In reality, I've created multiple workflows in each application to accomplish some trivial, but still useful tasks.
While looking up some examples for Keyboard Maestro, I followed the demo and set my machine to empty the system trash every Friday night at 10pm. Yes, the system does it, but this is more efficient.
I took that idea and set Keyboard Maestro to empty the trash in DevonThink Office at the same time. Keyboard Maestro can enter keystrokes and press dialog buttons. That's nice!
It even adds the extra option to make sure the system was idle in case I was doing something.
Because I've done it more than once manually, I built a Keyboard Maestro workflow to copy files out of my Dropbox folder to my local system so they could be used by DevonThink.
Again, these are rather trivial tasks, but they are solid learning blocks and they perform useful work. Work that I don't have to worry about.
I took that same idea and applied it to Alfred. I've created several keywords to make consistent work environments. One Alfred workflow for automation starts Katalon, CodeRunner, SnippetsLab, Github Desktop and opens the project in Finder.
It's hardly a chore to start some apps, but it means I don't have to go looking for an app. It's already running. When I need it, it's there, and my flow isn't disrupted.
The same is true for my writing apps. I type a keyword and Scrivener, WordWeb, WordPress, TextSoap and MWeb are all launched. My writing project is loaded and is ready to go. I could even add options to close apps like Messages, Slack and email so my focus doesn't wander.
Again, not difficult, but consistent. And a consistent environment means I can get more done with less distraction.
Another workflow that came up was specifically because I was at home.
While working from home over the holiday break, I needed to share my screen a few times. It's no problem to do so, however, I wanted to shut down multiple apps so notification messages wouldn't pop up. This meant closing Messages, Mail, monitoring tools, Affinity Dashboard, and others.
No one needs to know that a pair of shoes I'm interested in has gone on sale. Nor do they need to see some scammer trying to tell me my iTunes account has been suspended and I need to log in to confirm ownership.
That is a horrible business presentation.
Now, I can use Alfred to close these apps without my need to remember the name of each one. When I'm finished, I restart them all, and restore the state of my machine.
I'm even working on creating shell scripts and triggers that emulate some of the functionality of Hazel. I can move and copy files based on their name or extension. I can have the action triggered by keyword or run on a schedule.
Using these two tools, I'm very quickly creating a set it and forget it mentality.
Just think of what will happen when I actually know what I'm doing!
Other articles of interest:
- Keyboard Maestro makes a last minute appearance on the Party Barge
- Three months of working remotely
- Setting up a secondary keyboard for macros
- My Key Tools for Automation
- Wait for a Volume to Mount or Unmount/Eject in AppleScript
- More file management with Keyboard Maestro
- SummerFest with DevonThink, DevonAgent and Friends
- Productivity Tools for 2020
- Making applications with Keyboard Maestro
- Building a Development Environment