]> git.neil.brown.name Git - edlib.git/commitdiff
lib-abbrev: Don't show a menu when not needed.
authorNeilBrown <neil@brown.name>
Fri, 21 Jul 2023 03:10:27 +0000 (13:10 +1000)
committerNeilBrown <neil@brown.name>
Fri, 21 Jul 2023 03:10:27 +0000 (13:10 +1000)
If there is only one match, just insert it, don't show a menu.

If all matches have a common prefix, just insert that.

Signed-off-by: NeilBrown <neil@brown.name>
DOC/TODO.md
python/lib-abbrev.py
tests.d/00-basic

index 6001c3a1f4881ebd520a77d5ffb14ea985bc3470..6ae5fe98efece3a45edc206d4ea968f5d6538652 100644 (file)
@@ -15,7 +15,7 @@ the file.
       cursor is v.close to left, even when the rest of the line is blank
 - [X] line-count in make output is weird.  Second line can be thousands
 - [X] Make sometimes doesn't follow output, though usually it does
-- [ ] If dynamic-complete only finds one completion, does it still want
+- [X] If dynamic-complete only finds one completion, does it still want
       a menu?
 - [ ] When merge makes a change, highlight the new content.
 - [ ] Review the options for editing a merge - it doesn't always do what
index 2aaa8c82cfc0b93beb5659d1178a0bb8c79f6ae2..67b136357ded49017bc51244ecdef5882d079b0d 100644 (file)
@@ -52,6 +52,23 @@ class AbbrevPane(edlib.Pane):
 
         if not self.completions:
             return 1
+        if len(self.completions) == 1:
+            self.complete_with(self.completions[0])
+            return
+        # find longest prefix
+        p = self.completions[0]
+        for i in range(1, len(self.completions)):
+            c = self.completions[i]
+            while p:
+                if c.startswith(p):
+                    break
+                p = p[:-1]
+            if not p:
+                break
+        if p:
+            self.complete_with(p)
+            return
+        # Need a menu
         self.opening_menu = True
         mp = self.call("attach-menu", (self.parent.cx, self.parent.cy), ret='pane')
         for c in self.completions:
@@ -67,11 +84,14 @@ class AbbrevPane(edlib.Pane):
             self.menu = None
         return 1
 
+    def complete_with(self, str):
+        self.call("doc:replace", str, self.prefix_end, self.prefix_end)
+        self.call("view:changed", self.prefix_start, self.prefix_end)
+
     def menu_done(self, key, focus, str, **a):
         "handle:menu-done"
         if not self.prefix_start:
             return
-        edlib.LOG(key, str)
         if not str:
             # Menu aborted
             self.call("view:changed", self.prefix_start, self.prefix_end)
@@ -80,7 +100,6 @@ class AbbrevPane(edlib.Pane):
             self.call("Message", "")
             return 1
         self.call("doc:replace", str, self.prefix_end, self.prefix_start)
-        self.complete_len = len(str)
         self.call("view:changed", self.prefix_start, self.prefix_end)
         return 1
 
@@ -294,7 +313,7 @@ class AbbrevPane(edlib.Pane):
             self.call("view:changed", self.prefix_start, self.prefix_end)
             self.prefix_start = None
             self.prefix_end = None
-            self.call("Message", "")
+            #self.call("Message", "")
         return edlib.Efallthrough
 
 def abbrev_attach(key, focus, comm2, **a):
index 212ef3eb788c1675753fd9269ca286231d287008..9fcf782805ef1786a0c0c9c284a50b26939083f1 100644 (file)
@@ -540,13 +540,15 @@ Display 80,30 2C925032938071DE257DE77D7EFF9A0B 8,2
 Key "-p"
 Display 80,30 57B0121C30A300F9ED93171BD0D569BD 9,2
 Key ":A-/"
-Display 80,30 BA988BD1C0AF7CB5B05ED2D2D20CD77F 5,3
+Display 80,30 A1E582F95603809A9E8DC276497C1A05 12,2
+Key ":A-/"
+Display 80,30 F4601EC985A4AD3732CEC32383725B3E 5,3
 Key ":Down"
-Display 80,30 B6BCCFE18ADD334C6C9027B52CE9CBE1 5,4
+Display 80,30 62BAE0BB16AD8E50349B3BC5215D639F 5,4
 Key ":Down"
-Display 80,30 B6BCCFE18ADD334C6C9027B52CE9CBE1 5,5
+Display 80,30 62BAE0BB16AD8E50349B3BC5215D639F 5,5
 Key ":Enter"
-Display 80,30 C33B543761C5D34F322D063006A9099F 12,2
+Display 80,30 2BD7C1E1B97545BEADE556086C9E25D6 13,2
 Key ":A:Backspace"
 Display 80,30 E7979E21C8A8DE26C622B842D72ADA50 5,2
 Key "-d"
@@ -565,14 +567,14 @@ Key ":Backspace"
 Display 80,30 2C925032938071DE257DE77D7EFF9A0B 8,2
 Key ":A-/"
 Display 80,30 5C4CE8698100A7263286F46B34C24BD1 5,3
-Key ":Left"
-Display 80,30 9173D165F92FAC77DB0E1FCC7F1BAC5B 5,3
+Key ":Down"
+Display 80,30 9173D165F92FAC77DB0E1FCC7F1BAC5B 5,4
 Key ":Enter"
-Display 80,30 2BB95054BA3FEFEA2C5E84CB264B727B 16,2
+Display 80,30 01D3F32F892BC4076D6021BE085BF4D7 19,2
 Key ":C-U"
-Display 80,30 D942F9B2848CB8DDABAD73FB638B3F5A 16,2
+Display 80,30 0BAB2CA069001D0A57048D5A27B290A3 19,2
 Key ":C-X"
-Display 80,30 312A12F758B4F74265EFFEB48978F7A6 16,2
+Display 80,30 BFDE34A6C5119A8ADFDDD8EBF984221E 19,2
 Key "-k"
 Display 80,30 CDBBFFABF0534E6F4508C0F00F8F75E0 1,8
 Key ":C-X"
@@ -601,4 +603,4 @@ Key ":C-X"
 Display 80,30 84F4B35BF26F9D5EEBB67D572ADD0BBF 1,0
 Key ":C-C"
 Display 80,30 D2E6DB1DE1E62B191C28D1B2CFF7F1C0 1,0
-Close 1575
+Close 1577