Commit Diff


commit - 442591b5aa83d4c5778b0c087f9c11fe605554a8
commit + d9c9f86c3fcb2cbad42020f4233c6621ee9335de
blob - afb38c4714fb342a7f201d1fb4ad77e2e477011e
blob + 428401e15c4ee8830f37b7b6c0d749d5d349a4bb
--- wrd/main.go
+++ wrd/main.go
@@ -161,9 +161,12 @@ func render(src, out string) error {
 	}
 	_ = f.Close()
 
-	// stamp the cache with the source mtime
+	if rerr != nil {
+		_ = os.Remove(out)
+		return rerr
+	}
 	_ = os.Chtimes(out, time.Now(), fi.ModTime())
-	return rerr
+	return nil
 }
 
 func (a *app) load() {
@@ -237,8 +240,7 @@ func fuzzy(hay, needle string) bool {
 }
 
 func url(rel string) string {
-	if strings.HasSuffix(rel, "/index.html") {
-		rel = strings.TrimSuffix(rel, "index.html")
-	}
+	rel = strings.TrimSuffix(rel, "/index.html")
+	rel = strings.TrimSuffix(rel, "index.html")
 	return "https://" + rel
 }
blob - f957c41e6f2a6716611dc96ecd9656b168389846
blob + cc8250fdb2255a08dfa0cb55fccb85829f546820
--- wrd/tui.go
+++ wrd/tui.go
@@ -6,6 +6,7 @@ import (
 	"os"
 	"os/exec"
 	"os/signal"
+	"runtime"
 	"sort"
 	"strings"
 	"syscall"
@@ -189,7 +190,8 @@ func (a *app) draw() {
 	if !a.content {
 		mode = "browse"
 	}
-	prompt := fmt.Sprintf("\x1b[1m%s\x1b[0m ▸ %s", mode, string(a.query))
+	qTrunc := truncate(string(a.query), a.cols/2)
+	prompt := fmt.Sprintf("\x1b[1m%s\x1b[0m ▸ %s", mode, qTrunc)
 	count := fmt.Sprintf("\x1b[2m%d/%d\x1b[0m", min(len(a.results), a.sel+1), len(a.results))
 	sb.WriteString(pad(prompt, a.cols-visLen(count)) + count + "\r\n")
 
@@ -197,7 +199,7 @@ func (a *app) draw() {
 	for i := 0; i < listH; i++ {
 		left := strings.Repeat(" ", leftW)
 		if ri := a.top + i; ri < len(a.results) {
-			left = padRaw(truncate(a.results[ri].text(), leftW), leftW)
+			left = padraw(truncate(a.results[ri].text(), leftW), leftW)
 			if ri == a.sel {
 				left = "\x1b[7m" + left + "\x1b[0m"
 			}
@@ -276,9 +278,21 @@ func (a *app) yank() {
 	if !ok {
 		return
 	}
-	cmd := exec.Command("wl-copy")
-	cmd.Stdin = strings.NewReader(url(m.d.rel))
-	_ = cmd.Run()
+	clip := url(m.d.rel)
+	var cmds []*exec.Cmd
+	if runtime.GOOS == "darwin" {
+		cmds = []*exec.Cmd{exec.Command("pbcopy")}
+	} else if os.Getenv("WAYLAND_DISPLAY") != "" {
+		cmds = []*exec.Cmd{exec.Command("wl-copy")}
+	} else {
+		cmds = []*exec.Cmd{exec.Command("xclip", "-selection", "clipboard")}
+	}
+	for _, cmd := range cmds {
+		cmd.Stdin = strings.NewReader(clip)
+		if cmd.Run() == nil {
+			return
+		}
+	}
 }
 
 func runTTY(cmd *exec.Cmd) {
@@ -316,7 +330,7 @@ func truncate(s string, w int) string {
 	return string(rs[:w-1]) + "…"
 }
 
-func padRaw(s string, w int) string {
+func padraw(s string, w int) string {
 	rs := []rune(s)
 	if len(rs) >= w {
 		return string(rs[:w])