static void do_find (TextEditor me) { if (! theFindString) return; // e.g. when the user does "Find again" before having done any "Find" long left, right; autostring32 text = GuiText_getStringAndSelectionPosition (my textWidget, & left, & right); char32 *location = str32str (& text [right], theFindString); if (location) { long index = location - text.peek(); GuiText_setSelection (my textWidget, index, index + str32len (theFindString)); GuiText_scrollToSelection (my textWidget); #ifdef _WIN32 GuiThing_show (my d_windowForm); #endif } else { /* Try from the start of the document. */ location = str32str (text.peek(), theFindString); if (location) { long index = location - text.peek(); GuiText_setSelection (my textWidget, index, index + str32len (theFindString)); GuiText_scrollToSelection (my textWidget); #ifdef _WIN32 GuiThing_show (my d_windowForm); #endif } else { Melder_beep (); } } }
static void do_replace (TextEditor me) { if (! theReplaceString) return; // e.g. when the user does "Replace again" before having done any "Replace" autostring32 selection = GuiText_getSelection (my textWidget); if (! Melder_equ (selection.peek(), theFindString)) { do_find (me); return; } long left, right; autostring32 text = GuiText_getStringAndSelectionPosition (my textWidget, & left, & right); GuiText_replace (my textWidget, left, right, theReplaceString); GuiText_setSelection (my textWidget, left, left + str32len (theReplaceString)); GuiText_scrollToSelection (my textWidget); #ifdef _WIN32 GuiThing_show (my d_windowForm); #endif }
static void menu_cb_pasteHistory (ScriptEditor me, EDITOR_ARGS_DIRECT) { char32 *history = UiHistory_get (); if (! history || history [0] == U'\0') Melder_throw (U"No history."); long length = str32len (history); if (history [length - 1] != U'\n') { UiHistory_write (U"\n"); history = UiHistory_get (); length = str32len (history); } if (history [0] == U'\n') { history ++; length --; } long first = 0, last = 0; char32 *text = GuiText_getStringAndSelectionPosition (my textWidget, & first, & last); Melder_free (text); GuiText_replace (my textWidget, first, last, history); GuiText_setSelection (my textWidget, first, first + length); GuiText_scrollToSelection (my textWidget); }