i3blocks battery script, using font awesome doesn't work with some unicodes

给你一囗甜甜゛ 提交于 2020-01-02 03:40:08

问题


I use font-awesome 4.4.0 and have extended the default i3blocks battery script with the new battery icons. All seem to work correctly but the fa-battery-half Unicode: f242, which renders the script useless. The unicode also seems to refer to the character .

In the terminal it crashes with:

$ perl /usr/share/i3blocks/battery
Wide character in print at /usr/share/i3blocks/battery line 65.
28%  (01:02)
Wide character in print at /usr/share/i3blocks/battery line 66.
28%  
#000000

The script is default, except of the following few lines:

if ($status eq 'Discharging') {

if ($percent < 10) {
    $full_text .= '  ';
} elsif ($percent < 25) {
    $full_text .= '  ';
} elsif ($percent < 50) {
    $full_text .= '  ';
} elsif ($percent < 75) {
    $full_text .= '  ';
} elsif ($percent < 100) {
    $full_text .= '  ';
}

} elsif ($status eq 'Charging') {
    $full_text .= '  ';
}

and

if ($status eq 'Discharging') {

if ($percent < 25) {
    print "#FF003C\n";
} else {
    print "#000000\n";
}

if ($percent < 5) {
    exit(33);
}
}

In the editor the script looks like:

How may I get the script to work, with the fa-battery-half Unicode: f242 icon.


回答1:


You have two problems.


Your first problem is a bug that's resulting in the "wide character" warnings and possibly other problems. To solve the error, properly encode your output. Specifically, add the following to your script:

use open ':std', ':encoding(UTF-8)';

This tells Perl to

  • Encode text sent to STDOUT using UTF-8.
  • Encode text sent to STDERR using UTF-8.
  • Decode text read from STDIN using UTF-8.
  • Use UTF-8 as the default encoding for files.

The warnings indicate that Perl was able to notice your bug, and that it attempted to fix it by encoding the output using UTF-8. That's the correct fix, so your program's output won't change, which brings us to the second problem.


Your second problem is that your terminal's font doesn't have a glyph for U+F242. If you wish to display that character, you'll need to use a different font.



来源:https://stackoverflow.com/questions/32181689/i3blocks-battery-script-using-font-awesome-doesnt-work-with-some-unicodes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!