remove up/down distinction in key layers
parent
1b5090f97a
commit
2ed7e87cf1
|
@ -22,34 +22,66 @@ LayoutFile = "#{LayoutDir}/layout.c"
|
||||||
|
|
||||||
puts "generating #{LayoutFile}..."
|
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
|
class Key
|
||||||
attr_reader :layers
|
attr_reader :keydefs
|
||||||
|
|
||||||
Layers = [ :basic, :punc, :nav, :func ]
|
Layers = [ :basic, :punc, :nav, :func, ]
|
||||||
|
|
||||||
Functions = {
|
Functions = {
|
||||||
# down up
|
#
|
||||||
"basic" => [ "&kbfun_normal_press_release", ],
|
"basic" => "&kbfun_normal_press_release",
|
||||||
"media" => [ "&kbfun_mediakey_press_release", ],
|
"media" => "&kbfun_mediakey_press_release",
|
||||||
# down up
|
#
|
||||||
"mod" => [ "&kbfun_modifier_press_release", ],
|
"mod" => "&kbfun_modifier_press_release",
|
||||||
"sticky_mod" => [ "&kbfun_modifier_sticky", ],
|
"sticky_mod" => "&kbfun_modifier_sticky",
|
||||||
# down up
|
#
|
||||||
"layer" => [ "&kbfun_layer_press_release", ],
|
"layer" => "&kbfun_layer_press_release",
|
||||||
"sticky" => [ "&kbfun_layer_sticky", ],
|
"sticky" => "&kbfun_layer_sticky",
|
||||||
# down up
|
#
|
||||||
"shift" => [ "&kbfun_shift_press_release", ],
|
"shift" => "&kbfun_shift_press_release",
|
||||||
"ctrl" => [ "&kbfun_control_press_release", ],
|
"ctrl" => "&kbfun_control_press_release",
|
||||||
"alt" => [ "&kbfun_alt_press_release", ],
|
"alt" => "&kbfun_alt_press_release",
|
||||||
"win" => [ "&kbfun_win_press_release", ],
|
"win" => "&kbfun_win_press_release",
|
||||||
"shift_layer" => [ "&kbfun_shift_layer_press_release", ],
|
"shift_layer" => "&kbfun_shift_layer_press_release",
|
||||||
"ctrl_layer" => [ "&kbfun_control_layer_press_release", ],
|
"ctrl_layer" => "&kbfun_control_layer_press_release",
|
||||||
"alt_layer" => [ "&kbfun_alt_layer_press_release", ],
|
"alt_layer" => "&kbfun_alt_layer_press_release",
|
||||||
"win_layer" => [ "&kbfun_win_layer_press_release", ],
|
"win_layer" => "&kbfun_win_layer_press_release",
|
||||||
# down up
|
#
|
||||||
"capslock" => [ "&kbfun_capslock_press_release", ],
|
"capslock" => "&kbfun_capslock_press_release",
|
||||||
}
|
}
|
||||||
|
|
||||||
Keys = {
|
Keys = {
|
||||||
|
@ -208,11 +240,11 @@ class Key
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize layers
|
def initialize layers
|
||||||
@layers = Array.new(layers.size)
|
@keydefs = Array.new(layers.size)
|
||||||
|
|
||||||
layers.each.with_index do |(key, type), i|
|
layers.each.with_index do |(key, type), i|
|
||||||
if type.nil? and key.nil?
|
if type.nil? and key.nil?
|
||||||
@layers[i] = @layers[i-1]
|
@keydefs[i] = @keydefs[i-1]
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -220,14 +252,13 @@ class Key
|
||||||
keycode, default_type = Keys[key]
|
keycode, default_type = Keys[key]
|
||||||
|
|
||||||
# keyfunc
|
# keyfunc
|
||||||
type ||= default_type || "basic"
|
type ||= default_type || "basic"
|
||||||
up, down = Functions[type]
|
keyfunc = Functions[type]
|
||||||
down ||= up
|
|
||||||
|
|
||||||
raise "overwriting shift key: #{key}, #{type}" if default_type == "shift" and type != default_type
|
raise "overwriting shift key: #{key}, #{type}" if default_type == "shift" and type != default_type
|
||||||
|
|
||||||
raise "key not found: #{key}" if keycode.nil?
|
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
|
case type
|
||||||
when "layer", "sticky"
|
when "layer", "sticky"
|
||||||
|
@ -245,10 +276,10 @@ class Key
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@layers[i] = Layer.new(keycode, down, up)
|
@keydefs[i] = Keydef.new(keycode, keyfunc)
|
||||||
end
|
end
|
||||||
|
|
||||||
raise "transparency error: #{layers}" if @layers.any?(&:nil?)
|
raise "transparency error: #{layers}" if @keydefs.any?(&:nil?)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -260,7 +291,7 @@ class Layout
|
||||||
|
|
||||||
def keys_to_matrix type, method
|
def keys_to_matrix type, method
|
||||||
Key::Layers.map.with_index do |_, layer|
|
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.join("\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -275,15 +306,13 @@ class Layout
|
||||||
HEADER
|
HEADER
|
||||||
|
|
||||||
keys = keys_to_matrix "keycode", :code
|
keys = keys_to_matrix "keycode", :code
|
||||||
downs = keys_to_matrix "keyfunc", :down
|
funcs = keys_to_matrix "keyfunc", :func
|
||||||
ups = keys_to_matrix "keyfunc", :up
|
|
||||||
|
|
||||||
File.open(LayoutFile, "w+") do |f|
|
File.open(LayoutFile, "w+") do |f|
|
||||||
f.puts header
|
f.puts header
|
||||||
f.puts "#define KB_LAYERS #{Key::Layers.size}"
|
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 keycode PROGMEM _kb_layout_code[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_func[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{funcs} };"
|
||||||
f.puts "static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { #{ups} };"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#define KB_LAYERS 4
|
#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_NULL,
|
||||||
(keycode) KEY_0_RightParenthesis,
|
(keycode) KEY_0_RightParenthesis,
|
||||||
(keycode) KEY_1_Exclamation,
|
(keycode) KEY_1_Exclamation,
|
||||||
|
@ -335,7 +335,7 @@ KB_MATRIX_LAYER(
|
||||||
(keycode) 3,
|
(keycode) 3,
|
||||||
(keycode) 1),
|
(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,
|
(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_press_release,
|
||||||
(keyfunc) &kbfun_layer_sticky),
|
(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),
|
|
||||||
};
|
|
||||||
|
|
21
src/main.c
21
src/main.c
|
@ -43,9 +43,10 @@ typedef void (*keyfunc)(keycode, bool);
|
||||||
#include "./keyboard/layout.c"
|
#include "./keyboard/layout.c"
|
||||||
// defines:
|
// defines:
|
||||||
// #define KB_LAYERS #{Layers.size}
|
// #define KB_LAYERS #{Layers.size}
|
||||||
// static const keycode PROGMEM _kb_layout[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_press[KB_LAYERS][KB_ROWS][KB_COLUMNS];
|
// static const keyfunc PROGMEM _kb_layout_func[KB_LAYERS][KB_ROWS][KB_COLUMNS];
|
||||||
// static const keyfunc PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS];
|
|
||||||
|
/* static u8 layers[KB_LAYERS] = {0, 1, 1+2, 3, 4, 2+3+4}; */
|
||||||
|
|
||||||
#if KB_LAYERS > 8
|
#if KB_LAYERS > 8
|
||||||
#error "can only handle 8 layers for now"
|
#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 row=0; row<KB_ROWS; row++) {
|
||||||
for (u8 col=0; col<KB_COLUMNS; col++) {
|
for (u8 col=0; col<KB_COLUMNS; col++) {
|
||||||
if (layers_pressed[row][col] == l) {
|
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
|
// FIXME don't re-send normal keys until we have key repeats
|
||||||
if (is_layer_keyfunc(func)) {
|
if (is_layer_keyfunc(func)) {
|
||||||
// FIXME this kinda shouldn't be here and it privileges layer 0 even more
|
// 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
|
// layout info
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
keycode kb_keycode (layer l, u8 row, u8 col) { return (keycode) pgm_read_byte(&(_kb_layout[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_press (layer l, u8 row, u8 col) { return (keyfunc) pgm_read_word(&(_kb_layout_press[l][row][col])); }
|
keyfunc kb_keyfunc (layer l, u8 row, u8 col) { return (keyfunc) pgm_read_word(&(_kb_layout_func[l][row][col])); }
|
||||||
keyfunc kb_keyfunc_release (layer l, u8 row, u8 col) { return (keyfunc) pgm_read_word(&(_kb_layout_release[l][row][col])); }
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// keyfunc primitives
|
// 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
|
// 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) {
|
void exec_key(layer layer, u8 row, u8 col, bool is_pressed) {
|
||||||
keycode key = kb_keycode(layer, row, col);
|
keycode key = kb_keycode(layer, row, col);
|
||||||
void (*key_function)(keycode, bool) =
|
void (*key_function)(keycode, bool) = kb_keyfunc(layer, row, col);
|
||||||
( (is_pressed)
|
|
||||||
? kb_keyfunc_press(layer, row, col)
|
|
||||||
: kb_keyfunc_release(layer, row, col) );
|
|
||||||
|
|
||||||
if (key_function) { (*key_function)(key, is_pressed); }
|
if (key_function) { (*key_function)(key, is_pressed); }
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,9 @@ bool _kbfun_normal_is_pressed(keycode key);
|
||||||
void _kbfun_modifier_press_release(keycode key,bool is_pressed);
|
void _kbfun_modifier_press_release(keycode key,bool is_pressed);
|
||||||
void _kbfun_mediakey_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);
|
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);
|
keycode kb_keycode(layer l,u8 row,u8 col);
|
||||||
bool is_layer_keyfunc(keyfunc f);
|
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);
|
void layer_enable(layer l);
|
||||||
layer highest_active_layer();
|
layer highest_active_layer();
|
||||||
void layer_disable(layer l);
|
void layer_disable(layer l);
|
||||||
|
|
Loading…
Reference in New Issue