Keybow custom layout troubles

Hello, I hope everyone is good.

I’m having some issues trying to set up a custom layout on my Keybow. Everything is all set up ok, and I can use the example layouts (for example default.lua or lightroom.lua) by uncommenting them in keys.lua.

However, I’ve tried setting up my own custom layout for use with some Adobe programs but I can’t seem to get it to work. I think I have set it up correctly, below is my custom layout:

require "keybow"

function handle_key_00(pressed) -- Zoom out
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("-", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
    end
end

function handle_key_01(pressed) -- Reset view
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("0", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
    end
end

function handle_key_02(pressed) -- Zoom in
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("=", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
    end
end

function handle_key_03(pressed) -- Send behind
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("[", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
    end
end

function handle_key_04(pressed) -- Send to back
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_DOWN)
        keybow.tap_key("[", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_UP)
    end
end

function handle_key_05(pressed) -- Bring forward
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("]", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
    end
end

function handle_key_06(pressed) -- Paste without formatting or paste in place
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_ALT, keybow.KEY_DOWN)
        keybow.tap_key("v", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_ALT, keybow.KEY_UP)
    end
end

function handle_key_07(pressed) -- Send to front
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_DOWN)
        keybow.tap_key("]", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_UP)
    end
end

function handle_key_08(pressed) -- Fit frame to content or text
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_ALT, keybow.KEY_DOWN)
        keybow.tap_key("c", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_ALT, keybow.KEY_UP)
    end
end

function handle_key_09(pressed) -- Group
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("g", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
end

function handle_key_10(pressed) -- Ungroup
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_DOWN)
        keybow.tap_key("g", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_SHIFT, keybow.KEY_UP)
    end
end

function handle_key_11(pressed) -- Release clipping path
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.set_modifier(keybow.LEFT_ALT, keybow.KEY_DOWN)
        keybow.tap_key("7", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
        keybow.set_modifier(keybow.LEFT_ALT, keybow.KEY_UP)
    end
end

As far as I can tell I have followed the guide to set it up, and have chosen my custom layout in keys.lua, by commenting all the others and adding mine like so (my one is called adobe):

require "keybow"
-- require "layouts/default" -- Numberpad

-- Custom layouts (uncomment to enable) --

-- require "layouts/boilerplate" -- Handy bits of boilerplate text like Lorem Ipsum
-- require "layouts/lightroom" -- Handy hotkeys for Adobe Lightroom Classic CC
-- require "layouts/pico8" -- Controls for Pico-8
-- require "layouts/mediakeys" -- Basic media controls (play/pause, volume etc)
-- require "layouts/midi_keys" -- Experimental MIDI layout
-- require "layouts/blink" -- Numberpad with light feedback
-- require "layouts/mini" -- Keybow MINI example layout
-- require "layouts/mini_volume" -- Keybow MINI volume controls
-- require "layouts/mini_playback" -- Keybow MINI media playback controls
require "layouts/adobe" -- Custom hotkeys for using Adobe programs

Can anyone see what I am doing wrong, as I am stumped? I used the built-in Lightroom layout to aid creating mine and I thought it was fine but apparently not.

Could it be at handle_key_09? There’s only one end defined.

function handle_key_09(pressed) -- Group
    if pressed then
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_DOWN)
        keybow.tap_key("g", pressed)
        keybow.set_modifier(keybow.LEFT_META, keybow.KEY_UP)
end

Oh, now I feel silly! That was exactly it, shows I should pay closer attention! Thank you so much for helping with my (in hindsight) very simple request. I couldn’t see the wood for keys (sorry for the bad pun haha)!

Hello! I also have a layout problem. I am using a Slovenian keyboard layout and I have trouble setting up a keybow.lua file in a way to produce satisfactory result. It is not just a simple case of switching some letters in 3rd and 4th line as suggested, since different alphabets have different number of letters (Slovenian keyboard additionally uses letters “čćžšđ”), while some symbols are not available only through shifting. Namely, the “@” symbol on Slovenian keyboard is obtained through AltGr+V combination. Also, a symbol " is also used, which seems to break the code if I try to use it, as it closes the argument in line 4.

I tried matching UK symbol order with Slovenian, but just a simple task of writing out an email address proves impossible. Please, provide a useful way to customize the keyboard layout, otherwise the Keybow is not usable by anybody that doesn’t have UK keyboard layout.

So far I have bought several Pimoroni / Raspberry Pi kits and all have proven useful and fun, however without this patch the Keybow remains just a novelty number keypad.

Please, help!
teo

I believe different languages have been worked on recently, does the fix pushed here help at all? https://github.com/pimoroni/keybow-firmware/pull/63

It should but I am apparently doing something wrong.

I created a slovenian.lua file with keyboard mappings and changed the “require” line in keybow.lua. However after rebooting the Keybow no keystrokes are produced. I reverted back to “keyboards/english” and Keybow started working again (producing keystrokes). I cannot see where is the error.

Could you please help? Does the language need to be register somewhere else as well?

slovenian = {}

KEYCODES = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘z’, ‘y’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’, ‘\n’, ‘•’, ‘\x08’, ‘\t’, ’ ‘, ‘’’, ‘+’, ‘š’, ‘đ’, ‘<’, ‘ž’, ‘č’, “ć”, ‘`’, ‘,’, ‘.’, ‘-’}
SHIFTED_KEYCODES = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Y’, ‘!’, ‘"’, ‘#’, ‘$’, ‘%’, ‘&’, ‘/’, ‘(’, ‘)’, ‘=’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘?’, ‘*’, ‘Š’, ‘Đ’, ‘>’, ‘Ž’, ‘Č’, ‘Ć’, ‘~’, ‘;’, ‘:’, ‘_’}
ALTGRD_KEYCODES = {’•’, ‘•’, ‘•’, ‘•’, ‘€’, ‘[’, ‘]’, ‘•’, ‘•’, ‘•’, ‘ł’, ‘Ł’, ‘•’, ‘}’, ‘•’, ‘•’, ‘’, ‘•’, ‘•’, ‘•’, ‘•’, ‘@’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’}
SHIFTALTGRD_KEYCODES = {‘Á’, ‘•’, ‘•’, ‘•’, ‘É’, ‘•’, ‘•’, ‘•’, ‘Í’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘Ó’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘Ú’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’, ‘•’}