summaryrefslogtreecommitdiff
path: root/config/essentials/vis/backup.lua
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2024-06-21 16:06:25 +0200
committerRaymaekers Luca <raymaekers.luca@gmail.com>2024-06-21 16:06:25 +0200
commit10e12bbe481af7974739060f51210f7948fc1df9 (patch)
tree83722aca11901a5bf7ad433aac6a6b0ba05cf79a /config/essentials/vis/backup.lua
parent4775688e796faece72c6621bcd94f6eb4ebac5ff (diff)
parentc9cc72113521b793d1baa0d2f558b97478a6acf4 (diff)
Merge branch 'main' of debuc.com:dotfiles
Diffstat (limited to 'config/essentials/vis/backup.lua')
-rw-r--r--config/essentials/vis/backup.lua47
1 files changed, 47 insertions, 0 deletions
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