Merge branch 'experimental' of git://github.com/Dieterbe/uzbl into replace-expand...
authorBrendan Taylor <whateley@gmail.com>
Fri, 17 Jul 2009 00:01:24 +0000 (18:01 -0600)
committerBrendan Taylor <whateley@gmail.com>
Fri, 17 Jul 2009 00:01:24 +0000 (18:01 -0600)
Conflicts:
Makefile
tests/Makefile
uzbl.c
uzbl.h

1  2 
Makefile
README
tests/Makefile
uzbl.c
uzbl.h

diff --cc Makefile
Simple merge
diff --cc README
Simple merge
diff --cc tests/Makefile
Simple merge
diff --cc uzbl.c
--- 1/uzbl.c
--- 2/uzbl.c
+++ b/uzbl.c
  
  Uzbl uzbl;
  
  /* commandline arguments (set initial values for the state variables) */
- static const
+ const
  GOptionEntry entries[] =
  {
 -    { "uri",     'u', 0, G_OPTION_ARG_STRING, &uzbl.state.uri,
 +    { "uri",      'u', 0, G_OPTION_ARG_STRING, &uzbl.state.uri,
          "Uri to load at startup (equivalent to 'set uri = URI')", "URI" },
 -    { "verbose", 'v', 0, G_OPTION_ARG_NONE,   &uzbl.state.verbose,
 +    { "verbose",  'v', 0, G_OPTION_ARG_NONE,   &uzbl.state.verbose,
          "Whether to print all messages or just errors.", NULL },
 -    { "name",    'n', 0, G_OPTION_ARG_STRING, &uzbl.state.instance_name,
 +    { "name",     'n', 0, G_OPTION_ARG_STRING, &uzbl.state.instance_name, 
          "Name of the current instance (defaults to Xorg window id)", "NAME" },
 -    { "config",  'c', 0, G_OPTION_ARG_STRING, &uzbl.state.config_file,
 +    { "config",   'c', 0, G_OPTION_ARG_STRING, &uzbl.state.config_file,   
          "Config file (this is pretty much equivalent to uzbl < FILE )", "FILE" },
 -    { "socket",  's', 0, G_OPTION_ARG_INT, &uzbl.state.socket_id,
 +    { "socket",   's', 0, G_OPTION_ARG_INT, &uzbl.state.socket_id,   
          "Socket ID", "SOCKET" },
 +    { "geometry", 'g', 0, G_OPTION_ARG_STRING, &uzbl.gui.geometry, 
 +        "Set window geometry (format: WIDTHxHEIGHT+-X+-Y)", "GEOMETRY" },
      { "version",  'V', 0, G_OPTION_ARG_NONE, &uzbl.behave.print_version,
          "Print the version and exit", NULL },
      { NULL,      0, 0, 0, NULL, NULL, NULL }
@@@ -215,9 -194,8 +214,8 @@@ make_var_to_name_hash() 
  }
  
  /* --- UTILITY FUNCTIONS --- */
 -enum {EXP_ERR, EXP_SIMPLE_VAR, EXP_BRACED_VAR, EXP_EXPR, EXP_JS};
 +enum {EXP_ERR, EXP_SIMPLE_VAR, EXP_BRACED_VAR, EXP_EXPR, EXP_JS, EXP_ESCAPE};
- static guint
+ guint
  get_exp_type(gchar *s) {
      /* variables */
      if(*(s+1) == '(')
@@@ -305,15 -281,15 +303,16 @@@ expand(char *s, guint recurse) 
                  if(etype == EXP_SIMPLE_VAR ||
                     etype == EXP_BRACED_VAR) {
                      if( (c = g_hash_table_lookup(uzbl.comm.proto_var, ret)) ) {
 -                        if(c->type == TYPE_STR)
 +                        if(c->type == TYPE_STR && *c->ptr != NULL) {
                              g_string_append(buf, (gchar *)*c->ptr);
 -                        else if(c->type == TYPE_INT) {
 +                        } else if(c->type == TYPE_INT) {
-                             char *b = itos((uintptr_t)*c->ptr);
-                             g_string_append(buf, b);
-                             g_free(b);
+                             g_string_append_printf(buf, "%d", (int)*c->ptr);
+                         }
+                         else if(c->type == TYPE_FLOAT) {
+                             g_string_append_printf(buf, "%f", *(float *)c->ptr);
                          }
                      }
 +
                      if(etype == EXP_SIMPLE_VAR)
                          s = vend;
                      else
@@@ -475,9 -436,10 +474,10 @@@ clean_up(void) 
          unlink (uzbl.comm.socket_path);
  
      g_free(uzbl.state.executable_path);
 -    g_string_free(uzbl.state.keycmd, TRUE);
 +    g_free(uzbl.state.keycmd);
      g_hash_table_destroy(uzbl.bindings);
      g_hash_table_destroy(uzbl.behave.commands);
+     g_scanner_destroy(uzbl.scan);
  }
  
  /* used for html_mode_timeout
@@@ -629,21 -591,7 +629,21 @@@ scroll_horz(WebKitWebView* page, GArra
      scroll(uzbl.gui.bar_h, argv);
  }
  
- static void
+ void
 +cmd_set_geometry() {
 +    if(!gtk_window_parse_geometry(GTK_WINDOW(uzbl.gui.main_window), uzbl.gui.geometry)) {
 +        if(uzbl.state.verbose)
 +            printf("Error in geometry string: %s\n", uzbl.gui.geometry);
 +    }
 +    /* update geometry var with the actual geometry 
 +       this is necessary as some WMs don't seem to honour
 +       the above setting and we don't want to end up with
 +       wrong geometry information
 +    */
 +    retreive_geometry();
 +}
 +
- static void
++void
  cmd_set_status() {
      if (!uzbl.behave.show_status) {
          gtk_widget_hide(uzbl.gui.mainbar);
@@@ -723,12 -667,7 +723,12 @@@ load_finish_cb (WebKitWebView* page, We
          run_handler(uzbl.behave.load_finish_handler, "");
  }
  
 +void clear_keycmd() {
 +  g_free(uzbl.state.keycmd);
 +  uzbl.state.keycmd = g_strdup("");
 +}
 +
- static void
+ void
  load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) {
      (void) page;
      (void) frame;
@@@ -902,22 -841,7 +902,25 @@@ act_dump_config() 
      dump_config();
  }
  
- void set_keycmd() {
+ void
++set_keycmd() {
 +    run_keycmd(FALSE);
 +    update_title();
 +}
 +
- void set_mode_indicator() {
++void
++set_mode_indicator() {
 +    uzbl.gui.sbar.mode_indicator = (uzbl.behave.insert_mode ?
 +        uzbl.behave.insert_indicator : uzbl.behave.cmd_indicator);
 +}
 +
- void set_insert_mode(gboolean mode) {
++void
++set_insert_mode(gboolean mode) {
 +    uzbl.behave.insert_mode = mode;
 +    set_mode_indicator();
 +}
 +
- static void
++void
  toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result) {
      (void) page; (void) result;
  
@@@ -1223,9 -1145,215 +1225,9 @@@ build_progressbar_ascii(int percent) 
  
     return g_string_free(bar, FALSE);
  }
 -
 -void
 -setup_scanner() {
 -     const GScannerConfig scan_config = {
 -             (
 -              "\t\r\n"
 -             )            /* cset_skip_characters */,
 -             (
 -              G_CSET_a_2_z
 -              "_#"
 -              G_CSET_A_2_Z
 -             )            /* cset_identifier_first */,
 -             (
 -              G_CSET_a_2_z
 -              "_0123456789"
 -              G_CSET_A_2_Z
 -              G_CSET_LATINS
 -              G_CSET_LATINC
 -             )            /* cset_identifier_nth */,
 -             ( "" )    /* cpair_comment_single */,
 -
 -             TRUE         /* case_sensitive */,
 -
 -             FALSE        /* skip_comment_multi */,
 -             FALSE        /* skip_comment_single */,
 -             FALSE        /* scan_comment_multi */,
 -             TRUE         /* scan_identifier */,
 -             TRUE         /* scan_identifier_1char */,
 -             FALSE        /* scan_identifier_NULL */,
 -             TRUE         /* scan_symbols */,
 -             FALSE        /* scan_binary */,
 -             FALSE        /* scan_octal */,
 -             FALSE        /* scan_float */,
 -             FALSE        /* scan_hex */,
 -             FALSE        /* scan_hex_dollar */,
 -             FALSE        /* scan_string_sq */,
 -             FALSE        /* scan_string_dq */,
 -             TRUE         /* numbers_2_int */,
 -             FALSE        /* int_2_float */,
 -             FALSE        /* identifier_2_string */,
 -             FALSE        /* char_2_token */,
 -             FALSE        /* symbol_2_token */,
 -             TRUE         /* scope_0_fallback */,
 -             FALSE,
 -             TRUE
 -     };
 -
 -     uzbl.scan = g_scanner_new(&scan_config);
 -     while(symp->symbol_name) {
 -         g_scanner_scope_add_symbol(uzbl.scan, 0,
 -                         symp->symbol_name,
 -                         GINT_TO_POINTER(symp->symbol_token));
 -         symp++;
 -     }
 -}
 -
 -gchar *
 -expand_template(const char *template, gboolean escape_markup) {
 -     if(!template) return NULL;
 -
 -     GTokenType token = G_TOKEN_NONE;
 -     GString *ret = g_string_new("");
 -     char *buf=NULL;
 -     int sym;
 -
 -     g_scanner_input_text(uzbl.scan, template, strlen(template));
 -     while(!g_scanner_eof(uzbl.scan) && token != G_TOKEN_LAST) {
 -         token = g_scanner_get_next_token(uzbl.scan);
 -
 -         if(token == G_TOKEN_SYMBOL) {
 -             sym = GPOINTER_TO_INT(g_scanner_cur_value(uzbl.scan).v_symbol);
 -             switch(sym) {
 -                 case SYM_URI:
 -                     if(escape_markup) {
 -                         buf = uzbl.state.uri ?
 -                             g_markup_printf_escaped("%s", uzbl.state.uri) : g_strdup("");
 -                         g_string_append(ret, buf);
 -                         g_free(buf);
 -                     }
 -                     else
 -                         g_string_append(ret, uzbl.state.uri ?
 -                                 uzbl.state.uri : g_strdup(""));
 -                     break;
 -                 case SYM_LOADPRGS:
 -                     buf = itos(uzbl.gui.sbar.load_progress);
 -                     g_string_append(ret, buf);
 -                     g_free(buf);
 -                     break;
 -                 case SYM_LOADPRGSBAR:
 -                     buf = build_progressbar_ascii(uzbl.gui.sbar.load_progress);
 -                     g_string_append(ret, buf);
 -                     g_free(buf);
 -                     break;
 -                 case SYM_TITLE:
 -                     if(escape_markup) {
 -                         buf = uzbl.gui.main_title ?
 -                             g_markup_printf_escaped("%s", uzbl.gui.main_title) : g_strdup("");
 -                         g_string_append(ret, buf);
 -                         g_free(buf);
 -                     }
 -                     else
 -                         g_string_append(ret, uzbl.gui.main_title ?
 -                                 uzbl.gui.main_title : "");
 -                     break;
 -                 case SYM_SELECTED_URI:
 -                     if(escape_markup) {
 -                         buf = uzbl.state.selected_url ?
 -                             g_markup_printf_escaped("%s", uzbl.state.selected_url) : g_strdup("");
 -                         g_string_append(ret, buf);
 -                         g_free(buf);
 -                     }
 -                     else
 -                         g_string_append(ret, uzbl.state.selected_url ?
 -                                 uzbl.state.selected_url : "");
 -                     break;
 -                 case SYM_NAME:
 -                     buf = itos(uzbl.xwin);
 -                     g_string_append(ret,
 -                             uzbl.state.instance_name ? uzbl.state.instance_name : buf);
 -                     g_free(buf);
 -                     break;
 -                 case SYM_KEYCMD:
 -                     if(escape_markup) {
 -                         buf = uzbl.state.keycmd->str ?
 -                             g_markup_printf_escaped("%s", uzbl.state.keycmd->str) : g_strdup("");
 -                         g_string_append(ret, buf);
 -                         g_free(buf);
 -                     }
 -                     else
 -                         g_string_append(ret, uzbl.state.keycmd->str ?
 -                                 uzbl.state.keycmd->str : "");
 -                     break;
 -                 case SYM_MODE:
 -                     g_string_append(ret,
 -                             uzbl.behave.insert_mode ?
 -                             uzbl.behave.insert_indicator : uzbl.behave.cmd_indicator);
 -                     break;
 -                 case SYM_MSG:
 -                     g_string_append(ret,
 -                             uzbl.gui.sbar.msg ? uzbl.gui.sbar.msg : "");
 -                     break;
 -                     /* useragent syms */
 -                 case SYM_WK_MAJ:
 -                     buf = itos(WEBKIT_MAJOR_VERSION);
 -                     g_string_append(ret, buf);
 -                     g_free(buf);
 -                     break;
 -                 case SYM_WK_MIN:
 -                     buf = itos(WEBKIT_MINOR_VERSION);
 -                     g_string_append(ret, buf);
 -                     g_free(buf);
 -                     break;
 -                 case SYM_WK_MIC:
 -                     buf = itos(WEBKIT_MICRO_VERSION);
 -                     g_string_append(ret, buf);
 -                     g_free(buf);
 -                     break;
 -                 case SYM_SYSNAME:
 -                     g_string_append(ret, uzbl.state.unameinfo.sysname);
 -                     break;
 -                 case SYM_NODENAME:
 -                     g_string_append(ret, uzbl.state.unameinfo.nodename);
 -                     break;
 -                 case SYM_KERNREL:
 -                     g_string_append(ret, uzbl.state.unameinfo.release);
 -                     break;
 -                 case SYM_KERNVER:
 -                     g_string_append(ret, uzbl.state.unameinfo.version);
 -                     break;
 -                 case SYM_ARCHSYS:
 -                     g_string_append(ret, uzbl.state.unameinfo.machine);
 -                     break;
 -                 case SYM_ARCHUZBL:
 -                     g_string_append(ret, ARCH);
 -                     break;
 -#ifdef _GNU_SOURCE
 -                 case SYM_DOMAINNAME:
 -                     g_string_append(ret, uzbl.state.unameinfo.domainname);
 -                     break;
 -#endif
 -                 case SYM_COMMIT:
 -                     g_string_append(ret, COMMIT);
 -                     break;
 -                 default:
 -                     break;
 -             }
 -         }
 -         else if(token == G_TOKEN_INT) {
 -             g_string_append_printf(ret, "%lu", g_scanner_cur_value(uzbl.scan).v_int);
 -         }
 -         else if(token == G_TOKEN_IDENTIFIER) {
 -             g_string_append(ret, (gchar *)g_scanner_cur_value(uzbl.scan).v_identifier);
 -         }
 -         else if(token == G_TOKEN_CHAR) {
 -             g_string_append_c(ret, (gchar)g_scanner_cur_value(uzbl.scan).v_char);
 -         }
 -         else if(token == G_TOKEN_ERROR) {
 -             g_scanner_error(uzbl.scan, "Token error in template ('%s') at line %d, column %d.",
 -                                        template,
 -                                        g_scanner_cur_line(uzbl.scan),
 -                                        g_scanner_cur_position(uzbl.scan));
 -         }
 -     }
 -
 -     return g_string_free(ret, FALSE);
 -}
  /* --End Statusbar functions-- */
  
- static void
+ void
  sharg_append(GArray *a, const gchar *str) {
      const gchar *s = (str ? str : "");
      g_array_append_val(a, s);
@@@ -1457,9 -1585,10 +1459,9 @@@ cmd_load_uri() 
      g_array_free (a, TRUE);
  }
  
- static void
+ void
  cmd_always_insert_mode() {
 -    uzbl.behave.insert_mode =
 -        uzbl.behave.always_insert_mode ?  TRUE : FALSE;
 +    set_insert_mode(uzbl.behave.always_insert_mode);
      update_title();
  }
  
@@@ -1771,8 -1901,9 +1773,8 @@@ parse_cmd_line(const char *ctl_line, GS
      }
  }
  
- static gchar*
+ gchar*
  build_stream_name(int type, const gchar* dir) {
 -    char *xwin_str = NULL;
      State *s = &uzbl.state;
      gchar *str = NULL;
  
@@@ -2026,16 -2156,7 +2023,16 @@@ update_title (void) 
      }
  }
  
- static gboolean
+ gboolean
 +configure_event_cb(GtkWidget* window, GdkEventConfigure* event) {
 +    (void) window;
 +    (void) event;
 +
 +    retreive_geometry();
 +    return FALSE;
 +}
 +
- static gboolean
++gboolean
  key_press_cb (GtkWidget* window, GdkEventKey* event)
  {
      //TRUE to stop other handlers from being invoked for the event. FALSE to propagate the event further.
@@@ -2149,9 -2252,9 +2146,9 @@@ run_keycmd(const gboolean key_ret) 
      g_string_free (short_keys_inc, TRUE);
  }
  
- static void
+ void
  exec_paramcmd(const Action *act, const guint i) {
 -    GString *parampart = g_string_new (uzbl.state.keycmd->str);
 +    GString *parampart = g_string_new (uzbl.state.keycmd);
      GString *actionname = g_string_new ("");
      GString *actionparam = g_string_new ("");
      g_string_erase (parampart, 0, i+1);
@@@ -2603,25 -2708,10 +2603,25 @@@ dump_config() 
      g_hash_table_foreach(uzbl.bindings, dump_key_hash, NULL);
  }
  
- static void
 -#ifndef UZBL_LIBRARY
 -/** -- MAIN -- **/
 -int
 -main (int argc, char* argv[]) {
++void
 +retreive_geometry() {
 +    int w, h, x, y;
 +    GString *buf = g_string_new("");
 +
 +    gtk_window_get_size(GTK_WINDOW(uzbl.gui.main_window), &w, &h);
 +    gtk_window_get_position(GTK_WINDOW(uzbl.gui.main_window), &x, &y);
 +
 +    g_string_printf(buf, "%dx%d+%d+%d", w, h, x, y);
 +
 +    if(uzbl.gui.geometry)
 +        g_free(uzbl.gui.geometry);
 +    uzbl.gui.geometry = g_string_free(buf, FALSE);
 +}
 +
 +/* set up gtk, gobject, variable defaults and other things that tests and other
 + * external applications need to do anyhow */
 +void
 +initialize(int argc, char *argv[]) {
      gtk_init (&argc, &argv);
      if (!g_thread_supported ())
          g_thread_init (NULL);
diff --cc uzbl.h
--- 1/uzbl.h
--- 2/uzbl.h
+++ b/uzbl.h
@@@ -214,9 -226,12 +214,6 @@@ XDG_Var XDG[] 
  };
  
  /* Functions */
- void
- setup_scanner();
 -gchar *
 -expand_template(const char *template, gboolean escape_markup);
 -
 -void
 -setup_scanner();
 -
  char *
  itos(int val);
  
  file_exists (const char * filename);
  
  void
 +set_keycmd();
 +
 +void
 +set_mode_indicator();
 +
 +void
 +set_insert_mode(gboolean mode);
 +
- static void
++void
  toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  load_uri (WebKitWebView * web_view, GArray *argv, GString *result);
  
- static void
+ void
  new_window_load_uri (const gchar * uri);
  
- static void
+ void
  chain (WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  keycmd (WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  keycmd_nl (WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  keycmd_bs (WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  close_uzbl (WebKitWebView *page, GArray *argv, GString *result);
  
- static gboolean
+ gboolean
  run_command(const gchar *command, const guint npre,
              const gchar **args, const gboolean sync, char **output_stdout);
  
- static char*
++char*
 +build_progressbar_ascii(int percent);
 +
- static void
+ void
  spawn(WebKitWebView *web_view, GArray *argv, GString *result);
  
- static void
+ void
  spawn_sh(WebKitWebView *web_view, GArray *argv, GString *result);
  
- static void
+ void
  spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result);
  
- static void
+ void
  spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result);
  
  void
  parse_command(const char *cmd, const char *param, GString *result);
  
- static void
+ void
  parse_cmd_line(const char *ctl_line, GString *result);
  
- static gchar*
+ gchar*
  build_stream_name(int type, const gchar *dir);
  
- static gboolean
+ gboolean
  control_fifo(GIOChannel *gio, GIOCondition condition);
  
- static gchar*
+ gchar*
  init_fifo(gchar *dir);
  
- static gboolean
+ gboolean
  control_stdin(GIOChannel *gio, GIOCondition condition);
  
- static void
+ void
  create_stdin();
  
- static gchar*
+ gchar*
  init_socket(gchar *dir);
  
- static gboolean
+ gboolean
  control_socket(GIOChannel *chan);
  
- static gboolean
+ gboolean
  control_client_socket(GIOChannel *chan);
  
- static void
+ void
  update_title (void);
  
- static gboolean
+ gboolean
  key_press_cb (GtkWidget* window, GdkEventKey* event);
  
- static void
+ void
  run_keycmd(const gboolean key_ret);
  
- static void
+ void
  exec_paramcmd(const Action* act, const guint i);
  
 +void
 +initialize ();
 +
  GtkWidget*
  create_browser ();
  
@@@ -450,37 -450,30 +447,36 @@@ voi
  save_cookies (SoupMessage *msg,
                  gpointer     user_data);
  
- static void
+ void
  set_var(WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  act_bind(WebKitWebView *page, GArray *argv, GString *result);
  
- static void
+ void
  act_dump_config();
  
- static void
+ void
  render_html();
  
- static void
+ void
  set_timeout(int seconds);
  
- static void
+ void
  dump_var_hash(gpointer k, gpointer v, gpointer ud);
  
- static void
+ void
  dump_key_hash(gpointer k, gpointer v, gpointer ud);
  
- static void
+ void
  dump_config();
  
- static void
++void
 +retreive_geometry();
 +
- static gboolean
++gboolean
 +configure_event_cb(GtkWidget* window, GdkEventConfigure* event);
 +
  typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result);
  typedef struct {
      Command function;
@@@ -550,40 -543,37 +546,40 @@@ cmd_modkey()
  void
  cmd_useragent() ;
  
- static void
+ void
  cmd_autoload_img();
  
- static void
+ void
  cmd_autoshrink_img();
  
- static void
+ void
  cmd_enable_spellcheck();
  
- static void
+ void
  cmd_enable_private();
  
- static void
+ void
  cmd_print_bg();
  
- static void
+ void
  cmd_style_uri();
  
- static void
+ void
  cmd_resizable_txt();
  
- static void
+ void
  cmd_default_encoding();
  
- static void
+ void
  cmd_enforce_96dpi();
  
- static void
+ void
  cmd_inject_html();
  
- static void
+ void
  cmd_caret_browsing();
  
- static void
++void
 +cmd_set_geometry();
 +
  /* vi: set et ts=4: */