From b608f2cc28a579f2b553b3584920e46ac2e43427 Mon Sep 17 00:00:00 2001 From: Harald Albrecht Date: Sun, 6 Jan 2019 22:19:33 +0100 Subject: [PATCH] wip adds automatic unshifting to kdenlive layout --- sdcard/layouts/kdenlive.lua | 7 +++++++ sdcard/snippets/routehandlers.lua | 19 ++++++++++++++----- spec/layouts/kdenlive_spec.lua | 10 ++++++++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/sdcard/layouts/kdenlive.lua b/sdcard/layouts/kdenlive.lua index 140d531..bca9aea 100644 --- a/sdcard/layouts/kdenlive.lua +++ b/sdcard/layouts/kdenlive.lua @@ -28,6 +28,12 @@ local k = _G.kdenlive or {} -- module local mb = require "snippets/multibow" +-- Unshift to primary keymap. For simplification, use it with the "anykey" +-- release handlers, see below. +function k.unshift() + mb.activate_keymap(k.keymap.name) +end + -- Key colors for unshifted and shifted keys; keep them rather muted in order -- to not distract your video editing work. k.UNSHIFTED_COLOR = {r=0, g=1, b=0} @@ -40,6 +46,7 @@ k.keymap = { k.keymap_shifted = { name="kdenlive-shifted", secondary=true, + [-1] = {release=k.unshift}, [6] = {c=k.SHIFTED_COLOR}, [3] = {c=k.SHIFTED_COLOR}, } diff --git a/sdcard/snippets/routehandlers.lua b/sdcard/snippets/routehandlers.lua index 8e593bf..4480c4d 100644 --- a/sdcard/snippets/routehandlers.lua +++ b/sdcard/snippets/routehandlers.lua @@ -24,7 +24,7 @@ SOFTWARE. -- their correct handlers, depending on which keyboard layout currently -- is active. function mb.route(keyno, pressed) - local keydef, grabbed_any_keydef + local keydef, grabbed_any_keydef, anykdeydef -- Checks for a keymap grab being enforced at this time... if mb.grab_keymap then keydef = mb.grab_keymap[keyno] @@ -40,13 +40,16 @@ function mb.route(keyno, pressed) end end -- Checks for key in current keymap if no persistent key was found yet. - if not keydef and mb.current_keymap then - keydef = mb.current_keymap[keyno] + if not keydef then + if mb.current_keymap then + keydef = mb.current_keymap[keyno] + anykeydef = mb.current_keymap[-1] + end end end -- Bails out if no key definition to route to could be found. - if not (keydef or grabbed_any_keydef) then + if not (keydef or anykeydef or grabbed_any_keydef) then return end @@ -64,6 +67,9 @@ function mb.route(keyno, pressed) if keydef and keydef.press then keydef.press(keyno) end + if anykeydef and anykeydef.press then + anykeydef.press(keyno) + end else if grabbed_any_keydef and grabbed_any_keydef.release then grabbed_any_keydef.release(keyno) @@ -71,7 +77,10 @@ function mb.route(keyno, pressed) if keydef and keydef.release then keydef.release(keyno) end - mb.activate_leds() + if anykeydef and anykeydef.release then + anykeydef.release(keyno) + end + mb.activate_leds() end end diff --git a/spec/layouts/kdenlive_spec.lua b/spec/layouts/kdenlive_spec.lua index 32bd12a..5a67dfc 100644 --- a/spec/layouts/kdenlive_spec.lua +++ b/spec/layouts/kdenlive_spec.lua @@ -37,17 +37,23 @@ describe("Kdenlive keymap", function() describe("with setup", function() - local hwk, mb, k + local mb, shift, k before_each(function() mb = require("snippets/multibow") - require("layouts/shift") + shift = require("layouts/shift") k = require("layouts/kdenlive") _G.setup() end) inslit("", function() assert.is.equal(k.keymap.name, mb.current_keymap.name) + hwk.tap(shift.KEY_SHIFT) + assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name) + hwk.tap(0) -- FIXME + assert.is.equal(k.keymap.name, mb.current_keymap.name) + hwk.tap(shift.KEY_SHIFT) + assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name) end) end)