parent
dc4f2ea4a0
commit
dd61da4eeb
@ -0,0 +1,88 @@
|
|||||||
|
;; https://github.com/rktjmp/hotpot.nvim/blob/master/COOKBOOK.md#using-hotpot-reflect
|
||||||
|
|
||||||
|
;; Open session and attach input in one step.
|
||||||
|
;; Note the complexity here is mostly due to nvim not having an api to create a
|
||||||
|
;; split window, so we must shuffle some code to create a buf, pair input and output
|
||||||
|
;; then put that buf inside a window.
|
||||||
|
; (local reflect-session {:id nil :mode :compile})
|
||||||
|
; (fn new-or-attach-reflect []
|
||||||
|
; (let [{: api} vim
|
||||||
|
; reflect (require :hotpot.api.reflect)
|
||||||
|
; with-session-id (if reflect-session.id
|
||||||
|
; (fn [f]
|
||||||
|
; ;; session id already exists, so we can just pass
|
||||||
|
; ;; it to whatever needs it
|
||||||
|
; (f reflect-session.id))
|
||||||
|
; (fn [f]
|
||||||
|
; ;; session id does not exist, so we need to create
|
||||||
|
; ;; an output buffer first then we can pass the
|
||||||
|
; ;; session id on, and finally hook up the output
|
||||||
|
; ;; buffer to a window
|
||||||
|
; (let [buf (api.nvim_create_buf true true)
|
||||||
|
; id (reflect.attach-output buf)]
|
||||||
|
; (set reflect-session.id id)
|
||||||
|
; (f id)
|
||||||
|
; ;; create window, which will forcibly assume focus, swap the buffer
|
||||||
|
; ;; to our output buffer and setup an autocommand to drop the session id
|
||||||
|
; ;; when the session window is closed.
|
||||||
|
; (vim.schedule #(do
|
||||||
|
; (api.nvim_command "botright vnew")
|
||||||
|
; (api.nvim_win_set_buf (api.nvim_get_current_win) buf)
|
||||||
|
; (api.nvim_create_autocmd :BufWipeout
|
||||||
|
; {:buffer buf
|
||||||
|
; :once true
|
||||||
|
; :callback #(set reflect-session.id nil)}))))))]
|
||||||
|
; ;; we want to set the session mode to our current mode, and attach the
|
||||||
|
; ;; input buffer once we have a session id
|
||||||
|
; (with-session-id (fn [session-id]
|
||||||
|
; ;; we manually set the mode each time so it is persisted if we close the session.
|
||||||
|
; ;; By default `reflect` will use compile mode.
|
||||||
|
; (reflect.set-mode session-id reflect-session.mode)
|
||||||
|
; (reflect.attach-input session-id 0)))))
|
||||||
|
; (vim.keymap.set :v :hr new-or-attach-reflect)
|
||||||
|
|
||||||
|
; (fn swap-reflect-mode []
|
||||||
|
; (let [reflect (require :hotpot.api.reflect)]
|
||||||
|
; ;; only makes sense to do this when we have a session active
|
||||||
|
; (when reflect-session.id
|
||||||
|
; ;; swap held mode
|
||||||
|
; (if (= reflect-session.mode :compile)
|
||||||
|
; (set reflect-session.mode :eval)
|
||||||
|
; (set reflect-session.mode :compile))
|
||||||
|
; ;; tell session to use new mode
|
||||||
|
; (reflect.set-mode reflect-session.id reflect-session.mode))))
|
||||||
|
; (vim.keymap.set :n :hx swap-reflect-mode)
|
||||||
|
|
||||||
|
;; https://github.com/rktjmp/hotpot.nvim/blob/master/COOKBOOK.md#using-the-api
|
||||||
|
|
||||||
|
(fn pecho [ok? ...]
|
||||||
|
"nvim_echo vargs, as DiagnosticHint or DiagnosticError depending on ok?"
|
||||||
|
(let [{: nvim_echo} vim.api
|
||||||
|
{: view} (require :hotpot.fennel)
|
||||||
|
hl (if ok? :DiagnosticHint :DiagnosticError)
|
||||||
|
list [...]
|
||||||
|
output (fcollect [i 1 (select "#" ...)]
|
||||||
|
(-> (. list i)
|
||||||
|
(#(match (type $1)
|
||||||
|
:table (view $1)
|
||||||
|
_ (tostring $1)))
|
||||||
|
(.. "\n")))]
|
||||||
|
(nvim_echo (icollect [_ l (ipairs output)]
|
||||||
|
[l hl]) true {})))
|
||||||
|
|
||||||
|
(vim.keymap.set :n :heb #(let [{: eval-buffer} (require :hotpot.api.eval)]
|
||||||
|
(pecho (eval-buffer 0)))
|
||||||
|
{:desc "Evaluate entire buffer"})
|
||||||
|
|
||||||
|
(vim.keymap.set :v :hes #(let [{: eval-selection} (require :hotpot.api.eval)]
|
||||||
|
(pecho (eval-selection)))
|
||||||
|
{:desc "Evaluate selection"})
|
||||||
|
|
||||||
|
(vim.keymap.set :n :hcb #(let [{: compile-buffer} (require :hotpot.api.compile)]
|
||||||
|
(pecho (compile-buffer 0)))
|
||||||
|
{:desc "Compile entire buffer"})
|
||||||
|
|
||||||
|
(vim.keymap.set :v :hcs #(let [{: compile-selection} (require :hotpot.api.compile)]
|
||||||
|
(pecho (compile-selection)))
|
||||||
|
{:desc "Compile selection"})
|
||||||
|
|
Loading…
Reference in new issue