commit - 8507de6dd13067c5de05a6465a39e34a21e2e577
commit + ff991362a03e8c97d86863feb04f24f2fd2ff9e0
blob - 610572a7514b86a5bc71d77e18aae13ad1b735b4
blob + b92527641c3ff35269a7a56617aa3662d69cea83
--- Makefile
+++ Makefile
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
+#define _XOPEN_SOURCE_EXTENDED
+
#include <stdlib.h>
#include <stdint.h>
#include <ctype.h>
#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>
int numsize;
int ishidden, isdir;
int marking;
+ wchar_t wbuf[PATH_MAX];
mvhline(0, 0, ' ', COLS);
attr_on(A_BOLD, NULL);
} 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
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);