support $INPUT_REMAP_FILE
parent
b0767818e2
commit
74e54c4efa
|
|
@ -12,7 +12,7 @@ type Input interface {
|
||||||
|
|
||||||
func New(ctx context.Context) Input {
|
func New(ctx context.Context) Input {
|
||||||
foo := randomCharFromRange('a', 'g')
|
foo := randomCharFromRange('a', 'g')
|
||||||
if p, ok := os.LookupEnv("INPUT_RANDOM_WEIGHT_FILE"); ok {
|
if p, ok := os.LookupEnv("INPUT_RANDOM_WEIGHT_FILE"); ok && len(p) > 0 {
|
||||||
foo = randomCharFromWeightFile(p)
|
foo = randomCharFromWeightFile(p)
|
||||||
}
|
}
|
||||||
var result Input = NewRandom(foo)
|
var result Input = NewRandom(foo)
|
||||||
|
|
@ -22,5 +22,8 @@ func New(ctx context.Context) Input {
|
||||||
if os.Getenv("INPUT_BUFFERED") == "true" {
|
if os.Getenv("INPUT_BUFFERED") == "true" {
|
||||||
result = NewBuffered(ctx, result)
|
result = NewBuffered(ctx, result)
|
||||||
}
|
}
|
||||||
|
if p, ok := os.LookupEnv("INPUT_REMAP_FILE"); ok && len(p) > 0 {
|
||||||
|
result = NewRemapFromFile(result, p)
|
||||||
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,37 @@ func TestNew(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewRemapped(t *testing.T) {
|
||||||
|
d := t.TempDir()
|
||||||
|
remap := path.Join(d, "remap")
|
||||||
|
if err := os.WriteFile(remap, []byte(`{"a":"b"}`), os.ModePerm); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rand := path.Join(d, "rand")
|
||||||
|
if err := os.WriteFile(rand, []byte(`{"a":1}`), os.ModePerm); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv("INPUT_REMAP_FILE", remap)
|
||||||
|
os.Setenv("INPUT_RANDOM_WEIGHT_FILE", rand)
|
||||||
|
t.Cleanup(func() {
|
||||||
|
os.Unsetenv("INPUT_REMAP_FILE")
|
||||||
|
os.Unsetenv("INPUT_RANDOM_WEIGHT_FILE")
|
||||||
|
})
|
||||||
|
|
||||||
|
r := input.New(context.Background())
|
||||||
|
for i := 0; i < 15; i++ {
|
||||||
|
batch := r.Read()
|
||||||
|
for j := range batch {
|
||||||
|
if batch[j].Char != 'b' {
|
||||||
|
t.Errorf("%c", batch[j].Char)
|
||||||
|
}
|
||||||
|
t.Logf("[%d][%d] %c|%v", i, j, batch[j].Char, batch[j].Down)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewBuffered(t *testing.T) {
|
func TestNewBuffered(t *testing.T) {
|
||||||
os.Setenv("INPUT_BUFFERED", "true")
|
os.Setenv("INPUT_BUFFERED", "true")
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,5 @@ func TestInput(t *testing.T) {
|
||||||
var _ Input = &Random{}
|
var _ Input = &Random{}
|
||||||
var _ Input = Keyboard{}
|
var _ Input = Keyboard{}
|
||||||
var _ Input = &Buffered{}
|
var _ Input = &Buffered{}
|
||||||
|
var _ Input = Remap{}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package input
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/go-yaml/yaml"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Remap struct {
|
||||||
|
input Input
|
||||||
|
m map[byte]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRemapFromFile(input Input, p string) Remap {
|
||||||
|
b, err := os.ReadFile(p)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
var m map[string]string
|
||||||
|
if err := yaml.Unmarshal(b, &m); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
remap := map[byte]byte{}
|
||||||
|
for k, v := range m {
|
||||||
|
if len(k) != 1 || len(v) != 1 {
|
||||||
|
panic("remap must be char:char")
|
||||||
|
}
|
||||||
|
remap[k[0]] = v[0]
|
||||||
|
}
|
||||||
|
return NewRemap(input, remap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRemap(input Input, m map[byte]byte) Remap {
|
||||||
|
return Remap{
|
||||||
|
input: input,
|
||||||
|
m: m,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (re Remap) Close() {
|
||||||
|
re.input.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (re Remap) Read() []Button {
|
||||||
|
result := re.input.Read()
|
||||||
|
for i := range result {
|
||||||
|
if v, ok := re.m[result[i].Char]; ok {
|
||||||
|
result[i].Char = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue