tazweb rev 182

Use getopt to parse cmdline args and add: --nomenu --raw --help
author Christophe Lincoln <pankso@slitaz.org>
date Tue Mar 14 04:02:11 2017 +0100 (2017-03-14)
parents a6d2bc6be4a4
children 41c9850b6602
files src/tazweb.c
line diff
     1.1 --- a/src/tazweb.c	Mon Mar 13 20:00:22 2017 +0000
     1.2 +++ b/src/tazweb.c	Tue Mar 14 04:02:11 2017 +0100
     1.3 @@ -9,37 +9,46 @@
     1.4   *
     1.5   */
     1.6  
     1.7 +#include <getopt.h>
     1.8  #include <glib.h>
     1.9  #include <glib/gi18n.h>
    1.10 -#define GETTEXT_PACKAGE "tazweb"
    1.11  
    1.12  #include <gtk/gtk.h>
    1.13  #include <webkit/webkit.h>
    1.14 -#include <libsoup/soup.h> // for cookies
    1.15 +#include <libsoup/soup.h>
    1.16  
    1.17 -#define HOME		g_get_home_dir()
    1.18 -#define CONFIG		g_strdup_printf("%s/.config/tazweb", HOME)
    1.19 -#define BMTXT		g_strdup_printf("%s/bookmarks.txt", CONFIG)
    1.20 -#define BMURL		g_strdup_printf("%s/bookmarks.html", CONFIG)
    1.21 -#define COOKIES		g_strdup_printf("%s/cookies.txt", CONFIG)
    1.22 -#define WEBHOME		"file:///usr/share/webhome/index.html"
    1.23 -#define SEARCH		"http://duckduckgo.com/?q=%s&t=slitaz"
    1.24 +#define HOME			g_get_home_dir()
    1.25 +#define CONFIG			g_strdup_printf("%s/.config/tazweb", HOME)
    1.26 +#define BMTXT			g_strdup_printf("%s/bookmarks.txt", CONFIG)
    1.27 +#define BOOKMARKS		g_strdup_printf("%s/bookmarks.txt", CONFIG)
    1.28 +#define COOKIES			g_strdup_printf("%s/cookies.txt", CONFIG)
    1.29 +#define DOWNLOADS		g_strdup_printf("%s/Downloads", HOME)
    1.30 +#define WEBHOME			"file:///usr/share/webhome/index.html"
    1.31 +#define SEARCH			"http://duckduckgo.com/?q=%s&t=slitaz"
    1.32 +#define GETTEXT_PACKAGE	"tazweb"
    1.33 +
    1.34 +int		width			= 800;
    1.35 +int		height			= 600;
    1.36 +int		private			= 0;
    1.37 +int		debug			= 1;
    1.38  
    1.39  static gchar *useragent = "TazWeb (X11; SliTaz GNU/Linux; U; en_US)";
    1.40 -static GtkWidget* create_window(WebKitWebView** newwebview);
    1.41 -static GtkWidget *mainwindow, *vbox, *browser, *toolbar;
    1.42 -static WebKitWebView *webview;
    1.43 -static WebKitWebFrame *frame;
    1.44 -static gint count = 0;
    1.45 -static gboolean notoolbar;
    1.46 -static gboolean nocookies;
    1.47 -static gboolean kiosk;
    1.48 +static gboolean		notoolbar;
    1.49 +static gboolean		nomenu;
    1.50 +static gboolean		kiosk;
    1.51 +static gboolean		raw;
    1.52  
    1.53 +static GtkWidget*		create_window(WebKitWebView** newwebview);
    1.54 +static GtkWidget		*tazweb_window, *vbox, *browser, *toolbar;
    1.55 +static WebKitWebView	*webview;
    1.56 +static WebKitWebFrame	*frame;
    1.57 +static SoupSession		*session;
    1.58 +static SoupCookieJar	*cookiejar;
    1.59 +static gint count		= 0;
    1.60 +const gchar*			uri;
    1.61  
    1.62 -const gchar* uri;
    1.63 +/* Turn on/off debug mode */
    1.64  
    1.65 -SoupSession		*session;
    1.66 -SoupCookieJar	*cookiejar;
    1.67  
    1.68  /* Create an icon */
    1.69  static GdkPixbuf*
    1.70 @@ -172,7 +181,7 @@
    1.71  go_bookmarks_cb(GtkWidget* widget, WebKitWebView* webview)
    1.72  {
    1.73  	system("/usr/lib/tazweb/helper.sh html_bookmarks");
    1.74 -	uri = g_strdup_printf("file://%s", BMURL);
    1.75 +	uri = g_strdup_printf("file://%s/bookmarks.html", CONFIG);
    1.76  	g_assert(uri);
    1.77  	webkit_web_view_load_uri(webview, uri);
    1.78  }
    1.79 @@ -197,7 +206,7 @@
    1.80  	webkit_web_view_go_forward(webview);
    1.81  }
    1.82  
    1.83 -/* TazWeb doc callback function */
    1.84 +/* Documentation callback */
    1.85  static void
    1.86  tazweb_doc_cb(GtkWidget* widget, WebKitWebView *webview)
    1.87  {
    1.88 @@ -206,32 +215,19 @@
    1.89  	webkit_web_view_load_uri(webview, uri);
    1.90  }
    1.91  
    1.92 -/* Download functions */
    1.93 +/* Download callback */
    1.94  static gboolean
    1.95  download_requested_cb(WebKitWebView *webview, WebKitDownload *download,
    1.96  		gpointer user_data)
    1.97  {
    1.98  	const gchar* buffer;
    1.99  	uri = webkit_download_get_uri(download);
   1.100 -	asprintf(&buffer, "xterm -T 'Download' -geom 72x10+0-24 -e \
   1.101 -				'mkdir -p $HOME/Downloads && cd $HOME/Downloads && \
   1.102 -				wget -c %s; sleep 2' &", uri);
   1.103 +	asprintf(&buffer, "xterm -T 'TazWeb Download' -geom 72x12+0-24 -e \
   1.104 +				'mkdir -p %s && wget -P %s -c %s; sleep 2' &", 
   1.105 +				DOWNLOADS, DOWNLOADS, uri);
   1.106  	system(buffer);
   1.107  }
   1.108  
   1.109 -/* Zoom out and in callback function */
   1.110 -static void
   1.111 -zoom_out_cb(GtkWidget *widget, WebKitWebView* webview)
   1.112 -{
   1.113 -	webkit_web_view_zoom_out(webview);
   1.114 -}
   1.115 -
   1.116 -static void
   1.117 -zoom_in_cb(GtkWidget *widget, WebKitWebView* webview)
   1.118 -{
   1.119 -	webkit_web_view_zoom_in(webview);
   1.120 -}
   1.121 -
   1.122  /* Printing callback function */
   1.123  static void
   1.124  print_page_cb (GtkWidget *widget, gpointer data)
   1.125 @@ -240,20 +236,6 @@
   1.126  		WEBKIT_WEB_VIEW (webview)));
   1.127  }
   1.128  
   1.129 -
   1.130 -/* Fullscreen and unfullscreen callback function */
   1.131 -//static void
   1.132 -//fullscreen_cb(GtkWindow* window, gpointer data)
   1.133 -//{
   1.134 -	//GdkWindowState state;
   1.135 -	//state = gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(mainwindow)));
   1.136 -
   1.137 -	//if(state & GDK_WINDOW_STATE_FULLSCREEN)
   1.138 -		//gtk_window_unfullscreen(GTK_WINDOW(mainwindow));
   1.139 -	//else
   1.140 -		//gtk_window_fullscreen(GTK_WINDOW(mainwindow));
   1.141 -//}
   1.142 -
   1.143  /* New webview callbacks */
   1.144  static WebKitWebView*
   1.145  create_web_view_cb(WebKitWebView* webview, WebKitWebFrame* web_frame,
   1.146 @@ -289,7 +271,7 @@
   1.147  	title = webkit_web_view_get_title(WEBKIT_WEB_VIEW (webview));
   1.148  	uri = webkit_web_view_get_uri(WEBKIT_WEB_VIEW (webview));
   1.149  
   1.150 -	asprintf(&buffer, "echo '%s|%s' >> %s", title, uri, BMTXT);
   1.151 +	asprintf(&buffer, "echo '%s|%s' >> %s", title, uri, BOOKMARKS);
   1.152  	system(buffer);
   1.153  }
   1.154  
   1.155 @@ -377,27 +359,9 @@
   1.156  	/* Separator */
   1.157  	item = gtk_separator_menu_item_new();
   1.158  	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
   1.159 -	
   1.160 -	/* Zoom in */
   1.161 -	item = gtk_image_menu_item_new_with_label(_("Zoom in"));
   1.162 -	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
   1.163 -	gtk_image_new_from_stock(GTK_STOCK_ZOOM_IN, GTK_ICON_SIZE_MENU));
   1.164 -	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
   1.165 -	g_signal_connect(item, "activate", G_CALLBACK(zoom_in_cb), webview);
   1.166 -
   1.167 -	/* Zoom out */
   1.168 -	item = gtk_image_menu_item_new_with_label(_("Zoom out"));
   1.169 -	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
   1.170 -	gtk_image_new_from_stock(GTK_STOCK_ZOOM_OUT, GTK_ICON_SIZE_MENU));
   1.171 -	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
   1.172 -	g_signal_connect(item, "activate", G_CALLBACK(zoom_out_cb), webview);
   1.173 -
   1.174 -	/* Separator */
   1.175 -	item = gtk_separator_menu_item_new();
   1.176 -	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
   1.177  
   1.178  	/* Cookies */
   1.179 -	if (! nocookies) {
   1.180 +	if (! private) {
   1.181  		item = gtk_image_menu_item_new_with_label(_("View cookies"));
   1.182  		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
   1.183  		gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_MENU));
   1.184 @@ -469,10 +433,11 @@
   1.185  			G_CALLBACK(create_web_view_cb), window);
   1.186  	}
   1.187  
   1.188 -	/* Connect WebKit contextual menu items */
   1.189 -	g_object_connect(G_OBJECT(webview), "signal::populate-popup",
   1.190 -		G_CALLBACK(populate_menu_cb), webview, NULL);
   1.191 -
   1.192 +	if (! nomenu) {
   1.193 +		/* Connect WebKit contextual menu items */
   1.194 +		g_object_connect(G_OBJECT(webview), "signal::populate-popup",
   1.195 +			G_CALLBACK(populate_menu_cb), webview, NULL);
   1.196 +	}
   1.197  	return browser;
   1.198  }
   1.199  
   1.200 @@ -499,16 +464,9 @@
   1.201  			G_CALLBACK(go_forward_cb), webview);
   1.202  	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
   1.203  
   1.204 -	/* Home button */
   1.205 -	item = gtk_tool_button_new_from_stock(GTK_STOCK_HOME);
   1.206 -	g_signal_connect(G_OBJECT(item), "clicked",
   1.207 -			G_CALLBACK(go_home_cb), webview);
   1.208 -	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
   1.209 -
   1.210  	/* URL entry */
   1.211  	item = gtk_tool_item_new();
   1.212  	gtk_tool_item_set_expand(item, TRUE);
   1.213 -	//gtk_widget_set_size_request(urientry, 0, 20);
   1.214  	gtk_container_add(GTK_CONTAINER(item), urientry);
   1.215  	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
   1.216  	g_signal_connect(G_OBJECT(urientry), "activate",
   1.217 @@ -530,6 +488,12 @@
   1.218  			G_CALLBACK(search_icon_press_cb), webview);
   1.219  	g_signal_connect(G_OBJECT(search), "activate",
   1.220  			G_CALLBACK(search_entry_cb), webview);
   1.221 +	
   1.222 +	/* Home button */
   1.223 +	item = gtk_tool_button_new_from_stock(GTK_STOCK_HOME);
   1.224 +	g_signal_connect(G_OBJECT(item), "clicked",
   1.225 +			G_CALLBACK(go_home_cb), webview);
   1.226 +	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
   1.227  
   1.228  	/* Bookmark button */
   1.229  	item = gtk_tool_button_new_from_stock(GTK_STOCK_PROPERTIES);
   1.230 @@ -552,7 +516,7 @@
   1.231  
   1.232  	/* Default TazWeb window */
   1.233  	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   1.234 -	gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
   1.235 +	gtk_window_set_default_size(GTK_WINDOW(window), width, height);
   1.236  	gtk_window_set_icon_name(GTK_WINDOW(window), "tazweb");
   1.237  	gtk_widget_set_name(window, "TazWeb");
   1.238  	gtk_window_set_wmclass(GTK_WINDOW(window), "tazweb", "TazWeb");
   1.239 @@ -579,35 +543,100 @@
   1.240  	return window;
   1.241  }
   1.242  
   1.243 +void
   1.244 +help(void)
   1.245 +{
   1.246 +	printf("\nTazWeb - Light and fast web browser using Webkit engine\n\n\
   1.247 +Usage: tazweb [--options] [value] url\n\
   1.248 +\n\
   1.249 +Options:\n\
   1.250 +  -h  --help\n\
   1.251 +  -p  --private\n\
   1.252 +  -u  --useragent [ua]\n\
   1.253 +  -k  --kiosk\n\
   1.254 +  -r  --raw\n\
   1.255 +      --notoolbar\n\
   1.256 +      --nomenu\n\n");
   1.257 +	printf ("Bookmarks: %s\n\n", BOOKMARKS);
   1.258 +	return;
   1.259 +}
   1.260 +
   1.261  int
   1.262  main(int argc, char* argv[])
   1.263  {
   1.264  	textdomain (GETTEXT_PACKAGE);
   1.265 +	int c;
   1.266 +	
   1.267 +	/* Cmdline parsing with getopt_long to handle --option or -o */
   1.268 +	while (1) {
   1.269 +		static struct option long_options[] =
   1.270 +		{
   1.271 +			/* Set flag */
   1.272 +			{ "notoolbar",  no_argument,       &notoolbar, 1 },
   1.273 +			{ "nomenu",     no_argument,       &nomenu,    1 },
   1.274 +			/* No flag */
   1.275 +			{ "help",       no_argument,       0, 'h' },
   1.276 +			{ "private",    no_argument,       0, 'p' },
   1.277 +			{ "useragent",  required_argument, 0, 'u' },
   1.278 +			{ "kiosk",      no_argument,       0, 'k' },
   1.279 +			{ "raw",        no_argument,       0, 'r' },
   1.280 +			{ "width",      required_argument, 0, 'w' },
   1.281 +			{ 0, 0, 0, 0}
   1.282 +		};
   1.283 +		
   1.284 +		int index = 0;
   1.285 +		c = getopt_long (argc, argv, "hpu:kr", long_options, &index);
   1.286 +		
   1.287 +		/* Detect the end of the options */
   1.288 +		if (c == -1)
   1.289 +			break;
   1.290  
   1.291 -	while (argc > 1) {
   1.292 -		if (!strcmp(argv[1],"--notoolbar")) {
   1.293 -			notoolbar++;
   1.294 +		switch (c) {
   1.295 +			case 0:
   1.296 +				/* Options with flag */
   1.297 +				if (debug) {
   1.298 +					printf ("Option: %s", long_options[index].name);
   1.299 +					if (optarg)
   1.300 +						printf (" with arg: %s", optarg);
   1.301 +					printf ("\n");
   1.302 +				}
   1.303 +				break;
   1.304 +				
   1.305 +			case 'h':
   1.306 +				help();
   1.307 +				return 0;
   1.308 +				
   1.309 +			case 'p':
   1.310 +				private++;
   1.311 +				break;
   1.312 +				
   1.313 +			case 'u':
   1.314 +				if (debug)
   1.315 +					printf ("User agent option: %s\n", optarg);
   1.316 +				useragent = optarg;
   1.317 +				break;
   1.318 +				
   1.319 +			case 'k':
   1.320 +				kiosk++;
   1.321 +				break;
   1.322 +			
   1.323 +			case 'r':
   1.324 +				notoolbar++;
   1.325 +				nomenu++;
   1.326 +				break;
   1.327 +			
   1.328 +			case 'w':
   1.329 +				width = optarg;
   1.330 +				break;
   1.331 +				
   1.332 +			case '?':
   1.333 +				help();
   1.334 +				return 0;
   1.335  		}
   1.336 -		if (!strcmp(argv[1],"--nocookies")) {
   1.337 -			nocookies++;
   1.338 -		}
   1.339 -		else if (!strcmp(argv[1],"--kiosk")) {
   1.340 -			kiosk++;
   1.341 -		}
   1.342 -		else if (!strcmp(argv[1],"--useragent") && argc > 2) {
   1.343 -			argc--;
   1.344 -			argv++;
   1.345 -			useragent = argv[1];
   1.346 -		}
   1.347 -		else if (!strcmp(argv[1],"--help")) {
   1.348 -			printf ("Usage: tazweb [--notoolbar|--nocookies|--kiosk|--useragent] [ua]\n");
   1.349 -			printf ("Bookmarks: %s\n", BMTXT);
   1.350 -			return 0;
   1.351 -		}
   1.352 -		else break;
   1.353 -		argc--;
   1.354 -		argv++;
   1.355  	}
   1.356 +		
   1.357 +	argc -= optind;
   1.358 +	argv += optind;
   1.359  
   1.360  	/* Initialize GTK */
   1.361  	gtk_init(NULL, NULL);
   1.362 @@ -624,11 +653,11 @@
   1.363  	if (argv[1])
   1.364  		check_requested_uri();
   1.365  
   1.366 -	mainwindow = create_window(&webview);
   1.367 -	gtk_widget_show_all(mainwindow);
   1.368 +	tazweb_window = create_window(&webview);
   1.369 +	gtk_widget_show_all(tazweb_window);
   1.370  	
   1.371  	/* Handle cookies */
   1.372 -	if (! nocookies) {
   1.373 +	if (! private) {
   1.374  		session = webkit_get_default_session();
   1.375  		snprintf(COOKIES, sizeof COOKIES, "%s", COOKIES);
   1.376  		cookies_setup();
   1.377 @@ -636,7 +665,7 @@
   1.378  	
   1.379  	/* Fullscreen for Kiosk mode */
   1.380  	if (kiosk)
   1.381 -		gtk_window_fullscreen(GTK_WINDOW(mainwindow));
   1.382 +		gtk_window_fullscreen(GTK_WINDOW(tazweb_window));
   1.383  
   1.384  	webkit_web_view_load_uri(webview, uri);
   1.385  	gtk_widget_grab_focus(GTK_WIDGET(webview));