changeset: 6645:b74dfb9fa901
user:      Kevin McCarthy <[email protected]>
date:      Tue May 03 13:21:41 2016 -0700
link:      http://dev.mutt.org/hg/mutt/rev/b74dfb9fa901

Skip bidi markers in the pager and index.  (closes #3827)

Curses and slang don't support them, so there's little point in
showing them or attempting to somehow deal with them.

This patch adds filtering in the pager, and changes the filtering
added in 6e0aca94cdb0 for the index to completely skip the marker.

diffs (45 lines):

diff -r 9dfe211355b6 -r b74dfb9fa901 mbyte.c
--- a/mbyte.c   Tue May 03 09:46:51 2016 -0700
+++ b/mbyte.c   Tue May 03 13:21:41 2016 -0700
@@ -548,14 +548,12 @@
     }
     if (!IsWPrint (wc))
       wc = '?';
-    /* HACK:
-     * Work around a gnu screen bug. See ticket #3827.
-     * Filter out the RIGHT-TO-LEFT and LEFT-TO-RIGHT bidi marks because
-     * they result in screen corruption.
+    /* Filter out the RIGHT-TO-LEFT and LEFT-TO-RIGHT bidi markers because
+     * they result in screen corruption.   See ticket #3827.
      */
     else if (Charset_is_utf8 &&
              ((wc == (wchar_t)0x200f) || (wc == (wchar_t)0x200e)))
-      wc = '?';
+      continue;
     k2 = wcrtomb (scratch, wc, &mbstate2);
     scratch[k2] = '\0';
     mutt_buffer_addstr (b, scratch);
diff -r 9dfe211355b6 -r b74dfb9fa901 pager.c
--- a/pager.c   Tue May 03 09:46:51 2016 -0700
+++ b/pager.c   Tue May 03 13:21:41 2016 -0700
@@ -1146,10 +1146,19 @@
     if (k == 0)
       k = 1;
 
-    if (Charset_is_utf8 && (wc == 0x200B || wc == 0xFEFF))
+    if (Charset_is_utf8)
     {
+      if (wc == 0x200B || wc == 0xFEFF)
+      {
        dprint (3, (debugfile, "skip zero-width character U+%04X\n", (unsigned 
short)wc));
        continue;
+      }
+      /* Filter bidi markers, see ticket #3827 */
+      if (wc == (wchar_t)0x200f || wc == (wchar_t)0x200e)
+      {
+       dprint (3, (debugfile, "skip bidi marker U+%04X\n", (unsigned 
short)wc));
+       continue;
+      }
     }
 
     /* Handle backspace */

Reply via email to