/usr/lib/ruby/1.9.1/ramaze/log/xosd.rb is in libramaze-ruby1.9.1 2010.06.18-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.
Ramaze::Log.log( :warn, "Both xosd gems are currently known to be broken" )
require 'xosd'
require 'thread'
module Ramaze
module Logger
# Informer for the XOSD notification system for X11.
#
# You can install the ruby-bindings with:
# gem install xosd.
class Xosd < ::Xosd
attr_accessor :options
include Logging
DEFAULT = {
:font_size => 20,
:font => "-*-*-*-*-*-*-%d-*-*-*-*-*-*-*",
:align => 'center',
:color => '#FFFFFF',
:lines => 3,
:valign => 'top',
:timeout => 3,
:outline_color => "#000000",
:outline_width => 1,
:vertical_offset => 20,
:colors => {
:error => "#FF0000",
:info => "#00FF00",
:warn => "#EAA61E",
:debug => "#FFFF00"
},
}
# keys to ignore when setting the options to the instance.
IGNORE = [:colors, :font_size, :lines]
# Here new messages are pushed to eventually displaying them.
QUEUE = Queue.new
# Create a new instance, valid options are in DEFAULT.
# In the background a new thread will be running that checks the QUEUE
# and processes all messages that are being sent to it.
# This is done to make output nicer and readable.
def initialize(options = {})
@options = DEFAULT.merge(options)
super(@options[:lines])
@options.each do |key, value|
next if IGNORE.include?(key)
value %= @options[:font_size] if key == :font
send("#{key}=", value)
end
Thread.new(self) do |xosd|
loop do
items = []
lines = xosd.options[:lines]
items << QUEUE.shift until QUEUE.empty? or items.size >= lines
unless items.empty?
# pad up with empty lines to avoid dragging around old messages.
items << [:info, ' '] until items.size >= lines
items.each_with_index do |(tag, message), i|
xosd.color = xosd.options[:colors][tag.to_sym]
xosd.display(message, i)
end
end
sleep xosd.options[:timeout]
end
end
end
# pushes all messages it gets on the QUEUE for further processing.
def log(tag, *messages)
messages.each do |message|
QUEUE << [tag, message]
end
end
end
end
end
|