From 30e9026d519bd8a3391814a4b32f737a5045d58f Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Tue, 11 Feb 2025 12:06:59 +0300 Subject: [PATCH] Update base64 function to support older neovim versions. Lua code taken from - http://lua-users.org/wiki/BaseSixtyFour This ensures that older versions without vim.base64 also work smoothly. --- lua/picvim.lua | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/lua/picvim.lua b/lua/picvim.lua index 78be1cd..c4ffdd0 100644 --- a/lua/picvim.lua +++ b/lua/picvim.lua @@ -12,6 +12,36 @@ if not uv then uv = vim.loop end +-- Lines 15-43 from http://lua-users.org/wiki/BaseSixtyFour +local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +function enc(data) + return ((data:gsub('.', function(x) + local r,b='',x:byte() + for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end + return r; + end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) + if (#x < 6) then return '' end + local c=0 + for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end + return b:sub(c+1,c+1) + end)..({ '', '==', '=' })[#data%3+1]) +end +function dec(data) + data = string.gsub(data, '[^'..b..'=]', '') + return (data:gsub('.', function(x) + if (x == '=') then return '' end + local r,f='',(b:find(x)-1) + for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end + return r; + end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) + if (#x ~= 8) then return '' end + local c=0 + for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end + return string.char(c) + end)) +end +-- End of code from http://lua-users.org/wiki/BaseSixtyFour + local Image = {} Image.__index = Image @@ -41,7 +71,7 @@ function Image:draw(x, y, w, h) end local data = file:read("*all") file:close() - local encoded_data = vim.base64.encode(data):gsub("%/", "/") + local encoded_data = enc(data) local pos = 1 local chunk_size = 4096 stdout:write("\27[" .. x + 2 .. ";" .. y + 4 .. "H")