From 2f8816e47e0797083a667d5cf7e778940dd1f789 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Thu, 20 Jun 2024 22:50:03 +0200 Subject: checkpoint --- config/essentials/vis/backup.lua | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 config/essentials/vis/backup.lua (limited to 'config/essentials/vis/backup.lua') diff --git a/config/essentials/vis/backup.lua b/config/essentials/vis/backup.lua new file mode 100644 index 0000000..f48895f --- /dev/null +++ b/config/essentials/vis/backup.lua @@ -0,0 +1,47 @@ +local backup = {} + +-- Return the backup path concatenated with the filename, replace / with % +backup.entire_path_with_double_percentage_signs = + function(backup_dir, path) + return backup_dir .. "/" .. string.gsub(path, "/", "%%") + end + +-- Return the backup path concatenated with the filename, replace / with % +-- and append the current time using time_format +backup.entire_path_with_double_percentage_signs_and_timestamp = function( + backup_dir, path) + return backup_dir .. "/" .. os.date(backup.time_format) .. + string.gsub(path, "/", "%%") +end + +-- Before saving the file, copy the current contents of the file to a backup file +vis.events.subscribe(vis.events.FILE_SAVE_PRE, function(file, path) + if file.size > backup.byte_limit then return end + + -- E.g. when editing stdin as an interactive filter + -- `vis -` + if path == nil then return end + + local backup_path = backup.get_fname(backup.directory, path) + + local backup_file = io.open(backup_path, "w") + local current_file = io.open(path) + if backup_file == nil or current_file == nil then return end + + for line in current_file:lines() do backup_file:write(line .. "\n") end + + backup_file:close() +end) + +-- Set defaults +backup.directory = os.getenv("XDG_DATA_HOME") .. "/Trash/vis-backups" + +backup.get_fname = backup.entire_path_with_double_percentage_signs + +backup.time_format = "%H-%M-" + +-- Do not make backups if the file is greater than this +-- 1MB by default +backup.byte_limit = 1000000 + +return backup -- cgit v1.2.3