Browse Source

Did the program and its manpage

master
Antoine COMBET 3 years ago
parent
commit
b062be2ccb
  1. 90
      todo
  2. 38
      todo.1

90
todo

@ -0,0 +1,90 @@
#!/usr/bin/env lua
local usage = function(stream)
stream:write(arg[0] .. [[ -- manage a todo stack
todo pop
todo peek
todo push <task>
for more info see `man todo.1`
]])
end
local peek = function(stack)
if #stack == 0 then os.exit(2) end
io.write(stack[#stack])
io.write("\n")
return stack
end
local pop = function(stack)
peek(stack)
stack[#stack] = nil
return stack
end
local push = function(stack, args)
if not args[2] then
io.stderr:write("Invalid syntax\nUsage:\n")
usage(io.stderr)
os.exit(1)
end
stack[#stack + 1] = args[2]
return stack
end
local exists = function(path)
return os.rename(path,path) or false
end
local read_stack = function(path)
local f = io.open(path, "r")
if not f then os.exit(1) end
local t = {}
for l in f:lines() do
t[#t + 1] = l
end
f:close()
return t
end
local write_stack = function(path, stack)
local f = io.open(path, "w")
if not f then os.exit(1) end
for _, v in ipairs(stack) do
f:write(v)
f:write("\n")
end
f:close()
end
local stack_path = os.getenv("HOME") .. "/.local/share/todostack"
if not exists(stack_path) then
local f = io.open(stack_path, "w")
f:close()
end
local commands = {
peek = peek,
pop = pop,
push = push,
help = function()
usage(io.stdout)
end
}
local c = commands[arg[1]]
if not c then
if arg[1] then
io.stderr:write("unknown command: " .. arg[1] .. "\nUsage:\n")
else
io.stderr:write("Please specify a command\n Usage:\n")
end
usage(io.stderr)
os.exit(1)
else
local stack = read_stack(stack_path)
stack = c(stack, arg)
write_stack(stack_path, stack)
end

38
todo.1

@ -0,0 +1,38 @@
.\" Man page for the todo utility ./todo.1
.TH TODO 1
.SH NAME
todo \- manages a todo stack
.SH SYNOPSIS
.B todo
.IR command " [" option "]"
.SH DESCRIPTION
.P
.B todo
is a small utility to manage a todo stack. It can push onto the stack, read the top element, and pop the top element.
.SH OPTIONS
.TP
.BI push " task"
Pushes a new task on the user's todo stack.
.TP
.B peek
Outputs the task at the top of the stack.
Does not alter the stack.
.TP
.B pop
Outputs the task at the top of the stack, then pops it off.
.SH EXIT STATUS
.TP
.B 0
Operation successful.
.TP
.B 1
General error
.TP
.B 2
Todo stack underflow on a \fBpop\fR command or a \fBpeek\fR command.
.SH FILES
.TP
.B $HOME/.local/share/todostack
The user's todo stack.
.SH
Loading…
Cancel
Save