diff options
author | sobomax <sobomax@FreeBSD.org> | 2001-03-27 13:51:18 +0000 |
---|---|---|
committer | sobomax <sobomax@FreeBSD.org> | 2001-03-27 13:51:18 +0000 |
commit | ea073d6e59d921c61b6208e0c93897e5782aa622 (patch) | |
tree | 8e1321f929fb3ee593632b61092b14ba7b64438c | |
parent | a27d1d954d337d973c8c98834c505c64472f2aeb (diff) | |
download | FreeBSD-src-ea073d6e59d921c61b6208e0c93897e5782aa622.zip FreeBSD-src-ea073d6e59d921c61b6208e0c93897e5782aa622.tar.gz |
Resolve conflicts.
-rw-r--r-- | usr.bin/ee/ee.1 | 20 | ||||
-rw-r--r-- | usr.bin/ee/ee.c | 396 | ||||
-rw-r--r-- | usr.bin/ee/new_curse.c | 206 | ||||
-rw-r--r-- | usr.bin/ee/new_curse.h | 8 | ||||
-rw-r--r-- | usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg | 23 | ||||
-rw-r--r-- | usr.bin/ee/nls/en_US.US-ASCII/ee.msg | 23 |
6 files changed, 518 insertions, 158 deletions
diff --git a/usr.bin/ee/ee.1 b/usr.bin/ee/ee.1 index 956e879..708b7f5 100644 --- a/usr.bin/ee/ee.1 +++ b/usr.bin/ee/ee.1 @@ -353,6 +353,9 @@ A window showing the keyboard operations that can be performed can be displayed or not. .It emacs keys Control keys may be given bindings similar to emacs, or not. +.It 16 bit characters +Toggles whether sixteen bit characters are handled as one 16-bit quantities or +two 8-bit quantities. This works primarily with the Chinese Big 5 code set. .El .Pp You may set these modes via the initialization file (see below), or with a @@ -496,10 +499,14 @@ Turn on display of eight bit characters. .It noeightbit Turn off display of eight bit characters (they are displayed as their decimal value inside angle brackets, e.g., "<220>"). +.It 16bit +Turns on handling of 16-bit characters. +.It no16bit +Turns off handling of 16-bit characters. .It emacs -Turn on emacs key bindings. +Turns on emacs key bindings. .It noemacs -Turn off emacs key bindings. +Turns off emacs key bindings. .El .Ss "Save Editor Configuration" When using this entry from the @@ -538,7 +545,10 @@ Always make a copy of files that cannot be easily reproduced before editing. Save files early, and save often. .Ss "International Code Set Support" .Nm Ee -supports single-byte character code sets (eight-bit clean). +supports single-byte character code sets (eight-bit clean), or the +Chinese Big-5 code set. (Other multi-byte code sets may function, but the +reason Big-5 works is that a two-byte character also takes up two columns on +the screen.) .Sh WARNINGS The automatic paragraph formatting operation may be too slow for slower systems. @@ -558,10 +568,10 @@ This software and documentation contains proprietary information which is protected by copyright. All rights are reserved. .Pp -Copyright (c) 1990, 1991, 1992, 1993, 1995 Hugh Mahon. +Copyright (c) 1990, 1991, 1992, 1993, 1995, 1996 Hugh Mahon. .Sh "SEE ALSO" .Xr ispell 1 , -.Xr lp 1 , +.Xr lpr 1 , .Xr spell 1 , .Xr termcap 5 , .Xr terminfo 5 , diff --git a/usr.bin/ee/ee.c b/usr.bin/ee/ee.c index 7284f07..7db133b 100644 --- a/usr.bin/ee/ee.c +++ b/usr.bin/ee/ee.c @@ -64,7 +64,7 @@ char *ee_long_notice[] = { "copyright. All rights are reserved." }; -char *version = "@(#) ee, version 1.3"; +char *version = "@(#) ee, version 1.4.1"; #ifdef NCURSE #include "new_curse.h" @@ -124,7 +124,7 @@ nl_catd catalog; #define COMMANDS 2 struct text { - char *line; /* line of characters */ + unsigned char *line; /* line of characters */ int line_number; /* line number */ int line_length; /* actual number of characters in the line */ int max_length; /* maximum number of characters the line handles */ @@ -139,7 +139,7 @@ struct text *tmp_line; /* temporary line pointer */ struct text *srch_line; /* temporary pointer for search routine */ struct files { /* structure to store names of files to be edited*/ - char *name; /* name of file */ + unsigned char *name; /* name of file */ struct files *next_name; }; @@ -185,21 +185,25 @@ int local_LINES = 0; /* copy of LINES, to detect when win resizes */ int local_COLS = 0; /* copy of COLS, to detect when win resizes */ int curses_initialized = FALSE; /* flag indicating if curses has been started*/ int emacs_keys_mode = FALSE; /* mode for if emacs key binings are used */ - -char *point; /* points to current position in line */ -char *srch_str; /* pointer for search string */ -char *u_srch_str; /* pointer to non-case sensitive search */ -char *srch_1; /* pointer to start of suspect string */ -char *srch_2; /* pointer to next character of string */ -char *srch_3; -char *in_file_name = NULL; /* name of input file */ -char *tmp_file; /* temporary file name */ -char d_char; /* deleted character */ -char *d_word; /* deleted word */ -char *d_line; /* deleted line */ -char in_string[513]; /* buffer for reading a file */ -char *print_command = "lpr"; /* string to use for the print command */ -char *start_at_line = NULL; /* move to this line at start of session*/ +int ee_chinese = FALSE; /* allows handling of multi-byte characters */ + /* by checking for high bit in a byte the */ + /* code recognizes a two-byte character */ + /* sequence */ + +unsigned char *point; /* points to current position in line */ +unsigned char *srch_str; /* pointer for search string */ +unsigned char *u_srch_str; /* pointer to non-case sensitive search */ +unsigned char *srch_1; /* pointer to start of suspect string */ +unsigned char *srch_2; /* pointer to next character of string */ +unsigned char *srch_3; +unsigned char *in_file_name = NULL; /* name of input file */ +char *tmp_file; /* temporary file name */ +unsigned char *d_char; /* deleted character */ +unsigned char *d_word; /* deleted word */ +unsigned char *d_line; /* deleted line */ +char in_string[513]; /* buffer for reading a file */ +unsigned char *print_command = "lpr"; /* string to use for the print command */ +unsigned char *start_at_line = NULL; /* move to this line at start of session*/ char *count_text; /* buffer for current position display */ const char *count_text_default = "==============================================================================="; int count_text_len; /* length of the line above */ @@ -252,22 +256,22 @@ struct menu_entries { struct menu_entries *ptr_argument; int (*iprocedure)P_((int)); void (*nprocedure)P_((void)); - unsigned int argument; + int argument; }; int main P_((int argc, char *argv[])); -char *resiz_line P_((int factor, struct text *rline, int rpos)); +unsigned char *resiz_line P_((int factor, struct text *rline, int rpos)); void insert P_((int character)); void delete P_((int disp)); -void scanline P_((char *pos)); +void scanline P_((unsigned char *pos)); int tabshift P_((int temp_int)); int out_char P_((WINDOW *window, int character, int column)); int len_char P_((int character, int column)); -void draw_line P_((int vertical, int horiz, char *ptr, int t_pos, int length)); +void draw_line P_((int vertical, int horiz, unsigned char *ptr, int t_pos, int length)); void insert_line P_((int disp)); struct text *txtalloc P_((void)); struct files *name_alloc P_((void)); -char *next_word P_((char *string)); +unsigned char *next_word P_((unsigned char *string)); void prev_word P_((void)); void control P_((void)); void emacs_control P_((void)); @@ -288,11 +292,11 @@ int scan P_((char *line, int offset, int column)); char *get_string P_((char *prompt, int advance)); int compare P_((char *string1, char *string2, int sensitive)); void goto_line P_((char *cmd_str)); -void midscreen P_((int line, char *pnt)); +void midscreen P_((int line, unsigned char *pnt)); void get_options P_((int numargs, char *arguments[])); void check_fp P_((void)); void get_file P_((char *file_name)); -void get_line P_((int length, char *in_string, int *append)); +void get_line P_((int length, unsigned char *in_string, int *append)); void draw_screen P_((void)); void finish P_((void)); int quit P_((int noverify)); @@ -348,22 +352,23 @@ void strings_init P_((void)); */ struct menu_entries modes_menu[] = { - {"", NULL, NULL, NULL, NULL, 0}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, NULL, -1}, - {"", NULL, NULL, NULL, dump_ee_conf, -1}, - {NULL, NULL, NULL, NULL, NULL, -1} + {"", NULL, NULL, NULL, NULL, 0}, /* title */ + {"", NULL, NULL, NULL, NULL, -1}, /* 1. tabs to spaces */ + {"", NULL, NULL, NULL, NULL, -1}, /* 2. case sensitive search*/ + {"", NULL, NULL, NULL, NULL, -1}, /* 3. margins observed */ + {"", NULL, NULL, NULL, NULL, -1}, /* 4. auto-paragraph */ + {"", NULL, NULL, NULL, NULL, -1}, /* 5. eightbit characters*/ + {"", NULL, NULL, NULL, NULL, -1}, /* 6. info window */ + {"", NULL, NULL, NULL, NULL, -1}, /* 7. emacs key bindings*/ + {"", NULL, NULL, NULL, NULL, -1}, /* 8. right margin */ + {"", NULL, NULL, NULL, NULL, -1}, /* 9. chinese text */ + {"", NULL, NULL, NULL, dump_ee_conf, -1}, /* 10. save editor config */ + {NULL, NULL, NULL, NULL, NULL, -1} /* terminator */ }; -char *mode_strings[10]; +char *mode_strings[11]; -#define NUM_MODES_ITEMS 9 +#define NUM_MODES_ITEMS 10 struct menu_entries config_dump_menu[] = { {"", NULL, NULL, NULL, NULL, 0}, @@ -426,15 +431,15 @@ struct menu_entries main_menu[] = { {NULL, NULL, NULL, NULL, NULL, -1} }; -char *help_text[22]; +char *help_text[23]; char *control_keys[5]; char *emacs_help_text[22]; char *emacs_control_keys[5]; char *command_strings[5]; -char *commands[30]; -char *init_strings[20]; +char *commands[32]; +char *init_strings[22]; #define MENU_WARN 1 @@ -533,6 +538,8 @@ char *cancel_string; char *menu_too_lrg_msg; char *more_above_str, *more_below_str; +char *chinese_cmd, *nochinese_cmd; + #ifndef __STDC__ #ifndef HAS_STDLIB extern char *malloc(); @@ -558,13 +565,13 @@ char *argv[]; count_text_len = strlen(count_text_default) + 1; count_text = malloc(count_text_len); - d_char = 0; + d_char = malloc(3); /* provide a buffer for multi-byte chars */ d_word = malloc(150); *d_word = (char) NULL; d_line = NULL; dlt_line = txtalloc(); dlt_line->line = d_line; - dlt_line->line_length = 1; + dlt_line->line_length = 0; curr_line = first_line = txtalloc(); curr_line->line = point = malloc(10); curr_line->line_length = 1; @@ -644,7 +651,10 @@ char *argv[]; if (in > 255) function_key(); else if ((in == '\10') || (in == 127)) + { + in = 8; /* make sure key is set to backspace */ delete(TRUE); + } else if ((in > 31) || (in == 9)) insert(in); else if ((in >= 0) && (in <= 31)) @@ -658,13 +668,13 @@ char *argv[]; return(0); } -char * +unsigned char * resiz_line(factor, rline, rpos) /* resize the line to length + factor*/ int factor; /* resize factor */ struct text *rline; /* position in line */ int rpos; { - char *rpoint; + unsigned char *rpoint; int resiz_var; rline->max_length += factor; @@ -680,8 +690,8 @@ int character; /* new character */ { int counter; int value; - char *temp; /* temporary pointer */ - char *temp2; /* temporary pointer */ + unsigned char *temp; /* temporary pointer */ + unsigned char *temp2; /* temporary pointer */ if ((character == '\011') && (expand_tabs)) { @@ -763,31 +773,46 @@ void delete(disp) /* delete character */ int disp; { - char *tp; - char *temp2; + unsigned char *tp; + unsigned char *temp2; struct text *temp_buff; int temp_vert; int temp_pos; + int del_width = 1; if (point != curr_line->line) /* if not at beginning of line */ { text_changes = TRUE; temp2 = tp = point; - tp--; - point--; - if ((*tp >= '\000') && (*tp < ' ')) /* check for TAB */ + if ((ee_chinese) && (position >= 2) && (*(point - 2) > 127)) + { + del_width = 2; + } + tp -= del_width; + point -= del_width; + position -= del_width; + temp_pos = position; + curr_line->line_length -= del_width; + if ((*tp < ' ') || (*tp >= 127)) /* check for TAB */ scanline(tp); else - --scr_horz; + scr_horz -= del_width; scr_pos = scr_horz; if (in == 8) - d_char = *point; /* save deleted character */ - temp_pos = --position; - curr_line->line_length--; + { + if (del_width == 1) + *d_char = *point; /* save deleted character */ + else + { + d_char[0] = *point; + d_char[1] = *(point + 1); + } + d_char[del_width] = (unsigned char) NULL; + } while (temp_pos <= curr_line->line_length) { temp_pos++; - *tp= *temp2; + *tp = *temp2; tp++; temp2++; } @@ -809,7 +834,10 @@ int disp; renumber_lines(curr_line->next_line, curr_line->line_number + 1); temp2 = temp_buff->line; if (in == 8) - d_char = '\n'; + { + d_char[0] = '\n'; + d_char[1] = (unsigned char) NULL; + } tp = point; temp_pos = 1; while (temp_pos < temp_buff->line_length) @@ -851,16 +879,16 @@ int disp; void scanline(pos) /* find the proper horizontal position for the pointer */ -char *pos; +unsigned char *pos; { int temp; - char *ptr; + unsigned char *ptr; ptr = curr_line->line; temp = 0; while (ptr < pos) { - if ((*ptr >= 0) && (*ptr <= 8)) + if (*ptr <= 8) temp += 2; else if (*ptr == 9) temp += tabshift(temp); @@ -909,7 +937,7 @@ char character; int column; { int i1, i2; - char *string; + unsigned char *string; char string2[8]; if (character == TAB) @@ -937,13 +965,13 @@ int column; } else { - waddch(window, (unsigned char)character ); + waddch(window, (char)character ); return(1); } } else { - waddch(window, (unsigned char)character); + waddch(window, (char)character); return(1); } for (i2 = 0; (string[i2] != (char) NULL) && (((column+i2+1)-horiz_offset) < last_col); i2++) @@ -978,12 +1006,12 @@ void draw_line(vertical, horiz, ptr, t_pos, length) /* redraw line from current position */ int vertical; /* current vertical position on screen */ int horiz; /* current horizontal position on screen */ -char *ptr; /* pointer to line */ +unsigned char *ptr; /* pointer to line */ int t_pos; /* current position (offset in bytes) from bol */ int length; /* length (in bytes) of line */ { int d; /* partial length of special or tab char to display */ - char *temp; /* temporary pointer to position in line */ + unsigned char *temp; /* temporary pointer to position in line */ int abs_column; /* offset in screen units from begin of line */ int column; /* horizontal position on screen */ int row; /* vertical position on screen */ @@ -1012,7 +1040,7 @@ int length; /* length (in bytes) of line */ wclrtoeol(text_win); while ((posit < length) && (column <= last_col)) { - if ((*temp < 32) || (*temp == 127)) + if ((*temp < 32) || (*temp >= 127)) { column += len_char(*temp, abs_column); abs_column += out_char(text_win, *temp, abs_column); @@ -1037,8 +1065,8 @@ int disp; { int temp_pos; int temp_pos2; - char *temp; - char *extra; + unsigned char *temp; + unsigned char *extra; struct text *temp_nod; text_changes = TRUE; @@ -1117,8 +1145,8 @@ struct files *name_alloc() /* allocate space for file name list node */ return((struct files *) malloc(sizeof( struct files))); } -char *next_word(string) /* move to next word in string */ -char *string; +unsigned char *next_word(string) /* move to next word in string */ +unsigned char *string; { while ((*string != (char) NULL) && ((*string != 32) && (*string != 9))) string++; @@ -1370,6 +1398,11 @@ int disp; { if (point != curr_line->line) /* if not at begin of line */ { + if ((ee_chinese) && (position >= 2) && (*(point - 2) > 127)) + { + point--; + position--; + } point--; position--; scanline(point); @@ -1399,6 +1432,12 @@ int disp; { if (position < curr_line->line_length) { + if ((ee_chinese) && (*point > 127) && + ((curr_line->line_length - position) >= 2)) + { + point++; + position++; + } point++; position++; scanline(point); @@ -1435,8 +1474,15 @@ find_pos() /* move to the same column as on other line */ { if (*point == 9) scr_horz += tabshift(scr_horz); - else if ((*point >= '\0') && (*point < ' ')) + else if (*point < ' ') + scr_horz += 2; + else if ((ee_chinese) && (*point > 127) && + ((curr_line->line_length - position) >= 2)) + { scr_horz += 2; + point++; + position++; + } else scr_horz++; position++; @@ -1696,10 +1742,7 @@ char *cmd_str1; { wmove(com_win, 0, 0); wclrtoeol(com_win); - if (*point >= '\0') - wprintw(com_win, char_str, *point); - else - wprintw(com_win, char_str, (*point + 256)); + wprintw(com_win, char_str, *point); } else if (compare(cmd_str, REDRAW, FALSE)) redraw(); @@ -1734,6 +1777,20 @@ char *cmd_str1; expand_tabs = FALSE; else if (compare(cmd_str, Exit_string, FALSE)) finish(); + else if (compare(cmd_str, chinese_cmd, FALSE)) + { + ee_chinese = TRUE; +#ifdef NCURSE + nc_setattrib(A_NC_BIG5); +#endif /* NCURSE */ + } + else if (compare(cmd_str, nochinese_cmd, FALSE)) + { + ee_chinese = FALSE; +#ifdef NCURSE + nc_clearattrib(A_NC_BIG5); +#endif /* NCURSE */ + } else if (compare(cmd_str, QUIT_string, FALSE)) quit(0); else if (*cmd_str == '!') @@ -1967,7 +2024,7 @@ char *cmd_str; void midscreen(line, pnt) /* put current line in middle of screen */ int line; -char *pnt; +unsigned char *pnt; { struct text *mid_line; int i; @@ -2221,11 +2278,11 @@ char *file_name; void get_line(length, in_string, append) /* read string and split into lines */ int length; /* length of string read by read */ -char *in_string; /* string read by read */ +unsigned char *in_string; /* string read by read */ int *append; /* TRUE if must append more text to end of current line */ { - char *str1; - char *str2; + unsigned char *str1; + unsigned char *str2; int num; /* offset from start of string */ int char_count; /* length of new line (or added portion */ int temp_counter; /* temporary counter value */ @@ -2266,7 +2323,7 @@ int *append; /* TRUE if must append more text to end of current line */ if (tline->next_line != NULL) tline->next_line->prev_line = tline; curr_line = tline; - curr_line->line = point = (char *) malloc(char_count); + curr_line->line = point = (unsigned char *) malloc(char_count); curr_line->line_length = char_count; curr_line->max_length = char_count; } @@ -2292,7 +2349,7 @@ void draw_screen() /* redraw the screen from current postion */ { struct text *temp_line; - char *line_out; + unsigned char *line_out; int temp_vert; temp_line = curr_line; @@ -2628,6 +2685,12 @@ del_char() /* delete current character */ in = 8; /* backspace */ if (position < curr_line->line_length) /* if not end of line */ { + if ((ee_chinese) && (*point > 127) && + ((curr_line->line_length - position) >= 2)) + { + point++; + position++; + } position++; point++; scanline(point); @@ -2643,12 +2706,17 @@ del_char() /* delete current character */ void undel_char() /* undelete last deleted character */ { - if (d_char == '\n') /* insert line if last del_char deleted eol */ + if (d_char[0] == '\n') /* insert line if last del_char deleted eol */ insert_line(TRUE); else { - in = d_char; + in = d_char[0]; insert(in); + if (d_char[1] != (unsigned char) NULL) + { + in = d_char[1]; + insert(in); + } } } @@ -2657,14 +2725,16 @@ del_word() /* delete word in front of cursor */ { int tposit; int difference; - char *d_word2; - char *d_word3; - char tmp_char; + unsigned char *d_word2; + unsigned char *d_word3; + unsigned char tmp_char[3]; if (d_word != NULL) free(d_word); d_word = malloc(curr_line->line_length); - tmp_char = d_char; + tmp_char[0] = d_char[0]; + tmp_char[1] = d_char[1]; + tmp_char[2] = d_char[2]; d_word3 = point; d_word2 = d_word; tposit = position; @@ -2697,7 +2767,9 @@ del_word() /* delete word in front of cursor */ curr_line->line_length -= difference; *d_word2 = (char) NULL; draw_line(scr_vert, scr_horz,point,position,curr_line->line_length); - d_char = tmp_char; + d_char[0] = tmp_char[0]; + d_char[1] = tmp_char[1]; + d_char[2] = tmp_char[2]; text_changes = TRUE; formatted = FALSE; } @@ -2707,10 +2779,10 @@ undel_word() /* undelete last deleted word */ { int temp; int tposit; - char *tmp_old_ptr; - char *tmp_space; - char *tmp_ptr; - char *d_word_ptr; + unsigned char *tmp_old_ptr; + unsigned char *tmp_space; + unsigned char *tmp_ptr; + unsigned char *d_word_ptr; /* | resize line to handle undeleted word @@ -2767,8 +2839,8 @@ undel_word() /* undelete last deleted word */ void del_line() /* delete from cursor to end of line */ { - char *dl1; - char *dl2; + unsigned char *dl1; + unsigned char *dl2; int tposit; if (d_line != NULL) @@ -2800,10 +2872,13 @@ del_line() /* delete from cursor to end of line */ void undel_line() /* undelete last deleted line */ { - char *ud1; - char *ud2; + unsigned char *ud1; + unsigned char *ud2; int tposit; + if (dlt_line->line_length == 0) + return; + insert_line(TRUE); left(TRUE); point = resiz_line(dlt_line->line_length, curr_line, position); @@ -3190,6 +3265,12 @@ set_up_term() /* set up the terminal for operating with ae */ last_col = COLS - 1; local_LINES = LINES; local_COLS = COLS; + +#ifdef NCURSE + if (ee_chinese) + nc_setattrib(A_NC_BIG5); +#endif /* NCURSE */ + } void @@ -3243,7 +3324,7 @@ struct menu_entries menu_list[]; max_width = length; } max_width += 3; - max_width = max(max_width, strlen(cancel_string)); + max_width = max(max_width, strlen(menu_cancel_msg)); max_width = max(max_width, max(strlen(more_above_str), strlen(more_below_str))); max_width += 6; @@ -3464,7 +3545,7 @@ int off_start, vert_size; waddstr(menu_win, menu_list[0].item_string); wmove(menu_win, (max_height - 3), 3); if (menu_list[0].argument != MENU_WARN) - waddstr(menu_win, cancel_string); + waddstr(menu_win, menu_cancel_msg); } if (!nohighlight) wstandout(menu_win); @@ -3741,7 +3822,7 @@ int Blank_Line(test_line) /* test if line has any non-space characters */ struct text *test_line; { - char *line; + unsigned char *line; int length; if (test_line == NULL) @@ -3779,11 +3860,15 @@ Format() /* format the paragraph according to set margins */ int status; int tmp_af; int counter; - char *line; - char *tmp_srchstr; - char *temp1, *temp2; - char *temp_dword; - char temp_d_char = d_char; + unsigned char *line; + unsigned char *tmp_srchstr; + unsigned char *temp1, *temp2; + unsigned char *temp_dword; + unsigned char temp_d_char[3]; + + temp_d_char[0] = d_char[0]; + temp_d_char[1] = d_char[1]; + temp_d_char[2] = d_char[2]; /* | if observ_margins is not set, or the current line is blank, @@ -3817,7 +3902,7 @@ Format() /* format the paragraph according to set margins */ temp_case = case_sen; case_sen = TRUE; tmp_srchstr = srch_str; - temp2 = srch_str = (char *) malloc(1 + curr_line->line_length - position); + temp2 = srch_str = (unsigned char *) malloc(1 + curr_line->line_length - position); if ((*point == ' ') || (*point == '\t')) adv_word(); offset -= position; @@ -3978,7 +4063,9 @@ Format() /* format the paragraph according to set margins */ case_sen = temp_case; free(srch_str); srch_str = tmp_srchstr; - d_char = temp_d_char; + d_char[0] = temp_d_char[0]; + d_char[1] = temp_d_char[1]; + d_char[2] = temp_d_char[2]; auto_format = tmp_af; midscreen(scr_vert, point); @@ -3986,7 +4073,7 @@ Format() /* format the paragraph according to set margins */ wrefresh(com_win); } -char *init_name[3] = { +unsigned char *init_name[3] = { "/usr/share/misc/init.ee", NULL, ".init.ee" @@ -3996,9 +4083,9 @@ void ee_init() /* check for init file and read it if it exists */ { FILE *init_file; - char *string; - char *str1; - char *str2; + unsigned char *string; + unsigned char *str1; + unsigned char *str2; char *home; int counter; int temp_int; @@ -4079,17 +4166,37 @@ ee_init() /* check for init file and read it if it exists */ else if (compare(str1, EIGHTBIT, FALSE)) eightbit = TRUE; else if (compare(str1, NOEIGHTBIT, FALSE)) + { eightbit = FALSE; + ee_chinese = FALSE; + } else if (compare(str1, EMACS_string, FALSE)) emacs_keys_mode = TRUE; else if (compare(str1, NOEMACS_string, FALSE)) emacs_keys_mode = FALSE; + else if (compare(str1, chinese_cmd, FALSE)) + { + ee_chinese = TRUE; + eightbit = TRUE; + } + else if (compare(str1, nochinese_cmd, FALSE)) + ee_chinese = FALSE; } fclose(init_file); } } free(string); free(home); + + string = getenv("LANG"); + if (string != NULL) + { + if (strcmp(string, "zh_TW.big5") == 0) + { + ee_chinese = TRUE; + eightbit = TRUE; + } + } } /* @@ -4183,6 +4290,7 @@ dump_ee_conf() fprintf(init_file, "%s\n", nohighlight ? NOHIGHLIGHT : HIGHLIGHT ); fprintf(init_file, "%s\n", eightbit ? EIGHTBIT : NOEIGHTBIT ); fprintf(init_file, "%s\n", emacs_keys_mode ? EMACS_string : NOEMACS_string ); + fprintf(init_file, "%s\n", ee_chinese ? chinese_cmd : nochinese_cmd ); fclose(init_file); @@ -4297,7 +4405,7 @@ first_word_len(test_line) struct text *test_line; { int counter; - char *pnt; + unsigned char *pnt; if (test_line == NULL) return(0); @@ -4342,12 +4450,17 @@ Auto_Format() /* format the paragraph according to set margins */ int status; int counter; char not_blank; - char *line; - char *tmp_srchstr; - char *temp1, *temp2; - char *temp_dword; - char temp_d_char = d_char; - char *tmp_d_line; + unsigned char *line; + unsigned char *tmp_srchstr; + unsigned char *temp1, *temp2; + unsigned char *temp_dword; + unsigned char temp_d_char[3]; + unsigned char *tmp_d_line; + + + temp_d_char[0] = d_char[0]; + temp_d_char[1] = d_char[1]; + temp_d_char[2] = d_char[2]; /* | if observ_margins is not set, or the current line is blank, @@ -4376,7 +4489,7 @@ Auto_Format() /* format the paragraph according to set margins */ temp_case = case_sen; case_sen = TRUE; tmp_srchstr = srch_str; - temp2 = srch_str = (char *) malloc(1 + curr_line->line_length - position); + temp2 = srch_str = (unsigned char *) malloc(1 + curr_line->line_length - position); if ((*point == ' ') || (*point == '\t')) adv_word(); offset -= position; @@ -4573,7 +4686,9 @@ Auto_Format() /* format the paragraph according to set margins */ case_sen = temp_case; free(srch_str); srch_str = tmp_srchstr; - d_char = temp_d_char; + d_char[0] = temp_d_char[0]; + d_char[1] = temp_d_char[1]; + d_char[2] = temp_d_char[2]; auto_format = TRUE; dlt_line->line_length = tmp_d_line_length; d_line = tmp_d_line; @@ -4607,6 +4722,8 @@ modes_op() (emacs_keys_mode ? ON : OFF)); sprintf(modes_menu[8].item_string, "%s %d", mode_strings[8], right_margin); + sprintf(modes_menu[9].item_string, "%s %s", mode_strings[9], + (ee_chinese ? ON : OFF)); ret_value = menu_op(modes_menu); @@ -4628,6 +4745,15 @@ modes_op() break; case 5: eightbit = !eightbit; + if (!eightbit) + ee_chinese = FALSE; +#ifdef NCURSE + if (ee_chinese) + nc_setattrib(A_NC_BIG5); + else + nc_clearattrib(A_NC_BIG5); +#endif /* NCURSE */ + redraw(); wnoutrefresh(text_win); break; @@ -4652,6 +4778,18 @@ modes_op() free(string); } break; + case 9: + ee_chinese = !ee_chinese; + if (ee_chinese != FALSE) + eightbit = TRUE; +#ifdef NCURSE + if (ee_chinese) + nc_setattrib(A_NC_BIG5); + else + nc_clearattrib(A_NC_BIG5); +#endif /* NCURSE */ + redraw(); + break; default: break; } @@ -4958,8 +5096,8 @@ strings_init() help_text[17] = catgetlocal( 52, "line : display line # 0-9 : go to line \"#\" "); help_text[18] = catgetlocal( 53, "expand : expand tabs noexpand: do not expand tabs "); help_text[19] = catgetlocal( 54, " "); - help_text[20] = catgetlocal( 55, " ee [-i] [-e] [-h] [file(s)] "); - help_text[21] = catgetlocal( 56, " -i : no information window -e : do not expand tabs -h : no highlight "); + help_text[20] = catgetlocal( 55, " ee [+#] [-i] [-e] [-h] [file(s)] "); + help_text[21] = catgetlocal( 56, "+# :go to line # -i :no info window -e : don't expand tabs -h :no highlight"); control_keys[0] = catgetlocal( 57, "^[ (escape) menu ^e search prompt ^y delete line ^u up ^p prev page "); control_keys[1] = catgetlocal( 58, "^a ascii code ^x search ^z undelete line ^d down ^n next page "); control_keys[2] = catgetlocal( 59, "^b bottom of text ^g begin of line ^w delete word ^l left "); @@ -5084,16 +5222,18 @@ strings_init() usage4 = catgetlocal( 161, " +# put cursor at line #\n"); conf_dump_err_msg = catgetlocal( 162, "unable to open .init.ee for writing, no configuration saved!"); conf_dump_success_msg = catgetlocal( 163, "ee configuration saved in file %s"); - modes_menu[9].item_string = catgetlocal( 164, "save editor configuration"); + modes_menu[10].item_string = catgetlocal( 164, "save editor configuration"); config_dump_menu[0].item_string = catgetlocal( 165, "save ee configuration"); config_dump_menu[1].item_string = catgetlocal( 166, "save in current directory"); config_dump_menu[2].item_string = catgetlocal( 167, "save in home directory"); conf_not_saved_msg = catgetlocal( 168, "ee configuration not saved"); ree_no_file_msg = catgetlocal( 169, "must specify a file when invoking ree"); - cancel_string = catgetlocal( 170, "press Esc to cancel"); menu_too_lrg_msg = catgetlocal( 180, "menu too large for window"); more_above_str = catgetlocal( 181, "^^more^^"); more_below_str = catgetlocal( 182, "VVmoreVV"); + mode_strings[9] = catgetlocal( 183, "16 bit characters "); + chinese_cmd = catgetlocal( 184, "16BIT"); + nochinese_cmd = catgetlocal( 185, "NO16BIT"); commands[0] = HELP; commands[1] = WRITE; @@ -5124,7 +5264,9 @@ strings_init() commands[26] = "8"; commands[27] = "9"; commands[28] = CHARACTER; - commands[29] = NULL; + commands[29] = chinese_cmd; + commands[30] = nochinese_cmd; + commands[31] = NULL; init_strings[0] = CASE; init_strings[1] = NOCASE; init_strings[2] = EXPAND; @@ -5144,7 +5286,9 @@ strings_init() init_strings[16] = NOEIGHTBIT; init_strings[17] = EMACS_string; init_strings[18] = NOEMACS_string; - init_strings[19] = NULL; + init_strings[19] = chinese_cmd; + init_strings[20] = nochinese_cmd; + init_strings[21] = NULL; /* | allocate space for strings here for settings menu diff --git a/usr.bin/ee/new_curse.c b/usr.bin/ee/new_curse.c index 0131e5e..dd033be 100644 --- a/usr.bin/ee/new_curse.c +++ b/usr.bin/ee/new_curse.c @@ -95,6 +95,7 @@ WINDOW *last_window_refreshed; #endif #define min(a, b) (a < b ? a : b) +#define highbitset(a) ((a) & 0x80) #ifndef CAP #define String_Out(table, stack, place) Info_Out(table, stack, place) @@ -514,6 +515,106 @@ struct KEY_STACK { struct KEY_STACK *KEY_TOS = NULL; struct KEY_STACK *KEY_POINT; +/* + | + | Not all systems have good terminal information, so we will define + | keyboard information here for the most widely used terminal type, + | the VT100. + | + */ + +struct KEYS vt100[] = + { + { 3, "\033[A", 0403 }, /* key up */ + { 3, "\033[C", 0405 }, /* key right */ + { 3, "\033[D", 0404 }, /* key left */ + + { 4, "\033[6~", 0522 }, /* key next page */ + { 4, "\033[5~", 0523 }, /* key prev page */ + { 3, "\033[[", 0550 }, /* key end */ + { 3, "\033[@", 0406 }, /* key home */ + { 4, "\033[2~", 0513 }, /* key insert char */ + + { 3, "\033[y", 0410 }, /* key F0 */ + { 3, "\033[P", 0411 }, /* key F1 */ + { 3, "\033[Q", 0412 }, /* key F2 */ + { 3, "\033[R", 0413 }, /* key F3 */ + { 3, "\033[S", 0414 }, /* key F4 */ + { 3, "\033[t", 0415 }, /* key F5 */ + { 3, "\033[u", 0416 }, /* key F6 */ + { 3, "\033[v", 0417 }, /* key F7 */ + { 3, "\033[l", 0420 }, /* key F8 */ + { 3, "\033[w", 0421 }, /* key F9 */ + { 3, "\033[x", 0422 }, /* key F10 */ + + { 5, "\033[10~", 0410 }, /* key F0 */ + { 5, "\033[11~", 0411 }, /* key F1 */ + { 5, "\033[12~", 0412 }, /* key F2 */ + { 5, "\033[13~", 0413 }, /* key F3 */ + { 5, "\033[14~", 0414 }, /* key F4 */ + { 5, "\033[15~", 0415 }, /* key F5 */ + { 5, "\033[17~", 0416 }, /* key F6 */ + { 5, "\033[18~", 0417 }, /* key F7 */ + { 5, "\033[19~", 0420 }, /* key F8 */ + { 5, "\033[20~", 0421 }, /* key F9 */ + { 5, "\033[21~", 0422 }, /* key F10 */ + { 5, "\033[23~", 0423 }, /* key F11 */ + { 5, "\033[24~", 0424 }, /* key F12 */ + { 3, "\033[q", 0534 }, /* ka1 upper-left of keypad */ + { 3, "\033[s", 0535 }, /* ka3 upper-right of keypad */ + { 3, "\033[r", 0536 }, /* kb2 center of keypad */ + { 3, "\033[p", 0537 }, /* kc1 lower-left of keypad */ + { 3, "\033[n", 0540 }, /* kc3 lower-right of keypad */ + + /* + | The following are the same keys as above, but with + | a different character following the escape char. + */ + + { 3, "\033OA", 0403 }, /* key up */ + { 3, "\033OC", 0405 }, /* key right */ + { 3, "\033OD", 0404 }, /* key left */ + { 3, "\033OB", 0402 }, /* key down */ + { 4, "\033O6~", 0522 }, /* key next page */ + { 4, "\033O5~", 0523 }, /* key prev page */ + { 3, "\033O[", 0550 }, /* key end */ + { 3, "\033O@", 0406 }, /* key home */ + { 4, "\033O2~", 0513 }, /* key insert char */ + + { 3, "\033Oy", 0410 }, /* key F0 */ + { 3, "\033OP", 0411 }, /* key F1 */ + { 3, "\033OQ", 0412 }, /* key F2 */ + { 3, "\033OR", 0413 }, /* key F3 */ + { 3, "\033OS", 0414 }, /* key F4 */ + { 3, "\033Ot", 0415 }, /* key F5 */ + { 3, "\033Ou", 0416 }, /* key F6 */ + { 3, "\033Ov", 0417 }, /* key F7 */ + { 3, "\033Ol", 0420 }, /* key F8 */ + { 3, "\033Ow", 0421 }, /* key F9 */ + { 3, "\033Ox", 0422 }, /* key F10 */ + + { 5, "\033O10~", 0410 }, /* key F0 */ + { 5, "\033O11~", 0411 }, /* key F1 */ + { 5, "\033O12~", 0412 }, /* key F2 */ + { 5, "\033O13~", 0413 }, /* key F3 */ + { 5, "\033O14~", 0414 }, /* key F4 */ + { 5, "\033O15~", 0415 }, /* key F5 */ + { 5, "\033O17~", 0416 }, /* key F6 */ + { 5, "\033O18~", 0417 }, /* key F7 */ + { 5, "\033O19~", 0420 }, /* key F8 */ + { 5, "\033O20~", 0421 }, /* key F9 */ + { 5, "\033O21~", 0422 }, /* key F10 */ + { 5, "\033O23~", 0423 }, /* key F11 */ + { 5, "\033O24~", 0424 }, /* key F12 */ + { 3, "\033Oq", 0534 }, /* ka1 upper-left of keypad */ + { 3, "\033Os", 0535 }, /* ka3 upper-right of keypad */ + { 3, "\033Or", 0536 }, /* kb2 center of keypad */ + { 3, "\033Op", 0537 }, /* kc1 lower-left of keypad */ + { 3, "\033On", 0540 }, /* kc3 lower-right of keypad */ + + { 0, "", 0 } /* end */ + }; + struct Parameters { int value; struct Parameters *next; @@ -537,6 +638,8 @@ int Key_vals[] = { int attributes_set[9]; +static int nc_attributes = 0; /* global attributes for new_curse to observe */ + #ifdef SYS5 struct termio Terminal; struct termio Saved_tty; @@ -815,6 +918,14 @@ printf("starting initscr \n");fflush(stdout); } if (Fildes == -1) { + TERM_PATH = "/usr/share/terminfo"; + Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE); + Term_File_name = malloc(Data_Line_len); + sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE); + Fildes = open(Term_File_name, O_RDONLY); + } + if (Fildes == -1) + { free(Term_File_name); Term_File_name = NULL; } @@ -865,6 +976,7 @@ printf("starting initscr \n");fflush(stdout); exit(0); } Key_Get(); + keys_vt100(); LINES = Numbers[li__]; COLS = Numbers[co__]; if ((lines_string = getenv("LINES")) != NULL) @@ -1112,6 +1224,32 @@ Key_Get() /* create linked list with all key sequences obtained from terminal d } } +/* + | insert information about keys for a vt100 terminal + */ + +void +keys_vt100() +{ + int counter; + int Klen; + struct KEY_STACK *Spoint; + + Spoint = KEY_TOS; + while (Spoint->next != NULL) + Spoint = Spoint->next; + for (counter = 0; vt100[counter].length != 0; counter++) + { + Spoint->next = (struct KEY_STACK *) malloc(sizeof(struct KEY_STACK)); + Spoint = Spoint->next; + Spoint->next = NULL; + Spoint->element = &vt100[counter]; + Klen = strlen(Spoint->element->string); + if (Klen > Max_Key_len) + Max_Key_len = Klen; + } +} + #ifdef CAP char * String_Get(param) /* read the string */ @@ -2482,6 +2620,7 @@ int flag; Repaint_screen = TRUE; } + void echo() /* turn on echoing */ { @@ -2649,7 +2788,6 @@ void endwin() /* end windows */ { keypad(stdscr, FALSE); - free(stdscr); initialized = FALSE; delwin(curscr); delwin(virtual_scr); @@ -3028,6 +3166,11 @@ struct _line *pointer_new, *pointer_old; return(changed); } +/* + | Check if characters were inserted in the middle of a line, and if + | so, insert them. + */ + int check_insert(window, line, offset, pointer_new, pointer_old) WINDOW *window; @@ -3123,8 +3266,13 @@ doupdate() char *att1, *att2; char *c1, *c2; + char NC_chinese = FALSE; /* flag to indicate handling Chinese */ + window = virtual_scr; + if ((nc_attributes & A_NC_BIG5) != 0) + NC_chinese = TRUE; + if (Repaint_screen) { if (String_table[cl__]) @@ -3184,7 +3332,7 @@ doupdate() curr = top_of_win; similar = 0; /* - | if the window has lines that are different + | if the window has lines that are different, check for scrolling */ if (diff) { @@ -3243,10 +3391,10 @@ doupdate() if (String_table[cs__]) /* scrolling region */ { list[1] = 0; - list[0] = LINES; + list[0] = LINES - 1; String_Out(String_table[cs__], list, 2); Curr_y = Curr_x = -1; - } + } top_of_win = curscr->first_line; curr = top_of_win; @@ -3292,7 +3440,7 @@ doupdate() if (String_table[cs__]) /* scrolling region */ { list[1] = 0; - list[0] = LINES; + list[0] = LINES - 1; String_Out(String_table[cs__], list, 2); Curr_y = Curr_x = -1; } @@ -3320,12 +3468,28 @@ doupdate() } } + + /* + | Scrolling done, now need to insert, delete, or modify text + | within lines. + */ + for (from_top = 0, curr = curscr->first_line; from_top < window->SR; from_top++) curr = curr->next_screen; top_of_win = curr; for (from_top = 0, curr = top_of_win, virt = window->first_line; from_top < window->Num_lines; from_top++, curr = curr->next_screen, virt = virt->next_screen) { - if (((String_table[ic__]) || (String_table[im__])) && (String_table[dc__]) && (curr->row[0] != (char) NULL)) + + /* + | If either 'insert mode' or 'insert char' are + | available, enter the following 'if' statement, + | else, need to simply rewrite the contents of the line + | at the point where the contents of the line change. + */ + + if (((String_table[ic__]) || (String_table[im__])) && + (String_table[dc__]) && (curr->row[0] != (char) NULL) && + (!NC_chinese)) { j = 0; first_time = TRUE; @@ -3412,6 +3576,14 @@ doupdate() { while ((c1[j] == c2[j]) && (att1[j] == att2[j]) && (j < window->Num_cols) && (c2[j] != (char) NULL)) j++; + + /* + | if previous character is an eight bit + | char, start redraw from that character + */ + + if ((NC_chinese) && (highbitset(c1[j - 1]))) + j--; begin_old = j; begin_new = j; if ((j < window->Num_cols) && (c2[j] != (char) NULL)) @@ -3572,3 +3744,25 @@ int offset; Curr_x++; } +/* + | + | The two routines that follow, nc_setattrib(), nc_clearattrib(), are + | hacks that notify new_curse to handle characters that have the high + | bit set as the first of two bytes of a multi-byte string. + | + */ + +void +nc_setattrib(flag) +int flag; +{ + nc_attributes |= flag; +} + +void +nc_clearattrib(flag) +int flag; +{ + nc_attributes &= ~flag; +} + diff --git a/usr.bin/ee/new_curse.h b/usr.bin/ee/new_curse.h index 86a8574..bbef585 100644 --- a/usr.bin/ee/new_curse.h +++ b/usr.bin/ee/new_curse.h @@ -37,6 +37,8 @@ | Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon | All are rights reserved. | + | $FreeBSD$ + | */ #include <stdio.h> @@ -142,7 +144,8 @@ #define TRUE 1 #define FALSE 0 -#define A_STANDOUT 0001 /* standout mode */ +#define A_STANDOUT 0001 /* standout mode */ +#define A_NC_BIG5 0x0100 /* Handle Chinese Big5 characters */ #define SCROLL 1 /* text has been scrolled */ #define CLEAR 2 /* window has been cleared */ #define CHANGE 3 /* window has been changed */ @@ -195,6 +198,7 @@ extern int Get_int P_((void)); extern int INFO_PARSE P_((void)); extern int AtoI P_((void)); extern void Key_Get P_((void)); +extern void keys_vt100 P_((void)); extern struct _line *Screenalloc P_((int columns)); extern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c)); extern int Operation P_((int Temp_Stack[], int place)); @@ -251,5 +255,7 @@ extern void attribute_on P_((void)); extern void attribute_off P_((void)); extern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset)); +extern void nc_setattrib P_((int)); +extern void nc_clearattrib P_((int)); #undef P_ diff --git a/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg b/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg index 1e71ddd..ccefcc4 100644 --- a/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg +++ b/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg @@ -5,15 +5,16 @@ $ For ee patchlevel 3 $ $ $FreeBSD$ $ +$ $set 1 $quote " 1 "modes menu" -2 "tabs to spaces " -3 "case sensitive search" -4 "margins observed " -5 "auto-paragraph format" -6 "eightbit characters " -7 "info window " +2 "tabs to spaces " +3 "case sensitive search" +4 "margins observed " +5 "auto-paragraph format" +6 "eightbit characters " +7 "info window " 8 "right margin " 9 "leave menu" 10 "save changes" @@ -41,7 +42,7 @@ $quote " 32 "settings" 33 "search" 34 "miscellaneous" -35 "Control keys: " +35 "Control keys: " 36 "^a ascii code ^i tab ^r right " 37 "^b bottom of text ^j newline ^t top of text " 38 "^c command ^k delete char ^u up " @@ -61,8 +62,8 @@ $quote " 52 "line : display line # 0-9 : go to line \"#\" " 53 "expand : expand tabs noexpand: do not expand tabs " 54 " " -55 " ee [-i] [-e] [-h] [file(s)] " -56 " -i : no information window -e : do not expand tabs -h : no highlight " +55 " ee [+#] [-i] [-e] [-h] [file(s)] " +56 "+# :go to line # -i :no info window -e : don't expand tabs -h :no highlight" 57 "^[ (escape) menu ^e search prompt ^y delete line ^u up ^p prev page " 58 "^a ascii code ^x search ^z undelete line ^d down ^n next page " 59 "^b bottom of text ^g begin of line ^w delete word ^l left " @@ -176,7 +177,9 @@ $quote " 167 "save in home directory" 168 "ee configuration not saved" 169 "must specify a file when invoking ree" -170 "press Esc to cancel" 180 "menu too large for window" 181 "^^more^^" 182 "VVmoreVV" +183 "16 bit characters " +184 "16BIT" +185 "NO16BIT" diff --git a/usr.bin/ee/nls/en_US.US-ASCII/ee.msg b/usr.bin/ee/nls/en_US.US-ASCII/ee.msg index 1e71ddd..ccefcc4 100644 --- a/usr.bin/ee/nls/en_US.US-ASCII/ee.msg +++ b/usr.bin/ee/nls/en_US.US-ASCII/ee.msg @@ -5,15 +5,16 @@ $ For ee patchlevel 3 $ $ $FreeBSD$ $ +$ $set 1 $quote " 1 "modes menu" -2 "tabs to spaces " -3 "case sensitive search" -4 "margins observed " -5 "auto-paragraph format" -6 "eightbit characters " -7 "info window " +2 "tabs to spaces " +3 "case sensitive search" +4 "margins observed " +5 "auto-paragraph format" +6 "eightbit characters " +7 "info window " 8 "right margin " 9 "leave menu" 10 "save changes" @@ -41,7 +42,7 @@ $quote " 32 "settings" 33 "search" 34 "miscellaneous" -35 "Control keys: " +35 "Control keys: " 36 "^a ascii code ^i tab ^r right " 37 "^b bottom of text ^j newline ^t top of text " 38 "^c command ^k delete char ^u up " @@ -61,8 +62,8 @@ $quote " 52 "line : display line # 0-9 : go to line \"#\" " 53 "expand : expand tabs noexpand: do not expand tabs " 54 " " -55 " ee [-i] [-e] [-h] [file(s)] " -56 " -i : no information window -e : do not expand tabs -h : no highlight " +55 " ee [+#] [-i] [-e] [-h] [file(s)] " +56 "+# :go to line # -i :no info window -e : don't expand tabs -h :no highlight" 57 "^[ (escape) menu ^e search prompt ^y delete line ^u up ^p prev page " 58 "^a ascii code ^x search ^z undelete line ^d down ^n next page " 59 "^b bottom of text ^g begin of line ^w delete word ^l left " @@ -176,7 +177,9 @@ $quote " 167 "save in home directory" 168 "ee configuration not saved" 169 "must specify a file when invoking ree" -170 "press Esc to cancel" 180 "menu too large for window" 181 "^^more^^" 182 "VVmoreVV" +183 "16 bit characters " +184 "16BIT" +185 "NO16BIT" |