remove up/down distinction in key layers

master
Stefan Dorn 2016-08-21 19:32:32 +01:00
parent 1b5090f97a
commit 2ed7e87cf1
4 changed files with 78 additions and 385 deletions

View File

@ -22,34 +22,66 @@ LayoutFile = "#{LayoutDir}/layout.c"
puts "generating #{LayoutFile}..."
Layer = Struct.new :code, :up, :down
class Layer
@@layers = {}
@@primitives = 0
def initialize name
case name
when Symbol
raise "layer already defined: #{name}" if @@layers.include? name
@@primitives += 1
@@layers[name] = @@primitives
when Array
name.each do |prim|
raise "unknown layers: #{prim}" if not @@layers.include? prim
raise "can only combo primitive layers: #{prim}" if not prim.is_a? Symbol
end
combo = name.reduce(0) do |code, prim|
code | (@@layers[prim])
end
combo_name = name.sort_by{|p| @@layers[p]}.join("_").to_sym
@@layers[combo_name] = combo
else
raise "invalid layer definition: #{name}"
end
end
end
Keydef = Struct.new :code, :func
class Key
attr_reader :layers
attr_reader :keydefs
Layers = [ :basic, :punc, :nav, :func ]
Layers = [ :basic, :punc, :nav, :func, ]
Functions = {
# down up
"basic" => [ "&kbfun_normal_press_release", ],
"media" => [ "&kbfun_mediakey_press_release", ],
# down up
"mod" => [ "&kbfun_modifier_press_release", ],
"sticky_mod" => [ "&kbfun_modifier_sticky", ],
# down up
"layer" => [ "&kbfun_layer_press_release", ],
"sticky" => [ "&kbfun_layer_sticky", ],
# down up
"shift" => [ "&kbfun_shift_press_release", ],
"ctrl" => [ "&kbfun_control_press_release", ],
"alt" => [ "&kbfun_alt_press_release", ],
"win" => [ "&kbfun_win_press_release", ],
"shift_layer" => [ "&kbfun_shift_layer_press_release", ],
"ctrl_layer" => [ "&kbfun_control_layer_press_release", ],
"alt_layer" => [ "&kbfun_alt_layer_press_release", ],
"win_layer" => [ "&kbfun_win_layer_press_release", ],
# down up
"capslock" => [ "&kbfun_capslock_press_release", ],
#
"basic" => "&kbfun_normal_press_release",
"media" => "&kbfun_mediakey_press_release",
#
"mod" => "&kbfun_modifier_press_release",
"sticky_mod" => "&kbfun_modifier_sticky",
#
"layer" => "&kbfun_layer_press_release",
"sticky" => "&kbfun_layer_sticky",
#
"shift" => "&kbfun_shift_press_release",
"ctrl" => "&kbfun_control_press_release",
"alt" => "&kbfun_alt_press_release",
"win" => "&kbfun_win_press_release",
"shift_layer" => "&kbfun_shift_layer_press_release",
"ctrl_layer" => "&kbfun_control_layer_press_release",
"alt_layer" => "&kbfun_alt_layer_press_release",
"win_layer" => "&kbfun_win_layer_press_release",
#
"capslock" => "&kbfun_capslock_press_release",
}
Keys = {
@ -208,11 +240,11 @@ class Key
end
def initialize layers
@layers = Array.new(layers.size)
@keydefs = Array.new(layers.size)
layers.each.with_index do |(key, type), i|
if type.nil? and key.nil?
@layers[i] = @layers[i-1]
@keydefs[i] = @keydefs[i-1]
next
end
@ -220,14 +252,13 @@ class Key
keycode, default_type = Keys[key]
# keyfunc
type ||= default_type || "basic"
up, down = Functions[type]
down ||= up
type ||= default_type || "basic"
keyfunc = Functions[type]
raise "overwriting shift key: #{key}, #{type}" if default_type == "shift" and type != default_type
raise "key not found: #{key}" if keycode.nil?
raise "type not found: #{type}" if up.nil? or down.nil?
raise "func not found: #{type}" if keyfunc.nil?
case type
when "layer", "sticky"
@ -245,10 +276,10 @@ class Key
end
end
@layers[i] = Layer.new(keycode, down, up)
@keydefs[i] = Keydef.new(keycode, keyfunc)
end
raise "transparency error: #{layers}" if @layers.any?(&:nil?)
raise "transparency error: #{layers}" if @keydefs.any?(&:nil?)
end
end
@ -260,7 +291,7 @@ class Layout
def keys_to_matrix type, method
Key::Layers.map.with_index do |_, layer|
"KB_MATRIX_LAYER(\n#{@keys.map{|key| "(#{type}) " + key.layers[layer].send(method)}.join(",\n")}),\n"
"KB_MATRIX_LAYER(\n#{@keys.map{|key| "(#{type}) " + key.keydefs[layer].send(method)}.join(",\n")}),\n"
end.join("\n")
end
@ -275,15 +306,13 @@ class Layout
HEADER
keys = keys_to_matrix "keycode", :code
downs = keys_to_matrix "keyfunc", :down
ups = keys_to_matrix "keyfunc", :up
funcs = keys_to_matrix "keyfunc", :func
File.open(LayoutFile, "w+") do |f|
f.puts header
f.puts "#define KB_LAYERS #{Key::Layers.size}"
f.puts "static const keycode PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{keys} };"
f.puts "static const keyfunc PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{downs} };"
f.puts "static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{ups} };"
f.puts "static const keycode PROGMEM _kb_layout_code[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{keys} };"
f.puts "static const keyfunc PROGMEM _kb_layout_func[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{funcs} };"
end
end
end

View File

@ -3,7 +3,7 @@
// ----------------------------------------------------------------------------
#define KB_LAYERS 4
static const keycode PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER(
static const keycode PROGMEM _kb_layout_code[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER(
(keycode) KEY_NULL,
(keycode) KEY_0_RightParenthesis,
(keycode) KEY_1_Exclamation,
@ -335,7 +335,7 @@ KB_MATRIX_LAYER(
(keycode) 3,
(keycode) 1),
};
static const keyfunc PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER(
static const keyfunc PROGMEM _kb_layout_func[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER(
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
@ -667,335 +667,3 @@ KB_MATRIX_LAYER(
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky),
};
static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { KB_MATRIX_LAYER(
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_control_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky),
KB_MATRIX_LAYER(
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_control_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky),
KB_MATRIX_LAYER(
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_control_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky),
KB_MATRIX_LAYER(
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_mediakey_press_release,
(keyfunc) &kbfun_mediakey_press_release,
(keyfunc) &kbfun_mediakey_press_release,
(keyfunc) &kbfun_mediakey_press_release,
(keyfunc) &kbfun_mediakey_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_shift_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_modifier_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_modifier_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_capslock_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_control_layer_press_release,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky,
(keyfunc) &kbfun_normal_press_release,
(keyfunc) &kbfun_layer_press_release,
(keyfunc) &kbfun_layer_sticky),
};

View File

@ -43,9 +43,10 @@ typedef void (*keyfunc)(keycode, bool);
#include "./keyboard/layout.c"
// defines:
// #define KB_LAYERS #{Layers.size}
// static const keycode PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS];
// static const keyfunc PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS];
// static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS];
// static const keycode PROGMEM _kb_layout_code[KB_LAYERS][KB_ROWS][KB_COLUMNS];
// static const keyfunc PROGMEM _kb_layout_func[KB_LAYERS][KB_ROWS][KB_COLUMNS];
/* static u8 layers[KB_LAYERS] = {0, 1, 1+2, 3, 4, 2+3+4}; */
#if KB_LAYERS > 8
#error "can only handle 8 layers for now"
@ -257,7 +258,7 @@ void layer_disable(layer l) {
for (u8 row=0; row<KB_ROWS; row++) {
for (u8 col=0; col<KB_COLUMNS; col++) {
if (layers_pressed[row][col] == l) {
keyfunc func = (kb_keyfunc_press(l, row, col));
keyfunc func = (kb_keyfunc(l, row, col));
// FIXME don't re-send normal keys until we have key repeats
if (is_layer_keyfunc(func)) {
// FIXME this kinda shouldn't be here and it privileges layer 0 even more
@ -287,9 +288,8 @@ bool is_layer_keyfunc(keyfunc f) {
// layout info
// ----------------------------------------------------------------------------
keycode kb_keycode (layer l, u8 row, u8 col) { return (keycode) pgm_read_byte(&(_kb_layout[l][row][col])); }
keyfunc kb_keyfunc_press (layer l, u8 row, u8 col) { return (keyfunc) pgm_read_word(&(_kb_layout_press[l][row][col])); }
keyfunc kb_keyfunc_release (layer l, u8 row, u8 col) { return (keyfunc) pgm_read_word(&(_kb_layout_release[l][row][col])); }
keycode kb_keycode (layer l, u8 row, u8 col) { return (keycode) pgm_read_byte(&(_kb_layout_code[l][row][col])); }
keyfunc kb_keyfunc (layer l, u8 row, u8 col) { return (keyfunc) pgm_read_word(&(_kb_layout_func[l][row][col])); }
// ----------------------------------------------------------------------------
// keyfunc primitives
@ -365,11 +365,8 @@ void _kbfun_normal_sticky_done() {
// execute the keypress or keyrelease function (if it exists) of the key at the current possition
void exec_key(layer layer, u8 row, u8 col, bool is_pressed) {
keycode key = kb_keycode(layer, row, col);
void (*key_function)(keycode, bool) =
( (is_pressed)
? kb_keyfunc_press(layer, row, col)
: kb_keyfunc_release(layer, row, col) );
keycode key = kb_keycode(layer, row, col);
void (*key_function)(keycode, bool) = kb_keyfunc(layer, row, col);
if (key_function) { (*key_function)(key, is_pressed); }
}

View File

@ -17,10 +17,9 @@ bool _kbfun_normal_is_pressed(keycode key);
void _kbfun_modifier_press_release(keycode key,bool is_pressed);
void _kbfun_mediakey_press_release(keycode key,bool is_pressed);
void _kbfun_normal_press_release(keycode key,bool is_pressed);
keyfunc kb_keyfunc_release(layer l,u8 row,u8 col);
keycode kb_keycode(layer l,u8 row,u8 col);
bool is_layer_keyfunc(keyfunc f);
keyfunc kb_keyfunc_press(layer l,u8 row,u8 col);
keyfunc kb_keyfunc(layer l,u8 row,u8 col);
void layer_enable(layer l);
layer highest_active_layer();
void layer_disable(layer l);