mirror of
https://github.com/jarun/nnn.git
synced 2025-01-15 21:36:42 +00:00
Merge pull request #1668 from N-R-K/better_compress
better and faster string compression
This commit is contained in:
commit
26d5b5c614
|
@ -4,63 +4,63 @@
|
||||||
# Author: github.com/anjerukare
|
# Author: github.com/anjerukare
|
||||||
|
|
||||||
diff --git a/src/nnn.c b/src/nnn.c
|
diff --git a/src/nnn.c b/src/nnn.c
|
||||||
index b821f808..87ebfbbf 100644
|
index ecedee43..9d779f90 100644
|
||||||
--- a/src/nnn.c
|
--- a/src/nnn.c
|
||||||
+++ b/src/nnn.c
|
+++ b/src/nnn.c
|
||||||
@@ -5050,40 +5050,40 @@ static void show_help(const char *path)
|
@@ -5098,40 +5098,40 @@ static void show_help(const char *path)
|
||||||
const char helpstr[] = {
|
"2(___n))\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1NAVIGATION\n"
|
"1NAVIGATION\n"
|
||||||
- "9Up k Up%-16cPgUp ^U Page up\n"
|
- "9Up k Up%16PgUp ^U Page up\n"
|
||||||
- "9Dn j Down%-14cPgDn ^D Page down\n"
|
- "9Dn j Down%14PgDn ^D Page down\n"
|
||||||
- "9Lt h Parent%-12c~ ` @ - ~, /, start, prev\n"
|
- "9Lt h Parent%12~ ` @ - ~, /, start, prev\n"
|
||||||
- "5Ret Rt l Open%-20c' First file/match\n"
|
- "5Ret Rt l Open%20' First file/match\n"
|
||||||
- "9g ^A Top%-21cJ Jump to entry/offset\n"
|
- "9g ^A Top%21J Jump to entry/offset\n"
|
||||||
- "9G ^E End%-20c^J Toggle auto-advance on open\n"
|
- "9G ^E End%20^J Toggle auto-advance on open\n"
|
||||||
+ "9Up e Up%-16cPgUp ^U Page up\n"
|
+ "9Up e Up%16PgUp ^U Page up\n"
|
||||||
+ "9Dn n Down%-14cPgDn ^D Page down\n"
|
+ "9Dn n Down%14PgDn ^D Page down\n"
|
||||||
+ "9Lt m Parent%-12c~ ` @ - ~, /, start, prev\n"
|
+ "9Lt m Parent%12~ ` @ - ~, /, start, prev\n"
|
||||||
+ "5Ret Rt i Open%-20c' First file/match\n"
|
+ "5Ret Rt i Open%20' First file/match\n"
|
||||||
+ "9g ^E Top%-21cJ Jump to entry/offset\n"
|
+ "9g ^E Top%21J Jump to entry/offset\n"
|
||||||
+ "9G ^N End%-20c^J Toggle auto-jump on open\n"
|
+ "9G ^N End%20^J Toggle auto-advance on open\n"
|
||||||
"8B (,) Book(mark)%-11cb ^/ Select bookmark\n"
|
"8B (,) Book(mark)%11b ^/ Select bookmark\n"
|
||||||
"a1-4 Context%-11c(Sh)Tab Cycle/new context\n"
|
"a1-4 Context%11(Sh)Tab Cycle/new context\n"
|
||||||
"62Esc ^Q Quit%-20cq Quit context\n"
|
"62Esc ^Q Quit%20q Quit context\n"
|
||||||
"b^G QuitCD%-18cQ Pick/err, quit\n"
|
"b^G QuitCD%18Q Pick/err, quit\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1FILTER & PROMPT\n"
|
"1FILTER & PROMPT\n"
|
||||||
- "c/ Filter%-17c^N Toggle type-to-nav\n"
|
- "c/ Filter%17^N Toggle type-to-nav\n"
|
||||||
+ "c/ Filter%-17c^F Toggle type-to-nav\n"
|
+ "c/ Filter%17^F Toggle type-to-nav\n"
|
||||||
"aEsc Exit prompt%-12c^L Toggle last filter\n"
|
"aEsc Exit prompt%12^L Toggle last filter\n"
|
||||||
"c. Toggle hidden%-5cAlt+Esc Unfilter, quit context\n"
|
"c. Toggle hidden%05Alt+Esc Unfilter, quit context\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1FILES\n"
|
"1FILES\n"
|
||||||
- "9o ^O Open with%-15cn Create new/link\n"
|
- "9o ^O Open with%15n Create new/link\n"
|
||||||
- "9f ^F File stats%-14cd Detail mode toggle\n"
|
- "9f ^F File stats%14d Detail mode toggle\n"
|
||||||
+ "9o ^O Open with%-15cc Create new/link\n"
|
+ "9o ^O Open with%15c Create new/link\n"
|
||||||
+ "cf File stats%-14cd Detail mode toggle\n"
|
+ "cf File stats%14d Detail mode toggle\n"
|
||||||
"b^R Rename/dup%-14cr Batch rename\n"
|
"b^R Rename/dup%14r Batch rename\n"
|
||||||
- "cz Archive%-17ce Edit file\n"
|
- "cz Archive%17e Edit file\n"
|
||||||
+ "cz Archive%-17cy Edit file\n"
|
+ "cz Archive%17y Edit file\n"
|
||||||
"c* Toggle exe%-14c> Export list\n"
|
"c* Toggle exe%14> Export list\n"
|
||||||
- "6Space + (Un)select%-12cm-m Select range/clear\n"
|
- "6Space + (Un)select%12m-m Select range/clear\n"
|
||||||
+ "6Space + (Un)select%-12cs-s Select range/clear\n"
|
+ "6Space + (Un)select%12s-s Select range/clear\n"
|
||||||
"ca Select all%-14cA Invert sel\n"
|
"ca Select all%14A Invert sel\n"
|
||||||
"9p ^P Copy here%-12cw ^W Cp/mv sel as\n"
|
"9p ^P Copy here%12w ^W Cp/mv sel as\n"
|
||||||
- "9v ^V Move here%-15cE Edit sel list\n"
|
- "9v ^V Move here%15E Edit sel list\n"
|
||||||
+ "9v ^V Move here%-15cl Edit sel list\n"
|
+ "9v ^V Move here%15l Edit sel list\n"
|
||||||
"9x ^X Delete%-18cS Listed sel size\n"
|
"9x ^X Delete%18S Listed sel size\n"
|
||||||
"aEsc Send to FIFO\n"
|
"aEsc Send to FIFO\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1MISC\n"
|
"1MISC\n"
|
||||||
"8Alt ; Select plugin%-11c= Launch app\n"
|
"8Alt ; Select plugin%11= Launch app\n"
|
||||||
"9! ^] Shell%-19c] Cmd prompt\n"
|
"9! ^] Shell%19] Cmd prompt\n"
|
||||||
- "cc Connect remote%-10cu Unmount remote/archive\n"
|
- "cc Connect remote%10u Unmount remote/archive\n"
|
||||||
- "9t ^T Sort toggles%-12cs Manage session\n"
|
- "9t ^T Sort toggles%12s Manage session\n"
|
||||||
+ "ch Connect remote%-10cu Unmount remote/archive\n"
|
+ "ch Connect remote%10u Unmount remote/archive\n"
|
||||||
+ "9t ^T Sort toggles%-12ck Manage session\n"
|
+ "9t ^T Sort toggles%12k Manage session\n"
|
||||||
"cT Set time type%-11c0 Lock\n"
|
"cT Set time type%110 Lock\n"
|
||||||
"b^L Redraw%-18c? Help, conf\n"
|
"b^L Redraw%18? Help, conf\n"
|
||||||
};
|
};
|
||||||
diff --git a/src/nnn.h b/src/nnn.h
|
diff --git a/src/nnn.h b/src/nnn.h
|
||||||
index 3e4ea19c..c81ef392 100644
|
index 3e4ea19c..c81ef392 100644
|
||||||
|
|
|
@ -3,49 +3,49 @@
|
||||||
#
|
#
|
||||||
# Author: github.com/jacmoe
|
# Author: github.com/jacmoe
|
||||||
diff --git a/src/nnn.c b/src/nnn.c
|
diff --git a/src/nnn.c b/src/nnn.c
|
||||||
index b351e202..71193476 100644
|
index ecedee43..fdf5a80e 100644
|
||||||
--- a/src/nnn.c
|
--- a/src/nnn.c
|
||||||
+++ b/src/nnn.c
|
+++ b/src/nnn.c
|
||||||
@@ -5050,32 +5050,32 @@ static void show_help(const char *path)
|
@@ -5098,32 +5098,32 @@ static void show_help(const char *path)
|
||||||
const char helpstr[] = {
|
"2(___n))\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1NAVIGATION\n"
|
"1NAVIGATION\n"
|
||||||
- "9Up k Up%-16cPgUp ^U Page up\n"
|
- "9Up k Up%16PgUp ^U Page up\n"
|
||||||
- "9Dn j Down%-14cPgDn ^D Page down\n"
|
- "9Dn j Down%14PgDn ^D Page down\n"
|
||||||
+ "9Up e Up%-16cPgUp ^U Page up\n"
|
+ "9Up e Up%16PgUp ^U Page up\n"
|
||||||
+ "9Dn n Down%-14cPgDn ^D Page down\n"
|
+ "9Dn n Down%14PgDn ^D Page down\n"
|
||||||
"9Lt h Parent%-12c~ ` @ - ~, /, start, prev\n"
|
"9Lt h Parent%12~ ` @ - ~, /, start, prev\n"
|
||||||
- "5Ret Rt l Open%-20c' First file/match\n"
|
- "5Ret Rt l Open%20' First file/match\n"
|
||||||
- "9g ^A Top%-21cJ Jump to entry/offset\n"
|
- "9g ^A Top%21J Jump to entry/offset\n"
|
||||||
- "9G ^E End%-20c^J Toggle auto-advance on open\n"
|
- "9G ^E End%20^J Toggle auto-advance on open\n"
|
||||||
+ "5Ret Rt i Open%-20c' First file/match\n"
|
+ "5Ret Rt i Open%20' First file/match\n"
|
||||||
+ "9g ^E Top%-21cJ Jump to entry/offset\n"
|
+ "9g ^E Top%21J Jump to entry/offset\n"
|
||||||
+ "9G ^N End%-20c^J Toggle auto-advance on open\n"
|
+ "9G ^N End%20^J Toggle auto-advance on open\n"
|
||||||
"8B (,) Book(mark)%-11cb ^/ Select bookmark\n"
|
"8B (,) Book(mark)%11b ^/ Select bookmark\n"
|
||||||
"a1-4 Context%-11c(Sh)Tab Cycle/new context\n"
|
"a1-4 Context%11(Sh)Tab Cycle/new context\n"
|
||||||
"62Esc ^Q Quit%-20cq Quit context\n"
|
"62Esc ^Q Quit%20q Quit context\n"
|
||||||
"b^G QuitCD%-18cQ Pick/err, quit\n"
|
"b^G QuitCD%18Q Pick/err, quit\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1FILTER & PROMPT\n"
|
"1FILTER & PROMPT\n"
|
||||||
- "c/ Filter%-17c^N Toggle type-to-nav\n"
|
- "c/ Filter%17^N Toggle type-to-nav\n"
|
||||||
+ "c/ Filter%-17c^M Toggle type-to-nav\n"
|
+ "c/ Filter%17^M Toggle type-to-nav\n"
|
||||||
"aEsc Exit prompt%-12c^L Toggle last filter\n"
|
"aEsc Exit prompt%12^L Toggle last filter\n"
|
||||||
"c. Toggle hidden%-5cAlt+Esc Unfilter, quit context\n"
|
"c. Toggle hidden%05Alt+Esc Unfilter, quit context\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1FILES\n"
|
"1FILES\n"
|
||||||
- "9o ^O Open with%-15cn Create new/link\n"
|
- "9o ^O Open with%15n Create new/link\n"
|
||||||
+ "9o ^O Open with%-15cc Create new/link\n"
|
+ "9o ^O Open with%15c Create new/link\n"
|
||||||
"9f ^F File stats%-14cd Detail mode toggle\n"
|
"9f ^F File stats%14d Detail mode toggle\n"
|
||||||
"b^R Rename/dup%-14cr Batch rename\n"
|
"b^R Rename/dup%14r Batch rename\n"
|
||||||
- "cz Archive%-17ce Edit file\n"
|
- "cz Archive%17e Edit file\n"
|
||||||
+ "cz Archive%-17cy Edit file\n"
|
+ "cz Archive%17y Edit file\n"
|
||||||
"c* Toggle exe%-14c> Export list\n"
|
"c* Toggle exe%14> Export list\n"
|
||||||
"6Space + (Un)select%-12cm-m Select range/clear\n"
|
"6Space + (Un)select%12m-m Select range/clear\n"
|
||||||
"ca Select all%-14cA Invert sel\n"
|
"ca Select all%14A Invert sel\n"
|
||||||
"9p ^P Copy here%-12cw ^W Cp/mv sel as\n"
|
"9p ^P Copy here%12w ^W Cp/mv sel as\n"
|
||||||
- "9v ^V Move here%-15cE Edit sel list\n"
|
- "9v ^V Move here%15E Edit sel list\n"
|
||||||
+ "9v ^V Move here%-15cl Edit sel list\n"
|
+ "9v ^V Move here%15l Edit sel list\n"
|
||||||
"9x ^X Delete%-18cS Listed sel size\n"
|
"9x ^X Delete%18S Listed sel size\n"
|
||||||
"aEsc Send to FIFO\n"
|
"aEsc Send to FIFO\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
diff --git a/src/nnn.h b/src/nnn.h
|
diff --git a/src/nnn.h b/src/nnn.h
|
||||||
|
|
115
src/nnn.c
115
src/nnn.c
|
@ -5079,82 +5079,87 @@ static void add_bookmark(char *path, char *newpath, int *presel)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The help string tokens (each line) start with a HEX value
|
* The help string tokens (each line) start with a HEX value which indicates
|
||||||
* which indicates the number of spaces to print before the
|
* the number of spaces to print before the particular token. In the middle,
|
||||||
* particular token. This method was chosen instead of a flat
|
* %NN can be used to insert a run of spaces, e.g %10 will print 10 spaces.
|
||||||
* string because the number of bytes in help was increasing
|
* %NN MUST be 2 characters long, e.g %05 for 5 spaces.
|
||||||
* the binary size by around a hundred bytes. This would only
|
*
|
||||||
* have increased as we keep adding new options.
|
* This method was chosen instead of a flat string because the number of bytes
|
||||||
|
* in help was increasing the binary size by around a hundred bytes. This would
|
||||||
|
* only have increased as we keep adding new options.
|
||||||
*/
|
*/
|
||||||
static void show_help(const char *path)
|
static void show_help(const char *path)
|
||||||
{
|
{
|
||||||
const char *start, *end;
|
static const char helpstr[] = {
|
||||||
const char helpstr[] = {
|
"2|V\\_\n"
|
||||||
|
"2/. \\\\\n"
|
||||||
|
"1(;^; ||\n"
|
||||||
|
"3/___3\n"
|
||||||
|
"2(___n))\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1NAVIGATION\n"
|
"1NAVIGATION\n"
|
||||||
"9Up k Up%-16cPgUp ^U Page up\n"
|
"9Up k Up%16PgUp ^U Page up\n"
|
||||||
"9Dn j Down%-14cPgDn ^D Page down\n"
|
"9Dn j Down%14PgDn ^D Page down\n"
|
||||||
"9Lt h Parent%-12c~ ` @ - ~, /, start, prev\n"
|
"9Lt h Parent%12~ ` @ - ~, /, start, prev\n"
|
||||||
"5Ret Rt l Open%-20c' First file/match\n"
|
"5Ret Rt l Open%20' First file/match\n"
|
||||||
"9g ^A Top%-21cJ Jump to entry/offset\n"
|
"9g ^A Top%21J Jump to entry/offset\n"
|
||||||
"9G ^E End%-20c^J Toggle auto-advance on open\n"
|
"9G ^E End%20^J Toggle auto-advance on open\n"
|
||||||
"8B (,) Book(mark)%-11cb ^/ Select bookmark\n"
|
"8B (,) Book(mark)%11b ^/ Select bookmark\n"
|
||||||
"a1-4 Context%-11c(Sh)Tab Cycle/new context\n"
|
"a1-4 Context%11(Sh)Tab Cycle/new context\n"
|
||||||
"62Esc ^Q Quit%-20cq Quit context\n"
|
"62Esc ^Q Quit%20q Quit context\n"
|
||||||
"b^G QuitCD%-18cQ Pick/err, quit\n"
|
"b^G QuitCD%18Q Pick/err, quit\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1FILTER & PROMPT\n"
|
"1FILTER & PROMPT\n"
|
||||||
"c/ Filter%-17c^N Toggle type-to-nav\n"
|
"c/ Filter%17^N Toggle type-to-nav\n"
|
||||||
"aEsc Exit prompt%-12c^L Toggle last filter\n"
|
"aEsc Exit prompt%12^L Toggle last filter\n"
|
||||||
"c. Toggle hidden%-5cAlt+Esc Unfilter, quit context\n"
|
"c. Toggle hidden%05Alt+Esc Unfilter, quit context\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1FILES\n"
|
"1FILES\n"
|
||||||
"9o ^O Open with%-15cn Create new/link\n"
|
"9o ^O Open with%15n Create new/link\n"
|
||||||
"9f ^F File stats%-14cd Detail mode toggle\n"
|
"9f ^F File stats%14d Detail mode toggle\n"
|
||||||
"b^R Rename/dup%-14cr Batch rename\n"
|
"b^R Rename/dup%14r Batch rename\n"
|
||||||
"cz Archive%-17ce Edit file\n"
|
"cz Archive%17e Edit file\n"
|
||||||
"c* Toggle exe%-14c> Export list\n"
|
"c* Toggle exe%14> Export list\n"
|
||||||
"6Space + (Un)select%-12cm-m Select range/clear\n"
|
"6Space + (Un)select%12m-m Select range/clear\n"
|
||||||
"ca Select all%-14cA Invert sel\n"
|
"ca Select all%14A Invert sel\n"
|
||||||
"9p ^P Copy here%-12cw ^W Cp/mv sel as\n"
|
"9p ^P Copy here%12w ^W Cp/mv sel as\n"
|
||||||
"9v ^V Move here%-15cE Edit sel list\n"
|
"9v ^V Move here%15E Edit sel list\n"
|
||||||
"9x ^X Delete%-18cS Listed sel size\n"
|
"9x ^X Delete%18S Listed sel size\n"
|
||||||
"aEsc Send to FIFO\n"
|
"aEsc Send to FIFO\n"
|
||||||
"0\n"
|
"0\n"
|
||||||
"1MISC\n"
|
"1MISC\n"
|
||||||
"8Alt ; Select plugin%-11c= Launch app\n"
|
"8Alt ; Select plugin%11= Launch app\n"
|
||||||
"9! ^] Shell%-19c] Cmd prompt\n"
|
"9! ^] Shell%19] Cmd prompt\n"
|
||||||
"cc Connect remote%-10cu Unmount remote/archive\n"
|
"cc Connect remote%10u Unmount remote/archive\n"
|
||||||
"9t ^T Sort toggles%-12cs Manage session\n"
|
"9t ^T Sort toggles%12s Manage session\n"
|
||||||
"cT Set time type%-11c0 Lock\n"
|
"cT Set time type%110 Lock\n"
|
||||||
"b^L Redraw%-18c? Help, conf\n"
|
"b^L Redraw%18? Help, conf\n"
|
||||||
};
|
};
|
||||||
|
|
||||||
int fd = create_tmp_file();
|
int fd = create_tmp_file();
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dprintf(fd, " |V\\_\n"
|
|
||||||
" /. \\\\\n"
|
|
||||||
" (;^; ||\n"
|
|
||||||
" /___3\n"
|
|
||||||
" (___n))\n");
|
|
||||||
|
|
||||||
char *prog = xgetenv(env_cfg[NNN_HELP], NULL);
|
char *prog = xgetenv(env_cfg[NNN_HELP], NULL);
|
||||||
if (prog)
|
if (prog)
|
||||||
get_output(prog, NULL, NULL, fd, FALSE);
|
get_output(prog, NULL, NULL, fd, FALSE);
|
||||||
|
|
||||||
start = end = helpstr;
|
bool hex = true;
|
||||||
while (*end) {
|
char *w = g_buf;
|
||||||
if (*end == '\n') {
|
const char *end = helpstr + (sizeof helpstr - 1);
|
||||||
snprintf(g_buf, CMD_LEN_MAX, "%*c%.*s",
|
for (const char *s = helpstr; s < end; ++s) {
|
||||||
xchartohex(*start), ' ', (int)(end - start), start + 1);
|
if (hex) {
|
||||||
dprintf(fd, g_buf, ' ');
|
for (int k = 0, n = xchartohex(*s); k < n; ++k) *w++ = ' ';
|
||||||
start = end + 1;
|
} else if (*s == '%') {
|
||||||
|
int n = ((s[1] - '0') * 10) + (s[2] - '0');
|
||||||
|
for (int k = 0; k < n; ++k) *w++ = ' ';
|
||||||
|
s += 2;
|
||||||
|
} else {
|
||||||
|
*w++ = *s;
|
||||||
}
|
}
|
||||||
|
hex = *s == '\n';
|
||||||
++end;
|
|
||||||
}
|
}
|
||||||
|
if (write(fd, g_buf, w - g_buf)) {} // silence warning
|
||||||
|
|
||||||
dprintf(fd, "\nLOCATIONS\n");
|
dprintf(fd, "\nLOCATIONS\n");
|
||||||
for (uchar_t i = 0; i < CTX_MAX; ++i)
|
for (uchar_t i = 0; i < CTX_MAX; ++i)
|
||||||
|
@ -5178,9 +5183,9 @@ static void show_help(const char *path)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uchar_t i = NNN_OPENER; i <= NNN_TRASH; ++i) {
|
for (uchar_t i = NNN_OPENER; i <= NNN_TRASH; ++i) {
|
||||||
start = getenv(env_cfg[i]);
|
char *s = getenv(env_cfg[i]);
|
||||||
if (start)
|
if (s)
|
||||||
dprintf(fd, "%s: %s\n", env_cfg[i], start);
|
dprintf(fd, "%s: %s\n", env_cfg[i], s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selpath)
|
if (selpath)
|
||||||
|
|
Loading…
Reference in a new issue