Compare commits

...

9 Commits

7 changed files with 117 additions and 13 deletions

View File

@ -25,6 +25,11 @@ draw_qmkasciigen:
$(MAKE) go
go run ./cmd/qmkasciigen/*.go -qmk-keyboard dztech/dz60rgb_wkl/v2_1 -qmk-keymap-file dztech_dz60rgb_wkl/keymaps_json/haunt98/keymap.json -out dztech_dz60rgb_wkl/asciiart/haunt98.txt
draw_qmkasciigen_demo:
go run ./cmd/qmkasciigen/*.go -print-out -allow-layers 0 -qmk-keyboard matthewdias/minim
go run ./cmd/qmkasciigen/*.go -print-out -allow-layers 0 -qmk-keyboard moondrop/dash75
go run ./cmd/qmkasciigen/*.go -print-out -allow-layers 0 -qmk-keyboard matthewdias/m3n3van
format_draw_caksoylar_keymap_drawer:
bun upgrade
bun install --global prettier

View File

@ -11,12 +11,28 @@ const (
)
// https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
var mapFromTo = []map[string]string{
var mapRawBinding = []map[string]string{
{
// My custom
"CTL_T(KC_ESC)": "ESC CTRL",
"TD(TD_SAFE_BOOT)": "BOOT",
},
}
var mapTransform = []map[string]string{
{
// My custom
"LAYER_QWERTY": "0",
"LAYER_COMMON": "1",
"LAYER_RARELY": "2",
"LAYER_RECOVERY": "3",
},
{
"MO(0)": "L0",
"MO(1)": "L1",
"MO(2)": "L2",
"MO(3)": "L3",
},
{
// Basic
// Prefer OPT > ALT
@ -57,9 +73,17 @@ var mapFromTo = []map[string]string{
"RGB_SAI": "RGBS",
"RGB_VAI": "RGBV",
// Advance
// Mod-Tap
"LCTL_T": "CTRL",
// Space cadet
"SC_LSPO": "( SHIFT",
"SC_RSPC": ") SHIFT",
// Quantum
"EE_CLR": "EECLR",
},
{
// Mod-Tap
"CTL_T": "CTRL",
},
{
// Prefix
@ -68,7 +92,15 @@ var mapFromTo = []map[string]string{
},
}
// Only use this as last resort
var mapTransformTiny = []map[string]string{
{
"BACKSPACE": "BACK",
},
}
type DrawConfig struct {
AllowLayers map[int]struct{}
PrintLayout bool
PrintLayer bool
}
@ -130,6 +162,14 @@ func Draw(
// Each keymap has many layers
layersStr := make([]string, 0, len(keymap.Layers))
for iLayer, layer := range keymap.Layers {
if len(cfg.AllowLayers) > 0 {
// Only check if valid
if _, ok := cfg.AllowLayers[iLayer]; !ok {
// Skip if not in list
continue
}
}
// PreProcess table with space
table := make([][]string, newMaxY+1)
for i := 0; i <= newMaxY; i++ {
@ -146,9 +186,20 @@ func Draw(
keyStr := layer[count]
// Convert keyStr
for _, m := range mapFromTo {
for from, to := range m {
keyStr = strings.ReplaceAll(keyStr, from, to)
isRaw := false
for _, m := range mapRawBinding {
if _, ok := m[keyStr]; ok {
isRaw = true
keyStr = m[keyStr]
break
}
}
if !isRaw {
for _, m := range mapTransform {
for from, to := range m {
keyStr = strings.ReplaceAll(keyStr, from, to)
}
}
}
@ -160,6 +211,21 @@ func Draw(
padding = 1
}
if len(keyStr)+2*padding > key.NewW {
// Make it smaller
for _, m := range mapTransformTiny {
for from, to := range m {
keyStr = strings.ReplaceAll(keyStr, from, to)
}
}
// Re calc padding
padding = (key.NewW-len(keyStr))/2 - 1
if padding <= 0 {
padding = 1
}
}
// Draw strategy
// Draw 4 + in corner
// Draw - on top and bottom
@ -168,13 +234,16 @@ func Draw(
for j := key.NewX; j <= key.NewX+key.NewW; j++ {
if i == key.NewY || i == key.NewY+key.NewH {
if j == key.NewX || j == key.NewX+key.NewW {
// Draw corner
table[i][j] = "+"
} else if table[i][j] != "+" {
// Draw top/bottom
table[i][j] = "-"
}
} else if i == key.NewY+key.NewH/2 {
// Write key in the middle
if j == key.NewX || j == key.NewX+key.NewW {
// Draw left/right
table[i][j] = "|"
} else if len(keyStr) > 0 && j > key.NewX+padding && j < key.NewX+len(keyStr)+padding+1 && j <= key.NewX+key.NewW-padding {
// Only handle ASCII keyStr

View File

@ -10,6 +10,8 @@ import (
"net/http"
"os"
"strings"
"github.com/spf13/cast"
)
const (
@ -27,8 +29,10 @@ var (
flagQMKInfoFile string
flagQMKKeymapFile string
flagOutput string
flagPrintOutput bool
flagPrintLayout bool
flagPrintLayer bool
flagAllowLayers string
)
func init() {
@ -38,8 +42,10 @@ func init() {
flag.StringVar(&flagQMKInfoFile, "qmk-info-file", "", "QMK info json file")
flag.StringVar(&flagQMKKeymapFile, "qmk-keymap-file", "", "QMK keymap json file")
flag.StringVar(&flagOutput, "out", "", "Output file")
flag.BoolVar(&flagPrintOutput, "print-out", false, "Print output")
flag.BoolVar(&flagPrintLayout, "print-layout", false, "Print layout name")
flag.BoolVar(&flagPrintLayer, "print-layer", false, "Print layer name")
flag.StringVar(&flagAllowLayers, "allow-layers", "", "Allow layers to print aka 0 or 0,2,3. Use , to split. Empty mean all")
}
func main() {
@ -50,8 +56,22 @@ func main() {
log.Printf("flagQMKInfoFile: [%s]\n", flagQMKInfoFile)
log.Printf("flagQMKKeymapFile: [%s]\n", flagQMKKeymapFile)
log.Printf("flagOutput: [%s]\n", flagOutput)
log.Printf("flagPrintOutput: [%v]\n", flagPrintOutput)
log.Printf("flagPrintLayout: [%v]\n", flagPrintLayout)
log.Printf("flagPrintLayer: [%v]\n", flagPrintLayer)
log.Printf("flagAllowLayers: [%s]\n", flagAllowLayers)
}
// 0,2,3 -> [0, 2, 3]
allowLayers := make(map[int]struct{})
for _, l := range strings.Split(flagAllowLayers, ",") {
l = strings.TrimSpace(l)
if l == "" {
continue
}
lInt := cast.ToInt(l)
allowLayers[lInt] = struct{}{}
}
qmkInfo, err := wrapGetQMKInfo(flagQMKKeyboard, flagQMKInfoFile, flagDebug)
@ -68,12 +88,13 @@ func main() {
qmkInfo.Layouts,
qmkKeymap,
DrawConfig{
AllowLayers: allowLayers,
PrintLayout: flagPrintLayout,
PrintLayer: flagPrintLayer,
},
)
if flagDebug {
log.Printf("Result:\n%s\n", result)
if flagPrintOutput {
fmt.Println(result)
}
// Optional

View File

@ -5,7 +5,7 @@
+-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-----------+
| ESC CTRL | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---------+-------+
| ( SHIFT | Z | X | C | V | B | N | M | , | . | / | ) SHIFT | MO(1) |
| ( SHIFT | Z | X | C | V | B | N | M | , | . | / | ) SHIFT | L1 |
+-----------+-----+-+-----+-----+-+-------+-------+-------+-------+-------+-------+-----+-+-------+-+-------+---+-------+
| | OPT | CMD | SPACE | CMD | OPT | |
+-----------+-------+-----------+-------------------------------------------------------+-----------+-------+-----------+
@ -29,13 +29,13 @@
+-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-----------+
| CAPS | VOLD | VOLU | MUTE | | | | | HOME | PGUP | | | |
+-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---------+-------+
| | RGBH | RGBS | RGBV | | | | | END | PGDN | | | MO(3) |
| | RGBH | RGBS | RGBV | | | | | END | PGDN | | | L3 |
+-----------+-----+-+-----+-----+-+-------+-------+-------+-------+-------+-------+-----+-+-------+-+-------+---+-------+
| | | | | RGBTO | RGBMO | |
+-----------+-------+-----------+-------------------------------------------------------+-----------+-------+-----------+
+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| BOOT | EE_CLR| | | | | | | | | | | | | |
| BOOT | EECLR | | | | | | | | | | | | | |
+-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+
| | | | | | | | | | | | | | |
+-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-----------+

View File

@ -57,7 +57,7 @@
"KC_DOT",
"KC_SLSH",
"SC_RSPC",
"MO(1)",
"MO(LAYER_COMMON)",
"KC_NO",
"KC_LOPT",
"KC_LCMD",
@ -81,7 +81,7 @@
"KC_F11",
"KC_F12",
"KC_NO",
"TG(2)",
"TG(LAYER_RARELY)",
"KC_NO",
"KC_NO",
"KC_NO",
@ -145,7 +145,7 @@
"KC_NO",
"KC_NO",
"KC_NO",
"TO(0)",
"TO(LAYER_QWERTY)",
"KC_NO",
"KC_BRMD",
"KC_BRMU",
@ -185,7 +185,7 @@
"KC_PGDN",
"KC_NO",
"KC_TRNS",
"MO(3)",
"MO(LAYER_RECOVERY)",
"KC_NO",
"KC_NO",
"KC_NO",

2
go.mod
View File

@ -1,3 +1,5 @@
module github.com/haunt98/qmk_keymaps
go 1.20
require github.com/spf13/cast v1.5.1

7
go.sum
View File

@ -0,0 +1,7 @@
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=