Created
June 30, 2023 17:49
-
-
Save onetom/0291878c1a4b00819f8297bbfa330b7f to your computer and use it in GitHub Desktop.
Pop up an Apple Script Yes/No dialog from Clojure
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns dialog | |
"Display a Yes/No dialog, which appears on the very top of every app and grabs | |
the focus and also gives it back to the REPL, after making the choice, unlike | |
a Swing dialog, for example. | |
It's useful for confirming irreversible operations, like file or DB deletion. | |
It uses AppleScript, so it only works on macOS and on a local REPL." | |
(:require | |
[clojure.java.shell :as shell])) | |
(def yes-no-dialog:scpt | |
"Literature: | |
* https://stackoverflow.com/questions/29258142/how-can-i-open-applescript-app-with-arguments | |
* https://stackoverflow.com/a/29266283/263983 | |
* https://apple.stackexchange.com/questions/353040/how-to-get-error-status-back-to-bash-from-osascript | |
* https://apple.stackexchange.com/a/353057/60276 | |
`error number` always returns exit code 1, regardless of its argument. | |
" | |
" | |
on run argv | |
display alert (item 1 of argv) buttons {\"No\", \"Yes\"} giving up after 600 | |
if button returned of result = \"No\" then | |
error number 1 | |
else | |
if button returned of result = \"Yes\" then | |
end if | |
end if | |
end run | |
") | |
(defn yes-no? [question] | |
(-> (shell/sh "osascript" "-s" "o" "-e" | |
yes-no-dialog:scpt | |
question) | |
:exit | |
(case 1 false | |
0 true))) | |
(comment | |
(when (yes-no? "Delete database?")) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment