From 692d1da95d82adc30e0ba650124330f1a098a697 Mon Sep 17 00:00:00 2001 From: John Novak Date: Tue, 17 Jul 2018 19:35:26 +1000 Subject: [PATCH] Fix setCursorPos and setCursorXPos on POSIX (#8310) --- changelog.md | 5 +++++ lib/pure/terminal.nim | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 681b4b0a44..43b351ef11 100644 --- a/changelog.md +++ b/changelog.md @@ -54,6 +54,11 @@ - The procs ``parseHexInt`` and ``parseOctInt`` now fail on empty strings and strings containing only valid prefixes, e.g. "0x" for hex integers. +- ``terminal.setCursorPos`` and ``terminal.setCursorXPos`` now work correctly + with 0-based coordinates on POSIX (previously, you needed to use + 1-based coordinates on POSIX for correct behaviour; the Windows behaviour + was always correct). + #### Breaking changes in the compiler diff --git a/lib/pure/terminal.nim b/lib/pure/terminal.nim index 904274ade2..2e138b27ed 100644 --- a/lib/pure/terminal.nim +++ b/lib/pure/terminal.nim @@ -308,7 +308,7 @@ proc setCursorPos*(f: File, x, y: int) = let h = conHandle(f) setCursorPos(h, x, y) else: - f.write(fmt"{stylePrefix}{y};{x}f") + f.write(fmt"{stylePrefix}{y+1};{x+1}f") proc setCursorXPos*(f: File, x: int) = ## Sets the terminal's cursor to the x position. @@ -323,7 +323,7 @@ proc setCursorXPos*(f: File, x: int) = if setConsoleCursorPosition(h, origin) == 0: raiseOSError(osLastError()) else: - f.write(fmt"{stylePrefix}{x}G") + f.write(fmt"{stylePrefix}{x+1}G") when defined(windows): proc setCursorYPos*(f: File, y: int) =