CFLAGS += -Wno-unused-parameter -Wunknown-warning-option -D_XOPEN_SOURCE="700"
LIBS = `pkg-config --cflags --libs gtk+-3.0 glib-2.0 webkit2gtk-4.0`
+EXTENSIONS = extensions/we_adblock
PREFIX = /usr/local
bindir = $(DESTDIR)$(PREFIX)/bin
libdir = $(DESTDIR)$(PREFIX)/lib
mv tmp config.h
mv tmp2 chorizo.h
-extensions:
- for i in extensions/*.c; do \
- outp=$$(echo "$$i" | sed 's/\$\.c/.so/g'); \
- $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $$outp -fPIC $$i $(LIBS); \
- done
+$(EXTENSIONS):
+ $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@.so -fPIC $@.c $(LIBS);
+
+extensions: $(EXTENSIONS)
install: all
mkdir -p $(bindir) \
if (g_str_has_suffix(path, ".js")) {
g_file_get_contents(path, &source, NULL,
NULL);
+ // clang-format off
wkscript = webkit_user_script_new(
source,
- WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES,
- WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START,
+ WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES,
+ WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START,
NULL, NULL);
+ // clang-format on
webkit_user_content_manager_add_script(
ucm, wkscript);
webkit_user_script_unref(wkscript);
if (g_str_has_suffix(path, ".css")) {
g_file_get_contents(path, &source, NULL,
NULL);
+ // clang-format off
wkstyle = webkit_user_style_sheet_new(
source,
- WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES,
- WEBKIT_USER_STYLE_LEVEL_USER,
+ WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES,
+ WEBKIT_USER_STYLE_LEVEL_USER,
NULL, NULL);
- webkit_user_content_manager_add_style_sheet(
+ webkit_user_content_manager_add_style_sheet(
ucm, wkstyle);
+ // clang-format on
webkit_user_style_sheet_unref(wkstyle);
}
g_free(path);
c->settings = webkit_web_view_get_settings(
WEBKIT_WEB_VIEW(c->web_view));
- if (cfg.verbose)
- webkit_settings_set_enable_write_console_messages_to_stdout(
+ if (cfg.verbose) {
+ // clang-format off
+ webkit_settings_set_enable_write_console_messages_to_stdout(
c->settings, true);
+ // clang-format on
+ }
webkit_settings_set_enable_developer_extras(c->settings, TRUE);
} else {
c->web_view = webkit_web_view_new_with_related_view(related_wv);
u = webkit_web_view_get_uri(WEBKIT_WEB_VIEW(c->web_view));
t = webkit_web_view_get_title(WEBKIT_WEB_VIEW(c->web_view));
- u = u == NULL ? "chorizo" : u;
- u = u[0] == 0 ? "chorizo" : u;
-
- t = t == NULL ? u : t;
- t = t[0] == 0 ? u : t;
+ if (t == NULL) t = (u == NULL) ? "chorizo" : u;
gchar *name = malloc(strlen(t) + 4);
if (!name) allocfail();
// No g_get_user_state_dir unfortunately
gchar *state_env = getenv("XDG_STATE_DIR");
- gchar *state_dir = (state_env) ?
- state_env :
- g_build_filename(g_get_home_dir(),
+ // clang-format off
+ gchar *state_dir = (state_env)
+ ? state_env
+ : g_build_filename(g_get_home_dir(),
".local", "state",
"chorizo", NULL);
+ // clang-format on
gchar *history_file =
g_build_filename(state_dir, "history", NULL);
fprintf(fp, "%s\n", t);
fclose(fp);
} else {
- perror("chorizo: error: could not open history file");
+ perror("chorizo: error: could not open history"
+ "file");
}
}
g_free(history_file);
jsc_context_get_exception(jsc_value_get_context(value));
if (exception != NULL) {
fprintf(stderr,
- "chorizo: warning: error running javascript: %s\n",
+ "chorizo: warning: error running javascript:"
+ "%s\n",
jsc_exception_get_message(exception));
} else {
c->feed_html = str_value;
g_free(absfile);
if (cert == NULL)
fprintf(stderr,
- "chorizo: warning: could not load trusted cert: %s\n",
+ "chorizo: warning: could not load"
+ "trusted cert: %s\n",
file);
else
- webkit_web_context_allow_tls_certificate_for_host(
+ // clang-format off
+ webkit_web_context_allow_tls_certificate_for_host(
wc, cert, file);
+ // clang-format on
file = g_dir_read_name(dir);
}
g_dir_close(dir);
.Pp
The chorizo repository contains the following optional scripts:
.Bl -tag
+.It mouseover.js
+Shows password when hovering over field.
.It hints.js
Provides link hints.
Press "f" to activate link hints for opening in the current tab,
extern gchar *fifopath;
extern char **closed_tabs;
extern size_t num_closed;
-gboolean isearch_counted_matches(GtkWidget *widget,guint matches,gpointer data);
+gboolean isearch_counted_matches(GtkWidget *widget, guint matches,
+ gpointer data);
gboolean quit_if_nothing_active(void);
-gboolean remote_msg(GIOChannel *channel,GIOCondition condition,gpointer data);
+gboolean remote_msg(GIOChannel *channel, GIOCondition condition, gpointer data);
void allocfail(void);
-void client_destroy(GtkWidget *widget,gpointer data);
+void client_destroy(GtkWidget *widget, gpointer data);
typedef struct Client Client;
-void set_uri(const char *uri,struct Client *c);
-WebKitWebView *client_new(const gchar *uri,WebKitWebView *related_wv);
-WebKitWebView *client_new_request(WebKitWebView *web_view,WebKitNavigationAction *navigation_action,gpointer data);
-void mkdirp(const char *dir,mode_t mode);
+void set_uri(const char *uri, struct Client *c);
+WebKitWebView *client_new(const gchar *uri, WebKitWebView *related_wv);
+WebKitWebView *client_new_request(WebKitWebView *web_view,
+ WebKitNavigationAction *navigation_action,
+ gpointer data);
+void mkdirp(const char *dir, mode_t mode);
void cooperation_setup(void);
-void changed_load_progress(GObject *obj,GParamSpec *pspec,gpointer data);
-void changed_favicon(GObject *obj,GParamSpec *pspec,gpointer data);
-void changed_title(GObject *obj,GParamSpec *pspec,gpointer data);
-void changed_uri(GObject *obj,GParamSpec *pspec,gpointer data);
-gboolean crashed_web_view(WebKitWebView *web_view,gpointer data);
-gboolean decide_policy(WebKitWebView *web_view,WebKitPolicyDecision *decision,WebKitPolicyDecisionType type,gpointer data);
+void changed_load_progress(GObject *obj, GParamSpec *pspec, gpointer data);
+void changed_favicon(GObject *obj, GParamSpec *pspec, gpointer data);
+void changed_title(GObject *obj, GParamSpec *pspec, gpointer data);
+void changed_uri(GObject *obj, GParamSpec *pspec, gpointer data);
+gboolean crashed_web_view(WebKitWebView *web_view, gpointer data);
+gboolean decide_policy(WebKitWebView *web_view, WebKitPolicyDecision *decision,
+ WebKitPolicyDecisionType type, gpointer data);
gchar *ensure_uri_scheme(const gchar *t);
-void grab_feeds_finished(GObject *object,GAsyncResult *result,gpointer data);
-void hover_web_view(WebKitWebView *web_view,WebKitHitTestResult *ht,guint modifiers,gpointer data);
-void icon_location(GtkEntry *entry,GtkEntryIconPosition icon_pos,GdkEvent *event,gpointer data);
+void grab_feeds_finished(GObject *object, GAsyncResult *result, gpointer data);
+void hover_web_view(WebKitWebView *web_view, WebKitHitTestResult *ht,
+ guint modifiers, gpointer data);
+void icon_location(GtkEntry *entry, GtkEntryIconPosition icon_pos,
+ GdkEvent *event, gpointer data);
void init_default_web_context(void);
-void isearch(gpointer data,gint direction);
-void isearch_init(struct Client *c,int direction);
+void isearch(gpointer data, gint direction);
+void isearch_init(struct Client *c, int direction);
void reopen_tab(void);
void mainwindow_setup(void);
void mainwindow_title(gint idx);
-void notebook_switch_page(GtkNotebook *nb,GtkWidget *p,guint idx,gpointer data);
-void show_web_view(WebKitWebView *web_view,gpointer data);
+void notebook_switch_page(GtkNotebook *nb, GtkWidget *p, guint idx,
+ gpointer data);
+void show_web_view(WebKitWebView *web_view, gpointer data);
void trust_user_certs(WebKitWebContext *wc);
void version(void);
-gboolean download_handle(WebKitDownload *,gchar *,gpointer);
-gboolean download_handle(WebKitDownload *download,gchar *suggested_filename,gpointer data);
-void download_click(GtkToolButton *,gpointer);
-void download_click(GtkToolButton *tb,gpointer data);
-void download_cancel(GtkMenuItem *,gpointer);
-void download_cancel(GtkMenuItem *tb,gpointer data);
-gboolean downloadmanager_delete(GtkWidget *,gpointer);
-gboolean downloadmanager_delete(GtkWidget *obj,gpointer data);
+gboolean download_handle(WebKitDownload *, gchar *, gpointer);
+gboolean download_handle(WebKitDownload *download, gchar *suggested_filename,
+ gpointer data);
+void download_click(GtkToolButton *, gpointer);
+void download_click(GtkToolButton *tb, gpointer data);
+void download_cancel(GtkMenuItem *, gpointer);
+void download_cancel(GtkMenuItem *tb, gpointer data);
+gboolean downloadmanager_delete(GtkWidget *, gpointer);
+gboolean downloadmanager_delete(GtkWidget *obj, gpointer data);
extern gint downloads;
-gboolean key_downloadmanager(GtkWidget *widget,GdkEvent *event,gpointer data);
-void changed_download_progress(GObject *obj,GParamSpec *pspec,gpointer data);
-void download_finished(WebKitDownload *download,gpointer data);
-void download_start(WebKitWebView *web_view,WebKitDownload *download,gpointer data);
+gboolean key_downloadmanager(GtkWidget *widget, GdkEvent *event, gpointer data);
+void changed_download_progress(GObject *obj, GParamSpec *pspec, gpointer data);
+void download_finished(WebKitDownload *download, gpointer data);
+void download_start(WebKitWebView *web_view, WebKitDownload *download,
+ gpointer data);
typedef struct DownloadItem DownloadItem;
const char *download_get_path(struct DownloadItem *payload);
-void download_hide(GtkMenuItem *tb,gpointer data);
-void download_delete(GtkMenuItem *tb,gpointer data);
-void download_copy_url(GtkMenuItem *tb,gpointer data);
-void download_copy_path(GtkMenuItem *tb,gpointer data);
-void download_xdg_open(GtkMenuItem *tb,gpointer data);
+void download_hide(GtkMenuItem *tb, gpointer data);
+void download_delete(GtkMenuItem *tb, gpointer data);
+void download_copy_url(GtkMenuItem *tb, gpointer data);
+void download_copy_path(GtkMenuItem *tb, gpointer data);
+void download_xdg_open(GtkMenuItem *tb, gpointer data);
void downloadmanager_setup(void);
void downloadmanager_show(void);
struct Client {
GtkToolButton *tb;
WebKitDownload *download;
};
-gboolean key_common(GtkWidget *widget,GdkEvent *event,gpointer data);
-void change_tab(int idx,struct Client *c);
+gboolean key_common(GtkWidget *widget, GdkEvent *event, gpointer data);
+void change_tab(int idx, struct Client *c);
void reorder_current_tab(int target);
-gboolean key_isearch(GtkWidget *widget,GdkEvent *event,gpointer data);
-gboolean key_wsearch(GtkWidget *widget,GdkEvent *event,gpointer data);
-gboolean key_location(GtkWidget *widget,GdkEvent *event,gpointer data);
-gboolean key_tablabel(GtkWidget *widget,GdkEvent *event,gpointer data);
-gboolean key_web_view(GtkWidget *widget,GdkEvent *event,gpointer data);
+gboolean key_isearch(GtkWidget *widget, GdkEvent *event, gpointer data);
+gboolean key_wsearch(GtkWidget *widget, GdkEvent *event, gpointer data);
+gboolean key_location(GtkWidget *widget, GdkEvent *event, gpointer data);
+gboolean key_tablabel(GtkWidget *widget, GdkEvent *event, gpointer data);
+gboolean key_web_view(GtkWidget *widget, GdkEvent *event, gpointer data);
#define INTERFACE 0
#define EXPORT_INTERFACE 0
#define LOCAL_INTERFACE 0
gboolean
key_common(GtkWidget *widget, GdkEvent *event, gpointer data)
{
+ WebKitPrintOperation *operation;
+ gboolean muted;
struct Client *c = (struct Client *)data;
gdouble now;
+
if (event->type == GDK_KEY_PRESS) {
guint mask = gtk_accelerator_get_default_mod_mask();
int key = ((GdkEventKey *)event)->keyval;
GDK_CONTROL_MASK) {
const char *uri = webkit_web_view_get_uri(
WEBKIT_WEB_VIEW(c->web_view));
- if (GDK_KEY_y == key) {
+ switch (key) {
+ case GDK_KEY_y:
downloadmanager_show();
return TRUE;
- } else if (GDK_KEY_h == key) {
+ case GDK_KEY_h:
webkit_web_view_go_back(
WEBKIT_WEB_VIEW(c->web_view));
return TRUE;
- } else if (GDK_KEY_l == key) {
+ case GDK_KEY_l:
webkit_web_view_go_forward(
WEBKIT_WEB_VIEW(c->web_view));
return TRUE;
- } else if (GDK_KEY_s == key) {
+ case GDK_KEY_s:
gtk_widget_grab_focus(c->location);
return TRUE;
- } else if (GDK_KEY_p == key) {
- WebKitPrintOperation *operation =
- webkit_print_operation_new(
- WEBKIT_WEB_VIEW(c->web_view));
+ case GDK_KEY_p:
+ operation = webkit_print_operation_new(
+ WEBKIT_WEB_VIEW(c->web_view));
GtkWidget *toplevel =
gtk_widget_get_toplevel(mw.win);
webkit_print_operation_run_dialog(
operation, GTK_WINDOW(toplevel));
return TRUE;
- } else if (GDK_KEY_g == key) {
+ case GDK_KEY_g:
isearch(c, 2);
gtk_widget_grab_focus(c->web_view);
if (uri)
GTK_ENTRY(c->location), uri);
webkit_web_view_run_javascript(
WEBKIT_WEB_VIEW(c->web_view),
- "window.getSelection().removeAllRanges();"
+ "window.getSelection()"
+ ".removeAllRanges();"
"document.activeElement.blur();",
NULL, NULL, c);
gtk_widget_hide(c->isearch_box);
gtk_editable_set_position(
GTK_EDITABLE(c->wsearch), -1);
return TRUE;
- } else if (GDK_KEY_r == key) {
+ case GDK_KEY_r:
webkit_web_view_reload_bypass_cache(
WEBKIT_WEB_VIEW(c->web_view));
return TRUE;
- } else if (GDK_KEY_j == key) {
+ case GDK_KEY_j:
for (int i = 0; i <= cfg_scroll_lines - 1;
i++) {
event->key.keyval = GDK_KEY_Down;
gdk_event_put(event);
}
return TRUE;
- } else if (GDK_KEY_k == key) {
+ case GDK_KEY_k:
for (int i = 0; i <= cfg_scroll_lines - 1;
i++) {
event->key.keyval = GDK_KEY_Up;
gdk_event_put(event);
}
return TRUE;
- } else if (GDK_KEY_f == key) {
+ case GDK_KEY_f:
isearch_init(c, 1);
return TRUE;
- } else if (GDK_KEY_q == key) {
+ case GDK_KEY_q:
client_destroy(NULL, c);
return TRUE;
- } else if (GDK_KEY_1 == key) {
+ case GDK_KEY_1:
change_tab(0, c);
return TRUE;
- } else if (GDK_KEY_2 == key) {
+ case GDK_KEY_2:
change_tab(1, c);
return TRUE;
- } else if (GDK_KEY_3 == key) {
+ case GDK_KEY_3:
change_tab(2, c);
return TRUE;
- } else if (GDK_KEY_4 == key) {
+ case GDK_KEY_4:
change_tab(3, c);
return TRUE;
- } else if (GDK_KEY_5 == key) {
+ case GDK_KEY_5:
change_tab(4, c);
return TRUE;
- } else if (GDK_KEY_6 == key) {
+ case GDK_KEY_6:
change_tab(5, c);
return TRUE;
- } else if (GDK_KEY_7 == key) {
+ case GDK_KEY_7:
change_tab(6, c);
gtk_notebook_set_current_page(
GTK_NOTEBOOK(mw.notebook), 6);
return TRUE;
- } else if (GDK_KEY_8 == key) {
+ case GDK_KEY_8:
change_tab(7, c);
return TRUE;
- } else if (GDK_KEY_9 == key) {
+ case GDK_KEY_9:
change_tab(8, c);
return TRUE;
- } else if (GDK_KEY_u == key) {
+ case GDK_KEY_u:
gtk_notebook_prev_page(
GTK_NOTEBOOK(mw.notebook));
return TRUE;
- } else if (GDK_KEY_m == key) {
- gboolean muted = webkit_web_view_get_is_muted(
+ case GDK_KEY_m:
+ muted = webkit_web_view_get_is_muted(
WEBKIT_WEB_VIEW(c->web_view));
webkit_web_view_set_is_muted(
WEBKIT_WEB_VIEW(c->web_view), !muted);
changed_title(G_OBJECT(c->web_view), NULL, c);
return TRUE;
- } else if (GDK_KEY_t == key) {
+ case GDK_KEY_t:
switch_tab = TRUE;
client_new(cfg_home_uri, NULL);
return TRUE;
- } else if (GDK_KEY_bracketleft == key) {
+ case GDK_KEY_bracketleft:
reopen_tab();
return TRUE;
- } else if ((GDK_KEY_i == key) || (GDK_KEY_Tab == key)) {
+ case GDK_KEY_i:
gtk_notebook_next_page(
GTK_NOTEBOOK(mw.notebook));
return TRUE;
- } else if (GDK_KEY_d == key) {
+ case GDK_KEY_d:
gtk_widget_grab_focus(c->wsearch);
return TRUE;
- } else if (GDK_KEY_equal == key) {
+ case GDK_KEY_equal:
now = webkit_web_view_get_zoom_level(
WEBKIT_WEB_VIEW(c->web_view));
webkit_web_view_set_zoom_level(
WEBKIT_WEB_VIEW(c->web_view),
now + 0.1);
return TRUE;
- } else if (GDK_KEY_minus == key) {
+ case GDK_KEY_minus:
now = webkit_web_view_get_zoom_level(
WEBKIT_WEB_VIEW(c->web_view));
webkit_web_view_set_zoom_level(
WEBKIT_WEB_VIEW(c->web_view),
now - 0.1);
return TRUE;
- } else if (GDK_KEY_0 == key) {
+ case GDK_KEY_0:
webkit_web_view_set_zoom_level(
WEBKIT_WEB_VIEW(c->web_view), 1);
return TRUE;
}
} else if ((((GdkEventKey *)event)->state & mask) ==
(GDK_CONTROL_MASK | GDK_SHIFT_MASK)) {
- if (GDK_KEY_ISO_Left_Tab == key) {
+ switch (key) {
+ case GDK_KEY_ISO_Left_Tab:
gtk_notebook_prev_page(
GTK_NOTEBOOK(mw.notebook));
return TRUE;
- } else if (GDK_KEY_T == key) {
+ case GDK_KEY_T:
reopen_tab();
return TRUE;
- } else if (GDK_KEY_exclam == key) {
+ case GDK_KEY_exclam:
reorder_current_tab(1);
return TRUE;
- } else if (GDK_KEY_at == key) {
+ case GDK_KEY_at:
reorder_current_tab(2);
return TRUE;
- } else if (GDK_KEY_numbersign == key) {
+ case GDK_KEY_numbersign:
reorder_current_tab(3);
return TRUE;
- } else if (GDK_KEY_dollar == key) {
+ case GDK_KEY_dollar:
reorder_current_tab(4);
return TRUE;
- } else if (GDK_KEY_percent == key) {
+ case GDK_KEY_percent:
reorder_current_tab(5);
return TRUE;
- } else if (GDK_KEY_asciicircum == key) {
+ case GDK_KEY_asciicircum:
reorder_current_tab(6);
return TRUE;
- } else if (GDK_KEY_ampersand == key) {
+ case GDK_KEY_ampersand:
reorder_current_tab(7);
return TRUE;
- } else if (GDK_KEY_asterisk == key) {
+ case GDK_KEY_asterisk:
reorder_current_tab(8);
return TRUE;
- } else if (GDK_KEY_parenleft == key) {
+ case GDK_KEY_parenleft:
reorder_current_tab(9);
return TRUE;
}
if (event->type == GDK_KEY_PRESS) {
int key = ((GdkEventKey *)event)->keyval;
- if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) {
- int direction = (((GdkEventKey *)event)->state &
- GDK_SHIFT_MASK) ?
- -1 :
- 1;
+ // clang-format off
+ int direction =
+ (((GdkEventKey *)event)->state & GDK_SHIFT_MASK)
+ ? -1 : 1;
+ // clang-format on
+ switch (key) {
+ case GDK_KEY_KP_Enter:
+ case GDK_KEY_Return:
isearch(c, 0);
isearch(c, -1);
isearch(c, direction);
return TRUE;
- } else if (GDK_KEY_Escape == key) {
+ case GDK_KEY_Escape:
isearch(c, 2);
gtk_widget_hide(c->isearch_box);
gtk_widget_grab_focus(c->web_view);
+ return TRUE;
}
}
return FALSE;
gboolean shifted = ((((GdkEventKey *)event)->state & mask) ==
GDK_SHIFT_MASK);
int key = ((GdkEventKey *)event)->keyval;
-
- if ((GDK_KEY_KP_Enter == key) || (GDK_KEY_Return == key)) {
+ switch (key) {
+ case GDK_KEY_KP_Enter:
+ case GDK_KEY_Return:
gtk_widget_grab_focus(c->web_view);
t = gtk_entry_get_text(GTK_ENTRY(c->location));
if (shifted) {
ensure_uri_scheme(t));
}
return TRUE;
- } else if (GDK_KEY_Escape == key) {
+ case GDK_KEY_Escape:
t = webkit_web_view_get_uri(
WEBKIT_WEB_VIEW(c->web_view));
gtk_entry_set_text(GTK_ENTRY(c->location),
--- /dev/null
+// ==UserScript==
+// @name Show Password onMouseOver
+// @namespace http://zoolcar9.lhukie.net/
+// @include *
+// @description Show password when mouseover on password field
+// @author LouCypher
+// @license free
+// @version 0.0.1.20140630034959
+// ==/UserScript==
+
+window.setTimeout(function() {
+ var passFields = document.querySelectorAll("input[type='password']");
+ if (!passFields.length) return;
+ for (var i = 0; i < passFields.length; i++) {
+ passFields[i].addEventListener("mouseover", function() {
+ this.type = "text";
+ }, false);
+ passFields[i].addEventListener("mouseout", function() {
+ this.type = "password";
+ }, false);
+ }
+}, 1000)