📄 textsw_attr.c
字号:
defaults_lookup(def_str, insert_makes_visible_pairs)); case TEXTSW_LINE_BREAK_ACTION: def_str = defaults_get_string("/Text/Long_line_break_mode", (char *)0, (int *)0); return((caddr_t) defaults_lookup(def_str, line_break_pairs)); case TEXTSW_LOAD_DIR_IS_CD: def_str = defaults_get_string("/Text/Load_file_of_directory", (char *)0, (int *)0); return((caddr_t) defaults_lookup(def_str, load_file_of_dir_pairs)); case TEXTSW_LOWER_CONTEXT: return((caddr_t) defaults_get_integer_check("/Text/Lower_context", 0, EV_NO_CONTEXT, 50, NULL)); case TEXTSW_MULTI_CLICK_SPACE: return((caddr_t) defaults_get_integer_check("/Text/Multi_click_space", 3, 0, 500, NULL)); case TEXTSW_MULTI_CLICK_TIMEOUT: return((caddr_t) defaults_get_integer_check("/Text/Multi_click_timeout", 390, 0, 2000, NULL)); case TEXTSW_STORE_CHANGES_FILE: return((caddr_t) defaults_get_boolean("/Text/Store_changes_file", True, NULL)); case TEXTSW_STORE_SELF_IS_SAVE: return((caddr_t) defaults_get_boolean("/Text/Store_self_is_save", True, NULL)); case TEXTSW_UPPER_CONTEXT: return((caddr_t) defaults_get_integer_check("/Text/Upper_context", 2, EV_NO_CONTEXT, 50, NULL)); case TEXTSW_LEFT_MARGIN: return((caddr_t) defaults_get_integer_check("/Text/Left_margin", 4, 0, 2000, NULL)); case TEXTSW_RIGHT_MARGIN: return((caddr_t) defaults_get_integer_check("/Text/Right_margin", 0, 0, 2000, NULL)); case TEXTSW_TAB_WIDTH: return((caddr_t) defaults_get_integer_check("/Text/Tab_width", 8, 0, 50, NULL)); default: return((caddr_t)0); }}#ifndef lintstatic intcount_args(arg1, va_alist) caddr_t arg1; va_dcl{ register int count; va_list args; va_start(args); for (count = 2; va_arg(args, caddr_t); count++) {} va_end(args); return(count);}#endif/* VARARGS1 */extern caddr_ttextsw_get(abstract, va_alist) Textsw abstract; va_dcl{ Textsw_view view; register Textsw_folio textsw; Es_index pos; /* pos, buf and buf_len are */ char *buf; /* temporaries for TEXTSW_CONTENTS */ int buf_len; Textsw_attribute attribute; va_list args; if ((caddr_t (*)())LINT_CAST(abstract) == textsw_window_object) { /* Client called textsw_get(TEXTSW, TEXTSW_XXX); */ int i;#ifndef lint if (TEXTSW_count == 0) TEXTSW_count = count_args(TEXTSW, 0) - 1;#endif va_start(args); for (i = 0; i < TEXTSW_count-1; i++) {va_arg(args, caddr_t);} attribute = va_arg(args, Textsw_attribute); va_end(args); return(textsw_get_from_defaults(attribute)); } if (abstract == 0) return((caddr_t)0); view = VIEW_ABS_TO_REP(abstract); textsw = FOLIO_FOR_VIEW(view); va_start(args); attribute = va_arg(args, Textsw_attribute); switch (attribute) { case TEXTSW_INSERTION_POINT: case TEXTSW_LENGTH: textsw_flush_caches(view, TFC_STD); break; case TEXTSW_CONTENTS: pos = va_arg(args, Es_index); buf = va_arg(args, caddr_t); buf_len = va_arg(args, int); break; } va_end(args); /* Note that ev_get(chain, EV_CHAIN_xxx) casts chain to be view in * order to keep lint happy. */ switch (attribute) { case TEXTSW_ADJUST_IS_PENDING_DELETE: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_ADJUST_IS_PD)); case TEXTSW_AGAIN_LIMIT: return((caddr_t) ((textsw->again_count) ? (textsw->again_count-1) : 0)); case TEXTSW_AGAIN_RECORDING: return((caddr_t) !BOOL_FLAG_VALUE(textsw->state, TXTSW_NO_AGAIN_RECORDING)); case TEXTSW_AUTO_INDENT: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_AUTO_INDENT)); case TEXTSW_AUTO_SCROLL_BY: return(ev_get((Ev_handle)(textsw->views), EV_CHAIN_AUTO_SCROLL_BY)); case TEXTSW_BLINK_CARET: return((caddr_t) BOOL_FLAG_VALUE(textsw->caret_state, TXTSW_CARET_FLASHING)); case TEXTSW_BROWSING: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_READ_ONLY_SW)); case TEXTSW_CLIENT_DATA: return(textsw->client_data); case HELP_DATA: return(textsw->help_data); case TEXTSW_COALESCE_WITH: return((caddr_t)textsw->coalesce_with); case TEXTSW_CONFIRM_OVERWRITE: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_CONFIRM_OVERWRITE)); case TEXTSW_CONTENTS: return((caddr_t) textsw_get_contents(textsw, pos, buf, buf_len) ); case TEXTSW_CONTROL_CHARS_USE_FONT: return((caddr_t) ei_get(textsw->views->eih, EI_CONTROL_CHARS_USE_FONT) ); case TEXTSW_DESTROY_ALL_VIEWS: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_DESTROY_ALL_VIEWS)); case TEXTSW_DISABLE_CD: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_NO_CD)); case TEXTSW_DISABLE_LOAD: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_NO_LOAD)); case TEXTSW_EDIT_BACK_CHAR: return((caddr_t)textsw->edit_bk_char); case TEXTSW_EDIT_BACK_WORD: return((caddr_t)textsw->edit_bk_word); case TEXTSW_EDIT_BACK_LINE: return((caddr_t)textsw->edit_bk_line); case TEXTSW_EDIT_COUNT: return(ev_get((Ev_handle)(textsw->views), EV_CHAIN_EDIT_NUMBER)); case TEXTSW_WRAPAROUND_SIZE: return(es_get(textsw->views->esh, ES_PS_SCRATCH_MAX_LEN)); case TEXTSW_ES_CREATE_PROC: return((caddr_t)LINT_CAST(textsw->es_create)); case TEXTSW_FILE: { char *name; if (textsw_file_name(textsw, &name)) return((caddr_t)0); else return((caddr_t)name); } case TEXTSW_FIRST: return((caddr_t) ft_position_for_index(view->e_view->line_table, 0)); case TEXTSW_FIRST_LINE: { int top, bottom; ev_line_info(view->e_view, &top, &bottom); return((caddr_t)top-1); } case TEXTSW_FONT: case WIN_FONT: return(ei_get(textsw->views->eih, EI_FONT)); case TEXTSW_HEIGHT: case WIN_HEIGHT: return((caddr_t)textsw->first_view->rect.r_height); case TEXTSW_HISTORY_LIMIT: return((caddr_t) ((textsw->undo_count) ? (textsw->undo_count-1) : 0)); case TEXTSW_IGNORE_LIMIT: return((caddr_t)textsw->ignore_limit); case TEXTSW_INSERT_MAKES_VISIBLE: return((caddr_t)textsw->insert_makes_visible); case TEXTSW_INSERTION_POINT: return((caddr_t)ev_get_insert(textsw->views)); case TEXTSW_LENGTH: return((caddr_t)es_get_length(textsw->views->esh)); case TEXTSW_LOAD_DIR_IS_CD: return((caddr_t)((textsw->state & TXTSW_LOAD_CAN_CD) ? TEXTSW_ALWAYS : TEXTSW_NEVER) ); case TEXTSW_LOWER_CONTEXT: return(ev_get((Ev_handle)(textsw->views), EV_CHAIN_LOWER_CONTEXT)); case TEXTSW_MODIFIED: return((caddr_t)textsw_has_been_modified(abstract)); case TEXTSW_MEMORY_MAXIMUM: return((caddr_t)textsw->es_mem_maximum); case WIN_MENU: case TEXTSW_MENU: { extern Menu textsw_get_unique_menu(); return((caddr_t)textsw_get_unique_menu(textsw)); } case TEXTSW_MULTI_CLICK_SPACE: return((caddr_t)textsw->multi_click_space); case TEXTSW_MULTI_CLICK_TIMEOUT: return((caddr_t)textsw->multi_click_timeout); case TEXTSW_NO_RESET_TO_SCRATCH: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_NO_RESET_TO_SCRATCH)); case TEXTSW_NOTIFY_LEVEL: return((caddr_t)textsw->notify_level); case TEXTSW_NOTIFY_PROC: return((caddr_t)LINT_CAST(textsw->notify)); case TEXTSW_PIXWIN: return((caddr_t)PIXWIN_FOR_VIEW(view)); case TEXTSW_READ_ONLY: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_READ_ONLY_ESH)); case TEXTSW_STORE_SELF_IS_SAVE: return((caddr_t) BOOL_FLAG_VALUE(textsw->state, TXTSW_STORE_SELF_IS_SAVE)); case TEXTSW_TAB_WIDTH: return(ei_get(textsw->views->eih, EI_TAB_WIDTH)); case TEXTSW_TEMP_FILENAME: return(textsw->temp_filename); case TEXTSW_TOOL: return((caddr_t)textsw->tool); case TEXTSW_UPPER_CONTEXT: return(ev_get((Ev_handle)(textsw->views), EV_CHAIN_UPPER_CONTEXT)); case TEXTSW_LEFT_MARGIN: return(ev_get(view->e_view, EV_LEFT_MARGIN)); case TEXTSW_RIGHT_MARGIN: return(ev_get(view->e_view, EV_RIGHT_MARGIN)); case TEXTSW_SCROLLBAR: case WIN_VERTICAL_SCROLLBAR: return((caddr_t)SCROLLBAR_FOR_VIEW(view)); case TEXTSW_WIDTH: case WIN_WIDTH: return((caddr_t)textsw->first_view->rect.r_width); case TEXTSW_LINE_BREAK_ACTION:/* Bug: should be able to get this. */ case TEXTSW_MENU_STYLE: return((caddr_t)textsw_get_menu_style_internal()); default: return((caddr_t)0); }}/* VARARGS1 */extern Textsw_statustextsw_set(abstract, va_alist) Textsw abstract; va_dcl{ caddr_t attr_argv[ATTR_STANDARD_SIZE]; va_list args; va_start(args); (void) attr_make(attr_argv, ATTR_STANDARD_SIZE, args); va_end(args); return(textsw_set_internal(VIEW_ABS_TO_REP(abstract), attr_argv));}/* VARARGS1 */pkg_private voidtextsw_notify(view, va_alist) Textsw_view view; va_dcl{ register Textsw_folio folio; int doing_event; caddr_t attr_argv[ATTR_STANDARD_SIZE]; va_list args; va_start(args); view = VIEW_FROM_FOLIO_OR_VIEW(view); (void) attr_make(attr_argv, ATTR_STANDARD_SIZE, args); va_end(args); folio = FOLIO_FOR_VIEW(view); doing_event = (folio->state & TXTSW_DOING_EVENT); folio->state &= ~TXTSW_DOING_EVENT; folio->notify(VIEW_REP_TO_ABS(view), attr_argv); if (doing_event) folio->state |= TXTSW_DOING_EVENT;}pkg_private voidtextsw_notify_replaced(folio_or_view, insert_before, length_before, replaced_from, replaced_to, count_inserted) Textsw_opaque folio_or_view; Es_index insert_before; Es_index length_before; Es_index replaced_from; Es_index replaced_to; Es_index count_inserted;{ Textsw_view view = VIEW_FROM_FOLIO_OR_VIEW(folio_or_view); register Textsw_folio folio = FOLIO_FOR_VIEW(view); int in_notify_proc = folio->state & TXTSW_IN_NOTIFY_PROC; folio->state |= TXTSW_IN_NOTIFY_PROC; textsw_notify(view, TEXTSW_ACTION_REPLACED, insert_before, length_before, replaced_from, replaced_to, count_inserted, 0); if (!in_notify_proc) folio->state &= ~TXTSW_IN_NOTIFY_PROC;}pkg_private Es_indextextsw_get_contents(textsw, position, buffer, buffer_length) register Textsw_folio textsw; Es_index position; char *buffer; register int buffer_length;{ Es_index next_read_at; int read; es_set_position(textsw->views->esh, position); next_read_at = es_read(textsw->views->esh, buffer_length, buffer, &read); if AN_ERROR(read != buffer_length) { bzero(buffer+read, buffer_length-read); } return(next_read_at);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -