From ed09c3ecc940138fda9a63288ec1df18ea9d8f38 Mon Sep 17 00:00:00 2001 From: Mike Vink <> Date: Tue, 11 Apr 2023 22:39:59 +0200 Subject: move stuff --- fnl/conf/exctl/builder.fnl | 76 ---------------------------- fnl/conf/exctl/effects.fnl | 76 ---------------------------- fnl/conf/exctl/frames/frame.fnl | 61 ----------------------- fnl/conf/exctl/frames/vec.fnl | 28 ----------- fnl/conf/exctl/init.fnl | 28 ----------- fnl/conf/wict-nvim/builder.fnl | 99 +++++++++++++++++++++++++++++++++++++ fnl/conf/wict-nvim/effects.fnl | 76 ++++++++++++++++++++++++++++ fnl/conf/wict-nvim/frames/frame.fnl | 61 +++++++++++++++++++++++ fnl/conf/wict-nvim/frames/vec.fnl | 28 +++++++++++ fnl/conf/wict-nvim/init.fnl | 33 +++++++++++++ fnl/conf/wictl-nvim/init.fnl | 30 +++++++++++ 11 files changed, 327 insertions(+), 269 deletions(-) delete mode 100644 fnl/conf/exctl/builder.fnl delete mode 100644 fnl/conf/exctl/effects.fnl delete mode 100644 fnl/conf/exctl/frames/frame.fnl delete mode 100644 fnl/conf/exctl/frames/vec.fnl delete mode 100644 fnl/conf/exctl/init.fnl create mode 100644 fnl/conf/wict-nvim/builder.fnl create mode 100644 fnl/conf/wict-nvim/effects.fnl create mode 100644 fnl/conf/wict-nvim/frames/frame.fnl create mode 100644 fnl/conf/wict-nvim/frames/vec.fnl create mode 100644 fnl/conf/wict-nvim/init.fnl create mode 100644 fnl/conf/wictl-nvim/init.fnl (limited to 'fnl') diff --git a/fnl/conf/exctl/builder.fnl b/fnl/conf/exctl/builder.fnl deleted file mode 100644 index eb02b2b..0000000 --- a/fnl/conf/exctl/builder.fnl +++ /dev/null @@ -1,76 +0,0 @@ -(tset package.loaded :conf.exctl.frames.frame nil) -(local vec (require :conf.exctl.frames.vec)) -(local frame (require :conf.exctl.frames.frame)) -(local m {}) - -;; Creates a new painter that wraps the paint and close methods of a painter -(local transform-painter (fn [painter ori width height] - (fn [frm] - (local coord (frame.frame->coord frm)) - (local new-ori (coord ori)) - (local new-frame - (frame new-ori - (vec.sub (coord width) new-ori) - (vec.sub (coord height) new-ori))) - (painter new-frame)))) - -(local pad (fn [painter pad-size] - (fn [frm] - (local pad-width (/ pad-size (frame.width frm))) - (local pad-height (/ pad-size (frame.height frm))) - (local transformed - (transform-painter painter (vec.vec pad-width pad-height) - (vec.vec (- 1 pad-width) pad-height) - (vec.vec pad-width (- 1 pad-height)))) - (transformed frm)))) - -(local builder {}) -;; -(fn builder.For [self partial-painter ...] - (table.insert self.partial-painters partial-painter) - self) - -(fn builder.Padding [self size] - (table.insert self.partial-painters {:op :pad : size}) - self) - -(fn builder.Beside [self partial-builder] - (table.insert self.partial-painters {:op :beside : partial-builder}) - self) - -(fn builder.build-painter [self effects] - (accumulate [painter (fn [frame] (print :leaf-painter)) _ partial-painter (ipairs self.partial-painters)] - (do - (match partial-painter - {:op :pad : size} (do - (pad painter size)) - {:op :beside : partial-builder} (do - (P (partial-builder:build-painter effects)) - painter) - {: maps : buffer} (do - (local window (effects:new-window maps)) - (local painter-ptr painter) - (fn [frm] - (local frame-opts - (frame.frame->open-win-options frm)) - (local buf (buffer)) - (if (not (window:open?)) - (window:open buf frame-opts) - (window:repaint buf frame-opts)) - (painter-ptr frm))) - _ painter)))) - -(fn builder.Build [self effects] - ;; TODO(mike): probably nice to model effects as pub sub pattern to make it rely less on references to mutable tables. - (local painter (self:build-painter effects)) - (fn [frm] - (effects:attach) - (painter frm))) - -(fn builder.new [self] - (local bldr {:partial-painters []}) - (setmetatable bldr self) - (set self.__index self) - bldr) - -builder diff --git a/fnl/conf/exctl/effects.fnl b/fnl/conf/exctl/effects.fnl deleted file mode 100644 index 160fbce..0000000 --- a/fnl/conf/exctl/effects.fnl +++ /dev/null @@ -1,76 +0,0 @@ -(local m {}) -(local window {}) - -(local aug vim.api.nvim_create_augroup) -(local del-aug vim.api.nvim_del_augroup_by_id) -(local au vim.api.nvim_create_autocmd) -(local winvar (fn [...] (pcall vim.api.nvim_win_get_var ...))) -(local unmap (fn [{: mode : lhs : opts}] (pcall vim.keymap.del mode lhs opts))) -(local map (fn [mode lhs rhs opts] (vim.keymap.set mode lhs rhs opts))) - -(fn window.close [self] - (if (self:open?) - (set self.handle (vim.api.nvim_win_close self.handle true)))) - -(fn window.open [self buf frame] - (set frame.style :minimal) - (set self.handle (vim.api.nvim_open_win buf false frame)) - (vim.api.nvim_win_set_var self.handle :effect-window self) - (if self.enter - (vim.api.nvim_set_current_win self.handle))) - -(fn window.id [self] - self.handle) - -(fn window.open? [self] - (if self.handle - (vim.api.nvim_win_is_valid self.handle) false)) - -(fn window.new [self i enter maps] - (local w (setmetatable {: i : enter : maps} window)) - (set self.__index self) - w) - -(fn m.new-window [self maps] - (local w (window:new (+ (length self.windows) 1) (= (length self.windows) 0) - maps)) - (table.insert self.windows w) - w) - -(fn m.close [self] - (each [_ w (ipairs self.windows)] - (w:close)) - (if self.augroup - (set self.augroup (del-aug self.augroup))) - (if self.unmap - (set self.unmap (self.unmap)))) - -(fn m.attach [self] - (set self.augroup (aug :EffectsMgr {:clear true})) - (au [:WinEnter :BufEnter] - {:group self.augroup - :pattern "*" - :callback (fn [cb-info] - (local (ok? win) (winvar 0 :effect-window)) - (if (not ok?) - (self:close) - (do - (if win.maps - (self:win-maps win)))))})) - -(fn m.win-maps [self win] - (if self.unmap - (self.unmap)) - (set self.unmap (fn [] - (each [_ m (ipairs win.maps)] - (unmap m)))) - (each [_ {: mode : lhs : rhs : opts} (ipairs win.maps)] - (map mode lhs (rhs self win) opts))) - -(fn m.new [self opts] - (local effects {:windows []}) - (setmetatable effects self) - (set self.__index self) - effects) - -m diff --git a/fnl/conf/exctl/frames/frame.fnl b/fnl/conf/exctl/frames/frame.fnl deleted file mode 100644 index e7cd1e9..0000000 --- a/fnl/conf/exctl/frames/frame.fnl +++ /dev/null @@ -1,61 +0,0 @@ -(local vec (require :conf.exctl.frames.vec)) -(local m {}) -(local frame {}) - -;; frame is interpreted as matrix coords -;; origin ------------------> ne-edge -;; | -;; | -;; | -;; | -;; | -;; | -;;\ / -;; . -;; sw-edge -(fn frame.make [self ori width height] - (local f {: ori : width : height}) - (setmetatable f self) - (set self.__index self) - f) - -(fn frame.origin [f] - f.ori) - -(fn frame.width-edge [f] - f.width) - -(fn frame.height-edge [f] - f.height) - -(fn m.frame->coord [f] - (fn [v] - (vec.add (f:origin) - (vec.add (vec.scale (v:x-coord) (f:width-edge)) - (vec.scale (v:y-coord) (f:height-edge)))))) - -(fn m.width [f] - (let [width-edge (f:width-edge)] - (width-edge:x-coord))) - -(fn m.height [f] - (let [height-edge (f:height-edge)] - (height-edge:y-coord))) - -(fn m.frame->open-win-options [f anchor] - (local coord (m.frame->coord f)) - (local ori (f:origin)) - (local width-edge (f:width-edge)) - (local height-edge (f:height-edge)) - (local anchor (or anchor :NW)) - {:width (width-edge:x-coord) - :height (height-edge:y-coord) - :col (ori:x-coord) - :row (ori:y-coord) - : anchor - :relative :editor}) - -(setmetatable m {:__call (fn [self ...] - (frame:make ...))}) - -m diff --git a/fnl/conf/exctl/frames/vec.fnl b/fnl/conf/exctl/frames/vec.fnl deleted file mode 100644 index 4a9515d..0000000 --- a/fnl/conf/exctl/frames/vec.fnl +++ /dev/null @@ -1,28 +0,0 @@ -(local m {}) -(local vec {}) - -(fn vec.make [self x y] - (local v {: x : y}) - (setmetatable v self) - (set self.__index self) - v) - -(fn vec.x-coord [v] - v.x) - -(fn vec.y-coord [v] - v.y) - -(fn m.add [v1 v2] - (vec:make (+ (v1:x-coord) (v2:x-coord)) (+ (v1:y-coord) (v2:y-coord)))) - -(fn m.sub [v1 v2] - (vec:make (- (v1:x-coord) (v2:x-coord)) (- (v1:y-coord) (v2:y-coord)))) - -(fn m.scale [a v] - (vec:make (math.floor (* a (v:x-coord))) (math.floor (* a (v:y-coord))))) - -(fn m.vec [...] - (vec:make ...)) - -m diff --git a/fnl/conf/exctl/init.fnl b/fnl/conf/exctl/init.fnl deleted file mode 100644 index 0e07bba..0000000 --- a/fnl/conf/exctl/init.fnl +++ /dev/null @@ -1,28 +0,0 @@ -(tset package.loaded :conf.exctl.frames.vec nil) -(local vec (require :conf.exctl.frames.vec)) - -(tset package.loaded :conf.exctl.frames.frame nil) -(local frame (require :conf.exctl.frames.frame)) - -(tset package.loaded :conf.exctl.builder nil) -(local builder (require :conf.exctl.builder)) - -(tset package.loaded :conf.exctl.effects nil) -(local effects (require :conf.exctl.effects)) - -(local root-frame (frame (vec.vec 0 0) (vec.vec vim.o.columns 0) - (vec.vec 0 vim.o.lines))) - -(local painter (-> (builder:new) - (builder.For {:buffer (fn [] 0) - :maps [{:mode [:n :v :o] - :lhs :q - :rhs (fn [effects window] - (fn [] - (effects:close)))}]}) - (builder.Padding 5) - (builder.Beside (-> (builder:new) - (builder.For {:buffer (fn [] 0)}))) - (builder.Build (effects:new)))) - -(painter root-frame) diff --git a/fnl/conf/wict-nvim/builder.fnl b/fnl/conf/wict-nvim/builder.fnl new file mode 100644 index 0000000..177b773 --- /dev/null +++ b/fnl/conf/wict-nvim/builder.fnl @@ -0,0 +1,99 @@ +(tset package.loaded :conf.wict-nvim.frames.frame nil) +(local vec (require :conf.wict-nvim.frames.vec)) +(local frame (require :conf.wict-nvim.frames.frame)) +(local m {}) + +;; Creates a new painter that wraps the paint and close methods of a painter +(local transform-painter (fn [painter ori width height] + (fn [frm] + (local coord (frame.frame->coord frm)) + (local new-ori (coord ori)) + (local new-frame + (frame new-ori + (vec.sub (coord width) new-ori) + (vec.sub (coord height) new-ori))) + (painter new-frame)))) + +(local pad (fn [painter pad-size] + (fn [frm] + (local pad-width (/ pad-size (frame.width frm))) + (local pad-height (/ pad-size (frame.height frm))) + (local transformed + (transform-painter painter (vec.vec pad-width pad-height) + (vec.vec (- 1 pad-width) pad-height) + (vec.vec pad-width (- 1 pad-height)))) + (transformed frm)))) + +(local beside (fn [p1 p2 size] + (local size (or size 0.5)) + (local left + (transform-painter p1 (vec.vec 0 0) (vec.vec size 0) + (vec.vec 0 1))) + (local right + (transform-painter p2 (vec.vec size 0) (vec.vec 1 0) + (vec.vec size 1))) + (fn [frm] + (left frm) + (right frm)))) + +(local builder {}) + +(fn builder.Padding [self size] + (table.insert self.partial-painters {:op :pad : size}) + self) + +(fn builder.Beside [self partial-builder size] + (table.insert self.partial-painters {:op :beside : partial-builder : size}) + self) + +(fn builder.LeftOf [self partial-builder size] + (table.insert self.partial-painters {:op :left : partial-builder : size}) + self) + +(fn builder.RightOf [self partial-builder size] + (table.insert self.partial-painters {:op :right : partial-builder : size}) + self) + +(fn builder.build-painter [self effects] + (accumulate [painter (fn [frame] (print :leaf-painter)) _ partial-painter (ipairs self.partial-painters)] + (do + (match partial-painter + {:op :pad : size} (do + (pad painter size)) + {:op :left : partial-builder} (do + (beside painter + (partial-builder:build-painter effects) + partial-painter.size)) + {:op :right : partial-builder} (do + (beside (partial-builder:build-painter effects) + painter partial-painter.size)) + {:op :beside : partial-builder} (do + (beside painter + (partial-builder:build-painter effects) + partial-painter.size)) + {: maps : buffer} (do + (local window (effects:new-window maps)) + (local painter-ptr painter) + (fn [frm] + (local frame-opts + (frame.frame->open-win-options frm)) + (local buf (buffer)) + (if (not (window:open?)) + (window:open buf frame-opts) + (window:repaint buf frame-opts)) + (painter-ptr frm))) + _ painter)))) + +(fn builder.Build [self effects] + (local painter (self:build-painter effects)) + (fn [frm] + (effects:attach) + (painter frm))) + +(fn builder.For [partial-painter] + (local bldr {:partial-painters [partial-painter]}) + (setmetatable bldr builder) + (set builder.__index builder) + bldr) + +builder diff --git a/fnl/conf/wict-nvim/effects.fnl b/fnl/conf/wict-nvim/effects.fnl new file mode 100644 index 0000000..160fbce --- /dev/null +++ b/fnl/conf/wict-nvim/effects.fnl @@ -0,0 +1,76 @@ +(local m {}) +(local window {}) + +(local aug vim.api.nvim_create_augroup) +(local del-aug vim.api.nvim_del_augroup_by_id) +(local au vim.api.nvim_create_autocmd) +(local winvar (fn [...] (pcall vim.api.nvim_win_get_var ...))) +(local unmap (fn [{: mode : lhs : opts}] (pcall vim.keymap.del mode lhs opts))) +(local map (fn [mode lhs rhs opts] (vim.keymap.set mode lhs rhs opts))) + +(fn window.close [self] + (if (self:open?) + (set self.handle (vim.api.nvim_win_close self.handle true)))) + +(fn window.open [self buf frame] + (set frame.style :minimal) + (set self.handle (vim.api.nvim_open_win buf false frame)) + (vim.api.nvim_win_set_var self.handle :effect-window self) + (if self.enter + (vim.api.nvim_set_current_win self.handle))) + +(fn window.id [self] + self.handle) + +(fn window.open? [self] + (if self.handle + (vim.api.nvim_win_is_valid self.handle) false)) + +(fn window.new [self i enter maps] + (local w (setmetatable {: i : enter : maps} window)) + (set self.__index self) + w) + +(fn m.new-window [self maps] + (local w (window:new (+ (length self.windows) 1) (= (length self.windows) 0) + maps)) + (table.insert self.windows w) + w) + +(fn m.close [self] + (each [_ w (ipairs self.windows)] + (w:close)) + (if self.augroup + (set self.augroup (del-aug self.augroup))) + (if self.unmap + (set self.unmap (self.unmap)))) + +(fn m.attach [self] + (set self.augroup (aug :EffectsMgr {:clear true})) + (au [:WinEnter :BufEnter] + {:group self.augroup + :pattern "*" + :callback (fn [cb-info] + (local (ok? win) (winvar 0 :effect-window)) + (if (not ok?) + (self:close) + (do + (if win.maps + (self:win-maps win)))))})) + +(fn m.win-maps [self win] + (if self.unmap + (self.unmap)) + (set self.unmap (fn [] + (each [_ m (ipairs win.maps)] + (unmap m)))) + (each [_ {: mode : lhs : rhs : opts} (ipairs win.maps)] + (map mode lhs (rhs self win) opts))) + +(fn m.new [self opts] + (local effects {:windows []}) + (setmetatable effects self) + (set self.__index self) + effects) + +m diff --git a/fnl/conf/wict-nvim/frames/frame.fnl b/fnl/conf/wict-nvim/frames/frame.fnl new file mode 100644 index 0000000..d32c9b5 --- /dev/null +++ b/fnl/conf/wict-nvim/frames/frame.fnl @@ -0,0 +1,61 @@ +(local vec (require :conf.wict-nvim.frames.vec)) +(local m {}) +(local frame {}) + +;; frame is interpreted as matrix coords +;; origin ------------------> ne-edge +;; | +;; | +;; | +;; | +;; | +;; | +;;\ / +;; . +;; sw-edge +(fn frame.make [self ori width height] + (local f {: ori : width : height}) + (setmetatable f self) + (set self.__index self) + f) + +(fn frame.origin [f] + f.ori) + +(fn frame.width-edge [f] + f.width) + +(fn frame.height-edge [f] + f.height) + +(fn m.frame->coord [f] + (fn [v] + (vec.add (f:origin) + (vec.add (vec.scale (v:x-coord) (f:width-edge)) + (vec.scale (v:y-coord) (f:height-edge)))))) + +(fn m.width [f] + (let [width-edge (f:width-edge)] + (width-edge:x-coord))) + +(fn m.height [f] + (let [height-edge (f:height-edge)] + (height-edge:y-coord))) + +(fn m.frame->open-win-options [f anchor] + (local coord (m.frame->coord f)) + (local ori (f:origin)) + (local width-edge (f:width-edge)) + (local height-edge (f:height-edge)) + (local anchor (or anchor :NW)) + {:width (width-edge:x-coord) + :height (height-edge:y-coord) + :col (ori:x-coord) + :row (ori:y-coord) + : anchor + :relative :editor}) + +(setmetatable m {:__call (fn [self ...] + (frame:make ...))}) + +m diff --git a/fnl/conf/wict-nvim/frames/vec.fnl b/fnl/conf/wict-nvim/frames/vec.fnl new file mode 100644 index 0000000..4a9515d --- /dev/null +++ b/fnl/conf/wict-nvim/frames/vec.fnl @@ -0,0 +1,28 @@ +(local m {}) +(local vec {}) + +(fn vec.make [self x y] + (local v {: x : y}) + (setmetatable v self) + (set self.__index self) + v) + +(fn vec.x-coord [v] + v.x) + +(fn vec.y-coord [v] + v.y) + +(fn m.add [v1 v2] + (vec:make (+ (v1:x-coord) (v2:x-coord)) (+ (v1:y-coord) (v2:y-coord)))) + +(fn m.sub [v1 v2] + (vec:make (- (v1:x-coord) (v2:x-coord)) (- (v1:y-coord) (v2:y-coord)))) + +(fn m.scale [a v] + (vec:make (math.floor (* a (v:x-coord))) (math.floor (* a (v:y-coord))))) + +(fn m.vec [...] + (vec:make ...)) + +m diff --git a/fnl/conf/wict-nvim/init.fnl b/fnl/conf/wict-nvim/init.fnl new file mode 100644 index 0000000..bf712e2 --- /dev/null +++ b/fnl/conf/wict-nvim/init.fnl @@ -0,0 +1,33 @@ +(tset package.loaded :conf.wict-nvim.frames.vec nil) +(local vec (require :conf.wict-nvim.frames.vec)) + +(tset package.loaded :conf.wict-nvim.frames.frame nil) +(local frame (require :conf.wict-nvim.frames.frame)) + +(tset package.loaded :conf.wict-nvim.builder nil) +(local builder (require :conf.wict-nvim.builder)) + +(tset package.loaded :conf.wict-nvim.effects nil) +(local effects (require :conf.wict-nvim.effects)) + +(local m {}) + +(local root-frame (frame (vec.vec 0 0) (vec.vec vim.o.columns 0) + (vec.vec 0 vim.o.lines))) + +(local painter (-> (builder.For {:buffer (fn [] 0) + :maps [{:mode [:n :v :o] + :lhs :q + :rhs (fn [effects window] + (fn [] + (effects:close)))}]}) + (builder.Beside (-> (builder.For {:buffer (fn [] 0) + :maps []})) + 0.5) + (builder.Padding 5) + (builder.Build (effects:new)))) + +; (painter root-frame) +{: root-frame + : builder + : effects} diff --git a/fnl/conf/wictl-nvim/init.fnl b/fnl/conf/wictl-nvim/init.fnl new file mode 100644 index 0000000..a6aca91 --- /dev/null +++ b/fnl/conf/wictl-nvim/init.fnl @@ -0,0 +1,30 @@ +(tset package.loaded :conf.wict-nvim nil) +(local wict (require :conf.wict-nvim)) + +(local bld wict.builder) +(local eff wict.effects) + +(local m {}) + +(local WictlConfig {}) +;; { +;; ["/path/to/project"] = { +;; jobs = [...] +;; terms = [{cmd = "k9s"}] +;; } +(var last-buf -1) +(local ui (-> (bld.For {:buffer (fn [] (P last-buf) + last-buf) + :maps [{:mode [:n :v :o] + :lhs :q + :rhs (fn [effects window] + (fn [] (effects:close)))}]}) + (bld.Padding 1) + (bld.RightOf (-> (bld.For {:buffer (fn [] + (P last-buf) + last-buf) + :maps []}) + (bld.Padding 1)) 0.2) + (bld.Build (eff:new)))) + +(ui wict.root-frame) -- cgit v1.2.3