colored源碼解析

  • Shell中打印彩色輸出
    輸出格式如下:
    echo "\e[文字背景顏色;文字顏色m"
    其中文字背景顏色(40 -- 47)和文字顏色(30 -- 37) 只有30m到47m才具有意義。我們可以利用這個(gè)特性來修改終端輸出日志的文字顏色。
    eg:
     echo "\e[43;31m 藍(lán)底紅字"
    
image.png
  • 源碼解析
    為了簡(jiǎn)單起見,實(shí)現(xiàn)了一個(gè)colored閹割版。
    module Colored
    
     extend self 
    
     COLORS = {
         'black'   => 30, # 黑色
         'red'     => 31, # 紅色
         'green'   => 32, # 綠色
         'yellow'  => 33, # 黃色
         'blue'    => 34, # 藍(lán)色
         'magenta' => 35, # 品紅
         'cyan'    => 36, # 青色
         'white'   => 37  # 白色
     }
     
     COLORS.each do |color, value|
         # 添加方法
         define_method(color) do
             colorize(self, :foreground => color)
         end
     end
    
     def colorize(string, options = {})
        # 剔除 nil
        colored = [color(options[:foreground])].compact * ''
        # 追加文字
        colored << string
     end
     # 拼接命令
     def color(color_name)
         "\e[#{COLORS[color_name]}m"
      end
    end
    
    String.send(:include, Colored)
    
    測(cè)試一下
     require './MyColored.rb'
    
     puts "我是黑色文字".black
     puts "我是紅色文字".red
     puts "我是綠色文字".green
     puts "我是黃色文字".yellow
     puts "我是藍(lán)色文字".blue
     puts "我是品紅文字".magenta
     puts "我是青色文字".cyan
     puts "我是白色文字".white
    

    效果:


    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容