Keyboard Maestro

More fun, and a gamepad, with Karabiner-Elements

After the initial success of using Karabiner-Elements with a keyboard I had laying around, I decided to move a step further by adding a gamepad to the mix and programming it with hotkeys. And it worked with great success.

The gamepad of choice, or rather, the gamepad on sale, is the BlueFinger Gaming Keyboard, which is in essence the left side of a regular keyboard.

Now, it's no Logitech or Razer, but I'm not going to use it that way. It's standard plastic all round, but it's got a decent size, feels sturdy enough and shows up as a generic keyboard. It was also $30, so many boxes checked there.

Next, with the help of a very cool website-Karabiner Complex Modification, I was able to create a list of my own custom rules, which are loaded under the Complex Rules tab.

Instead of pressing CAPS LOCK and then another key, I wanted one-click action. So, if I press A, I get Control-Option-Command-Shift-A.

Using the site, you can create a file that looks similar to the following, which shows the use of the modifier keys:

{
  "title": "Keyboard Maestro Demo",
  "rules": [
    {
      "description": "Keyboard Maestro A",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "a"
          },
          "to_if_alone": [
            {
              "repeat": true,
              "modifiers": [
                "left_gui",
                "left_control",
                "left_alt",
                "left_shift"
              ]
            }
          ]
        }
      ]
    }
  ]
}

The file can then be "installed" from the web based version of loaded in:

~/.config/karabiner/assets/complex_modifications

I have this set up for 15 keys on the gamepad. Using the site tool, you can set up key combinations that work for you. You could also set up Alt-A to mean a completely different key combination that Ctrl-A, when used on that keyboard.

There is more experimentation to come, but at each stage there has been success. It's possible to use a full-sized keyboard if you have space, or get a gamepad and program it with your hotkeys.

Karabiner Complex Modification

Other articles of interest:

Setting up a secondary keyboard for macros

After setting up several keyboard shortcuts within Alfred and Keyboard Maestro, it became clear that I was putting together some bizarre key combinations and odd hand gestures to make sure I wasn’t interfering with other applications. Then it occurred to me, don’t video and audio editors have dedicated keyboards for shortcuts? Can the same thing be done for keyboard macros?

The answer is, yes it can. And rather easily too, using a standard keyboard and Karabiner Elements.

You don’t have to buy a specialty keyboard or programmable keypad or anything else. You can use any USB keyboard you have lying around. I have dozens from all the Windows machines I’ve ordered throughout the years.

This also works for a Bluetooth keyboard, so it doesn’t have to be wired.

The easiest way to configure this is install Karabiner Elements and go to the devices tab. Turn off all the other keyboard except the secondary one you plan to use for macros.

Then select the Complex Modifications tab, and enable the option for Caps Lock key to act like “command+control+option+shift”.

And that’s it. If you click into Keyboard Maestro and for the Hotkey Trigger, hold Caps Lock and click another key, it will be seen as Command Control Option Shift + Letter.

Because we disabled the other keyboard in Karabiner, this only works for the secondary keyboard. Pressing Caps Lock and another key on your main keyboard behaves the way you could expect. It toggles the uppercase of the letter.

This works for the standard letter keys, numbers, the number pad and the Home, End, PgUp, PgDn, etc.

You should now have 50-80 macros keys to program depending on keyboard.

karabiner-elements-deviceskarabiner-elements-caps-lockkeyboard-maestro-test

Other articles of interest:

Three months of working remotely

I've crossed over the three month mark of working from home. And despite circumstances, I'm thoroughly enjoying it.

By not being stuck in traffic I have so much more time available. I've been able to exercise with more frequency and still have plenty of time in the evening to play games, watch a movie, or work on side projects like Affinity, Inkle, or doing fun research with DevonAgent.

Not to mention, I've saved a ton of money by not eating out and not buying gas. No sympathy for the oil companies I'm afraid.

I've also been working on getting my organization groove on. I've made dozen of changes and improvements to my notes, folder and database structure within DevonThink. I've even moved a lot of documentation into DevonThink that was lingering in different folders on the drive. Everything in one place, very tidy.

I've created several new Alfred and Keyboard Maestro workflows which have been some nice little timesavers. (Clicking the Save button on a site 150 times using KM, is both fun, and educational)

I've added quite a few new text expansions to TypeIt4Me for both Katalon automation, SQL, and template text for Jira. And I've fixed the mess that was my SnippetsLab library.

Taskpaper is getting quite a workout. I've really put that at the center of my workflow for working on tickets and test cases.

And finally, I've made some nice search and replace modules for TextSoap. I've been doing them by hand, but now I've taken the time to automate that as well.

So all this extra time, as well as uninterrupted time has given me quite a few productivity boosts.

Other articles of interest:

More file management with Keyboard Maestro

The spring cleaning of my drives has begun and with it comes several more helpful commands set up within Keyboard Maestro. While you can buy utilities that perform these same actions, by using Keyboard Maestro you can configure exactly how they work and chain them all together into a very handy set of utilities.

I used my previous applet to move a whole series of files and folders, now I'm using another to clean my drive of all sorts of useless and wasteful files. For example, I don't need readme.txt files of 1k. Or file_id.diz of 1k. Or empty directories. Or .nfo files. Or .url files. Just to name a few.

The may not take up much space, but in reality, they do. They occupy the full block of hard drive space, even if they are only a few bytes in size. Why clutter up the drive? Why clutter up a duplicate manager tool? Why clutter up an index tool like NeoFinder?

It's time to get rid of these and dozens more with some easy shell help and a quick UI from Keyboard Maestro.

In my case, the UI has a button to List, Count or Remove the items in question. It then has a dropdown for the drive I want to work with. The results are a text window where I can confirm what's to be removed. If I like what I see, I can run the command again to delete them.

The command in question looks something like this:

filename="Sample*"
find * -iname "$filename" -type d
find * -iname "$filename" -type d | wc -l
#find * -iname "$filename" -type d -exec rm -rf {} +

I also set up a small util to show me the largest files. Again, it has a simple UI to pick the file size I'm interested in, such as 1GB, 5GB, 10GB. In this case, show me all the files larger than 5GB, since those might need to be dealt with. The executed shell command is:

find * -type f -size +"$KMVAR_instance_size"

As I find more and more files I don't need, I add them to my growing list. I can either execute them as shell command within Keyboard Maestro, or create an .sh shell script that processes them as a batch.

Using Keyboard Maestro allows me to make a helpful UI that fills in the parameters of the shell command and lets me get the work done without worrying about the syntax.

Now that I have my command set up, I can use it over and over again, across multiple drives and delete hundreds, if not thousands of files, and clean up a slew of files with a single click.

Other articles of interest:

Making applications with Keyboard Maestro

The more I work with Keyboard Maestro, the more impressed I am with it’s power, and how the name doesn’t do it justice.

Yes, it certainly sets up keyboard shortcuts and hotkeys, but you can develop applications using the tools it has to offer. To my point, I recently put together an small app that helped to move and organize 1TB worth of data on my drive. I had literally downloaded so much that I was on the verge of running out of space. I had YouTube videos, tutorials, PDF files, documents, spreadsheets, shell scripts, Groovy files, audio files, and pretty much anything and everything you can snag from the Internet these days.

Taking a few cues from Hazel, I created an “app” within Keyboard Maestro that performs many of the same features. The goal was to move all these from the Downloads folder to one of the several other drives I have connected, and into a folder with a useful name.

Using the “Prompt for User Input” feature, I set up a dialog box that allowed me to select a destination drive. I added an input field to enter the file criteria such as jmeter.mp4, Katalon.doc, .sh, rush.mp3, as well as the destination folder such as Jmeter Tutorials, Jira docs, or Photoshop Interview.

After going through the Keyboard Maestro IF and CASE statements to determine which options were selected on the dialog, these parameters were passed to the “Execute Shell Script” action. This accepted the filename and location, then moved to the files to the appropriate place. Keyboard Maestro would construct the correct move command using variables.

As a bonus, that command is displayed in a Text Window so it can be added to a full shell script file for future use.

Additional features include a check to make sure the destination folder exists. If not, the folder is created.

Since it’s making shell commands, there is an option to execute a full .sh file using all of the previously created move statements.

I was able to pass Keyboard Maestro variables into the shell script, and return shell script variables back to Keyboard Maestro.

By the time I was done, I had a full fledged app, with UI, that allowed me to move files I already knew where there, as well as move new types of files. It also logged the output so I could use the commands next time.

It took the better part of a weekend to move everything. But again, it was 1TB of data. The next run will take a fraction of the time because the full script will run with minimal input from me. It is now scheduled to run on the weekends, so the file processing will be done in the background on a regular basis.

The programming itself was relatively easy. I had to look up how to pass variables around, but the Keyboard Maestro documentation is very extensive. Now that I have it working, there are many more opportunities to combine the built-in features of Keyboard Maestro with the power of shell scripting. Not to mention calling out to run Groovy or Java code, AppleScript code, or Javascript.

I have turned several shell commands into small apps that can be called at will to clean up my drive and manage folders.

keyboard-maestro-app

Other articles of interest:

Recent Comments

  • Integrating DevonAgent Pro with Alfred (1)
    • J. Garr: Beautiful, sweet, and simple. I love it; thanks for posting this solution.
  • Round and Round with the For..Next in Katalon Studio (1)
    • Sweet Ophaline Labador: Hello can you help me how to loop this scenario. Checking the elements is just the same. I want to check that the following function is available in www.siacargo.com: Track Shipment – clicking on this can...
  • How To Disable the Quicken Registration Prompt (30)
    • David: A BIG Thank you! I regularly reinstall Windows OS’s using different hardware configs. In short, Quicken 2011 (it’s March of 2020 as I write this) has been a program I’ve been very happy with and continue to use....
    • Karen L: Today I rang Reckon Australia again, got a different guy and he talked me through the process of getting me a new product key to enter since I already had the licence and it had been extended. Reckon have only extended it by 1...
    • Karen L: I have Australian Quicken 2008 on Windows 8.1. It keeps asking me to renew my licence which Reckon did for me however the activation won’t work. I tried this to disable the registration prompt however it did not stop the...
  • Parsing Strings in Katalon – Split, Substring and Readlines (6)
    • Don Pedro: String tempText=”Date Month January. Revenue $1,355,721.00″ println(tempText.split(“ \$”)[1]) You need to escape the $ with \$ The [1] on the split captures characters on the right of the split [0]...
    • Prasad: Hi, I need to get the substring from the below string ‘Date Month January. Revenue $1,355,721.00’ I want to extract text after $ value. Please help Thank you
  • Working with Dates and Date Formatting in Katalon Studio (15)
    • Sangeethaa: How to get previous day’s date(Yesterday’s date)? Actually I was using today.previous() before,it was working fine till today morning.Now its not retrieving right date. Can anyone please guide me on this.
    • Don Pedro: That could be a little tricky. First, is the text/format always going to be the same? You will need to do some parsing. Separate the first but of text at 2019. After that, split the text again to get rid of Central Standard...
    • Don Pedro: It should be of the same Date type as today. You could then do some calendar trickery with Calendar /*Calendar c = Calendar.getInstance(); //c.set(Calendar.MONTH, 1) //Set the month, 0=January, 11=December println...
    • josh: I’m testing a page with a string like “Updated November 21, 2019 16:25:32 PM Central Standard Time.” How might I capture the date and time and compare it to current time to verify that the update time was within...
    • zakir hussain: today = new Date() lastWeek = (today – 1.week) can u please help me in understanding what is the return type of lastweek? and I wanted to set nextyear date how can i do it
  • Output status messages and test information by writing to the Log File Viewer in Katalon Studio (6)
    • Saranya: Good One. Could you plz share link to access all your katalon related blogs. ThankQ
    • Rodrigo Calabretta: I’m using the KeywordUtil.markFailed or KeywordUtil.markError and my test stops is being shown as Error and If I use in the @afterTestCase the testCaseContext.getTestCaseSta tus() to show the status test case...
  • Setting up Environment Profiles in Katalon Studio (2)
    • Don Pedro: Not quite sure I understand. The term “Execution Profile” is normally used now, but they are still GlobalVariables and are created in the same way for version 7 as previous. You make a new execution profile, then...