Re: [julia-users] Re: Customize REPL autocomplete

2014-10-30 Thread xiongjieyi
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

2014-10-30 Thread Ivar Nesje
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

2014-10-30 Thread xiongjieyi
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

2014-10-30 Thread Kevin Squire
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

2014-10-30 Thread xiongjieyi
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

2014-10-30 Thread xiongjieyi
Maybe a little flaw for the filename auto-completion, that path started 
with ~ ($HOME) can not be completed.


[julia-users] Re: Customize REPL autocomplete

2014-10-29 Thread Ivar Nesje
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

2014-10-29 Thread xiongjieyi
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

2014-10-29 Thread Ivar Nesje
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

2014-10-29 Thread Elliot Saba
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

2014-10-29 Thread Max Suster
+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.