Commit Diff


commit - 8507de6dd13067c5de05a6465a39e34a21e2e577
commit + ff991362a03e8c97d86863feb04f24f2fd2ff9e0
blob - 610572a7514b86a5bc71d77e18aae13ad1b735b4
blob + b92527641c3ff35269a7a56617aa3662d69cea83
--- Makefile
+++ Makefile
@@ -1,5 +1,5 @@
 CFLAGS=-D_FILE_OFFSET_BITS=64
-LDLIBS=-lcurses
+LDLIBS=-lncursesw
 PREFIX=/usr/local
 MANPREFIX=$(PREFIX)/man
 INSTALL=install -D
blob - 45b0d970274f5e20c9ccda778333aec237472db3
blob + d38723107e71c74c6e1129fbecfeccf9f66eef7b
--- rover.c
+++ rover.c
@@ -1,3 +1,5 @@
+#define _XOPEN_SOURCE_EXTENDED
+
 #include <stdlib.h>
 #include <stdint.h>
 #include <ctype.h>
@@ -6,6 +8,7 @@
 #include <stdio.h>
 #include <limits.h>     /* PATH_MAX */
 #include <locale.h>     /* setlocale(), LC_ALL */
+#include <wchar.h>
 #include <unistd.h>     /* chdir(), getcwd(), read(), close(), ... */
 #include <dirent.h>     /* DIR, struct dirent, opendir(), ... */
 #include <sys/stat.h>
@@ -326,6 +329,7 @@ update_view()
     int numsize;
     int ishidden, isdir;
     int marking;
+    wchar_t wbuf[PATH_MAX];
 
     mvhline(0, 0, ' ', COLS);
     attr_on(A_BOLD, NULL);
@@ -339,7 +343,8 @@ update_view()
     } else
         numsize = -1;
     color_set(RVC_CWD, NULL);
-    mvaddnstr(0, 0, CWD, COLS - 4 - numsize);
+    mbstowcs(wbuf, CWD, PATH_MAX);
+    mvaddnwstr(0, 0, wbuf, COLS - 4 - numsize);
     wcolor_set(rover.window, RVC_BORDER, NULL);
     wborder(rover.window, 0, 0, 0, 0, 0, 0, 0, 0);
     /* Selection might not be visible, due to cursor wrapping or window
@@ -362,20 +367,21 @@ update_view()
         if (!isdir) {
             char *suffix, *suffixes = "BKMGTPEZY";
             off_t human_size = ESIZE(j) * 10;
+            int length = mbstowcs(NULL, ENAME(j), 0);
             for (suffix = suffixes; human_size >= 10240; suffix++)
                 human_size = (human_size + 512) / 1024;
             if (*suffix == 'B')
-                snprintf(ROW, ROWSZ, "%s%*d %c", ENAME(j),
-                         (int) (COLS - strlen(ENAME(j)) - 6),
+                swprintf(wbuf, PATH_MAX, L"%s%*d %c", ENAME(j),
+                         (int) (COLS - length - 6),
                          (int) human_size / 10, *suffix);
             else
-                snprintf(ROW, ROWSZ, "%s%*d.%d %c", ENAME(j),
-                         (int) (COLS - strlen(ENAME(j)) - 8),
+                swprintf(wbuf, PATH_MAX, L"%s%*d.%d %c", ENAME(j),
+                         (int) (COLS - length - 8),
                          (int) human_size / 10, (int) human_size % 10, *suffix);
         } else
-            strcpy(ROW, ENAME(j));
+            mbstowcs(wbuf, ENAME(j), PATH_MAX);
         mvwhline(rover.window, i + 1, 1, ' ', COLS - 2);
-        mvwaddnstr(rover.window, i + 1, 2, ROW, COLS - 4);
+        mvwaddnwstr(rover.window, i + 1, 2, wbuf, COLS - 4);
         if (marking && MARKED(j)) {
             wcolor_set(rover.window, RVC_MARKS, NULL);
             mvwaddch(rover.window, i + 1, 1, RVS_MARK);