printf("\x1b[コードmメッセージ");
2008 年 5 月 17 日
| カテゴリー: プログラム
printf() にコードを指定すると、文字色や背景色を変えたりすることができるようです。
ただし変えた色は戻さないと継続します。
コードはセミコロンで区切ることで複数指定することが可能なようです。
太字で青で “Hello” を表示するなら printf(“\x1b[1;34mHello!"); 。
以下、自分用に用意したファイル。
printer.h
enum で数字部分を BLUE や RED と指定できるようにしてもよかったけれど、とりあえずコードを直接指定する形のままで。
使う方にはヘッダーファイルを読んでもらう前提。
/*****************************************
* Program: printer.h
* Author: sarian
* Created on 2008/05/17
*****************************************/
#ifndef _PRINTER_H
#define _PRINTER_H
/* =======================================
* set default code: 0
* ======================================= */
void printer_initPrinter();
/* =======================================
* change print type.
* set type BOLD code: 1
* set type UNDER LINE code: 4
* set type BLINKING code: 5
* set type REVERSING code: 7
* ======================================= */
void printer_setType(int type);
/* =======================================
* change print color.
* set color BLACK code: 30
* set color RED code: 31
* set color GREEN code: 32
* set color YELLOW code: 33
* set color BLUE code: 34
* set color MAGENTA code: 35
* set color CYAN code: 36
* set color GRAY code: 37
* ======================================= */
void printer_setPrintColor(int color);
/* =======================================
* change background color.
* set color BLACK code: 40
* set color RED code: 41
* set color GREEN code: 42
* set color YELLOW code: 43
* set color BLUE code: 44
* set color MAGENTA code: 45
* set color CYAN code: 46
* set color GRAY code: 47
* ======================================= */
void printer_setBackgroundColor(int color);
#endif /* _PRINTER_H */
printer.c
一時的に色を変更するような、引数に色を指定できるような仕様だといいのに。
と、書いた瞬間にそういうの作ればいいのかと気づいたわけですが。
printer_colorPrint(char *message, int color);
でもフォーマット指定できない printf なんて意味ないし、
前の色を保存しておかないと、使い終わった後勝手にデフォルトにするのもマズいし保留。
/*****************************************
* Program: printer.c
* Author: sarian
* Created on 2008/05/17
*****************************************/
#include <stdio.h>
#include "printer.h"
/**
* default printer color.
*/
void printer_initPrinter() {
printf("\x1b[0m"); /* DEFAULT */
}
/**
* set print type.
* @param type
*/
void printer_setPrintType(int type) {
switch(type) {
case 1:
printf("\x1b[1m"); /* BOLD */
break;
case 4:
printf("\x1b[4m"); /* UNDER LINE */
break;
case 5:
printf("\x1b[31m"); /* BLINKING */
break;
case 7:
printf("\x1b[31m"); /* REVERSING */
break;
default:
break;
}
}
/**
* change print color.
* @param color
*/
void printer_setPrintColor(int color) {
switch(color) {
case 30:
printf("\x1b[30m"); /* BLACK */
break;
case 31:
printf("\x1b[31m"); /* RED */
break;
case 32:
printf("\x1b[32m"); /* GREEN */
break;
case 33:
printf("\x1b[33m"); /* YELLOW */
break;
case 34:
printf("\x1b[34m"); /* BLUE */
break;
case 35:
printf("\x1b[35m"); /* MAGENTA */
break;
case 36: /* CYAN */
printf("\x1b[36m");
break;
case 37: /* GRAY */
printf("\x1b[37m");
break;
default:
break;
}
}
/**
* change background color.
* @param color
*/
void printer_setBackgroundColor(int color) {
switch(color) {
case 40:
printf("\x1b[40m"); /* BLACK*/
break;
case 41:
printf("\x1b[41m"); /* RED */
break;
case 42:
printf("\x1b[42m"); /* GREEN */
break;
case 43:
printf("\x1b[43m"); /* YELLOW */
break;
case 44:
printf("\x1b[44m"); /* BLUE */
break;
case 45:
printf("\x1b[45m"); /* MAGENTA */
break;
case 46: /* CYAN */
printf("\x1b[46m");
break;
case 47: /* GRAY */
printf("\x1b[47m");
break;
default:
break;
}
}
main.c
使い方はこんなかんじ。
colorgcc とかカラフルなのは好きなので、今後コンソールアプリケーションを作る際にはちょっと意識してみるつもり。
/*****************************************
* Program: main.c
* Author: sarian
* Created on 2008/05/17
*****************************************/
#include <stdio.h>
#include <stdlib.h>
#include "printer.h"
int main(int argc, char *argv[]) {
printer_setPrintColor(30);
printf(“BLACK\n”);
printer_setPrintColor(31);
printf(“RED\n”);
printer_setPrintColor(32);
printf(“GREEN\n”);
printer_setPrintColor(33);
printf(“YELLOW\n”);
printer_setPrintColor(34);
printf(“BLUE\n”);
printer_setPrintColor(35);
printf(“MAGENTA\n”);
printer_setPrintColor(36);
printf(“CYAN\n”);
printer_setPrintColor(37);
printf(“GRAY\n”);
printer_initPrinter();
printf(“DEFAULT\n”);
return EXIT_SUCCESS;
}
コンパイルと実行
$ gcc -Wall printer.c main.c -o PrintDemo
$ ./PrintDemo



printf(“\x1b[%dm” , color);じゃだめなの?
と、思ったけど何カ所か無理なとこがあったね。
#コメント削除できないのね。
アー。それでいけるね。
逆に、無理なところってなんだろ。
# コメ削除はアカウント管理しないといけないしね。管理者権限で削除はできるけど。