@@ -8,6 +8,7 @@ use colored::*;
88use git2:: Repository ;
99use license:: License ;
1010use std:: {
11+ cmp,
1112 collections:: HashMap ,
1213 convert:: From ,
1314 ffi:: OsStr ,
@@ -58,12 +59,17 @@ impl fmt::Display for Info {
5859 if !self . languages . is_empty ( ) {
5960 if self . languages . len ( ) > 1 {
6061 let title = "Languages: " ;
62+ let pad = " " . repeat ( title. len ( ) ) ;
6163 let mut s = String :: from ( "" ) ;
64+ let mut cnt = 0 ;
6265 for language in self . languages . iter ( ) {
63- let formatted_number = format ! ( "{:.*}" , 1 , language. 1 ) ;
64- s. push_str (
65- & ( language. 0 . to_string ( ) + " (" + & formatted_number. to_string ( ) + "%) " ) ,
66- ) ;
66+ let formatted_number = format ! ( "{:.*}" , 2 , language. 1 ) ;
67+ if cnt != 0 && cnt % 3 == 0 {
68+ s = s + & format ! ( "\n {}{} ({} %) " , pad, language. 0 , formatted_number) ;
69+ } else {
70+ s = s + & format ! ( "{} ({} %) " , language. 0 , formatted_number) ;
71+ }
72+ cnt += 1 ;
6773 }
6874 writeln ! ( buffer, "{}{}" , title. color( color) . bold( ) , s) ?;
6975 } else {
@@ -114,11 +120,17 @@ impl fmt::Display for Info {
114120 ) ?;
115121
116122 let logo = self . get_ascii ( ) ;
117- let mut lines = buffer. lines ( ) ;
123+ let mut logo_lines = logo. lines ( ) ;
124+ let mut info_lines = buffer. lines ( ) ;
118125 let left_pad = logo. lines ( ) . map ( |l| true_len ( l) ) . max ( ) . unwrap_or ( 0 ) ;
119126
120- for logo_line in logo. lines ( ) {
121- let info_line = match lines. next ( ) {
127+ for _ in 0 ..cmp:: max ( count_newlines ( logo) , count_newlines ( & buffer) ) {
128+ let logo_line = match logo_lines. next ( ) {
129+ Some ( line) => line,
130+ None => "" ,
131+ } ;
132+
133+ let info_line = match info_lines. next ( ) {
122134 Some ( line) => line,
123135 None => "" ,
124136 } ;
@@ -137,6 +149,10 @@ impl fmt::Display for Info {
137149 }
138150}
139151
152+ fn count_newlines ( s : & str ) -> usize {
153+ s. as_bytes ( ) . iter ( ) . filter ( |& & c| c == b'\n' ) . count ( )
154+ }
155+
140156/// Transforms a string with color format into one with proper
141157/// escape characters for color display.
142158///
@@ -323,7 +339,7 @@ fn project_license() -> Result<String> {
323339 . join ( ", " ) ;
324340
325341 if output == "" {
326- Ok ( "Unknown " . into ( ) )
342+ Ok ( "?? " . into ( ) )
327343 } else {
328344 Ok ( output)
329345 }
0 commit comments