Hi Jean-Pierre,
I believe I found the reason for this problem, see SVN 132.
When the workspace is )LOADed or )COPYed and ⎕NLT is assigned.
Assigning ⎕NLT calls setlocale(), which in turn seems to mess up
libreadline.
As of SVN 132:
* ⎕NLT is not assigned when )LOADing a workspace,
* when assigning ⎕NLT I call setlocale only if its value has changed,
* after calling setlocale() I call rl_initialize().
/// Jürgen
On 02/16/2014 04:39 PM, ds.jaypee wrote:
Hi Jürgen,
I've successfully tried this ugly workaround, it heals the symptom,
not the cause...
In Workspace.cc/Workspace::load_WS()
[...]
// got open file. We assume that from here on everything will be fine.
// clear current WS and load it from file
//
the_workspace.clear_WS(CERR, true);
in.read_Workspace();
Input::init(); ///////////////// Kludge alert ! /////////////
return Workspace::get_LX();
}
Regards,
Jean-Pierre
Le 15/02/2014 20:06, Juergen Sauermann a écrit :
Hi Jean-Pierre,
I have debugged the matter a little further.
It seems like the readline library sometimes skips too few characters.
For example, after entering
∇C[⎕]∇
and then recalling the line and deleting the last character with
Backspace,
the new line should be:
∇C[⎕]
However, it is actually ∇C[⎕] plus the first two bytes of the
trailing ∇ (which has
3 bytes in UTF8 encoding). So the backspace only deletes the last
byte instead of the last char.
I have no explanation yet why this occurs only after )LOADing a
workspace.
As a short-term work-around I am now discarding the last char and
print a short message,
rather than Assert()ing, see SVN 126. The behavior on my machine
seems to be somewhat
different from yours.
I have put the issue on my mid-term TODO list. It could be that I
have to remove
use of libreadline completely, which takes a while.
/// Jürgen
On 02/12/2014 09:07 PM, ds.jaypee wrote:
Hallo Jürgen,
I confirm that the crash is resolved.
However, the APL input corruption is still present.
Basically after reload, you cannot type any new APL character
Here is a screen dump, in case you cannot reproduce it in your
environment:
Best regards,
Jean-Pierre