Index: trunk/FACT++/src/Readline.cc
===================================================================
--- trunk/FACT++/src/Readline.cc	(revision 20015)
+++ trunk/FACT++/src/Readline.cc	(revision 20016)
@@ -139,5 +139,5 @@
     rl_getc_function                   = rl_ncurses_getc;
     rl_startup_hook                    = rl_ncurses_startup;
-    rl_redisplay_function              = rl_ncurses_redisplay;
+    // rl_redisplay_function              = rl_ncurses_redisplay;
     rl_event_hook                      = rl_ncurses_event_hook;
     rl_completion_display_matches_hook = rl_ncurses_completion_display;
@@ -247,8 +247,10 @@
 //! contents of the editing buffer. 
 //
+/*
 void Readline::rl_ncurses_redisplay()
 {
     This->Redisplay();
 }
+*/
 
 // --------------------------------------------------------------------------
@@ -331,13 +333,9 @@
         rl_on_new_line();
 
-    if (rl_prompt==p && !newline)
-        return;
-
-    UpdatePrompt(p);
-
-    int w, h;
-    rl_get_screen_size(&h, &w);
-    cout << '\r' << string(w+1, ' ') << '\r';
-    rl_forced_update_display();
+    if (newline || rl_display_prompt!=p)
+    {
+        UpdatePrompt(p);
+        rl_forced_update_display();
+    }
 }
 
@@ -359,5 +357,5 @@
 //! Default: call rl_redisplay()
 //
-
+/*
 void Readline::Redisplay()
 {
@@ -379,4 +377,5 @@
     rl_forced_update_display();
 }
+*/
 
 // --------------------------------------------------------------------------
@@ -782,9 +781,11 @@
 // --------------------------------------------------------------------------
 //
-//! return strlen(rl_display_prompt) + rl_point
+//! return rl_visible_prompt_length + rl_point
+//! (the current position within the line)
 //
 int Readline::GetAbsCursor()
 {
-    return strlen(rl_display_prompt) + rl_point;
+    extern int rl_visible_prompt_length;
+    return /*strlen(rl_display_prompt)*/rl_visible_prompt_length + rl_point;
 }
 
@@ -802,9 +803,11 @@
 // --------------------------------------------------------------------------
 //
-//! return the length of the prompt plus the length of the line buffer
+//! return rl_visible_prompt_length + rl_end
+//! (the length of the prompt plus the length of the line buffer)
 //
 int Readline::GetLineLength()
 {
-    return strlen(rl_display_prompt) + rl_end;
+    extern int rl_visible_prompt_length;
+    return /*strlen(rl_display_prompt)*/rl_visible_prompt_length + rl_end;
 }
 
Index: trunk/FACT++/src/Readline.h
===================================================================
--- trunk/FACT++/src/Readline.h	(revision 20015)
+++ trunk/FACT++/src/Readline.h	(revision 20016)
@@ -38,5 +38,5 @@
     static int    rl_ncurses_getc(FILE *);
     static int    rl_ncurses_startup();
-    static void   rl_ncurses_redisplay();
+    //static void   rl_ncurses_redisplay();
     static int    rl_ncurses_event_hook();
     static void   rl_ncurses_completion_display(char **matches, int num, int max);
@@ -53,5 +53,5 @@
     virtual void EventHook(bool newline=false);
     virtual void Shutdown(const char *buf);
-    virtual void Redisplay();
+    //virtual void Redisplay();
     virtual void CompletionDisplay(char **matches, int num, int max);
 
