Compare commits

..

No commits in common. "main" and "v1.0.0" have entirely different histories.
main ... v1.0.0

4 changed files with 44 additions and 131 deletions

View File

@ -1,13 +1,3 @@
## dates and their corresponding seconds been here :)
## dates and their corresponding seconds been here :)
[24-10-07]
u80864958_at_u80864958 = 432
[24-10-08]
u80864958_at_u80864958 = 425
[24-10-11]
u80864958_at_u80864958 = 6021
[24-10-15]
schreifuchs_at_archlinux = 128
[24-11-06]
schreifuchs_at_archibald = 18
[24-12-25]
schreifuchs_at_archibald = 204

View File

@ -5,43 +5,3 @@ Timer times the time it took you to realize your project
Counts the time in your editor inside on directory.
Not beeing inside the editor for less than 5 minutes gets counted as beeing
inside the editor.
## Usage
### Show time
```:Timer```: prints the time inside this directory. If ```.timer.toml``` exists it get's included.
```:TimerLog```: logs the current time table.
### Save time
Time gets automatically saved, when neovim is closed. Given that the ```.timer.toml``` file exists.
If it doesn't Timer searches the next 10 higher directories for one. If there isn't one either nothing get's persisted.
```:TimerSave```: saves the current time to ```.timer.toml```. If the file doesn't exist it gets created.
## Dependencies
You must have the ```hostname``` util installed on your system.
```sh
## on Arch based distros:
sudo pacmn -S inetutils
```
## Installation
Lunar vim:
```lua
lvim.plugins = {
{
"schreifuchs/timer",
url = "https://git.schreifuchs.ch/schreifuchs/timer.git",
config = function()
require('timer').setup()
end
},
}
```

View File

@ -1,4 +1,4 @@
local function trim(s)
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
@ -10,7 +10,7 @@ local clean_to = 1
local function clean_from(from, events) -- cleans the events
local function clean_from(from, events)
local clean_events = {}
-- coppy until from
@ -46,7 +46,7 @@ local function clean_from(from, events) -- cleans the events
return clean_events
end
local function summ_time() --returns time in seconds from the fous events
local function summ_time()
focus_events = clean_from(clean_to + 1, focus_events)
clean_to = #focus_events
@ -107,7 +107,6 @@ local function log_total_time()
local history = require("toml").parse(file:read("*a"))
file:close()
print("Time for:", filename)
for _, day in pairs(history) do
for user, time in pairs(day) do
@ -145,81 +144,53 @@ local function focus_lost()
})
end
local function next_lowest_time_file()
local file_path = filename
for _ = 1, 10, 1 do
local f = io.open(file_path)
local function persist()
local TOML = require("toml")
local today = os.date("%y-%m-%d", os.time())
local table = {}
if f ~= nil then
return file_path
end
file_path = "../" .. file_path
end
return ""
end
local function persist(force)
return function()
local TOML = require("toml")
local today = os.date("%y-%m-%d", os.time())
local table = {}
local file_path = filename
local file = io.open(file_path, "r")
-- if file exists read
if file ~= nil then
table = TOML.parse(file:read("*a"))
file:close()
else
if not force then
file_path = next_lowest_time_file()
if file_path == "" then
print("No save file found. To create a new save file run :TimerSave")
return
end
print("Save file found:", file_path)
end
end
-- write time to table
if table[today] ~= nil and table[today][username] ~= nil then
table[today][username] = table[today][username] + summ_time()
else
if table[today] == nil then
table[today] = {}
end
table[today][username] = summ_time()
end
-- write table to file
file = io.open(file_path, "w")
if file == nil then
error("can't write to .timer file")
return
end
local tml = TOML.encode(table)
file:write("## dates and their corresponding seconds been here :)\n", tml, "\n")
local file = io.open(filename, "r")
-- if file exists read
if file ~= nil then
table = TOML.parse(file:read("*a"))
file:close()
print("Timer saved successfully :-)")
--reset timer
clean_to = 1
focus_events = {}
focus_gained()
end
-- write time to table
if table[today] ~= nil and table[today][username] ~= nil then
table[today][username] = table[today][username] + summ_time()
else
if table[today] == nil then
table[today] = {}
end
table[today][username] = summ_time()
end
-- write table to file
file = io.open(filename, "w")
if file == nil then
error("can't write to .timer file")
return
end
local tml = TOML.encode(table)
print(tml)
file:write("## dates and their corresponding seconds been here :)\n", tml, "\n")
file:close()
--reset timer
clean_to = 1
focus_events = {}
focus_gained()
end
local function setup()
vim.api.nvim_create_autocmd("VimEnter",
{ group = augroup, desc = "Start Timer", once = true, callback = focus_gained })
vim.api.nvim_create_autocmd("ExitPre",
{ group = augroup, desc = "Persist timer", once = true, callback = persist(false) })
{ group = augroup, desc = "Persist timer", once = true, callback = persist })
vim.api.nvim_create_autocmd("FocusGained", { group = augroup, callback = focus_gained })
vim.api.nvim_create_autocmd("FocusLost", { group = augroup, callback = focus_lost })
@ -235,7 +206,7 @@ local function setup()
)
vim.api.nvim_create_user_command(
'TimerSave',
persist(true),
persist,
{ nargs = 0 } -- No arguments for this command (you can configure this later)
)
end

View File

@ -564,15 +564,7 @@ TOML.encode = function(tbl)
local cache = {}
local function parse(tbl)
local tbl_keys = {}
for k in pairs(tbl) do
table.insert(tbl_keys, k)
end
table.sort(tbl_keys)
for _, k in pairs(tbl_keys) do
local v = tbl[k]
for k, v in pairs(tbl) do
if type(v) == "boolean" then
toml = toml .. k .. " = " .. tostring(v) .. "\n"
elseif type(v) == "number" then
@ -580,7 +572,7 @@ TOML.encode = function(tbl)
elseif type(v) == "string" then
local quote = '"'
v = v:gsub("\\", "\\\\")
--
-- if the string has any line breaks, make it multiline
if v:match("^\n(.*)$") then
quote = quote:rep(3)