local W = {}
local current_field = 1
local function save_workout(workout_data)
local entry = { "- date: " .. workout_data.date, " type: " .. workout_data.type }
for field, value in pairs(workout_data) do
if field ~= "date" and field ~= "type" then
if field == "exercises" then
table.insert(entry, " exercises:")
for exercise in value:gmatch("[^,]+") do
table.insert(entry, " - " .. exercise:match("^%s*(.-)%s*$")) end
else
table.insert(entry, " " .. field .. ": " .. value)
end
end
end
table.insert(entry, "")
local workout_file = "/home/alex/notes/sport.yaml"
local file = io.open(workout_file, "a")
if file then
file:write(table.concat(entry, "\n") .. "\n")
file:close()
print("✓ " .. workout_data.type .. " workout logged!")
else
print("✗ Error: Could not open workout file")
end
end
local function collect_next_field(data, config)
if current_field > #config then
save_workout(data)
return
end
local field_config = config[current_field]
vim.ui.input({ prompt = field_config.prompt }, function(input)
if field_config.required and not input then
return
end
if input then
data[field_config.field] = input
end
current_field = current_field + 1
collect_next_field(data, config)
end)
end
function W.capture()
local workout_configs = {
handstand = {
type = "équilibre",
exercises = {
{ field = "durée", prompt = "Durée (sec): ", required = true },
},
},
climbing = {
type = "escalade",
exercises = {
{ field = "durée", prompt = "Durée (min): ", required = true },
},
},
running = {
type = "course",
exercises = {
{ field = "durée", prompt = "Durée (min): ", required = true },
},
},
roller = {
type = "roller",
exercises = {
{ field = "durée", prompt = "Durée (sec): ", required = true },
{ field = "notes", prompt = "Notes: ", required = false },
},
},
stretching = {
type = "étirement", exercises = {
{ field = "hamstring", prompt = "Hamstring (sec): ", required = true },
{ field = "fenêtre", prompt = "Fenêtre (sec): ", required = true },
{ field = "pigeon", prompt = "Pigeon (sec): ", required = true },
{ field = "butterfly", prompt = "Butterfly (sec): ", required = true },
{ field = "middle_split", prompt = "Middle split (sec): ", required = true },
{ field = "pancake", prompt = "Pancake (sec): ", required = true },
},
},
muscu = {
type = "muscu",
exercises = {
{ field = "pseudo_muscle_up", prompt = "Pseudo muscle up (reps): ", required = false },
{ field = "l-sit", prompt = "L-sit(sec): ", required = false },
{ field = "compression", prompt = "Compression (reps): ", required = false },
{ field = "extension", prompt = "Extension (reps): ", required = false },
{ field = "push_up_tucked", prompt = "Push up tucked (reps): ", required = false },
{ field = "planche_tucked", prompt = "Planche tucked (sec): ", required = false },
},
},
}
vim.ui.select(
{ "muscu", "roller", "handstand", "running", "stretching", "climbing" }, { prompt = "Workout type:" },
function(workout)
if not workout then
return
end
local config = workout_configs[workout]
local data = {
type = config.type, date = os.date("%Y-%m-%d"),
}
current_field = 1 collect_next_field(data, config.exercises) end
)
end
return W