--Vi Inspired Textual Editor === VITE -- Version 0.05 -- by: ASCII Benefactor -- April 2022 ---------------------------------- -- filename="dummy.txt" VER="v0.05" nc=require("nocurses") dofile("box.lua") -- Small Funcs Start ------------------------------ function at(s,p) return string.sub(s,p,p) end ----------------------------end small funcs ------ function start() nc.setunderline(true) print("VITE === Vi Inspired Text Editor === "..VER) nc.setunderline(false) currline=-1 currfile=-1 lines_tbl={} cmd() --after closing if currfile ~= -1 then print("Closing VITE...bye!") currfile:close() else print("Closing VITE...bye!") end end -- list of Commands -- ---------------- -- * = newfile -- > = appendtext -- : = main commands -- = = Display pending lines -- ? = Display Help function cmd() if currline== -1 then print("No file opened") end while true do ---------------------- main loop if currline ~= -1 then print(currline..":") end -- InfoLine TM nc.setfontcolor("YELLOW") inp = io.input():read("*l") nc.setfontcolor("WHITE") -- all commands start with a symbol if at(inp,1)=="*" and string.len(inp)<=1 then print("You must enter a valid filename...") elseif at(inp,1)=="*" and string.len(inp)>1 then newfn=string.sub(inp,2) new_file(newfn) print("New File:"..newfn.."\n") currline=1 elseif at(inp,1) == ">" and string.len(inp)==1 then -- print("line [#"..currline.."]:") table.insert(lines_tbl,currline,"") currline=currline+1 -- if inp has > symbol, then its a literal line to write to file elseif at(inp,1) == ">" and string.len(inp)>1 then table.insert(lines_tbl,currline,string.sub(inp,2)) currline=currline+1 elseif at(inp,1) == ":" and at(inp,2)=="l" and string.len(inp)>2 then -- TODO MAKE LOAD FUNC TODO elseif at(inp,1) == ":" and at(inp,2)=="w" then write_file() elseif at(inp,1) == "=" and string.len(inp)==1 then display_text() elseif string.match(inp,"%d+%>%g+") and string.len(inp)>3 then -- FIXME FIXME FIXME ^^^^^^ lpos=string.match(inp,"%d") add_line(lpos,str) elseif at(inp,1)=="x" and at(inp,2)=="!" then break elseif at(inp,1)=="?" and #inp==1 then print_help() elseif at(inp,1)==":" and at(inp,2)=="q" then break else -- catchall -- nc.setfontcolor("RED") print("Unknown Command!") nc.setfontcolor("WHITE") -- end of command defs ========================= end end end function add_line(lpos,str) local str,lpos if currfile~=-1 then table.insert(lines_tbl,lpos,str) else print("No file Open!") end end function write_file() -- flush data to the file":w" if currfile~=-1 then currfile:write(table.concat(lines_tbl,"\n").."\n") print("Flushed buffer unto "..newfn) -- TODO Show filesize XXX else print("No file to write to !") end end function new_file(fn) --also load if currfile==-1 then currfile = io.open(fn,"w+") elseif currfile~=-1 then nc.setfontcolor("RED") print("Confirm Close file?") nc.setfontcolor("WHITE") if nc.getch()=="y" or nc.getch()=="Y" then currfile:close() currfile = io.open(fn,"w+") elseif nc.getch()=="n" then anxietyattack=true pleb=true end end end function display_file() -- Displays file proper currfile:seek("set") local lnum = 1 for line in currfile:lines() do nc.gotoxy(1,lnum) print(lnum..":"..line) lnum=lnum+1 end print("=================================\n\n") end function print_help() nc.clrscr() nc.setfontcolor("GREEN") print(" VITE commands ") print("===============") print("* new file ") print("> insert line") print("= Show lines") print(": main commands") nc.setfontcolor("WHITE") end function display_text() -- prints lines_tbl (bef flush) currfile:seek("set") local line nc.clrscr() nc.setfontcolor("CYAN") for k,ln in pairs(lines_tbl) do -- nc.gotoxy(1,k) print(k..":"..ln) end print("=================================\n\n") nc.setfontcolor("WHITE") end start()