📄 textsw_menu.c
字号:
#ifndef lint#ifdef sccsstatic char sccsid[] = "@(#)textsw_menu.c 1.1 92/07/30";#endif#endif/* * Copyright (c) 1986 by Sun Microsystems, Inc. *//* * Text subwindow menu creation and support. */#include <suntool/primal.h>#include <suntool/textsw_impl.h>#include <errno.h>#include <pixrect/pr_util.h>#include <pixrect/memvar.h>#include <pixrect/pixfont.h>#include <sunwindow/defaults.h>#include <sunwindow/win_cursor.h>#include <sunwindow/win_input.h>#include <sunwindow/win_struct.h>#include "sunwindow/sv_malloc.h"#include <suntool/alert.h>#include <suntool/frame.h>#include <suntool/fullscreen.h>#include <suntool/tool_struct.h>#include <suntool/walkmenu.h>#include <suntool/window.h>#define HELP_INFO(s) HELP_DATA,s,extern Ev_handle ev_resolve_xy_to_view();extern Ev_handle ev_nearest_view();extern Es_index ev_index_for_line();static void stuff_clipboard();static Seln_result read_proc();static FILE *output;static Menu_item show_clipboard();static char *put_then_get = "Copy then Paste";static char *put_then = "Copy then";#define MAX_SIZE_MENU_STRING 30static struct pixrect *textsw_get_only_pr;static int textsw_menu_refcount; /* refcount for textsw_menu */static Menu textsw_menu; /* Let default to NULL */static Textsw_enum textsw_menu_style; /* default to organized */static int textsw_menu_style_already_set; /* default = 0 */static Menu_item *textsw_menu_items; /* [TEXTSW_MENU_LAST_CMD] */pkg_private void textsw_alert_for_old_interface();extern int textsw_has_been_modified();extern void tool_expand_neighbors();pkg_private void textsw_get_extend_to_edge();pkg_private void textsw_set_extend_to_edge();extern Textsw textsw_split_view();pkg_private int await_neg_event();extern Textsw_enum textsw_get_menu_style_internal();extern void textsw_set_menu_style_internal();pkg_private int textsw_menu_prompt();extern void textsw_destroy_split();extern Menu_item * textsw_new_menu_table();extern Menu textsw_menu_init();extern void textsw_do_menu();extern Menu textsw_get_unique_menu();extern Menu textsw_build_extras_menu();extern Menu_item textsw_toggle_extras_item();/* VARARGS0 */static Menutextsw_new_menu(folio) Textsw_folio folio;{ Menu edit_cmd, top_menu, save_file, break_mode, old_break_mode, find_pattern, file_cmds, display_cmds, find_cmds, fast_exits_cmds, select_field_cmds, find_sel_cmds, build_clipboard, find_clipboard_cmds, undo_cmds, paste_cmds, save_cmds, old_edit_cmd; char *string_for_menu_item = sv_malloc(MAX_SIZE_MENU_STRING + 1); old_break_mode = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Clip Lines", MENU_VALUE, TEXTSW_MENU_CLIP_LINES, HELP_INFO("textsw:mcliplines") 0, MENU_ITEM, MENU_STRING, "Wrap at Character", MENU_VALUE, TEXTSW_MENU_WRAP_LINES_AT_CHAR, HELP_INFO("textsw:mwrapchars") 0, HELP_INFO("textsw:moldbreakmode") 0); break_mode = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Wrap at Character", MENU_VALUE, TEXTSW_MENU_WRAP_LINES_AT_CHAR, HELP_INFO("textsw:mwrapchars") 0, MENU_ITEM, MENU_STRING, "Wrap at Word", MENU_VALUE, TEXTSW_MENU_WRAP_LINES_AT_WORD, HELP_INFO("textsw:mwrapwords") 0, MENU_ITEM, MENU_STRING, "Clip Lines", MENU_VALUE, TEXTSW_MENU_CLIP_LINES, HELP_INFO("textsw:mcliplines") 0, HELP_INFO("textsw:mbreakmode") 0); undo_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Undo Last Edit", MENU_VALUE, TEXTSW_MENU_UNDO, HELP_INFO("textsw:mundolast") 0, MENU_ITEM, MENU_STRING, "Undo All Edits", MENU_VALUE, TEXTSW_MENU_UNDO_ALL, HELP_INFO("textsw:mundoall") 0, HELP_INFO("textsw:mundocmds") 0); if (textsw_menu_style == TEXTSW_STYLE_ORGANIZED) { fast_exits_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Close, then Save Current File", MENU_VALUE, TEXTSW_MENU_SAVE_CLOSE, HELP_INFO("textsw:msaveclose") 0, MENU_ITEM, MENU_STRING, "Save Current File, then Quit", MENU_VALUE, TEXTSW_MENU_SAVE_QUIT, HELP_INFO("textsw:msavequit") 0, MENU_ITEM, MENU_STRING, "Save, then Empty document", MENU_VALUE, TEXTSW_MENU_SAVE_RESET, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:msavereset") 0, MENU_ITEM, MENU_STRING, "Close, then Store as New File", MENU_VALUE, TEXTSW_MENU_STORE_CLOSE, HELP_INFO("textsw:mstoreclose") 0, MENU_ITEM, MENU_STRING, "Store as New File, then Quit", MENU_VALUE, TEXTSW_MENU_STORE_QUIT, HELP_INFO("textsw:mstorequit") 0, HELP_INFO("textsw:mfastexitcmds") 0); select_field_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Expand", MENU_VALUE, TEXTSW_MENU_SEL_ENCLOSE_FIELD, HELP_INFO("textsw:mselexpand") 0, MENU_ITEM, MENU_STRING, "Next", MENU_VALUE, TEXTSW_MENU_SEL_NEXT_FIELD, HELP_INFO("textsw:mselnext") 0, MENU_ITEM, MENU_STRING, "Previous", MENU_VALUE, TEXTSW_MENU_SEL_PREV_FIELD, HELP_INFO("textsw:mselprevious") 0, HELP_INFO("textsw:mselfieldcmds") 0); find_sel_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Forward", MENU_VALUE, TEXTSW_MENU_FIND, HELP_INFO("textsw:mfindforward") 0, MENU_ITEM, MENU_STRING, "Backward", MENU_VALUE, TEXTSW_MENU_FIND_BACKWARD, HELP_INFO("textsw:mfindbackward") 0, HELP_INFO("textsw:mfindselcmds") 0); find_clipboard_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Forward", MENU_VALUE, TEXTSW_MENU_FIND_SHELF, HELP_INFO("textsw:mfindcbforward") 0, MENU_ITEM, MENU_STRING, "Backward", MENU_VALUE, TEXTSW_MENU_FIND_SHELF_BACKWARD, HELP_INFO("textsw:mfindcbbackward") 0, HELP_INFO("textsw:mfindcbcmds") 0);/* paste_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_STRING_ITEM, "Paste", TEXTSW_MENU_PASTE, MENU_STRING_ITEM, "Paste from File", TEXTSW_MENU_FILE_STUFF, 0); save_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_STRING_ITEM, "Save File", TEXTSW_MENU_SAVE, MENU_STRING_ITEM, "Store to Named file", TEXTSW_MENU_STORE, MENU_PULLRIGHT_ITEM, "Fast Exits", fast_exits_cmds, 0);*/ file_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Save Current File", MENU_VALUE, TEXTSW_MENU_SAVE, HELP_INFO("textsw:msavefile") 0, MENU_ITEM, MENU_STRING, "Store as New File", MENU_VALUE, TEXTSW_MENU_STORE, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:mstorefile") 0, MENU_ITEM, MENU_STRING, "Load File", MENU_VALUE, TEXTSW_MENU_LOAD, HELP_INFO("textsw:mloadfile") 0, MENU_ITEM, MENU_STRING, "Include File", MENU_VALUE, TEXTSW_MENU_FILE_STUFF, HELP_INFO("textsw:mincludefile") 0, MENU_ITEM, MENU_STRING, "Set Directory", MENU_VALUE, TEXTSW_MENU_CD, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:msetdir") 0, MENU_ITEM, MENU_STRING, "Empty Document", MENU_VALUE, TEXTSW_MENU_RESET, HELP_INFO("textsw:memptydoc") 0, MENU_ITEM, MENU_STRING, "Finishing Up", MENU_PULLRIGHT, fast_exits_cmds, HELP_INFO("textsw:mfastexit") 0, HELP_INFO("textsw:mfilecmds") 0); build_clipboard = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_GEN_PROC, show_clipboard, MENU_STRING, string_for_menu_item, MENU_VALUE, TEXTSW_MENU_SHOW_CLIPBOARD, HELP_INFO("textsw:mclipboard") 0, HELP_INFO("textsw:mclipboard") 0); edit_cmd = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Again", MENU_VALUE, TEXTSW_MENU_AGAIN, HELP_INFO("textsw:meditagain") 0, MENU_ITEM, MENU_STRING, "Undo", MENU_PULLRIGHT, undo_cmds, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:meditundo") 0, MENU_ITEM, MENU_STRING, "Copy", MENU_VALUE, TEXTSW_MENU_COPY, HELP_INFO("textsw:meditcopy") 0, MENU_ITEM, MENU_STRING, "Paste", MENU_VALUE, TEXTSW_MENU_PASTE, HELP_INFO("textsw:meditpaste") 0, MENU_ITEM, MENU_STRING, "Cut", MENU_VALUE, TEXTSW_MENU_CUT, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:meditcut") 0, MENU_ITEM, MENU_STRING, "Show Clipboard", MENU_VALUE, TEXTSW_MENU_SHOW_CLIPBOARD_FROM_EDIT, MENU_PULLRIGHT, build_clipboard, HELP_INFO("textsw:mclipboard") 0, MENU_ITEM, MENU_STRING, "Copy, then Paste", MENU_VALUE, TEXTSW_MENU_PUT_THEN_GET, HELP_INFO("textsw:meditcopypaste") 0, HELP_INFO("textsw:meditcmds") 0); display_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Select Line at Number", MENU_VALUE, TEXTSW_MENU_NORMALIZE_LINE, HELP_INFO("textsw:mselectline") 0, MENU_ITEM, MENU_STRING, "What Line Number?", MENU_VALUE, TEXTSW_MENU_COUNT_TO_LINE, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:mwhatline") 0, MENU_ITEM, MENU_STRING, "Split View", MENU_VALUE, TEXTSW_MENU_CREATE_VIEW, HELP_INFO("textsw:msplitview") 0, MENU_ITEM, MENU_STRING, "Destroy View", MENU_VALUE, TEXTSW_MENU_DESTROY_VIEW, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:mdestroyview") 0, MENU_ITEM, MENU_STRING, "Show Caret at Top", MENU_VALUE, TEXTSW_MENU_NORMALIZE_INSERTION, HELP_INFO("textsw:mshowcaret") 0, MENU_ITEM, MENU_STRING, "Move Caret to Start", MENU_VALUE, TEXTSW_MENU_NORMALIZE_TOP, HELP_INFO("textsw:mcaretstart") 0, MENU_ITEM, MENU_STRING, "Move Caret to End", MENU_VALUE, TEXTSW_MENU_NORMALIZE_BOTTOM, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:mcaretend") 0, MENU_ITEM, MENU_STRING, "Change Line Wrap", MENU_PULLRIGHT, break_mode, HELP_INFO("textsw:mchangelinewrap") 0, HELP_INFO("textsw:mdisplaycmds") 0); find_cmds = menu_create( MENU_LEFT_MARGIN, 6, MENU_ITEM, MENU_STRING, "Find and Replace", MENU_VALUE, TEXTSW_MENU_FIND_AND_REPLACE, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:mfindreplace") 0, MENU_ITEM, MENU_STRING, "Find Selection", MENU_PULLRIGHT, find_sel_cmds, HELP_INFO("textsw:mfindselcmds") 0, MENU_ITEM, MENU_STRING, "Find Clipboard", MENU_PULLRIGHT, find_clipboard_cmds, HELP_INFO("textsw:findcbcmds") 0, MENU_ITEM, MENU_STRING, "Show Clipboard", MENU_VALUE, TEXTSW_MENU_SHOW_CLIPBOARD_FROM_FIND, MENU_PULLRIGHT, build_clipboard, MENU_LINE_AFTER_ITEM, MENU_HORIZONTAL_LINE, HELP_INFO("textsw:mclipboard") 0, MENU_ITEM, MENU_STRING, "Find Marked Text", MENU_VALUE, TEXTSW_MENU_SEL_MARK_TEXT, HELP_INFO("textsw:mfindtext") 0, MENU_ITEM, MENU_STRING, "Match Delimiter", MENU_VALUE, TEXTSW_MENU_MATCH_FIELD, HELP_INFO("textsw:mmatchdelim") 0, MENU_ITEM, MENU_STRING, "Replace |>field<| ",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -