ruby - রঙিন রুবি আউটপুট




colors console-application (8)

টার্মিনাল আউটপুট জন্য ব্যাকগ্রাউন্ড এবং ফোরাম টেক্সট colorization সঞ্চালন একটি মণি আছে?

আমি মনে করি, পাসকাল প্রোগ্রামিং করার সময় আমরা সবাই ছোট ছোট শিক্ষা প্রোগ্রামগুলিকে আরও সুন্দর এবং উপস্থাপক দেখানোর জন্য textcolor(...) পদ্ধতির সাথে খেলা textcolor(...)

Ruby অনুরূপ কিছু আছে?


Colorize আমার প্রিয় মণি! :-)

এটা দেখ:

https://github.com/fazibear/colorize

স্থাপন:

gem install colorize

ব্যবহার:

require 'colorize'

puts "I am now red".red
puts "I am now blue".blue
puts "Testing".yellow

অন্যান্য উত্তরগুলি বেশিরভাগ লোকের জন্য কাজের জরিমানা করবে, তবে "সঠিক" এই কাজ করার ইউনিক্সের উল্লেখ করা উচিত। যেহেতু সকল ধরণের পাঠ্য টার্মিনাল এই ক্রমগুলির সমর্থন করে না তাই আপনি টার্মিনফো ডাটাবেসটি অনুসন্ধান করতে পারেন, বিভিন্ন পাঠ্য টার্মিনালের ক্যাপাবিলিটে একটি বিমূর্ততা। এটি বেশিরভাগ ঐতিহাসিক আগ্রহের কথা মনে হতে পারে - আজকের সফ্টওয়্যার টার্মিনালগুলি সাধারণত ব্যবহারের জন্য ANSI ক্রমগুলি সমর্থন করে - তবে এটিতে অন্তত একটি কার্যকর প্রভাব রয়েছে: এটি কখনও কখনও পরিবেশগত পরিবর্তনশীল TERM dumb TERM সক্ষম হতে পারে। স্টাইলিং, উদাহরণস্বরূপ একটি টেক্সট ফাইল আউটপুট সংরক্ষণ করার সময়। এছাড়াও, এটি সঠিকভাবে কাজ করতে ভাল লাগছে। :-)

আপনি ruby-terminfo মণি ব্যবহার করতে পারেন। এটি ইনস্টল করার জন্য কিছু সি কম্পাইল প্রয়োজন; আমি উবুন্টু 14.10 সিস্টেমের অধীনে এটি ইনস্টল করতে পেরেছিলাম:

$ sudo apt-get install libncurses5-dev
$ gem install ruby-terminfo --user-install

তারপরে আপনি এইরকম ডাটাবেস অনুসন্ধান করতে পারেন (কী কোডগুলি পাওয়া যায় তার তালিকাটির জন্য টার্মিনফো ম্যান পৃষ্ঠাটি দেখুন):

require 'terminfo' 
TermInfo.control("bold")
puts "Bold text"
TermInfo.control("sgr0")
puts "Back to normal."
puts "And now some " + TermInfo.control_string("setaf", 1) + 
     "red" + TermInfo.control_string("sgr0") + " text."

এখানে একটি সামান্য আচ্ছাদিত ক্লাস আমি জিনিসগুলিকে ব্যবহার করার জন্য একটু বেশি সহজ করার জন্য একসাথে রাখি।

require 'terminfo'

class Style
  def self.style() 
    @@singleton ||= Style.new
  end

  colors = %w{black red green yellow blue magenta cyan white}
  colors.each_with_index do |color, index|
    define_method(color) { get("setaf", index) }
    define_method("bg_" + color) { get("setab", index) }
  end

  def bold()  get("bold")  end
  def under() get("smul")  end
  def dim()   get("dim")   end
  def clear() get("sgr0")  end

  def get(*args)
    begin
      TermInfo.control_string(*args)
    rescue TermInfo::TermInfoError
      ""
    end
  end
end

ব্যবহার:

c = Style.style
C = c.clear
puts "#{c.red}Warning:#{C} this is #{c.bold}way#{C} #{c.bg_red}too much #{c.cyan + c.under}styling#{C}!"
puts "#{c.dim}(Don't you think?)#{C}"

(সম্পাদনা) অবশেষে, যদি আপনি একটি মণির প্রয়োজন না করেন তবে আপনি এখানে বর্ণিত tput প্রোগ্রামের উপর নির্ভর করতে পারেন - রুবি উদাহরণ:

puts "Hi! " + `tput setaf 1` + "This is red!" + `tput sgr0`

আমি কয়েক খুঁজে পাওয়া যায় নি:

http://github.com/ssoroka/ansi/tree/master

উদাহরণ:

puts ANSI.color(:red) { "hello there" }
puts ANSI.color(:green) + "Everything is green now" + ANSI.no_color

http://flori.github.com/term-ansicolor/

উদাহরণ:

print red, bold, "red bold", reset, "\n"
print red(bold("red bold")), "\n"
print red { bold { "red bold" } }, "\n"

http://github.com/sickill/rainbow

উদাহরণ:

puts "this is red".foreground(:red) + " and " + "this on yellow bg".background(:yellow) + " and " + "even bright underlined!".underline.bright

আপনি যদি উইন্ডোজগুলিতে থাকেন তবে আপনাকে রংগুলির জন্য সমর্থন সক্রিয় করতে "রুম ইনস্টল win32console" করতে হবে।

এছাড়াও রঙিন কনসোল নিবন্ধ রুবি-স্ক্রিপ্ট আউটপুট দরকারী যদি আপনার নিজস্ব মণি তৈরি করতে হয়। এটি স্ট্রিং এএনএসআই রঙ যোগ কিভাবে ব্যাখ্যা করে। আপনি স্ট্রিং বা কিছু প্রসারিত যে কিছু ক্লাসে এটি মোড়ানো এই জ্ঞান ব্যবহার করতে পারেন।


আমি সাহায্য করতে পারে যে এই পদ্ধতি তৈরি। এটি একটি বড় চুক্তি নয় তবে এটি কাজ করে:

def colorize(text, color = "default", bgColor = "default")
    colors = {"default" => "38","black" => "30","red" => "31","green" => "32","brown" => "33", "blue" => "34", "purple" => "35",
     "cyan" => "36", "gray" => "37", "dark gray" => "1;30", "light red" => "1;31", "light green" => "1;32", "yellow" => "1;33",
      "light blue" => "1;34", "light purple" => "1;35", "light cyan" => "1;36", "white" => "1;37"}
    bgColors = {"default" => "0", "black" => "40", "red" => "41", "green" => "42", "brown" => "43", "blue" => "44",
     "purple" => "45", "cyan" => "46", "gray" => "47", "dark gray" => "100", "light red" => "101", "light green" => "102",
     "yellow" => "103", "light blue" => "104", "light purple" => "105", "light cyan" => "106", "white" => "107"}
    color_code = colors[color]
    bgColor_code = bgColors[bgColor]
    return "\033[#{bgColor_code};#{color_code}m#{text}\033[0m"
end

এটি কিভাবে ব্যবহার করবেন তা এখানে:

puts "#{colorize("Hello World")}"
puts "#{colorize("Hello World", "yellow")}"
puts "#{colorize("Hello World", "white","light red")}"

সম্ভাব্য উন্নতি হতে পারে:

  • colors এবং bgColors colors পদ্ধতি বলা হয় প্রতিটি সময় সংজ্ঞায়িত করা হচ্ছে এবং তারা পরিবর্তন হয় না।
  • অন্যান্য অপশন যোগ করুন যেমন bold , underline , dim , ইত্যাদি

এই পদ্ধতি p জন্য কাজ করে না, যেমন p তার যুক্তি একটি inspect করে। উদাহরণ স্বরূপ:

p "#{colorize("Hello World")}"

দেখাবে "\ e [0; 38mHello বিশ্ব \ ই [0 মি"

আমি সেট, print এবং লগার মণির সাথে এটি পরীক্ষা করেছি, এবং এটি সূক্ষ্ম কাজ করে।

আমি এটিকে উন্নত করেছি এবং একটি বর্গ তৈরি করেছি তাই colors এবং bgColors colors ক্লাস bgColors এবং colors একটি ক্লাস পদ্ধতি:

সম্পাদনা করুন: ভাল কোড শৈলী, পরিবর্তে স্ট্রিংগুলির পরিবর্তে প্রতীক ব্যবহার করে বর্গের ভেরিয়েবলের সংজ্ঞায়িত স্থিরতা, আরও বেশি বিকল্প যোগ করা হয়েছে যেমন গাঢ়, ইটালিক ইত্যাদি।

class Colorizator
    COLOURS = { default: '38', black: '30', red: '31', green: '32', brown: '33', blue: '34', purple: '35',
                cyan: '36', gray: '37', dark_gray: '1;30', light_red: '1;31', light_green: '1;32', yellow: '1;33',
                light_blue: '1;34', light_purple: '1;35', light_cyan: '1;36', white: '1;37' }.freeze
    BG_COLOURS = { default: '0', black: '40', red: '41', green: '42', brown: '43', blue: '44',
                   purple: '45', cyan: '46', gray: '47', dark_gray: '100', light_red: '101', light_green: '102',
                   yellow: '103', light_blue: '104', light_purple: '105', light_cyan: '106', white: '107' }.freeze

    FONT_OPTIONS = { bold: '1', dim: '2', italic: '3', underline: '4', reverse: '7', hidden: '8' }.freeze

    def self.colorize(text, colour = :default, bg_colour = :default, **options)
        colour_code = COLOURS[colour]
        bg_colour_code = BG_COLOURS[bg_colour]
        font_options = options.select { |k, v| v && FONT_OPTIONS.key?(k) }.keys
        font_options = font_options.map { |e| FONT_OPTIONS[e] }.join(';').squeeze
        return "\e[#{bg_colour_code};#{font_options};#{colour_code}m#{text}\e[0m".squeeze(';')
    end
end

আপনি এটি ব্যবহার করে ব্যবহার করতে পারেন:

Colorizator.colorize "Hello World", :gray, :white
Colorizator.colorize "Hello World", :light_blue, bold: true
Colorizator.colorize "Hello World", :light_blue, :white, bold: true, underline: true

উপরের উপায়ে উত্তরগুলি উপকারী বলে মনে হল তবে আমি কোনও তৃতীয় পক্ষের লাইব্রেরিগুলি ব্যবহার না করে লগ আউটপুটের মতো কিছু রঙ করতে চাইলে বিলটি মাপসই করা হয়নি। নিম্নলিখিত আমার জন্য সমস্যা সমাধান:

red = 31
green = 32
blue = 34

def color (color=blue)
  printf "\033[#{color}m";
  yield
  printf "\033[0m"
end

color { puts "this is blue" }
color(red) { logger.info "and this is red" }

আমি আসা করি এটা সাহায্য করবে!



কোন রত্ন ছাড়াই এটি তৈরি করার জন্য আমি এখানে যা করেছি তা হল:

def red(mytext) ; "\e[31m#{mytext}\e[0m" ; end
puts red("hello world")

তারপরে উদ্ধৃতিগুলিতে শুধুমাত্র পাঠ্যটি রঙিন থাকে এবং আপনি আপনার নিয়মিত নির্ধারিত প্রোগ্রামে ফিরে আসেন।


স্ট্রিং ক্লাস পদ্ধতি হিসাবে (শুধুমাত্র ইউনিক্স):

class String
def black;          "\e[30m#{self}\e[0m" end
def red;            "\e[31m#{self}\e[0m" end
def green;          "\e[32m#{self}\e[0m" end
def brown;          "\e[33m#{self}\e[0m" end
def blue;           "\e[34m#{self}\e[0m" end
def magenta;        "\e[35m#{self}\e[0m" end
def cyan;           "\e[36m#{self}\e[0m" end
def gray;           "\e[37m#{self}\e[0m" end

def bg_black;       "\e[40m#{self}\e[0m" end
def bg_red;         "\e[41m#{self}\e[0m" end
def bg_green;       "\e[42m#{self}\e[0m" end
def bg_brown;       "\e[43m#{self}\e[0m" end
def bg_blue;        "\e[44m#{self}\e[0m" end
def bg_magenta;     "\e[45m#{self}\e[0m" end
def bg_cyan;        "\e[46m#{self}\e[0m" end
def bg_gray;        "\e[47m#{self}\e[0m" end

def bold;           "\e[1m#{self}\e[22m" end
def italic;         "\e[3m#{self}\e[23m" end
def underline;      "\e[4m#{self}\e[24m" end
def blink;          "\e[5m#{self}\e[25m" end
def reverse_color;  "\e[7m#{self}\e[27m" end
end

এবং ব্যবহার:

puts "I'm back green".bg_green
puts "I'm red and back cyan".red.bg_cyan
puts "I'm bold and green and backround red".bold.green.bg_red

আমার কনসোলে:

অতিরিক্ত:

def no_colors
  self.gsub /\e\[\d+m/, ""
end

বিন্যাস অক্ষর মুছে ফেলা

বিঃদ্রঃ

puts "\e[31m" # set format (red foreground)
puts "\e[0m"   # clear format
puts "green-#{"red".red}-green".green # will be green-red-normal, because of \e[0




console-application