⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tkbiff.rb

📁 ruby的源代码
💻 RB
字号:
#! /usr/local/bin/rubyif ARGV[0] != '-d'  unless $DEBUG    exit if fork  endelse  ARGV.shiftendif ARGV.length == 0  if ENV['MAIL']    $spool = ENV['MAIL']  else      $spool = '/usr/spool/mail/' + ENV['USER']  endelse   $spool = ARGV[0]endrequire "parsedate"require "base64"include ParseDateclass Mail  def Mail.new(f)    if !f.kind_of?(IO)      f = open(f, "r")      me = super      f.close    else      me = super    end    return me  end  def initialize(f)    @header = {}    @body = []    while f.gets()      $_.chop!      next if /^From /	# skip From-line        break if /^$/		# end of header      if /^(\S+):\s*(.*)/	@header[attr = $1.capitalize] = $2      elsif attr	sub(/^\s*/, '')	@header[attr] += "\n" + $_      end    end    return if ! $_    while f.gets()      break if /^From /      @body.push($_)    end  end  def header    return @header  end  def body    return @body  endendrequire "tkscrollbox"$top = TkRoot.new$top.withdraw$list = TkScrollbox.new($top) {  relief 'raised'  width 80  height 8  setgrid 'yes'  pack}TkButton.new($top) {  text 'Dismiss'  command proc {$top.withdraw}  pack('fill'=>'both','expand'=>'yes')}$top.bind "Control-c", proc{exit}$top.bind "Control-q", proc{exit}$top.bind "space", proc{exit}$spool_size = 0$check_time = Time.nowdef check  $check_time = Time.now  size = File.size($spool)  if size and size != $spool_size    $spool_size = size    pop_up if size > 0  end  Tk.after 5000, proc{check}endif defined? Thread  Thread.start do    loop do      sleep 600      if Time.now - $check_time > 200	Tk.after 5000, proc{check}      end    end  endenddef pop_up  outcount = 0;  $list.delete 0, 'end'  f = open($spool, "r")  while !f.eof?    mail = Mail.new(f)    date, from, subj =  mail.header['Date'], mail.header['From'], mail.header['Subject']    next if !date    y = m = d = 0    y, m, d = parsedate(date) if date    from = "sombody@somewhere" if ! from    subj = "(nil)" if ! subj    from = decode_b(from)    subj = decode_b(subj)    $list.insert 'end', format('%-02d/%02d/%02d [%-28.28s] %s',y,m,d,from,subj)    outcount += 1  end  f.close  if outcount == 0    $list.insert 'end', "You have no mail."  else    $list.see 'end'  end  $top.deiconify  Tk.after 2000, proc{$top.withdraw}end$list.insert 'end', "You have no mail."checkTk.after 2000, proc{$top.withdraw}begin  Tk.mainlooprescue  `echo #$! > /tmp/tkbiff`end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -