سؤال

لدي برنامج سطر الأوامر، الذي يقوم بإخراج التسجيل إلى الشاشة.

أريد أن تظهر خطوط الخطأ باللون الأحمر.هل هناك بعض رموز الأحرف الخاصة التي يمكنني إخراجها لتبديل لون النص إلى اللون الأحمر، ثم إعادته إلى اللون الأبيض مرة أخرى؟

أنا أستخدم روبي ولكني أتخيل أن هذا سيكون هو نفسه في أي لغة أخرى.

شيء مثل:

red = "\0123" # character code
white = "\0223"

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
هل كانت مفيدة؟

المحلول

تحتاج إلى الوصول إلى [Win32 Console API](http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx).لسوء الحظ، لا أعرف كيف يمكنك فعل ذلك من روبي.في بيرل، سأستخدم Win32::وحدة التحكم وحدة.لا تستجيب وحدة تحكم Windows لرموز الهروب ANSI.

بحسب ال مقالة عن تلوين مخرجات روبي كما ذكر artur02، فأنت بحاجة إلى تثبيت وتحميل جوهرة win32console.

نصائح أخرى

على نظام التشغيل Windows، يمكنك القيام بذلك بسهولة بثلاث طرق:

require 'win32console'
puts "\e[31mHello, World!\e[0m"

الآن يمكنك تمديد السلسلة بطريقة صغيرة تسمى red

 require 'win32console'
 class String
   def red
     "\e[31m#{self}\e[0m"
   end
 end

 puts "Hello, World!".red

كما يمكنك تمديد سلسلة مثل هذا للحصول على المزيد من الألوان:

require 'win32console'

class String
  { :reset          =>  0,
    :bold           =>  1,
    :dark           =>  2,
    :underline      =>  4,
    :blink          =>  5,
    :negative       =>  7,
    :black          => 30,
    :red            => 31,
    :green          => 32,
    :yellow         => 33,
    :blue           => 34,
    :magenta        => 35,
    :cyan           => 36,
    :white          => 37,
  }.each do |key, value|
    define_method key do
      "\e[#{value}m" + self + "\e[0m"
    end
  end
end

puts "Hello, World!".red

أو، إذا كان بإمكانك تثبيت الأحجار الكريمة:

gem install term-ansicolor

وفي برنامجك:

require 'win32console'
require 'term/ansicolor'

class String
  include Term::ANSIColor
end

puts "Hello, World!".red
puts "Hello, World!".blue
puts "Annoy me!".blink.yellow.bold

يرجى الاطلاع على مستندات المصطلح/ansicolor لمزيد من المعلومات والاستخدام المحتمل.

يمكنك أن تقرأ هنا مقالة جيدة ومصورة:http://kpumuk.info/Ruby-on-rails/colorizing-console-ruby-script-output/

أعتقد أن تحديد لون نص وحدة التحكم خاص جدًا باللغة.فيما يلي مثال في C# من MSDN:

for (int x = 0; x < colorNames.Length; x++)
{
  Console.Write("{0,2}: ", x);
  Console.BackgroundColor = ConsoleColor.Black;
  Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
  Console.Write("This is foreground color {0}.", colorNames[x]);
  Console.ResetColor();
  Console.WriteLine();
}

Console.ForegroundColor هي خاصية تحديد لون النص.

يمكنك استخدام تسلسل الهروب ANSI، لكن هذا لن يفعل ما تريده في الإصدارات الحديثة من Windows.تحتوي ويكيبيديا على مقالة مفيدة للغاية:

http://en.wikipedia.org/wiki/ANSI_escape_code

لذا فإن الإجابة على سؤالك الأصلي هي بالتأكيد "لا". ومع ذلك ، يمكنك تغيير اللون الأمامي دون كتابة تسلسل الهروب ، على سبيل المثال من خلال استدعاء وظيفة API Win32.لا أعرف كيف أفعل هذا النوع من الأشياء في روبي من أعلى رأسي، ولكن يبدو أن شخصًا آخر قد تمكن من ذلك:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925

أتصور أنك تريد استخدام 4 للأحمر الداكن أو 12 للأحمر الساطع، و7 لاستعادة اللون الافتراضي.

أتمنى أن يساعدك هذا!

على رموز الهروب ANSI:

وضع الأحرف 32 بت (النظام الفرعي: وحدة التحكم) لا تكتب تطبيقات Windows تسلسلات هروب ANSI إلى وحدة التحكم

يجب عليهم تفسير إجراءات رمز الهروب واستدعاء واجهة برمجة تطبيقات وحدة التحكم الأصلية بدلاً من ذلك

شكرا مايكروسوفت :-(

color [background][foreground]

حيث يتم تعريف الألوان على النحو التالي:

0 = Black    8 = Gray
1 = Blue     9 = Light Blue
2 = Green    A = Light Green
3 = Aqua     B = Light Aqua
4 = Red      C = Light Red
5 = Purple   D = Light Purple
6 = Yellow   E = Light Yellow
7 = White    F = Bright White

على سبيل المثال، لتغيير الخلفية إلى اللون الأزرق والمقدمة إلى اللون الرمادي، يمكنك كتابة:

color 18

لقد قمت بتأليف جوهرة صغيرة عبر الأنظمة الأساسية تتعامل مع هذا التشغيل بسلاسة على أنظمة Windows أو POSIX، تحت كل من التصوير بالرنين المغناطيسي وJRuby.

ليس لديه أي تبعيات، ويستخدم رموز ANSI على أنظمة POSIX، وإما FFI (JRuby) أو Fiddler (MRI) لنظام التشغيل Windows.

لاستخدامه، ببساطة:

gem install color-console

يوفر ColorConsole طرقًا لإخراج أسطر النص بألوان مختلفة، باستخدام وظائف Console.write وConsole.puts.

require 'color-console'

Console.puts "Some text"                    # Outputs text using the current  console colours
Console.puts "Some other text", :red        # Outputs red text with the current background
Console.puts "Yet more text", nil, :blue    # Outputs text using the current foreground and a blue background

# The following lines output BlueRedGreen on a single line, each word in the appropriate color
Console.write "Blue ", :blue
Console.write "Red ", :red
Console.write "Green", :green

قم بزيارة الصفحة الرئيسية للمشروع على https://github.com/agardiner/color-console لمزيد من التفاصيل.

بقدر ما أعرف أنه غير ممكن مع سطر الأوامر، بل هو لون واحد فقط ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Console_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine("Hello World");
            Console.ReadKey();
        }
    }
}

يمكنك تغيير اللون باستخدام برنامج C# بسيط، http://powerof2games.com/node/31 يصف كيف يمكنك تغليف مخرجات وحدة التحكم لتحقيق التأثير.

انت تريد رموز الهروب ANSI.

لا تحدد مواصفات C/C++ القياسية للإخراج إلى سطر الأوامر أي إمكانيات لتغيير لون نافذة وحدة التحكم.ومع ذلك، هناك العديد من الوظائف في Win32 للقيام بهذا الشيء.

أسهل طريقة لتغيير لون وحدة التحكم Win32 هي من خلال أمر النظام في iostream.h.تستدعي هذه الوظيفة أمر DOS.لتغيير الألوان، سوف نستخدمها لاستدعاء أمر اللون.على سبيل المثال، system("Color F1"); سيجعل وحدة التحكم باللون الأزرق الداكن على الأبيض.

ألوان دوس

الألوان المتاحة للاستخدام مع الأمر هي ألوان DOS الستة عشر التي يتم تمثيل كل منها برقم سداسي عشري.الأول هو الخلفية والثاني هو المقدمة.

0 = Black    8 = Gray
1 = Blue     9 = Light Blue
2 = Green    A = Light Green
3 = Aqua     B = Light Aqua
4 = Red      C = Light Red
5 = Purple   D = Light Purple
6 = Yellow   E = Light Yellow
7 = White    F = Bright White

هذه اللمسة الصغيرة من الألوان تجعل برامج وحدة التحكم أكثر إمتاعًا من حيث المظهر.ومع ذلك، سيقوم أمر اللون بتغيير لون وحدة التحكم بأكملها.للتحكم في الخلايا الفردية، نحتاج إلى استخدام وظائف من windows.h.

افعل ذلك فأنت بحاجة إلى استخدام SetConsoleAttribute وظيفة

http://msdn.microsoft.com/en-us/library/ms686047.aspx

الكثير من ANSI القديم رموز الألوان عمل.رمز المقدمة الحمراء يشبه Escape-[31m.الهروب هو الحرف 27، لذا فهو "\033[31m" أو "\x1B[31m"، اعتمادًا على مخطط الهروب الخاص بك.

[39m هو رمز العودة إلى اللون الافتراضي.

من الممكن أيضًا تحديد رموز متعددة مرة واحدة لتعيين لون المقدمة والخلفية في وقت واحد.

قد تضطر إلى تحميل ANSI.sys، انظر هذه الصفحة.

في النهاية تحتاج إلى الاتصال SetConsoleTextAttribute.يمكنك الحصول على مقبض المخزن المؤقت لشاشة وحدة التحكم من GetStdHandle.

لقد كنت أستخدم برنامجًا مجانيًا لـ windows tail يسمى baretail (google it) على مر العصور والذي يتيح لك إنشاء إصدار مخصص لنظام التشغيل windows من أمر unix tail.يتيح لك تلوين الخطوط اعتمادًا على الكلمات الرئيسية التي تحددها.الجميل في الأمر كحل هو أنه غير مرتبط بلغة أو إعداد معين، وما إلى ذلك، ما عليك سوى تحديد نظام الألوان الخاص بك وتشغيله مثل دونكي كونج.في أفضل 10 مساعدين مجانيين شخصيًا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top