diff --git a/app.go b/app.go index c3c94fa8..2a97d5dc 100644 --- a/app.go +++ b/app.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "io/fs" - "log" "os" "os/exec" "os/signal" @@ -79,23 +78,23 @@ func (app *app) quit() { if gOpts.history { if err := app.writeHistory(); err != nil { - log.Printf("writing history file: %s", err) + errorf("writing history file: %s", err) } } if !gSingleMode { if err := remote(fmt.Sprintf("drop %d", gClientID)); err != nil { - log.Printf("dropping connection: %s", err) + errorf("dropping connection: %s", err) } if gOpts.autoquit { if err := remote("quit"); err != nil { - log.Printf("auto quitting server: %s", err) + errorf("auto quitting server: %s", err) } } } } func (app *app) readFile(path string) { - log.Printf("reading file: %s", path) + infof("reading file: %s", path) f, err := os.Open(path) if err != nil { @@ -150,7 +149,7 @@ func loadFiles() (clipboard clipboard, err error) { return } - log.Printf("loading clipboard: %v", clipboard.paths) + infof("loading clipboard: %v", clipboard.paths) return } @@ -166,7 +165,7 @@ func saveFiles(clipboard clipboard) error { } defer files.Close() - log.Printf("saving files: %v", clipboard.paths) + infof("saving clipboard: %v", clipboard.paths) if clipboard.mode == clipboardCopy { fmt.Fprintln(files, "copy") @@ -265,7 +264,7 @@ func (app *app) loop() { if _, err := os.Stat(gConfigPath); !os.IsNotExist(err) { app.readFile(gConfigPath) } else { - log.Printf("config file does not exist: %s", err) + errorf("config file does not exist: %s", err) } } else { for _, path := range gConfigPaths { @@ -289,7 +288,7 @@ func (app *app) loop() { wd, err := os.Getwd() if err != nil { - log.Printf("getting current directory: %s", err) + errorf("getting current directory: %s", err) } app.nav.updateDirs(wd) @@ -331,7 +330,7 @@ func (app *app) loop() { app.nav.previewChan <- "" - log.Printf("*************** closing client, PID: %d ***************", os.Getpid()) + infof("*************** closing client, PID: %d ***************", os.Getpid()) return case n := <-app.nav.copyJobsChan: @@ -526,7 +525,7 @@ func (app *app) runCmdSync(cmd *exec.Cmd, pauseAfter bool) { app.nav.previewChan <- "" if err := app.ui.suspend(); err != nil { - log.Printf("suspend: %s", err) + errorf("suspend: %s", err) } defer func() { if err := app.ui.resume(); err != nil { @@ -605,7 +604,7 @@ func (app *app) runShell(s string, args []string, prefix string) { // the output has been fully read or not. inReader, inWriter, err := os.Pipe() if err != nil { - log.Printf("creating input pipe: %s", err) + errorf("creating input pipe: %s", err) return } cmd.Stdin = inReader @@ -613,7 +612,7 @@ func (app *app) runShell(s string, args []string, prefix string) { outReader, outWriter, err = os.Pipe() if err != nil { - log.Printf("creating output pipe: %s", err) + errorf("creating output pipe: %s", err) return } cmd.Stdout = outWriter @@ -639,7 +638,7 @@ func (app *app) runShell(s string, args []string, prefix string) { b, err := reader.ReadByte() if err != nil { if !errors.Is(err, io.EOF) && !errors.Is(err, fs.ErrClosed) { - log.Printf("reading command output: %s", err) + errorf("reading command output: %s", err) } break } @@ -657,7 +656,7 @@ func (app *app) runShell(s string, args []string, prefix string) { go func() { if err := cmd.Wait(); err != nil { - log.Printf("running shell: %s", err) + errorf("running shell: %s", err) } inReader.Close() inWriter.Close() @@ -671,7 +670,7 @@ func (app *app) runShell(s string, args []string, prefix string) { case "&": go func() { if err := cmd.Wait(); err != nil { - log.Printf("running shell: %s", err) + errorf("running shell: %s", err) } app.ui.exprChan <- &callExpr{"load", nil, 1} }() diff --git a/client.go b/client.go index 581b83f0..02b6862a 100644 --- a/client.go +++ b/client.go @@ -37,7 +37,8 @@ func run() { log.SetOutput(io.Discard) } - log.Printf("*************** starting client, PID: %d ***************", os.Getpid()) + io.WriteString(log.Writer(), "\n") + infof("*************** starting client, PID: %d ***************", os.Getpid()) var screen tcell.Screen var err error @@ -89,28 +90,28 @@ func run() { func writeLastDir(filename string, lastDir string) { f, err := os.Create(filename) if err != nil { - log.Printf("opening last dir file: %s", err) + errorf("opening last dir file: %s", err) return } defer f.Close() _, err = f.WriteString(lastDir) if err != nil { - log.Printf("writing last dir file: %s", err) + errorf("writing last dir file: %s", err) } } func writeSelection(filename string, selection []string) { f, err := os.Create(filename) if err != nil { - log.Printf("opening selection file: %s", err) + errorf("opening selection file: %s", err) return } defer f.Close() _, err = f.WriteString(strings.Join(selection, "\n")) if err != nil { - log.Printf("writing selection file: %s", err) + errorf("writing selection file: %s", err) } } @@ -122,7 +123,7 @@ func readExpr() <-chan expr { c, err := net.Dial(gSocketProt, gSocketPath) for err != nil { - log.Printf("connecting server: %s", err) + errorf("connecting server: %s", err) time.Sleep(duration) duration *= 2 c, err = net.Dial(gSocketProt, gSocketPath) @@ -135,7 +136,7 @@ func readExpr() <-chan expr { s := bufio.NewScanner(c) for s.Scan() { - log.Printf("recv: %s", s.Text()) + debugf("recv: %s", s.Text()) // `query` has to be handled outside of the main thread, which is // blocked when running a synchronous shell command ("$" or "!"). diff --git a/colors.go b/colors.go index 1edd706f..6af25189 100644 --- a/colors.go +++ b/colors.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "log" "os" "path/filepath" "strconv" @@ -184,7 +183,7 @@ loop: case "38": color, offset, err := parseColor(toks[i+1:]) if err != nil { - log.Printf("error processing ansi code 38: %s", err) + errorf("error processing ansi code 38: %s", err) break loop } st = st.Foreground(color) @@ -198,7 +197,7 @@ loop: case "48": color, offset, err := parseColor(toks[i+1:]) if err != nil { - log.Printf("error processing ansi code 48: %s", err) + errorf("error processing ansi code 48: %s", err) break loop } st = st.Background(color) @@ -206,13 +205,13 @@ loop: case "58": color, offset, err := parseColor(toks[i+1:]) if err != nil { - log.Printf("error processing ansi code 58: %s", err) + errorf("error processing ansi code 58: %s", err) break loop } st = st.Underline(color) i += offset default: - log.Printf("unknown ansi code: %s", toks[i]) + errorf("unknown ansi code: %s", toks[i]) } } @@ -220,18 +219,18 @@ loop: } func (sm styleMap) parseFile(path string) { - log.Printf("reading file: %s", path) + infof("reading file: %s", path) f, err := os.Open(path) if err != nil { - log.Printf("opening colors file: %s", err) + errorf("opening colors file: %s", err) return } defer f.Close() pairs, err := readPairs(f) if err != nil { - log.Printf("reading colors file: %s", err) + errorf("reading colors file: %s", err) return } @@ -250,7 +249,7 @@ func (sm *styleMap) parseGNU(env string) { pair := strings.Split(entry, "=") if len(pair) != 2 { - log.Printf("invalid $LS_COLORS entry: %s", entry) + errorf("invalid $LS_COLORS entry: %s", entry) return } @@ -277,7 +276,7 @@ func (sm *styleMap) parsePair(pair []string) { // This function parses $LSCOLORS environment variable. func (sm styleMap) parseBSD(env string) { if len(env) != 22 { - log.Printf("invalid $LSCOLORS variable: %s", env) + errorf("invalid $LSCOLORS variable: %s", env) return } @@ -294,7 +293,7 @@ func (sm styleMap) parseBSD(env string) { case 'a' <= r1 && r1 <= 'h': st = st.Foreground(tcell.PaletteColor(int(r1 - 'a'))) default: - log.Printf("invalid $LSCOLORS entry: %c", r1) + errorf("invalid $LSCOLORS entry: %c", r1) return tcell.StyleDefault } @@ -304,7 +303,7 @@ func (sm styleMap) parseBSD(env string) { case 'a' <= r2 && r2 <= 'h': st = st.Background(tcell.PaletteColor(int(r2 - 'a'))) default: - log.Printf("invalid $LSCOLORS entry: %c", r2) + errorf("invalid $LSCOLORS entry: %c", r2) return tcell.StyleDefault } diff --git a/complete.go b/complete.go index b7077606..427c2685 100644 --- a/complete.go +++ b/complete.go @@ -1,7 +1,6 @@ package main import ( - "log" "maps" "os" "path/filepath" @@ -248,7 +247,7 @@ func matchFile(s string, dirOnly bool, escape func(string) string, unescape func } files, err := os.ReadDir(d) if err != nil { - log.Printf("reading directory: %s", err) + errorf("reading directory: %s", err) result = s return } @@ -316,7 +315,7 @@ func matchExec(s string) (matches []compMatch, result string) { files, err := os.ReadDir(p) if err != nil { if !os.IsNotExist(err) { - log.Printf("reading path: %s", err) + errorf("reading path: %s", err) } continue } @@ -328,7 +327,7 @@ func matchExec(s string) (matches []compMatch, result string) { finfo, err := f.Info() if err != nil { - log.Printf("getting file information: %s", err) + errorf("getting file information: %s", err) continue } @@ -346,7 +345,7 @@ func matchExec(s string) (matches []compMatch, result string) { func matchSearch(s string) (matches []compMatch, result string) { files, err := os.ReadDir(".") if err != nil { - log.Printf("reading directory: %s", err) + errorf("reading directory: %s", err) result = s return } diff --git a/df_openbsd.go b/df_openbsd.go index 7c6d2d91..eebe45ae 100644 --- a/df_openbsd.go +++ b/df_openbsd.go @@ -1,8 +1,6 @@ package main import ( - "log" - "golang.org/x/sys/unix" ) @@ -10,7 +8,7 @@ func diskFree(wd string) string { var stat unix.Statfs_t if err := unix.Statfs(wd, &stat); err != nil { - log.Printf("diskfree: %s", err) + errorf("diskfree: %s", err) return "" } diff --git a/df_statfs.go b/df_statfs.go index 3187d3da..fd33f042 100644 --- a/df_statfs.go +++ b/df_statfs.go @@ -3,8 +3,6 @@ package main import ( - "log" - "golang.org/x/sys/unix" ) @@ -12,7 +10,7 @@ func diskFree(wd string) string { var stat unix.Statfs_t if err := unix.Statfs(wd, &stat); err != nil { - log.Printf("diskfree: %s", err) + errorf("diskfree: %s", err) return "" } diff --git a/df_statvfs.go b/df_statvfs.go index ec746e88..555b123c 100644 --- a/df_statvfs.go +++ b/df_statvfs.go @@ -3,8 +3,6 @@ package main import ( - "log" - "golang.org/x/sys/unix" ) @@ -12,7 +10,7 @@ func diskFree(wd string) string { var stat unix.Statvfs_t if err := unix.Statvfs(wd, &stat); err != nil { - log.Printf("diskfree: %s", err) + errorf("diskfree: %s", err) return "" } diff --git a/df_windows.go b/df_windows.go index fd67a1ef..f01389a8 100644 --- a/df_windows.go +++ b/df_windows.go @@ -1,8 +1,6 @@ package main import ( - "log" - "golang.org/x/sys/windows" ) @@ -11,12 +9,12 @@ func diskFree(wd string) string { pathPtr, err := windows.UTF16PtrFromString(wd) if err != nil { - log.Printf("diskfree: %s", err) + errorf("diskfree: %s", err) return "" } err = windows.GetDiskFreeSpaceEx(pathPtr, &free, nil, nil) // cwd, free, total, available if err != nil { - log.Printf("diskfree: %s", err) + errorf("diskfree: %s", err) return "" } return "df: " + humanize(free) diff --git a/eval.go b/eval.go index 2c322f9b..664f4cff 100644 --- a/eval.go +++ b/eval.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "io" - "log" "os" "path/filepath" "slices" @@ -896,7 +895,7 @@ func insert(app *app, arg string) { wd, err := os.Getwd() if err != nil { - log.Printf("getting current directory: %s", err) + errorf("getting current directory: %s", err) } path, ok := app.nav.marks[arg] @@ -1538,7 +1537,7 @@ func (e *callExpr) eval(app *app, _ []string) { if !app.nav.init { return } - log.Printf("filter: %s", e.args) + debugf("filter: %s", e.args) if err := app.nav.setFilter(e.args); err != nil { app.ui.echoerrf("filter: %s", err) } @@ -1627,7 +1626,7 @@ func (e *callExpr) eval(app *app, _ []string) { wd, err := os.Getwd() if err != nil { - log.Printf("getting current directory: %s", err) + errorf("getting current directory: %s", err) } path = replaceTilde(path) @@ -1666,7 +1665,7 @@ func (e *callExpr) eval(app *app, _ []string) { wd, err := os.Getwd() if err != nil { - log.Printf("getting current directory: %s", err) + errorf("getting current directory: %s", err) } path := filepath.Dir(replaceTilde(e.args[0])) @@ -1704,7 +1703,7 @@ func (e *callExpr) eval(app *app, _ []string) { app.ui.echoerr("push: requires an argument") return } - log.Println("pushing keys", e.args[0]) + debugf("pushing keys %s", e.args[0]) for _, val := range splitKeys(e.args[0]) { app.ui.keyChan <- val } @@ -1780,7 +1779,7 @@ func (e *callExpr) eval(app *app, _ []string) { tty, ok := app.ui.screen.Tty() if !ok { - log.Print("tty-write: failed to get tty") + errorf("tty-write: failed to get tty") return } @@ -1873,7 +1872,7 @@ func (e *callExpr) eval(app *app, _ []string) { switch app.ui.cmdPrefix { case ":": - log.Printf("command: %s", s) + debugf("command: %s", s) app.cmdHistory = append(app.cmdHistory, app.ui.cmdPrefix+s) app.ui.cmdPrefix = "" p := newParser(strings.NewReader(s)) @@ -1884,24 +1883,24 @@ func (e *callExpr) eval(app *app, _ []string) { app.ui.echoerrf("%s", p.err) } case "$": - log.Printf("shell: %s", s) + debugf("shell: %s", s) app.cmdHistory = append(app.cmdHistory, app.ui.cmdPrefix+s) app.ui.cmdPrefix = "" app.runShell(s, nil, "$") case "%": - log.Printf("shell-pipe: %s", s) + debugf("shell-pipe: %s", s) app.cmdHistory = append(app.cmdHistory, app.ui.cmdPrefix+s) app.runShell(s, nil, "%") case ">": io.WriteString(app.cmdIn, s+"\n") app.cmdOutBuf = nil case "!": - log.Printf("shell-wait: %s", s) + debugf("shell-wait: %s", s) app.cmdHistory = append(app.cmdHistory, app.ui.cmdPrefix+s) app.ui.cmdPrefix = "" app.runShell(s, nil, "!") case "&": - log.Printf("shell-async: %s", s) + debugf("shell-async: %s", s) app.cmdHistory = append(app.cmdHistory, app.ui.cmdPrefix+s) app.ui.cmdPrefix = "" app.runShell(s, nil, "&") @@ -1912,7 +1911,7 @@ func (e *callExpr) eval(app *app, _ []string) { dir.ind = app.nav.searchInd dir.pos = app.nav.searchPos } - log.Printf("search: %s", s) + debugf("search: %s", s) app.ui.cmdPrefix = "" app.nav.search = s if _, err := app.nav.searchNext(); err != nil { @@ -1927,7 +1926,7 @@ func (e *callExpr) eval(app *app, _ []string) { dir.ind = app.nav.searchInd dir.pos = app.nav.searchPos } - log.Printf("search-back: %s", s) + debugf("search-back: %s", s) app.ui.cmdPrefix = "" app.nav.search = s if _, err := app.nav.searchPrev(); err != nil { @@ -1936,7 +1935,7 @@ func (e *callExpr) eval(app *app, _ []string) { app.ui.loadFile(app, true) } case "filter: ": - log.Printf("filter: %s", s) + debugf("filter: %s", s) app.ui.cmdPrefix = "" if err := app.nav.setFilter(strings.Split(s, " ")); err != nil { app.ui.echoerrf("filter: %s", err) @@ -1966,7 +1965,7 @@ func (e *callExpr) eval(app *app, _ []string) { } wd, err := os.Getwd() if err != nil { - log.Printf("getting current directory: %s", err) + errorf("getting current directory: %s", err) return } @@ -2012,7 +2011,7 @@ func (e *callExpr) eval(app *app, _ []string) { } app.ui.loadFile(app, true) default: - log.Printf("entering unknown execution prefix: %q", app.ui.cmdPrefix) + warnf("entering unknown execution prefix: %q", app.ui.cmdPrefix) } case "cmd-interrupt": if app.cmd != nil { @@ -2281,19 +2280,19 @@ func (e *callExpr) eval(app *app, _ []string) { func (e *execExpr) eval(app *app, args []string) { switch e.prefix { case "$": - log.Printf("shell: %s -- %s", e, args) + debugf("shell: %s -- %s", e, args) app.runShell(e.value, args, e.prefix) case "%": - log.Printf("shell-pipe: %s -- %s", e, args) + debugf("shell-pipe: %s -- %s", e, args) app.runShell(e.value, args, e.prefix) case "!": - log.Printf("shell-wait: %s -- %s", e, args) + debugf("shell-wait: %s -- %s", e, args) app.runShell(e.value, args, e.prefix) case "&": - log.Printf("shell-async: %s -- %s", e, args) + debugf("shell-async: %s -- %s", e, args) app.runShell(e.value, args, e.prefix) default: - log.Printf("evaluating unknown execution prefix: %q", e.prefix) + errorf("evaluating unknown execution prefix: %q", e.prefix) } } diff --git a/icons.go b/icons.go index 3a54200b..180a85b0 100644 --- a/icons.go +++ b/icons.go @@ -1,7 +1,6 @@ package main import ( - "log" "os" "path/filepath" "strings" @@ -67,18 +66,18 @@ func parseIcons() iconMap { } func (im *iconMap) parseFile(path string) { - log.Printf("reading file: %s", path) + infof("reading file: %s", path) f, err := os.Open(path) if err != nil { - log.Printf("opening icons file: %s", err) + errorf("opening icons file: %s", err) return } defer f.Close() arrs, err := readArrays(f, 1, 3) if err != nil { - log.Printf("reading icons file: %s", err) + errorf("reading icons file: %s", err) return } @@ -96,7 +95,7 @@ func (im *iconMap) parseEnv(env string) { pair := strings.Split(entry, "=") if len(pair) != 2 { - log.Printf("invalid $LF_ICONS entry: %s", entry) + errorf("invalid $LF_ICONS entry: %s", entry) return } diff --git a/logging.go b/logging.go new file mode 100644 index 00000000..c8906c23 --- /dev/null +++ b/logging.go @@ -0,0 +1,73 @@ +package main + +import ( + "errors" + "fmt" + "log" + "strings" +) + +type Level int + +const ( + LevelDebug Level = -4 + LevelInfo Level = 0 + LevelWarn Level = 4 + LevelError Level = 8 +) + +func (l Level) String() string { + switch l { + case LevelDebug: + return "[DEBUG] " + case LevelInfo: + return "[INFO] " + case LevelWarn: + return "[WARN] " + case LevelError: + return "[ERROR] " + default: + return "" + } +} + +func (l *Level) Set(name string) error { + switch strings.ToUpper(name) { + case "DEBUG": + *l = LevelDebug + case "INFO": + *l = LevelInfo + case "WARN": + *l = LevelWarn + case "ERROR": + *l = LevelError + default: + return errors.New("unknown name") + } + return nil +} + +func logf(l Level, format string, args ...any) { + if l < gLogLevel { + return + } + log.Output(3, l.String()+fmt.Sprintf(format, args...)) +} + +func logp(l Level, args ...any) { + if l < gLogLevel { + return + } + log.Output(3, l.String()+fmt.Sprint(args...)) +} + +func debugf(f string, a ...any) { logf(LevelDebug, f, a...) } +func infof(f string, a ...any) { logf(LevelInfo, f, a...) } +func warnf(f string, a ...any) { logf(LevelWarn, f, a...) } +func errorf(f string, a ...any) { logf(LevelError, f, a...) } + +// func debugp(a ...any) { logp(LevelDebug, a...) } +func infop(a ...any) { logp(LevelInfo, a...) } + +// func warnp(a ...any) { logp(LevelWarn, a...) } +func errorp(a ...any) { logp(LevelError, a...) } diff --git a/main.go b/main.go index e47f033d..4b2ffb0f 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,7 @@ var ( gSocketProt string gSocketPath string gLogPath string + gLogLevel Level gSelect string gConfigPath string gCommands arrayFlag @@ -54,6 +55,8 @@ func (a *arrayFlag) String() string { } func init() { + gLogLevel = LevelInfo + h, err := os.Hostname() if err != nil { log.Printf("hostname: %s", err) @@ -81,7 +84,7 @@ func exportEnvVars() { level, err := strconv.Atoi(envLevel) if err != nil { - log.Printf("reading lf level: %s", err) + errorf("reading lf level: %s", err) } level++ @@ -156,7 +159,7 @@ func getOptsMap() map[string]string { func exportLfPath() { lfPath, err := os.Executable() if err != nil { - log.Printf("getting path to lf binary: %s", err) + errorf("getting path to lf binary: %s", err) lfPath = "lf" } os.Setenv("lf", quoteString(lfPath)) @@ -171,7 +174,7 @@ func exportOpts() { func startServer() { cmd := detachedCommand(os.Args[0], "-server") if err := cmd.Start(); err != nil { - log.Printf("starting server: %s", err) + errorf("starting server: %s", err) } } @@ -308,6 +311,10 @@ func main() { "", "`path` to the log file to write messages") + flag.Var(&gLogLevel, + "log-level", + "set the log `level` of -log (DEBUG,INFO,WARN,ERROR) (default INFO)") + flag.Parse() gSocketProt = gDefaultSocketProt diff --git a/nav.go b/nav.go index 1d65f44e..2594a6d2 100644 --- a/nav.go +++ b/nav.go @@ -6,7 +6,6 @@ import ( "errors" "fmt" "io" - "log" "maps" "os" "os/exec" @@ -48,7 +47,7 @@ type file struct { func newFile(path string) *file { lstat, err := os.Lstat(path) if err != nil { - log.Printf("getting file information: %s", err) + errorf("getting file information: %s", err) return &file{ FileInfo: &fakeStat{name: filepath.Base(path)}, linkState: notLink, @@ -78,7 +77,7 @@ func newFile(path string) *file { } linkTarget, err = os.Readlink(path) if err != nil { - log.Printf("reading link target: %s", err) + errorf("reading link target: %s", err) } } @@ -207,7 +206,7 @@ type dir struct { func newDir(path string) *dir { files, err := readdir(path) if err != nil { - log.Printf("reading directory: %s", err) + errorf("reading directory: %s", err) } return &dir{ @@ -535,7 +534,7 @@ func (nav *nav) checkDir(dir *dir) { s, err := os.Stat(dir.path) if err != nil { - log.Printf("getting directory info: %s", err) + errorf("getting directory info: %s", err) return } @@ -794,7 +793,7 @@ func (nav *nav) previewLoop(ui *ui) { strconv.Itoa(win.y), path) if err := cmd.Run(); err != nil { - log.Printf("cleaning preview: %s", err) + errorf("cleaning preview: %s", err) } nav.volatilePreview = false } @@ -883,12 +882,12 @@ func (nav *nav) preview(path string, win *win, mode string) { out, err := cmd.StdoutPipe() if err != nil { - log.Printf("previewing file: %s", err) + errorf("previewing file: %s", err) return } if err := cmd.Start(); err != nil { - log.Printf("previewing file: %s", err) + errorf("previewing file: %s", err) out.Close() return } @@ -899,7 +898,7 @@ func (nav *nav) preview(path string, win *win, mode string) { if errors.As(err, &exitErr) { reg.volatile = true } else { - log.Printf("loading file: %s", err) + errorf("loading file: %s", err) } } }() @@ -908,7 +907,7 @@ func (nav *nav) preview(path string, win *win, mode string) { } else { f, err := os.Open(path) if err != nil { - log.Printf("opening file: %s", err) + errorf("opening file: %s", err) return } @@ -1848,7 +1847,7 @@ func isFiltered(f os.FileInfo, filter []string) bool { for _, pattern := range filter { matched, err := searchMatch(f.Name(), strings.TrimPrefix(pattern, "!"), gOpts.filtermethod) if err != nil { - log.Printf("Filter Error: %s", err) + errorf("Filter Error: %s", err) return false } if strings.HasPrefix(pattern, "!") && matched { diff --git a/scan.go b/scan.go index beb2b5c7..1de0d9fd 100644 --- a/scan.go +++ b/scan.go @@ -2,7 +2,6 @@ package main import ( "io" - "log" "strconv" ) @@ -39,7 +38,7 @@ type scanner struct { func newScanner(r io.Reader) *scanner { buf, err := io.ReadAll(r) if err != nil { - log.Printf("scanning: %s", err) + errorf("scanning: %s", err) } var eof bool @@ -244,7 +243,7 @@ scan: } n, err := strconv.ParseInt(string(oct), 8, 0) if err != nil { - log.Printf("scanning: %s", err) + errorf("scanning: %s", err) } buf = append(buf, byte(n)) continue diff --git a/server.go b/server.go index 721cec01..5666ce5f 100644 --- a/server.go +++ b/server.go @@ -25,7 +25,7 @@ func serve() { log.SetOutput(f) } - log.Print("*************** starting server ***************") + infof("*************** starting server ***************") if gSocketProt == "unix" { setUserUmask() @@ -33,7 +33,7 @@ func serve() { l, err := net.Listen(gSocketProt, gSocketPath) if err != nil { - log.Printf("listening socket: %s", err) + errorf("listening socket: %s", err) return } defer l.Close() @@ -49,10 +49,10 @@ func listen(l net.Listener) { if err != nil { select { case <-gQuitChan: - log.Print("*************** closing server ***************") + infof("*************** closing server ***************") return default: - log.Printf("accepting connection: %s", err) + errorf("accepting connection: %s", err) } } go handleConn(c) diff --git a/sixel.go b/sixel.go index ec04e28b..47cdbfb7 100644 --- a/sixel.go +++ b/sixel.go @@ -3,7 +3,6 @@ package main import ( "errors" "fmt" - "log" "os" "strconv" "strings" @@ -35,7 +34,7 @@ func (sxs *sixelScreen) printSixel(win *win, screen tcell.Screen, reg *reg) { cw, ch, err := cellSize(screen) if err != nil { - log.Printf("sixel: %s", err) + errorf("sixel: %s", err) return } @@ -57,7 +56,7 @@ func (sxs *sixelScreen) printSixel(win *win, screen tcell.Screen, reg *reg) { matches := reSixelSize.FindStringSubmatch(line) if matches == nil { - log.Print("sixel: failed to get image size") + errorf("sixel: failed to get image size") continue } diff --git a/ui.go b/ui.go index e122d933..3c8d4fda 100644 --- a/ui.go +++ b/ui.go @@ -3,7 +3,6 @@ package main import ( "bytes" "fmt" - "log" "os" "path/filepath" "reflect" @@ -348,7 +347,7 @@ func fileInfo(f *file, d *dir, userWidth int, groupWidth int, customWidth int) ( fmt.Fprintf(&info, " %*s", customWidth, "") custom = fmt.Sprintf(" %s%*s", f.customInfo, customWidth-printLength(f.customInfo), "") default: - log.Printf("unknown info type: %s", s) + errorf("unknown info type: %s", s) } } @@ -750,12 +749,12 @@ func (ui *ui) echo(msg string) { func (ui *ui) echomsg(msg string) { ui.echo(msg) - log.Print(msg) + infop(msg) } func (ui *ui) echoerr(msg string) { ui.echo(fmt.Sprintf(optionToFmtstr(gOpts.errorfmt), msg)) - log.Printf("error: %s", msg) + errorp(msg) } func (ui *ui) echoerrf(format string, a ...any) { @@ -1467,7 +1466,7 @@ func listFilesInCurrDir(nav *nav) string { } dir := nav.currDir() if dir.loading { - log.Printf("listFilesInCurrDir(): %s is still loading, `files` isn't ready for remote query", dir.path) + warnf("listFilesInCurrDir(): %s is still loading, `files` isn't ready for remote query", dir.path) return "" } @@ -1600,7 +1599,7 @@ func (ui *ui) readNormalEvent(ev tcell.Event, nav *nav) expr { switch len(binds) { case 0: - ui.echoerrf("unknown mapping: %s", string(ui.keyAcc)) + errorf("unknown mapping: %s", string(ui.keyAcc)) ui.keyAcc = nil ui.keyCount = nil ui.menu = "" @@ -1610,7 +1609,7 @@ func (ui *ui) readNormalEvent(ev tcell.Event, nav *nav) expr { if len(ui.keyCount) > 0 { c, err := strconv.Atoi(string(ui.keyCount)) if err != nil { - log.Printf("converting command count: %s", err) + errorf("converting command count: %s", err) } count = c } @@ -1734,9 +1733,9 @@ func (ui *ui) readNormalEvent(ev tcell.Event, nav *nav) expr { case *tcell.EventResize: return &callExpr{"redraw", nil, 1} case *tcell.EventError: - log.Printf("Got EventError: '%s' at %s", tev.Error(), tev.When()) + debugf("Got EventError: '%s' at %s", tev.Error(), tev.When()) case *tcell.EventInterrupt: - log.Printf("Got EventInterrupt: at %s", tev.When()) + debugf("Got EventInterrupt: at %s", tev.When()) case *tcell.EventFocus: if tev.Focused { return &callExpr{"on-focus-gained", nil, 1} diff --git a/watch.go b/watch.go index 9aa7768d..54e59c3f 100644 --- a/watch.go +++ b/watch.go @@ -1,7 +1,6 @@ package main import ( - "log" "os" "path/filepath" "time" @@ -42,7 +41,7 @@ func (watch *watch) start() { watcher, err := fsnotify.NewWatcher() if err != nil { - log.Printf("start watcher: %s", err) + errorf("start watcher: %s", err) return }