Java出力に色を付けるにはどうすればよいですか?
たとえば、Cおよび他の言語では、\033[0m
などのANSIエスケープを使用してこれを行うことができます。しかし、Javaでは機能しません。
public static void main(String[] x) {
System.out.println("\033[0m BLABLA \033[0m\n");
}
いいえ、しかしそれを処理できるサードパーティのAPIがあります
http://www.javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html
編集:もちろん、私が投稿したものよりも新しい記事がありますが、情報はまだ実行可能です。
Windowのcmd Prompt
に色を付けることはできないかもしれませんが、多くのUNIX(またはUnixに似た)端末で動作するはずです。
また、一部の端末は、一部のANSIエスケープシーケンス、特に24ビットカラーをサポートしていないことに注意してください。
最良の解決策については、下部のCursesセクションを参照してください。個人的または簡単なソリューション(クロスプラットフォームソリューションとしてnot)については、ANSI Escape Sequencesセクションを参照してください。
Java:System.out.println((char)27 + "[31m" + "ERROR MESSAGE IN RED");
python:print(chr(27) + "[31m" + "ERROR MESSAGE IN RED")
printf '\x1b[31mERROR MESSAGE IN RED'
printf '\e[31mERROR MESSAGE IN RED'
printf '
CTRL+V、CTRL+[[31mERROR MESSAGE IN RED'
^[
が表示されます。 2文字のように見えますが、実際には1つだけです。 ESC キャラクター。最適な方法ではありませんが、プログラミングまたはスクリプト言語でこれを行う最も簡単な方法は、エスケープシーケンスを使用することです。そのリンクから:
エスケープシーケンスは、コンピューターとその周辺機器の状態を変更するために使用される一連の文字です。これらは制御シーケンスとも呼ばれ、デバイス制御での使用を反映しています。
ただし、これらの端末はANSIエスケープシーケンスを使用するため、ビデオテキスト端末よりもさらに簡単になります。そのリンクから:
ANSIエスケープシーケンスは、ビデオテキスト端末のカーソル位置、色、およびその他のオプションを制御するためのインバンドシグナリングの標準です。ほとんどがEscおよび「[」で始まる特定のバイトシーケンスはテキストに埋め込まれ、端末は文字コードではなくコマンドとして検索および解釈します。
27
/hex:0x1B
)。一部のプログラミング言語(Javaなど)は、\e
または\x1b
を ESC キャラクター。ただし、ASCII文字27
is ESC したがって、27
をchar
に型キャストし、それを使用してエスケープシーケンスを開始できます。
一般的なプログラミング言語でそれを行ういくつかの方法を次に示します。
Java
System.out.println((char)27 + "[33mYELLOW");
Python
print(chr(27) + "[34mBLUE");
print("\x1b[35mMAGENTA");
\x1b
はPythonで正しく解釈されることに注意してくださいノードJS
console.log(String.fromCharCode(27) + "[36mCYAN");
console.log("\x1b[30;47mBLACK_ON_WHITE");
\x1b
はノードでも機能することに注意してくださいbash または zsh を使用している場合、出力の色付けは非常に簡単です(ほとんどの端末で)。 Linux、Os X、および一部のWindowの端末では、次の両方を実行して、端末が色をサポートしているかどうかを確認できます。
printf '\e[31mRED'
printf '\x1b[31mRED'
両方の色が表示される場合、それは素晴らしいことです! 1つだけの色が表示される場合は、そのシーケンスを使用します。どちらにも色が表示されない場合は、すべてを正しく入力したことと、bashまたはzshを使用していることを確認してください。それでも色が表示されない場合、お使いの端末はおそらくANSIエスケープシーケンスをサポートしていません。
正しく思い出せば、Linux端末は\e
と\x1b
の両方のエスケープシーケンスをサポートする傾向がありますが、os x端末は\e
のみをサポートする傾向がありますが、間違っている可能性があります。それでも、次の画像のようなものが表示されていれば、設定は完了です! (シェル zsh を使用しており、プロンプト文字列を着色していることに注意してください。また、 urxvt を端末として使用しています。 Linuxで。)
「これはどのように機能しますか?」基本的に、printf
は後続の文字シーケンス(単一引用符内のすべて)を解釈しています。 printf
が\e
または\x1b
に遭遇すると、これらの文字を ESC 文字(ASCII:27)。それがまさに私たちが望むものです。現在、printf
は ESC31m
、および ESC 有効なANSIエスケープシーケンスが続くと、色付きの出力が得られます(端末でサポートされている場合)。
echo -e '\e[32mGREEN'
(たとえば)を使用して、出力に色を付けることもできます。 echo
の-e
フラグ "[バックスラッシュエスケープの解釈を有効にする]" を使用し、echo
でエスケープシーケンスを適切に解釈する場合に使用する必要があります。
ANSIエスケープシーケンスは単なるカラー出力ではありませんが、それから始めて、カラーがどのように機能するかを正確に見てみましょう。次に、カーソルの操作方法を確認します。最後に、8ビットカラーと24ビットカラーの使用方法を確認します(ただし、サポートはごくわずかです)。
Wikipedia では、彼らは ESC[ CSI
のように、同じことをします。
ANSIエスケープを使用して出力に色を付けるには、次を使用します。
CSI
n
m
CSI
:エスケープ文字-^[[
または ESC[n
:数値-次のいずれか:30
-37
、39
:前景40
-47
、49
:バックグラウンドm
:リテラルASCII m
-エスケープシーケンスを終了しますBashまたはzshを使用して、可能なすべての色の組み合わせを示します。 Plop bashまたはzshで以下を確認してください(\e
を\x1b
に置き換える必要がある場合があります)。
for fg in {30..37} 39; do for bg in {40..47} 49; do printf "\e[${fg};${bg}m~TEST~"; done; printf "\n"; done;
結果:
+~~~~~~+~~~~~~+~~~~~~~~~~~+
| fg | bg | color |
+~~~~~~+~~~~~~+~~~~~~~~~~~+
| 30 | 40 | black |
| 31 | 41 | red |
| 32 | 42 | green |
| 33 | 43 | yellow |
| 34 | 44 | blue |
| 35 | 45 | Magenta |
| 36 | 46 | cyan |
| 37 | 47 | white |
| 39 | 49 | default |
+~~~~~~+~~~~~~+~~~~~~~~~~~+
SGRでは、テキストを変更することができます。これらの多くは特定の端末では機能しないため、本番レベルのプロジェクトでは控えめに使用してください。ただし、プログラム出力をより読みやすくしたり、異なるタイプの出力を区別したりするのに役立ちます。
色は実際にはSGRに該当するため、構文は同じです。
CSI
n
m
CSI
:エスケープ文字-^[[
または ESC[n
:数値-次のいずれか:0
:リセット1
-9
:さまざまなテキスト効果をオンにします21
-29
:さまざまなテキスト効果をオフにします(1
-9
よりもサポートが少ない)30
-37
、39
:前景色40
-47
、49
:背景色38
:8ビットまたは24ビットの前景色(下記の8/24ビット色を参照)48
:8ビットまたは24ビットの背景色(下記の8/24ビット色を参照)m
:リテラルASCII m
-エスケープシーケンスを終了しますかすかな(2)、斜体(3)、下線(4)、点滅(5、6)、反転表示(7)、隠蔽(8)、および取り消し線(9)のサポートはごくわずかです(ただし、まれにすべて)Linuxおよびos x端末で動作する傾向があります。
また、上記の属性をセミコロンで区切ることができることに注意する価値があります。たとえば、printf '\e[34;47;1;3mCRAZY TEXT\n'
はCRAZY TEXT
にblue foreground
が付いたwhite background
を表示し、bold
およびitalic
になります。
例えば:
Bashシェルまたはzshシェルに以下を追加して、実行できるすべてのテキスト効果を確認します。 (\e
を\x1b
に置き換える必要がある場合があります。)
for i in {1..9}; do printf "\e[${i}m~TEST~\e[0m "; done
結果:
私の端末はすべてのテキスト効果をサポートしていることがわかりますexcept for faint (2)、 conceal ( 8)およびクロスアウト(9)。
+~~~~~+~~~~~~~~~~~~~~~~~~+
| n | effect |
+~~~~~+~~~~~~~~~~~~~~~~~~+
| 0 | reset |
| 1 | bold |
| 2 | faint* |
| 3 | italic** |
| 4 | underline |
| 5 | slow blink |
| 6 | rapid blink* |
| 7 | inverse |
| 8 | conceal* |
| 9 | strikethrough* |
+~~~~~+~~~~~~~~~~~~~~~~~~+
* not widely supported
** not widely supported and sometimes treated as inverse
ほとんどの端末はこれをサポートしていますが、0-7
、9
色よりもサポートされていません。
構文:
CSI
38;5;
n
m
CSI
:エスケープ文字-^[[
または ESC[38;5;
:前景に8ビット色を使用することを示すリテラル文字列n
:数値-次のいずれか:0
-255
端末内のすべての色を素敵な方法でプレビューしたい場合、 Gist.github.comの素敵なスクリプト があります。
次のようになります。
8ビット色を使用して背景を変更する場合は、38
を48
に置き換えるだけです。
CSI
48;5;
n
m
CSI
:エスケープ文字-^[[
または ESC[48;5;
:背景に8ビット色を使用することを示すリテラル文字列n
:数値-次のいずれか:0
-255
トゥルーカラーとしても知られる24ビットカラーは、非常に優れた機能を提供します。これに対するサポートは間違いなく成長しています( urxvt 、私の端末[怒っている絵文字を挿入]を除くほとんどの最新端末で動作することを知っている限り)。
実際、vimでは24ビットカラーがサポートされています(24ビットカラーを有効にする方法については、 vim wiki を参照してください)。 gvim用に定義されたカラースキームから取得するため、本当にすてきです。たとえば、24ビット色に対してhighlight guibg=#______ guifg=#______
のfg/bgを使用します!ネイト?
24ビットカラーの仕組みは次のとおりです。
CSI
38;2;
r
;
g
;
b
m
CSI
:エスケープ文字-^[[
または ESC[38;2;
:前景に24ビット色の使用を示すリテラル文字列r
、g
、b
:数値—それぞれは0
-255
でなければなりません使用可能な多くの色((2^8)^3
または2^24
または16777216
possibilitesのほんの数個をテストするには、次を使用できます。これはbashまたはzshで:
for r in 0 127 255; do for g in 0 127 255; do for b in 0 127 255; do printf "\e[38;2;${r};${g};${b}m($r,$g,$b)\e[0m "; done; printf "\n"; done; done;
結果(これは gnome-terminal にあります urxvt 24ビットカラーをサポートしていません ... getそれを一緒に、urxvtメンテナー...本当の場合):
背景に24ビットカラーが必要な場合は、推測したでしょう! 38
を48
に置き換えるだけです:
CSI
48;2;
r
;
g
;
b
m
CSI
:エスケープ文字-^[[
または ESC[48;2;
:背景に24ビット色の使用を示すリテラル文字列r
、g
、b
:数値—それぞれは0
-255
でなければなりません\e
および\x1b
が機能しない場合があります。たとえば、 sh シェルでは、どちらも機能しない場合があります(私のシステムではnowですが、以前はそう思わなかった)。
これを回避するには、次を使用できます。 CTRL+V、CTRL+[ または CTRLV、ESC
これは「生」を挿入します ESC 文字(ASCII:27)。この^[
のように見えますが、心配しないでください。 2文字ではなく、1文字です。
例えば:
Cursesの完全なリファレンスについては、 Curses(プログラミングライブラリ)ページ を参照してください。 cursesは、unixおよびunixライクなオペレーティングシステムでのみ機能することに注意してください。
検索エンジンはこれを説明できるWebサイトへのリンクを明らかにすることができるので、あまり詳しく説明しませんが、ここで簡単に説明し、例を示します。
上記のテキストを読むと、\e
または\x1b
がprintf
で動作する場合があることを思い出してください。まあ、時には\e
と\x1b
がまったく動作しないことがあります(これは標準ではなく、このような端末で作業したことはありませんが、可能です)。さらに重要なことは、より複雑なエスケープシーケンス(考えてみてください Home (他の複数文字キー)は、すべての端末でサポートすることは困難です(terminfoとtermcapを解析し、すべての端末を処理する方法を理解することに多くの時間と労力を費やすつもりがない限り)。
Cursesはこの問題を解決します。基本的に、これらのメソッドを使用して、端末の機能を理解することができます(上記のウィキペディアの記事で説明されています)。
Cursesのほとんどの実装は、数千の異なる端末の機能を記述できるデータベースを使用します。 PDCursesなど、端末データベースではなく特殊なデバイスドライバーを使用する実装がいくつかあります。ほとんどの実装はterminfoを使用します。いくつかはtermcapを使用します。 Cursesには、文字セル端末へのバックポータビリティとシンプルさという利点があります。ビットマップグラフィックスまたは複数のフォントを必要としないアプリケーションの場合、通常、cursesを使用したインターフェースの実装は、Xツールキットを使用したものよりもはるかに単純で高速です。
ほとんどの場合、cursesはterminfoをポーリングし、カーソルとテキスト属性を操作する方法を理解できるようになります。次に、プログラマーであるあなたは、cursesが提供するAPIを使用して、目的の機能が必要な場合にカーソルを操作したり、テキストの色やその他の属性を変更します。
pythonは本当に使いやすいと思いますが、別のプログラミング言語でcursesを使用する場合は、duckduckgoまたは他の検索エンジンで検索してください。 :) python 3の簡単な例です:
import curses
def main(stdscr):
# allow curses to use default foreground/background (39/49)
curses.use_default_colors()
# Clear screen
stdscr.clear()
curses.init_pair(1, curses.COLOR_RED, -1)
curses.init_pair(2, curses.COLOR_GREEN, -1)
stdscr.addstr("ERROR: I like tacos, but I don't have any.\n", curses.color_pair(1))
stdscr.addstr("SUCCESS: I found some tacos.\n", curses.color_pair(2))
stdscr.refresh() # make sure screen is refreshed
stdscr.getkey() # wait for user to press key
if __== '__main__':
curses.wrapper(main)
結果:
あなたはこれがもっと物事を行うためのラウンドアラウンドな方法であると思うかもしれませんが、それは実際にははるかにクロスプラットフォームです(少なくともクロスターミナル…少なくともユニックスとユニックスライクプラットフォームの世界では)。色については、 quite ほど重要ではありませんが、他のマルチシーケンスエスケープシーケンスのサポートに関しては( Home、 End、 Page Up、 Page Downなど)、その後、呪いがより重要になります。
tput
は、カーソルとテキストを操作するためのコマンドラインユーティリティですtput
にはcurses
パッケージが付属しています。端末でクロスターミナル(ish)アプリケーションを使用する場合は、terminfoまたは必要なものを解析し、標準化されたコマンド(cursesなど)を使用して正しいエスケープシーケンスを返すため、tputを使用する必要があります。echo "$(tput setaf 1)$(tput bold)ERROR:$(tput sgr0)$(tput setaf 1) My tacos have gone missing"
echo "$(tput setaf 2)$(tput bold)SUCCESS:$(tput sgr0)$(tput setaf 2) Oh good\! I found my tacos\!"
結果:
これは私のために働いています:
System.out.println((char)27 + "[31mThis text would show up red" + (char)27 + "[0m");
色を白(または使用していたもの)に戻すには、末尾に「[37m」が必要です。そうしないと、「赤」に続くものすべてが作成される可能性があります。
JANSI ライブラリを使用して、WindowsでANSIエスケープシーケンスをレンダリングできます。
はい、100%可能です
set classpath =%classpath%; d:\ jansi-1.4.jar;
以下のコードを試してください:
import org.fusesource.jansi.AnsiConsole;
import static org.fusesource.jansi.Ansi.*;
import static org.fusesource.jansi.Ansi.Color.*;
public class Sample
{
public static void main(String[] args)
{
AnsiConsole.systemInstall();
System.out.println(ansi().fg(RED).a("Hello World").reset());
System.out.println("My Name is Raman");
AnsiConsole.systemUninstall();
}
}
Win32コンソールのソリューションを次に示します。
1)ここでJavaNativeAccessライブラリを取得します: https://github.com/twall/jna/
2)これらの2つのJavaクラスがトリックを行います。
楽しい。
package com.stackoverflow.util;
import com.Sun.jna.Library;
import com.Sun.jna.Native;
import com.Sun.jna.Platform;
import com.Sun.jna.Structure;
public class Win32 {
public static final int STD_INPUT_HANDLE = -10;
public static final int STD_OUTPUT_HANDLE = -11;
public static final int STD_ERROR_HANDLE = -12;
public static final short CONSOLE_FOREGROUND_COLOR_BLACK = 0x00;
public static final short CONSOLE_FOREGROUND_COLOR_BLUE = 0x01;
public static final short CONSOLE_FOREGROUND_COLOR_GREEN = 0x02;
public static final short CONSOLE_FOREGROUND_COLOR_AQUA = 0x03;
public static final short CONSOLE_FOREGROUND_COLOR_RED = 0x04;
public static final short CONSOLE_FOREGROUND_COLOR_PURPLE = 0x05;
public static final short CONSOLE_FOREGROUND_COLOR_YELLOW = 0x06;
public static final short CONSOLE_FOREGROUND_COLOR_WHITE = 0x07;
public static final short CONSOLE_FOREGROUND_COLOR_GRAY = 0x08;
public static final short CONSOLE_FOREGROUND_COLOR_LIGHT_BLUE = 0x09;
public static final short CONSOLE_FOREGROUND_COLOR_LIGHT_GREEN = 0x0A;
public static final short CONSOLE_FOREGROUND_COLOR_LIGHT_AQUA = 0x0B;
public static final short CONSOLE_FOREGROUND_COLOR_LIGHT_RED = 0x0C;
public static final short CONSOLE_FOREGROUND_COLOR_LIGHT_PURPLE = 0x0D;
public static final short CONSOLE_FOREGROUND_COLOR_LIGHT_YELLOW = 0x0E;
public static final short CONSOLE_FOREGROUND_COLOR_BRIGHT_WHITE = 0x0F;
public static final short CONSOLE_BACKGROUND_COLOR_BLACK = 0x00;
public static final short CONSOLE_BACKGROUND_COLOR_BLUE = 0x10;
public static final short CONSOLE_BACKGROUND_COLOR_GREEN = 0x20;
public static final short CONSOLE_BACKGROUND_COLOR_AQUA = 0x30;
public static final short CONSOLE_BACKGROUND_COLOR_RED = 0x40;
public static final short CONSOLE_BACKGROUND_COLOR_PURPLE = 0x50;
public static final short CONSOLE_BACKGROUND_COLOR_YELLOW = 0x60;
public static final short CONSOLE_BACKGROUND_COLOR_WHITE = 0x70;
public static final short CONSOLE_BACKGROUND_COLOR_GRAY = 0x80;
public static final short CONSOLE_BACKGROUND_COLOR_LIGHT_BLUE = 0x90;
public static final short CONSOLE_BACKGROUND_COLOR_LIGHT_GREEN = 0xA0;
public static final short CONSOLE_BACKGROUND_COLOR_LIGHT_AQUA = 0xB0;
public static final short CONSOLE_BACKGROUND_COLOR_LIGHT_RED = 0xC0;
public static final short CONSOLE_BACKGROUND_COLOR_LIGHT_PURPLE = 0xD0;
public static final short CONSOLE_BACKGROUND_COLOR_LIGHT_YELLOW = 0xE0;
public static final short CONSOLE_BACKGROUND_COLOR_BRIGHT_WHITE = 0xF0;
// typedef struct _COORD {
// SHORT X;
// SHORT Y;
// } COORD, *PCOORD;
public static class COORD extends Structure {
public short X;
public short Y;
}
// typedef struct _SMALL_RECT {
// SHORT Left;
// SHORT Top;
// SHORT Right;
// SHORT Bottom;
// } SMALL_RECT;
public static class SMALL_RECT extends Structure {
public short Left;
public short Top;
public short Right;
public short Bottom;
}
// typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
// COORD dwSize;
// COORD dwCursorPosition;
// Word wAttributes;
// SMALL_RECT srWindow;
// COORD dwMaximumWindowSize;
// } CONSOLE_SCREEN_BUFFER_INFO;
public static class CONSOLE_SCREEN_BUFFER_INFO extends Structure {
public COORD dwSize;
public COORD dwCursorPosition;
public short wAttributes;
public SMALL_RECT srWindow;
public COORD dwMaximumWindowSize;
}
// Source: https://github.com/twall/jna/nonav/javadoc/index.html
public interface Kernel32 extends Library {
Kernel32 DLL = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
// HANDLE WINAPI GetStdHandle(
// __in DWORD nStdHandle
// );
public int GetStdHandle(
int nStdHandle);
// BOOL WINAPI SetConsoleTextAttribute(
// __in HANDLE hConsoleOutput,
// __in Word wAttributes
// );
public boolean SetConsoleTextAttribute(
int in_hConsoleOutput,
short in_wAttributes);
// BOOL WINAPI GetConsoleScreenBufferInfo(
// __in HANDLE hConsoleOutput,
// __out PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
// );
public boolean GetConsoleScreenBufferInfo(
int in_hConsoleOutput,
CONSOLE_SCREEN_BUFFER_INFO out_lpConsoleScreenBufferInfo);
// DWORD WINAPI GetLastError(void);
public int GetLastError();
}
}
package com.stackoverflow.util;
import Java.io.PrintStream;
import com.stackoverflow.util.Win32.Kernel32;
public class ConsoleUtil {
public static void main(String[] args)
throws Exception {
System.out.print("abc");
static_color_print(
System.out,
"def",
Win32.CONSOLE_BACKGROUND_COLOR_RED,
Win32.CONSOLE_FOREGROUND_COLOR_BRIGHT_WHITE);
System.out.print("def");
System.out.println();
}
private static Win32.CONSOLE_SCREEN_BUFFER_INFO _static_console_screen_buffer_info = null;
public static void static_save_settings() {
if (null == _static_console_screen_buffer_info) {
_static_console_screen_buffer_info = new Win32.CONSOLE_SCREEN_BUFFER_INFO();
}
int stdout_handle = Kernel32.DLL.GetStdHandle(Win32.STD_OUTPUT_HANDLE);
Kernel32.DLL.GetConsoleScreenBufferInfo(stdout_handle, _static_console_screen_buffer_info);
}
public static void static_restore_color()
throws Exception {
if (null == _static_console_screen_buffer_info) {
throw new Exception("Internal error: Must save settings before restore");
}
int stdout_handle = Kernel32.DLL.GetStdHandle(Win32.STD_OUTPUT_HANDLE);
Kernel32.DLL.SetConsoleTextAttribute(
stdout_handle,
_static_console_screen_buffer_info.wAttributes);
}
public static void static_set_color(Short background_color, Short foreground_color) {
int stdout_handle = Kernel32.DLL.GetStdHandle(Win32.STD_OUTPUT_HANDLE);
if (null == background_color || null == foreground_color) {
Win32.CONSOLE_SCREEN_BUFFER_INFO console_screen_buffer_info =
new Win32.CONSOLE_SCREEN_BUFFER_INFO();
Kernel32.DLL.GetConsoleScreenBufferInfo(stdout_handle, console_screen_buffer_info);
short current_bg_and_fg_color = console_screen_buffer_info.wAttributes;
if (null == background_color) {
short current_bg_color = (short) (current_bg_and_fg_color / 0x10);
background_color = new Short(current_bg_color);
}
if (null == foreground_color) {
short current_fg_color = (short) (current_bg_and_fg_color % 0x10);
foreground_color = new Short(current_fg_color);
}
}
short bg_and_fg_color =
(short) (background_color.shortValue() | foreground_color.shortValue());
Kernel32.DLL.SetConsoleTextAttribute(stdout_handle, bg_and_fg_color);
}
public static<T> void static_color_print(
PrintStream ostream,
T value,
Short background_color,
Short foreground_color)
throws Exception {
static_save_settings();
try {
static_set_color(background_color, foreground_color);
ostream.print(value);
}
finally {
static_restore_color();
}
}
public static<T> void static_color_println(
PrintStream ostream,
T value,
Short background_color,
Short foreground_color)
throws Exception {
static_save_settings();
try {
static_set_color(background_color, foreground_color);
ostream.println(value);
}
finally {
static_restore_color();
}
}
}
JCDP (Java Colored Debug Printer)というjar
ライブラリを作成しました。
Linuxの場合、WhiteFangが言及したANSIエスケープコードを使用しますが、より直感的なコードの代わりに単語を使用してそれらを抽象化します。
Windowsの場合、実際にはJAnsiライブラリが含まれていますが、その上に抽象化レイヤーを作成し、Linux用に作成された直感的でシンプルなインターフェースを維持します。
このライブラリは MIT License でライセンスされているので、自由に使用してください。
JCDPのgithubリポジトリ をご覧ください。
最も簡単な方法は、Cygwinコンソールでプログラム(変更なし)を実行することです。
2番目の最も簡単な方法は、通常のWindowsコンソールでプログラム(変更なし)を実行し、tee.exe(CygwinまたはGitディストリビューションから)を介して出力をパイプライン処理することです。 Tee.exeはエスケープコードを認識し、適切なWinAPI関数を呼び出します。
何かのようなもの:
Java MyClass | tee.exe log.txt
Java MyClass | tee.exe /dev/null
エスケープシーケンスは、SOMETHINGが色に変換するために解釈する必要があります。コマンドラインから起動したときにJavaが使用する標準のCMD.EXEはこれをサポートしないため、Javaはサポートしません。
チェックアウト:エスケープコードでANSI値を使用しましたが、Windowsコマンドプロンプトでは動作しませんが、IDEおよびUnixシェルでは動作しません。 'Jansi'ライブラリをチェックすることもできます here Windowsサポートについて.
System.out.println("\u001B[35m" + "This text is PURPLE!" + "\u001B[0m");
System.err.println( "Errorrrrrr")は、コンソールにテキストを赤色で印刷します。
AnsiScape というライブラリを作成しました。これにより、より構造化された方法でカラー出力を作成できます。
例:
AnsiScape ansiScape = new AnsiScape();
String colors = ansiScape.format("{red {blueBg Red text with blue background}} {b Bold text}");
System.out.println(colors);
また、CSSクラスに似た独自の「エスケープクラス」を定義することもできます。
例:
AnsiScapeContext context = new AnsiScapeContext();
// Defines a "class" for text
AnsiClass text = AnsiClass.withName("text").add(RED);
// Defines a "class" for the title used
AnsiClass title = AnsiClass.withName("title").add(BOLD, BLUE_BG, YELLOW);
// Defines a "class" to render urls
AnsiClass url = AnsiClass.withName("url").add(BLUE, UNDERLINE);
// Registering the classes to the context
context.add(text).add(title).add(url);
// Creating an AnsiScape instance with the custom context
AnsiScape ansiScape = new AnsiScape(context);
String fmt = "{title Chapter 1}\n" +
"{text So it begins:}\n" +
"- {text Option 1}\n" +
"- {text Url: {url www.someurl.xyz}}";
System.out.println(ansiScape.format(fmt));