···408408 let s = State.override ~pos:!pos state in
409409 refresh_line s
410410411411+let delete_word (state : State.t) =
412412+ let pos = ref state.pos in
413413+ while !pos > 0 && Bytes.get state.buf !pos = ' ' do
414414+ decr pos
415415+ done;
416416+ while !pos > 0 && Bytes.get state.buf !pos <> ' ' do
417417+ decr pos
418418+ done;
419419+ let clen = state.pos - !pos in
420420+ let state =
421421+ if state.pos >= clen then begin
422422+ let dst = state.pos - clen in
423423+ let src = state.pos in
424424+ let len = state.len - state.pos in
425425+ Bytes.blit state.buf src state.buf dst len;
426426+ State.override ~pos:(state.pos - clen) ~len:(state.len - clen) state
427427+ end
428428+ else state
429429+ in
430430+ refresh_line state
431431+411432let reverse_incr_search ~history (state : State.t) =
412433 let has_match = ref true in
413434 let search_buf = Buffer.create 16 in
···603624 | _ -> Editing state
604625 end
605626 | _ -> Editing state)
606606- | _ ->
627627+ | Ctrl_a | Ctrl_g | Ctrl_e | Ctrl_p -> Editing state
628628+ | Unknown c when Uchar.(equal (of_int 8) c) (* ctrl+backspace *) ->
629629+ Editing (delete_word state)
630630+ | Unknown _ ->
607631 let state = edit_insert state uc in
608632 Editing state))
609633