mirror of
https://mzte.de/git/LordMZTE/dotfiles.git
synced 2024-09-27 12:38:58 +02:00
add command to copy current buffer
This commit is contained in:
parent
df0e6c1ffb
commit
8d4afad4f6
3 changed files with 77 additions and 1 deletions
|
@ -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})
|
||||
|
|
|
@ -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,
|
||||
|
|
70
mzte-nv/src/modules/cpbuf.zig
Normal file
70
mzte-nv/src/modules/cpbuf.zig
Normal 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;
|
||||
}
|
Loading…
Reference in a new issue