Author: nornagon
Date: 2005-07-06 23:24:12 -0400 (Wed, 06 Jul 2005)
New Revision: 851
Modified:
trunk/clients/ravish/eventmanager.rb
trunk/clients/ravish/ravish2.rb
Log:
Ravish includes TO/FROM support, buncha fixes &tc.
Modified: trunk/clients/ravish/eventmanager.rb
===================================================================
--- trunk/clients/ravish/eventmanager.rb 2005-07-07 01:43:50 UTC (rev
850)
+++ trunk/clients/ravish/eventmanager.rb 2005-07-07 03:24:12 UTC (rev
851)
@@ -105,7 +105,7 @@
end
end
@timertok[mytok] = pair
- jolt
+ #jolt
return mytok
end
Modified: trunk/clients/ravish/ravish2.rb
===================================================================
--- trunk/clients/ravish/ravish2.rb 2005-07-07 01:43:50 UTC (rev 850)
+++ trunk/clients/ravish/ravish2.rb 2005-07-07 03:24:12 UTC (rev 851)
@@ -1,6 +1,7 @@
#!/usr/bin/env ruby
# ravish -- Haver client written in ruby. Second attempt.
+# put term/visual in the search path
$:.unshift "lib"
require 'term/visual'
@@ -10,6 +11,7 @@
Thread.abort_on_exception = true
class Ravish
+ # Ravish::Window stores information about a window.
class Window
attr_reader :window, :type, :name
def initialize window, type, args={}
@@ -20,6 +22,8 @@
end
def [](*args); @args[*args]; end
end
+
+ # What goes before system messages.
ServerPrefix = "%(bblue)-%(bwhite)!%(bblue)-%(default) "
Palette = {
@@ -122,7 +126,13 @@
else
if type.to_s =~ /^ev_([A-Z:]+)$/
if self.respond_to?(type)
- self.send type, *args[0]
+ begin
+ self.send type, *args[0]
+ rescue ArgumentError
+ srvmsg $!.inspect
+ srvmsg type.inspect
+ srvmsg args[0].inspect
+ end
else
self.send 'unknown_ev', $1, args[0]
end
@@ -298,6 +308,12 @@
end
end
+ def ev_QUIT uid, type, detail
+ # FIXME: Temporary; we need to keep a list of the users in each
+ # channel.
+ srvmsg "Quits: #{uid} (#{type}#{detail ? ": " + detail : ''})"
+ end
+
def ev_LIST cid, ns, *users
if ns == 'user'
listed = 'Users'
@@ -330,6 +346,23 @@
end
end
+ def ev_FROM uid, type, *msg
+ if type == 'say'
+ pref = "%(nickdecs)<%(" + (uid == @nick ? 'my' : '') +
"nick)" +
+ "#{uid}%(nickdecs)>%(default) "
+ elsif type == 'do'
+ pref = "%(donick)* #{uid}%(default) "
+ end
+ if not win = find_window(:query, uid)
+ win = @term.create_window('title' => "Query: #{uid}")
+ win = Window.new(win, :query, 'name' => uid, 'uid' =>
uid)
+ @windows << win
+ @term.switch_window win.window
+ end
+ activity win, 3
+ win.window.addline msg.join(' '), pref
+ end
+
## USER COMMANDS ##
def unknown_user_cmd cmd, args
@@ -342,21 +375,27 @@
when :channel
@haver.msg 'IN', win['channel'], 'say', line
when :query
+ win.window.addline line, "%(nickdecs)<%(mynick)[EMAIL
PROTECTED]" +
+ "%(nickdecs)>%(default) "
@haver.msg 'TO', win['uid'], 'say', line
end
end
def user_RAW args
- @haver.msg args.shift.upcase, *args
+ if args.length >= 1
+ @haver.msg args.shift.upcase, *args
+ end
end
- def user_SAY args
+ def user_SAY line
win = find_window(@term.current_window)
case win.type
when :channel
- @haver.msg 'IN', win['channel'], 'say', args.join(' ')
+ @haver.msg 'IN', win['channel'], 'say', line.join(' ')
when :query
- @haver.msg 'TO', win['uid'], 'say', args.join(' ')
+ win.window.addline line.join(' '),
"%(nickdecs)<%(mynick)[EMAIL PROTECTED]" +
+ "%(nickdecs)>%(default) "
+ @haver.msg 'TO', win['uid'], 'say', line.join(' ')
end
end
@@ -364,15 +403,47 @@
win = find_window(@term.current_window)
case win.type
when :channel
- @haver.msg 'IN', win['channel'], 'do', line
+ @haver.msg 'IN', win['channel'], 'do', line.join(' ')
when :query
- @haver.msg 'TO', win['uid'], 'do', line
+ win.window.addline line.join(' '), "%(donick)* [EMAIL
PROTECTED](default) "
+ @haver.msg 'TO', win['uid'], 'do', line.join(' ')
end
end
+ def user_MSG args
+ if args.length < 1
+ srvmsg "MSG: Not enough arguments"
+ return
+ end
+ uid = args.shift
+ if not win = find_window(:query, uid)
+ win = @term.create_window('title' => "Query: #{uid}")
+ win = Window.new(win, :query, 'name' => uid, 'uid' =>
uid)
+ @windows << win
+ end
+
+ win.window.addline args.join(' '),
+ "%(nickdecs)<%(mynick)[EMAIL
PROTECTED](nickdecs)>%(default) "
+ @haver.msg 'TO', uid, 'say', args.join(' ')
+ end
+
+ def user_QUERY args
+ if args.length < 1
+ srvmsg "QUERY: Not enough arguments"
+ return
+ end
+ if not win = find_window(:query, args[0])
+ win = @term.create_window('title' => "Query: #{uid}")
+ win = Window.new(win, :query, 'name' => uid, 'uid' =>
uid)
+ @windows << win
+ end
+ @term.switch_window win.window
+ end
+
def user_JOIN args
if args.length < 1
srvmsg "JOIN: Not enough arguments"
+ return
end
@haver.msg 'JOIN', args[0]
end
@@ -395,6 +466,23 @@
end
end
alias_method :user_LIST, :user_NAMES
+
+ def user_WINDOW args
+ if args.length < 1
+ srvmsg "WINDOW: Not enough arguments"
+ end
+ case args[0].upcase
+ when 'CLOSE'
+ win = find_window(@term.current_window)
+ if win and win.type != :server
+ if win.type == :channel
+ @haver.msg 'PART', win['channel']
+ end
+ @windows.delete win
+ @term.delete_window win.window
+ end
+ end
+ end
end
ravish = Ravish.new