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.
>>>>
>>>

Reply via email to