#!/usr/bin/env ruby
# Project  Name: None
# File / Folder: hist.rb
# File Language: ruby
# Copyright (C): 2006 heptadecagram
# First  Author: heptadecagram
# First Created: 2006.03.13 20:14:58
# Last Modifier: sjs
# Last Modified: 2010.02.11
#
# now works w/ zsh and reports commands that account for at least 1% of the total

command = {}
execution = {}
$total = 0

IO.foreach('/Users/sjs/config/zsh/zhistory') do |line|
  line.chomp! =~ /^:\s\d+:\d+;((\S+).*)$/
  next if $1.nil? || $2.nil?
  execution[$1] = 1 + execution[$1].to_i
  command[$2] = 1 + command[$2].to_i
  $total += 1
end

puts $total

execution = execution.select {|a,b| b.to_f / $total > 0.01}
command = command.select {|a,b| b.to_f / $total > 0.01}

Max_length = execution.sort_by {|a| a[0].length }.reverse[0][0].length

def print_hash(hash)
	sorted = hash.sort {|a,b| b[1] <=> a[1] }
	sorted.each do |cmd,value|
		printf " %#{Max_length}s: %3d(%.2f%%)\n", cmd, value, value.to_f / $total
	end
end


puts "Executions:\n"
print_hash(execution)
puts "Commands:\n"
print_hash(command)
