cc: devel (original report:
http://lists.gnu.org/archive/html/screen-users/2010-02/msg00036.html)
* Xavier Guérin had this to say on [18 Feb 2010, 18:00:46 +0100]:
> Here are two screenshots:
>
> 1 - Normalized UTF-8, screen version 4.0.3 on SL (10.6.2) using macports
> (good_behaviour) :
>
>
>
> 1 - Normalized UTF-8, screen version 4.1.0 on SL (10.6.2) using the git repo
> (bad_behaviour) :
>
>
>
> The situation is as follows: my ZSH's chpwd updates the current window title
> with the current PWD. The issue is that apple uses UTF-8 norm D to store its
> file names (Normalized Form Decombined, NFD). The solution I found with
> screen 4.0.3 was to renormalize PWD into a combined form.
>
> What exactly happens with 4.1.0 is as follows: as soon as I change PWD to a
> directory which name contains and UTF-8 character (normalized), the
> hardstatus disappears, screen resets the buffer, and some '\n' are printed
> out. From this moment, screen keeps behaving weirdly until I change PWD.
Thank you very much. This is quite useful.
I could reproduce the problem with a 'Thèse' directory of my own. For
this particular case, the attached patch works for me. But it is likely
that the patch is not completely correct, and may break auto-hardstatus
for windows for some. I am weak on encoding issues, and I need to
test more to fine-tune the fix. In the meantime, if you could try it out
and let me know if this works you too, then that'd be great.
Also, help/suggestions about the encoding issue from anyone would also be
very welcome!
Cheers,
Sadrul
diff --git a/src/ansi.c b/src/ansi.c
index d15867b..83bf608 100644
--- a/src/ansi.c
+++ b/src/ansi.c
@@ -1573,7 +1573,21 @@ StringEnd()
curr->w_hstatus = 0;
}
if (curr->w_string != curr->w_stringp)
- curr->w_hstatus = SaveStr(curr->w_string);
+ {
+#ifdef UTF8
+ if (curr->w_encoding == UTF8)
+ {
+ int len = RecodeBuf(curr->w_string, curr->w_stringp -
curr->w_string,
+ 0, curr->w_encoding, 0);
+ curr->w_hstatus = malloc(len + 1);
+ RecodeBuf(curr->w_string, curr->w_stringp - curr->w_string, 0,
curr->w_encoding,
+ curr->w_hstatus);
+ curr->w_hstatus[len] = 0;
+ }
+ else
+#endif
+ curr->w_hstatus = SaveStr(curr->w_string);
+ }
WindowChanged(curr, 'h');
break;
case PM:
_______________________________________________
screen-users mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/screen-users