void report_scripting_error(struct module *module, struct session *ses, unsigned char *msg) { struct terminal *term; struct string string; if (!ses) { if (list_empty(terminals)) { usrerror("[%s error] %s", module->name, msg); return; } term = terminals.next; } else { term = ses->tab->term; } if (!init_string(&string)) return; add_format_to_string(&string, _("An error occurred while running a %s script", term), module->name); add_format_to_string(&string, ":\n\n%s", msg); info_box(term, MSGBOX_NO_TEXT_INTL | MSGBOX_FREE_TEXT, N_("Browser scripting error"), ALIGN_LEFT, string.source); }
/* Inspired by Vim this is used to hook into the stdout write method so written * data is displayed in a nice message box. */ static VALUE erb_module_message(VALUE self, VALUE str) { unsigned char *message, *line_end; struct terminal *term; str = rb_obj_as_string(str); message = memacpy(RSTRING(str)->ptr, RSTRING(str)->len); if (!message) return Qnil; line_end = strchr(message, '\n'); if (line_end) *line_end = '\0'; term = get_default_terminal(); if (!term) { usrerror("[Ruby] %s", message); mem_free(message); return Qnil; } info_box(term, MSGBOX_NO_TEXT_INTL | MSGBOX_FREE_TEXT, N_("Ruby Message"), ALIGN_LEFT, message); return Qnil; }
/* The global Kernel::p method will for each object, directly write * object.inspect() followed by the current output record separator to the * program's standard output and will bypass the Ruby I/O libraries. * * Inspired by Vim we hook into the method and pop up a nice message box so it * can be used to easily debug scripts without dirtying the screen. */ static VALUE erb_stdout_p(int argc, VALUE *argv, VALUE self) { int i; struct string string; struct terminal *term; if (!init_string(&string)) return Qnil; for (i = 0; i < argc; i++) { VALUE substr; unsigned char *ptr; int len; if (i > 0) add_to_string(&string, ", "); substr = rb_inspect(argv[i]); /* The Ruby p() function writes variable number of objects using * the inspect() method, which adds quotes to the strings, so * gently ignore them. */ ptr = RSTRING(substr)->ptr; len = RSTRING(substr)->len; if (*ptr == '"') ptr++, len--; if (ptr[len - 1] == '"') len--; add_bytes_to_string(&string, ptr, len); } term = get_default_terminal(); if (!term) { usrerror("[Ruby] %s", string.source); done_string(&string); return Qnil; } info_box(term, MSGBOX_NO_TEXT_INTL | MSGBOX_FREE_TEXT, N_("Ruby Message"), ALIGN_LEFT, string.source); return Qnil; }