Add editor packages
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package editor
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"code.chimeric.al/dwrz/wen/internal/editor/canvas"
|
||||
"code.chimeric.al/dwrz/wen/pkg/terminal/input"
|
||||
)
|
||||
|
||||
func (e *Editor) bufferInput(in *input.Event) error {
|
||||
size, err := e.terminal.Size()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get terminal size: %w", err)
|
||||
}
|
||||
|
||||
if in.Rune != input.Null {
|
||||
switch in.Rune {
|
||||
case input.Delete:
|
||||
e.active.Backspace()
|
||||
|
||||
case 'q' & input.Control:
|
||||
e.prompt.Prompt("Quit? (y/n)", e.quit)
|
||||
|
||||
case 's' & input.Control:
|
||||
if err := e.active.Save(); err != nil {
|
||||
e.prompt.SetText(fmt.Sprintf(
|
||||
"failed to save: %v", err,
|
||||
))
|
||||
} else {
|
||||
e.prompt.SetText("saved file")
|
||||
}
|
||||
|
||||
case 'x' & input.Control:
|
||||
e.prompt.Prompt("Save as:", e.saveAs)
|
||||
|
||||
default:
|
||||
e.active.Insert(in.Rune)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
switch in.Key {
|
||||
case input.Down:
|
||||
e.active.CursorDown()
|
||||
|
||||
case input.Left:
|
||||
e.active.CursorLeft()
|
||||
|
||||
case input.Right:
|
||||
e.active.CursorRight()
|
||||
|
||||
case input.Up:
|
||||
e.active.CursorUp()
|
||||
|
||||
case input.End:
|
||||
e.active.CursorEnd()
|
||||
|
||||
case input.Home:
|
||||
e.active.CursorHome()
|
||||
|
||||
case input.PageDown:
|
||||
e.active.PageDown(int(size.Rows) - canvas.Bars)
|
||||
|
||||
case input.PageUp:
|
||||
e.active.PageUp(int(size.Rows) - canvas.Bars)
|
||||
|
||||
default:
|
||||
e.log.Debug("unrecognized input", slog.Any("input", in))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *Editor) promptInput(event *input.Event) error {
|
||||
if event.Rune != input.Null {
|
||||
switch event.Rune {
|
||||
case input.Escape:
|
||||
e.prompt.Escape()
|
||||
|
||||
case input.CarriageReturn:
|
||||
e.prompt.Complete()
|
||||
|
||||
case input.Delete:
|
||||
e.prompt.Backspace()
|
||||
|
||||
default:
|
||||
e.prompt.Insert(event.Rune)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
switch event.Key {
|
||||
case input.Left:
|
||||
e.prompt.CursorLeft()
|
||||
|
||||
case input.Right:
|
||||
e.prompt.CursorRight()
|
||||
|
||||
case input.End:
|
||||
e.prompt.CursorEnd()
|
||||
|
||||
case input.Home:
|
||||
e.prompt.CursorHome()
|
||||
|
||||
default:
|
||||
e.log.Debug("unrecognized input", slog.Any("input", event))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user