Add wen cmd
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
|
||||
"code.chimeric.al/dwrz/wen/internal/editor"
|
||||
"code.chimeric.al/dwrz/wen/pkg/terminal"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var log = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
|
||||
AddSource: true,
|
||||
Level: slog.LevelDebug,
|
||||
}))
|
||||
|
||||
// Setup the main context.
|
||||
// The context cancels on SIGINT or SIGTERM.
|
||||
ctx, stop := signal.NotifyContext(
|
||||
context.Background(),
|
||||
syscall.SIGINT,
|
||||
syscall.SIGTERM,
|
||||
)
|
||||
defer stop()
|
||||
|
||||
if err := run(ctx); err != nil {
|
||||
log.Error("failed", slog.Any("error", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func run(ctx context.Context) error {
|
||||
// Setup workspace and log file.
|
||||
cdir, err := os.UserCacheDir()
|
||||
if err != nil {
|
||||
return fmt.Errorf(
|
||||
"failed to determine user cache directory: %w", err,
|
||||
)
|
||||
}
|
||||
wdir := filepath.Join(cdir, "wen")
|
||||
|
||||
if err := os.MkdirAll(wdir, os.ModeDir|0700); err != nil {
|
||||
return fmt.Errorf("failed to create tmp dir: %w", err)
|
||||
}
|
||||
|
||||
f, err := os.Create(wdir + "/log")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create log file: %w", err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
var editorLog = slog.New(slog.NewTextHandler(f, &slog.HandlerOptions{
|
||||
AddSource: true,
|
||||
Level: slog.LevelDebug,
|
||||
}))
|
||||
|
||||
// Retrieve terminal info.
|
||||
t, err := terminal.New(os.Stdin.Fd())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get terminal attributes: %w", err)
|
||||
}
|
||||
|
||||
// Create the editor.
|
||||
editor, err := editor.New(editor.Parameters{
|
||||
In: os.Stdin,
|
||||
Log: editorLog,
|
||||
Out: os.Stdout,
|
||||
TempDir: wdir,
|
||||
Terminal: t,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create editor: %w", err)
|
||||
}
|
||||
|
||||
// Run the editor.
|
||||
return editor.Run(ctx, os.Args[1:])
|
||||
}
|
||||
Reference in New Issue
Block a user