2015-08-24 15 views
6

Io uso font-awesome 4.4.0 e ho esteso lo script di batteria i3blocks predefinito con le nuove icone della batteria. Tutti sembrano funzionare correttamente ma lo fa-battery-half Unicode: f242, che rende inutilizzabile lo script. Anche l'unicode sembra riferirsi al carattere .Script batteria i3blocks, usando font fantastico non funziona con alcuni unicodes

Nel terminale si blocca con:

$ 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 

Lo script è di default, ad eccezione dei seguenti poche righe:

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 .= '  '; 
} 

e

if ($status eq 'Discharging') { 

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

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

In l'editor lo script assomiglia a:

enter image description here

Come posso far funzionare lo script, con l'icona fa-battery-half Unicode: f242.

+1

Se si utilizza UTF-8 nel codice sorgente, è necessario inserire 'use utf8;' nel proprio script. –

+0

Appartiene a fonts.stackexchange.com – mob

+1

@mob che sembra non esistere. – simbabque

risposta

5

Hai due problemi.


Il tuo primo problema è un bug che è conseguente gli avvertimenti "di larghezza di carattere" e, eventualmente, altri problemi. Per risolvere l'errore, codificare correttamente l'output. In particolare, aggiungere il seguente allo script:

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

Questo dice a Perl di testo

  • Encode inviato a STDOUT usando UTF-8.
  • Codifica del testo inviato a STDERR utilizzando UTF-8.
  • Decodifica testo letto da STDIN utilizzando UTF-8.
  • Utilizzare UTF-8 come codifica predefinita per i file.

Gli avvisi indicano che Perl è stato in grado di notare il bug e che ha tentato di risolverlo codificando l'output utilizzando UTF-8. Questa è la correzione corretta, quindi l'output del tuo programma non cambierà, il che ci porta al secondo problema.


Il tuo secondo problema è che il font del tuo terminale non ha un glifo per U + F242. Se desideri visualizzare quel personaggio, dovrai usare un font diverso.

+0

Non capisco perché tutte le altre icone, con lo stesso tipo di carattere, non siano quelle usate in '} elsif ($ percent <50) { $ full_text. = '';' Il problema viene con questo unicode specifico o con l'icona? – apoc

+0

Non capisco la domanda. – ikegami

+0

La ragione del mio secondo problema. Se questo ha a che fare con l'unicode stesso o se c'è qualche altra ragione per cui i terminali non hanno un glifo per questo. – apoc