From 54a307767c3713b1d4d818d7a37d2363a5a6a703 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sat, 1 Apr 2017 10:48:18 +0530 Subject: [PATCH] Support opening in detail view mode --- README.md | 6 ++++-- nnn.1 | 9 ++++++++- nnn.c | 47 ++++++++++++++++++++++++++++++----------------- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a366436f..8be8d230 100644 --- a/README.md +++ b/README.md @@ -92,8 +92,10 @@ No plans of packaging at the time. Start nnn (default: current directory): - $ nnn [path_to_dir] -`>` indicates the currently selected entry. + $ nnn [-d] [path_to_dir] + + -d: open in detail view mode +`>` indicates the currently selected entry in nnn. ### Keyboard shortcuts diff --git a/nnn.1 b/nnn.1 index 632298ba..136ac584 100644 --- a/nnn.1 +++ b/nnn.1 @@ -6,6 +6,7 @@ .Nd free, fast, friendly file browser .Sh SYNOPSIS .Nm nnn +.Op Ar -d .Op Ar dir .Sh DESCRIPTION .Nm @@ -69,6 +70,12 @@ Quit .Pp Backing up one directory level will set the cursor position at the directory you came out of. +.Pp +.Nm +supports the following option: +.Pp +.Fl d + Open in detail view mode. .Sh CONFIGURATION .Nm is configured by modifying @@ -143,4 +150,4 @@ If you are using urxvt you might have to set backspacekey to DEC. .An Dimitris Papastamos Aq Mt sin@2f30.org , .An Arun Prakash Jana Aq Mt engineerarun@gmail.com . .Sh HOME -https://github.com/jarun/nnn +.Em https://github.com/jarun/nnn diff --git a/nnn.c b/nnn.c index 9b42219a..743ceb3c 100644 --- a/nnn.c +++ b/nnn.c @@ -116,7 +116,6 @@ const char* size_units[] = {"B", "K", "M", "G", "T", "P", "E", "Z", "Y"}; * '------ */ -void (*printptr)(struct entry *ent, int active); void printmsg(char *); void printwarn(void); void printerr(int, char *); @@ -438,6 +437,8 @@ printent(struct entry *ent, int active) printw("%s%s\n", active ? CURSR : EMPTY, ent->name); } +void (*printptr)(struct entry *ent, int active) = &printent; + char* coolsize(off_t size) { @@ -933,9 +934,9 @@ nochange: } void -usage(char *argv0) +usage(void) { - fprintf(stderr, "usage: %s [dir]\n", argv0); + fprintf(stderr, "usage: nnn [-d] [dir]\n"); exit(1); } @@ -944,9 +945,7 @@ main(int argc, char *argv[]) { char cwd[PATH_MAX], *ipath; char *ifilter; - - if (argc > 2) - usage(argv[0]); + int opt = 0; /* Confirm we are in a terminal */ if (!isatty(0) || !isatty(1)) { @@ -954,24 +953,38 @@ main(int argc, char *argv[]) exit(1); } - if (getuid() == 0) - showhidden = 1; - initfilter(showhidden, &ifilter); + if (argc > 3) + usage(); - printptr = &printent; - - if (argv[1] != NULL) { - ipath = realpath(argv[1], cwd); - if (!ipath) { - fprintf(stderr, "%s: no such dir\n", argv[1]); - exit(1); + while ((opt = getopt(argc, argv, "d")) != -1) { + switch (opt) { + case 'd': + /* Open in detail mode, if set */ + showdetail = 1; + printptr = &printent_long; + break; + default: + usage(); } - } else { + } + + if (argc == optind) { + /* Start in the current directory */ ipath = getcwd(cwd, sizeof(cwd)); if (ipath == NULL) ipath = "/"; + } else { + ipath = realpath(argv[optind], cwd); + if (!ipath) { + fprintf(stderr, "%s: no such dir\n", argv[optind]); + exit(1); + } } + if (getuid() == 0) + showhidden = 1; + initfilter(showhidden, &ifilter); + /* Get the default desktop mime opener, if set */ opener = getenv("NNN_OPENER");