Method: Readline.delete_text

Defined in:
readline.c

.delete_text([start[, length]]) ⇒ self .delete_text(start..end) ⇒ self .delete_textself

Delete text between start and end in the current line.

See GNU Readline’s rl_delete_text function.

Raises NotImplementedError if the using readline library does not support.

Overloads:

  • .delete_text([start[, length]]) ⇒ self

    Returns:

    • (self)
  • .delete_text(start..end) ⇒ self

    Returns:

    • (self)
  • .delete_textself

    Returns:

    • (self)


715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
# File 'readline.c', line 715

static VALUE
readline_s_delete_text(int argc, VALUE *argv, VALUE self)
{
    rb_check_arity(argc, 0, 2);
    if (rl_line_buffer) {
        const char *p, *ptr = rl_line_buffer;
        long beg = 0, len = strlen(ptr);
        const char *end = ptr + len;
        rb_encoding *enc = rb_locale_encoding();
        if (argc == 2) {
            beg = NUM2LONG(argv[0]);
            len = NUM2LONG(argv[1]);
          num_pos:
            p = str_subpos(ptr, end, beg, &len, enc);
            if (!p) rb_raise(rb_eArgError, "invalid index");
            beg = p - ptr;
        }
        else if (argc == 1) {
            len = rb_enc_strlen(ptr, ptr + len, enc);
            if (!rb_range_beg_len(argv[0], &beg, &len, len, 1)) {
                beg = NUM2LONG(argv[0]);
                goto num_pos;
            }
        }
        rl_delete_text(rb_long2int(beg), rb_long2int(beg + len));
    }
    return self;
}