|
|
|
;; https://stackoverflow.com/questions/39464668/how-to-get-bundle-id-of-mac-application
|
|
|
|
;; osascript -e 'id of app "SomeApp"'
|
|
|
|
;; mdls -name kMDItemCFBundleIdentifier -r SomeApp.app
|
|
|
|
;; (. (hs.application.infoForBundlePath "/path/to/app") :CFBundleIdentifier)
|
|
|
|
|
|
|
|
(local bundle-ids {:firefox-dev :org.mozilla.firefoxdeveloperedition
|
|
|
|
:firefox :org.mozilla.firefox
|
|
|
|
:safari :com.apple.Safari
|
|
|
|
:zoom :us.zoom.xos})
|
|
|
|
|
|
|
|
(var handlers [])
|
|
|
|
|
|
|
|
(fn run [bin url]
|
|
|
|
(let [prog (.. bin " '" url "'")
|
|
|
|
handle (io.popen prog)]
|
|
|
|
(handle:read :*a)))
|
|
|
|
|
|
|
|
(fn de-utm [url]
|
|
|
|
(run "~/.dotfiles/bin/de-utm" url))
|
|
|
|
|
|
|
|
(fn follow-redirects [url]
|
|
|
|
(run "curl --location --silent -o /dev/null -w %{url_effective}" url))
|
|
|
|
|
|
|
|
(fn open-url [app url]
|
|
|
|
(let [bundle-id (. bundle-ids app)]
|
|
|
|
(hs.urlevent.openURLWithBundle url bundle-id)))
|
|
|
|
|
|
|
|
(fn open-with [app]
|
|
|
|
(partial open-url app))
|
|
|
|
|
|
|
|
;; fnlfmt: skip
|
|
|
|
(local default-handlers
|
|
|
|
[["^https://.*%.?zoom.us/j/%d+" (open-with :zoom)]
|
|
|
|
["^https://doi.org/" #((open-with :default) (.. "https://sci-hub.st/" $1))]])
|
|
|
|
|
|
|
|
(fn url->handler [url]
|
|
|
|
(accumulate [acc nil _ [pat handler] (ipairs handlers) &until acc]
|
|
|
|
(if (url:find pat) #(handler url) nil)))
|
|
|
|
|
|
|
|
(fn handle-url [url]
|
|
|
|
(let [handler (or (url->handler url) #(open-url :default url))]
|
|
|
|
(handler)))
|
|
|
|
|
|
|
|
(fn setup [{:bundle-ids extra-bundle-ids :handlers extra-handlers}]
|
|
|
|
(each [k v (pairs (or extra-bundle-ids {}))]
|
|
|
|
(tset bundle-ids k v))
|
|
|
|
(set handlers (hs.fnutils.concat extra-handlers default-handlers)))
|
|
|
|
|
|
|
|
(fn start []
|
|
|
|
(set hs.urlevent.httpCallback
|
|
|
|
(fn [scheme host params url]
|
|
|
|
(let [clean-url (de-utm url)]
|
|
|
|
(handle-url clean-url)))))
|
|
|
|
|
|
|
|
;; example usage
|
|
|
|
;;
|
|
|
|
;; (let [{: setup : start : open-with} (require :handle-urls)]
|
|
|
|
;; (setup {:bundle-ids {:default :org.mozilla.firefoxdeveloperedition}
|
|
|
|
;; :handlers [["^https://.*%.?discnw.org/" (open-with :safari)]
|
|
|
|
;; ["^https://squareup.com/" (open-with :safari)]
|
|
|
|
;; ["^https://.*%.?bulletin.com/" (open-with :safari)]]})
|
|
|
|
;; (start))
|
|
|
|
|
|
|
|
{: setup : start : open-url : open-with}
|
|
|
|
|