64 lines
1.6 KiB
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)
|