Rocco Rutte:
[apps/madmutt.git] / muttlib.c
index b01619f..711b3d8 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -456,6 +456,13 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
       }
       break;
       
+      case '^':
+      {
+        strfcpy (p, NONULL(CurrentFolder), sizeof (p));
+        tail = s + 1;
+      }
+      break;
       default:
       {
        *p = '\0';
@@ -929,6 +936,23 @@ void mutt_safe_path (char *s, size_t l, ADDRESS *a)
       *p = '_';
 }
 
+/* counts how many characters in s can be skipped while none of the
+ * characters of c appears */
+int mutt_skipchars (const char* s, const char* c) {
+  int ret = 0;
+  const char* p = s;
+  while (s && *s) {
+    register const char* t = c;
+    while (t && *t) {
+      if (*t == *s)
+        return (ret);
+      t++;
+    }
+    ret++;
+    s++;
+  }
+  return (mutt_strlen (p));
+}
 
 void mutt_FormatString (char *dest,            /* output buffer */
                        size_t destlen,         /* output buffer len */
@@ -1136,9 +1160,15 @@ void mutt_FormatString (char *dest,              /* output buffer */
     }
     else
     {
-      *wptr++ = *src++;
-      wlen++;
-      col++;
+      unsigned int bar = mutt_skipchars (src, "%\\");
+      char* bar2 = safe_malloc (bar+1);
+      strfcpy (bar2, src, bar+1);
+      while (bar--) {
+        *wptr++ = *src++;
+        wlen++;
+      }
+      col += mutt_strwidth (bar2);
+      FREE(&bar2);
     }
   }
   *wptr = 0;
@@ -1288,8 +1318,10 @@ void state_prefix_putc (char c, STATE *s)
       while (regexec ((regex_t *) QuoteRegexp.rx, &Quotebuf[offset], 1, pmatch, 0) == 0)
        offset += pmatch->rm_eo;
 
-      if (!option (OPTQUOTEEMPTY) && Quotebuf[0] == '\n')
-       strcpy (buf, Quotebuf);
+      if (!option (OPTQUOTEEMPTY) && Quotebuf[offset] == '\n') {
+        buf[0] = '\n';
+        buf[1] = '\0';
+      }
       else if (option (OPTQUOTEQUOTED) && offset)
       {
        for (i = 0; i < offset; i++)