add command to copy current buffer

This commit is contained in:
LordMZTE 2023-05-28 01:16:15 +02:00
parent df0e6c1ffb
commit 8d4afad4f6
Signed by: LordMZTE
GPG key ID: B64802DC33A64FF6
3 changed files with 77 additions and 1 deletions

View file

@ -1,7 +1,11 @@
(local mztenv (require :mzte_nv))
(local cmd vim.cmd)
;; CPBuf command
(vim.api.nvim_create_user_command :CPBuf mztenv.cpbuf.copyBuf {:nargs 0})
;; Compile commands
(let [compile-path (. (require :mzte_nv) :compile :compilePath)
(let [compile-path mztenv.compile.compilePath
make-cmd vim.api.nvim_create_user_command]
(make-cmd :CompileConfig
#(compile-path (.. (vim.fn.getenv :HOME) :/.config/nvim)) {:nargs 0})

View file

@ -10,6 +10,7 @@ pub const version = "1.2.0";
const modules = struct {
const cmp = @import("modules/cmp.zig");
const compile = @import("modules/compile.zig");
const cpbuf = @import("modules/cpbuf.zig");
const jdtls = @import("modules/jdtls.zig");
const tsn_actions = @import("modules/tsn_actions.zig");
const utils = @import("modules/utils.zig");
@ -64,6 +65,7 @@ export fn luaopen_mzte_nv(l_: ?*c.lua_State) c_int {
.onInit = ffi.luaFunc(lOnInit),
.cmp = modules.cmp,
.compile = modules.compile,
.cpbuf = modules.cpbuf,
.jdtls = modules.jdtls,
.tsn_actions = modules.tsn_actions,
.utils = modules.utils,

View file

@ -0,0 +1,70 @@
const std = @import("std");
const nvim = @import("nvim");
const znvim = @import("znvim");
const ffi = @import("../ffi.zig");
const ser = @import("../ser.zig");
const c = ffi.c;
pub fn luaPush(l: *c.lua_State) void {
ser.luaPushAny(l, .{
.copyBuf = ffi.luaFunc(lCopyBuf),
});
}
fn lCopyBuf(l: *c.lua_State) !c_int {
_ = l;
// create new buffer
const newbuf = nvim.buflist_new(null, null, 0, nvim.BLN_LISTED | nvim.BLN_NEW) orelse
return error.Buffer;
// close in case of error
errdefer _ = nvim.close_buffer(null, newbuf, 0, false, false);
// create memline
if (nvim.ml_open(newbuf) == nvim.FAIL)
return error.Buffer;
// copy lines
var lnum: i32 = 1;
while (lnum < nvim.curbuf.*.b_ml.ml_line_count) : (lnum += 1) {
const line = nvim.ml_get_buf(nvim.curbuf, lnum, false) orelse return error.Buffer;
if (nvim.ml_append_buf(newbuf, lnum - 1, line, 0, false) == nvim.FAIL)
return error.Buffer;
}
// get previous filetype
var ft_numval: i64 = 0;
var ft_stringval: ?[*:0]u8 = null;
if (nvim.get_option_value_strict(
@constCast("filetype"),
&ft_numval,
&ft_stringval,
nvim.SREQ_BUF,
nvim.curbuf,
) == nvim.FAIL)
return error.Buffer;
// activate buffer
if (nvim.do_buffer(
nvim.DOBUF_GOTO,
nvim.DOBUF_FIRST,
nvim.FORWARD,
newbuf.*.handle,
0,
) == nvim.FAIL)
return error.Buffer;
// set new filetype
if (nvim.set_option_value("filetype", 0, ft_stringval, nvim.OPT_LOCAL)) |_|
return error.Buffer;
// apply autocmds
_ = nvim.apply_autocmds(nvim.EVENT_BUFREADPOST, @constCast("cpbuf"), null, false, nvim.curbuf);
_ = nvim.apply_autocmds(nvim.EVENT_BUFWINENTER, @constCast("cpbuf"), null, false, nvim.curbuf);
// ensure redraw
nvim.redraw_curbuf_later(nvim.UPD_NOT_VALID);
return 0;
}