From: NeilBrown Date: Fri, 21 Jul 2023 03:10:27 +0000 (+1000) Subject: lib-abbrev: Don't show a menu when not needed. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=151c5d40575f2beb2caa6f15c2c2875f2a9c049a;p=edlib.git lib-abbrev: Don't show a menu when not needed. 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 --- diff --git a/DOC/TODO.md b/DOC/TODO.md index 6001c3a1..6ae5fe98 100644 --- a/DOC/TODO.md +++ b/DOC/TODO.md @@ -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 diff --git a/python/lib-abbrev.py b/python/lib-abbrev.py index 2aaa8c82..67b13635 100644 --- a/python/lib-abbrev.py +++ b/python/lib-abbrev.py @@ -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): diff --git a/tests.d/00-basic b/tests.d/00-basic index 212ef3eb..9fcf7828 100644 --- a/tests.d/00-basic +++ b/tests.d/00-basic @@ -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