47

I have a standard keyboard. With AutoHotKey, I have mapped F1 to F12 to perform extremely specific tasks which I have muscle-memorized, and in addition to these, I have numerous WinKey+Letter remappings to perform other tasks of a different kind, where the latter reminds me of which does which. The F ones I had to simply memorize slowly.

I find this already to be massively problematic. Oftentimes, F8 or F9 or something does a different function in another program, such as "set fullscreen" or something. But I'd ideally want to add many more "shortcut keys", to perform all kinds of tasks with single buttons.

I basically find myself wishing I had a much large keyboard full of hundreds of extra keys which I could customize with colors and/or labels, but I've never seen such a thing.

I'm not sure a separate "USB button pad" or something would even work, or be physically convenient. I'd ideally like a solution which requires no new hardware, like some kind of smart way of utilizing the existing keyboard...

I've many times thought that I should be able to only remap a single button which opens or closes a special "overlay menu", which takes over the keyboard until a key is pressed, and thus I could use all keys on the keyboard. However, I cannot program such a thing and I am not aware of such a program existing. And it if does, I bet it would be over-engineered and not suitable for me for some reason. It's also very important that things are instant when such a program is used.

What do other superusers or powerusers do?

14
  • 17
    youtube.com/watch?v=Arn8ExQ2Gjg might be a good start for this, it seems to be EXACTLY what you want.
    – Kraigolas
    Jul 20, 2020 at 6:00
  • 5
    You may want to consider something like streamdeck. This is a small keyboard like device with customizable buttons. You could even label the buttons to say what action it performs. There are alternatives to stream deck too, so there is plenty of choice.
    – LPChip
    Jul 20, 2020 at 7:59
  • 2
    In addition to the answers that were already posted, one more thing you might want to consider is to use one of the keys you don't use, such as "scroll lock" and script it up so that scroll lock "eats" the next key, giving you something like a shortcut combination, but without holding the first key. Kind of like "sticky keys".
    – d33tah
    Jul 20, 2020 at 16:08
  • 3
    As an alternative, you can buy a cheapo 2nd keyboard and use LuaMacros to distinguish between the everyday keyboard and the 100% macro keyboard. You can even make stickers and put on the cheap keyboard, to show the multiple macros. Jul 20, 2020 at 16:37
  • 9
    youtu.be/lIFE7h3m40U is just canonical :)
    – eckes
    Jul 20, 2020 at 19:49

14 Answers 14

61

As a huge fan of keyboard and shortcut productivity, I've tried a number of different approaches to extending and customizing keyboard shortcuts. Some have been wildly successful, using them multiple times per minute, and others have fizzled in practice.

Generally, I've found that a secondary device is much less useful than the keyboard and mouse that your hands are already on. Having to move your hand off the keyboard to some other thing makes the shortcut not-so-short and I find I don't end up using it very often.

This answer is an overview of the approaches I've taken, ordered by how successful they have been for me (starting with most successful).

#1: Gaming mouse

Logitech G600 mouse

While it is designed as a gaming mouse specifically for MMOs, the Logitech G600 is easily the best productivity boost I've ever used, and it's cheap at $40.

  • 12 programmable buttons under your thumb
  • 2 programmable buttons under the scroll wheel
  • Scroll wheel tilts horizontally for left/right movement
  • A third "click" button for your ring finger (ie in addition to left- and right-click)

That's a lot of extra button capacity on a device that you already have your hand on. The bundled software is highly customizable — you can configure each key to send a shortcut key, a series of keypresses, launch a particular program or script directly, or even expose the keypress to a special API (outside of Windows' normal keyboard handling) that can be consumed by an external app. You can also configure the buttons to behave differently depending on which app has focus.

#2: Caps lock

With a bit of hacking, it is possible to use Caps Lock as a modifier like Ctrl or ⊞ Win. Since basically nothing uses Caps+… as a key combo, this opens up the entire keyboard for a new set of shortcuts.

I wrote my own utility for this purpose, but regrettably it's not at all in shape to share. It does look like you can get it working as a modifier in AutoHotkey, though.

#3: Mnemonics

U̲se the old-school keyboard navigation mnemonics to your advantage! Press Alt and underlines will appear under a letter in the label of many controls and menus. Press the the underlined letter to activate the control — selecting a menu item, checking a checkbox, or pressing a button. It's easy to memorize useful sequences since the mnemonic letter is generally the first letter or most important letter of a command. For example, Alt+F, O will open the F̲ile menu and select O̲pen, taking you straight to the open dialog.

Tips:

  • You can configure Windows to always show mnemonic underlines (instead of only after pressing Alt). Go to Settings > Ease of Access > Keyboard and enable "Underline access keys when available".
  • Take advantage of the context menu key (the one between right Alt and Ctrl). You can press it and then press the mnemonic for an item in the menu. For example, in Word, you can press , P to open the Paragraph dialog.

Sadly, most web-based and many "modern" apps neglect mnemonics, so whether this is useful in a given app varies.

#4: Gaming keyboard

Logitech G-910 keyboard There are a number of keyboards designed for gamers that have extra programmable keys. eg Logitech's G series, such as the G-910, which has 5 programmable keys on the left side and 4 on top of the regular F keys. Like the buttons on the G600 mouse, there's lots of programming flexibility.

The design of most gaming keyboards is of course... bold, so if you're using one in an office, prepare to talk about it.

#5: Specialized secondary keyboard

There are many devices that you can set next to your keyboard which provide many extra keys. My favorite was the Logitech G13 (above left), but it was sadly discontinued. It could be had new for $50, but now it sells for up to $400 when you can find it.

These devices are sold under a few different names, including gameboard, gaming keypad, macro keyboard, programmable keypad, content creation controller, and stream controller.

Some devices, like the G13, have dedicated keys with special software to enable programmability. Others appear to Windows as regular keyboards that press the same keys as your main keyboard — they just happen to be oddly shaped and don't have the full alphabet. You should prefer the devices with dedicated input.

  • Stream Deck is cool but pricy. Each key has a screen so you can dynamically change the labels.
  • X-keys (above right) is also relatively expensive, but they've been around a long time and have good software. The key caps are customizable: they're clear, so you can print labels to put underneath.
  • The "gaming keypad" and more generic "macro keyboards" are cheaper, but software quality and flexibility varies.

Depending on your use case, these secondary devices can prove to be not worthwhile if you frequently have to move your hand off the main keyboard, press a key, and then move back. For example, as a programmer, I found it to be much more natural and useful to bind extra keys using Caps as a modifier on my main keyboard. However, my video editor partner found the G13 to be extremely useful in that workflow.

#6: iPad/tablet

Lay a tablet (or even an old phone) on your desk next to your keyboard, disable the screen timeout, and use it to show shortcut buttons. There are a number of Android and iPad apps that connect to an app on your computer and allow you to execute various shortcuts/functions. Or, if you're adventurous, you can build your own as a web app and open it in the device's browser.

While this gives you a huge amount of flexibility because the buttons are virtual on a screen, in my experience this actually turned out to be a huge downside. Touchscreens lack the tactile feedback provided by real keyboards and keypads, which is especially important when you want to be able to quickly find shortcut keys by feel alone. It's the same reason touchscreens in cars suck — you need to be able to find your frequently used controls without looking at the input device.

That said, if you already have an extra device around, this option is free-to-very-cheap.


Foot Pedals?

I've wanted to try using foot pedals, but I've never actually given it a shot.

There's obviously a pretty low practical limit to the number of pedals you can use, but it does give you an extra input device that's always within reach.

Bonus: useful software

These are all free keyboard productivity tools I like:

3
  • @CtrlAltF2 there are actually a number of gaming mice for lefties, check this one out
    – geneowak
    Jul 22, 2020 at 20:39
  • @Bobson Most of what I use the mouse buttons for is basic window management of the window under the cursor — close, maximize/restore, minimize, move, new/switch/close tab, refresh, back/forward, and new browser window. I've found it to be universally useful across many different workflows (but of course YMMV).
    – josh3736
    Jul 22, 2020 at 22:54
  • @RichieFrame: I agree Logitech Gaming (shared by G13, G600, and others) is finicky to work with, but once configured it's generally pretty reliable. I ended up using the G-key Macro API in my own custom utility. This way, keys are delivered directly to my app and then it performs actions itself, so I'm not really using much of Logitech's built-in functionality. I've also sniffed the the USB traffic and it looked like standard HID reports, so you could write your own app bypassing the Logitech software entirely if you wanted.
    – josh3736
    Jul 23, 2020 at 2:50
30

You can purchase a macro keyboard (scroll through the list). A macro keyboard like this, combined with AutoHotKey sounds like it would be right up your alley.

14

Back when Wordperfect 5.1 ruled the earth, there were function key templates that aided in muscle memorization. Templates differed but they usually had at least 4 functions marked for each key (plain, control, shift and alt).

function key template

1
  • 3
    I can't see how this post addresses the problem : "I need more buttons" Jul 22, 2020 at 21:13
13

Have you considered using two or three key combo in your hotkey setup?

  • Single Key: F1-F12 mapped to functions 01 to 12 and so on for alphabets and numbers

  • Two Key combo: CapsLock+F1-F12 mapped to functions 13 to 24 and so on, for ScrollLock and NumLock as well

Making two key hotkey combos is straightforward using ^ ! # + (Ctrl, Alt, Win, Shift) and other keys with alphabet and number keys respectively.

  • Three Key combo: CapsLock+Alt+F1-F12 mapped to functions 25 to 36 and so on, for ScrollLock and NumLock as well..

Map additional functions to F1-F12, alphabet, symbol or number keys with CapsLock/AltGr/Right-Alt/Right-Ctrl/Numpad0-9/ScrollLock/NumLock keys for more hotkeys.

Example 1:

; CapsLock + Alt + K to execute function 1

Capslock & k::
GetKeyState, state, Alt
If state = D
    function_01()
Return

Source: How to combine three keys as a hotkey with Autohotkey?

Example 2:

#If GetKeyState("CapsLock", "T") ; if CapsLock is ON

!F1::    ; CapsLock + ALT + F1 
function_01()
Return

..
..

!F12::
function_12()
Return

#If

Source: AdditiveTips

2
  • 2
    And if three key hot keys are not enough, you can do what IDEs do: 4 key (Ctrl + Alt + Shift + key) hotkeys, and Chords (hold ctrl and press key 1 followed by key 2) Jul 20, 2020 at 9:40
  • Assigning macros to extra keys on a gaming mouse has always been my favorite. It's particularly helpful if the mouse supports "multiple profiles", effectively multiplying its potentials. In addition, it also makes your right hand "more useful".
    – iBug
    Jul 22, 2020 at 4:37
5

I've many times thought that I should be able to only remap a single button which opens or closes a special "overlay menu", which takes over the keyboard until a key is pressed, and thus I could use all keys on the keyboard. However, I cannot program such a thing and I am not aware of such a program existing.

It can be done with Autohotkey for sure, I've done this once for Notepad++. And one can implement visual feedback that shows e.g. which "layer" you are in, or a passive UI which will give hints with keys and commands. All can be done with Autohotkey. So basically you can have unlimited possibilities to extend the keyboard with "layers".

And you did not mention what exact problem and in which software you have. In fact, frequently used global OS actions include only switching between the apps, typing text and copy-paste, so I doubt there can be that many global useful shortcuts. Everything else is app-specific.

If you have some software which requires so many shortcuts, and the software does not provide good way to rebind those, I would simply develop app-specific AHK script that extends it as mentioned above. So e.g. you could have some sort of "command" mode which you invoke with one key (like in VIM editor) and use thew whole keyboard. In my experience this can solve most issues.

I basically find myself wishing I had a much large keyboard full of hundreds of extra keys which I could customize with colors and/or labels, but I've never seen such a thing.

For me personally, ergonomics is more of issue than overall amount of keys. I'm using A4Tech X7 G800V keyboard, it has extra 16 programmable keys, but what is important, more extra keys are under my left thumb and pinkie which can be bound to frequently used keys like Enter, Delete, Backspace etc. which otherwise are not reachable with my left paw.

And of course you can buy e.g. some additional USB keypad, but make sure it is programmable, so that the keys can be reassigned via firmware to some extended keycodes (those which are not present on the main keyboard, like e.g. F13-F24 keys), so it can be easily used with Autohotkey.

4

I am a long-time AHK user.

I do not recommend custom "macro keyboards" or anything with non-default buttons. Autohotkey may not pick them up. They don't have to use signals that can be picked up by 3rd party software. I've had a Logitech G15 keyboard and the macro keys are not picked up by AHK; I had to create standard keyboard combinations (Win/Ctrl/Alt/Shift + Letter) for AHK to pick it up.

What you can do is use Hotstrings to fire your macros instead of a key combination.

Their built-in example has ::btw::By The Way. What this does is, every time you type btw and then space, it'll delete your text, and send By The Way as keystrokes.

You can change this to :*:btw::By The Way so that you don't need to use space.

If you have lots of "games" that want to launch shortcuts, you can do something like this:

:*:*g-f::run "Fortnite"
:*:*g-l::run "LoL"
:*:*g-p::run "PUBG"

So when you type *g-f, you'll launch Fortnite, *g-l will launch LoL, etc, etc. You have unlimited amount of shortcuts you can create using short codes for whatever function you want.

Just note that the keystrokes ARE sent, so if you're in a word processor, the text *g-l will show up, and sometimes AHK may not delete all those strokes before executing the code. Adding in slight delay like sleep, 10 at the start would compensate that, or just don't run these macros in a word processor.

I also know how to create a GUI, and it is actually a lot simpler than anything else I've used. If you want to get started, start with the Gui, Add, follow the example, and create your first GUI.

4

My personal approach with this has always been the following:

  1. Use ScrollLock to determine whether hotkeys are to be in use at all. If it's off, then the keyboard is just a normal keyboard, otherwise, it's a "hot" keyboard. I choose ScrollLock because it's mostly otherwise useless, but of course you can choose any other key.
  2. Map the +/- keys of the numpad to increase/decrease a numeric variable in the AHK script. This variable is the number of my hotkey "layer" -- each of the layers has different hotkeys assigned to it.
  3. Use the value of the variable in the hotkey mappings to determine what action to take.

Unlike the other approaches I see mentioned here with Ctrl/Alt/Win/whatever, this one gives you pretty much infinite keys (unless the variable overflows, which I'm not sure if that can even happen in AHK or not).

3

One more option that isn't in any of the other answers (that I saw): QMK. QMK is an open source firmware for some compatible keyboards that allows the programming of every key, and a lot more powerful features such as layers. A QMK keyboard can have a key programmed to act like a modifier for accessing another layer. This new layer can have key combinations (and more: https://beta.docs.qmk.fm/using-qmk/software-features). This is what makes using 40% keyboards like the Plank EZ possible, but can also add features to a full-size 104 key keyboard.

Most keyboards don't use QMK (it's pretty much only a feature on mechanical keyboards), but there's an adapter (https://www.1upkeyboards.com/shop/controllers/usb-to-usb-converter/) that can be used to convert any normal keyboard.

2

Visual Studio uses sequences of hotkeys for various things. For example, Ctrl+\ does nothing on its own but opens a number of different windows based on what is pressed afterwards. Press Ctrl+\, release, and then press T to open the "Tasks" window or E to open the error list. It lets you multiplex a single hotkey to perform a lot of different functions. To implement this sort of thing, you'd want the initial hotkey/combo to trigger a function that reads the next character from the keyboard and then performs the appropriate action. If you read that character without a timeout (like Input, OutputVar, L1), then you effectively have the "keyboard overlay" functionality that you mention.

Personally, I gave up on hotkeys a while back and started using SlickRun. Press a key combo and you get a little floating command line that you can configure to do whatever you want based on what you type. I can type "mail" to open my email client, type "? query" to open a web browser to my search engine of choice and search for "query", or type "term" to launch PuTTY and initiate a serial port connection to a piece of machinery. I find the keywords/commands a lot easier to remember than arcane hotkey combos and take only marginally longer to type. Also, it's all hidden behind a single hotkey so there's almost never a conflict with other programs. I can even set up a command to run a script, which allows me to do fancy things like interact with programs that are currently minimized.

2

Don't forget about hotstrings!

At a previous job, I helped our customer support team by creating templates in AutoHotKey that would replace various strings with a template email, which was much faster than the standard template functionality in Outlook, and faster than copy and pasting the templates from a text file, which was our process at the time.

A sample from the linked documentation is just this:

::btw::
MsgBox You typed "btw".
return

But I would usually prepend the string with something else, like grave (`):

:*:``newpass::
    paste(generateRandomString())
    return

You can use these basically like command chords in some applications, and they're usually less taxing to remember because it can be a word.

The other thing to remember is that hotkeys can have filters on them, such that they only trigger for certain applications.

1

It is not clear, how many programs and specific operations you wish to speed up, however, the more there are, the less you will be using each of the particular shortcuts and the harder it will be to remember them.

I would recommend using the standard Windows keyboard shortcuts for apps, instead of trying to create and memorize your own. Microsoft wrote the shortcut guidelines and very large proportion of Windows programs honour those.

CTRL+F4 will almost always close the current document/window without exiting the program, CTRL+Tab well almost always cycle through current app's windows. ALT+F4 will definitely exit the current app. CTRL+C will copy to clipboard. etc.

In addition, most of Windows programs use the ALT menu access for mnemonic shortcuts, which is my preferred way of working with keyboard.

hit and release ALT and you are in menu mode. hit F ( for file) and then X (for exit) and you will exit the app, too. ALT,I,S should insert signature in Outlook. Best thing is if you're not sure, the shortcut keys will be underlined so you can have a look.

I would reserve AHK macros for only some longer sequences of keys that you have to use very often.

0

I've many times thought that I should be able to only remap a single button which opens or closes a special "overlay menu", which takes over the keyboard until a key is pressed, and thus I could use all keys on the keyboard.

You can do this directly in AutoHotkey. First define a global mode variable:

set_mode(new_mode) {
    global g_mode
    if (g_mode = new_mode) {
        g_mode := ""
    }
    else {
        g_mode := new_mode
    }
    
    if (g_mode = "") {
        TrayTip,, Normal Mode, 20, 17       
    } else {
        TrayTip,, Mode: %g_mode%, 20, 17
    }
    SetTimer, RemoveTrayTip, -1200

    return
    
}

NumpadDel::set_mode("subscripts")

Then use an #If context to scope hotkeys to only that mode:

#If (g_mode = "subscripts")
    0:: Send, ₀
    1:: Send, ₁
; etc
#If

This will preserve the mode even after the hotkey ends, so you can do several shortcuts in a row. If you want to have a mode for only one hotkey at a time, use Input to capture one additional keystroke and dispatch off that:

^h:
Input, UserInput, L1 C T1,,abcde
if (UserInput == "a") {
 ; ...
} else if (UserInput = "b") {
 ; ...
}
return
-1

I remember reading about a certain Windows setting that turns the right hand Alt key into an Alt-Gr key, normally used for entering characters that are outside the normal character set for that keyboard.

-1

Easy, map SHIFT + F1 through F12. Many systems use this, and call SHIFT + F1 as simply F13, SHIFT + F2 as F14, etc.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .