Skip to content

Instantly share code, notes, and snippets.

@Keno
Created June 4, 2013 19:53
Show Gist options
  • Save Keno/5708990 to your computer and use it in GitHub Desktop.
Save Keno/5708990 to your computer and use it in GitHub Desktop.
Previous handmade REPL function
function handmande_default(s::ReadlineState)
c=read(s.terminal,Char)
# Need switch-case (though LLVM might be smart enough to optimize this anyway)
if c == '\t'
completeLine(s)
refresh_line(s)
elseif c == '\r'
if s.enter_cb(s)
println(s.terminal)
add_history(s.hist,s)
return :done
else
edit_insert(s,'\n')
refresh_line(s)
end
elseif c == 127 || c==8 #Backspace/^H
edit_backspace(s)
elseif c == 4 #^D
if s.input_buffer.size > 0
edit_delete(s)
else
println(s.terminal)
return :abort
end
elseif c == 2 #^B
edit_move_left(s)
elseif c == 6 #^F
edit_move_right(s)
elseif c == 16 #^P
history_prev(s)
elseif c == 14 #^N
history_next(s)
elseif c == 27 #Escape Sequence
seq = Array(Uint8,2)
read(s.terminal,seq)
if seq[1] == 91
if seq[2] == 68 #Left Arrow
edit_move_left(s)
elseif seq[2] == 67 #Right Arrow
edit_move_right(s)
elseif seq[2] == 66 #Down Arrow
history_next(s)
elseif seq[2] == 65 #Up Arrow
history_prev(s)
elseif seq[2] > 48 && seq[2] < 55 #Extended Escape Sequence
seq2 = Array(Uint8,2)
read(s.terminal,seq2)
if seq[2] == 51 && seq2[1] == 126
edit_delete(s)
end
end
end
elseif c == 21 #^U
truncate(s.input_buffer,0)
refresh_line(s)
elseif c == 11 #^K
truncate(s.input_buffer,position(s.input_buffer))
refresh_line(s)
elseif c == 1 #^A
seek(s.input_buffer,0)
refresh_line(s)
elseif c == 5 #^E
seek(s.input_buffer,s.input_buffer.size-1)
refresh_line(s)
elseif c == 12
clear(s.terminal)
refresh_line(s)
elseif c == 23
error("Unimplemented")
#edit_delte_prev_word(s)
else
edit_insert(s,c)
end
return :ok
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment