push up read_from_pipes.patch
[nedit-bw.git] / eval_macro.patch
blob6e40e3f4f03b33586753d4a55dcc2d0e97192b77
1 ---
3 doc/help.etx | 3 +++
4 source/highlightData.c | 2 +-
5 source/macro.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
6 3 files changed, 48 insertions(+), 1 deletion(-)
8 diff --quilt old/source/macro.c new/source/macro.c
9 --- old/source/macro.c
10 +++ new/source/macro.c
11 @@ -416,10 +416,12 @@ static int filenameDialogMS(WindowInfo*
12 DataValue* result, char** errMsg);
13 static int typeofMS(WindowInfo* window, DataValue* argList, int nArgs,
14 DataValue* result, char** errMsg);
15 static int setWindowTitleMS(WindowInfo *window, DataValue *argList,
16 int nArgs, DataValue *result, char **errMsg);
17 +static int evalMS(WindowInfo *window, DataValue *argList,
18 + int nArgs, DataValue *result, char **errMsg);
20 /* Pattern Match Feature */
21 static int getMatchingMS(WindowInfo *window, DataValue *argList, int nArgs,
22 DataValue *result, char **errMsg);
24 @@ -513,10 +515,11 @@ static const BuiltInSubrName MacroSubrs[
25 { "dict_is_element", dictiselementMS },
26 { "to_pos", toPosMS },
27 { "to_line", toLineMS },
28 { "to_column", toColumnMS },
29 { "set_window_title", setWindowTitleMS },
30 + { "eval", evalMS },
31 { NULL, NULL } /* sentinel */
34 static const BuiltInSubrName SpecialVars[] = {
35 { "$cursor", cursorMV },
36 @@ -3768,10 +3771,51 @@ static int setWindowTitleMS(WindowInfo *
37 window->titleFormat = newFmt;
38 UpdateWindowTitle(window);
39 return True;
42 +/*
43 + * eval(macro)
44 + */
45 +static int evalMS(WindowInfo *window, DataValue *argList, int nArgs,
46 + DataValue *result, char **errMsg)
48 + char stringStorage[TYPE_INT_STR_SIZE(int)];
49 + char *macro = NULL;
50 + char *macrosave = NULL;
51 + char *stoppedAt = NULL;
52 + Program *prog;
54 + if (nArgs != 1) {
55 + return wrongNArgsErr(errMsg);
56 + }
57 + if (!readStringArg(argList[0], &macro, stringStorage, errMsg)) {
58 + return False;
59 + }
61 + /* Add a terminating newline (which command line users are likely to omit
62 + since they are typically invoking a single routine) */
63 + macrosave = XtMalloc(strlen(macro) + 2);
64 + strcpy(macrosave, macro);
65 + macrosave[strlen(macro)] = '\n';
66 + macrosave[strlen(macro) + 1] = '\0';
68 + /* Parse the macro and report errors if it fails */
69 + prog = ParseMacro(macrosave, errMsg, &stoppedAt);
70 + if (prog == NULL) {
71 + ParseError(window->shell, macrosave, stoppedAt, "eval()", *errMsg);
72 + XtFree(macrosave);
73 + return False;
74 + }
75 + XtFree(macrosave);
77 + /* run the executable program (prog is freed upon completion) */
78 + runMacro(window, prog);
80 + return True;
83 /* T Balinski */
84 static int listDialogMS(WindowInfo *window, DataValue *argList, int nArgs,
85 DataValue *result, char **errMsg)
87 macroCmdInfo *cmdData;
88 diff --quilt old/source/highlightData.c new/source/highlightData.c
89 --- old/source/highlightData.c
90 +++ new/source/highlightData.c
91 @@ -549,11 +549,11 @@ static char *DefaultPatternSets[] = {
92 README:\"NEdit Macro syntax highlighting patterns, version 2.6, maintainer Thorsten Haude, nedit at thorstenhau.de\":::Flag::D\n\
93 Comment:\"#\":\"$\"::Comment::\n\
94 Built-in Misc Vars:\"(?<!\\Y)\\$(?:active_pane|args|calltip_ID|column|cursor|display_width|empty_array|file_name|file_path|language_mode|line|locked|max_font_width|min_font_width|modified|n_display_lines|n_panes|rangeset_list|read_only|selection_(?:start|end|left|right)|server_name|text_length|top_line|transient|VERSION|NEDIT_HOME)>\":::Identifier::\n\
95 Built-in Pref Vars:\"(?<!\\Y)\\$(?:auto_indent|em_tab_dist|file_format|font_name|font_name_bold|font_name_bold_italic|font_name_italic|highlight_syntax|incremental_backup|incremental_search_line|make_backup_copy|match_syntax_based|overtype_mode|show_line_numbers|show_matching|statistics_line|tab_dist|use_tabs|wrap_margin|wrap_text)>\":::Identifier2::\n\
96 Built-in Special Vars:\"(?<!\\Y)\\$(?:[1-9]|list_dialog_button|n_args|read_status|search_end|shell_cmd_status|string_dialog_button|sub_sep)>\":::String1::\n\
97 - Built-in Subrs:\"<(?:append_file|beep|calltip|clipboard_to_string|dialog|filename_dialog|dict_(?:insert|complete|save|append|is_element)|focus_window|get_character|get_pattern_(by_name|at_pos)|get_range|get_selection|get_style_(by_name|at_pos)|getenv|highlight_calltip_line|kill_calltip|length|list_dialog|max|min|rangeset_(?:add|create|destroy|get_by_name|includes|info|invert|range|set_color|set_mode|set_name|subtract)|read_file|replace_in_string|replace_range|replace_selection|replace_substring|search|search_string|select|select_rectangle|set_cursor_pos|get_matching|set_transient|set_window_title|shell_command|split|string_compare|string_dialog|string_to_clipboard|substring|t_print|to_(?:column|line|pos)|tolower|toupper|typeof|valid_number|write_file)(?=\\s*\\()\":::Subroutine::\n\
98 + Built-in Subrs:\"<(?:append_file|beep|calltip|clipboard_to_string|dialog|filename_dialog|dict_(?:insert|complete|save|append|is_element)|eval|focus_window|get_character|get_pattern_(by_name|at_pos)|get_range|get_selection|get_style_(by_name|at_pos)|getenv|highlight_calltip_line|kill_calltip|length|list_dialog|max|min|rangeset_(?:add|create|destroy|get_by_name|includes|info|invert|range|set_color|set_mode|set_name|subtract)|read_file|replace_in_string|replace_range|replace_selection|replace_substring|search|search_string|select|select_rectangle|set_cursor_pos|get_matching|set_transient|set_window_title|shell_command|split|string_compare|string_dialog|string_to_clipboard|substring|t_print|to_(?:column|line|pos)|tolower|toupper|typeof|valid_number|write_file)(?=\\s*\\()\":::Subroutine::\n\
99 Menu Actions:\"<(?:new(?:_tab|_opposite)?|open|open-dialog|open_dialog|open-selected|open_selected|close|save|save-as|save_as|save-as-dialog|save_as_dialog|revert-to-saved|revert_to_saved|revert_to_saved_dialog|include-file|include_file|include-file-dialog|include_file_dialog|load-macro-file|load_macro_file|load-macro-file-dialog|load_macro_file_dialog|load-tags-file|load_tags_file|load-tags-file-dialog|load_tags_file_dialog|unload_tags_file|load_tips_file|load_tips_file_dialog|unload_tips_file|print|print-selection|print_selection|exit|undo|redo|delete|select-all|select_all|shift-left|shift_left|shift-left-by-tab|shift_left_by_tab|shift-right|shift_right|shift-right-by-tab|shift_right_by_tab|find|find-dialog|find_dialog|find-again|find_again|find-selection|find_selection|find_incremental|start_incremental_find|replace|replace-dialog|replace_dialog|replace-all|replace_all|replace-in-selection|replace_in_selection|replace-again|replace_again|replace_find|replace_find_same|replace_find_again|goto-line-number|goto_line_number|goto-line-number-dialog|goto_line_number_dialog|goto-selected|goto_selected|mark|mark-dialog|mark_dialog|goto-mark|goto_mark|goto-mark-dialog|goto_mark_dialog|match|select_to_matching|goto_matching|find-definition|find_definition|show_tip|split-pane|split_pane|close-pane|close_pane|detach_document(?:_dialog)?|move_document_dialog|(?:next|previous|last)_document|uppercase|lowercase|fill-paragraph|fill_paragraph|control-code-dialog|control_code_dialog|filter-selection-dialog|filter_selection_dialog|filter-selection|filter_selection|execute-command|execute_command|execute-command-dialog|execute_command_dialog|execute-command-line|execute_command_line|shell-menu-command|shell_menu_command|macro-menu-command|macro_menu_command|bg_menu_command|post_window_bg_menu|post_tab_context_menu|beginning-of-selection|beginning_of_selection|end-of-selection|end_of_selection|repeat_macro|repeat_dialog|raise_window|focus_pane|set_statistics_line|set_incremental_search_line|set_show_line_numbers|set_auto_indent|set_wrap_text|set_wrap_margin|set_highlight_syntax|set_make_backup_copy|set_incremental_backup|set_show_matching|set_match_syntax_based|set_overtype_mode|set_locked|set_tab_dist|set_em_tab_dist|set_use_tabs|set_fonts|set_language_mode)(?=\\s*\\()\":::Subroutine::\n\
100 Text Actions:\"<(?:self-insert|self_insert|grab-focus|grab_focus|extend-adjust|extend_adjust|extend-start|extend_start|extend-end|extend_end|secondary-adjust|secondary_adjust|secondary-or-drag-adjust|secondary_or_drag_adjust|secondary-start|secondary_start|secondary-or-drag-start|secondary_or_drag_start|process-bdrag|process_bdrag|move-destination|move_destination|move-to|move_to|move-to-or-end-drag|move_to_or_end_drag|end_drag|copy-to|copy_to|copy-to-or-end-drag|copy_to_or_end_drag|exchange|process-cancel|process_cancel|paste-clipboard|paste_clipboard|copy-clipboard|copy_clipboard|cut-clipboard|cut_clipboard|copy-primary|copy_primary|cut-primary|cut_primary|newline|newline-and-indent|newline_and_indent|newline-no-indent|newline_no_indent|delete-selection|delete_selection|delete-previous-character|delete_previous_character|delete-next-character|delete_next_character|delete-previous-word|delete_previous_word|delete-next-word|delete_next_word|delete-to-start-of-line|delete_to_start_of_line|delete-to-end-of-line|delete_to_end_of_line|forward-character|forward_character|backward-character|backward_character|key-select|key_select|process-up|process_up|process-down|process_down|process-shift-up|process_shift_up|process-shift-down|process_shift_down|process-home|process_home|forward-word|forward_word|backward-word|backward_word|forward-paragraph|forward_paragraph|backward-paragraph|backward_paragraph|beginning-of-line|beginning_of_line|end-of-line|end_of_line|beginning-of-file|beginning_of_file|end-of-file|end_of_file|next-page|next_page|previous-page|previous_page|page-left|page_left|page-right|page_right|toggle-overstrike|toggle_overstrike|scroll-up|scroll_up|scroll-down|scroll_down|scroll_left|scroll_right|scroll-to-line|scroll_to_line|select-all|select_all|select_word|deselect-all|deselect_all|focusIn|focusOut|process-return|process_return|process-tab|process_tab|insert-string|insert_string|mouse_pan)(?=\\s*\\()\":::Subroutine::\n\
101 Macro Hooks:\"<(?:post_open|pre_open|post_save|cursor_moved|modified|focus|losing_focus)_hook(?=\\s*\\()\":::Subroutine1::\n\
102 Keyword:\"<(?:break|continue|define|delete|else|for|if|in|return|while)>\":::Keyword::\n\
103 Braces:\"[{}\\[\\]]\":::Keyword::\n\
104 diff --quilt old/doc/help.etx new/doc/help.etx
105 --- old/doc/help.etx
106 +++ new/doc/help.etx
107 @@ -2586,10 +2586,13 @@ Macro Subroutines
108 Additional optional arguments represent labels for buttons to appear along
109 the bottom of the dialog. Returns the number of the button pressed (the
110 first button is number 1), or 0 if the user closed the dialog via the window
111 close box.
113 +**eval( macro )**
114 + Compile and interpret ~macro~ as a macro program.
116 **filename_dialog( [title[, mode[, defaultPath[, filter[, defaultName]]]]] )**
117 Presents a file selection dialog with the given title to the user that
118 prompts for a new or existing file.
120 Options are: ~title~ will be the title of the dialog, defaults to "Choose