From 42b02c47be9b285099203e44a2570636d4ca6f03 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Fri, 11 Sep 2026 14:47:10 +0200 Subject: krino: foundation — sexp reader, config language, init/new/check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/krino/common.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 cmd/krino/common.go (limited to 'cmd/krino/common.go') diff --git a/cmd/krino/common.go b/cmd/krino/common.go new file mode 100644 index 0000000..ea1e83d --- /dev/null +++ b/cmd/krino/common.go @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package main + +import ( + "fmt" + "io" + "strings" + + "krino/internal/config" + "krino/internal/xdg" +) + +// mainFile is -c FILE, or the default krino.conf. +func mainFile(g *globals) string { + if g.conf != "" { + return xdg.Expand(g.conf) + } + return config.DefaultFile() +} + +// usageError reports a command-line mistake and returns exit status 2. +func usageError(stderr io.Writer, msg string) int { + fmt.Fprintf(stderr, "krino: %s\nrun 'krino -h' for help\n", msg) + return 2 +} + +// printDiags prints config problems with ~ for the home directory, then a count. +func printDiags(stderr io.Writer, errs []*config.Diag) { + for _, e := range errs { + d := *e + d.File = xdg.Abbrev(d.File) + fmt.Fprintln(stderr, &d) + } + if len(errs) == 1 { + fmt.Fprintln(stderr, "krino: 1 problem found") + } else { + fmt.Fprintf(stderr, "krino: %d problems found\n", len(errs)) + } +} + +// describeActions renders a rule's actions briefly, as in: move PDF, stop. +func describeActions(r *config.Rule) string { + var parts []string + for _, a := range r.Actions { + if a.Arg == "" { + parts = append(parts, a.Kind.String()) + } else { + parts = append(parts, a.Kind.String()+" "+a.Arg) + } + } + if r.Stop { + parts = append(parts, "stop") + } + return strings.Join(parts, ", ") +} -- cgit v1.3