diff --git a/perl/buffers.pl b/perl/buffers.pl index 016ed18..f1c8021 100644 --- a/perl/buffers.pl +++ b/perl/buffers.pl @@ -19,6 +19,8 @@ # Display sidebar with list of buffers. # # History: +# 2012-04-07, Sebastien Helleu : +# 3.3: fix truncation of wide chars in buffer name (option name_size_max) (bug #36034) # 2012-03-15, nils_2 : # 3.2: add new option "detach"(weechat >= 0.3.8) # : add new option "immune_detach_buffers" (requested by Mkaysi) @@ -117,8 +119,9 @@ # use strict; +use Encode qw( decode encode ); # -------------------------------[ internal ]------------------------------------- -my $version = "3.2"; +my $version = "3.3"; my $BUFFERS_CONFIG_FILE_NAME = "buffers"; my $buffers_config_file; @@ -532,7 +535,7 @@ sub build_buffers my $name = $buffer->{"name"}; $name = $buffer->{"short_name"} if (weechat::config_boolean( $options{"short_names"} ) eq 1); if (weechat::config_integer($options{"name_size_max"}) >= 1){ - $name = substr($name,0,weechat::config_integer($options{"name_size_max"})); + $name = encode("UTF-8", substr(decode("UTF-8", $name), 0, weechat::config_integer($options{"name_size_max"}))); } if ( weechat::config_boolean($options{"core_to_front"}) eq 1) { @@ -744,7 +747,7 @@ sub build_buffers { if (weechat::config_integer($options{"name_size_max"}) >= 1) # check max_size of buffer name { - $str .= substr($buffer->{"short_name"},0,weechat::config_integer($options{"name_size_max"})); + $str .= encode("UTF-8", substr(decode("UTF-8", $buffer->{"short_name"}), 0, weechat::config_integer($options{"name_size_max"}))); $str .= weechat::color(weechat::config_color( $options{"color_number_char"})).weechat::config_string($options{"name_crop_suffix"}) if (length($buffer->{"short_name"}) > weechat::config_integer($options{"name_size_max"})); } else @@ -756,7 +759,7 @@ sub build_buffers { if (weechat::config_integer($options{"name_size_max"}) >= 1) # check max_size of buffer name { - $str .= substr($buffer->{"name"},0,weechat::config_integer($options{"name_size_max"})); + $str .= encode("UTF-8", substr(decode("UTF-8", $buffer->{"name"},), 0, weechat::config_integer($options{"name_size_max"}))); $str .= weechat::color(weechat::config_color( $options{"color_number_char"})).weechat::config_string($options{"name_crop_suffix"}) if (length($buffer->{"name"}) > weechat::config_integer($options{"name_size_max"})); } else