|
- local tA = {...}
- local ft, p, fp, ct, il, it, c, C = {}, 1, fp or tA[1] or "", {}, "", {}, "", C -- file table, pointer, filename, command table, input line, input table, command, content
- function ct.readfile(fp,rp)
- if not fp then return end
- if not rp then ft = {} end
- local f=io.open(fp,"rb")
- if f then
- C=f:read("*a")
- f:close()
- for l in C:gmatch("[^\n]+") do
- ft[#ft+1] = l
- end
- end
- end
- function ct.writefile(nfp)
- if not nfp then nfp = fp end
- print(nfp)
- f=io.open(nfp,"wb")
- if f then
- for k,v in ipairs(ft) do
- print(v)
- f:write(v.."\n")
- end
- coroutine.yield()
- f:close()
- coroutine.yield()
- print(f.b)
- end
- end
- function ct.list(s,e)
- s,e = s or 1, e or #ft
- for i = s,e do
- if ft[i] then
- print(string.format("%4d\t %s",i,ft[i]))
- end
- end
- end
- function ct.sp(np)
- np=tonumber(np)
- if np then
- if np > #ft then
- np = #ft
- elseif np < 1 then
- np = 0
- end
- p=np
- end
- end
- function ct.pointer(np)
- ct.sp(np)
- print(string.format("%4d\t %s",p,ft[p]))
- end
- function ct.insert(np)
- ct.sp(np)
- while true do
- io.write(string.format("%4d\t ",p))
- local l=io.read()
- if l == "." then break end
- table.insert(ft,p,l)
- p=p+1
- end
- end
- function ct.append(np)
- ct.sp(np)
- p=p+1
- if #ft < 1 then p = 1 end
- ct.insert()
- end
- function ct.delete(np,n)
- ct.sp(np)
- _G.clip = ""
- for i = 1, (n or 1) do
- _G.clip = _G.clip .. table.remove(ft,p) .. "\n"
- end
- end
- function ct.substitute(np,n)
- ct.delete(np,n)
- ct.insert(np)
- end
- function ct.filename(np)
- if np then fp = np end
- print(fp)
- end
-
- local function rawpaste()
- for line in string.gmatch(_G.clip,"[^\n]") do
- print(string.format("%4d\t %s",p,line))
- table.insert(ft,p,line)
- end
- end
- function ct.pasteprevious(np)
- ct.sp(np)
- rawpaste()
- end
- function ct.paste(np)
- ct.sp(np)
- p = p + 1
- rawpaste()
- end
-
- ct.o = ct.readfile
- ct.w = ct.writefile
- ct.l = ct.list
- ct.p = ct.pointer
- ct.i = ct.insert
- ct.a = ct.append
- ct.s = ct.substitute
- ct.d = ct.delete
- ct.f = ct.filename
- ct.PP = ct.pasteprevious
- ct.P = ct.paste
-
- ct.readfile(fp)
-
- while true do
- io.write("skex2> ")
- il,it=io.read(),{}
- for w in il:gmatch("%S+") do
- it[#it+1] = w
- end
- c=table.remove(it,1)
- if c == "quit" or c == "q" then
- break
- elseif c:sub(1,1) == "!" then
- print(pcall(load(c:sub(2))))
- elseif ct[c] ~= nil then
- ct[c](table.unpack(it))
- end
- end
|