diff -Naru esearch-0.7.1/esearch.py esearch-0.7.1-tmp/esearch.py
--- esearch-0.7.1/esearch.py	2006-05-16 19:12:07.795314560 +0200
+++ esearch-0.7.1-tmp/esearch.py	2006-05-18 23:08:28.363580608 +0200
@@ -64,16 +64,16 @@
     if fatal:
         sys.exit(1)
 
-def searchEbuilds(path, portdir = True, searchdef = ""):
-    global ebuilds, output, defebuild
+def searchEbuilds(path, portdir = True, searchdef = "", repo_num = ""):
+    global ebuilds, output, defebuild, found_in_overlay
     pv = ""
     pkgs = []
     nr = len(ebuilds) + 1
 
     if portdir:
-        rep = darkgreen("Portage")
+        rep = darkgreen("Portage    ")
     else:
-        rep = red("Overlay")
+        rep = red("Overlay "+str(repo_num)+"  ")
 
     if isdir(path):
         list = listdir(path)
@@ -82,18 +82,20 @@
             if file[-7:] == ".ebuild":
                 pv = file[:-7]
                 pkgs.append(pkgsplit(pv))
-                pkgs[-1].append(path + "/" + file)
+                pkgs[-1].append(path + file)
                 if searchdef != "" and pv == searchdef:
                     defebuild = (searchdef, pkgs[-1][3])
+		if not portdir:
+		    found_in_overlay = True
         pkgs.sort(pkgcmp)
         for pkg in pkgs:
             rev = ""
             if pkg[2] != "r0":
                 rev = "-" + pkg[2]
             output.append(" " + rep + " [" + bold(str(nr)) + "] " + pkg[0] + "-" + pkg[1] + rev + "\n")
-            ebuilds.append(pkg[3])
+            ebuilds.append(pkg[len(pkg)-1])
             nr += 1
-
+ 
 NORMAL =  1
 COMPACT = 2
 VERBOSE = 3
@@ -105,6 +107,7 @@
 fullname =   False
 pattern =    False
 instonly =   False
+found_in_overlay = False
 
 try:
     opts = getopt(sys.argv[1:], "hSFIcveo:d:n", ["help", "searchdesc", "fullname", "instonly", "compact", "verbose", "ebuild", "own=", "directory=", "nocolor"])
@@ -128,7 +131,7 @@
         from output import blue
         from common import version
         outputm = VERBOSE
-    elif arg in ("-e", "--ebuilds"):
+    elif arg in ("-e", "--ebuild"):
         from os import listdir, getenv, system
         from os.path import isdir
         from portage import settings, pkgcmp, pkgsplit
@@ -313,12 +316,14 @@
                 else:
                     searchdef = ""
 
-                searchEbuilds("%s/%s/" % (portdir, pkg[1]), True, searchdef)
+                searchEbuilds("%s/%s/" % (portdir, pkg[1]), True, searchdef, "")
                 if overlay:
-                    searchEbuilds("%s/%s/" % (overlay, pkg[1]), False, searchdef)
+                    repo_num=1
+                    for repo in overlay.split():
+                        searchEbuilds("%s/%s/" % ( repo, pkg[1]), False, searchdef,repo_num)
+                        repo_num += 1
 
                 output.append("\n")
-
             count += 1
 
     regexlist[i][2] = "".join(output)
@@ -338,34 +343,42 @@
     if outputm == NORMAL:
         print ""
 
-if outputm == EBUILDS and count != 0:
-    if count > 1:
-        defebuild = (0, 0)
 
-    if len(ebuilds) == 1:
-        nr = 1
-    else:
-        if defebuild[0] != 0:
-            print bold("Show Ebuild"), " (" + darkgreen(defebuild[0]) + "): ",
+if outputm == EBUILDS:
+    if overlay and found_in_overlay:
+        repo_num=1
+        for repo in overlay.split():
+            print red("Overlay "+str(repo_num)+" : "+repo)
+            repo_num += 1
+    
+    if count != 0:
+        if count > 1:
+            defebuild = (0, 0)
+
+        if len(ebuilds) == 1:
+            nr = 1
         else:
-            print bold("Show Ebuild: "),
+            if defebuild[0] != 0:
+                print bold("\nShow Ebuild"), " (" + darkgreen(defebuild[0]) + "): ",
+            else:
+                print bold("\nShow Ebuild: "),
+            try:
+                nr = sys.stdin.readline()
+            except KeyboardInterrupt:
+                sys.exit(1)
         try:
-            nr = sys.stdin.readline()
-        except KeyboardInterrupt:
-            sys.exit(1)
-    try:
-        editor = getenv("EDITOR")
-        if editor:
-            system(editor + " " + ebuilds[int(nr) - 1])
-        else:
-            print ""
-            error("Please set EDITOR", False)
-    except IndexError:
-        print ""
-        error("No such ebuild", False)
-    except ValueError:
-        if defebuild[0] != 0:
-            system(editor + " " + defebuild[1])
-        else:
+            editor = getenv("EDITOR")
+            if editor:
+                system(editor + " " + ebuilds[int(nr) - 1])
+            else:
+                print ""
+                error("Please set EDITOR", False)
+        except IndexError:
             print ""
-            error("Please enter a valid number", False)
+            error("No such ebuild", False)
+        except ValueError:
+            if defebuild[0] != 0:
+                system(editor + " " + defebuild[1])
+            else:
+                print ""
+                error("Please enter a valid number", False)
