summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@derf.homelinux.org>2010-06-19 18:46:58 +0200
committerDaniel Friesel <derf@derf.homelinux.org>2010-06-19 18:46:58 +0200
commitb58c42569dea36b5e9ed28b8e96daee5b10c6bf3 (patch)
treeacfeca63adfa3a8678167532e92c1b3cd7b6ee76
parentb54e5c96c985856ebb578f45317dd0e47142a685 (diff)
Allow multiline theme definitions in .fehrc
-rw-r--r--ChangeLog1
-rw-r--r--man/feh.13
-rw-r--r--src/options.c46
3 files changed, 42 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index bd247e5..7ba3f6d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/man/feh.1 b/man/feh.1
index 3c50254..8228373 100644
--- a/man/feh.1
+++ b/man/feh.1
@@ -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"