Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/enterminus/src/bin Modified Files: handlers.c Log Message: 1- tons of comments for escapes 2- added DPRINTs for debugging =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/handlers.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- handlers.c 18 Feb 2005 23:19:06 -0000 1.6 +++ handlers.c 19 Feb 2005 00:33:55 -0000 1.7 @@ -9,10 +9,8 @@ Ecore_Event *event; c = term_tcanvas_data_pop(term); - for(len = 0; c != '\007'; len++) { - - buf[len] = c; - + for(len = 0; c != '\007'; len++) { + buf[len] = c; c = term_tcanvas_data_pop(term); } buf[len] = 0; @@ -28,8 +26,6 @@ e->title = strdup(term->title); event = ecore_event_add(TERM_EVENT_TITLE_CHANGE, e, term_event_title_change_free, NULL); - /* TODO: MOVE THIS TO FRONTEND CODE */ -//ecore_x_window_prop_title_set(ecore_evas_software_x11_window_get(term->ee),buf); break; } } @@ -77,43 +73,79 @@ switch(c) { case 'A': + /* ESC [ [ n ] A move up n times */ + DPRINT((stderr, "ESC [ [ n ] A move up n times\n")); term_cursor_move_up(term, narg ? args[0] : 1); break; case 'B': + /* ESC [ [ n ] B move down n times */ + DPRINT((stderr, "ESC [ [ n ] B move down n times\n")); term_cursor_move_down(term, narg ? args[0] : 1); break; case 'C': + /* ESC [ [ n ] C move forward n times */ + DPRINT((stderr, "ESC [ [ n ] C move forward n times\n")); term_cursor_move_right(term, narg ? args[0] : 1); break; case 'D': + /* ESC [ [ n ] D move backward n times */ + DPRINT((stderr, "ESC [ [ n ] D move backward n times\n")); term_cursor_move_left(term, narg ? args[0] : 1); break; + case 'E': + /* ESC [ [ n ] E Cursor Down n times and to first col, default 1 */ + DPRINT((stderr, "ESC [ [ n ] E Cursor Down n times and to first col\n")); + break; + case 'F': + /* ESC [ [ n ] F Cursor Up n times and to first col, default 1 */ + DPRINT((stderr, "ESC [ [ n ] F Cursor Up n times and to first col\n")); + break; case 'G': + /* ESC [ [ n ] G Cursor to Column n (HPA) */ + DPRINT((stderr, "ESC [ [ n ] G Cursor to Column n (HPA)\n")); term_cursor_move_col(term, narg ? args[0] : 1); break; case 'H': + /* ESC [ [ r ; c ] H Cursor Pos [row;column] (CUP), default 1;1 */ + DPRINT((stderr, "ESC [ [ r ; c ] H Cursor Pos [row;column] (CUP)\n")); term_cursor_goto(term, args[1] ? args[1] : 1, args[0] ? args[0] : 1); break; + case 'I': + /* ESC [ [ n ] I Move forward n tab stops, default 1 */ + DPRINT((stderr, "ESC [ [ n ] I Move forward n tab stops\n")); + break; case 'J': + /* ESC [ [ n ] J Erase in Display (ED) + * n == 0: Clear Below (default) + * n == 1: Clear Above + * n == 2: Clear All + */ + DPRINT((stderr, "ESC [ [ n ] J Erase in Display (ED)\n")); if(narg) { if(args[0] == 1) { /* erase from start to cursor */ - term_clear_area(term, 1, 1, - term->tcanvas->cols, term->tcanvas->cur_row); + term_clear_area(term, 1, 1, term->tcanvas->cols, + term->tcanvas->cur_row); } if(args[0] == 2) { /* erase whole display */ - term_clear_area(term, 1, 1, - term->tcanvas->cols, term->tcanvas->rows); + term_clear_area(term, 1, 1, term->tcanvas->cols, + term->tcanvas->rows); } } else { /* erase from cursor to end of display */ term_clear_area(term, 1, term->tcanvas->cur_row, - term->tcanvas->cols, term->tcanvas->rows); + term->tcanvas->cols, term->tcanvas->rows); } break; case 'K': + /* ESC [ [ n ] K Erase in Line (EL) + * n == 0: Clear to Right (default) + * n == 1: Clear to Left (EL1) + * n == 2: Clear All + */ + DPRINT((stderr, "ESC [ [ n ] K Erase in Line (EL)\n")); if(narg) { if(args[0] == 1) { /* erase from start of line to cursor */ @@ -133,22 +165,95 @@ term->tcanvas->cols, term->tcanvas->cur_row); } break; - case 'L': /* Insert lines */ + case 'L': + /* ESC [ [ n ] L Insert n lines (IL), default 1 */ + DPRINT((stderr, "ESC [ [ n ] L Insert n lines (IL)\n")); //insert_lines(narg ? args[0] : 1); break; - case 'M': /* Delete lines */ + case 'M': + /* ESC [ [ n ] M Delete n lines (DL), default 1 */ + DPRINT((stderr, "ESC [ [ n ] M Delete n lines (DL)\n")); //delete_lines(narg ? args[0] : 1); break; - case 'd': /* line position absolute */ - term_cursor_move_row(term, narg ? args[0] : 1); - break; - case 'P': /* clear # of characters */ + case 'P': + /* ESC [ [ n ] P Delete n characters (DCH), default 1 */ + DPRINT((stderr, "ESC [ [ n ] P Delete n characters (DCH)\n")); term_clear_area(term, term->tcanvas->cur_col, term->tcanvas->cur_row, term->tcanvas->cur_col + args[0], term->tcanvas->cur_row); break; + case 'W': + /* ESC [ [ n ] W Tabulator functions + * n == 0: Tab Set (HTS) + * n == 2: Tab Clear (TBC), clear current column + * n == 5: Tab Clear (TBC), clear all + */ + DPRINT((stderr, "ESC [ [ n ] W Tabulator functions\n")); + break; + case 'X': + /* ESC [ [ n ] X Erase n characters (ECH), default 1 */ + DPRINT((stderr, "ESC [ [ n ] X Erase n characters (ECH)\n")); + break; + case 'Z': + /* ESC [ [ n ] Z Move backward n tabstops, default 1 */ + DPRINT((stderr, "ESC [ [ n ] Z Move backward n tabstops\n")); + break; + case '`': + /* ESC [ [ n ] Same as ESC [ n G (HPA) */ + DPRINT((stderr, "ESC [ [ n ] Same as ESC [ n G (HPA)\n")); + break; + case 'a': + /* ESC [ [ n ] a Same as ESC [ n C (CUF) */ + DPRINT((stderr, "ESC [ [ n ] a Same as ESC [ n C (CUF)\n")); + break; + case 'c': + /* ESC [ [ n ] c Send Device Attributes (DA), + * default of 0 returns "ESC[?1;2c" indicating + * a VT100 with advanced video option + */ + DPRINT((stderr, "ESC [ [ n ] c Send Device Attributes (DA)\n")); + break; + case 'd': + /* ESC [ [ n ] d Cursor to line n (VPA) */ + DPRINT((stderr, "ESC [ [ n ] d Cursor to line n (VPA)\n")); + term_cursor_move_row(term, narg ? args[0] : 1); + break; + case 'e': + /* ESC [ [ n ] e Same as ESC [ n A (CUU) */ + DPRINT((stderr, "ESC [ [ n ] e Same as ESC [ n A (CUU)\n")); + break; + case 'f': + /* ESC [ [ r ; c ] f Horizontal and Vertical + * Position (HVP), default 1;1 + */ + DPRINT((stderr, "ESC [ [ r ; c ] f Horizontal and Vertical Position (HVP)\n")); + break; + case 'g': + /* ESC [ [ n ] g Tab Clear + * n == 0: Tab Clear (TBC), clear current column (default) + * n == 3: Tab Clear (TBC), clear all + */ + DPRINT((stderr, "ESC [ [ n ] g Tab Clear\n")); + break; + case 'i': + /* ESC [ [ n ] i Printing + * n == 4: Disable transparent print mode (MC4) + * n == 5: Enable transparent print mode (MC5) + */ + DPRINT((stderr, "ESC [ [ n ] i Printing\n")); + break; + + /* ESC [ n [ ; n ... ] { h | l } + * + * h: Set Mode (SM) + * l: Reset Mode (RM) + * + * n == 4: Insert Mode (SMIR)/Replace Mode (RMIR) + * n == 20: Automatic Newline/Normal Linefeed (LNM) + */ case 'h': /* set mode */ + DPRINT((stderr, "ESC [ n [ ; n ... ] h\n")); switch(args[0]) { case 1: if(questionmark) { @@ -179,13 +284,14 @@ } break; default: - fprintf(stderr, "Unsupported ESC [%s h mode %d\n", + DPRINT((stderr, "Unsupported ESC [%s h mode %d\n", questionmark?" ?":"", - args[0]); + args[0])); break; } break; case 'l': /* reset mode */ + DPRINT((stderr, "ESC [ n [ ; n ... ] l\n")); switch(args[0]) { case 1: if(questionmark) { @@ -213,14 +319,32 @@ } break; default: - fprintf(stderr, "Unsupported ESC [%s l mode %d\n", + DPRINT((stderr, "Unsupported ESC [%s l mode %d\n", questionmark?" ?":"", - args[0]); + args[0])); break; } break; case 'm': - /* reset attrs */ + DPRINT((stderr, "ESC [ n [ ; n ... ] m Character Attributes (SGR)\n")); + /* ESC [ n [ ; n ... ] m Character Attributes (SGR) + * + * n == 0: Normal (default) + * n == 1/22: Turn bold (bright fg) on/off + * n == 4/24: Turn underline on/off + * n == 5/25: Turn "blink" (bright bg) on/off + * n == 7/27: Turn inverse on/off + * n == 30/40: foreground/background black + * n == 31/41: foreground/background red + * n == 32/42: foreground/background green + * n == 33/43: foreground/background yellow + * n == 34/44: foreground/background blue + * n == 35/45: foreground/background magenta + * n == 36/46: foreground/background cyan + * n == 37/47: foreground/background white + * n == 39/49: foreground/background default + */ + /* reset attrs */ if(!narg) { //set_buffer_attrs(0); term_tcanvas_fg_color_set(term, 7); @@ -254,14 +378,24 @@ term_tcanvas_bg_color_set(term, 0); } else - fprintf(stderr, "Unsupported mode %d\n", args[i]); + DPRINT((stderr, "Unsupported mode %d\n", args[i])); } break; case 'n': - /* status report */ + /* ESC [ [ n ] n Device Status Report (DSR) + * + * n == 5: Status Report, returns "ESC[0n" ("OK") + * n == 6: Report Cursor Position (CPR) as "ESC[r;cR" + * n == 7: Request display name (ignored by default for + * security reasons) + * n == 8: Request version number in window title + * n == 9: Display pixmap/transparency status in window title + */ + DPRINT((stderr, "ESC [ [ n ] n Device Status Report (DSR)\n")); + /* status report */ { char buf[20]; - + switch(args[0]) { case 6: @@ -274,11 +408,16 @@ //cmd_write(buf, strlen(buf)); break; default: - fprintf(stderr, "Unknown status request id %d\n", args[0]); + DPRINT((stderr, "Unknown status request id %d\n", args[0])); } } break; - case 'r': /* set scrolling region */ + case 'r': + /* ESC [ [ t ; b ] r Set Scrolling Region (CSR), + * where t is the top row and b is the bottom row, + * defaults to the full screen + */ + DPRINT((stderr, "ESC [ [ t ; b ] r Set Scrolling Region (CSR)\n")); term->tcanvas->scroll_region_start = args[0] ? args[0] : 1; term->tcanvas->scroll_region_end = args[1] ? args[1] : term->tcanvas->rows; if(!narg) { @@ -292,16 +431,17 @@ term->tcanvas->scroll_in_region = 1; break; + case '[': /* echoed function key */ term_tcanvas_data_pop(term); break; default: - fprintf(stderr, "Unsupported CSI sequence ESC ["); + DPRINT((stderr, "Unsupported CSI sequence ESC [")); if(questionmark) - fprintf(stderr, " ?"); + DPRINT((stderr, " ?")); for(i = 0; i < narg; i++) - fprintf(stderr, " %d", args[i]); - fprintf(stderr, " %c\n", c); + DPRINT((stderr, " %d", args[i])); + DPRINT((stderr, " %c\n", c)); } break; case ']': /* xterm sequence */ @@ -317,27 +457,32 @@ c = term_tcanvas_data_pop(term); } if(c != ';' || !narg) { - fprintf(stderr, "Invalid xterm sequence\n"); + DPRINT((stderr, "Invalid xterm sequence\n")); break; } term_handler_xterm_seq(args[0], term); break; - case '7': /* save cursor position */ + case '7': /* ESC 7 (save cursor position) */ + DPRINT((stderr, "ESC 7 (save cursor pos)\n")); term->tcanvas->saved_cursor_x = term->tcanvas->cur_col; term->tcanvas->saved_cursor_y = term->tcanvas->cur_row; break; - case '8': /* restore cursor position */ + case '8': /* ESC 8 (restore cursor position) */ + DPRINT((stderr, "ESC 8 (restore cursor pos)\n")); term->tcanvas->cur_col = term->tcanvas->saved_cursor_x; term->tcanvas->cur_row = term->tcanvas->saved_cursor_y; break; - case '=': /* set application keypad mode */ + case '=': /* ESC = (set application keypad mode) */ + DPRINT((stderr, "ESC = (set application keypad mode)\n")); term->tcanvas->app_keypad_mode = 1; break; - case '>': /* set numeric keypad mode */ + case '>': /* ESC > (set numeric keypad mode) */ + DPRINT((stderr, "ESC = (set numeric keypad mode)\n")); term->tcanvas->app_keypad_mode = 0; break; - case 'M': /* reverse linefeed */ + case 'M': /* ESC M (reverse linefeed) */ + DPRINT((stderr, "ESC = (reverse linefeed)\n")); term->tcanvas->cur_row--; if(term->tcanvas->cur_row < term->tcanvas->scroll_region_start) { term->tcanvas->cur_row = term->tcanvas->scroll_region_start; @@ -345,7 +490,7 @@ } break; default: - fprintf(stderr, "Unsupported ESC sequence ESC %c\n", c); + DPRINT((stderr, "Unsupported ESC sequence ESC %c\n", c)); break; } return 1; @@ -388,7 +533,7 @@ write(term->cmd_fd.sys, buf, strlen(buf)); } else { if( write(term->cmd_fd.sys, ev->string, 1) < 0) { - fprintf(stderr, "Error writing to process: %m\n"); + DPRINT((stderr, "Error writing to process: %m\n")); //exit(2); } } @@ -467,4 +612,3 @@ free(e->title); free(e); } - ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs