main
parent
a7eac58419
commit
34f1f7c3c1
@ -0,0 +1,38 @@
|
||||
(local {: application : eventtap : execute : logger : pasteboard : uielement}
|
||||
hs)
|
||||
|
||||
(local log (logger.new :utils :info))
|
||||
|
||||
(fn chomp [s]
|
||||
"Returns the input without a trailing newline"
|
||||
(if (= (s:sub -1) "\n")
|
||||
(s:sub 1 -2)
|
||||
s))
|
||||
|
||||
;; paste content, preserving the previous pasteboard
|
||||
(fn paste [content]
|
||||
(let [prev-pasteboard (pasteboard.getContents)]
|
||||
(pasteboard.setContents content)
|
||||
(eventtap.keyStroke [:cmd] :v)
|
||||
(pasteboard.setContents prev-pasteboard)))
|
||||
|
||||
(fn replace-selection [cb]
|
||||
"Replaces the current selection with the return value of the callback"
|
||||
(let [app (application.frontmostApplication)
|
||||
prev-pasteboard (pasteboard.getContents)
|
||||
e (uielement.focusedElement)
|
||||
text (if e (e:selectedText)
|
||||
(do
|
||||
(eventtap.keyStroke [:cmd] :c)
|
||||
(pasteboard.getContents)))
|
||||
content (cb text prev-pasteboard)]
|
||||
(paste content)
|
||||
(pasteboard.setContents prev-pasteboard)))
|
||||
|
||||
(fn run [...]
|
||||
"Executes a list of commands"
|
||||
(accumulate [last nil _ cmd (ipairs [...])]
|
||||
(execute cmd)))
|
||||
|
||||
{: chomp : paste : replace-selection : run}
|
||||
|
Loading…
Reference in new issue