nipbox/editor.nim

64 lines
1.6 KiB
Nim

# Markus Maiwald (Architect) | Voxis Forge (AI)
# Scribe: The Sovereign Editor
# A modal line editor for the Sovereign Userland.
import std
var scribe_buffer: seq[string] = @[]
var scribe_filename: string = ""
proc scribe_save() =
# 1. Create content string
var content = ""
for line in scribe_buffer:
content.add(line)
content.add('\n')
# 2. Write to Disk (Using SFS)
print("[Scribe] Saving '" & scribe_filename & "'...")
nexus_file_write(scribe_filename, content)
proc start_editor*(filename: string) =
scribe_filename = filename
scribe_buffer = @[]
print("Scribe v1.0. Editing: " & filename)
if filename == "matrix.conf":
# Try autoload?
print("(New File)")
while true:
var line = ""
print_raw(": ")
if not my_readline(line): break
if line == ".":
# Command Mode
while true:
var cmd = ""
print_raw("(cmd) ")
if not my_readline(cmd): break
if cmd == "w":
scribe_save()
print("Saved.")
break # Back to prompt or stay? Ed stays in command mode?
# Ed uses '.' to toggle? No, '.' ends insert.
# Scribe: '.' enters Command Menu single-shot.
elif cmd == "p":
var i = 1
for l in scribe_buffer:
print_int(i); print_raw(" "); print(l)
i += 1
break
elif cmd == "q":
return
elif cmd == "i":
print("(Insert Mode)")
break
else:
print("Unknown command. w=save, p=print, q=quit, i=insert")
else:
# Append
scribe_buffer.add(line)