colour_prompt.rb revision 290012
1184610Salfred# ========================================== 2184610Salfred# Unity Project - A Test Framework for C 3184610Salfred# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams 4184610Salfred# [Released under MIT License. Please refer to license.txt for details] 5184610Salfred# ========================================== 6184610Salfred 7184610Salfredif RUBY_PLATFORM =~/(win|w)32$/ 8184610Salfred begin 9184610Salfred require 'Win32API' 10184610Salfred rescue LoadError 11184610Salfred puts "ERROR! \"Win32API\" library not found" 12184610Salfred puts "\"Win32API\" is required for colour on a windows machine" 13184610Salfred puts " try => \"gem install Win32API\" on the command line" 14184610Salfred puts 15184610Salfred end 16184610Salfred # puts 17184610Salfred # puts 'Windows Environment Detected...' 18184610Salfred # puts 'Win32API Library Found.' 19184610Salfred # puts 20184610Salfredend 21184610Salfred 22184610Salfredclass ColourCommandLine 23184610Salfred def initialize 24184610Salfred if RUBY_PLATFORM =~/(win|w)32$/ 25184610Salfred get_std_handle = Win32API.new("kernel32", "GetStdHandle", ['L'], 'L') 26184610Salfred @set_console_txt_attrb = 27184610Salfred Win32API.new("kernel32","SetConsoleTextAttribute",['L','N'], 'I') 28184610Salfred @hout = get_std_handle.call(-11) 29184610Salfred end 30184610Salfred end 31184610Salfred 32184610Salfred def change_to(new_colour) 33184610Salfred if RUBY_PLATFORM =~/(win|w)32$/ 34184610Salfred @set_console_txt_attrb.call(@hout,self.win32_colour(new_colour)) 35190174Sthompsa else 36187170Sthompsa "\033[30;#{posix_colour(new_colour)};22m" 37184610Salfred end 38184610Salfred end 39184610Salfred 40184610Salfred def win32_colour(colour) 41184610Salfred case colour 42184610Salfred when :black then 0 43184610Salfred when :dark_blue then 1 44184610Salfred when :dark_green then 2 45184610Salfred when :dark_cyan then 3 46184610Salfred when :dark_red then 4 47184610Salfred when :dark_purple then 5 48184610Salfred when :dark_yellow, :narrative then 6 49184610Salfred when :default_white, :default, :dark_white then 7 50184610Salfred when :silver then 8 51184610Salfred when :blue then 9 52184610Salfred when :green, :success then 10 53184610Salfred when :cyan, :output then 11 54184610Salfred when :red, :failure then 12 55184610Salfred when :purple then 13 56184610Salfred when :yellow then 14 57184610Salfred when :white then 15 58184610Salfred else 59184610Salfred 0 60184610Salfred end 61184610Salfred end 62184610Salfred 63184610Salfred def posix_colour(colour) 64184610Salfred case colour 65184610Salfred when :black then 30 66184610Salfred when :red, :failure then 31 67184610Salfred when :green, :success then 32 68184610Salfred when :yellow then 33 69184610Salfred when :blue, :narrative then 34 70184610Salfred when :purple, :magenta then 35 71184610Salfred when :cyan, :output then 36 72184610Salfred when :white, :default_white, :default then 37 73184610Salfred else 74184610Salfred 30 75184610Salfred end 76184610Salfred end 77184610Salfred 78184610Salfred def out_c(mode, colour, str) 79184610Salfred case RUBY_PLATFORM 80184610Salfred when /(win|w)32$/ 81184610Salfred change_to(colour) 82184610Salfred $stdout.puts str if mode == :puts 83184610Salfred $stdout.print str if mode == :print 84184610Salfred change_to(:default_white) 85184610Salfred else 86184610Salfred $stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts 87184610Salfred $stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print 88184610Salfred end 89184610Salfred end 90184610Salfredend # ColourCommandLine 91184610Salfred 92184610Salfreddef colour_puts(role,str) ColourCommandLine.new.out_c(:puts, role, str) end 93184610Salfreddef colour_print(role,str) ColourCommandLine.new.out_c(:print, role, str) end 94184610Salfred 95184610Salfred