Advertisement
Skyknight

To-do List

May 15th, 2022 (edited)
1,236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.84 KB | None | 0 0
  1. local c = require("component")
  2. local term = require("term")
  3. local serial = require("serialization")
  4. local gpu = c.gpu
  5. local color = require("colors")
  6. local event = require("event")
  7. local fs = require("filesystem")
  8.  
  9. fs.makeDirectory("/usr/share/opentodo/")
  10.  
  11. local file = io.open("/usr/share/opentodo/save.tbl","r")
  12. local entries
  13. if file ~= nil then
  14.   local contents = file:read("*a")
  15.   if contents ~= "" then
  16.     entries = serial.unserialize(contents)
  17.   else
  18.     entries = {}
  19.   end
  20.   file:close()
  21. else
  22.   entries = {}
  23. end
  24. local selected = 1
  25.  
  26. local function count(table)
  27.   local counter = 0
  28.   for _ in pairs(table) do
  29.     counter = counter + 1
  30.   end
  31.   return counter
  32. end
  33.  
  34. local function drawEntries()
  35.   term.clear()
  36.   for key, value in pairs(entries) do
  37.     if selected == key then
  38.       gpu.setBackground(0x4B4B4B)
  39.     end
  40.     if value[1] == true then
  41.       print("[x] " .. value[2])
  42.     else
  43.       print("[ ] " .. value[2])
  44.     end
  45.     gpu.setBackground(0x000000)
  46.   end
  47.   if selected == count(entries) + 1 then
  48.     gpu.setBackground(0x4B4B4B)
  49.   end
  50.   print("New entry (Press Enter)")
  51.   gpu.setBackground(0x000000)
  52.   print("Left Arrow: Delete Entry, Right Arrow: Toggle Checked, ctrl + c: Exit")
  53. end
  54.  
  55. local function incrementSelection()
  56.   selected = selected + 1
  57.   if  selected > count(entries) + 1 then
  58.     selected = count(entries) + 1
  59.   end
  60. end
  61.  
  62. local function decrementSelection()
  63.   selected = selected - 1
  64.   if selected == 0 then
  65.     selected = 1
  66.   end
  67. end
  68.  
  69. local function deleteEntry()
  70.   if entries[selected] ~= nil then
  71.     entries[selected] = nil
  72.     drawEntries()
  73.   end
  74. end
  75.  
  76. local function toggleChecked()
  77.   if entries[selected] ~= nil then
  78.     entries[selected][1] = not entries[selected][1]
  79.   end
  80.   drawEntries()
  81. end
  82.  
  83. drawEntries()
  84.  
  85. local run = true
  86. while run do
  87.   local event, _, _, data = event.pull()
  88.   if event == "interrupted" then
  89.     run = false
  90.   elseif event == "key_down" then
  91.     if data == 200 then
  92.       decrementSelection()
  93.       drawEntries()
  94.     elseif data == 208 then
  95.       incrementSelection()
  96.       drawEntries()
  97.     elseif data == 205 then
  98.       toggleChecked()
  99.       drawEntries()
  100.     elseif data == 203 then
  101.       deleteEntry()
  102.     elseif data == 28 then
  103.       if selected == count(entries) + 1 then
  104.         term.write("New entry: ")
  105.         local input = term.read()
  106.         if input ~= "" then
  107.           table.insert(entries, {false, input})
  108.           drawEntries()
  109.         end
  110.       end
  111.     end
  112.   end
  113. end
  114.  
  115. term.clear()
  116.  
  117. local file = io.open("/usr/share/opentodo/save.tbl","w")
  118. if file == nil then
  119.   error("Couldn't open file '/usr/share/opentodo/save.tbl'")
  120. end
  121. local serialEntries = serial.serialize(entries)
  122. local result, message = file:write(serialEntries)
  123. file:close()
  124.  
  125. if result == nil then
  126.   error(message)
  127. end
  128.  
  129. print("Successfully saved and quit")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement