mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
Optimizations
This commit is contained in:
parent
f3d95b6d0d
commit
7be7a6d215
9
Makefile
9
Makefile
|
@ -5,10 +5,11 @@ MANPREFIX = $(PREFIX)/man
|
||||||
|
|
||||||
#CPPFLAGS = -DDEBUG
|
#CPPFLAGS = -DDEBUG
|
||||||
#CFLAGS = -g
|
#CFLAGS = -g
|
||||||
CFLAGS = -O3 -march=native
|
CFLAGS = -O3 -march=native -fno-asynchronous-unwind-tables -fdata-sections \
|
||||||
|
-ffunction-sections -Wl,--gc-sections
|
||||||
LDLIBS = -lcurses
|
LDLIBS = -lcurses
|
||||||
|
|
||||||
DISTFILES = nnn.c strlcat.c strlcpy.c util.h config.def.h\
|
DISTFILES = nnn.c strlcat.c strlcpy.c util.h config.def.h \
|
||||||
nnn.1 Makefile README.md LICENSE
|
nnn.1 Makefile README.md LICENSE
|
||||||
OBJ = nnn.o strlcat.o strlcpy.o
|
OBJ = nnn.o strlcat.o strlcpy.o
|
||||||
BIN = nnn
|
BIN = nnn
|
||||||
|
@ -17,7 +18,9 @@ all: $(BIN)
|
||||||
|
|
||||||
$(BIN): $(OBJ)
|
$(BIN): $(OBJ)
|
||||||
$(CC) $(CFLAGS) -o $@ $(OBJ) $(LDFLAGS) $(LDLIBS)
|
$(CC) $(CFLAGS) -o $@ $(OBJ) $(LDFLAGS) $(LDLIBS)
|
||||||
strip $(BIN)
|
strip -S --strip-unneeded --remove-section=.note.gnu.gold-version \
|
||||||
|
--remove-section=.comment --remove-section=.note \
|
||||||
|
--remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag $(BIN)
|
||||||
|
|
||||||
nnn.o: util.h config.h
|
nnn.o: util.h config.h
|
||||||
strlcat.o: util.h
|
strlcat.o: util.h
|
||||||
|
|
84
config.def.h
84
config.def.h
|
@ -3,12 +3,12 @@
|
||||||
#define CURSR " > "
|
#define CURSR " > "
|
||||||
#define EMPTY " "
|
#define EMPTY " "
|
||||||
|
|
||||||
int mtimeorder = 0; /* Set to 1 to sort by time modified */
|
static int mtimeorder = 0; /* Set to 1 to sort by time modified */
|
||||||
int sizeorder = 0; /* Set to 1 to sort by file size */
|
static int sizeorder = 0; /* Set to 1 to sort by file size */
|
||||||
int idletimeout = 0; /* Screensaver timeout in seconds, 0 to disable */
|
static int idletimeout = 0; /* Screensaver timeout in seconds, 0 to disable */
|
||||||
int showhidden = 0; /* Set to 1 to show hidden files by default */
|
static int showhidden = 0; /* Set to 1 to show hidden files by default */
|
||||||
int showdetail = 0; /* Set to show additional file info */
|
static int showdetail = 0; /* Set to show additional file info */
|
||||||
char *idlecmd = "rain"; /* The screensaver program */
|
static char *idlecmd = "rain"; /* The screensaver program */
|
||||||
|
|
||||||
struct assoc assocs[] = {
|
struct assoc assocs[] = {
|
||||||
//{ "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mpv" },
|
//{ "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mpv" },
|
||||||
|
@ -23,58 +23,58 @@ struct assoc assocs[] = {
|
||||||
|
|
||||||
struct key bindings[] = {
|
struct key bindings[] = {
|
||||||
/* Quit */
|
/* Quit */
|
||||||
{ 'q', SEL_QUIT },
|
{ 'q', SEL_QUIT, "\0", "\0" },
|
||||||
/* Back */
|
/* Back */
|
||||||
{ KEY_BACKSPACE, SEL_BACK },
|
{ KEY_BACKSPACE, SEL_BACK, "\0", "\0" },
|
||||||
{ KEY_LEFT, SEL_BACK },
|
{ KEY_LEFT, SEL_BACK, "\0", "\0" },
|
||||||
{ 'h', SEL_BACK },
|
{ 'h', SEL_BACK, "\0", "\0" },
|
||||||
{ CONTROL('H'), SEL_BACK },
|
{ CONTROL('H'), SEL_BACK, "\0", "\0" },
|
||||||
/* Inside */
|
/* Inside */
|
||||||
{ KEY_ENTER, SEL_GOIN },
|
{ KEY_ENTER, SEL_GOIN, "\0", "\0" },
|
||||||
{ '\r', SEL_GOIN },
|
{ '\r', SEL_GOIN, "\0", "\0" },
|
||||||
{ KEY_RIGHT, SEL_GOIN },
|
{ KEY_RIGHT, SEL_GOIN, "\0", "\0" },
|
||||||
{ 'l', SEL_GOIN },
|
{ 'l', SEL_GOIN, "\0", "\0" },
|
||||||
/* Filter */
|
/* Filter */
|
||||||
{ '/', SEL_FLTR },
|
{ '/', SEL_FLTR, "\0", "\0" },
|
||||||
{ '&', SEL_FLTR },
|
{ '&', SEL_FLTR, "\0", "\0" },
|
||||||
/* Next */
|
/* Next */
|
||||||
{ 'j', SEL_NEXT },
|
{ 'j', SEL_NEXT, "\0", "\0" },
|
||||||
{ KEY_DOWN, SEL_NEXT },
|
{ KEY_DOWN, SEL_NEXT, "\0", "\0" },
|
||||||
{ CONTROL('N'), SEL_NEXT },
|
{ CONTROL('N'), SEL_NEXT, "\0", "\0" },
|
||||||
/* Previous */
|
/* Previous */
|
||||||
{ 'k', SEL_PREV },
|
{ 'k', SEL_PREV, "\0", "\0" },
|
||||||
{ KEY_UP, SEL_PREV },
|
{ KEY_UP, SEL_PREV, "\0", "\0" },
|
||||||
{ CONTROL('P'), SEL_PREV },
|
{ CONTROL('P'), SEL_PREV, "\0", "\0" },
|
||||||
/* Page down */
|
/* Page down */
|
||||||
{ KEY_NPAGE, SEL_PGDN },
|
{ KEY_NPAGE, SEL_PGDN, "\0", "\0" },
|
||||||
{ CONTROL('D'), SEL_PGDN },
|
{ CONTROL('D'), SEL_PGDN, "\0", "\0" },
|
||||||
/* Page up */
|
/* Page up */
|
||||||
{ KEY_PPAGE, SEL_PGUP },
|
{ KEY_PPAGE, SEL_PGUP, "\0", "\0" },
|
||||||
{ CONTROL('U'), SEL_PGUP },
|
{ CONTROL('U'), SEL_PGUP, "\0", "\0" },
|
||||||
/* Home */
|
/* Home */
|
||||||
{ KEY_HOME, SEL_HOME },
|
{ KEY_HOME, SEL_HOME, "\0", "\0" },
|
||||||
{ CONTROL('A'), SEL_HOME },
|
{ CONTROL('A'), SEL_HOME, "\0", "\0" },
|
||||||
{ '^', SEL_HOME },
|
{ '^', SEL_HOME, "\0", "\0" },
|
||||||
/* End */
|
/* End */
|
||||||
{ KEY_END, SEL_END },
|
{ KEY_END, SEL_END, "\0", "\0" },
|
||||||
{ CONTROL('E'), SEL_END },
|
{ CONTROL('E'), SEL_END, "\0", "\0" },
|
||||||
{ '$', SEL_END },
|
{ '$', SEL_END, "\0", "\0" },
|
||||||
/* Change dir */
|
/* Change dir */
|
||||||
{ 'c', SEL_CD },
|
{ 'c', SEL_CD, "\0", "\0" },
|
||||||
{ '~', SEL_CDHOME },
|
{ '~', SEL_CDHOME, "\0", "\0" },
|
||||||
/* Toggle hide .dot files */
|
/* Toggle hide .dot files */
|
||||||
{ '.', SEL_TOGGLEDOT },
|
{ '.', SEL_TOGGLEDOT, "\0", "\0" },
|
||||||
/* Detailed listing */
|
/* Detailed listing */
|
||||||
{ 'd', SEL_DETAIL },
|
{ 'd', SEL_DETAIL, "\0", "\0" },
|
||||||
/* Toggle sort by size */
|
/* Toggle sort by size */
|
||||||
{ 's', SEL_FSIZE },
|
{ 's', SEL_FSIZE, "\0", "\0" },
|
||||||
/* Toggle sort by time */
|
/* Toggle sort by time */
|
||||||
{ 't', SEL_MTIME },
|
{ 't', SEL_MTIME, "\0", "\0" },
|
||||||
{ CONTROL('L'), SEL_REDRAW },
|
{ CONTROL('L'), SEL_REDRAW, "\0", "\0" },
|
||||||
/* Copy currently selected file path */
|
/* Copy currently selected file path */
|
||||||
{ CONTROL('K'), SEL_COPY },
|
{ CONTROL('K'), SEL_COPY, "\0", "\0" },
|
||||||
/* Run command */
|
/* Run command */
|
||||||
{ 'z', SEL_RUN, "top" },
|
{ 'z', SEL_RUN, "top", "\0" },
|
||||||
{ '!', SEL_RUN, "sh", "SHELL" },
|
{ '!', SEL_RUN, "sh", "SHELL" },
|
||||||
/* Run command with argument */
|
/* Run command with argument */
|
||||||
{ 'e', SEL_RUNARG, "vi", "EDITOR" },
|
{ 'e', SEL_RUNARG, "vi", "EDITOR" },
|
||||||
|
|
115
nnn.c
115
nnn.c
|
@ -90,13 +90,13 @@ typedef struct entry {
|
||||||
} *pEntry;
|
} *pEntry;
|
||||||
|
|
||||||
/* Global context */
|
/* Global context */
|
||||||
struct entry *dents;
|
static struct entry *dents;
|
||||||
int ndents, cur;
|
static int ndents, cur;
|
||||||
int idle;
|
static int idle;
|
||||||
char *opener = NULL;
|
static char *opener = NULL;
|
||||||
char *fallback_opener = NULL;
|
static char *fallback_opener = NULL;
|
||||||
char *copier = NULL;
|
static char *copier = NULL;
|
||||||
const char* size_units[] = {"B", "K", "M", "G", "T", "P", "E", "Z", "Y"};
|
static const char* size_units[] = {"B", "K", "M", "G", "T", "P", "E", "Z", "Y"};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Layout:
|
* Layout:
|
||||||
|
@ -115,12 +115,12 @@ const char* size_units[] = {"B", "K", "M", "G", "T", "P", "E", "Z", "Y"};
|
||||||
* '------
|
* '------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void printmsg(char *);
|
static void printmsg(char *);
|
||||||
void printwarn(void);
|
static void printwarn(void);
|
||||||
void printerr(int, char *);
|
static void printerr(int, char *);
|
||||||
|
|
||||||
#undef dprintf
|
#undef dprintf
|
||||||
int
|
static int
|
||||||
dprintf(int fd, const char *fmt, ...)
|
dprintf(int fd, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
|
@ -135,18 +135,7 @@ dprintf(int fd, const char *fmt, ...)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
static void *
|
||||||
xmalloc(size_t size)
|
|
||||||
{
|
|
||||||
void *p;
|
|
||||||
|
|
||||||
p = malloc(size);
|
|
||||||
if (p == NULL)
|
|
||||||
printerr(1, "malloc");
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
xrealloc(void *p, size_t size)
|
xrealloc(void *p, size_t size)
|
||||||
{
|
{
|
||||||
p = realloc(p, size);
|
p = realloc(p, size);
|
||||||
|
@ -155,20 +144,9 @@ xrealloc(void *p, size_t size)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
|
||||||
xstrdup(const char *s)
|
|
||||||
{
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
p = strdup(s);
|
|
||||||
if (p == NULL)
|
|
||||||
printerr(1, "strdup");
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Some implementations of dirname(3) may modify `path' and some
|
/* Some implementations of dirname(3) may modify `path' and some
|
||||||
* return a pointer inside `path'. */
|
* return a pointer inside `path'. */
|
||||||
char *
|
static char *
|
||||||
xdirname(const char *path)
|
xdirname(const char *path)
|
||||||
{
|
{
|
||||||
static char out[PATH_MAX];
|
static char out[PATH_MAX];
|
||||||
|
@ -182,7 +160,7 @@ xdirname(const char *path)
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
spawn(char *file, char *arg, char *dir)
|
spawn(char *file, char *arg, char *dir)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
@ -202,7 +180,7 @@ spawn(char *file, char *arg, char *dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
static char *
|
||||||
xgetenv(char *name, char *fallback)
|
xgetenv(char *name, char *fallback)
|
||||||
{
|
{
|
||||||
char *value;
|
char *value;
|
||||||
|
@ -213,7 +191,7 @@ xgetenv(char *name, char *fallback)
|
||||||
return value && value[0] ? value : fallback;
|
return value && value[0] ? value : fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
xstricmp(const char *s1, const char *s2)
|
xstricmp(const char *s1, const char *s2)
|
||||||
{
|
{
|
||||||
while (*s2 != 0 && TOUPPER(*s1) == TOUPPER(*s2))
|
while (*s2 != 0 && TOUPPER(*s1) == TOUPPER(*s2))
|
||||||
|
@ -226,12 +204,12 @@ xstricmp(const char *s1, const char *s2)
|
||||||
return (int) (TOUPPER(*s1) - TOUPPER(*s2));
|
return (int) (TOUPPER(*s1) - TOUPPER(*s2));
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
static char *
|
||||||
openwith(char *file)
|
openwith(char *file)
|
||||||
{
|
{
|
||||||
regex_t regex;
|
regex_t regex;
|
||||||
char *bin = NULL;
|
char *bin = NULL;
|
||||||
int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < LEN(assocs); i++) {
|
for (i = 0; i < LEN(assocs); i++) {
|
||||||
if (regcomp(®ex, assocs[i].regex,
|
if (regcomp(®ex, assocs[i].regex,
|
||||||
|
@ -246,7 +224,7 @@ openwith(char *file)
|
||||||
return bin;
|
return bin;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
setfilter(regex_t *regex, char *filter)
|
setfilter(regex_t *regex, char *filter)
|
||||||
{
|
{
|
||||||
char errbuf[LINE_MAX];
|
char errbuf[LINE_MAX];
|
||||||
|
@ -264,19 +242,19 @@ setfilter(regex_t *regex, char *filter)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
initfilter(int dot, char **ifilter)
|
initfilter(int dot, char **ifilter)
|
||||||
{
|
{
|
||||||
*ifilter = dot ? "." : "^[^.]";
|
*ifilter = dot ? "." : "^[^.]";
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
visible(regex_t *regex, char *file)
|
visible(regex_t *regex, char *file)
|
||||||
{
|
{
|
||||||
return regexec(regex, file, 0, NULL, 0) == 0;
|
return regexec(regex, file, 0, NULL, 0) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
entrycmp(const void *va, const void *vb)
|
entrycmp(const void *va, const void *vb)
|
||||||
{
|
{
|
||||||
if (mtimeorder)
|
if (mtimeorder)
|
||||||
|
@ -288,7 +266,7 @@ entrycmp(const void *va, const void *vb)
|
||||||
return xstricmp(((pEntry)va)->name, ((pEntry)vb)->name);
|
return xstricmp(((pEntry)va)->name, ((pEntry)vb)->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
initcurses(void)
|
initcurses(void)
|
||||||
{
|
{
|
||||||
if (initscr() == NULL) {
|
if (initscr() == NULL) {
|
||||||
|
@ -308,14 +286,14 @@ initcurses(void)
|
||||||
timeout(1000); /* One second */
|
timeout(1000); /* One second */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
exitcurses(void)
|
exitcurses(void)
|
||||||
{
|
{
|
||||||
endwin(); /* Restore terminal */
|
endwin(); /* Restore terminal */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Messages show up at the bottom */
|
/* Messages show up at the bottom */
|
||||||
void
|
static void
|
||||||
printmsg(char *msg)
|
printmsg(char *msg)
|
||||||
{
|
{
|
||||||
move(LINES - 1, 0);
|
move(LINES - 1, 0);
|
||||||
|
@ -323,14 +301,14 @@ printmsg(char *msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display warning as a message */
|
/* Display warning as a message */
|
||||||
void
|
static void
|
||||||
printwarn(void)
|
printwarn(void)
|
||||||
{
|
{
|
||||||
printmsg(strerror(errno));
|
printmsg(strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Kill curses and display error before exiting */
|
/* Kill curses and display error before exiting */
|
||||||
void
|
static void
|
||||||
printerr(int ret, char *prefix)
|
printerr(int ret, char *prefix)
|
||||||
{
|
{
|
||||||
exitcurses();
|
exitcurses();
|
||||||
|
@ -339,14 +317,14 @@ printerr(int ret, char *prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear the last line */
|
/* Clear the last line */
|
||||||
void
|
static void
|
||||||
clearprompt(void)
|
clearprompt(void)
|
||||||
{
|
{
|
||||||
printmsg("");
|
printmsg("");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print prompt on the last line */
|
/* Print prompt on the last line */
|
||||||
void
|
static void
|
||||||
printprompt(char *str)
|
printprompt(char *str)
|
||||||
{
|
{
|
||||||
clearprompt();
|
clearprompt();
|
||||||
|
@ -355,10 +333,11 @@ printprompt(char *str)
|
||||||
|
|
||||||
/* Returns SEL_* if key is bound and 0 otherwise.
|
/* Returns SEL_* if key is bound and 0 otherwise.
|
||||||
* Also modifies the run and env pointers (used on SEL_{RUN,RUNARG}) */
|
* Also modifies the run and env pointers (used on SEL_{RUN,RUNARG}) */
|
||||||
int
|
static int
|
||||||
nextsel(char **run, char **env)
|
nextsel(char **run, char **env)
|
||||||
{
|
{
|
||||||
int c, i;
|
int c;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
c = getch();
|
c = getch();
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
|
@ -375,7 +354,7 @@ nextsel(char **run, char **env)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
static char *
|
||||||
readln(void)
|
readln(void)
|
||||||
{
|
{
|
||||||
static char ln[LINE_MAX];
|
static char ln[LINE_MAX];
|
||||||
|
@ -391,7 +370,7 @@ readln(void)
|
||||||
return ln[0] ? ln : NULL;
|
return ln[0] ? ln : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
canopendir(char *path)
|
canopendir(char *path)
|
||||||
{
|
{
|
||||||
DIR *dirp;
|
DIR *dirp;
|
||||||
|
@ -403,7 +382,7 @@ canopendir(char *path)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
static char *
|
||||||
mkpath(char *dir, char *name, char *out, size_t n)
|
mkpath(char *dir, char *name, char *out, size_t n)
|
||||||
{
|
{
|
||||||
/* Handle absolute path */
|
/* Handle absolute path */
|
||||||
|
@ -419,7 +398,7 @@ mkpath(char *dir, char *name, char *out, size_t n)
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
printent(struct entry *ent, int active)
|
printent(struct entry *ent, int active)
|
||||||
{
|
{
|
||||||
if (S_ISDIR(ent->mode))
|
if (S_ISDIR(ent->mode))
|
||||||
|
@ -436,9 +415,9 @@ printent(struct entry *ent, int active)
|
||||||
printw("%s%s\n", active ? CURSR : EMPTY, ent->name);
|
printw("%s%s\n", active ? CURSR : EMPTY, ent->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void (*printptr)(struct entry *ent, int active) = &printent;
|
static void (*printptr)(struct entry *ent, int active) = &printent;
|
||||||
|
|
||||||
char*
|
static char*
|
||||||
coolsize(off_t size)
|
coolsize(off_t size)
|
||||||
{
|
{
|
||||||
static char size_buf[12]; /* Buffer to hold human readable size */
|
static char size_buf[12]; /* Buffer to hold human readable size */
|
||||||
|
@ -454,11 +433,11 @@ coolsize(off_t size)
|
||||||
return size_buf;
|
return size_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
printent_long(struct entry *ent, int active)
|
printent_long(struct entry *ent, int active)
|
||||||
{
|
{
|
||||||
static char buf[18];
|
static char buf[18];
|
||||||
const static struct tm *p;
|
static const struct tm *p;
|
||||||
|
|
||||||
p = localtime(&ent->t);
|
p = localtime(&ent->t);
|
||||||
strftime(buf, 18, "%b %d %H:%M %Y", p);
|
strftime(buf, 18, "%b %d %H:%M %Y", p);
|
||||||
|
@ -495,7 +474,7 @@ printent_long(struct entry *ent, int active)
|
||||||
attroff(A_REVERSE);
|
attroff(A_REVERSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
dentfill(char *path, struct entry **dents,
|
dentfill(char *path, struct entry **dents,
|
||||||
int (*filter)(regex_t *, char *), regex_t *re)
|
int (*filter)(regex_t *, char *), regex_t *re)
|
||||||
{
|
{
|
||||||
|
@ -536,14 +515,14 @@ dentfill(char *path, struct entry **dents,
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
dentfree(struct entry *dents)
|
dentfree(struct entry *dents)
|
||||||
{
|
{
|
||||||
free(dents);
|
free(dents);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the position of the matching entry or 0 otherwise */
|
/* Return the position of the matching entry or 0 otherwise */
|
||||||
int
|
static int
|
||||||
dentfind(struct entry *dents, int n, char *cwd, char *path)
|
dentfind(struct entry *dents, int n, char *cwd, char *path)
|
||||||
{
|
{
|
||||||
char tmp[PATH_MAX];
|
char tmp[PATH_MAX];
|
||||||
|
@ -561,7 +540,7 @@ dentfind(struct entry *dents, int n, char *cwd, char *path)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
populate(char *path, char *oldpath, char *fltr)
|
populate(char *path, char *oldpath, char *fltr)
|
||||||
{
|
{
|
||||||
regex_t re;
|
regex_t re;
|
||||||
|
@ -590,7 +569,7 @@ populate(char *path, char *oldpath, char *fltr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
redraw(char *path)
|
redraw(char *path)
|
||||||
{
|
{
|
||||||
static char cwd[PATH_MAX];
|
static char cwd[PATH_MAX];
|
||||||
|
@ -661,7 +640,7 @@ redraw(char *path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
browse(char *ipath, char *ifilter)
|
browse(char *ipath, char *ifilter)
|
||||||
{
|
{
|
||||||
static char path[PATH_MAX], oldpath[PATH_MAX], newpath[PATH_MAX];
|
static char path[PATH_MAX], oldpath[PATH_MAX], newpath[PATH_MAX];
|
||||||
|
@ -945,7 +924,7 @@ nochange:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: nnn [-d] [dir]\n");
|
fprintf(stderr, "usage: nnn [-d] [dir]\n");
|
||||||
|
|
Loading…
Reference in a new issue