@@ -1,3 +1,48 @@ | |||||
nnn v3.1 | |||||
2020-04-13 | |||||
- unlimited bookmarks and plugin keys | |||||
- status bar text in context color | |||||
- support config `NO_COLOR` to disable colors | |||||
- config `NNN_OPTS` to specify binary options to `nnn` | |||||
- config `NNN_MCLICK` to emulate configurable key | |||||
- toggle selection on right click | |||||
- ignore hard links when calculating disk usage | |||||
- dim (hard/sym) link names (symlink to file has `@`) | |||||
- more special keys at empty filter prompt in _type-to-nav_ | |||||
- key <kbd>></kbd> to export file list | |||||
- option `-F` to show fortune in help and settings screen | |||||
- option `-T` to specify sort order (obsoletes `-v`) | |||||
- option to clear sort order | |||||
- key <kbd>T</kbd> to change time type (access/change/mod) | |||||
- `.nmv` - internal fully-functional batch renamer plugin | |||||
- make var `O_NOBATCH` to disable native batch renamer | |||||
- `nuke` & `imgview` - open all images in directory sxiv | |||||
- `nuke` - open log files in vi | |||||
- plugin `x2sel` - system clipboard to selection copier | |||||
- plugin `fzy` - cd using z database | |||||
- plugin `fzopen` - support `FZF_DEFAULT_COMMAND` | |||||
- create new context on TAB without prompt | |||||
- hover and connect by dir name (within config dir) | |||||
- move to next entry on current file delete | |||||
- on single file copy/move, select the copied/moved file | |||||
- option `-f` to to use readline history file (off by default) | |||||
- use `s` in status bar to indicate selection in progress | |||||
- make var `O_NOMOUSE` to disable mouse support | |||||
- do not store `NNN_TRASH` and `-Q` in config/session | |||||
- add sample .desktop file for XDG compatible DEs | |||||
- rename _nav-as-you-type_ to _type-to-nav_ mode | |||||
- fix PCRE case-insensitive regex search | |||||
- fix no error msg when filter length limit exceeded | |||||
- fix static package generation | |||||
- fix broken abort message when started in du-mode | |||||
- fix filter lost on context switch in non _type-to-nav_ mode | |||||
- fix broken readline prompt | |||||
- fix long strings treated as action keys in filter prompt | |||||
- fix `NNNLVL` not reset when spawned shell is exited | |||||
------------------------------------------------------------------------------- | |||||
nnn v3.0 | nnn v3.0 | ||||
2020-02-12 | 2020-02-12 | ||||
@@ -7,7 +7,6 @@ | |||||
<a href="https://circleci.com/gh/jarun/workflows/nnn"><img src="https://img.shields.io/circleci/project/github/jarun/nnn.svg?label=circleci" alt="CircleCI Status" /></a> | <a href="https://circleci.com/gh/jarun/workflows/nnn"><img src="https://img.shields.io/circleci/project/github/jarun/nnn.svg?label=circleci" alt="CircleCI Status" /></a> | ||||
<a href="https://en.wikipedia.org/wiki/Privacy-invasive_software"><img src="https://img.shields.io/badge/privacy-✓-crimson?maxAge=2592000" alt="Privacy Awareness" /></a> | <a href="https://en.wikipedia.org/wiki/Privacy-invasive_software"><img src="https://img.shields.io/badge/privacy-✓-crimson?maxAge=2592000" alt="Privacy Awareness" /></a> | ||||
<a href="https://github.com/jarun/nnn/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-BSD%202--Clause-yellow.svg?maxAge=2592000" alt="License" /></a> | <a href="https://github.com/jarun/nnn/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-BSD%202--Clause-yellow.svg?maxAge=2592000" alt="License" /></a> | ||||
<a href="https://github.com/jarun/nnn/wiki"><img src="https://img.shields.io/badge/nnn-Wiki-important?maxAge=2592000" alt="Wiki" /></a> | |||||
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RMLTQ76JSXJ4Q"><img src="https://img.shields.io/badge/PayPal-donate-1eb0fc.svg" alt="Donate via PayPal!" /></a> | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RMLTQ76JSXJ4Q"><img src="https://img.shields.io/badge/PayPal-donate-1eb0fc.svg" alt="Donate via PayPal!" /></a> | ||||
</p> | </p> | ||||
@@ -51,7 +50,7 @@ It runs smoothly on the Pi, [Termux](https://www.youtube.com/watch?v=AbaauM7gUJw | |||||
25. Watch matrix text fly or read fortune messages | 25. Watch matrix text fly or read fortune messages | ||||
26. Configure in 5 minutes! | 26. Configure in 5 minutes! | ||||
Once installed (instructions below), _**read the fine [manual](https://github.com/jarun/nnn/wiki)**_. | |||||
Once installed (instructions below), _**read the fine manual**_. [![Wiki](https://img.shields.io/badge/nnn-Wiki-important?maxAge=2592000)](https://github.com/jarun/nnn/wiki) | |||||
## Features | ## Features | ||||
@@ -1,4 +1,4 @@ | |||||
.Dd Feb 12, 2020 | |||||
.Dd Apr 13, 2020 | |||||
.Dt NNN 1 | .Dt NNN 1 | ||||
.Os | .Os | ||||
.Sh NAME | .Sh NAME | ||||
@@ -107,7 +107,7 @@ | |||||
#include "dbg.h" | #include "dbg.h" | ||||
/* Macro definitions */ | /* Macro definitions */ | ||||
#define VERSION "3.0" | |||||
#define VERSION "3.1" | |||||
#define GENERAL_INFO "BSD 2-Clause\nhttps://github.com/jarun/nnn" | #define GENERAL_INFO "BSD 2-Clause\nhttps://github.com/jarun/nnn" | ||||
#define SESSIONS_VERSION 1 | #define SESSIONS_VERSION 1 | ||||
@@ -770,7 +770,7 @@ static void clear_hash() | |||||
static void clearinfoln(void) | static void clearinfoln(void) | ||||
{ | { | ||||
move(xlines - 2, 0); | move(xlines - 2, 0); | ||||
addch('\n'); | |||||
clrtoeol(); | |||||
} | } | ||||
#ifdef KEY_RESIZE | #ifdef KEY_RESIZE | ||||
@@ -819,12 +819,6 @@ static void printerr(int linenum) | |||||
exit(1); | exit(1); | ||||
} | } | ||||
static void printinfoln(const char *str) | |||||
{ | |||||
clearinfoln(); | |||||
mvaddstr(xlines - 2, xcols - strlen(str), str); | |||||
} | |||||
static inline bool xconfirm(int c) | static inline bool xconfirm(int c) | ||||
{ | { | ||||
return (c == 'y' || c == 'Y'); | return (c == 'y' || c == 'Y'); | ||||
@@ -936,7 +930,7 @@ static void *xrealloc(void *pcur, size_t len) | |||||
* Always null ('\0') terminates if both src and dest are valid pointers. | * Always null ('\0') terminates if both src and dest are valid pointers. | ||||
* Returns the number of bytes copied including terminating null byte. | * Returns the number of bytes copied including terminating null byte. | ||||
*/ | */ | ||||
static size_t xstrsncpy(char *restrict dest, const char *restrict src, size_t n) | |||||
static size_t xstrsncpy(char *dest, const char *src, size_t n) | |||||
{ | { | ||||
if (!src || !dest || !n) | if (!src || !dest || !n) | ||||
return 0; | return 0; | ||||
@@ -2390,13 +2384,17 @@ static void showfilterinfo(void) | |||||
snprintf(info + i, REGEX_MAX - i - 1, " %s [/], %s [:]", | snprintf(info + i, REGEX_MAX - i - 1, " %s [/], %s [:]", | ||||
(cfg.regex ? "regex" : "str"), | (cfg.regex ? "regex" : "str"), | ||||
((fnstrstr == &strcasestr) ? "ic" : "noic")); | ((fnstrstr == &strcasestr) ? "ic" : "noic")); | ||||
printinfoln(info); | |||||
clearinfoln(); | |||||
mvaddstr(xlines - 2, xcols - strlen(info), info); | |||||
} | } | ||||
static void showfilter(char *str) | static void showfilter(char *str) | ||||
{ | { | ||||
attron(COLOR_PAIR(cfg.curctx + 1)); | |||||
showfilterinfo(); | showfilterinfo(); | ||||
printmsg(str); | printmsg(str); | ||||
// printmsg calls attroff() | |||||
} | } | ||||
static inline void swap_ent(int id1, int id2) | static inline void swap_ent(int id1, int id2) | ||||