📄 tkbiff.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 + -