int DerivedText_Editor::handle_key(){ // Call FLTK's rules to try to turn this into a printing character. // This uses the right-hand ctrl key as a "compose prefix" and returns // the changes that should be made to the text, as a number of // bytes to delete and a string to insert: int del = 0; if (Fl::compose(del)) { if (del) { // del is a number of bytes int dp = insert_position() - del; if ( dp < 0 ) dp = 0; buffer()->select(dp, insert_position()); } kill_selection(this); if (Fl::event_length()) { if (insert_mode()) insert(Fl::event_text()); else overstrike(Fl::event_text()); } #ifdef __APPLE__ if (Fl::compose_state) { int pos = this->insert_position(); this->buffer()->select(pos - Fl::compose_state, pos); } #endif show_insert_position(); set_changed(); if (when()&FL_WHEN_CHANGED) do_callback(); return 1; } int key = Fl::event_key(), state = Fl::event_state(), c = Fl::event_text()[0]; state &= FL_SHIFT|FL_CTRL|FL_ALT|FL_META; // only care about these states C_to_Fl_Callback* f; f = bound_key_function(key, state, global_key_bindings); this->curr_callback_context = f; if (!f) f = bound_key_function(key, state, key_bindings); if (f) return C_to_Fl_Callback::intercept(key, this); if (default_key_function_ && !state) return default_key_function_(c, this); return 0; }
static void flushln(void) { register int lastmode; register int i; int hadmodes = 0; lastmode = NORMAL; for (i=0; i<maxcol; i++) { obaccs(i); if (obuf[i].c_mode != lastmode) { hadmodes++; setmod(obuf[i].c_mode); lastmode = obuf[i].c_mode; } if (obuf[i].c_char == '\0') { if (upln) { put(cursor_right); } else outc(' '); } else outc(obuf[i].c_char); while (i < maxcol-1 && obuf[i+1].c_mode & FILLER) i++; } if (lastmode != NORMAL) { setmod(0); } if (must_overstrike && hadmodes) overstrike(); putchar('\n'); if (iflag && hadmodes) iattr(); fflush(stdout); if (upln) upln--; initbuf(); }
static void flushln(void) { int lastmode; int i; int hadmodes = 0; lastmode = NORMAL; for (i=0; i<maxcol; i++) { if (obuf[i].c_mode != lastmode) { hadmodes++; setnewmode(obuf[i].c_mode); lastmode = obuf[i].c_mode; } if (obuf[i].c_char == '\0') { if (upln) PRINT(CURS_RIGHT); else outc(' ', 1); } else outc(obuf[i].c_char, obuf[i].c_width); if (obuf[i].c_width > 1) i += obuf[i].c_width - 1; } if (lastmode != NORMAL) { setnewmode(0); } if (must_overstrike && hadmodes) overstrike(); putwchar('\n'); if (iflag && hadmodes) iattr(); (void)fflush(stdout); if (upln) upln--; initbuf(); }