CPBuf persists cursor position and scroll

This commit is contained in:
LordMZTE 2023-05-30 23:56:44 +02:00
parent a5a989f55b
commit 0cc96946f5
Signed by: LordMZTE
GPG key ID: B64802DC33A64FF6

View file

@ -17,9 +17,6 @@ fn lCopyBuf(l: *c.lua_State) !c_int {
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;
@ -44,6 +41,10 @@ fn lCopyBuf(l: *c.lua_State) !c_int {
) == nvim.FAIL)
return error.Buffer;
// store previous window layout
const cursor_pos = nvim.curwin.*.w_cursor;
const topline = nvim.curwin.*.w_topline;
// activate buffer
if (nvim.do_buffer(
nvim.DOBUF_GOTO,
@ -54,6 +55,10 @@ fn lCopyBuf(l: *c.lua_State) !c_int {
) == nvim.FAIL)
return error.Buffer;
// set old window layout
nvim.curwin.*.w_cursor = cursor_pos;
nvim.curwin.*.w_topline = topline;
// set new filetype
if (nvim.set_option_value("filetype", 0, ft_stringval, nvim.OPT_LOCAL)) |_|
return error.Buffer;
@ -62,7 +67,6 @@ fn lCopyBuf(l: *c.lua_State) !c_int {
_ = 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);