Added "repeat.py" -- repeatedly execute a shell command (like
watch(1)).  Updated and untabified the README file.
diff --git a/Demo/curses/README b/Demo/curses/README
index 7635c3d..f2a3b74 100644
--- a/Demo/curses/README
+++ b/Demo/curses/README
@@ -10,11 +10,11 @@
 I wouldn't mind someone else making an effort in that direction, of
 course.
 
-ncurses.py	-- currently only a panels demo
+ncurses.py      -- currently only a panels demo
                    XXX this won't work until panel support is checked in
-rain.py		-- raindrops keep falling on my desktop
-tclock.py	-- ASCII clock, by Howard Jones
-xmas.py		-- I'm dreaming of an ASCII christmas
+rain.py         -- raindrops keep falling on my desktop
+tclock.py       -- ASCII clock, by Howard Jones
+xmas.py         -- I'm dreaming of an ASCII christmas
 
 Please send bugfixes and new contributions to me or, even better,
 submit them to the Python Bug Tracker on SourceForge
@@ -24,6 +24,5 @@
 Other demos
 ===========
 
-life.py		Simple game of Life
-
-
+life.py         -- Simple game of Life
+repeat.py       -- Repeatedly execute a shell command (like watch(1))
diff --git a/Demo/curses/repeat.py b/Demo/curses/repeat.py
new file mode 100755
index 0000000..158264c
--- /dev/null
+++ b/Demo/curses/repeat.py
@@ -0,0 +1,58 @@
+#! /usr/bin/env python
+
+"""repeat <shell-command>
+
+This simple program repeatedly (with 1-second intervals) executes the
+shell command given on the command line and displays the output (or as
+much of it as fits on the screen).  It uses curses to paint each new
+output on top of the old output, so that if nothing changes, the
+screen doesn't change.  This is handy to watch for changes in e.g. a
+directory or process listing.
+
+To end, hit Control-C.
+"""
+
+# Author: Guido van Rossum
+
+# Disclaimer: there's a Linux program named 'watch' that does the same
+# thing.  Honestly, I didn't know of its existence when I wrote this!
+
+# To do: add features until it has the same functionality as watch(1);
+# then compare code size and development time.
+
+import os
+import sys
+import time
+import curses
+
+def main():
+    if not sys.argv[1:]:
+        print __doc__
+        sys.exit(0)
+    cmd = " ".join(sys.argv[1:])
+    p = os.popen(cmd, "r")
+    text = p.read()
+    sts = p.close()
+    if sts:
+        print >>sys.stderr, "Exit code:", sts
+        sys.exit(sts)
+    w = curses.initscr()
+    try:
+        while 1:
+            w.erase()
+            try:
+                w.addstr(text)
+            except curses.error:
+                pass
+            w.refresh()
+            time.sleep(1)
+            p = os.popen(cmd, "r")
+            text = p.read()
+            sts = p.close()
+            if sts:
+                print >>sys.stderr, "Exit code:", sts
+                sys.exit(sts)
+    finally:
+        curses.endwin()
+
+main()