<div dir="ltr"><div><br></div>Hi,<div><br></div><div>I'm using TextMate 2.0-beta.8 on OS X 10.11.1 with v3.2.1 of the Go bundle from:</div><div><a href="https://github.com/syscrusher/golang.tmbundle">https://github.com/syscrusher/golang.tmbundle</a><br></div><div><br></div><div>When I type "fmt." and press Option+Escape for code completion, it uses TextMate::UI.complete with the :case_insensitive => false option. </div><div><br></div><div>That didn't seem ideal to me. All exported identifiers in Go begin with a capital letter, but in terms of filtering, I would expect lowercase "p" to filter to Print just as well as an uppercase "P".</div><div><br></div><div>So I modified the bundle, and then I saw why it is set the way it is.</div><div><br></div><div>In the completeAndInsertSnippet method of TMDIncrementalPopUpMenu.mm there is a line that inserts the text being used for filtering rather than the text from the choices.</div><div><br></div><div><span class="" style="color:rgb(0,134,179);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">insert_text</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">([candidateMatch </span><span class="" style="color:rgb(0,134,179);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">substringFromIndex:</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">[[</span><span class="" style="color:rgb(237,106,67);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">self</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre"> </span><span class="" style="color:rgb(0,134,179);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">filterString</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">] </span><span class="" style="color:rgb(0,134,179);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">length</span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.8px;white-space:pre">]]);</span><br></div><div><br></div><div>The result is that fmt. [option+esc] [p] and pressing [Enter] gives me:</div><div><br></div><div>fmt.print</div><div><br></div><div>rather than the desired:</div><div><br></div><div>fmt.Print</div><div><br></div><div>I'm not really sure why it's done this way? Are there situations where people want their filtering keys over the text present in the menu?</div><div><br></div><div>While I'm talking about code completion, and to drive the point home, I noticed that TMDIncrementalPopUpMenu uses a BEGINSWITH predicate. Ideally it would use a fuzzy match with similar logic to Go To File... That would allow typing something like:</div><div><br></div><div>fmt. [option+esc] [p] [l]</div><div><br></div><div>to get Println from the list of candidates. In this case it becomes obvious that "pl" is only for filtering and should not be inserted.</div><div><br></div><div>Finally, it would be great if it was possible to set an (additional) Key Equivalent with a delay so that the popup menu came up when pressing ".", or perhaps something more sophisticated based on the language grammar. I realize that not everyone likes code completion popups automatically appearing, but it would be nice to at least have the option.</div><div><br></div><div>Thanks,</div><div>Nathan.</div><div><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Nathan Youngman <br><a href="https://www.nathany.com" target="_blank">https://www.nathany.com</a></div>
</div></div>