summaryrefslogtreecommitdiff
path: root/fnl/conf/wictl-nvim/term.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'fnl/conf/wictl-nvim/term.fnl')
-rw-r--r--fnl/conf/wictl-nvim/term.fnl51
1 files changed, 47 insertions, 4 deletions
diff --git a/fnl/conf/wictl-nvim/term.fnl b/fnl/conf/wictl-nvim/term.fnl
index 1aea597..51e263a 100644
--- a/fnl/conf/wictl-nvim/term.fnl
+++ b/fnl/conf/wictl-nvim/term.fnl
@@ -1,11 +1,54 @@
-(local ui-bld (require :conf.wict-nvim))
+(tset package.loaded :conf.wict-nvim nil)
+(local ui (require :conf.wict-nvim))
+(tset package.loaded :conf.wict-nvim.effects nil)
(local ui-eff (require :conf.wict-nvim.effects))
+
+(tset package.loaded :conf.wictl-nvim nil)
+(local wictl (require :conf.wictl-nvim))
+
+(local Resolver (require :conf.wictl-nvim.resolvers))
+(local ui-bld ui.builder)
(local M {})
(local ProjectBufs {})
-(local ui (-> (ui-bld.For {:buffer M.selected-buffer})))
+(var selected nil)
+(local term-ui (-> (ui-bld.For {:buffer (fn [] selected)
+ :maps [{:mode [:n :v :o]
+ :lhs :q
+ :rhs (fn [effects window]
+ (fn []
+ (P :quitting!)
+ (effects:close)))}]})
+ (ui-bld.Padding 2)
+ (ui-bld.Build (ui-eff:new))))
+
+(fn M.open [idx]
+ (local new-term-buf (fn []
+ (local (buf_handle term_handle) (M.start idx))
+ (tset ProjectBufs (Resolver.project_key) idx
+ {: buf_handle : term_handle})
+ {: buf_handle : term_handle}))
+ (local proj (or (. ProjectBufs (Resolver.project_key))
+ (do
+ (local p [])
+ (tset ProjectBufs (Resolver.project_key) p)
+ p)))
+ (var term (or (. proj idx) (new-term-buf)))
+ (if (or (not (vim.api.nvim_buf_is_valid term.buf_handle))
+ (not (vim.api.nvim_buf_get_var term.buf_handle :terminal_job_id)))
+ (set term (new-term-buf)))
+ (set selected term.buf_handle)
+ (term-ui ui.root-frame))
-(fn M.open [idx])
-(fn M.start [])
+(fn M.start [idx]
+ (P :starting)
+ (local term (. (wictl.Get-Terms-Config) idx))
+ (local prestart-buf (vim.api.nvim_get_current_buf))
+ (vim.cmd (.. "edit term://" term.cmd))
+ (local buf_handle (vim.api.nvim_get_current_buf))
+ (local term_handle vim.b.terminal_job_id)
+ (vim.api.nvim_buf_set_option buf_handle :bufhidden :hide)
+ (vim.api.nvim_set_current_buf prestart-buf)
+ (values buf_handle term_handle))
M