I would like to offer the following code ,which I modified from a previous post 
a few years ago my apologies to the original poster). This is far from elegant 
or efficient, but it does the job.

import terminal

type Cursor* = tuple[x,y: int] # for the getcursorpos procedure

var cursor*: Cursor # for the getcursorpos procedure

proc getcursorpos*: Cursor =

> # This version returns the x,y values of the cursor position, erases the
> 
> # side-effect text ";xR", and brings the cursor back to its proper position.
> 
> stdout.write "e[6n" # get cursor coordinates discard getch() # ignore e 
> discard getch() # ignore [ var c = getch() stdout.write "e[y;xR" # read y,x 
> values of cursor position
> 
> while c != ';':
>     result.y = result.y * 10 + (int(c) - int('0')) c = getch()
> 
> c = getch()
> 
> while c != 'R':
>     result.x = result.x * 10 + (int(c) - int('0')) c = getch()
> 
> result.x -= 1 result.y -= 1 setcursorpos(result.x, result.y) # place cursor 
> at proper position stdout.write " " # overwrite side-effect text ";xR" 
> setcursorpos(result.x, result.y) # return cursor to proper position

Reply via email to