def _rl_arg_dispatch(cxt, c)
key = c
if (@_rl_keymap[c] == :rl_universal_argument)
if ((cxt & NUM_SAWDIGITS) == 0)
@rl_numeric_arg *= 4
return 1
elsif (rl_isstate(RL_STATE_CALLBACK))
@_rl_argcxt |= NUM_READONE
return 0
else
rl_setstate(RL_STATE_MOREINPUT)
key = rl_read_key()
rl_unsetstate(RL_STATE_MOREINPUT)
rl_restore_prompt()
rl_clear_message()
rl_unsetstate(RL_STATE_NUMERICARG)
if key.class == Fixnum && key < 0
return -1
end
return (_rl_dispatch(key, @_rl_keymap))
end
end
r = c[1,1]
if (r>='0' && r<='9')
r = r.to_i
@rl_numeric_arg = @rl_explicit_arg ? (@rl_numeric_arg * 10) + r : r
@rl_explicit_arg = 1
@_rl_argcxt |= NUM_SAWDIGITS
elsif (c == '-' && !@rl_explicit_arg)
@rl_numeric_arg = 1
@_rl_argcxt |= NUM_SAWMINUS
@rl_arg_sign = -1
else
if ((@_rl_argcxt & NUM_SAWMINUS)!=0 && @rl_numeric_arg == 1 && !@rl_explicit_arg)
@rl_explicit_arg = 1
end
rl_restore_prompt()
rl_clear_message()
rl_unsetstate(RL_STATE_NUMERICARG)
r = _rl_dispatch(key, @_rl_keymap)
if (rl_isstate(RL_STATE_CALLBACK))
if (!@rl_done)
send(@rl_redisplay_function)
end
r = 0
end
return r
end
1
end