X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fredisplay-tty.c;h=187cd470ea4f13f3b748f3045e9fdf514778005f;hb=44ea030ec31ae441e59974eb9f6b2a9404611cd8;hp=773eea3b48373db284b4201d2bc0ae3a87598391;hpb=3e447015251ce6dcde843cbed10d9033d5538622;p=chise%2Fxemacs-chise.git.1 diff --git a/src/redisplay-tty.c b/src/redisplay-tty.c index 773eea3..9e8515d 100644 --- a/src/redisplay-tty.c +++ b/src/redisplay-tty.c @@ -56,11 +56,11 @@ Boston, MA 02111-1307, USA. */ #ifdef __cplusplus extern "C" { #endif -extern int tgetent (const char *, const char *); -extern int tgetflag (const char *); -extern int tgetnum (const char *); -extern char *tgetstr (const char *, char **); -extern void tputs (const char *, int, void (*)(int)); +extern int tgetent (CONST char *, CONST char *); +extern int tgetflag (CONST char *); +extern int tgetnum (CONST char *); +extern char *tgetstr (CONST char *, char **); +extern void tputs (CONST char *, int, void (*)(int)); #ifdef __cplusplus } #endif @@ -107,7 +107,7 @@ static void term_get_fkeys (Lisp_Object keymap, char **address); column, so we use emchar_string_displayed_columns(). ****************************************************************************/ static int -tty_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str, +tty_text_width (struct frame *f, struct face_cachel *cachel, CONST Emchar *str, Charcount len) { return emchar_string_displayed_columns (str, len); @@ -289,7 +289,7 @@ tty_output_display_block (struct window *w, struct display_line *dl, int block, elt++; } } - /* #### RUNE_HLINE is actually a little more complicated than this + /* #### RUNE_HLINE is actualy a little more complicated than this but at the moment it is only used to draw a turned off modeline and this will suffice for that. */ else if (rb->type == RUNE_BLANK || rb->type == RUNE_HLINE) @@ -391,8 +391,6 @@ tty_output_display_block (struct window *w, struct display_line *dl, int block, case IMAGE_MONO_PIXMAP: case IMAGE_COLOR_PIXMAP: case IMAGE_SUBWINDOW: - case IMAGE_WIDGET: - case IMAGE_LAYOUT: /* just do nothing here */ break; @@ -463,14 +461,16 @@ tty_output_vertical_divider (struct window *w, int clear) Clear the area in the box defined by the given parameters. ****************************************************************************/ static void -tty_clear_region (Lisp_Object window, struct device* d, struct frame * f, - face_index findex, int x, int y, - int width, int height, Lisp_Object fcolor, Lisp_Object bcolor, - Lisp_Object background_pixmap) +tty_clear_region (Lisp_Object window, face_index findex, int x, int y, + int width, int height) { + struct window *w = XWINDOW (window); + struct frame *f = XFRAME (w->frame); struct console *c = XCONSOLE (FRAME_CONSOLE (f)); int line; - struct window* w = XWINDOW (window); + + if (!width || !height) + return; tty_turn_on_face (w, findex); for (line = y; line < y + height; line++) @@ -534,7 +534,7 @@ tty_clear_to_window_end (struct window *w, int ypos1, int ypos2) Lisp_Object window; XSETWINDOW (window, w); - redisplay_clear_region (window, DEFAULT_INDEX, x, ypos1, width, ypos2 - ypos1); + tty_clear_region (window, DEFAULT_INDEX, x, ypos1, width, ypos2 - ypos1); } } @@ -950,16 +950,16 @@ tty_redisplay_shutdown (struct console *c) { Lisp_Object dev = CONSOLE_SELECTED_DEVICE (c); - if (!NILP (dev)) + if (!GC_NILP (dev)) { Lisp_Object frm = DEVICE_SELECTED_FRAME (XDEVICE (dev)); - if (!NILP (frm)) + if (!GC_NILP (frm)) { struct frame *f = XFRAME (frm); /* Clear the bottom line of the frame. */ - redisplay_clear_region (FRAME_SELECTED_WINDOW (f), DEFAULT_INDEX, 0, + tty_clear_region (FRAME_SELECTED_WINDOW (f), DEFAULT_INDEX, 0, f->height, f->width, 1); /* And then stick the cursor there. */ @@ -1305,8 +1305,7 @@ init_tty_for_redisplay (struct device *d, char *terminal_type) struct fkey_table { - const char *cap; - const char *name; + CONST char *cap, *name; }; /* Termcap capability names that correspond directly to X keysyms. @@ -1438,7 +1437,7 @@ term_get_fkeys_1 (Lisp_Object function_key_map) char *sequence = tgetstr (keys[i].cap, address); if (sequence) Fdefine_key (function_key_map, - build_ext_string (sequence, Qbinary), + build_ext_string (sequence, FORMAT_BINARY), vector1 (intern (keys[i].name))); } @@ -1446,18 +1445,22 @@ term_get_fkeys_1 (Lisp_Object function_key_map) describes F10, whereas othertimes it describes F0 and "k;" describes F10. We will attempt to politely accommodate both systems by testing for "k;", and if it is present, assuming that "k0" denotes F0, otherwise F10. - */ + */ { - const char *k_semi = tgetstr ("k;", address); - const char *k0 = tgetstr ("k0", address); + char *k_semi = tgetstr ("k;", address); + char *k0 = tgetstr ("k0", address); + CONST char *k0_name = "f10"; if (k_semi) - Fdefine_key (function_key_map, build_ext_string (k_semi, Qbinary), - vector1 (intern ("f10"))); + { + Fdefine_key (function_key_map, build_ext_string (k_semi, FORMAT_BINARY), + vector1 (intern ("f10"))); + k0_name = "f0"; + } if (k0) - Fdefine_key (function_key_map, build_ext_string (k0, Qbinary), - vector1 (intern (k_semi ? "f0" : "f10"))); + Fdefine_key (function_key_map, build_ext_string (k0, FORMAT_BINARY), + vector1 (intern (k0_name))); } /* Set up cookies for numbered function keys above f10. */ @@ -1480,46 +1483,47 @@ term_get_fkeys_1 (Lisp_Object function_key_map) { sprintf (fkey, "f%d", i); Fdefine_key (function_key_map, - build_ext_string (sequence, Qbinary), + build_ext_string (sequence, FORMAT_BINARY), vector1 (intern (fkey))); } } } - } + } /* * Various mappings to try and get a better fit. */ -#define CONDITIONAL_REASSIGN(cap1, cap2, keyname) do { \ - if (!tgetstr (cap1, address)) \ - { \ - char *sequence = tgetstr (cap2, address); \ - if (sequence) \ - Fdefine_key (function_key_map, \ - build_ext_string (sequence, Qbinary), \ - vector1 (intern (keyname))); \ - } \ - } while (0) + { +#define CONDITIONAL_REASSIGN(cap1, cap2, sym) \ + if (!tgetstr (cap1, address)) \ + { \ + char *sequence = tgetstr (cap2, address); \ + if (sequence) \ + Fdefine_key (function_key_map, \ + build_ext_string (sequence, FORMAT_BINARY), \ + vector1 (intern (sym))); \ + } - /* if there's no key_next keycap, map key_npage to `next' keysym */ - CONDITIONAL_REASSIGN ("%5", "kN", "next"); - /* if there's no key_prev keycap, map key_ppage to `previous' keysym */ - CONDITIONAL_REASSIGN ("%8", "kP", "prior"); - /* if there's no key_dc keycap, map key_ic to `insert' keysym */ - CONDITIONAL_REASSIGN ("kD", "kI", "insert"); - - /* IBM has their own non-standard dialect of terminfo. - If the standard name isn't found, try the IBM name. */ - CONDITIONAL_REASSIGN ("kB", "KO", "backtab"); - CONDITIONAL_REASSIGN ("@4", "kJ", "execute"); /* actually "action" */ - CONDITIONAL_REASSIGN ("@4", "kc", "execute"); /* actually "command" */ - CONDITIONAL_REASSIGN ("%7", "ki", "menu"); - CONDITIONAL_REASSIGN ("@7", "kw", "end"); - CONDITIONAL_REASSIGN ("F1", "k<", "f11"); - CONDITIONAL_REASSIGN ("F2", "k>", "f12"); - CONDITIONAL_REASSIGN ("%1", "kq", "help"); - CONDITIONAL_REASSIGN ("*6", "kU", "select"); + /* if there's no key_next keycap, map key_npage to `next' keysym */ + CONDITIONAL_REASSIGN ("%5", "kN", "next"); + /* if there's no key_prev keycap, map key_ppage to `previous' keysym */ + CONDITIONAL_REASSIGN ("%8", "kP", "prior"); + /* if there's no key_dc keycap, map key_ic to `insert' keysym */ + CONDITIONAL_REASSIGN ("kD", "kI", "insert"); + + /* IBM has their own non-standard dialect of terminfo. + If the standard name isn't found, try the IBM name. */ + CONDITIONAL_REASSIGN ("kB", "KO", "backtab"); + CONDITIONAL_REASSIGN ("@4", "kJ", "execute"); /* actually "action" */ + CONDITIONAL_REASSIGN ("@4", "kc", "execute"); /* actually "command" */ + CONDITIONAL_REASSIGN ("%7", "ki", "menu"); + CONDITIONAL_REASSIGN ("@7", "kw", "end"); + CONDITIONAL_REASSIGN ("F1", "k<", "f11"); + CONDITIONAL_REASSIGN ("F2", "k>", "f12"); + CONDITIONAL_REASSIGN ("%1", "kq", "help"); + CONDITIONAL_REASSIGN ("*6", "kU", "select"); #undef CONDITIONAL_REASSIGN + } return Qnil; }