2010/7/19 Christopher Barry <christopher.ba...@rackwareinc.com>: > On Sun, 2010-07-18 at 21:55 +0200, Denys Vlasenko wrote: >> On Saturday 17 July 2010 19:12, Christopher Barry wrote: >> > All, >> > >> > looking for an easy way to capture the current cursor position. found a >> > reference to 'ESC [ 6 n', but not sure how that works. I tried >> > # echo -e '\e[6n' >> > but that does not do what I expect. >> >> It makes terminal talk: >> >> shadow:~# echo -ne '\e[6n'; hexdump -vC >> ^[[6;1R (here I press ^D^D to let hexdump see EOF) 00000000 1b 5b 36 3b 31 >> 52 |.[6;1R| >> 00000006 >> > > Denys, I have no idea what the heck that means! :)
When you echo 'ESC [ 6 n' the terminal puts ESC [ <row> ; <col> R on the standard input (where <row> and <col> are numbers, as above). If you think about it, that's the only way it can provide this information (remember that the terminal could be a text terminal at the end of a serial cable). It is not extremely convenient, but you can devise a kind of get_cursor_position program which would look like (in C): main() { int row, col; fprintf(stderr, "^[[6n"); scanf("^[[%d;%dR",&row,&col); printf("%d:%d\n",row,col); exit(0); } (you have to clean it up, add some #include, change the last printf to suit your need, etc). > I was actually looking for something to put in a script, kinda like: > > cp=$(get_cursor_position) > [[ ${cp} -gt 0 ]] && echo > > so my logger would not be writing at the end of an unrelated line. Denys is probably right, it would be better if programs ouputted only full lines. Remember that there is no warranty that you are the only program to write to the terminal: 1) a program could mess the ouput between "get_cursor_position" and your output and 2) another program could write *together* with yours. Hope this helps, Loïc _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox