mirror of https://github.com/japl-lang/jale.git
fixed bugs on linux
This commit is contained in:
parent
2453283ad9
commit
0445f89e46
|
@ -46,7 +46,7 @@ proc quit*(le: LineEditor) =
|
||||||
le.state = esQuitting
|
le.state = esQuitting
|
||||||
le.events.call(jeQuit)
|
le.events.call(jeQuit)
|
||||||
|
|
||||||
proc forceRedraw*(le: LineEditor) =
|
proc redraw*(le: LineEditor) =
|
||||||
le.forceRedraw = true
|
le.forceRedraw = true
|
||||||
|
|
||||||
# constructor
|
# constructor
|
||||||
|
@ -89,9 +89,6 @@ proc render(editor: LineEditor, wr: var TermWriter, line: int = -1, hscroll: boo
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
|
||||||
proc clearLine(wr: var TermWriter) =
|
|
||||||
wr.clearLine()
|
|
||||||
|
|
||||||
proc fullRender(editor: LineEditor, wr: var TermWriter) =
|
proc fullRender(editor: LineEditor, wr: var TermWriter) =
|
||||||
# from the top cursor pos, it draws the entire multiline prompt, then
|
# from the top cursor pos, it draws the entire multiline prompt, then
|
||||||
# moves cursor to current y
|
# moves cursor to current y
|
||||||
|
@ -100,7 +97,7 @@ proc fullRender(editor: LineEditor, wr: var TermWriter) =
|
||||||
if i < editor.rendered:
|
if i < editor.rendered:
|
||||||
wr.down(1)
|
wr.down(1)
|
||||||
else:
|
else:
|
||||||
write stdout, "\n"
|
wr.lf()
|
||||||
inc editor.rendered
|
inc editor.rendered
|
||||||
|
|
||||||
var extraup = 0
|
var extraup = 0
|
||||||
|
@ -131,7 +128,6 @@ proc read*(editor: LineEditor): string =
|
||||||
while editor.state == esTyping:
|
while editor.state == esTyping:
|
||||||
|
|
||||||
# refresh current line every time
|
# refresh current line every time
|
||||||
editor.render(buffer)
|
|
||||||
buffer.setCursorX(editor.content.X + editor.prompt.len())
|
buffer.setCursorX(editor.content.X + editor.prompt.len())
|
||||||
# get key (with escapes)
|
# get key (with escapes)
|
||||||
buffer.flush()
|
buffer.flush()
|
||||||
|
@ -151,6 +147,8 @@ proc read*(editor: LineEditor): string =
|
||||||
editor.fullRender(buffer)
|
editor.fullRender(buffer)
|
||||||
if editor.forceRedraw:
|
if editor.forceRedraw:
|
||||||
editor.forceRedraw = false
|
editor.forceRedraw = false
|
||||||
|
else:
|
||||||
|
editor.render(buffer)
|
||||||
|
|
||||||
editor.events.call(jePostRead)
|
editor.events.call(jePostRead)
|
||||||
|
|
||||||
|
|
|
@ -37,19 +37,23 @@ proc bindHistory*(ed: LineEditor, h: History, useShift: bool = false) =
|
||||||
let res = h.delta(-1)
|
let res = h.delta(-1)
|
||||||
if res.isSome():
|
if res.isSome():
|
||||||
ed.content = res.get()
|
ed.content = res.get()
|
||||||
|
ed.redraw()
|
||||||
|
|
||||||
ed.bindKey(downkey):
|
ed.bindKey(downkey):
|
||||||
let res = h.delta(1)
|
let res = h.delta(1)
|
||||||
if res.isSome():
|
if res.isSome():
|
||||||
ed.content = res.get()
|
ed.content = res.get()
|
||||||
|
ed.redraw()
|
||||||
|
|
||||||
ed.bindKey(homekey):
|
ed.bindKey(homekey):
|
||||||
let res = h.toStart()
|
let res = h.toStart()
|
||||||
if res.isSome():
|
if res.isSome():
|
||||||
ed.content = res.get()
|
ed.content = res.get()
|
||||||
|
ed.redraw()
|
||||||
|
|
||||||
ed.bindKey(endKey):
|
ed.bindKey(endKey):
|
||||||
let res = h.toStart()
|
let res = h.toStart()
|
||||||
if res.isSome():
|
if res.isSome():
|
||||||
ed.content = res.get()
|
ed.content = res.get()
|
||||||
|
ed.redraw()
|
||||||
|
|
||||||
|
|
|
@ -18,5 +18,3 @@ proc renderLine*(wr: var TermWriter, prompt: string, content: string, hscroll: i
|
||||||
content = content[lower..upper]
|
content = content[lower..upper]
|
||||||
wr &= content
|
wr &= content
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ proc clearLine*(wr: var TermWriter) =
|
||||||
wr &= ($27.char & "[1M" & $27.char & "[1L")
|
wr &= ($27.char & "[1M" & $27.char & "[1L")
|
||||||
else:
|
else:
|
||||||
wr &= ($27.char & "[2K")
|
wr &= ($27.char & "[2K")
|
||||||
|
wr.cr()
|
||||||
|
|
||||||
proc setCursorX*(wr: var TermWriter, x: int) =
|
proc setCursorX*(wr: var TermWriter, x: int) =
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
|
|
Loading…
Reference in New Issue