mirror of
https://github.com/jarun/nnn.git
synced 2024-09-11 04:55:25 +03:00
show relative line numbering when jumping
Co-authored-by: Darukutsu <darupeter@pm.me> Closes: https://github.com/jarun/nnn/pull/1804 Closes: https://github.com/jarun/nnn/discussions/1708
This commit is contained in:
parent
e76d7bbf1d
commit
0738f39cf0
@ -71,9 +71,9 @@ index f8a2c58..9802a1f 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static off_t get_size(off_t size, off_t *pval, int comp)
|
static off_t get_size(off_t size, off_t *pval, int comp)
|
||||||
@@ -4134,33 +4141,7 @@ static uchar_t get_color_pair_name_ind(const struct entry *ent, char *pind, int
|
@@ -4228,38 +4235,13 @@ static void printent(int pdents_index, uint_t namecols, bool sel)
|
||||||
static void printent(const struct entry *ent, uint_t namecols, bool sel)
|
|
||||||
{
|
{
|
||||||
|
const struct entry *ent = &pdents[pdents_index];
|
||||||
char ind = '\0';
|
char ind = '\0';
|
||||||
- int attrs;
|
- int attrs;
|
||||||
-
|
-
|
||||||
@ -99,14 +99,19 @@ index f8a2c58..9802a1f 100644
|
|||||||
- if (attrs)
|
- if (attrs)
|
||||||
- attroff(attrs);
|
- attroff(attrs);
|
||||||
- }
|
- }
|
||||||
-
|
+ int attrs = 0, namelen;
|
||||||
|
|
||||||
|
if (g_state.showlines) {
|
||||||
|
ptrdiff_t rel_num = pdents_index - cur;
|
||||||
|
printw(rel_num == 0 ? "%4td" : "%+4td", rel_num);
|
||||||
|
}
|
||||||
|
|
||||||
- attrs = 0;
|
- attrs = 0;
|
||||||
-
|
-
|
||||||
+ int attrs = 0, namelen;
|
|
||||||
uchar_t color_pair = get_color_pair_name_ind(ent, &ind, &attrs);
|
uchar_t color_pair = get_color_pair_name_ind(ent, &ind, &attrs);
|
||||||
|
|
||||||
addch((ent->flags & FILE_SELECTED) ? '+' | A_REVERSE | A_BOLD : ' ');
|
addch((ent->flags & FILE_SELECTED) ? '+' | A_REVERSE | A_BOLD : ' ');
|
||||||
@@ -4185,15 +4166,40 @@ static void printent(const struct entry *ent, uint_t namecols, bool sel)
|
@@ -4284,15 +4266,40 @@ static void printent(int pdents_index, uint_t namecols, bool sel)
|
||||||
++namecols;
|
++namecols;
|
||||||
|
|
||||||
#ifndef NOLC
|
#ifndef NOLC
|
||||||
@ -149,8 +154,8 @@ index f8a2c58..9802a1f 100644
|
|||||||
+ attroff(attrs);
|
+ attroff(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void savecurctx(char *path, char *curname, int nextctx)
|
/**
|
||||||
@@ -6356,26 +6362,19 @@ static void statusbar(char *path)
|
@@ -6527,26 +6534,19 @@ static void statusbar(char *path)
|
||||||
tocursor();
|
tocursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,13 +10,13 @@ diff --git a/src/nnn.c b/src/nnn.c
|
|||||||
index 0388b23c..66d3316a 100644
|
index 0388b23c..66d3316a 100644
|
||||||
--- a/src/nnn.c
|
--- a/src/nnn.c
|
||||||
+++ b/src/nnn.c
|
+++ b/src/nnn.c
|
||||||
@@ -390,7 +390,8 @@ typedef struct {
|
@@ -391,7 +391,8 @@ typedef struct {
|
||||||
uint_t uidgid : 1; /* Show owner and group info */
|
|
||||||
uint_t usebsdtar : 1; /* Use bsdtar as default archive utility */
|
uint_t usebsdtar : 1; /* Use bsdtar as default archive utility */
|
||||||
uint_t xprompt : 1; /* Use native prompt instead of readline prompt */
|
uint_t xprompt : 1; /* Use native prompt instead of readline prompt */
|
||||||
- uint_t reserved : 4; /* Adjust when adding/removing a field */
|
uint_t showlines : 1; /* Show line numbers */
|
||||||
|
- uint_t reserved : 3; /* Adjust when adding/removing a field */
|
||||||
+ uint_t previewer : 1; /* Run state of previewer */
|
+ uint_t previewer : 1; /* Run state of previewer */
|
||||||
+ uint_t reserved : 3; /* Adjust when adding/removing a field */
|
+ uint_t reserved : 2; /* Adjust when adding/removing a field */
|
||||||
} runstate;
|
} runstate;
|
||||||
|
|
||||||
/* Contexts or workspaces */
|
/* Contexts or workspaces */
|
||||||
|
26
src/nnn.c
26
src/nnn.c
@ -390,7 +390,8 @@ typedef struct {
|
|||||||
uint_t uidgid : 1; /* Show owner and group info */
|
uint_t uidgid : 1; /* Show owner and group info */
|
||||||
uint_t usebsdtar : 1; /* Use bsdtar as default archive utility */
|
uint_t usebsdtar : 1; /* Use bsdtar as default archive utility */
|
||||||
uint_t xprompt : 1; /* Use native prompt instead of readline prompt */
|
uint_t xprompt : 1; /* Use native prompt instead of readline prompt */
|
||||||
uint_t reserved : 4; /* Adjust when adding/removing a field */
|
uint_t showlines : 1; /* Show line numbers */
|
||||||
|
uint_t reserved : 3; /* Adjust when adding/removing a field */
|
||||||
} runstate;
|
} runstate;
|
||||||
|
|
||||||
/* Contexts or workspaces */
|
/* Contexts or workspaces */
|
||||||
@ -4223,8 +4224,9 @@ static uchar_t get_color_pair_name_ind(const struct entry *ent, char *pind, int
|
|||||||
return C_UND;
|
return C_UND;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void printent(const struct entry *ent, uint_t namecols, bool sel)
|
static void printent(int pdents_index, uint_t namecols, bool sel)
|
||||||
{
|
{
|
||||||
|
const struct entry *ent = &pdents[pdents_index];
|
||||||
char ind = '\0';
|
char ind = '\0';
|
||||||
int attrs;
|
int attrs;
|
||||||
|
|
||||||
@ -4251,6 +4253,11 @@ static void printent(const struct entry *ent, uint_t namecols, bool sel)
|
|||||||
attroff(attrs);
|
attroff(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_state.showlines) {
|
||||||
|
ptrdiff_t rel_num = pdents_index - cur;
|
||||||
|
printw(rel_num == 0 ? "%4td" : "%+4td", rel_num);
|
||||||
|
}
|
||||||
|
|
||||||
attrs = 0;
|
attrs = 0;
|
||||||
|
|
||||||
uchar_t color_pair = get_color_pair_name_ind(ent, &ind, &attrs);
|
uchar_t color_pair = get_color_pair_name_ind(ent, &ind, &attrs);
|
||||||
@ -6559,7 +6566,7 @@ static void draw_line(int ncols)
|
|||||||
|
|
||||||
move(2 + last - curscroll, 0);
|
move(2 + last - curscroll, 0);
|
||||||
macos_icons_hack();
|
macos_icons_hack();
|
||||||
printent(&pdents[last], ncols, FALSE);
|
printent(last, ncols, FALSE);
|
||||||
|
|
||||||
if (g_state.oldcolor && (pdents[cur].flags & DIR_OR_DIRLNK)) {
|
if (g_state.oldcolor && (pdents[cur].flags & DIR_OR_DIRLNK)) {
|
||||||
if (!dir) {/* First file is not a directory */
|
if (!dir) {/* First file is not a directory */
|
||||||
@ -6573,7 +6580,7 @@ static void draw_line(int ncols)
|
|||||||
|
|
||||||
move(2 + cur - curscroll, 0);
|
move(2 + cur - curscroll, 0);
|
||||||
macos_icons_hack();
|
macos_icons_hack();
|
||||||
printent(&pdents[cur], ncols, TRUE);
|
printent(cur, ncols, TRUE);
|
||||||
|
|
||||||
/* Must reset e.g. no files in dir */
|
/* Must reset e.g. no files in dir */
|
||||||
if (dir)
|
if (dir)
|
||||||
@ -6698,7 +6705,7 @@ static void redraw(char *path)
|
|||||||
if (len)
|
if (len)
|
||||||
findmarkentry(len, &pdents[i]);
|
findmarkentry(len, &pdents[i]);
|
||||||
|
|
||||||
printent(&pdents[i], ncols, i == cur);
|
printent(i, ncols, i == cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Must reset e.g. no files in dir */
|
/* Must reset e.g. no files in dir */
|
||||||
@ -7251,13 +7258,20 @@ nochange:
|
|||||||
case SEL_HOME: // fallthrough
|
case SEL_HOME: // fallthrough
|
||||||
case SEL_END: // fallthrough
|
case SEL_END: // fallthrough
|
||||||
case SEL_FIRST: // fallthrough
|
case SEL_FIRST: // fallthrough
|
||||||
case SEL_JUMP: // fallthrough
|
|
||||||
case SEL_YOUNG:
|
case SEL_YOUNG:
|
||||||
if (ndents) {
|
if (ndents) {
|
||||||
g_state.move = 1;
|
g_state.move = 1;
|
||||||
handle_screen_move(sel);
|
handle_screen_move(sel);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SEL_JUMP:
|
||||||
|
if (ndents) {
|
||||||
|
g_state.showlines = 1;
|
||||||
|
redraw(path);
|
||||||
|
handle_screen_move(sel);
|
||||||
|
g_state.showlines = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SEL_CDHOME: // fallthrough
|
case SEL_CDHOME: // fallthrough
|
||||||
case SEL_CDBEGIN: // fallthrough
|
case SEL_CDBEGIN: // fallthrough
|
||||||
case SEL_CDLAST: // fallthrough
|
case SEL_CDLAST: // fallthrough
|
||||||
|
Loading…
Reference in New Issue
Block a user