Index: .version
===================================================================
RCS file: /home/tlau/.CVS/fugu/.version,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- .version	2001/06/28 05:08:25	1.27
+++ .version	2001/07/05 16:08:54	1.28
@@ -1 +1 @@
-1.1.2
+1.1.3
Index: README
===================================================================
RCS file: /home/tlau/.CVS/fugu/README,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- README	2001/01/23 03:10:05	1.28
+++ README	2001/07/02 04:26:36	1.29
@@ -1,3 +1,10 @@
+*** Note to people upgrading from Fugu 1.0 or earlier: delete (or backup
+and then delete) your existing configuration before starting the new Fugu:
+	~/.gale/fuguconfig.xml
+	~/.gale/fugustate.pck       \ you may have only one of these two
+	~/.gale/fugustate.pck.gz    /
+
+
 Fugu
 ----
 
@@ -15,12 +22,13 @@
 ------------
 
 Fugu requires Python 1.5.1 or greater and Tcl/Tk 8.0 or greater.  It's been
-known to work on Linux (RedHat 4.2, RedHat 5.1, and Debian 1.3/2.0).
+known to work on Linux (RedHat 4.2, RedHat 5.1, and Debian 1.3/2.0) and
+FreeBSD.
 
 The RSAREF library is required.  Get it from http://download.gale.org/.
 
 The Pmw (Python Mega-Widgets) distribution is required.  See the Pmw home
-page at http://www.dscpl.com.au/pmw/ for more information.  Fugu has been
+page at http://pmw.sourceforge.net/ for more information.  Fugu has been
 tested with Pmw version 0.8.
 
 Note for Debian users: the following packages are required.
@@ -45,7 +53,7 @@
 For more information about Gale, see
      http://gale.org/
 The Pmw home page is at
-	http://www.dscpl.com.au/pmw/
+	http://pmw.sourceforge.net/
 The Python home page (get the latest version of Python here):
 	http://www.python.org/
 
@@ -59,7 +67,7 @@
 
 2) If you don't have Pmw installed, download it and either:
    (a) Unpack it into your local Python installation's site-packages
-       directory: .../lib/python1.5/site-packages/
+       directory: .../lib/pythonX.Y/site-packages/
 
    (b) Unpack it a different directory (e.g., /foo/bar/).  It will create a
 	  subdirectory Pmw/ in that directory.  Set the PYTHONPATH environment
@@ -132,12 +140,14 @@
 
 Ctrl-PgUp and Ctrl-PgDn move to the top/bottom of the screen
 Ctrl-Shift-p changes focus to the presence selector (Tab away from it)
-Esc in the search window (Ctrl-s) makes it go away
+Ctrl-s brings up the search window, Esc makes it go away
+Alt-PgUp and Alt-PgDn scroll the puff window when the cursor is in the puff
+	composition window
 
 --------
 
 Tessa Lau
-<tlau@cs.washington.edu>
+<tlau-fugu@ofb.net>
 
 Copyright (C) 2001  Tessa Lau
 
Index: connection.py
===================================================================
RCS file: /home/tlau/.CVS/fugu/connection.py,v
retrieving revision 1.26
retrieving revision 1.28
diff -u -r1.26 -r1.28
--- connection.py	2001/06/28 05:09:45	1.26
+++ connection.py	2001/07/04 20:02:41	1.28
@@ -253,14 +253,6 @@
 		return self._curpuff
 
 	def addpuff(self, msg, new=1):
-		# Filter out /ping first, before anything else
-		if DEBUG_MEMLEAK:
-			return
-		cats = string.split(msg.get_loc(), None)
-		for c in cats:
-			if c == '/ping':
-				return
-
 		self._widget.configure(text_state = 'normal')
 		self._temp_hash[msg] = 1
 		self._pufflist.append(msg)
Index: ui.py
===================================================================
RCS file: /home/tlau/.CVS/fugu/ui.py,v
retrieving revision 1.123
retrieving revision 1.125
diff -u -r1.123 -r1.125
--- ui.py	2001/06/28 06:32:49	1.123
+++ ui.py	2001/07/04 20:02:41	1.125
@@ -159,9 +159,12 @@
 			print 'UI: Setting puff location to:',\
 				string.join(self.locs, ' ')
 		self.puff.set_loc(string.join(self.locs, ' '))
-		if self.keyw:
+		if type(self.keyw) is ListType:
 			for word in self.keyw:
 				self.puff.set_text('message.keyword', word)
+		else:
+			# string coercion
+			self.puff.set_text('message.keyword', '%s' % self.keyw)
 
 		# Ask for a return receipt
 		# TODO: there should be a way to turn this off
@@ -460,6 +463,8 @@
 				command=self.show_marks)
 			puffmenu.menu.add_command(label='Show tags',
 				command=self.show_tags)
+			puffmenu.menu.add_command(label='Show pufflist length',
+				command=self.show_pufflist)
 
 		puffmenu['menu'] = puffmenu.menu
 
@@ -810,8 +815,11 @@
 		return Config.SUBLIST[self._curscreen] == screen
 	
 	def _category_regexp(self, locstr):
+		# TODO dangermouse
+		# this breaks on locations containing spaces
 		# Split locstr into list of locations
 		locs = string.split(locstr, None)
+		locs = map(re.escape, locs)
 		return re.compile(string.join(locs, '|'))
 	
 	# Jump to the next/prev thread matching the current puff's category
@@ -1129,6 +1137,9 @@
 		for name in tags:
 			print name
 		print 'Total:', len(tags)
+	def show_pufflist(self):
+		print 'Puffs in pufflist:',
+		print len(Config.SUBLIST[self._curscreen])
 	
 	def regen_screenmenu(self):
 		i = 0
@@ -1510,6 +1521,8 @@
 		else:
 			keys = map(string.strip, string.split(t, ','))
 		return keys
+	def keywtext(self):
+		return self._keywords.get()
 
 	def text(self):
 		return self._puff
@@ -1578,7 +1591,7 @@
 		# Puff widget
 		self._puffwidget = PuffWidget(self,
 			loctext=master._puffwidget.loc(),
-			keywtext = master._puffwidget.keyw(),
+			keywtext = master._puffwidget.keywtext(),
 			pufftext = master._puffwidget.puff(), height=10, width=60)
 		self._puffwidget.pack(side=BOTTOM, fill=BOTH, expand=1, padx=2,
 			pady=2)
Index: pygale/authcache.py
===================================================================
RCS file: /home/tlau/.CVS/fugu/pygale/authcache.py,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- pygale/authcache.py	2001/06/23 15:02:46	1.39
+++ pygale/authcache.py	2001/07/02 04:26:39	1.40
@@ -257,8 +257,17 @@
 
 	def handle_key_puff(self, puff, keyobj, client, timeout_callback,
 		domain):
+		if DEBUG: print 'Key response puff returned for', keyobj.name()
+		if DEBUG: print 'Key response puff loc:', `puff.get_loc()`
+		if puff.get_loc():
+			# New-style AKD category
+			if '_gale.key.' + keyobj.name() == puff.get_loc():
+				if DEBUG: print '... and it is for the right key'
+			else:
+				if DEBUG: print '... and it is for the wrong key; ignoring'
+				return
+		
 		keyobj.setpublic(None)
-		if DEBUG: print 'Key request puff returned for', keyobj.name()
 		if puff.get_text('answer/key/error'):
 			if DEBUG: print '... but it contains an error:',\
 				puff.get_text_first('answer/key/error')
