.#,* ! n # dir+* ! h+. ! h / set_line_hidden * pop_mark_0/n . is_line_hidden! h! 0 / set_line_hidden 1 push_visible_mark ! n ( go_right # dir! 0=. 7 exchange_point_and_mark/c! 1 & update & getkey ( ungetkey 3 EXECUTE_ERROR_BLOCK y0 mark_next_nchars,* * search_fun # pat # rep % query ' rep_fun+* ! n & prompt $ doit # err " ch ' pat_len+* / undo_stack_type+' rep_len+ prev_string) user_mark$ next! 4/ undo_stack_type* * undo_stack+ $ NULL* undo_stack* # tmp+* 2 replacement_length+ # rep & strlen2 replacement_lengthE Replace '%s' with '%s'? (y/n/!/+/q/h) # pat # rep ' sprintf& prompt. # pat * search_funM' pat_len ' pat_len! 0@/. % query. 0 create_user_mark# tmp # rep ' pat_len ' rep_funMP ' pat_len! 0A # tmp 0 create_user_markAC. * go_right_1/cu/b. & prompt ' message ' pat_len" -1 0 mark_next_nchars & getkey" ch " ch# 114A.# 114 + window_info! 2< ( recenter/c/. " ch# 114A/k " ch.# 117x * undo_stack $ NULLBC3 * undo_stack ") user_mark . goto_user_mark ) push_spot * undo_stack"+ prev_string * undo_stack"' rep_len ' rep_funMP ( pop_spot * undo_stack"$ next* undo_stack/.# 121x3 / undo_stack_typeM# tmp * undo_stack # tmp$ next # tmp* undo_stack ) push_spot ) push_mark ' pat_len ( go_right ) bufsubstr * undo_stack+ prev_string ( pop_spot 0 create_user_mark * undo_stack) user_mark # rep ' pat_len ' rep_funM * undo_stack' rep_len/.# 110x3 * go_right_1/." 43x3 # rep ' pat_len ' rep_funMPv/." 33x3! 0% query/ .# 113x3v/.k y:replace, n:skip, !:replace all, u: undo last, +:replace then quit, q:quit % flush" 30 - input_pendingP/j/fy2 replace_with_query,* # fun # str # dir , match_ok_fun+* " ch # len+. # str # dir # funM# len # len! 0@/. , match_ok_funM. / EXECUTING_MACRO . DEFINING_MACROD.! 1w/c@ Press RET to continue searching. ' message # len" -1 0 mark_next_nchars & getkey" ch " ch" 13B. " ch ( ungetkey! 1w/c/c # dir! 0?. * go_right_1/c/f! 0wy2 search_maybe_again,* & off_on+# Off" On& off_on + CASE_SEARCHN+ CASE_SEARCH> Case Search %s for this buffer + CASE_SEARCH & off_on! ( vmessage2 toggle_case_search( srchmisc ' provide