nano-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] minibar: when the next character has zero width, show its code t


From: Benno Schulenberg
Subject: [PATCH] minibar: when the next character has zero width, show its code too
Date: Wed, 6 Jan 2021 20:23:30 +0100

This allows seeing that an accented character is not a single code point
but composed from a base character plus a combining character.


[ I don't really like how this behaves, and it doesn't handle the case
  of multiple combining characters, but I can't think of a better way.
  But I do want to be able to see it when a character is composed. ]

---
 src/winio.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/winio.c b/src/winio.c
index 115c34f7..d8f304b0 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2072,6 +2072,7 @@ void minibar(void)
        char *thename = NULL, *number_of_lines = NULL, *ranking = NULL;
        char *location = nmalloc(44);
        char *hexadecimal = nmalloc(9);
+       char *successor = NULL;
        size_t namewidth, placewidth;
        size_t tallywidth = 0;
        size_t padding = 2;
@@ -2150,10 +2151,19 @@ void minibar(void)
                        sprintf(hexadecimal, "  0x%02X", (unsigned 
char)*this_position);
 
                mvwaddstr(bottomwin, 0, COLS - 23, hexadecimal);
+
+               successor = this_position + char_length(this_position);
+
+               if (*this_position != '\0' && is_zerowidth(successor) &&
+                                       mbtowc(&widecode, successor, 
MAXCHARLEN) >= 0) {
+                       sprintf(hexadecimal, " U+%04X", widecode);
+                       waddstr(bottomwin, hexadecimal);
+               } else
+                       successor = NULL;
        }
 
        /* Display the state of three flags, and the state of macro and mark. */
-       if (namewidth + tallywidth + 14 + 2 * padding < COLS) {
+       if (!successor && namewidth + tallywidth + 14 + 2 * padding < COLS) {
                wmove(bottomwin, 0, COLS - 11 - padding);
                show_states_at(bottomwin);
        }
-- 
2.29.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]