timeformat.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Sat, 07 Nov 2015 17:49:58 +0200
changeset 89 ce4c4447dbd4
parent 87 78238d26911a
child 92 66f7e2aa040c
permissions -rw-r--r--
[add-cmake] Update version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
# HG changeset patch
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
     2
# Parent 66f6d14c851bd0280966a8263ff4119588775620
51
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
[experimental] Allow user to modify time formatting
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
  * give user full control and full responsibility
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
  * add time_prefix = 3, that uses
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
    * time_format (normal prefix format string)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
    * time_format_special (special prefix format string)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
    * time_prefix_len (normal prefix width + 5)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
  * fall back to 0, if any of these unset
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    12
diff -r 66f6d14c851b mcabber/mcabber/screen.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    13
--- a/mcabber/mcabber/screen.c	Tue Nov 11 23:42:00 2014 +0200
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    14
+++ b/mcabber/mcabber/screen.c	Tue Nov 11 23:43:05 2014 +0200
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    15
@@ -85,6 +85,7 @@
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    16
 static void scr_end_current_completion(void);
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    17
 static void scr_insert_text(const char*);
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    18
 static void scr_handle_tab(gboolean fwd);
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    19
+static unsigned int attention_sign(void);
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    20
 
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    21
 static void scr_glog_print(const gchar *log_domain, GLogLevelFlags log_level,
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    22
                            const gchar *message, gpointer user_data);
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    23
@@ -222,8 +223,6 @@
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    24
 
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    25
 /* Functions */
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    26
 
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    27
-static unsigned int attention_sign(void);
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    28
-
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    29
 static int find_color(const char *name)
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    30
 {
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    31
   int result;
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    32
@@ -875,38 +874,100 @@
51
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
 static const char *timeprefixes[] = {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
   "%m-%d %H:%M ",
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
   "%H:%M ",
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
-  " "
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
+  " ",
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
+  NULL,
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
 };
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
 
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
 static const char *spectimeprefixes[] = {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
   "%m-%d %H:%M:%S   ",
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
   "%H:%M:%S   ",
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
-  "   "
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
+  "   ",
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
+  NULL,
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
 };
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
 
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
 static int timepreflengths[] = {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
   // (length of the corresponding timeprefix + 5)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
   17,
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
   11,
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
-  6
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
+  6,
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
+  0,
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
 };
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
 
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
+/*
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
+static struct {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
+  char format;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
+  unsigned short len;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
+} timeprefix_characters[] = {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
+  { 'C', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
+  { 'd', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
+  { 'D', 10 },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
+  { 'e', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
+  { 'F', 10 },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
+  { 'G', 4  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
+  { 'g', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
+  { 'H', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
+  { 'I', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
+  { 'j', 3  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
+  { 'k', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
+  { 'l', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
+  { 'm', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
+  { 'M', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
+  { 'p', 2  }, // ? locale-dependent, can set LC_CTIME=C?
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
+  { 'P', 2  }, // ?
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
+  { 'R', 5  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
+  { 'S', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
+  { 'T', 8  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
+  { 'u', 1  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
+  { 'U', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
+  { 'V', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
+  { 'w', 1  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
+  { 'W', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
+  { 'y', 2  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
+  { 'Y', 4  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
+  { 'z', 5  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
+  { '%', 1  },
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
+  { '\0', 0 }, // end marker
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
+};
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
+*/
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
+
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
+static guint gettprefixnum (void)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
+{
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
+  guint n = settings_opt_get_int ("time_prefix");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
+  static gboolean initialized = FALSE;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
+  if (n < 3)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
+    return n;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
+  if (n > 3)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
+    return 0;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
+  if (!initialized) {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
+    const char *tp  = settings_opt_get ("time_format");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
+    const char *stp = settings_opt_get ("time_format_special");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
+    guint       tpl = settings_opt_get_int ("time_prefix_len");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
+    if (!tp || !*tp || !stp || !*stp || tpl < 6) {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
+      tp  = timeprefixes[0];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
+      stp = spectimeprefixes[0];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
+      tpl = timepreflengths[0];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
+    }
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
+    timeprefixes[3]     = g_strdup (tp);
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
+    spectimeprefixes[3] = g_strdup (stp);
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
+    timepreflengths[3]  = tpl;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
+    initialized = TRUE;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
+  }
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
+  return 3;
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
+}
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
+
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
 static const char *gettprefix(void)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
 {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
-  guint n = settings_opt_get_int("time_prefix");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
-  return timeprefixes[(n < 3 ? n : 0)];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
+  return timeprefixes[gettprefixnum()];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
 }
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
 
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
 static const char *getspectprefix(void)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
 {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
-  guint n = settings_opt_get_int("time_prefix");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
-  return spectimeprefixes[(n < 3 ? n : 0)];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
+  return spectimeprefixes[gettprefixnum()];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
 }
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
 
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
 guint scr_getprefixwidth(void)
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
 {
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
-  guint n = settings_opt_get_int("time_prefix");
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
-  return timepreflengths[(n < 3 ? n : 0)];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
+  return timepreflengths[gettprefixnum()];
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
 }
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
 
5e5992999357 Fiddling with time formatting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
 guint scr_gettextwidth(void)