ctrl+c, ctrl+d support
This commit is contained in:
parent
26bb28ac5a
commit
ddb5f375d7
20
editor.nim
20
editor.nim
|
@ -26,6 +26,9 @@ type
|
||||||
cols: int # number of columns in the terminal
|
cols: int # number of columns in the terminal
|
||||||
maxRows: int # max number of rows allowed
|
maxRows: int # max number of rows allowed
|
||||||
|
|
||||||
|
EditorResult* = enum
|
||||||
|
erEnter, erCtrlC, erCtrlD, erError
|
||||||
|
|
||||||
# for editors
|
# for editors
|
||||||
var editors: seq[EditorState]
|
var editors: seq[EditorState]
|
||||||
|
|
||||||
|
@ -56,12 +59,18 @@ proc render(ed: EditorState) =
|
||||||
template cline(ed: EditorState): var string =
|
template cline(ed: EditorState): var string =
|
||||||
ed.buffer[ed.y]
|
ed.buffer[ed.y]
|
||||||
|
|
||||||
proc read*(ed: EditorState): string =
|
|
||||||
|
|
||||||
|
proc read*(ed: EditorState): (EditorResult, string) =
|
||||||
|
|
||||||
|
var editorResult = erError
|
||||||
|
|
||||||
ed.render()
|
ed.render()
|
||||||
while true:
|
while true:
|
||||||
let key = getKey()
|
let key = getKey()
|
||||||
case key:
|
case key:
|
||||||
of jkEnter.int:
|
of jkEnter.int:
|
||||||
|
editorResult = erEnter
|
||||||
break
|
break
|
||||||
of jkBackspace.int:
|
of jkBackspace.int:
|
||||||
if ed.x == 0:
|
if ed.x == 0:
|
||||||
|
@ -75,6 +84,13 @@ proc read*(ed: EditorState): string =
|
||||||
ed.cline() = ed.cline[0..ed.x-1] & ed.cline[ed.x+1..ed.cline().high()]
|
ed.cline() = ed.cline[0..ed.x-1] & ed.cline[ed.x+1..ed.cline().high()]
|
||||||
dec ed.x
|
dec ed.x
|
||||||
dec ed.bx
|
dec ed.bx
|
||||||
|
of 3: # ctrl+c
|
||||||
|
editorResult = erCtrlC
|
||||||
|
break
|
||||||
|
of 4: # ctrl+d
|
||||||
|
if ed.buffer.len() <= 1 and ed.cline().len() == 0:
|
||||||
|
editorResult = erCtrlD
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
if key > 31 and key < 127:
|
if key > 31 and key < 127:
|
||||||
# ascii char
|
# ascii char
|
||||||
|
@ -91,7 +107,7 @@ proc read*(ed: EditorState): string =
|
||||||
ed.render()
|
ed.render()
|
||||||
|
|
||||||
# return val
|
# return val
|
||||||
result = ed.buffer.join("\n")
|
result = (editorResult, ed.buffer.join("\n"))
|
||||||
|
|
||||||
# cleanup
|
# cleanup
|
||||||
write(stdout, "\n")
|
write(stdout, "\n")
|
||||||
|
|
|
@ -3,7 +3,7 @@ import editor
|
||||||
let e = newEditor("> ", false)
|
let e = newEditor("> ", false)
|
||||||
|
|
||||||
while true:
|
while true:
|
||||||
let text = e.read()
|
let (res, text) = e.read()
|
||||||
if text == "quit":
|
if res in {erCtrlC, erCtrlD} or text == "quit":
|
||||||
break
|
break
|
||||||
echo text
|
echo text
|
Loading…
Reference in New Issue