Do a show_oops when a download is finished
[xxxterm.git] / xxxterm.h
blobf52553ca4f060ed2b813b83e5147c28b56080fcf
1 /*
2 * Copyright (c) 2011 Conformal Systems LLC <info@conformal.com>
3 * Copyright (c) 2011 Marco Peereboom <marco@peereboom.us>
4 * Copyright (c) 2010, 2011, 2012 Edd Barrett <vext01@gmail.com>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include <ctype.h>
20 #include <dlfcn.h>
21 #include <err.h>
22 #include <errno.h>
23 #include <libgen.h>
24 #include <pwd.h>
25 #include <regex.h>
26 #include <signal.h>
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30 #include <unistd.h>
31 #include <dirent.h>
32 #include <fcntl.h>
33 #include <inttypes.h>
35 #include <sys/types.h>
36 #if defined(__linux__)
37 #include "linux/util.h"
38 #include "linux/tree.h"
39 #include <bsd/stdlib.h>
40 # if !defined(sane_libbsd_headers)
41 void arc4random_buf(void *, size_t);
42 u_int32_t arc4random_uniform(u_int32_t);
43 # endif
44 #elif defined(__FreeBSD__)
45 #include <libutil.h>
46 #include "freebsd/util.h"
47 #include <sys/tree.h>
48 #elif defined(__OpenBSD__)
49 #include <util.h>
50 #include <sys/tree.h>
51 #else
52 void arc4random_buf(void *, size_t);
53 uint32_t arc4random_uniform(uint32_t);
54 #include "tree.h"
55 #endif
56 #include <sys/queue.h>
57 #include <sys/socket.h>
58 #include <sys/stat.h>
59 #include <sys/time.h>
60 #include <sys/un.h>
62 #include <X11/Xlib.h>
63 #include <gtk/gtk.h>
64 #include <gdk/gdkkeysyms.h>
66 #if GTK_CHECK_VERSION(3,0,0)
67 /* we still use GDK_* instead of GDK_KEY_* */
68 #include <gdk/gdkkeysyms-compat.h>
69 #endif
71 #include <webkit/webkit.h>
72 #include <libsoup/soup.h>
73 #include <JavaScriptCore/JavaScript.h>
74 #include <gnutls/gnutls.h>
75 #include <gnutls/x509.h>
77 /* comment if you don't want to use threads */
78 #define USE_THREADS
80 #ifdef USE_THREADS
81 #include <gcrypt.h>
82 #include <pthread.h>
83 #endif
85 /* set if you don't want to use signals */
86 #ifndef XT_SIGNALS_DISABLE
87 #include <sys/wait.h>
88 #endif
90 /* set if you don't want to use resource limits */
91 #ifndef XT_RESOURCE_LIMITS_DISABLE
92 #include <sys/resource.h>
93 #endif
95 #include "javascript.h"
97 javascript.h borrowed from vimprobable2 under the following license:
99 Copyright (c) 2009 Leon Winter
100 Copyright (c) 2009-2011 Hannes Schueller
101 Copyright (c) 2009-2010 Matto Fransen
102 Copyright (c) 2010-2011 Hans-Peter Deifel
103 Copyright (c) 2010-2011 Thomas Adam
104 Copyright (c) 2011 Albert Kim
105 Copyright (c) 2011 Daniel Carl
107 Permission is hereby granted, free of charge, to any person obtaining a copy
108 of this software and associated documentation files (the "Software"), to deal
109 in the Software without restriction, including without limitation the rights
110 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
111 copies of the Software, and to permit persons to whom the Software is
112 furnished to do so, subject to the following conditions:
114 The above copyright notice and this permission notice shall be included in
115 all copies or substantial portions of the Software.
117 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
118 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
119 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
120 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
121 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
122 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
123 THE SOFTWARE.
126 /*#define XT_DEBUG*/
127 #ifdef XT_DEBUG
128 #define DPRINTF(x...) do { if (swm_debug) fprintf(stderr, x); } while (0)
129 #define DNPRINTF(n,x...) do { if (swm_debug & n) fprintf(stderr, x); } while (0)
130 #define XT_D_MOVE 0x0001
131 #define XT_D_KEY 0x0002
132 #define XT_D_TAB 0x0004
133 #define XT_D_URL 0x0008
134 #define XT_D_CMD 0x0010
135 #define XT_D_NAV 0x0020
136 #define XT_D_DOWNLOAD 0x0040
137 #define XT_D_CONFIG 0x0080
138 #define XT_D_JS 0x0100
139 #define XT_D_FAVORITE 0x0200
140 #define XT_D_PRINTING 0x0400
141 #define XT_D_COOKIE 0x0800
142 #define XT_D_KEYBINDING 0x1000
143 #define XT_D_CLIP 0x2000
144 #define XT_D_BUFFERCMD 0x4000
145 #define XT_D_INSPECTOR 0x8000
146 #define XT_D_VISITED 0x10000
147 #define XT_D_HISTORY 0x20000
148 extern uint32_t swm_debug;
149 #else
150 #define DPRINTF(x...)
151 #define DNPRINTF(n,x...)
152 #endif
154 #define LENGTH(x) (sizeof x / sizeof x[0])
155 #define CLEAN(mask) (mask & ~(GDK_MOD2_MASK) & \
156 ~(GDK_BUTTON1_MASK) & \
157 ~(GDK_BUTTON2_MASK) & \
158 ~(GDK_BUTTON3_MASK) & \
159 ~(GDK_BUTTON4_MASK) & \
160 ~(GDK_BUTTON5_MASK))
162 #define XT_MARKS "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'"
163 #define XT_NOMARKS (sizeof(XT_MARKS) - 1)
164 #define XT_QMARKS "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
165 #define XT_NOQMARKS (sizeof(XT_QMARKS) - 1)
167 /* Path Separator */
168 #ifndef PS
169 #define PS "/"
170 #endif
172 struct tab {
173 TAILQ_ENTRY(tab) entry;
174 GtkWidget *vbox;
175 GtkWidget *tab_content;
176 struct {
177 GtkWidget *label;
178 GtkWidget *favicon;
179 GtkWidget *eventbox;
180 GtkWidget *box;
181 GtkWidget *sep;
182 } tab_elems;
183 GtkWidget *label;
184 GtkWidget *spinner;
185 GtkWidget *uri_entry;
186 GtkStyle *default_style;
187 GtkWidget *search_entry;
188 GtkWidget *toolbar;
189 GtkWidget *browser_win;
190 GtkWidget *statusbar_box;
191 struct {
192 GtkWidget *statusbar;
193 GtkWidget *buffercmd;
194 GtkWidget *zoom;
195 GtkWidget *position;
196 } sbe;
197 GtkWidget *cmd;
198 GtkWidget *buffers;
199 GtkWidget *oops;
200 GtkWidget *backward;
201 GtkWidget *forward;
202 GtkWidget *stop;
203 GtkWidget *gohome;
204 GtkWidget *js_toggle;
205 GtkEntryCompletion *completion;
206 guint tab_id;
207 WebKitWebView *wv;
209 WebKitWebHistoryItem *item;
210 WebKitWebBackForwardList *bfl;
212 /* favicon */
213 WebKitNetworkRequest *icon_request;
214 WebKitDownload *icon_download;
215 gchar *icon_dest_uri;
217 /* adjustments for browser */
218 GtkScrollbar *sb_h;
219 GtkScrollbar *sb_v;
220 GtkAdjustment *adjust_h;
221 GtkAdjustment *adjust_v;
223 /* flags */
224 int mode;
225 #define XT_MODE_COMMAND (0)
226 #define XT_MODE_INSERT (1)
227 #define XT_MODE_HINT (2)
228 #define XT_MODE_PASSTHROUGH (3)
229 int (*mode_cb)(struct tab *, GdkEventKey *, gpointer);
230 gpointer mode_cb_data;
231 int focus_wv;
232 int ctrl_click;
233 gchar *status;
234 int xtp_meaning; /* identifies dls/favorites */
235 gchar *tmp_uri;
236 int popup; /* 1 if cmd_entry has popup visible */
237 #ifdef USE_THREADS
238 /* https thread stuff */
239 GThread *thread;
240 #endif
241 /* hints */
242 int script_init;
243 int new_tab;
245 /* custom stylesheet */
246 int styled;
247 char *stylesheet;
249 /* search */
250 char *search_text;
251 int search_forward;
252 guint search_id;
254 /* settings */
255 WebKitWebSettings *settings;
256 gchar *user_agent;
257 gboolean load_images;
259 /* marks */
260 double mark[XT_NOMARKS];
262 /* inspector */
263 WebKitWebInspector *inspector;
264 GtkWidget *inspector_window;
265 GtkWidget *inspector_view;
267 TAILQ_HEAD(tab_list, tab);
269 struct karg {
270 int i;
271 char *s;
272 int precount;
275 struct download {
276 RB_ENTRY(download) entry;
277 int id;
278 WebKitDownload *download;
279 struct tab *tab;
281 RB_HEAD(download_list, download);
282 RB_PROTOTYPE(download_list, download, entry, download_rb_cmp);
284 struct history {
285 RB_ENTRY(history) entry;
286 gchar *uri;
287 gchar *title;
288 time_t time; /* When the item was added. */
290 RB_HEAD(history_list, history);
291 RB_PROTOTYPE(history_list, history, entry, history_rb_cmp);
293 #define XT_STS_FLAGS_INCLUDE_SUBDOMAINS (1)
294 #define XT_STS_FLAGS_EXPAND (2)
295 #define XT_STS_FILE ("strict-transport")
297 struct strict_transport {
298 RB_ENTRY(strict_transport) entry;
299 gchar *host;
300 time_t timeout;
301 int flags;
303 RB_HEAD(strict_transport_tree, strict_transport);
304 RB_PROTOTYPE(strict_transport_tree, strict_transport, entry, strict_transport_rb_cmp);
306 /* utility */
307 #define XT_NAME ("XXXTerm")
308 #define XT_CB_HANDLED (TRUE)
309 #define XT_CB_PASSTHROUGH (FALSE)
310 #define XT_FAVS_FILE ("favorites")
311 #define XT_SOD_FILE ("startofday")
313 int run_script(struct tab *, char *);
314 void xt_icon_from_file(struct tab *, char *);
315 GtkWidget *create_window(const gchar *);
316 void show_oops(struct tab *, const char *, ...);
317 gchar *get_html_page(gchar *, gchar *, gchar *, bool);
318 const gchar *get_uri(struct tab *);
319 const gchar *get_title(struct tab *, bool);
320 void load_uri(struct tab *t, gchar *uri);
321 gboolean match_uri(const gchar *uri, const gchar *key);
322 int valid_url_type(char *);
324 void load_webkit_string(struct tab *, const char *, gchar *);
325 void button_set_stockid(GtkWidget *, char *);
327 /* cookies */
328 int remove_cookie(int);
329 int remove_cookie_domain(int);
330 int remove_cookie_all(void);
331 void print_cookie(char *msg, SoupCookie *);
332 void setup_cookies(void);
334 /* history */
335 int insert_history_item(const gchar *uri, const gchar *title, time_t time);
336 int save_global_history_to_disk(struct tab *t);
337 int restore_global_history(void);
338 char *color_visited_helper(void);
339 int color_visited(struct tab *t, char *visited);
341 /* completion */
342 void completion_add(struct tab *);
343 void completion_add_uri(const gchar *uri);
345 /* external editor */
346 #define XT_EE_BUFSZ (64 * 1024)
347 int edit_src(struct tab *t, struct karg *args);
348 int edit_element(struct tab *t, struct karg *a);
350 /* proxy */
351 #define XT_PRXY_SHOW (1<<0)
352 #define XT_PRXY_TOGGLE (1<<1)
354 /* inspector */
355 #define XT_INS_SHOW (1<<0)
356 #define XT_INS_HIDE (1<<1)
357 #define XT_INS_CLOSE (1<<2)
359 WebKitWebView* inspector_inspect_web_view_cb(WebKitWebInspector *,
360 WebKitWebView*, struct tab *);
361 void setup_inspector(struct tab *);
362 int inspector_cmd(struct tab *, struct karg *);
364 /* tld public suffix */
365 void tld_tree_init();
366 char *tld_get_suffix(const char *);
368 /* about */
369 #define XT_XTP_STR "xxxt://"
370 #define XT_URI_ABOUT ("about:")
371 #define XT_URI_ABOUT_LEN (strlen(XT_URI_ABOUT))
372 #define XT_URI_ABOUT_ABOUT ("about")
373 #define XT_URI_ABOUT_ALLTHETHINGS ("allthethings")
374 #define XT_URI_ABOUT_BLANK ("blank")
375 #define XT_URI_ABOUT_CERTS ("certs")
376 #define XT_URI_ABOUT_COOKIEWL ("cookiewl")
377 #define XT_URI_ABOUT_COOKIEJAR ("cookiejar")
378 #define XT_URI_ABOUT_DOWNLOADS ("downloads")
379 #define XT_URI_ABOUT_FAVORITES ("favorites")
380 #define XT_URI_ABOUT_HELP ("help")
381 #define XT_URI_ABOUT_HISTORY ("history")
382 #define XT_URI_ABOUT_JSWL ("jswl")
383 #define XT_URI_ABOUT_PLUGINWL ("plwl")
384 #define XT_URI_ABOUT_SET ("set")
385 #define XT_URI_ABOUT_STATS ("stats")
386 #define XT_URI_ABOUT_MARCO ("marco")
387 #define XT_URI_ABOUT_STARTPAGE ("startpage")
388 #define XT_URI_ABOUT_WEBKIT ("webkit")
390 struct about_type {
391 char *name;
392 int (*func)(struct tab *, struct karg *);
395 struct sp {
396 char *line;
397 TAILQ_ENTRY(sp) entry;
399 TAILQ_HEAD(sp_list, sp);
401 int blank(struct tab *, struct karg *);
402 int help(struct tab *, struct karg *);
403 int about(struct tab *, struct karg *);
404 int stats(struct tab *, struct karg *);
405 void show_certs(struct tab *, gnutls_x509_crt_t *,
406 size_t, char *);
407 int ca_cmd(struct tab *, struct karg *);
408 int cookie_show_wl(struct tab *, struct karg *);
409 int xtp_page_cl(struct tab *, struct karg *);
410 int xtp_page_dl(struct tab *, struct karg *);
411 int xtp_page_fl(struct tab *, struct karg *);
412 int xtp_page_hl(struct tab *, struct karg *);
413 int parse_xtp_url(struct tab *, const char *);
414 int add_favorite(struct tab *, struct karg *);
415 void update_favorite_tabs(struct tab *);
416 void update_history_tabs(struct tab *);
417 void update_download_tabs(struct tab *);
418 void xtp_generate_keys(void);
419 size_t about_list_size(void);
420 int cookie_cmd(struct tab *, struct karg *);
421 int js_cmd(struct tab *, struct karg *);
422 int pl_cmd(struct tab *, struct karg *);
423 void startpage_add(const char *, ...);
426 * xtp tab meanings
427 * identifies which tabs have xtp pages in (corresponding to about_list indices)
429 #define XT_XTP_TAB_MEANING_NORMAL (-1) /* normal url */
430 #define XT_XTP_TAB_MEANING_BL (1) /* about:blank in this tab */
431 #define XT_XTP_TAB_MEANING_CL (4) /* cookie manager in this tab */
432 #define XT_XTP_TAB_MEANING_DL (5) /* download manager in this tab */
433 #define XT_XTP_TAB_MEANING_FL (6) /* favorite manager in this tab */
434 #define XT_XTP_TAB_MEANING_HL (8) /* history manager in this tab */
436 /* whitelists */
437 #define XT_WL_TOGGLE (1<<0)
438 #define XT_WL_ENABLE (1<<1)
439 #define XT_WL_DISABLE (1<<2)
440 #define XT_WL_FQDN (1<<3) /* default */
441 #define XT_WL_TOPLEVEL (1<<4)
442 #define XT_WL_PERSISTENT (1<<5)
443 #define XT_WL_SESSION (1<<6)
444 #define XT_WL_RELOAD (1<<7)
445 #define XT_SHOW (1<<8)
446 #define XT_DELETE (1<<9)
447 #define XT_SAVE (1<<10)
448 #define XT_OPEN (1<<11)
450 #define XT_WL_INVALID (0)
451 #define XT_WL_JAVASCRIPT (1)
452 #define XT_WL_COOKIE (2)
453 #define XT_WL_PLUGIN (3)
455 struct domain {
456 RB_ENTRY(domain) entry;
457 gchar *d;
458 int handy; /* app use */
460 RB_HEAD(domain_list, domain);
461 RB_PROTOTYPE(domain_list, domain, entry, domain_rb_cmp);
463 int wl_show(struct tab *, struct karg *, char *,
464 struct domain_list *);
466 /* uri aliases */
467 struct alias {
468 char *a_name;
469 char *a_uri;
470 TAILQ_ENTRY(alias) entry;
472 TAILQ_HEAD(alias_list, alias);
474 /* mime types */
475 struct mime_type {
476 char *mt_type;
477 char *mt_action;
478 int mt_default;
479 int mt_download;
480 TAILQ_ENTRY(mime_type) entry;
482 TAILQ_HEAD(mime_type_list, mime_type);
484 struct domain * wl_find(const gchar *, struct domain_list *);
485 int wl_save(struct tab *, struct karg *, int);
486 int toggle_cwl(struct tab *, struct karg *);
487 int toggle_js(struct tab *, struct karg *);
488 int toggle_pl(struct tab *, struct karg *);
490 /* input autofocus */
491 void input_autofocus(struct tab *);
492 void input_focus_blur(struct tab *, void *);
493 void *input_check_mode(struct tab *);
494 int command_mode(struct tab *, struct karg *);
496 /* OS specific */
497 int fork_exec(struct tab *, char *, const gchar *, char *, int);
499 /* settings */
500 #define XT_BM_NORMAL (0)
501 #define XT_BM_WHITELIST (1)
502 #define XT_BM_KIOSK (2)
504 #define XT_GM_CLASSIC (0)
505 #define XT_GM_MINIMAL (1)
507 #define XT_TABS_NORMAL (0)
508 #define XT_TABS_COMPACT (1)
510 #define XT_EM_HYBRID (0)
511 #define XT_EM_VI (1)
513 #define XT_DM_START (0)
514 #define XT_DM_ASK (1)
515 #define XT_DM_ADD (2)
517 #define XT_REFERER_ALWAYS (0)
518 #define XT_REFERER_NEVER (1)
519 #define XT_REFERER_SAME_DOMAIN (2)
520 #define XT_REFERER_CUSTOM (3)
521 #define XT_REFERER_SAME_FQDN (4)
523 #define CTRL GDK_CONTROL_MASK
524 #define MOD1 GDK_MOD1_MASK
525 #define SHFT GDK_SHIFT_MASK
527 /* actions */
528 #define XT_STYLE_CURRENT_TAB (0)
529 #define XT_STYLE_GLOBAL (1)
531 #define XT_TAB_LAST (-4)
532 #define XT_TAB_FIRST (-3)
533 #define XT_TAB_PREV (-2)
534 #define XT_TAB_NEXT (-1)
535 #define XT_TAB_INVALID (0)
536 #define XT_TAB_NEW (1)
537 #define XT_TAB_DELETE (2)
538 #define XT_TAB_DELQUIT (3)
539 #define XT_TAB_OPEN (4)
540 #define XT_TAB_UNDO_CLOSE (5)
541 #define XT_TAB_SHOW (6)
542 #define XT_TAB_HIDE (7)
543 #define XT_TAB_NEXTSTYLE (8)
544 #define XT_TAB_LOAD_IMAGES (9)
546 #define XT_URL_SHOW (1)
547 #define XT_URL_HIDE (2)
549 struct key_binding {
550 char *cmd;
551 guint mask;
552 guint use_in_entry;
553 guint key;
554 TAILQ_ENTRY(key_binding) entry; /* in bss so no need to init */
556 TAILQ_HEAD(keybinding_list, key_binding);
558 struct user_agent {
559 char *value;
560 TAILQ_ENTRY(user_agent) entry;
562 TAILQ_HEAD(user_agent_list, user_agent);
564 struct settings {
565 char *name;
566 int type;
567 #define XT_S_INVALID (0)
568 #define XT_S_INT (1)
569 #define XT_S_STR (2)
570 #define XT_S_FLOAT (3)
571 uint32_t flags;
572 #define XT_SF_RESTART (1<<0)
573 #define XT_SF_RUNTIME (1<<1)
574 int *ival;
575 char **sval;
576 struct special *s;
577 gfloat *fval;
578 int (*activate)(char *);
581 int set(struct tab *, struct karg *);
582 size_t get_settings_size(void);
583 int settings_add(char *, char *);
584 void setup_proxy(char *);
585 int set_browser_mode(struct settings *, char *);
586 int set_encoding(struct tab *, struct karg *);
587 int set_gui_mode(struct settings *, char *);
588 int set_cookie_policy(struct settings *, char *);
589 int set_ssl_ca_file(char *);
590 char *get_browser_mode(struct settings *);
591 char *get_gui_mode(struct settings *);
592 char *get_cookie_policy(struct settings *);
593 void init_keybindings(void);
594 void config_parse(char *, int);
595 char *get_setting_name(int);
596 void statusbar_set_visibility(void);
597 int tabaction(struct tab *, struct karg *);
598 int urlaction(struct tab *, struct karg *);
599 int userstyle(struct tab *, struct karg *);
600 struct tab *get_current_tab(void);
601 int resizetab(struct tab *, struct karg *);
603 #define XT_DL_START (0)
604 #define XT_DL_RESTART (1)
605 int download_start(struct tab *, struct download *, int flag);
607 extern int tabless;
608 extern int enable_socket;
609 extern int single_instance;
610 extern int fancy_bar;
611 extern int browser_mode;
612 extern int enable_localstorage;
613 extern char *statusbar_elems;
615 extern int show_tabs;
616 extern int tab_style;
617 extern int show_url;
618 extern int show_statusbar;
619 extern int ctrl_click_focus;
620 extern int cookies_enabled;
621 extern int read_only_cookies;
622 extern int enable_scripts;
623 extern int enable_plugins;
624 extern gfloat default_zoom_level;
625 extern char default_script[PATH_MAX];
626 extern int window_height;
627 extern int window_width;
628 extern int window_maximize;
629 extern int icon_size;
630 extern int refresh_interval;
631 extern int enable_plugin_whitelist;
632 extern int enable_cookie_whitelist;
633 extern int enable_js_whitelist;
634 extern int session_timeout;
635 extern int cookie_policy;
636 extern char *ssl_ca_file;
637 extern char *resource_dir;
638 extern gboolean ssl_strict_certs;
639 extern gboolean enable_strict_transport;
640 extern int append_next;
641 extern char *home;
642 extern char *search_string;
643 extern char *http_proxy;
644 extern char *external_editor;
645 extern char download_dir[PATH_MAX];
646 extern int download_mode;
647 extern char runtime_settings[PATH_MAX];
648 extern int allow_volatile_cookies;
649 extern int color_visited_uris;
650 extern int save_global_history;
651 extern struct user_agent *user_agent;
652 extern int save_rejected_cookies;
653 extern int session_autosave;
654 extern int guess_search;
655 extern int dns_prefetch;
656 extern gint max_connections;
657 extern gint max_host_connections;
658 extern gint enable_spell_checking;
659 extern char *spell_check_languages;
660 extern int xterm_workaround;
661 extern char *url_regex;
662 extern int history_autosave;
663 extern char search_file[PATH_MAX];
664 extern char command_file[PATH_MAX];
665 extern char *encoding;
666 extern int autofocus_onload;
667 extern int enable_js_autorun;
668 extern char *cmd_font_name;
669 extern char *oops_font_name;
670 extern char *statusbar_font_name;
671 extern char *tabbar_font_name;
672 extern int edit_mode;
673 extern int userstyle_global;
674 extern int auto_load_images;
675 extern int enable_autoscroll;
676 extern int enable_favicon_entry;
677 extern int enable_favicon_tabs;
678 extern int referer_mode;
679 extern char *referer_custom;
681 /* globals */
682 extern char *version;
683 extern char *icons[];
684 extern char rc_fname[PATH_MAX];
685 extern char work_dir[PATH_MAX];
686 extern char temp_dir[PATH_MAX];
687 extern struct passwd *pwd;
688 extern SoupCookieJar *s_cookiejar;
689 extern SoupCookieJar *p_cookiejar;
690 extern SoupSession *session;
691 extern GtkNotebook *notebook;
692 extern GtkListStore *completion_model;
693 extern uint64_t blocked_cookies;
695 extern void (*_soup_cookie_jar_add_cookie)(SoupCookieJar *, SoupCookie *);
697 extern struct history_list hl;
698 extern int hl_purge_count;
699 extern struct download_list downloads;
700 extern struct tab_list tabs;
701 extern struct about_type about_list[];
702 extern struct domain_list c_wl;
703 extern struct domain_list js_wl;
704 extern struct domain_list pl_wl;
705 extern struct strict_transport_tree st_tree;
706 extern struct alias_list aliases;
707 extern struct mime_type_list mtl;
708 extern struct keybinding_list kbl;
709 extern struct sp_list spl;
710 extern struct user_agent_list ua_list;
711 extern int user_agent_count;
713 extern PangoFontDescription *cmd_font;
714 extern PangoFontDescription *oops_font;
715 extern PangoFontDescription *statusbar_font;
716 extern PangoFontDescription *tabbar_font;