mirror of
https://mzte.de/git/LordMZTE/dotfiles.git
synced 2024-09-27 20:48:53 +02:00
mzte-nv: add fennel and lua eval functionality
This commit is contained in:
parent
311deb4421
commit
04febcfcb5
5 changed files with 85 additions and 1 deletions
|
@ -5,3 +5,4 @@
|
|||
(require :maps)
|
||||
(require :lsp)
|
||||
(require :pipe)
|
||||
(require :eval)
|
||||
|
|
23
mzte-nv/conf/lua/eval.fnl
Normal file
23
mzte-nv/conf/lua/eval.fnl
Normal file
|
@ -0,0 +1,23 @@
|
|||
(local fnl-eval (. (require :mzte_nv) :fennel :eval))
|
||||
(vim.api.nvim_create_user_command :Fnl (fn [args] (fnl-eval args.args))
|
||||
{:nargs "+"})
|
||||
|
||||
(fn insert-at-cursor [txt]
|
||||
(let [[_ row col _ _] (vim.fn.getcurpos)
|
||||
rpos {:line (- row 1) :character (- col 1)}
|
||||
range {:start rpos :end rpos}]
|
||||
(vim.lsp.util.apply_text_edits [{: range :newText (tostring txt)}] 0 :utf-8)))
|
||||
|
||||
;; Fennel Eval
|
||||
(vim.keymap.set :i :<C-f>
|
||||
(fn []
|
||||
(vim.ui.input {:prompt "fnleval> "}
|
||||
(fn [inp]
|
||||
(insert-at-cursor (fnl-eval inp))))))
|
||||
|
||||
;; Lua Eval
|
||||
(vim.keymap.set :i :<C-l>
|
||||
(fn []
|
||||
(vim.ui.input {:prompt "luaeval> "}
|
||||
(fn [inp]
|
||||
(insert-at-cursor (vim.fn.luaeval inp))))))
|
|
@ -8,7 +8,11 @@
|
|||
(or ;; INFO level
|
||||
(= notif.level :info) (and notif.opts notif.opts.mzte_nv_mini)))
|
||||
|
||||
(noice.setup {:messages {:view :mini}
|
||||
(noice.setup {:cmdline {:format {:fnl {:pattern "^:%s*Fnl%s+"
|
||||
:icon "🌜"
|
||||
:lang :fennel
|
||||
:title :Fennel}}}
|
||||
:messages {:view :mini}
|
||||
:lsp {:override (collect [_ o (ipairs overrides)] (values o true))}
|
||||
:routes [;; Redirect DAP messages to mini view
|
||||
{:filter {:event :notify :cond show-mini?} :view :mini}]
|
||||
|
|
|
@ -11,6 +11,7 @@ const modules = struct {
|
|||
const cmp = @import("modules/cmp.zig");
|
||||
const compile = @import("modules/compile.zig");
|
||||
const cpbuf = @import("modules/cpbuf.zig");
|
||||
const fennel = @import("modules/fennel.zig");
|
||||
const jdtls = @import("modules/jdtls.zig");
|
||||
const tsn_actions = @import("modules/tsn_actions.zig");
|
||||
const utils = @import("modules/utils.zig");
|
||||
|
@ -66,6 +67,7 @@ export fn luaopen_mzte_nv(l_: ?*c.lua_State) c_int {
|
|||
.cmp = modules.cmp,
|
||||
.compile = modules.compile,
|
||||
.cpbuf = modules.cpbuf,
|
||||
.fennel = modules.fennel,
|
||||
.jdtls = modules.jdtls,
|
||||
.tsn_actions = modules.tsn_actions,
|
||||
.utils = modules.utils,
|
||||
|
|
54
mzte-nv/src/modules/fennel.zig
Normal file
54
mzte-nv/src/modules/fennel.zig
Normal file
|
@ -0,0 +1,54 @@
|
|||
const std = @import("std");
|
||||
const ffi = @import("../ffi.zig");
|
||||
const ser = @import("../ser.zig");
|
||||
const c = ffi.c;
|
||||
|
||||
const fnl_regkey = "mzte-nv-fnl";
|
||||
|
||||
pub fn luaPush(l: *c.lua_State) void {
|
||||
ser.luaPushAny(l, .{
|
||||
.eval = ffi.luaFunc(lEval),
|
||||
.fnlMod = ffi.luaFunc(lFnlMod),
|
||||
});
|
||||
}
|
||||
|
||||
fn loadFennel(l: *c.lua_State) !void {
|
||||
c.lua_getfield(l, c.LUA_REGISTRYINDEX, fnl_regkey);
|
||||
if (!c.lua_isnil(l, -1)) {
|
||||
return;
|
||||
}
|
||||
c.lua_pop(l, 1);
|
||||
|
||||
std.log.debug("loading fennel", .{});
|
||||
|
||||
if (c.luaL_loadfile(l, "/usr/share/lua/5.4/fennel.lua") != 0) {
|
||||
return error.FennelLoad;
|
||||
}
|
||||
|
||||
if (c.lua_pcall(l, 0, 1, 0) != 0) {
|
||||
std.log.err("Failed to load fennel compiler: {s}", .{ffi.luaToString(l, -1)});
|
||||
return error.FennelLoad;
|
||||
}
|
||||
|
||||
c.lua_pushvalue(l, -1);
|
||||
c.lua_setfield(l, c.LUA_REGISTRYINDEX, fnl_regkey);
|
||||
}
|
||||
|
||||
fn lFnlMod(l: *c.lua_State) !c_int {
|
||||
try loadFennel(l);
|
||||
return 1;
|
||||
}
|
||||
|
||||
fn lEval(l: *c.lua_State) !c_int {
|
||||
const argc = c.lua_gettop(l);
|
||||
try loadFennel(l);
|
||||
c.lua_getfield(l, -1, "eval");
|
||||
|
||||
var i: c_int = 1;
|
||||
while (i <= argc) : (i += 1) {
|
||||
c.lua_pushvalue(l, i);
|
||||
}
|
||||
|
||||
c.lua_call(l, argc, c.LUA_MULTRET);
|
||||
return c.lua_gettop(l) - (argc + 1);
|
||||
}
|
Loading…
Reference in a new issue