@@ -34,7 +34,7 @@ var version = "dev"
3434func 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 \n Grant access to Zee.app (or your terminal app if running from CLI) in:\n System 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