Mercurial > geeqie
diff src/image-overlay.c @ 298:cb93a982fcdd
Add the possibility to truncate overlay infos displayed:
%fCamera:20% will truncate data displayed to 20 characters
and add 3 dots at the end.
For example, %name% -> some_file, %name:4% -> some...
author | zas_ |
---|---|
date | Thu, 10 Apr 2008 10:43:15 +0000 |
parents | 4bbde8a38ad4 |
children | 49eaa6463492 |
line wrap: on
line diff
--- a/src/image-overlay.c Thu Apr 10 00:09:43 2008 +0000 +++ b/src/image-overlay.c Thu Apr 10 10:43:15 2008 +0000 @@ -139,19 +139,43 @@ while (TRUE) { + gint was_digit = 0; + gint limit = 0; + gchar *trunc = NULL; + gchar *p; + start = strchr(new->str, delim); if (!start) break; end = strchr(start+1, delim); if (!end) break; + + for (p = end; p > start; p--) + { + if (*p == ':' && was_digit) + { + trunc = p; + break; + } + was_digit = (*p >= '0' && *p <= '9'); + } - name = g_strndup(start+1, end-start-1); + if (trunc) limit = atoi(trunc+1); + + name = g_strndup(start+1, ((limit > 0) ? trunc : end)-start-1); + pos = start-new->str; data = g_strdup(g_hash_table_lookup(vars, name)); if (!data && exif) data = exif_get_data_as_text(exif, name); - + if (data && *data && limit > 0) + { + gchar *new_data = g_strdup_printf("%-*.*s...", limit, limit, data); + g_free(data); + data = new_data; + } + g_string_erase(new, pos, end-start+1); if (data) g_string_insert(new, pos, data);