When find_again() finds exactly the current selection, it's a failure.
diff --git a/Tools/idle/SearchDialog.py b/Tools/idle/SearchDialog.py
index 501b6d0..0f0cb18 100644
--- a/Tools/idle/SearchDialog.py
+++ b/Tools/idle/SearchDialog.py
@@ -43,6 +43,14 @@
             i, j = m.span()
             first = "%d.%d" % (line, i)
             last = "%d.%d" % (line, j)
+            try:
+                selfirst = text.index("sel.first")
+                sellast = text.index("sel.last")
+                if selfirst == first and sellast == last:
+                    text.bell()
+                    return 0
+            except TclError:
+                pass
             text.tag_remove("sel", "1.0", "end")
             text.tag_add("sel", first, last)
             text.mark_set("insert", self.engine.isback() and first or last)