Further cleanup main package
This commit is contained in:
parent
eb474ddad2
commit
94426483c6
10
gilo.go
10
gilo.go
@ -1,9 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"timshome.page/gilo/internal/editor"
|
"timshome.page/gilo/internal/editor"
|
||||||
"timshome.page/gilo/internal/terminal"
|
"timshome.page/gilo/internal/terminal"
|
||||||
)
|
)
|
||||||
@ -13,9 +10,8 @@ func main() {
|
|||||||
oldState := terminal.RawOn()
|
oldState := terminal.RawOn()
|
||||||
defer terminal.RawOff(oldState)
|
defer terminal.RawOff(oldState)
|
||||||
|
|
||||||
reader := bufio.NewReader(os.Stdin)
|
// The input loop
|
||||||
|
for editor.ProcessKeypress() {
|
||||||
for editor.ProcessKeypress(reader) {
|
editor.RefreshScreen()
|
||||||
// loop!
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,15 @@ package editor
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"os"
|
||||||
|
|
||||||
"timshome.page/gilo/internal/char"
|
"timshome.page/gilo/internal/char"
|
||||||
"timshome.page/gilo/internal/terminal"
|
"timshome.page/gilo/internal/terminal"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readKey(reader *bufio.Reader) (rune, int) {
|
var reader = bufio.NewReader(os.Stdin)
|
||||||
|
|
||||||
|
func readKey() (rune, int) {
|
||||||
ch, size, err := reader.ReadRune()
|
ch, size, err := reader.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@ -16,14 +19,24 @@ func readKey(reader *bufio.Reader) (rune, int) {
|
|||||||
return ch, size
|
return ch, size
|
||||||
}
|
}
|
||||||
|
|
||||||
func ProcessKeypress(reader *bufio.Reader) bool {
|
func RefreshScreen() {
|
||||||
ch, _ := readKey(reader)
|
terminal.ANSICode(terminal.ClearScreen)
|
||||||
|
terminal.ANSICode(terminal.ResetCursor)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProcessKeypress() bool {
|
||||||
|
ch, _ := readKey()
|
||||||
|
|
||||||
|
// Clean up on exit
|
||||||
|
if ch == char.Ctrl('q') {
|
||||||
|
terminal.ANSICode(terminal.ClearScreen)
|
||||||
|
terminal.ANSICode(terminal.ResetCursor)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Ugliest syntax structure ever?
|
// Ugliest syntax structure ever?
|
||||||
switch {
|
switch {
|
||||||
case ch == char.Ctrl('q'):
|
|
||||||
terminal.OutLn("bye!")
|
|
||||||
return false
|
|
||||||
case char.IsCtrl(ch):
|
case char.IsCtrl(ch):
|
||||||
terminal.OutLn("%d", ch)
|
terminal.OutLn("%d", ch)
|
||||||
default:
|
default:
|
||||||
|
@ -7,6 +7,9 @@ import (
|
|||||||
"golang.org/x/term"
|
"golang.org/x/term"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const ClearScreen = "2J"
|
||||||
|
const ResetCursor = "H"
|
||||||
|
|
||||||
// Is this a valid interactive terminal?
|
// Is this a valid interactive terminal?
|
||||||
func check() {
|
func check() {
|
||||||
if !term.IsTerminal(int(os.Stdin.Fd())) {
|
if !term.IsTerminal(int(os.Stdin.Fd())) {
|
||||||
@ -34,6 +37,10 @@ func RawOff(oldState *term.State) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ANSICode (code string) {
|
||||||
|
fmt.Printf("\x1b[%s", code)
|
||||||
|
}
|
||||||
|
|
||||||
// Print a formatted string to stdout, with CRLF line endings for proper terminal formatting
|
// Print a formatted string to stdout, with CRLF line endings for proper terminal formatting
|
||||||
func OutLn(format string, a ...interface{}) {
|
func OutLn(format string, a ...interface{}) {
|
||||||
formatted := fmt.Sprintf(format, a...)
|
formatted := fmt.Sprintf(format, a...)
|
||||||
|
Loading…
Reference in New Issue
Block a user