diff options
| author | Daniel Friesel <derf@derf.homelinux.org> | 2010-06-19 18:46:58 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@derf.homelinux.org> | 2010-06-19 18:46:58 +0200 | 
| commit | b58c42569dea36b5e9ed28b8e96daee5b10c6bf3 (patch) | |
| tree | acfeca63adfa3a8678167532e92c1b3cd7b6ee76 | |
| parent | b54e5c96c985856ebb578f45317dd0e47142a685 (diff) | |
Allow multiline theme definitions in .fehrc
| -rw-r--r-- | ChangeLog | 1 | ||||
| -rw-r--r-- | man/feh.1 | 3 | ||||
| -rw-r--r-- | src/options.c | 46 | 
3 files changed, 42 insertions, 8 deletions
| @@ -6,6 +6,7 @@ git HEAD        toggle fullscreen, should you really need it.      * --font now sets the global default font (for action/filename display etc.)      * Rename --screen-clip 0 to --no-screen-clip +    * Allow multiline theme definitions (via backslash, like in the shell)  Thu Jun 10 12:12:04 CEST 2010 @@ -552,6 +552,9 @@ Now just run  .Qq imagemap *.jpg  to use these options.  .Pp +Note that you can split a theme over several lines by placing a backslash at +the end of a line, like in the shell. +.Pp  You can combine these themes with commandline options.  An example .fehrc is  provided with a couple of cool example themes.  . diff --git a/src/options.c b/src/options.c index d017cad..392fa26 100644 --- a/src/options.c +++ b/src/options.c @@ -147,6 +147,8 @@ static void feh_load_options_for_theme(char *theme)  	char *home;  	char *rcpath = NULL;  	char s[1024], s1[1024], s2[1024]; +	int cont = 0; +	int bspos;  	if (opt.rcfile) {  		if ((fp = fopen(opt.rcfile, "r")) == NULL) { @@ -176,14 +178,40 @@ static void feh_load_options_for_theme(char *theme)  	for (; fgets(s, sizeof(s), fp);) {  		s1[0] = '\0';  		s2[0] = '\0'; -		sscanf(s, "%s %[^\n]\n", (char *) &s1, (char *) &s2); -		if (!(*s1) || (!*s2) || (*s1 == '\n') || (*s1 == '#')) -			continue; -		D(5, ("Got theme/options pair %s/%s\n", s1, s2)); -		if (!strcmp(s1, theme)) { + +		if (cont) { +			sscanf(s, " %[^\n]\n", (char *) &s2); +			if (!*s2) +				break; +			D(5, ("Got continued options %s\n", s2)); +		} else { +			sscanf(s, "%s %[^\n]\n", (char *) &s1, (char *) &s2); +			if (!(*s1) || (!*s2) || (*s1 == '\n') || (*s1 == '#')) { +				cont = 0; +				continue; +			} +			D(5, ("Got theme/options pair %s/%s\n", s1, s2)); +		} + +		if (!strcmp(s1, theme) || cont) { + +			bspos = strlen(s2)-1; + +			if (s2[bspos] == '\\') { +				D(5, ("Continued line\n")); +				s2[bspos] = '\0'; +				cont = 1; +				/* A trailing whitespace confuses the option parser */ +				if (bspos && (s2[bspos-1] == ' ')) +					s2[bspos-1] = '\0'; +			} else +				cont = 0; +  			D(4, ("A match. Using options %s\n", s2));  			feh_parse_options_from_string(s2); -			break; + +			if (!cont) +				break;  		}  	}  	fclose(fp); @@ -1182,8 +1210,10 @@ static void feh_create_default_config(char *rcfile)  "# Set the default feh options to be recursive and verbose\n"  "# feh -rV\n"  "\n" -"# Multiple options can of course be used. They should all be on one line\n" -"# imagemap -rV --quiet -W 400 -H 300 --thumb-width 40 --thumb-height 30\n" +"# Multiple options can of course be used. If they are not in one line,\n" +"# the lines after the theme name must start with a tab character. Like:\n" +"# imagemap -rV --quiet -W 400 -H 300 \\\n" +"#          --thumb-width 40 --thumb-height 30\n"  "\n"  "# ====================\n"  "# A few default themes\n" | 
