Escape shell commands properly.
[uzbl-mobile] / uzbl.h
diff --git a/uzbl.h b/uzbl.h
index 6749994..506f1d3 100644 (file)
--- a/uzbl.h
+++ b/uzbl.h
@@ -1,4 +1,5 @@
-/* 
+/* -*- c-basic-offset: 4; -*- 
+
  * See LICENSE for license details
  *
  * Changelog:
@@ -7,15 +8,24 @@
  * (c) 2009 by Robert Manea
  *     - introduced struct concept
  *     - statusbar template
- *     
+ *
  */
 
 #define STATUS_DEFAULT "<span background=\"darkblue\" foreground=\"white\"> MODE </span> <span background=\"red\" foreground=\"white\">KEYCMD</span> (LOAD_PROGRESS%)  <b>TITLE</b>  - Uzbl browser"
 
-/* statusbar symbols */
-enum { SYM_TITLE, SYM_URI, SYM_NAME, 
-       SYM_LOADPRGS, SYM_LOADPRGSBAR,
-       SYM_KEYCMD, SYM_MODE, SYM_MSG};
+enum {
+  /* statusbar symbols */
+  SYM_TITLE, SYM_URI, SYM_NAME,
+  SYM_LOADPRGS, SYM_LOADPRGSBAR,
+  SYM_KEYCMD, SYM_MODE, SYM_MSG,
+  /* useragent symbols */
+  SYM_WK_MAJ, SYM_WK_MIN, SYM_WK_MIC,
+  SYM_SYSNAME, SYM_NODENAME,
+  SYM_KERNREL, SYM_KERNVER,
+  SYM_ARCHSYS, SYM_ARCHUZBL,
+  SYM_DOMAINNAME, SYM_COMMIT
+};
+
 const struct {
     gchar *symbol_name;
     guint symbol_token;
@@ -28,6 +38,18 @@ const struct {
     {"MSG",                  SYM_MSG},
     {"LOAD_PROGRESS",        SYM_LOADPRGS},
     {"LOAD_PROGRESSBAR",     SYM_LOADPRGSBAR},
+
+    {"WEBKIT_MAJOR",         SYM_WK_MAJ},
+    {"WEBKIT_MINOR",         SYM_WK_MIN},
+    {"WEBKIT_MICRO",         SYM_WK_MIC},
+    {"SYSNAME",              SYM_SYSNAME},
+    {"NODENAME",             SYM_NODENAME},
+    {"KERNREL",              SYM_KERNREL},
+    {"KERNVER",              SYM_KERNVER},
+    {"ARCH_SYSTEM",          SYM_ARCHSYS},
+    {"ARCH_UZBL",            SYM_ARCHUZBL},
+    {"DOMAINNAME",           SYM_DOMAINNAME},
+    {"COMMIT",               SYM_COMMIT},
     {NULL,                   0}
 }, *symp = symbols;
 
@@ -41,6 +63,8 @@ typedef struct {
 /* gui elements */
 typedef struct {
     GtkWidget*     main_window;
+    GtkWidget*     scrolled_win;
+    GtkWidget*     vbox;
     GtkWidget*     mainbar;
     GtkWidget*     mainbar_label;
     GtkScrollbar*  scbar_v;   // Horizontal and Vertical Scrollbar
@@ -63,9 +87,10 @@ typedef struct {
     GHashTable     *proto_var;
     /* command parsing regexes */
     GRegex         *set_regex;
-    GRegex         *cmd_regex;
-    GRegex         *get_regex; 
-    GRegex         *bind_regex; 
+    GRegex         *act_regex;
+    GRegex         *keycmd_regex;
+    GRegex         *get_regex;
+    GRegex         *bind_regex;
 } Communication;
 
 
@@ -80,6 +105,7 @@ typedef struct {
     GString* keycmd;
     gchar    searchtx[500];
     struct utsname unameinfo; /* system info */
+    gboolean verbose;
 } State;
 
 
@@ -108,10 +134,13 @@ typedef struct {
     gboolean show_status;
     gboolean insert_mode;
     gboolean status_top;
-    gboolean never_reset_mode;
+    gboolean reset_command_mode;
     gchar*   modkey;
     guint    modmask;
     guint    http_debug;
+    guint    default_font_size;
+    guint    minimum_font_size;
+    gchar*   shell_cmd;
 
     /* command list: name -> Command  */
     GHashTable* commands;
@@ -141,6 +170,22 @@ typedef struct {
 
 typedef void sigfunc(int);
 
+/* XDG Stuff */
+
+typedef struct {
+    gchar* environmental;
+    gchar* default_value;
+} XDG_Var;
+
+XDG_Var XDG[] = 
+{
+    { "XDG_CONFIG_HOME", "~/.config" },
+    { "XDG_DATA_HOME",   "~/.local/share" },
+    { "XDG_CACHE_HOME",  "~/.cache" },
+    { "XDG_CONFIG_DIRS", "/etc/xdg" },
+    { "XDG_DATA_DIRS",   "/usr/local/share/:/usr/share/" },
+};
+
 /* Functions */
 static void
 setup_scanner();
@@ -148,6 +193,9 @@ setup_scanner();
 char *
 itos(int val);
 
+static char *
+str_replace (const char* search, const char* replace, const char* string);
+
 static void
 clean_up(void);
 
@@ -215,21 +263,33 @@ static void
 close_uzbl (WebKitWebView *page, const char *param);
 
 static gboolean
-run_command_async(const char *command, const char *args);
-
-static gboolean
-run_command_sync(const char *command, const char *args, char **stdout);
+run_command(const char *command, const char *args, const gboolean sync, char **stdout);
 
 static void
 spawn(WebKitWebView *web_view, const char *param);
 
 static void
+spawn_sh(WebKitWebView *web_view, const char *param);
+
+static void
 parse_command(const char *cmd, const char *param);
 
+static void
+runcmd(WebKitWebView *page, const char *param);
+
+static void
+parse_cmd_line(const char *ctl_line);
+
 static gchar*
 build_stream_name(int type, const gchar *dir);
 
-static void
+static gboolean
+var_is(const char *x, const char *y);
+
+static gchar*
+set_useragent(gchar *val);
+
+static gboolean
 control_fifo(GIOChannel *gio, GIOCondition condition);
 
 static gchar*
@@ -244,16 +304,18 @@ create_stdin();
 static gchar*
 init_socket(gchar *dir);
 
-static void
+static gboolean
 control_socket(GIOChannel *chan);
 
 static void
 update_title (void);
+
 static gboolean
 key_press_cb (WebKitWebView* page, GdkEventKey* event);
 
+static void
+run_keycmd(const gboolean key_ret);
+
 static GtkWidget*
 create_browser ();
 
@@ -266,6 +328,12 @@ GtkWidget* create_window ();
 static void
 add_binding (const gchar *key, const gchar *act);
 
+static gchar*
+get_xdg_var (XDG_Var xdg);
+
+static gchar*
+find_xdg_file (int xdg_type, char* filename);
+
 static void
 settings_init ();
 
@@ -275,9 +343,6 @@ search_text (WebKitWebView *page, const char *param);
 static void
 run_js (WebKitWebView * web_view, const gchar *param);
 
-static char *
-str_replace (const char* search, const char* replace, const char* string);
-
 static void handle_cookies (SoupSession *session,
                                                        SoupMessage *msg,
                                                        gpointer     user_data);