| tUse priority values instead of “forced” parameters - surf - customized bui… | |
| git clone git://src.adamsgaard.dk/surf | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit a8bf2068276e27dcbd2919cb72d926b9f4f3882e | |
| parent a0ef4ba41d3e43618607f9cf1d14e83ee475f624 | |
| Author: Quentin Rameau <[email protected]> | |
| Date: Sun, 21 May 2017 13:41:56 +0200 | |
| Use priority values instead of “forced” parameters | |
| This makes parameter handling a bit easier and lets the user override | |
| parameters as he sees fit. | |
| Diffstat: | |
| M config.def.h | 7 ++++++- | |
| M surf.c | 88 +++++++++++++++--------------… | |
| 2 files changed, 49 insertions(+), 46 deletions(-) | |
| --- | |
| diff --git a/config.def.h b/config.def.h | |
| t@@ -8,8 +8,13 @@ static char *cachedir = "~/.surf/cache/"; | |
| static char *cookiefile = "~/.surf/cookies.txt"; | |
| /* Webkit default features */ | |
| +/* Highest priority value will be used. | |
| + * Default parameters are priority 0 | |
| + * Per-uri parameters are priority 1 | |
| + * Command parameters are priority 2 | |
| + */ | |
| static Parameter defconfig[ParameterLast] = { | |
| - /* parameter Arg value force? */ | |
| + /* parameter Arg value priority */ | |
| [AcceleratedCanvas] = { { .i = 1 }, }, | |
| [AccessMicrophone] = { { .i = 0 }, }, | |
| [AccessWebcam] = { { .i = 0 }, }, | |
| diff --git a/surf.c b/surf.c | |
| t@@ -91,7 +91,7 @@ typedef union { | |
| typedef struct { | |
| Arg val; | |
| - int force; | |
| + int prio; | |
| } Parameter; | |
| typedef struct Client { | |
| t@@ -372,19 +372,18 @@ setup(void) | |
| } | |
| for (i = 0; i < LENGTH(uriparams); ++i) { | |
| - if (!regcomp(&(uriparams[i].re), uriparams[i].uri, | |
| + if (regcomp(&(uriparams[i].re), uriparams[i].uri, | |
| REG_EXTENDED)) { | |
| - /* copy default parameters if they are not already set | |
| - * or if they are forced */ | |
| - for (j = 0; j < ParameterLast; ++j) { | |
| - if (!uriparams[i].config[j].force || | |
| - defconfig[j].force) | |
| - uriparams[i].config[j] = defconfig[j]; | |
| - } | |
| - } else { | |
| fprintf(stderr, "Could not compile regex: %s\n", | |
| uriparams[i].uri); | |
| uriparams[i].uri = NULL; | |
| + continue; | |
| + } | |
| + | |
| + /* copy default parameters with higher priority */ | |
| + for (j = 0; j < ParameterLast; ++j) { | |
| + if (defconfig[j].prio >= uriparams[i].config[j].prio) | |
| + uriparams[i].config[j] = defconfig[j]; | |
| } | |
| } | |
| } | |
| t@@ -693,20 +692,19 @@ seturiparameters(Client *c, const char *uri, ParamName *… | |
| case Certificate: | |
| case CookiePolicies: | |
| case Style: | |
| - config = defconfig[p].force ? defconfig : | |
| - newconfig[p].force ? newconfig : | |
| - defconfig; | |
| + config = (newconfig[p].prio > defconfig[p].prio) ? | |
| + newconfig : defconfig; | |
| break; | |
| default: | |
| - if (defconfig[p].force) | |
| + if (newconfig[p].prio > defconfig[p].prio) | |
| + config = newconfig; | |
| + else if (curconfig[p].prio > defconfig[p].prio) | |
| + config = defconfig; | |
| + else | |
| continue; | |
| - config = newconfig[p].force ? newconfig : | |
| - curconfig[p].force ? defconfig : | |
| - NULL; | |
| } | |
| - if (config) | |
| - setparameter(c, 0, p, &config[p].val); | |
| + setparameter(c, 0, p, &config[p].val); | |
| } | |
| curconfig = newconfig; | |
| t@@ -1914,15 +1912,15 @@ main(int argc, char *argv[]) | |
| ARGBEGIN { | |
| case 'a': | |
| defconfig[CookiePolicies].val.v = EARGF(usage()); | |
| - defconfig[CookiePolicies].force = 1; | |
| + defconfig[CookiePolicies].prio = 2; | |
| break; | |
| case 'b': | |
| defconfig[ScrollBars].val.i = 0; | |
| - defconfig[ScrollBars].force = 1; | |
| + defconfig[ScrollBars].prio = 2; | |
| break; | |
| case 'B': | |
| defconfig[ScrollBars].val.i = 1; | |
| - defconfig[ScrollBars].force = 1; | |
| + defconfig[ScrollBars].prio = 2; | |
| break; | |
| case 'c': | |
| cookiefile = EARGF(usage()); | |
| t@@ -1932,89 +1930,89 @@ main(int argc, char *argv[]) | |
| break; | |
| case 'd': | |
| defconfig[DiskCache].val.i = 0; | |
| - defconfig[DiskCache].force = 1; | |
| + defconfig[DiskCache].prio = 2; | |
| break; | |
| case 'D': | |
| defconfig[DiskCache].val.i = 1; | |
| - defconfig[DiskCache].force = 1; | |
| + defconfig[DiskCache].prio = 2; | |
| break; | |
| case 'e': | |
| embed = strtol(EARGF(usage()), NULL, 0); | |
| break; | |
| case 'f': | |
| defconfig[RunInFullscreen].val.i = 0; | |
| - defconfig[RunInFullscreen].force = 1; | |
| + defconfig[RunInFullscreen].prio = 2; | |
| break; | |
| case 'F': | |
| defconfig[RunInFullscreen].val.i = 1; | |
| - defconfig[RunInFullscreen].force = 1; | |
| + defconfig[RunInFullscreen].prio = 2; | |
| break; | |
| case 'g': | |
| defconfig[Geolocation].val.i = 0; | |
| - defconfig[Geolocation].force = 1; | |
| + defconfig[Geolocation].prio = 2; | |
| break; | |
| case 'G': | |
| defconfig[Geolocation].val.i = 1; | |
| - defconfig[Geolocation].force = 1; | |
| + defconfig[Geolocation].prio = 2; | |
| break; | |
| case 'i': | |
| defconfig[LoadImages].val.i = 0; | |
| - defconfig[LoadImages].force = 1; | |
| + defconfig[LoadImages].prio = 2; | |
| break; | |
| case 'I': | |
| defconfig[LoadImages].val.i = 1; | |
| - defconfig[LoadImages].force = 1; | |
| + defconfig[LoadImages].prio = 2; | |
| break; | |
| case 'k': | |
| defconfig[KioskMode].val.i = 0; | |
| - defconfig[KioskMode].force = 1; | |
| + defconfig[KioskMode].prio = 2; | |
| break; | |
| case 'K': | |
| defconfig[KioskMode].val.i = 1; | |
| - defconfig[KioskMode].force = 1; | |
| + defconfig[KioskMode].prio = 2; | |
| break; | |
| case 'm': | |
| defconfig[Style].val.i = 0; | |
| - defconfig[Style].force = 1; | |
| + defconfig[Style].prio = 2; | |
| break; | |
| case 'M': | |
| defconfig[Style].val.i = 1; | |
| - defconfig[Style].force = 1; | |
| + defconfig[Style].prio = 2; | |
| break; | |
| case 'n': | |
| defconfig[Inspector].val.i = 0; | |
| - defconfig[Inspector].force = 1; | |
| + defconfig[Inspector].prio = 2; | |
| break; | |
| case 'N': | |
| defconfig[Inspector].val.i = 1; | |
| - defconfig[Inspector].force = 1; | |
| + defconfig[Inspector].prio = 2; | |
| break; | |
| case 'p': | |
| defconfig[Plugins].val.i = 0; | |
| - defconfig[Plugins].force = 1; | |
| + defconfig[Plugins].prio = 2; | |
| break; | |
| case 'P': | |
| defconfig[Plugins].val.i = 1; | |
| - defconfig[Plugins].force = 1; | |
| + defconfig[Plugins].prio = 2; | |
| break; | |
| case 'r': | |
| scriptfile = EARGF(usage()); | |
| break; | |
| case 's': | |
| defconfig[JavaScript].val.i = 0; | |
| - defconfig[JavaScript].force = 1; | |
| + defconfig[JavaScript].prio = 2; | |
| break; | |
| case 'S': | |
| defconfig[JavaScript].val.i = 1; | |
| - defconfig[JavaScript].force = 1; | |
| + defconfig[JavaScript].prio = 2; | |
| break; | |
| case 't': | |
| defconfig[StrictTLS].val.i = 0; | |
| - defconfig[StrictTLS].force = 1; | |
| + defconfig[StrictTLS].prio = 2; | |
| break; | |
| case 'T': | |
| defconfig[StrictTLS].val.i = 1; | |
| - defconfig[StrictTLS].force = 1; | |
| + defconfig[StrictTLS].prio = 2; | |
| break; | |
| case 'u': | |
| fulluseragent = EARGF(usage()); | |
| t@@ -2026,15 +2024,15 @@ main(int argc, char *argv[]) | |
| break; | |
| case 'x': | |
| defconfig[Certificate].val.i = 0; | |
| - defconfig[Certificate].force = 1; | |
| + defconfig[Certificate].prio = 2; | |
| break; | |
| case 'X': | |
| defconfig[Certificate].val.i = 1; | |
| - defconfig[Certificate].force = 1; | |
| + defconfig[Certificate].prio = 2; | |
| break; | |
| case 'z': | |
| defconfig[ZoomLevel].val.f = strtof(EARGF(usage()), NULL); | |
| - defconfig[ZoomLevel].force = 1; | |
| + defconfig[ZoomLevel].prio = 2; | |
| break; | |
| default: | |
| usage(); |