📄 config.c
字号:
} found = FALSE; /* * try to find a valid key. */ key_no = parse_key( key ); if (key_no != ERROR) { /* * find the function assignment */ found = TRUE; residue = parse_token( residue, key ); /* * clear any previous macro or key assignment. */ func_no = search( key, valid_func, CFG_FUNCS ); if (func_no != ERROR) { clear_previous_macro( key_no ); key_func[KEY_IDX( key_no )] = func_no; if (func_no == PlayBack) { macro_key = key_no; if (parse_macro( residue, prompt_line ) == ERROR) errmsg = main4; /* out of memory */ } } else if (key_func[KEY_IDX( key_no )] == TwoCharKey && residue != NULL) { two_key = key_no; if (*key == '^' && key[1] != '\0') { key_no = parse_key( key+1 ); i = TRUE; } else { key_no = parse_key( key ); i = FALSE; } if (key_no == ERROR) { errmsg = config22; /* unrecognized key */ goto bad_config; } two_key = CREATE_TWOKEY( two_key, key_no ); residue = parse_token( residue, key ); func_no = search( key, valid_func, CFG_FUNCS ); if (func_no == PlayBack) { macro_key = two_key; if (parse_macro( residue, prompt_line ) == ERROR) errmsg = main4; } else errmsg = (func_no == ERROR) ? config3 : /* unrecognized function */ (func_no == TwoCharKey) ? config2 : /*two-key not allowed*/ (add_twokey( two_key, func_no ) == ERROR) ? main4 : NULL; if (i && errmsg == NULL) { if (!initialize_macro( two_key ^ _CTRL )) errmsg = main4; else { cfg_record_keys( mac, two_key, 0, prompt_line ); check_macro( mac ); } } } else errmsg = config3; } /* * valid key not found, now try a pseudo-macro */ if (!found) { if (stricmp( key, func_str[PseudoMacro] ) == 0) { found = TRUE; residue = parse_token( residue, key ); if (strlen( key ) != 2 || (text_t)key[0] <= ' ' || (text_t)key[1] <= ' ') { errmsg = config25; /* invalid combination */ goto bad_config; } macro_key = (unsigned)(((text_t)key[0] << 8) | (text_t)key[1]); if (parse_macro( residue, prompt_line ) == ERROR) errmsg = main4; } } /* * pseudo-macro not found, now try a valid color */ if (!found) { color = search( key, valid_colors, (NUM_COLORS * 2) ); if (color != ERROR) { found = TRUE; i = (*key == 'c' || *key == 'C'); color_no = parse_color( &residue, key, prompt_line, config6a ); if (color_no != ERROR) { if (color == 255) background = color_no & 15; else { if (color == Overscan_color) color_no &= 15; colour[i][color] = color_no; need_a_redraw = TRUE; } } } else { /* * see if this is a color pair for Linux curses. */ mode_no = search( key, valid_pairs, 7 ); if (mode_no != ERROR) {#if 0 //defined( __UNIX__ ) residue = parse_token( residue, key ); color = search( key, valid_curse, 7 ); if (color != ERROR && residue != NULL) { /* * so far, we got pairx COLOR_y. * now get the "on". */ residue = parse_token( residue, key ); if (residue != NULL) { /* * now, get the background color. */ parse_token( residue, key ); color_no = search( key, valid_curse, 7 ); /* * we just parsed a color pair line: * pairx COLOR_y on COLOR_z. */ if (color_no != ERROR) { found = TRUE; need_a_redraw = TRUE; init_pair( mode_no, color, color_no ); mode_no *= 16; for (i=0; i<8; i++) tde_color_table[mode_no + i] = COLOR_PAIR( mode_no ); for (i=8; i<16; i++) tde_color_table[mode_no + i] = COLOR_PAIR( mode_no ) | A_BOLD; } } } if (found == FALSE) errmsg = config24; /* error parsing color pair */#else /* * if we are in MSDOS, don't even bother with parsing * curses junk. */ found = TRUE;#endif } } } /* * valid color not found, now try a valid mode */ if (!found) { mode_index = search( key, valid_modes, NUM_MODES-1 ); if (mode_index != ERROR) { found = TRUE; /* * if we find a valid mode, we need to search different * option arrays before we find a valid assignment. */ if (mode_index != KeyName && mode_index != Scancode) residue = parse_token( residue, key ); mode_no = ERROR; switch ( mode_index ) { case InsertMode : case IndentMode : case SmartTabMode : case TrimTrailingBlanks : case Backups : case Ruler : case JustifyRightMargin : case CursorCross : case FrameSpace : case Shadow : case LineNumbers : case UndoGroup : case UndoMove : case AutoSaveWorkspace : case TrackPath : case DisplayCWD : case QuickEdit : mode_no = search( key, off_on, 1 ); if (mode_no == ERROR) { errmsg = config7; /* off/on error */ goto bad_config; } switch ( mode_index ) { case InsertMode : mode.insert = mode_no; need_mode_line = TRUE; break; case IndentMode : mode.indent = mode_no; need_mode_line = TRUE; break; case SmartTabMode: mode.smart_tab = mode_no; need_mode_line = TRUE; break; case TrimTrailingBlanks : mode.trailing = mode_no; need_mode_line = TRUE; break; case Backups : mode.do_backups = mode_no; break; case Ruler : mode.ruler = mode_no; need_rulers = TRUE; break; case JustifyRightMargin : mode.right_justify = mode_no; break; case CursorCross : if (mode.cursor_cross != mode_no) { mode.cursor_cross = mode_no; need_a_redraw = TRUE; } break; case FrameSpace : g_display.frame_space = mode_no; break; case Shadow : g_display.shadow = mode_no; break; case LineNumbers : need_line_numbers = mode_no; break; case UndoGroup : mode.undo_group = mode_no; break; case UndoMove : mode.undo_move = mode_no; break; case AutoSaveWorkspace : mode.auto_save_wksp = mode_no; break; case TrackPath : mode.track_path = mode_no; break; case DisplayCWD : need_cwd = mode_no; break; case QuickEdit :#if defined( __WIN32__ ) { DWORD mode; GetConsoleMode( conin, &mode ); mode |= ENABLE_EXTENDED_FLAGS; if (mode_no) mode |= ENABLE_QUICK_EDIT; else mode &= ~ENABLE_QUICK_EDIT; SetConsoleMode( conin, mode ); }#endif break; } break; case DisplayEndOfLine : mode_no = search( key, valid_eol, 2 ); if (mode_no == ERROR) { errmsg = config17; /* eol display error */ goto bad_config; } mode.show_eol = mode_no; need_a_redraw = TRUE; break; case LTabSize : case PTabSize : mode_no = atoi( key ); if (mode_no > MAX_TAB_SIZE || mode_no < 1) { errmsg = config8; /* tab error */ goto bad_config; } if (mode_index == LTabSize) mode.ltab_size = mode_no; else mode.ptab_size = mode_no; need_mode_line = TRUE; break; case LeftMargin : mode_no = atoi( key ); if (mode_no < 1 || mode_no > mode.right_margin) { errmsg = config9; /* left margin error */ goto bad_config; } mode.left_margin = --mode_no; need_rulers = TRUE; break; case ParagraphMargin : mode_no = atoi( key ); if (mode_no < 1 || mode_no > mode.right_margin) { errmsg = config10; /* paragraph margin error */ goto bad_config; } mode.parg_margin = --mode_no; need_rulers = TRUE; break; case RightMargin : mode_no = atoi( key ); if (mode_no < mode.left_margin || mode_no > 1040) { errmsg = config11; /* right margin error */ goto bad_config; } mode.right_margin = --mode_no; need_rulers = TRUE; break; case InflateTabs : mode_no = search( key, valid_tabs, 2 ); if (mode_no == ERROR) { errmsg = config16; /* inflate tabs error */ goto bad_config; } mode.inflate_tabs = mode_no; need_mode_line = TRUE; need_a_redraw = TRUE; break; case EndOfLineStyle : mode_no = search( key, valid_crlf, 3 ); if (mode_no == ERROR) { errmsg = config12; /* crlf or lf error */ goto bad_config; } mode.crlf = mode_no; break; case WordWrapMode : mode_no = search( key, valid_wraps, 2 ); if (mode_no == ERROR) { errmsg = config13; /* word wrap error */ goto bad_config; } mode.word_wrap = mode_no; need_mode_line = TRUE; break; case CursorStyle : mode_no = search( key, valid_cursor, 2 ); if (mode_no == ERROR) { errmsg = config14; /* cursor size error */ goto bad_config; } i = mode_no; if (residue != NULL) { residue = parse_token( residue, key ); mode_no = search( key, valid_cursor, 2 ); if (mode_no == ERROR) { errmsg = config14; /* cursor size error */ goto bad_config; } i |= mode_no << 2; } else { if (i == SMALL_CURSOR) i |= MEDIUM_CURSOR << 2; else /* * Use the medium cursor to provide compatibility * with previous versions that have set Large cursor. */ i = MEDIUM_CURSOR | (SMALL_CURSOR << 2); } mode.cursor_size = i; g_display.insert_cursor = g_display.cursor[i & 3]; g_display.overw_cursor = g_display.cursor[i >> 2]; need_mode_line = TRUE; break; case ControlZ: mode_no = search( key, valid_z, 1 ); if (mode_no == ERROR) { errmsg = config15; /* control z error */ goto bad_config; } mode.control_z = mode_no; need_mode_line = TRUE; break; case TimeStamp : mode_no = OK; strcpy( mode.stamp, key ); add_to_history( key, &h_stamp ); /* jmh 991020 */ break; case InitialCaseMode : mode_no = search( key, case_modes, 1 ); if (mode_no == ERROR) { errmsg = config18; /* initial case mode error */ goto bad_config; } mode.search_case = mode_no; need_mode_line = TRUE; break; case CaseMatch : mode_no = OK; for (i=0; i<256; i++) sort_order.match[i] = (text_t)i; new_sort_order( (text_ptr)key, sort_order.match ); break; case CaseIgnore : mode_no = OK; for (i=0; i<256; i++) sort_order.ignore[i] = (text_t)i; for (i=65; i<91; i++) sort_order.ignore[i] = (text_t)(i + 32); new_sort_order( (text_ptr)key, sort_order.ignore ); break; case DirSort : mode_no = search( key, valid_dir_sort, 1 ); if (mode_no == ERROR) { errmsg = config27; /* directory sort error */ goto bad_config; } mode.dir_sort = mode_no;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -