-
Notifications
You must be signed in to change notification settings - Fork 61
/
Copy pathremap.bqn
executable file
·54 lines (47 loc) · 2.45 KB
/
remap.bqn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#! /usr/bin/env bqn
help ← 1↓"
Remap a BQN keyboard file from qwerty. Options:
-h, --help: Print this message and exit
-k: Output keyboard layout
-i: Input file(s) in editors/
-o: Output file(s); uses stdout if not given"
o ← "-h"‿"--help"‿"-k"‿"-i"‿"-o"
oo ← (≠o) = oi ← o ⊐ ar←•args
•Exit∘•Out∘help⍟(∨´2⊸>) oi
key‿inp‿out ← 2↓o≠⊸↑ ar ⊔˜ (¬-˜⊢× oi⊏˜ ↕∘≠⌈`∘׬)oo
A ← {𝕩?@; •Out 𝕨 ⋄ •Exit 1}
"Can only specify one keyboard layout at a time!" A 1≥≠key
"No inputs!" A 0<≠inp
"Requires one output file for each input, or one input and no output to use stdout" A inp=⟜(⊢+0⊸=)○≠out
Map ← {𝕩⊏˜𝕨⊐⊢}
_sl_ ← {𝔽_𝕣_⟨a,b⟩: 𝔽∘((a↓b↓⊢)¨)⊸((a⊸↑∾⊣∾b⊸↑)¨)}
# Key layouts
qwerty ← "`1234567890-=~!@#$%^&*()_+qwertyuiop[]QWERTYUIOP{}asdfghjkl;'ASDFGHJKL:""|zxcvbnm,./ZXCVBNM<>? "
keys ← ⟨
"dvorak"‿"`1234567890[]~!@#$%^&*(){}',.pyfgcrl/=""<>PYFGCRL?+aoeuidhtns-AOEUIDHTNS_|;qjkxbmwvz:QJKXBMWVZ "
"colemak"‿"`1234567890-=~!@#$%^&*()_+qwfpgjluy;[]QWFPGJLUY:{}arstdhneio'ARSTDHNEIO""|zxcvbkm,./ZXCVBKM<>? "
"workman"‿"`1234567890-=~!@#$%^&*()_+qdrwbjfup;[]QDRWBJFUP:{}ashtgyneoi'ASHTGYNEOI""|zxmcvkl,./ZXMCVKL<>? "
⟩
# 2-modifier: source keymap as 𝕗 and target as 𝕘, file contents 𝕩
files ← ⟨
"inputrc"‿{
m ← 𝕗 Map○('"'⊸=◶⟨⥊,"\"⊸∾⟩¨) 𝕘
{
c‿d ← ¯6‿¯2
((=´c‿d⊸⊏)¨𝕩) (c⌾(d⊸⊑)↕∘≠)⊸⊏∘⊢⍟⊣¨ M _sl_ 3‿¯5 𝕩
}⌾(9⊸↓)
}
"XCompose"‿{
xc ← Map´ c‿l ← (⊑¨⋈1↓¨⊢) (¯1+`<⟜'a'∨'z'⊸<)⊸⊔ "`grave-minus=equal~asciitilde!exclam@at#numbersign$dollar%percent^circumflex&ersand*asterisk(parenleft)parenright_underscore+plus[bracketleft]bracketright{braceleft}braceright:colon;semicolon""quotedbl,comma.period/slash<less>greater?question space'apostrophe"
(𝕗 Map○{⥊¨XC⌾((𝕩∊c)⊸/)𝕩} 𝕘) _sl_ 25‿¯7⌾(4⊸↓)
}
⟩
_lookup_ ← {
opt‿res ← <˘⍉>𝕗
err ← ∾"Invalid "‿𝕘‿"; options:"∾" "⊸∾¨opt
res ⊏˜ ·(err A ·∧´(≠opt)⊸>)⊸⊢ opt⊸⊐
}
k ← ⊑ keys _lookup_ "key layout (-k)" 1↑key∾⟨"dvorak"⟩
conv ← files _lookup_ "keymap file (-i)" inp
write ← ∾⟜⟨•Out¨⟩⍟(0=≠) {(•wdpath•file.At𝕩)⊸•file.Lines}¨out
{𝕊w‿c‿i: W qwerty _c_ k •file.Lines i}˘ ⍉>write‿conv‿inp