77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
// License: GPLv3 Copyright: 2023, Kovid Goyal, <kovid at kovidgoyal.net>
|
|
|
|
package show_key
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"kitty/tools/cli/markup"
|
|
"kitty/tools/tty"
|
|
"os"
|
|
)
|
|
|
|
var _ = fmt.Print
|
|
|
|
func print_key(buf []byte, ctx *markup.Context) {
|
|
const ctrl_keys = "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
|
|
unix := ""
|
|
send_text := ""
|
|
for _, ch := range buf {
|
|
switch {
|
|
case int(ch) < len(ctrl_keys):
|
|
unix += "^" + ctrl_keys[ch:ch+1]
|
|
case ch == 127:
|
|
unix += "^?"
|
|
default:
|
|
unix += string(rune(ch))
|
|
}
|
|
}
|
|
for _, ch := range string(buf) {
|
|
q := fmt.Sprintf("%#v", string(ch))
|
|
send_text += q[1 : len(q)-1]
|
|
}
|
|
os.Stdout.WriteString(unix + "\t\t")
|
|
os.Stdout.WriteString(ctx.Yellow(send_text) + "\r\n")
|
|
}
|
|
|
|
func run_legacy_loop(opts *Options) (err error) {
|
|
term, err := tty.OpenControllingTerm(tty.SetRaw)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() {
|
|
term.RestoreAndClose()
|
|
}()
|
|
if opts.KeyMode != "unchanged" {
|
|
os.Stdout.WriteString("\x1b[?1")
|
|
switch opts.KeyMode {
|
|
case "normal":
|
|
os.Stdout.WriteString("l")
|
|
default:
|
|
os.Stdout.WriteString("h")
|
|
}
|
|
defer func() {
|
|
os.Stdout.WriteString("\x1b[?1l")
|
|
}()
|
|
}
|
|
fmt.Print("Press any keys - Ctrl+D will terminate this program\r\n")
|
|
ctx := markup.New(true)
|
|
fmt.Print(ctx.Green("UNIX\t\tsend_text\r\n"))
|
|
buf := make([]byte, 64)
|
|
for {
|
|
n, err := term.Read(buf)
|
|
if err != nil {
|
|
if errors.Is(err, io.EOF) {
|
|
break
|
|
}
|
|
return err
|
|
}
|
|
print_key(buf[:n], ctx)
|
|
if n == 1 && buf[0] == 4 {
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|