#include "misc.h"
#include "views.h"
#include "xmalloc.h"
+#include "color.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
int x_pos = 2; /* current x pos */
char *tab_name;
+ wattrset(editw, COLOR_PAIR(CP_TAB_BORDER));
mvwhline(editw, TABLINE + 1, 0, UI_HLINE_CHAR, EDITW_COLS);
for(i = 0; i < views_count; i++) {
mvwaddch(editw, TABLINE, x_pos, UI_ULCORNER_CHAR);
mvwaddch(editw, TABLINE, x_pos + 1, UI_LBOXLINE_CHAR);
+ wattrset(editw, COLOR_PAIR(CP_TAB_LABEL));
mvwaddstr(editw, TABLINE, x_pos + 2, tab_name);
+ wattrset(editw, COLOR_PAIR(CP_TAB_BORDER));
mvwaddch(editw, TABLINE, x_pos + width - 3, UI_RBOXLINE_CHAR);
mvwaddch(editw, TABLINE, x_pos + width - 2, UI_URCORNER_CHAR);
/* This only rolls emails from the 'email' field, not emails from any
* field of type FIELD_EMAILS.
* TODO: expand to ask for which field to roll if several are present? */
-static void
+void
roll_emails(int item, enum rotate_dir dir)
{
abook_list *emails = csv_to_abook_list(db_fget(item, EMAIL));
else
snprintf(header, EDITW_COLS, "%s", db_name_get(item));
+ wattrset(editw, COLOR_PAIR(CP_TAB_LABEL));
mvwaddstr(editw, 0, (EDITW_COLS - strwidth(header)) / 2, header);
free(header);
} else
y = FIELDS_START_Y;
+ wattrset(editw, COLOR_PAIR(CP_FIELD_NAME));
mvwprintw(editw, y, FIELDS_START_X, "%c - ",
(j < 10) ? '0' + j : 'A' + j - 10);
mvwaddnstr(editw, y, FIELDS_START_X + 4, cur->field->name,
FIELDNAME_MAX_WIDTH));
mvwaddch(editw, y, TAB_COLON_POS, ':');
+ wattrset(editw, COLOR_PAIR(CP_FIELD_VALUE));
if((cur->field->type == FIELD_EMAILS) ||
(cur->field->type == FIELD_LIST)) {
abook_list *emails, *e;
}
/*
- * str is a buffer of max length str_len, which, after calling, will
- * contain a representation of the given [y, m, d] date using the
- * current locale (as defined by LC_TIME).
- *
- * Default is an ISO 8601 representation.
- *
- * %-sequences available to translators: %y, %Y, %m, %M, %d, %D represent
- * year, month, and day (the uppercase version telling to fill with leading
- * zeros if necessary)
+ * available %-sequences:
+ * - %y, %Y, %m, %M, %d, %D represent year, month, and day
+ * (the uppercase version telling to fill with leading zeros
+ * if necessary)
+ * - %I for ISO 8601 representation
*/
-static void
-locale_date(char *str, size_t str_len, int year, int month, int day)
+static size_t
+format_date(char *str, size_t str_len, char *fmt, int year, int month, int day)
{
- char *s = str, *fmt;
+ char *s = str;
size_t len;
-#if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE)
- fmt = year ? dcgettext(PACKAGE, "%Y-%M-%D", LC_TIME) :
- dcgettext(PACKAGE, "--%M-%D", LC_TIME);
-#else
- if(year)
- snprintf(str, str_len, "%04d-%02d-%02d", year, month, day);
- else
- snprintf(str, str_len, "--%02d-%02d", month, day);
- return;
-#endif
-
while(*fmt && (s - str + 1 < str_len)) {
if(*fmt != '%') {
*s++ = *fmt++;
case 'M': s += snprintf(s, len, "%02d", month); break;
case 'd': s += snprintf(s, len, "%d", day); break;
case 'D': s += snprintf(s, len, "%02d", day); break;
- case '%': /* fall through */
- default:
- *s++ = '%';
- *s++ = *fmt;
- break;
+ case 'I': s += format_date(s, len,
+ year ? "%Y-%M-%D" : "--%M-%D",
+ year, month, day);
+ break;
+ case '%': *s++ = '%'; break;
+ default: *s++ = '%'; *s++ = *fmt; break;
}
fmt++;
}
- *++s = 0;
+ *s = 0;
+ return s - str;
+}
+
+/*
+ * str is a buffer of max length str_len, which, after calling, will
+ * contain a representation of the given [y, m, d] date using the
+ * current locale (as defined by LC_TIME).
+ *
+ * In the absence of any localization, use an ISO 8601 representation.
+ */
+static void
+locale_date(char *str, size_t str_len, int year, int month, int day)
+{
+ char *fmt;
+
+#if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE)
+ fmt = year ? dcgettext(PACKAGE, "%Y-%M-%D", LC_TIME) :
+ dcgettext(PACKAGE, "--%M-%D", LC_TIME);
+#else
+ fmt = "%I";
+#endif
+ format_date(str, str_len, fmt, year, month, day);
}
static int is_valid_date(const int day, const int month, const int year)