Re: [julia-users] Re: Customize REPL autocomplete
It will be prefect if the Tab can also auto-complete the argument names of a function, like what R did. Actually I have other complaints about REPL: 1. Ctrl+w delected all the line rather than only the last word. It really make me crazy 2. If I push F1 in the REPL in termnal window (it is running in the server), the whole system clashed: julia ERROR: key not found: '\0' in match_input at LineEdit.jl:734 (repeats 3 times) in match_input at LineEdit.jl:731 in anonymous at LineEdit.jl:833 in prompt! at ./LineEdit.jl:1349 in run_interface at ./LineEdit.jl:1324 in run_interface_3B_9747 at /home/JXiong/programs/julia_0.3/julia/usr/bin/../lib/julia/sys.so in run_frontend at ./REPL.jl:819 in run_repl at ./REPL.jl:170 in _start at ./client.jl:399 in _start_3B_9614 at /home/JXiong/programs/julia_0.3/julia/usr/bin/../lib/julia/sys.so I really like that in MATLAB, I can see the help of the function I am typing just by push F1. I think REPL could also support some hot-keys, like showing help, showing current directory, showing data tip, showing function argument hint, showing command history, and run a custom function during typing the command. In many time, I cannot remember the function argument order when I type command, I have to delete the whole line, check help, and retype it again. How do you think about it? On Wednesday, October 29, 2014 11:02:54 PM UTC+1, Max Suster wrote: +1 On Wednesday, October 29, 2014 9:56:33 PM UTC+1, Elliot Saba wrote: 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 iva...@gmail.com 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 xiong...@gmail.com 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%23L185sa=Dsntz=1usg=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
Re: [julia-users] Re: Customize REPL autocomplete
We have different level of experience with key bindings, and we are used to different things. You won't get far with It really make me crazy that Julia doesn't work exactly as Matlab or R, but there are definitely still possibilities to change behaviour if you manage to convince the community that some other way is better. See also the docs http://docs.julialang.org/en/release-0.3/manual/interacting-with-julia/ where we attempt to describe the different key bindings, and it seems like you are confusing meta-Backspace with ^w. We also have a really nice shortcut (that I can't find in the documentation) where you can press TAB just after a left parens, and get a list of the methods on the function. That is often more directly useful than the help, when you need to lookup the order of the arguments. julia sin(\t sin(a::Complex{Float16}) at float16.jl:141 sin(x::Real) at math.jl:125 sin(z::Complex{T:Real}) at complex.jl:518 sin{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:450 sin(x::Float64) at math.jl:123 sin{T:Number}(::AbstractArray{T:Number,1}) at operators.jl:358 sin(x::Float32) at math.jl:124 sin{T:Number}(::AbstractArray{T:Number,2}) at operators.jl:359 sin(a::Float16) at float16.jl:140 sin{T:Number}(::AbstractArray{T:Number,N}) at operators.jl:361 sin(x::BigFloat) at mpfr.jl:488 This trick also works when you have started typing some of the arguments, if you ensure that the cursor is right after the parens. Ivar kl. 10:07:37 UTC+1 torsdag 30. oktober 2014 skrev xiong...@gmail.com følgende: It will be prefect if the Tab can also auto-complete the argument names of a function, like what R did. Actually I have other complaints about REPL: 1. Ctrl+w delected all the line rather than only the last word. It really make me crazy 2. If I push F1 in the REPL in termnal window (it is running in the server), the whole system clashed: julia ERROR: key not found: '\0' in match_input at LineEdit.jl:734 (repeats 3 times) in match_input at LineEdit.jl:731 in anonymous at LineEdit.jl:833 in prompt! at ./LineEdit.jl:1349 in run_interface at ./LineEdit.jl:1324 in run_interface_3B_9747 at /home/JXiong/programs/julia_0.3/julia/usr/bin/../lib/julia/sys.so in run_frontend at ./REPL.jl:819 in run_repl at ./REPL.jl:170 in _start at ./client.jl:399 in _start_3B_9614 at /home/JXiong/programs/julia_0.3/julia/usr/bin/../lib/julia/sys.so I really like that in MATLAB, I can see the help of the function I am typing just by push F1. I think REPL could also support some hot-keys, like showing help, showing current directory, showing data tip, showing function argument hint, showing command history, and run a custom function during typing the command. In many time, I cannot remember the function argument order when I type command, I have to delete the whole line, check help, and retype it again. How do you think about it? On Wednesday, October 29, 2014 11:02:54 PM UTC+1, Max Suster wrote: +1 On Wednesday, October 29, 2014 9:56:33 PM UTC+1, Elliot Saba wrote: 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 iva...@gmail.com 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 xiong...@gmail.com 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%23L185sa=Dsntz=1usg=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
Re: [julia-users] Re: Customize REPL autocomplete
I see, I should use meta-Backspace instead. And the undocumented shortcut for function arguments is cool! I didn't find that before! Just for fun, I changed my code a little, to show help by function_name?\t, like: julia sin?\t Base.sin(x) Compute sine of x, where x is in radians julia sin? function CUSTOM_AUTOCOMPLETION_HOOK(txt,pos) if txt[pos]=='?' pos1 #Show help of function m=match(r([\w\!]+)$,txt[1:pos-1]) if !isa(m,Nothing) S=m.captures[1] if isdefined(parse(S)) println() help(S) end return UTF8String[], 0:-1, true end end 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 println(\nToo many keys to be auto-completed.) return UTF8String[], 0:-1, true 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 println(\nToo many keys to be auto-completed.) return UTF8String[], 0:-1, true 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 On Thursday, October 30, 2014 10:39:43 AM UTC+1, Ivar Nesje wrote: We have different level of experience with key bindings, and we are used to different things. You won't get far with It really make me crazy that Julia doesn't work exactly as Matlab or R, but there are definitely still possibilities to change behaviour if you manage to convince the community that some other way is better. See also the docs http://docs.julialang.org/en/release-0.3/manual/interacting-with-julia/ where we attempt to describe the different key bindings, and it seems like you are confusing meta-Backspace with ^w. We also have a really nice shortcut (that I can't find in the documentation) where you can press TAB just after a left parens, and get a list of the methods on the function. That is often more directly useful than the help, when you need to lookup the order of the arguments. julia sin(\t sin(a::Complex{Float16}) at float16.jl:141 sin(x::Real) at math.jl:125 sin(z::Complex{T:Real}) at complex.jl:518 sin{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:450 sin(x::Float64) at math.jl:123 sin{T:Number}(::AbstractArray{T:Number,1}) at operators.jl:358 sin(x::Float32) at math.jl:124 sin{T:Number}(::AbstractArray{T:Number,2}) at operators.jl:359 sin(a::Float16) at float16.jl:140 sin{T:Number}(::AbstractArray{T:Number,N}) at operators.jl:361 sin(x::BigFloat) at mpfr.jl:488 This trick also works when you have started typing some of the arguments, if you ensure that the cursor is right after the parens. Ivar kl. 10:07:37 UTC+1 torsdag 30. oktober 2014 skrev xiong...@gmail.com følgende: It will be prefect if the Tab can also auto-complete the argument names of a function, like what R did. Actually I have other complaints about REPL: 1. Ctrl+w delected all the line rather than only the last word. It really make me crazy 2. If I push F1 in the REPL in termnal window (it is running in the server), the whole system clashed: julia ERROR: key not found: '\0' in match_input at LineEdit.jl:734 (repeats 3 times) in match_input at LineEdit.jl:731 in anonymous at LineEdit.jl:833 in prompt! at ./LineEdit.jl:1349 in run_interface at ./LineEdit.jl:1324 in run_interface_3B_9747 at /home/JXiong/programs/julia_0.3/julia/usr/bin/../lib/julia/sys.so in run_frontend at ./REPL.jl:819 in run_repl at ./REPL.jl:170 in _start at ./client.jl:399 in _start_3B_9614 at /home/JXiong/programs/julia_0.3/julia/usr/bin/../lib/julia/sys.so I really like that in MATLAB, I can see the help of the function I am
Re: [julia-users] Re: Customize REPL autocomplete
Actually, you could already do that if you typed the ? first... Thanks for the enthusiasm, though! Cheers, Kevin On Thu, Oct 30, 2014 at 3:43 AM, xiongji...@gmail.com wrote: I see, I should use meta-Backspace instead. And the undocumented shortcut for function arguments is cool! I didn't find that before! Just for fun, I changed my code a little, to show help by function_name?\t, like: julia sin?\t Base.sin(x) Compute sine of x, where x is in radians julia sin? function CUSTOM_AUTOCOMPLETION_HOOK(txt,pos) if txt[pos]=='?' pos1 #Show help of function m=match(r([\w\!]+)$,txt[1:pos-1]) if !isa(m,Nothing) S=m.captures[1] if isdefined(parse(S)) println() help(S) end return UTF8String[], 0:-1, true end end 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 println(\nToo many keys to be auto-completed.) return UTF8String[], 0:-1, true 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 println(\nToo many keys to be auto-completed.) return UTF8String[], 0:-1, true 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 On Thursday, October 30, 2014 10:39:43 AM UTC+1, Ivar Nesje wrote: We have different level of experience with key bindings, and we are used to different things. You won't get far with It really make me crazy that Julia doesn't work exactly as Matlab or R, but there are definitely still possibilities to change behaviour if you manage to convince the community that some other way is better. See also the docs http://docs.julialang.org/en/release-0.3/manual/interacting-with-julia/ where we attempt to describe the different key bindings, and it seems like you are confusing meta-Backspace with ^w. We also have a really nice shortcut (that I can't find in the documentation) where you can press TAB just after a left parens, and get a list of the methods on the function. That is often more directly useful than the help, when you need to lookup the order of the arguments. julia sin(\t sin(a::Complex{Float16}) at float16.jl:141 sin(x::Real) at math.jl:125 sin(z::Complex{T:Real}) at complex.jl:518 sin{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:450 sin(x::Float64) at math.jl:123 sin{T:Number}(::AbstractArray{T:Number,1}) at operators.jl:358 sin(x::Float32) at math.jl:124 sin{T:Number}(::AbstractArray{T:Number,2}) at operators.jl:359 sin(a::Float16) at float16.jl:140 sin{T:Number}(::AbstractArray{T:Number,N}) at operators.jl:361 sin(x::BigFloat) at mpfr.jl:488 This trick also works when you have started typing some of the arguments, if you ensure that the cursor is right after the parens. Ivar kl. 10:07:37 UTC+1 torsdag 30. oktober 2014 skrev xiong...@gmail.com følgende: It will be prefect if the Tab can also auto-complete the argument names of a function, like what R did. Actually I have other complaints about REPL: 1. Ctrl+w delected all the line rather than only the last word. It really make me crazy 2. If I push F1 in the REPL in termnal window (it is running in the server), the whole system clashed: julia ERROR: key not found: '\0' in match_input at LineEdit.jl:734 (repeats 3 times) in match_input at LineEdit.jl:731 in anonymous at LineEdit.jl:833 in prompt! at ./LineEdit.jl:1349 in run_interface at ./LineEdit.jl:1324 in run_interface_3B_9747 at /home/JXiong/programs/julia_0. 3/julia/usr/bin/../lib/julia/sys.so in run_frontend at
Re: [julia-users] Re: Customize REPL autocomplete
The advantage is you don't need to remove the whole line to check the help information. It could also used to check the information of variable while typing. What's ever, maybe it is nothing more than a toy. Let me work with it for a while first. :) The REPL is written by Julia itself, which is really excite me. Maybe several years later, Julia REPL is another Emacs! I hope it could become more customize. After all, many Julia user are tech-geek. Thank you for your information, and thank you for the REPL! On Thursday, October 30, 2014 12:51:43 PM UTC+1, Kevin Squire wrote: Actually, you could already do that if you typed the ? first... Thanks for the enthusiasm, though! Cheers, Kevin On Thu, Oct 30, 2014 at 3:43 AM, xiong...@gmail.com javascript: wrote: I see, I should use meta-Backspace instead. And the undocumented shortcut for function arguments is cool! I didn't find that before! Just for fun, I changed my code a little, to show help by function_name?\t, like: julia sin?\t Base.sin(x) Compute sine of x, where x is in radians julia sin? function CUSTOM_AUTOCOMPLETION_HOOK(txt,pos) if txt[pos]=='?' pos1 #Show help of function m=match(r([\w\!]+)$,txt[1:pos-1]) if !isa(m,Nothing) S=m.captures[1] if isdefined(parse(S)) println() help(S) end return UTF8String[], 0:-1, true end end 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 println(\nToo many keys to be auto-completed.) return UTF8String[], 0:-1, true 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 println(\nToo many keys to be auto-completed.) return UTF8String[], 0:-1, true 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 On Thursday, October 30, 2014 10:39:43 AM UTC+1, Ivar Nesje wrote: We have different level of experience with key bindings, and we are used to different things. You won't get far with It really make me crazy that Julia doesn't work exactly as Matlab or R, but there are definitely still possibilities to change behaviour if you manage to convince the community that some other way is better. See also the docs http://docs.julialang.org/en/release-0.3/manual/interacting-with-julia/ where we attempt to describe the different key bindings, and it seems like you are confusing meta-Backspace with ^w. We also have a really nice shortcut (that I can't find in the documentation) where you can press TAB just after a left parens, and get a list of the methods on the function. That is often more directly useful than the help, when you need to lookup the order of the arguments. julia sin(\t sin(a::Complex{Float16}) at float16.jl:141 sin(x::Real) at math.jl:125 sin(z::Complex{T:Real}) at complex.jl:518 sin{Tv,Ti}(A::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:450 sin(x::Float64) at math.jl:123 sin{T:Number}(::AbstractArray{T:Number,1}) at operators.jl:358 sin(x::Float32) at math.jl:124 sin{T:Number}(::AbstractArray{T:Number,2}) at operators.jl:359 sin(a::Float16) at float16.jl:140 sin{T:Number}(::AbstractArray{T:Number,N}) at operators.jl:361 sin(x::BigFloat) at mpfr.jl:488 This trick also works when you have started typing some of the arguments, if you ensure that the cursor is right after the parens. Ivar kl. 10:07:37 UTC+1 torsdag 30. oktober 2014 skrev xiong...@gmail.com følgende: It will be prefect if the Tab can also auto-complete the argument names of a
Re: [julia-users] Re: Customize REPL autocomplete
Maybe a little flaw for the filename auto-completion, that path started with ~ ($HOME) can not be completed.
[julia-users] Re: Customize REPL autocomplete
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 xiong...@gmail.com 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.
[julia-users] Re: Customize REPL autocomplete
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://github.com/JuliaLang/julia/blob/master/base/REPLCompletions.jl#L185 : 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 xiong...@gmail.com 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.
[julia-users] Re: Customize REPL autocomplete
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 xiong...@gmail.com 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%23L185sa=Dsntz=1usg=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 xiong...@gmail.com 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.
Re: [julia-users] Re: Customize REPL autocomplete
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 iva...@gmail.com 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 xiong...@gmail.com 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%23L185sa=Dsntz=1usg=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 xiong...@gmail.com 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.
Re: [julia-users] Re: Customize REPL autocomplete
+1 On Wednesday, October 29, 2014 9:56:33 PM UTC+1, Elliot Saba wrote: 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 iva...@gmail.com javascript: 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 xiong...@gmail.com 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%23L185sa=Dsntz=1usg=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 xiong...@gmail.com 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.