fixes shift/unshift bug
This commit is contained in:
parent
b608f2cc28
commit
0810e11a40
|
@ -30,8 +30,12 @@ local mb = require "snippets/multibow"
|
||||||
|
|
||||||
-- Unshift to primary keymap. For simplification, use it with the "anykey"
|
-- Unshift to primary keymap. For simplification, use it with the "anykey"
|
||||||
-- release handlers, see below.
|
-- release handlers, see below.
|
||||||
function k.unshift()
|
function k.unshift(keyno)
|
||||||
mb.activate_keymap(k.keymap.name)
|
if keyno == 11 then
|
||||||
|
print(debug.traceback())
|
||||||
|
else
|
||||||
|
mb.activate_keymap(k.keymap.name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Key colors for unshifted and shifted keys; keep them rather muted in order
|
-- Key colors for unshifted and shifted keys; keep them rather muted in order
|
||||||
|
|
|
@ -20,17 +20,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
]] --
|
]] --
|
||||||
|
|
||||||
-- This all-key, central key router forwards Keybow key events to
|
-- This all-key, central key router forwards Keybow key events to their
|
||||||
-- their correct handlers, depending on which keyboard layout currently
|
-- correct handlers, depending on which keyboard layout currently is active.
|
||||||
-- is active.
|
--
|
||||||
|
-- A keymap grab will always only route keys to the "grabbing" keymap, and to
|
||||||
|
-- no other keymap. Without a keymap grab in place, permanent keymaps will be
|
||||||
|
-- searched first for a matching key definition, with the first hit to score.
|
||||||
|
-- The current keymap will be considered only last, after all permanent
|
||||||
|
-- keymaps have been exhausted.
|
||||||
|
--
|
||||||
|
-- Additionally, "any" keyhandlers will be considered only for (1) the
|
||||||
|
-- grabbing keymap (if a grab is active) and for (2) the current keymap.
|
||||||
|
-- Permanent keymaps cannot have "any" key handlers (or rather, they will be
|
||||||
|
-- ignored.)
|
||||||
function mb.route(keyno, pressed)
|
function mb.route(keyno, pressed)
|
||||||
local keydef, grabbed_any_keydef, anykdeydef
|
local keydef, any_kdeydef
|
||||||
-- Checks for a keymap grab being enforced at this time...
|
-- Checks for a keymap grab being enforced at this time; if the grabbing
|
||||||
|
-- keymap does not define the key, then it's game over. Additionally,
|
||||||
|
-- grabbing keymaps may define "any" handlers.
|
||||||
if mb.grab_keymap then
|
if mb.grab_keymap then
|
||||||
keydef = mb.grab_keymap[keyno]
|
keydef = mb.grab_keymap[keyno]
|
||||||
grabbed_any_keydef = mb.grab_keymap[-1]
|
any_kdeydef = mb.grab_keymap[-1]
|
||||||
else
|
else
|
||||||
-- Checks for key in permanent keymaps first...
|
-- No grab in place, so continue checking for a matching key in the
|
||||||
|
-- permanent keymaps first. Remember, there cannot be "any" handlers
|
||||||
|
-- with permanent keymaps.
|
||||||
for name, keymap in pairs(mb.keymaps) do
|
for name, keymap in pairs(mb.keymaps) do
|
||||||
if keymap.permanent then
|
if keymap.permanent then
|
||||||
keydef = keymap[keyno]
|
keydef = keymap[keyno]
|
||||||
|
@ -39,17 +53,18 @@ function mb.route(keyno, pressed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Checks for key in current keymap if no persistent key was found yet.
|
-- If no permanent key matched then finally check for our key in the
|
||||||
if not keydef then
|
-- current keymap. Additionally, the current keymap is allowed to
|
||||||
if mb.current_keymap then
|
-- define an "any" handler.
|
||||||
keydef = mb.current_keymap[keyno]
|
if not keydef and mb.current_keymap then
|
||||||
anykeydef = mb.current_keymap[-1]
|
keydef = mb.current_keymap[keyno]
|
||||||
end
|
any_kdeydef = mb.current_keymap[-1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Bails out if no key definition to route to could be found.
|
-- Bails out now if either a specific nor an "any" key definition to route
|
||||||
if not (keydef or anykeydef or grabbed_any_keydef) then
|
-- to could be found.
|
||||||
|
if not (keydef or any_kdeydef) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -61,25 +76,13 @@ function mb.route(keyno, pressed)
|
||||||
mb.led(led, {r = 0, g = 0, b = 0})
|
mb.led(led, {r = 0, g = 0, b = 0})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if grabbed_any_keydef and grabbed_any_keydef.press then
|
|
||||||
grabbed_any_keydef.press(keyno)
|
if keydef and keydef.press then keydef.press(keyno) end
|
||||||
end
|
if any_kdeydef and any_kdeydef.press then any_kdeydef.press(keyno) end
|
||||||
if keydef and keydef.press then
|
|
||||||
keydef.press(keyno)
|
|
||||||
end
|
|
||||||
if anykeydef and anykeydef.press then
|
|
||||||
anykeydef.press(keyno)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
if grabbed_any_keydef and grabbed_any_keydef.release then
|
if keydef and keydef.release then keydef.release(keyno) end
|
||||||
grabbed_any_keydef.release(keyno)
|
if any_kdeydef and any_kdeydef.release then any_kdeydef.release(keyno) end
|
||||||
end
|
|
||||||
if keydef and keydef.release then
|
|
||||||
keydef.release(keyno)
|
|
||||||
end
|
|
||||||
if anykeydef and anykeydef.release then
|
|
||||||
anykeydef.release(keyno)
|
|
||||||
end
|
|
||||||
mb.activate_leds()
|
mb.activate_leds()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,14 +46,24 @@ describe("Kdenlive keymap", function()
|
||||||
_G.setup()
|
_G.setup()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
inslit("", function()
|
inslit("automatically un-shifts after key press", function()
|
||||||
assert.is.equal(k.keymap.name, mb.current_keymap.name)
|
local some_key = shift.KEY_SHIFT ~= 0 and 0 or 1
|
||||||
hwk.tap(shift.KEY_SHIFT)
|
|
||||||
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
|
for round = 1, 2 do
|
||||||
hwk.tap(0) -- FIXME
|
for round = 1, 2 do
|
||||||
assert.is.equal(k.keymap.name, mb.current_keymap.name)
|
assert.is.equal(k.keymap.name, mb.current_keymap.name)
|
||||||
hwk.tap(shift.KEY_SHIFT)
|
hwk.tap(shift.KEY_SHIFT)
|
||||||
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
|
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
|
||||||
|
hwk.tap(some_key)
|
||||||
|
assert.is.equal(k.keymap.name, mb.current_keymap.name)
|
||||||
|
end
|
||||||
|
for round = 1, 2 do
|
||||||
|
hwk.tap(shift.KEY_SHIFT)
|
||||||
|
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
|
||||||
|
hwk.tap(shift.KEY_SHIFT)
|
||||||
|
assert.is.equal(k.keymap.name, mb.current_keymap.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Reference in New Issue