#!/usr/local/bin/ruby require 'xlib' dir = ARGV.shift Dir.chdir dir if dir FONT_W = 7 FONT_H = 14 MARG_X = 14 MARG_Y = 14 DIS = Xlib::Display.new BACK_COLOR = DIS.alloc_color 'gray' FORE_COLOR = DIS.alloc_color 'black' DIR_COLOR = DIS.alloc_color 'blue' WIN = DIS.root.new_window 320,200,nil,true WIN.pixel = BACK_COLOR WIN.title = 'Dir' WIN.show GC = WIN.new_gc def paint @max_row = WIN.height/FONT_H @entries = Dir.entries '.' row = 0 col = 0 WIN.clear @entries.each do |entry| GC.fg = if test(?d,entry) DIR_COLOR else FORE_COLOR end GC.draw_str entry[0...12], MARG_X+FONT_W*(12+1)*col, MARG_Y+FONT_H*row row+= 1 if row >= @max_row row = 0 col+= 1 end end WIN.title = Dir.pwd end paint WIN.event 'button_press' do |e| row = (e.y-MARG_Y+FONT_H)/FONT_H col = (e.x-MARG_X)/FONT_W/12 entry = @entries[row+@max_row*col] # p [row,col,entry] if entry if test(?d,entry) Dir.chdir entry paint end end end WIN.event 'exposed' do |e| paint end while DIS.event end