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
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 },
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);
45 +static int evalMS(WindowInfo *window, DataValue *argList, int nArgs,
46 + DataValue *result, char **errMsg)
48 + char stringStorage[TYPE_INT_STR_SIZE(int)];
50 + char *macrosave = NULL;
51 + char *stoppedAt = NULL;
55 + return wrongNArgsErr(errMsg);
57 + if (!readStringArg(argList[0], ¯o, stringStorage, errMsg)) {
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);
71 + ParseError(window->shell, macrosave, stoppedAt, "eval()", *errMsg);
77 + /* run the executable program (prog is freed upon completion) */
78 + runMacro(window, prog);
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
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
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