| @@ -22,7 +22,6 @@ |
| 22 | 22 | | #include <stdlib.h> |
| 23 | 23 | | #include <stdio.h> |
| 24 | 24 | | #include <string.h> |
| 25 | | − | #include <libgen.h> |
| 26 | 25 | | #include <unistd.h> |
| 27 | 26 | | #include <sys/stat.h> |
| 28 | 27 | | #include <sys/time.h> |
| @@ -87,6 +86,8 @@ void cleanup(void) { |
| 87 | 86 | | } |
| 88 | 87 | | |
| 89 | 88 | | void check_add_file(char *filename) { |
| 89 | + | const char *bn; |
| 90 | + | |
| 90 | 91 | | if (filename == NULL || *filename == '\0') |
| 91 | 92 | | return; |
| 92 | 93 | | |
| @@ -108,9 +109,12 @@ void check_add_file(char *filename) { |
| 108 | 109 | | } |
| 109 | 110 | | files[fileidx].loaded = false; |
| 110 | 111 | | files[fileidx].name = s_strdup(filename); |
| 111 | | − | files[fileidx].base = s_strdup(basename(filename)); |
| 112 | 112 | | if (*filename == '/') |
| 113 | 113 | | files[fileidx].path = files[fileidx].name; |
| 114 | + | if ((bn = strrchr(files[fileidx].name , '/')) != NULL && bn[1] != '\0') |
| 115 | + | files[fileidx].base = ++bn; |
| 116 | + | else |
| 117 | + | files[fileidx].base = files[fileidx].name; |
| 114 | 118 | | fileidx++; |
| 115 | 119 | | } |
| 116 | 120 | | |
| @@ -221,7 +225,7 @@ void load_image(int new) { |
| 221 | 225 | | } |
| 222 | 226 | | |
| 223 | 227 | | void update_info(void) { |
| 224 | | − | unsigned int i, fw, pw; |
| 228 | + | int i, fw, pw, fi, ln, rn; |
| 225 | 229 | | char frame_info[16]; |
| 226 | 230 | | const char *size_unit; |
| 227 | 231 | | float size = filesize; |
| @@ -235,8 +239,13 @@ void update_info(void) { |
| 235 | 239 | | snprintf(win_bar_l, sizeof win_bar_l, "Loading... %0*d/%d", |
| 236 | 240 | | pw, tns.cnt, filecnt); |
| 237 | 241 | | } else { |
| 238 | | − | snprintf(win_bar_l, sizeof win_bar_l, "%0*d/%d%s%s", |
| 239 | | − | pw, tns.sel + 1, filecnt, BAR_SEPARATOR, files[tns.sel].base); |
| 242 | + | fi = snprintf(win_bar_l, sizeof win_bar_l, "%0*d/%d%s", |
| 243 | + | pw, tns.sel + 1, filecnt, BAR_SEPARATOR); |
| 244 | + | ln = snprintf(win_bar_l + fi, sizeof win_bar_l - fi, "%s", |
| 245 | + | files[tns.sel].name) + fi; |
| 246 | + | if (win_textwidth(win_bar_l, ln, true) > win.w) |
| 247 | + | snprintf(win_bar_l + fi, sizeof win_bar_l - fi, "%s", |
| 248 | + | files[tns.sel].base); |
| 240 | 249 | | } |
| 241 | 250 | | win_set_title(&win, "sxiv"); |
| 242 | 251 | | win_set_bar_info(&win, win_bar_l, NULL); |
| @@ -247,18 +256,28 @@ void update_info(void) { |
| 247 | 256 | | for (i = img.multi.cnt; i > 0; i /= 10) |
| 248 | 257 | | fw++; |
| 249 | 258 | | snprintf(frame_info, sizeof frame_info, "%s%0*d/%d", |
| 250 | | − | BAR_SEPARATOR, fw, img.multi.sel + 1, img.multi.cnt); |
| 259 | + | BAR_SEPARATOR, fw, img.multi.sel+1, img.multi.cnt); |
| 251 | 260 | | } else { |
| 252 | 261 | | frame_info[0] = '\0'; |
| 253 | 262 | | } |
| 254 | | − | snprintf(win_bar_l, sizeof win_bar_l, "%0*d/%d%s%s", |
| 255 | | − | pw, fileidx + 1, filecnt, BAR_SEPARATOR, files[fileidx].base); |
| 256 | | − | snprintf(win_bar_r, sizeof win_bar_r, "%.2f%s%s%dx%d%s%3d%%%s", |
| 257 | | − | size, size_unit, BAR_SEPARATOR, img.w, img.h, BAR_SEPARATOR, |
| 258 | | − | (int) (img.zoom * 100.0), frame_info); |
| 263 | + | fi = snprintf(win_bar_l, sizeof win_bar_l, "%0*d/%d%s", |
| 264 | + | pw, fileidx + 1, filecnt, BAR_SEPARATOR); |
| 265 | + | ln = snprintf(win_bar_l + fi, sizeof win_bar_l - fi, "%s", |
| 266 | + | files[fileidx].name) + fi; |
| 267 | + | rn = snprintf(win_bar_r, sizeof win_bar_r, "%.2f%s%s%dx%d%s%3d%%%s", |
| 268 | + | size, size_unit, BAR_SEPARATOR, img.w, img.h, BAR_SEPARATOR, |
| 269 | + | (int) (img.zoom * 100.0), frame_info); |
| 270 | + | |
| 271 | + | if (win_textwidth(win_bar_l, ln, true) + |
| 272 | + | win_textwidth(win_bar_r, rn, true) > win.w) |
| 273 | + | { |
| 274 | + | snprintf(win_bar_l + fi, sizeof win_bar_l - fi, "%s", |
| 275 | + | files[fileidx].base); |
| 276 | + | } |
| 277 | + | win_set_bar_info(&win, win_bar_l, win_bar_r); |
| 278 | + | |
| 259 | 279 | | snprintf(win_title, sizeof win_title, "sxiv - %s", files[fileidx].name); |
| 260 | 280 | | win_set_title(&win, win_title); |
| 261 | | − | win_set_bar_info(&win, win_bar_l, win_bar_r); |
| 262 | 281 | | } |
| 263 | 282 | | } |
| 264 | 283 | | |