Skip to content

Commit cd8be7f

Browse files
committed
Merge branch 'main' of github.com:sumerc/zee
2 parents 1694b34 + 024383d commit cd8be7f

5 files changed

Lines changed: 41 additions & 17 deletions

File tree

alert/alert_darwin.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@ package alert
44

55
import "os/exec"
66

7-
func Show(msg string) {
7+
func Error(msg string) {
8+
show(msg, "stop")
9+
}
10+
11+
func Warn(msg string) {
12+
show(msg, "caution")
13+
}
14+
15+
func show(msg, icon string) {
816
exec.Command("osascript", "-e",
9-
`display dialog "`+msg+`" with title "Zee" buttons {"OK"} default button "OK" with icon stop`).Run()
17+
`display dialog "`+msg+`" with title "Zee" buttons {"OK"} default button "OK" with icon `+icon).Run()
1018
}

alert/alert_other.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
package alert
44

5-
func Show(_ string) {}
5+
func Error(_ string) {}
6+
func Warn(_ string) {}

clipboard/clipboard_darwin.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package clipboard
22

3+
/*
4+
#cgo LDFLAGS: -framework ApplicationServices -framework CoreFoundation
5+
#include <ApplicationServices/ApplicationServices.h>
6+
7+
static int testAccessibility() {
8+
return AXIsProcessTrusted();
9+
}
10+
*/
11+
import "C"
12+
313
import (
414
"sync"
515

@@ -27,3 +37,7 @@ func Paste() error {
2737
kb.HasSuper(true) // Cmd+V on macOS
2838
return kb.Launching()
2939
}
40+
41+
func CheckAccessibility() bool {
42+
return C.testAccessibility() == 1
43+
}

clipboard/clipboard_linux.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,5 @@ func Paste() error {
159159
}
160160
return syn()
161161
}
162+
163+
func CheckAccessibility() bool { return true }

main.go

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var version = "dev"
3434
func fatal(msg string, args ...any) {
3535
s := fmt.Sprintf(msg, args...)
3636
fmt.Fprintln(os.Stderr, s)
37-
alert.Show(s)
37+
alert.Error(s)
3838
os.Exit(1)
3939
}
4040

@@ -183,13 +183,12 @@ func run() {
183183
// Resolve log directory early
184184
logPath, err := log.ResolveDir(*logPathFlag)
185185
if err != nil {
186-
fmt.Fprintf(os.Stderr, "Error: failed to resolve log directory: %v\n", err)
187-
os.Exit(1)
186+
fatal("Failed to resolve log directory: %v", err)
188187
}
189188
log.SetDir(logPath)
190189

191190
if err := log.EnsureDir(); err != nil {
192-
fmt.Fprintf(os.Stderr, "Warning: could not create log directory: %v\n", err)
191+
log.Warnf("could not create log directory: %v", err)
193192
}
194193

195194
crashPath := filepath.Join(log.Dir(), "crash_log.txt")
@@ -232,8 +231,7 @@ func run() {
232231
case "mp3@16", "mp3@64", "flac":
233232
activeFormat = *formatFlag
234233
default:
235-
fmt.Printf("Error: unknown format %q (use mp3@16, mp3@64, or flac)\n", *formatFlag)
236-
os.Exit(1)
234+
fatal("Unknown format %q (use mp3@16, mp3@64, or flac)", *formatFlag)
237235
}
238236

239237
if streamEnabled && *formatFlag != "mp3@16" {
@@ -253,8 +251,7 @@ func run() {
253251
if *setupFlag && *deviceFlag == "" {
254252
ctx, err := audio.NewContext()
255253
if err != nil {
256-
fmt.Printf("Error initializing audio: %v\n", err)
257-
os.Exit(1)
254+
fatal("Error initializing audio: %v", err)
258255
}
259256
if dev, _ := selectDevice(ctx); dev != nil {
260257
*deviceFlag = dev.Name
@@ -265,7 +262,7 @@ func run() {
265262
if *debugFlag {
266263
log.SetTranscribeEnabled(*debugTranscribeFlag)
267264
if err := log.Init(); err != nil {
268-
fmt.Fprintf(os.Stderr, "Warning: could not init logging: %v\n", err)
265+
alert.Warn("Debug logging will not work.\n\n" + err.Error())
269266
} else {
270267
log.SessionStart(activeTranscriber.Name(), activeFormat, activeFormat)
271268
}
@@ -288,8 +285,12 @@ func run() {
288285

289286
if autoPaste {
290287
if err := clipboard.Init(); err != nil {
291-
fmt.Printf("Warning: paste init failed: %v\n", err)
292-
fmt.Println("Fix with: sudo chmod 660 /dev/uinput && sudo chgrp input /dev/uinput")
288+
log.Warnf("paste init failed: %v", err)
289+
alert.Warn("Auto-paste will not work.\n\n" + err.Error())
290+
}
291+
if !clipboard.CheckAccessibility() {
292+
log.Warnf("accessibility permission missing or stale")
293+
alert.Warn("Auto-paste requires Accessibility permission.\n\nGrant access to Zee.app (or your terminal app if running from CLI) in:\nSystem Settings → Privacy & Security → Accessibility")
293294
}
294295
}
295296

@@ -313,9 +314,7 @@ func run() {
313314
} else if *setupFlag {
314315
selectedDevice, err = selectDevice(ctx)
315316
if err != nil {
316-
log.Warnf("device selection failed: %v", err)
317-
fmt.Printf("Warning: device selection failed: %v\n", err)
318-
fmt.Println("Falling back to default device")
317+
log.Warnf("device selection failed: %v — falling back to default", err)
319318
selectedDevice = nil
320319
}
321320
}

0 commit comments

Comments
 (0)