📄 menu.c
字号:
r->timer = install_timer(RESOURCE_INFO_REFRESH, (void (*)(void *))refresh, r);}#endifvoid flush_caches(struct terminal *term, void *d, void *e){ shrink_memory(SH_FREE_ALL);}/* jde v historii o psteps polozek dozadu */void go_backwards(struct terminal *term, void *psteps, struct session *ses){ long steps = (my_intptr_t) psteps; /*if (ses->tq_goto_position) --steps; if (ses->search_word) mem_free(ses->search_word), ses->search_word = NULL;*/ while (steps > 1) { struct location *loc = ses->history.next; if ((void *) loc == &ses->history) return; loc = loc->next; if ((void *) loc == &ses->history) return; destroy_location(loc); --steps; } if (steps) go_back(ses);}struct menu_item no_hist_menu[] = { { TEXT(T_NO_HISTORY), "", M_BAR, NULL, NULL, 0, 0 }, { NULL, NULL, 0, NULL, NULL, 0, 0 }};void history_menu(struct terminal *term, void *ddd, struct session *ses){ struct location *l; struct menu_item *mi = NULL; long n = 0; foreach(l, ses->history) { if (n) { unsigned char *url; if (!mi && !(mi = new_menu(3))) return; url = stracpy(l->url); if (strchr(url, POST_CHAR)) *strchr(url, POST_CHAR) = 0; add_to_menu(&mi, url, "", "", MENU_FUNC go_backwards, (void *) n, 0, n - 1); } n++; } if (n <= 1) do_menu(term, no_hist_menu, ses); else do_menu(term, mi, ses);}struct menu_item no_downloads_menu[] = { { TEXT(T_NO_DOWNLOADS), "", M_BAR, NULL, NULL, 0, 0 }, { NULL, NULL, 0, NULL, NULL, 0, 0 }};void downloads_menu(struct terminal *term, void *ddd, struct session *ses){ struct download *d; struct menu_item *mi = NULL; int n = 0; foreachback(d, downloads) { unsigned char *u; if (!mi) if (!(mi = new_menu(3))) return; u = stracpy(d->url); if (strchr(u, POST_CHAR)) *strchr(u, POST_CHAR) = 0; add_to_menu(&mi, u, "", "", MENU_FUNC display_download, d, 0, n); n++; } if (!n) do_menu(term, no_downloads_menu, ses); else do_menu(term, mi, ses);}void menu_doc_info(struct terminal *term, void *ddd, struct session *ses){ state_msg(ses);}void menu_head_info(struct terminal *term, void *ddd, struct session *ses){ head_msg(ses);}void menu_toggle(struct terminal *term, void *ddd, struct session *ses){ toggle(ses, ses->screen, 0);}void display_codepage(struct terminal *term, void *pcp, struct session *ses){ long cp = (my_intptr_t)pcp; struct term_spec *t = new_term_spec(term->term); if (t) t->charset = cp; cls_redraw_all_terminals();}void assumed_codepage(struct terminal *term, void *pcp, struct session *ses){ long cp = (my_intptr_t)pcp; ses->ds.assume_cp = cp; redraw_terminal_cls(term);}void charset_list(struct terminal *term, void *xxx, struct session *ses){ long i; int sel; unsigned char *n; struct menu_item *mi; if (!(mi = new_menu(1))) return; for (i = 0; (n = get_cp_name(i)); i++) { if (is_cp_special(i)) continue; add_to_menu(&mi, get_cp_name(i), "", "", MENU_FUNC display_codepage, (void *)i, 0, i); } sel = ses->term->spec->charset; if (sel < 0) sel = 0; do_menu_selected(term, mi, ses, sel);}void set_val(struct terminal *term, void *ip, int *d){ *d = (my_intptr_t)ip;}void charset_sel_list(struct terminal *term, struct session *ses, int *ptr, int noutf8){ long i; int sel; unsigned char *n; struct menu_item *mi; if (!(mi = new_menu(1))) return; for (i = 0; (n = get_cp_name(i)); i++) { if (noutf8 && is_cp_special(i)) continue; add_to_menu(&mi, get_cp_name(i), "", "", MENU_FUNC set_val, (void *)i, 0, i); } sel = *ptr; if (sel < 0) sel = 0; do_menu_selected(term, mi, ptr, sel);}void terminal_options_ok(void *p){ cls_redraw_all_terminals();}unsigned char *td_labels[] = { TEXT(T_NO_FRAMES), TEXT(T_VT_100_FRAMES), TEXT(T_LINUX_OR_OS2_FRAMES), TEXT(T_KOI8R_FRAMES), TEXT(T_FREEBSD_FRAMES), TEXT(T_USE_11M), TEXT(T_RESTRICT_FRAMES_IN_CP850_852), TEXT(T_BLOCK_CURSOR), TEXT(T_COLOR), TEXT(T_BRAILLE_TERMINAL), NULL };void terminal_options(struct terminal *term, void *xxx, struct session *ses){ struct dialog *d; struct term_spec *ts = new_term_spec(term->term); if (!ts) return; d = mem_calloc(sizeof(struct dialog) + 12 * sizeof(struct dialog_item)); d->title = TEXT(T_TERMINAL_OPTIONS); d->fn = checkbox_list_fn; d->udata = td_labels; d->refresh = (void (*)(void *))terminal_options_ok; d->items[0].type = D_CHECKBOX; d->items[0].gid = 1; d->items[0].gnum = TERM_DUMB; d->items[0].dlen = sizeof(int); d->items[0].data = (void *)&ts->mode; d->items[1].type = D_CHECKBOX; d->items[1].gid = 1; d->items[1].gnum = TERM_VT100; d->items[1].dlen = sizeof(int); d->items[1].data = (void *)&ts->mode; d->items[2].type = D_CHECKBOX; d->items[2].gid = 1; d->items[2].gnum = TERM_LINUX; d->items[2].dlen = sizeof(int); d->items[2].data = (void *)&ts->mode; d->items[3].type = D_CHECKBOX; d->items[3].gid = 1; d->items[3].gnum = TERM_KOI8; d->items[3].dlen = sizeof(int); d->items[3].data = (void *)&ts->mode; d->items[4].type = D_CHECKBOX; d->items[4].gid = 1; d->items[4].gnum = TERM_FREEBSD; d->items[4].dlen = sizeof(int); d->items[4].data = (void *)&ts->mode; d->items[5].type = D_CHECKBOX; d->items[5].gid = 0; d->items[5].dlen = sizeof(int); d->items[5].data = (void *)&ts->m11_hack; d->items[6].type = D_CHECKBOX; d->items[6].gid = 0; d->items[6].dlen = sizeof(int); d->items[6].data = (void *)&ts->restrict_852; d->items[7].type = D_CHECKBOX; d->items[7].gid = 0; d->items[7].dlen = sizeof(int); d->items[7].data = (void *)&ts->block_cursor; d->items[8].type = D_CHECKBOX; d->items[8].gid = 0; d->items[8].dlen = sizeof(int); d->items[8].data = (void *)&ts->col; d->items[9].type = D_CHECKBOX; d->items[9].gid = 0; d->items[9].dlen = sizeof(int); d->items[9].data = (void *)&ts->braille; d->items[10].type = D_BUTTON; d->items[10].gid = B_ENTER; d->items[10].fn = ok_dialog; d->items[10].text = TEXT(T_OK); d->items[11].type = D_BUTTON; d->items[11].gid = B_ESC; d->items[11].fn = cancel_dialog; d->items[11].text = TEXT(T_CANCEL); d->items[12].type = D_END; do_dialog(term, d, getml(d, NULL));}#ifdef JSunsigned char *jsopt_labels[] = { TEXT(T_KILL_ALL_SCRIPTS), TEXT(T_ENABLE_JAVASCRIPT), TEXT(T_VERBOSE_JS_ERRORS), TEXT(T_VERBOSE_JS_WARNINGS), TEXT(T_ENABLE_ALL_CONVERSIONS), TEXT(T_ENABLE_GLOBAL_NAME_RESOLUTION), TEXT(T_MANUAL_JS_CONTROL), TEXT(T_JS_RECURSION_DEPTH), TEXT(T_JS_MEMORY_LIMIT_KB), NULL };static int kill_script_opt;static unsigned char js_fun_depth_str[7];static unsigned char js_memory_limit_str[7];static inline void kill_js_recursively(struct f_data_c *fd){ struct f_data_c *f; if (fd->js) js_downcall_game_over(fd->js->ctx); foreach(f,fd->subframes) kill_js_recursively(f);}static inline void quiet_kill_js_recursively(struct f_data_c *fd){ struct f_data_c *f; if (fd->js)js_downcall_game_over(fd->js->ctx); foreach(f,fd->subframes) quiet_kill_js_recursively(f);}void refresh_javascript(struct session *ses){ if (ses->screen->f_data)jsint_scan_script_tags(ses->screen); if (kill_script_opt) kill_js_recursively(ses->screen); if (!js_enable) /* vypnuli jsme skribt */ { if (ses->default_status)mem_free(ses->default_status),ses->default_status=NULL; quiet_kill_js_recursively(ses->screen); } js_fun_depth=strtol(js_fun_depth_str,0,10); js_memory_limit=strtol(js_memory_limit_str,0,10); /* reparse document (muze se zmenit hodne veci) */ html_interpret_recursive(ses->screen); draw_formatted(ses);}void javascript_options(struct terminal *term, void *xxx, struct session *ses){ struct dialog *d; kill_script_opt=0; snprintf(js_fun_depth_str,7,"%d",js_fun_depth); snprintf(js_memory_limit_str,7,"%d",js_memory_limit); d = mem_calloc(sizeof(struct dialog) + 12 * sizeof(struct dialog_item)); d->title = TEXT(T_JAVASCRIPT_OPTIONS); d->fn = group_fn; d->refresh = (void (*)(void *))refresh_javascript; d->refresh_data=ses; d->udata = jsopt_labels; d->items[0].type = D_CHECKBOX; d->items[0].gid = 0; d->items[0].dlen = sizeof(int); d->items[0].data = (void *)&kill_script_opt; d->items[1].type = D_CHECKBOX; d->items[1].gid = 0; d->items[1].dlen = sizeof(int); d->items[1].data = (void *)&js_enable; d->items[2].type = D_CHECKBOX; d->items[2].gid = 0; d->items[2].dlen = sizeof(int); d->items[2].data = (void *)&js_verbose_errors; d->items[3].type = D_CHECKBOX; d->items[3].gid = 0; d->items[3].dlen = sizeof(int); d->items[3].data = (void *)&js_verbose_warnings; d->items[4].type = D_CHECKBOX; d->items[4].gid = 0; d->items[4].dlen = sizeof(int); d->items[4].data = (void *)&js_all_conversions; d->items[5].type = D_CHECKBOX; d->items[5].gid = 0; d->items[5].dlen = sizeof(int); d->items[5].data = (void *)&js_global_resolve; d->items[6].type = D_CHECKBOX; d->items[6].gid = 0; d->items[6].dlen = sizeof(int); d->items[6].data = (void *)&js_manual_confirmation; d->items[7].type = D_FIELD; d->items[7].dlen = 7; d->items[7].data = js_fun_depth_str; d->items[7].fn = check_number; d->items[7].gid = 1; d->items[7].gnum = 999999; d->items[8].type = D_FIELD; d->items[8].dlen = 7; d->items[8].data = js_memory_limit_str; d->items[8].fn = check_number; d->items[8].gid = 1024; d->items[8].gnum = 30*1024; d->items[9].type = D_BUTTON; d->items[9].gid = B_ENTER; d->items[9].fn = ok_dialog; d->items[9].text = TEXT(T_OK); d->items[10].type = D_BUTTON; d->items[10].gid = B_ESC; d->items[10].fn = cancel_dialog; d->items[10].text = TEXT(T_CANCEL); d->items[11].type = D_END; do_dialog(term, d, getml(d, NULL));}#endifunsigned char *http_labels[] = { TEXT(T_USE_HTTP_10), TEXT(T_ALLOW_SERVER_BLACKLIST), TEXT(T_BROKEN_302_REDIRECT), TEXT(T_NO_KEEPALIVE_AFTER_POST_REQUEST), TEXT(T_DO_NOT_SEND_ACCEPT_CHARSET), TEXT(T_DO_NOT_ADVERTISE_COMPRESSION_SUPPORT), TEXT(T_RETRY_ON_INTERNAL_ERRORS), TEXT(T_REFERER_NONE), TEXT(T_REFERER_SAME_URL), TEXT(T_REFERER_FAKE), TEXT(T_REFERER_REAL_SAME_SERVER), TEXT(T_REFERER_REAL), TEXT(T_FAKE_USERAGENT), TEXT(T_FAKE_REFERER) };void httpopt_fn(struct dialog_data *dlg){ struct terminal *term = dlg->win->term; int max = 0, min = 0; int w, rw; int y = 0; checkboxes_width(term, dlg->dlg->udata, &max, max_text_width); checkboxes_width(term, dlg->dlg->udata, &min, min_text_width); max_text_width(term, http_labels[dlg->n - 4], &max, AL_LEFT); min_text_width(term, http_labels[dlg->n - 4], &min, AL_LEFT); max_text_width(term, http_labels[dlg->n - 3], &max, AL_LEFT); min_text_width(term, http_labels[dlg->n - 3], &min, AL_LEFT); max_buttons_width(term, dlg->items + dlg->n - 2, 2, &max); min_buttons_width(term, dlg->items + dlg->n - 2, 2, &min); w = term->x * 9 / 10 - 2 * DIALOG_LB; if (w > max) w = max; if (w < min) w = min; if (w > term->x - 2 * DIALOG_LB) w = term->x - 2 * DIALOG_LB; if (w < 5) w = 5; rw = 0; dlg_format_checkboxes(dlg, NULL, dlg->items, dlg->n - 4, 0, &y, w, &rw, dlg->dlg->udata); y += gf_val(1, 1 * G_BFU_FONT_SIZE); dlg_format_text_and_field(dlg, NULL, http_labels[dlg->n - 4], dlg->items + dlg->n - 4, 0, &y, w, &rw, COLOR_DIALOG_TEXT, AL_LEFT); dlg_format_text_and_field(dlg, NULL, http_labels[dlg->n - 3], dlg->items + dlg->n - 3, 0, &y, w, &rw, COLOR_DIALOG_TEXT, AL_LEFT); y += gf_val(1, 1 * G_BFU_FONT_SIZE); dlg_format_buttons(dlg, NULL, dlg->items + dlg->n - 2, 2, 0, &y, w, &rw, AL_CENTER); w = rw; dlg->xw = rw + 2 * DIALOG_LB; dlg->yw = y + 2 * DIALOG_TB; center_dlg(dlg); draw_dlg(dlg); y = dlg->y + DIALOG_TB + gf_val(1, G_BFU_FONT_SIZE); dlg_format_checkboxes(dlg, term, dlg->items, dlg->n - 4, dlg->x + DIALOG_LB, &y, w, NULL, dlg->dlg->udata); y += gf_val(1, G_BFU_FONT_SIZE); dlg_format_text_and_field(dlg, term, http_labels[dlg->n - 4], dlg->items + dlg->n - 4, dlg->x + DIALOG_LB, &y, w, NULL, COLOR_DIALOG_TEXT, AL_LEFT); dlg_format_text_and_field(dlg, term, http_labels[dlg->n - 3], dlg->items + dlg->n - 3, dlg->x + DIALOG_LB, &y, w, NULL, COLOR_DIALOG_TEXT, AL_LEFT); y += gf_val(1, G_BFU_FONT_SIZE); dlg_format_buttons(dlg, term, dlg->items + dlg->n - 2, 2, dlg->x + DIALOG_LB, &y, w, &rw, AL_CENTER);}int dlg_http_options(struct dialog_data *dlg, struct dialog_item_data *di){ struct http_bugs *bugs = (struct http_bugs *)di->cdata; struct dialog *d; d = mem_calloc(sizeof(struct dialog) + 17 * sizeof(struct dialog_item)); d->title = TEXT(T_HTTP_BUG_WORKAROUNDS); d->fn = httpopt_fn; d->udata = http_labels; d->items[0].type = D_CHECKBOX; d->items[0].gid = 0; d->items[0].dlen = sizeof(int); d->items[0].data = (void *)&bugs->http10; d->items[1].type = D_CHECKBOX; d->items[1].gid = 0; d->items[1].dlen = sizeof(int);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -