<<< Date Index >>>     <<< Thread Index >>>

Re: What's needed for mutt 1.6? (wcwidth)



* Sun Mar  4 2007 TAKIZAWA Takashi <taki@xxxxxxxxxxxxxxxx>
> I want you to commit the patch concerning wcwidth. 
> http://www.emaillab.org/mutt/1.5.14/patch-1.5.14.tt.wcwidth.1
> 
> This patch updates wcwidth() to latest Markus Kuhn's one.
> Because this wcwidth() supports CJK, the Japanese localization is
> deleted from Mutt, and the CJK localization is added.  
> And it enables change of character-cell width of the East Asian 
> Ambiguous (A) class by using $cjk_width.
> The detailed explanation of East Asian Ambiguous is written on the 
> following site. 
>   http://www.unicode.org/unicode/reports/tr11/
> Because the characters for drawing of the tree is Ambiguous in UTF-8,
> the relating change is done, too. 
> This patch has been used for one and a half years in the community of 
> mutt in Japan. 

I'm for it, as MLTerm has "col_size_of_width_a" option
and vim has "ambwidth". But I have several questions:

1. What is legacy_ja?
Most of your code is clean, but the only thing I can't
understand is legacy_ja. Isn't there any side effect?
Why don't you just make it optional, e.g.
$more_widechars="00A2:00A3:00A5:00A6:00AC:00AF:2212"?
I think this is better than hard-coding them, though
much slower. Or am I missing something?

2. Why not use macros for mutt_strwidth/_tree?
Mutt calls mutt_strwidth very often. What about macros?
#define mutt_strwidth(s) _mutt_strwidth(s,0)
#define mutt_strwidth_tree(s) _mutt_strwidth(s,1)


> As the above-mentioned changes, mutt comes always to use not wcwidth() 
> of the systems but this wcwidth() of mutt.
> This is because wcwidth() of the systems doesn't support Ambiguous. 
> If it wants to use wcwidth() of the systems, another patch that can 
> be changed in the configure script is prepared. 
> http://www.emaillab.org/mutt/1.5.14/patch-1.5.14.tt.wcwidth-alt.1

3. Can't we special-case East Asian Ambiguous class?
Many users are using their system's wcwidth instead of
mutt's one at this moment. So I don't think it is good
to use mutt's wcwidth by default. Instead, what about
using system's wcwidth after checking Ambiguous in mutt?
Of cource this requires many s/wcwidth/mutt_wcwidth/g,
but it worth the effort, doesn't it?

-int wcwidth(wchar_t wc)
+int mutt_wcwidth(wchar_t wc)
 {
+#ifdef HAVE_WC_FUNCS
+# ifdef ENABLE_CJK_WIDTH
+  if (option (OPTCJKWIDTH) &&
+      bisearch(wc, ambiguous, ...))
+    return 2;
+# endif
+  return wcwidth (wc);
+#else /* !HAVE_WC_FUNCS */
     ...your code...
+#endif /+ HAVE_WC_FUNCS */
 }

-- 
tamo