📄 textsw_attr.c
字号:
file = NULL; display_views = 0; break; case TEXTSW_CHECKPOINT_FREQUENCY: textsw->checkpoint_frequency = (int)(attrs[1]); break; case TEXTSW_FONT: case WIN_FONT: if (attrs[1]) { Ev_handle ev_next; if (textsw->state & TXTSW_INITIALIZED) { if (textsw->state & TXTSW_OPENED_FONT) { PIXFONT *old_font; old_font = (PIXFONT *)LINT_CAST( ei_get(textsw->views->eih, EI_FONT) ); pf_close(old_font); textsw->state &= ~TXTSW_OPENED_FONT; } (void) ei_set(textsw->views->eih, EI_FONT, attrs[1], 0); } /* Adjust the views to account for the font change */ FORALLVIEWS(textsw->views, ev_next) { (void) ev_set(ev_next, EV_CLIP_RECT, &ev_next->rect, EV_RECT, &ev_next->rect, 0); } } break; case TEXTSW_HISTORY_LIMIT: /* Internally we want one more again slot that client does. */ temp = (int)(attrs[1]); temp = (temp > 0) ? temp+1 : 0; textsw_init_undo(textsw, temp); break; case TEXTSW_IGNORE_LIMIT: textsw->ignore_limit = (unsigned)(attrs[1]); break; case TEXTSW_INSERT_FROM_FILE: { pkg_private Textsw_status textsw_get_from_file(); *status_ptr = textsw_get_from_file(view, (char *)(attrs[1]), (status_ptr == &status_dummy)); if (*status_ptr == TEXTSW_STATUS_OKAY) update_scrollbar = 2; break; }; case TEXTSW_INSERT_MAKES_VISIBLE: switch ((Textsw_enum)attrs[1]) { case TEXTSW_NEVER: case TEXTSW_ALWAYS: case TEXTSW_IF_AUTO_SCROLL: textsw->insert_makes_visible = (Textsw_enum)attrs[1]; break; default: *status_ptr = TEXTSW_STATUS_BAD_ATTR_VALUE; break; } break; case TEXTSW_INSERTION_POINT: (void) textsw_set_insert(textsw, (Es_index)(attrs[1])); break; case TEXTSW_LEFT_MARGIN: (void) ev_set(view->e_view, (all_views) ? EV_FOR_ALL_VIEWS : EV_END_ALL_VIEWS, EV_LEFT_MARGIN, (int)(attrs[1]), 0); display_views = (all_views) ? 2 : 1; break; case TEXTSW_LINE_BREAK_ACTION: { Ev_right_break ev_break_action; switch ((Textsw_enum)attrs[1]) { case TEXTSW_CLIP: ev_break_action = EV_CLIP; goto TLBA_Tail; case TEXTSW_WRAP_AT_CHAR: ev_break_action = EV_WRAP_AT_CHAR; goto TLBA_Tail; case TEXTSW_WRAP_AT_WORD: ev_break_action = EV_WRAP_AT_WORD;TLBA_Tail: (void) ev_set(view->e_view, (all_views) ? EV_FOR_ALL_VIEWS : EV_END_ALL_VIEWS, EV_RIGHT_BREAK, ev_break_action, 0); display_views = (all_views) ? 2 : 1; break; default: *status_ptr = TEXTSW_STATUS_BAD_ATTR_VALUE; break; } break; } case TEXTSW_LOAD_DIR_IS_CD: switch ((Textsw_enum)attrs[1]) { case TEXTSW_ALWAYS: textsw->state |= TXTSW_LOAD_CAN_CD; break; case TEXTSW_NEVER: textsw->state &= ~TXTSW_LOAD_CAN_CD; break; default: *status_ptr = TEXTSW_STATUS_BAD_ATTR_VALUE; break; } break; case TEXTSW_LOWER_CONTEXT: (void) ev_set(view->e_view, EV_CHAIN_LOWER_CONTEXT, (int)(attrs[1]), 0); break; case TEXTSW_MEMORY_MAXIMUM: textsw->es_mem_maximum = (unsigned)(attrs[1]); if (textsw->es_mem_maximum == 0) { textsw->es_mem_maximum = TEXTSW_INFINITY; } else if (textsw->es_mem_maximum < 1000) textsw->es_mem_maximum = 1000; break; case WIN_MENU: case TEXTSW_MENU: textsw->menu = attrs[1]; break; case TEXTSW_MULTI_CLICK_SPACE: if ((int)(attrs[1]) != -1) textsw->multi_click_space = (int)(attrs[1]); break; case TEXTSW_MULTI_CLICK_TIMEOUT: if ((int)(attrs[1]) != -1) textsw->multi_click_timeout = (int)(attrs[1]); break; case TEXTSW_NO_REPAINT_TIL_EVENT: ev_set(view->e_view, EV_NO_REPAINT_TIL_EVENT, (int)(attrs[1]), 0); break; case TEXTSW_NO_RESET_TO_SCRATCH: SET_BOOL_FLAG(textsw->state, attrs[1], TXTSW_NO_RESET_TO_SCRATCH); break; case TEXTSW_NOTIFY_LEVEL: textsw->notify_level = (int)(attrs[1]); break; case TEXTSW_NOTIFY_PROC: textsw->notify = (int (*)())LINT_CAST(attrs[1]); if (textsw->notify_level == 0) textsw->notify_level = TEXTSW_NOTIFY_STANDARD; break; case TEXTSW_READ_ONLY: temp = TXTSW_IS_READ_ONLY(textsw); SET_BOOL_FLAG(textsw->state, attrs[1], TXTSW_READ_ONLY_ESH); set_read_only_esh = (textsw->state & TXTSW_READ_ONLY_ESH); ceased_read_only = (temp && !TXTSW_IS_READ_ONLY(textsw)); break; case TEXTSW_RESET_MODE: reset_mode = (int)(attrs[1]); break; case TEXTSW_RESET_TO_CONTENTS: (void)textsw_reset_2(VIEW_REP_TO_ABS(view), 0, 0, TRUE, FALSE); break; case TEXTSW_RIGHT_MARGIN: (void) ev_set(view->e_view, (all_views) ? EV_FOR_ALL_VIEWS : EV_END_ALL_VIEWS, EV_RIGHT_MARGIN, (int)(attrs[1]), 0); display_views = (all_views) ? 2 : 1; break; case TEXTSW_SCROLLBAR: case WIN_VERTICAL_SCROLLBAR: textsw_add_scrollbar_to_view(view, (Scrollbar)(attrs[1])); break; case TEXTSW_STATUS: status_ptr = (Textsw_status *)LINT_CAST(attrs[1]); *status_ptr = TEXTSW_STATUS_OKAY; break; case TEXTSW_STORE_SELF_IS_SAVE: SET_BOOL_FLAG(textsw->state, attrs[1], TXTSW_STORE_SELF_IS_SAVE); break; case TEXTSW_TAB_WIDTH: (void) ei_set(textsw->views->eih, EI_TAB_WIDTH, attrs[1], 0); break; case TEXTSW_TEMP_FILENAME: textsw->temp_filename = strdup((char *)LINT_CAST(attrs[1])); break; case TEXTSW_TOOL: textsw->tool = (attrs[1]); break; case TEXTSW_UPDATE_SCROLLBAR: update_scrollbar = (all_views) ? 2 : 1; break; case TEXTSW_UPPER_CONTEXT: (void) ev_set(view->e_view, EV_CHAIN_UPPER_CONTEXT, (int)(attrs[1]), 0); break; case TEXTSW_WRAPAROUND_SIZE: es_set(textsw->views->esh, ES_PS_SCRATCH_MAX_LEN, attrs[1], 0); break;#ifdef DEBUG case TEXTSW_MALLOC_DEBUG_LEVEL: malloc_debug((int)attrs[1]); break;#endif case TEXTSW_HEIGHT: case TEXTSW_WIDTH: /* BUG ALERT! Explicitly ignore these for now. */ break; case TEXTSW_EDIT_COUNT: (void) fprintf(stderr, "%s: %s is read-only attribute.\n", "textsw_set", attr_sprint(expand_attr, (u_int)attrs[0])); break; case TEXTSW_CONSUME_ATTRS: consume_attrs = (attrs[1] ? 1 : 0); break; default: if (ATTR_PKG_TEXTSW == ATTR_PKG(attrs[0])) { extern char *attr_sprint(); (void) fprintf(stderr, "%s: %s not a valid attribute.\n", "textsw_set", attr_sprint(expand_attr, (u_int)attrs[0])); } break; } if (consume_attrs & 0xFFFF0000) ATTR_CONSUME(*attrs); } if (file) { *status_ptr = set_first(view, error_msg, file, reset_mode, ES_CANNOT_SET, -1, all_views); /* * This is for resetting the TXTSW_READ_ONLY_ESH flag that got * cleared in textsw_replace_esh */ if (set_read_only_esh) { SET_BOOL_FLAG(textsw->state, TRUE, TXTSW_READ_ONLY_ESH); }; display_views = 0; } if (display_views && (textsw->state & TXTSW_DISPLAYED)) { FORALL_TEXT_VIEWS(textsw, next) { if ((display_views == 1) && (next != view)) continue; textsw_display_view_margins(next, RECT_NULL); ev_display_view(next->e_view); } update_scrollbar = display_views; } if (update_scrollbar) { textsw_update_scrollbars(textsw, (update_scrollbar == 2) ? (Textsw_view)0 : view); } if (ceased_read_only) { textsw_add_timer(textsw, &textsw->timer); } return(status);}static Defaults_pairs insert_makes_visible_pairs[] = { "If_auto_scroll", (int)TEXTSW_IF_AUTO_SCROLL, "Always", (int)TEXTSW_ALWAYS, NULL, (int)TEXTSW_IF_AUTO_SCROLL};static Defaults_pairs load_file_of_dir_pairs[] = { "Is_error", (int)TEXTSW_NEVER, "Is_set_directory", (int)TEXTSW_ALWAYS, NULL, (int)TEXTSW_NEVER};static Defaults_pairs line_break_pairs[] = { "Clip", (int)TEXTSW_CLIP, "Wrap_char", (int)TEXTSW_WRAP_AT_CHAR, "Wrap_word", (int)TEXTSW_WRAP_AT_WORD, NULL, (int)TEXTSW_WRAP_AT_CHAR};static caddr_ttextsw_get_from_defaults(attribute) register Textsw_attribute attribute;{ char *def_str; /* Points to strings owned by defaults. */ switch (attribute) { case TEXTSW_ADJUST_IS_PENDING_DELETE: return((caddr_t) defaults_get_boolean("/Text/Adjust_is_pending_delete", False, NULL)); case TEXTSW_AGAIN_LIMIT: return((caddr_t) defaults_get_integer_check("/Text/Again_limit", 1, 0, 500, NULL)); case TEXTSW_AUTO_INDENT: return((caddr_t) defaults_get_boolean("/Text/Auto_indent", False, NULL)); case TEXTSW_AUTO_SCROLL_BY: return((caddr_t) defaults_get_integer_check("/Text/Auto_scroll_by", 1, 0, 100, NULL)); case TEXTSW_BLINK_CARET: return((caddr_t) defaults_get_boolean("/Text/Blink_caret", True, NULL)); case TEXTSW_CHECKPOINT_FREQUENCY: /* Not generally settable via defaults */ return((caddr_t) 0); case TEXTSW_CONFIRM_OVERWRITE: return((caddr_t) defaults_get_boolean("/Text/Confirm_overwrite", True, NULL)); case TEXTSW_CONTROL_CHARS_USE_FONT: return((caddr_t) defaults_get_boolean("/Text/Control_chars_use_font", False, NULL)); case TEXTSW_EDIT_BACK_CHAR: return((caddr_t) defaults_get_character("/Text/Edit_back_char", DEL, (int *)0)); case TEXTSW_EDIT_BACK_WORD: return((caddr_t) defaults_get_character("/Text/Edit_back_word", CTRL(W), (int *)0)); case TEXTSW_EDIT_BACK_LINE: return((caddr_t) defaults_get_character("/Text/Edit_back_line", CTRL(U), (int *)0)); case WIN_FONT: case TEXTSW_FONT: { PIXFONT *pf_open(); PIXFONT *font; def_str = defaults_get_string("/Text/Font", (char *)0, (int *)0); if ((font = pf_open(def_str)) == NULL) { font = pf_open((char *)0); /* standard system font */ } return((caddr_t)font); } case TEXTSW_HISTORY_LIMIT: return((caddr_t) defaults_get_integer_check("/Text/History_limit", 50, 0, 500, NULL)); case TEXTSW_INSERT_MAKES_VISIBLE: def_str = defaults_get_string("/Text/Insert_makes_caret_visible", (char *)0, (int *)0); return((caddr_t)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -