### Introduction
-noice is a blazing-fast terminal file browser with easy keyboard shortcuts for navigation, opening files and running tasks. noice is developed with terminal based systems in mind. However, the incredible user-friendliness and speed make it a perfect utility on modern distros.
+noice is a blazing-fast terminal file browser with easy keyboard shortcuts for navigation, opening files and running tasks. noice is developed with terminal based systems in mind. However, the incredible user-friendliness and speed make it a perfect utility on modern distros. Navigate to `/usr/bin` from your regular file browser and noice to feel the difference.
The only issue with noice is hard-coded file association. There is no config file (better performance and simpler to maintain) and you have to modify the source to change associations (see [how to change file associations](#change-file-associations)). This fork solves the problem by adding the flexibility of using the default desktop opener at runtime. There are several other improvements too (see [fork-toppings](#fork-toppings)).
void
initcurses(void)
{
- char *term;
-
if (initscr() == NULL) {
- term = getenv("TERM");
+ char *term = getenv("TERM");
if (term != NULL)
fprintf(stderr, "error opening terminal: %s\n", term);
else
mkpath(char *dir, char *name, char *out, size_t n)
{
/* Handle absolute path */
- if (name[0] == '/') {
+ if (name[0] == '/')
strlcpy(out, name, n);
- } else {
+ else {
/* Handle root case */
- if (strcmp(dir, "/") == 0) {
- strlcpy(out, "/", n);
- strlcat(out, name, n);
- } else {
- strlcpy(out, dir, n);
- strlcat(out, "/", n);
- strlcat(out, name, n);
- }
+ if (strcmp(dir, "/") == 0)
+ snprintf(out, n, "/%s", name);
+ else
+ snprintf(out, n, "%s/%s", dir, name);
}
return out;
}
/* Print listing */
odd = ISODD(nlines);
- if (cur < nlines / 2) {
+ if (cur < (nlines >> 1)) {
for (i = 0; i < nlines; i++)
printent(&dents[i], i == cur);
- } else if (cur >= ndents - nlines / 2) {
+ } else if (cur >= ndents - (nlines >> 1)) {
for (i = ndents - nlines; i < ndents; i++)
printent(&dents[i], i == cur);
} else {
- for (i = cur - nlines / 2;
- i < cur + nlines / 2 + odd; i++)
+ nlines >>= 1;
+ for (i = cur - nlines; i < cur + nlines + odd; i++)
printent(&dents[i], i == cur);
}
}