I really like the concept; I can't tell you how many times I've tried to tab-complete dict keys. -E
On Wed, Oct 29, 2014 at 1:36 PM, Ivar Nesje <[email protected]> wrote: > Nice. What do people think about adding this functionality to Base? > > If anyone likes to read code in a gist, rather than in an email, I made a > link <https://gist.github.com/ivarne/d232c1a815222fc5f896> > > Regards Ivar > > kl. 21:07:45 UTC+1 onsdag 29. oktober 2014 skrev [email protected] > følgende: > >> I get it work ^ ^ Haha!! >> Thank you for your information! >> >> First, insert below code in the beginning of "completions" function in >> /base/REPLCompletions.jl >> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2FJuliaLang%2Fjulia%2Fblob%2Fmaster%2Fbase%2FREPLCompletions.jl%23L185&sa=D&sntz=1&usg=AFQjCNHzQ0VkvZjQihp3roolMlmxAe9LHQ> >> : >> try >> if isdefined(Main, :CUSTOM_AUTOCOMPLETION_HOOK) >> t=Main.CUSTOM_AUTOCOMPLETION_HOOK(string, pos) >> if t[3] >> return t >> end >> end >> catch err >> println("Error in CUSTOM_AUTOCOMPLETION_HOOK:") >> println(err) >> end >> And recompile Julia. Now I have a hook for the custom-autocompletion. >> >> Second, I define such function: >> function CUSTOM_AUTOCOMPLETION_HOOK(txt,pos) >> m=match(r"(\w+)\[\"([^\"]*)$",txt[1:pos]) >> if !isa(m,Nothing) >> #For String key >> if !isdefined(Main,parse(m.captures[1])) >> return UTF8String[], 0:-1, false >> end >> var=eval(parse(m.captures[1])) >> if !applicable(keys,var) >> return UTF8String[], 0:-1, false >> end >> ky=keys(var) >> if length(ky)>500 >> return UTF8String[], 0:-1, false >> end >> ky=[filter(x->isa(x,String),ky)...] >> lst=convert(Vector{UTF8String},[filter(x->beginswith(x,m. >> captures[2]),ky)...]) >> if !(length(txt)>=pos+1 && txt[pos+1]=='\"') >> if length(txt)>=pos+1 && txt[pos+1]==']' >> lst=map(x->x*"\"",lst) >> else >> lst=map(x->x*"\"]",lst) >> end >> end >> return lst, (pos-length(m.captures[2])+1):pos, true >> else >> #For symbol key >> m=match(r"(\w+)\[\:(\w*)$",txt[1:pos]) >> if isa(m,Nothing) || !isdefined(Main,parse(m.captures[1])) >> return UTF8String[], 0:-1, false >> end >> var=eval(parse(m.captures[1])) >> if !applicable(keys,var) >> return UTF8String[], 0:-1, false >> end >> ky=keys(var) >> if length(ky)>500 >> return UTF8String[], 0:-1, false >> end >> ky=map(string,[filter(x->isa(x,Symbol),ky)...]) >> lst=convert(Vector{UTF8String},[filter(x->beginswith(x,m. >> captures[2]),ky)...]) >> if !(length(txt)>=pos+1 && txt[pos+1]==']') >> lst=map(x->x*"]",lst) >> end >> return lst, (pos-length(m.captures[2])+1):pos, true >> end >> end >> >> Now it is work on string and symbol key, really cool! >> It can also auto-complete the method of python object ^ ^v >> >> On Wednesday, October 29, 2014 11:47:32 AM UTC+1, Ivar Nesje wrote: >>> >>> That would be cool! >>> >>> Currently there isn't any hooks you can use for that purpose (I >>> believe), but as most of Julia is written in Julia, it should be a >>> reasonable project to include the required functionality in >>> /base/REPLCompletions.jl >>> <https://github.com/JuliaLang/julia/blob/master/base/REPLCompletions.jl#L185> >>> and submit a pull request on Github. This would likely be nice for >>> other associative structures (PyCall anyone?) also. >>> >>> You will have to look for unclosed `[` that is either empty or continue >>> with a `:` indicating a symbol or `"` indicating a string index. >>> >>> Ivar >>> >>> kl. 10:06:19 UTC+1 onsdag 29. oktober 2014 skrev [email protected] >>> følgende: >>>> >>>> Is there any way to add an customal autocomplete list to Julia REPL? >>>> For example, I really hope the Dict can be as convenient as MATLAB >>>> structure that the keys can be autpcompleted in command line. >>>> >>>
