続きです。
[pr 3] [pr 4] [pr 5] それぞれみてみましょう。
まずは[pr 3]から。
1323 /* Print the group separator unless the output is adjacent to 1324 the previous output in the file. */ 1325 if ((0 <= out_before || 0 <= out_after) && used 1326 && p != lastout && group_separator) 1327 { 1328 printf("[pr 3]"); 1329 pr_sgr_start_if (sep_color); 1330 fputs_errno (group_separator); 1331 pr_sgr_end_if (sep_color); 1332 putchar_errno ('\n'); 1333 } 1334
コメントが、まさにそれっぽいですね。ファイルに出力する前に調整すると。
ここを必ず出力するようにすれば色が付きそうです。
続いて[pr 4]です。
1335 while (p < beg) 1336 { 1337 printf("[pr 4]"); 1338 char *nl = memchr (p, eol, beg - p); 1339 nl++; 1340 prline (p, nl, SEP_CHAR_REJECTED); 1341 p = nl; 1342 } 1343 } 1344
ん~。よくわかりません。
続いて[pr 5]。
1345 intmax_t n; 1346 if (out_invert) 1347 { 1348 printf("[pr 5]"); 1349 /* One or more lines are output. */ 1350 for (n = 0; p < lim && n < outleft; n++) 1351 { 1352 char *nl = memchr (p, eol, lim - p); 1353 nl++; 1354 if (!out_quiet) 1355 prline (p, nl, SEP_CHAR_SELECTED); 1356 p = nl; 1357 } 1358 }
これもよくわかりません。
ということで、[pr 3]の分岐を必ず通るようにして、色がつくか確認してみましょう。
1323 /* Print the group separator unless the output is adjacent to 1324 the previous output in the file. */ 1325 // if ((0 <= out_before || 0 <= out_after) && used 1326 // && p != lastout && group_separator) 1327 // { 1328 printf("[pr 3]"); 1329 pr_sgr_start_if (sep_color); 1330 fputs_errno (group_separator); 1331 pr_sgr_end_if (sep_color); 1332 putchar_errno ('\n'); 1333 // }
ビルドして、
takk@deb9:~/tmp/grep-3.1/src$ make CC grep.o CCLD grep takk@deb9:~/tmp/grep-3.1/src$
パイプするとどうなるか確認。
[pr 3]は、もちろん通り、[COLOR]も表示されました。
つづく
コメント