198 lines
5.2 KiB
Lua
198 lines
5.2 KiB
Lua
--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")
|
|
-- dofile("func.lua")
|
|
|
|
|
|
|
|
-- Small Funcs Start ------------------------------
|
|
|
|
function at(s,p)
|
|
return string.sub(s,p,p)
|
|
end
|
|
|
|
function len(s)
|
|
return string.len(s)
|
|
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 at(inp,1)==":" and at(inp,2)=="g" and at(inp,3)=="o" and string.match(inp,"%d+")~= nil then
|
|
currline=string.match(inp,"%d+")
|
|
elseif at(inp,1)=="x" and #inp==1 then
|
|
elseif at(inp,1)=="?" and #inp==1 then
|
|
print_help()
|
|
elseif at(inp,1)==":" and at(inp,2)=="q" then
|
|
break
|
|
else
|
|
-- catchall --
|
|
if inp=="" then
|
|
else
|
|
nc.setfontcolor("RED")
|
|
print("Unknown Command!")
|
|
nc.setfontcolor("WHITE")
|
|
end
|
|
-- 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
|
|
return 0
|
|
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
|
|
end
|
|
|
|
function print_help()
|
|
local k
|
|
nc.clrscr()
|
|
nc.setfontcolor("GREEN")
|
|
print(" VITE commands ")
|
|
print("===================================")
|
|
print("* new file ")
|
|
print("> insert line")
|
|
print("= Show lines")
|
|
print(": main commands")
|
|
|
|
print("enter any key to continue..." )
|
|
|
|
while k == null do
|
|
k=nc.getch()
|
|
end
|
|
nc.clrscr()
|
|
|
|
print(" Main ':' commands ")
|
|
print("===================================")
|
|
print(":q quit")
|
|
print(":w Write pending files to file")
|
|
print("k Show lines")
|
|
print(": main commands")
|
|
print("enter any key to continue..." )
|
|
|
|
while k == null do
|
|
k=nc.getch()
|
|
end
|
|
print("End of Help")
|
|
nc.setfontcolor("WHITE")
|
|
end
|
|
|
|
function rem_line(lnum)
|
|
|
|
end
|
|
|
|
function display_text() -- prints lines_tbl (bef flush)
|
|
currfile:seek("set")
|
|
local line
|
|
nc.clrscr()
|
|
nc.setfontcolor("CYAN")
|
|
for lnum,lstr in pairs(lines_tbl) do
|
|
-- nc.gotoxy(1,k)
|
|
print(lnum..":"..lstr)
|
|
end
|
|
print("=================================\n\n")
|
|
nc.setfontcolor("WHITE")
|
|
end
|
|
-- Program Loop Begin
|
|
start()
|