I've attached a simple test case where curses / the terminal does the
wrong thing. I'll file bugs against gnome-terminal and konsole: since
the Linux console and xterm behave as expected, I'll assume for now that
this is a terminal bug and not a curses bug.
Daniel
#include <ncurses.h>
#include <string.h>
#include <time.h>
int main(int argc, char **argv)
{
int width;
int height;
const char *msg1 = "0%", *msg2 = "50%";
int msg1len, msg2len;
WINDOW *root;
WINDOW *child;
msg1len = strlen(msg1);
msg2len = strlen(msg2);
root = initscr();
width = getmaxx(root);
height = getmaxy(root);
mvaddstr(height - 1, width - msg1len, msg1);
refresh();
mvaddstr(height - 1, width - msg2len, msg2);
refresh();
sleep(10);
return 0;
}