From d427f9cd8331542a8d4c3a64be45e1bc961478bf Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 18:20:32 +0200 Subject: Add line number to the predisplay_left --- ranger/gui/widgets/browsercolumn.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 129d8486..efecb93d 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -239,6 +239,8 @@ class BrowserColumn(Pager): copied = [f.path for f in self.fm.copy_buffer] + linum_mode_is_set = True + selected_i = self._get_index_of_selected_file() for line in range(self.hei): i = line + self.scroll_begin @@ -290,6 +292,9 @@ class BrowserColumn(Pager): predisplay_right = [] space = self.wid + if linum_mode_is_set: + predisplay_left.append([str(i), ["directory"]]) + # selection mark tagmark = self._draw_tagged_display(tagged, tagged_marker) tagmarklen = self._total_len(tagmark) -- cgit 1.4.1-2-gfad0 From 1bc67ebef2f1515b008b3464eade6745093fc6a5 Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 18:30:49 +0200 Subject: Add calculating the line number field length --- ranger/gui/widgets/browsercolumn.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index efecb93d..eff7fda6 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -241,6 +241,8 @@ class BrowserColumn(Pager): linum_mode_is_set = True + linum_text_len = len(str(self.scroll_begin + self.hei)) + selected_i = self._get_index_of_selected_file() for line in range(self.hei): i = line + self.scroll_begin @@ -293,7 +295,12 @@ class BrowserColumn(Pager): space = self.wid if linum_mode_is_set: - predisplay_left.append([str(i), ["directory"]]) + if space - linum_text_len > 2: + linum_format = "{0:>" + str(linum_text_len) + "}" + line_number_text = linum_format.format(str(i)) + + predisplay_left.append([line_number_text, ["directory"]]) + space -= linum_text_len # selection mark tagmark = self._draw_tagged_display(tagged, tagged_marker) -- cgit 1.4.1-2-gfad0 From 902fdb7a2396c34b7e9ff3e02a86c23fde55f569 Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 19:33:06 +0200 Subject: Fix ragged line number fields This changes the number field size to the amount of digits in the number of files in the directory. --- ranger/gui/widgets/browsercolumn.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index eff7fda6..9ab668e1 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -241,7 +241,11 @@ class BrowserColumn(Pager): linum_mode_is_set = True - linum_text_len = len(str(self.scroll_begin + self.hei)) + # Set the size of the linum text field to the number of digits in the + # number of files in directory. + # Setting this to something like the len of (self.scroll_begin + + # self.hei) leads to ragged field lengths when digit amounts change. + linum_text_len = len(str(len(self.target.files))) selected_i = self._get_index_of_selected_file() for line in range(self.hei): -- cgit 1.4.1-2-gfad0 From 5a7c4334e7c18eeb799c2474ecf3266ed55bc74c Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 19:37:11 +0200 Subject: Draw the line number field in main_column only --- ranger/gui/widgets/browsercolumn.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 9ab668e1..0344786c 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -298,8 +298,9 @@ class BrowserColumn(Pager): predisplay_right = [] space = self.wid + # line number field if linum_mode_is_set: - if space - linum_text_len > 2: + if self.main_column and space - linum_text_len > 2: linum_format = "{0:>" + str(linum_text_len) + "}" line_number_text = linum_format.format(str(i)) -- cgit 1.4.1-2-gfad0 From 184a82630cc565556de1ab9033692bb657323f38 Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 19:38:25 +0200 Subject: Remove superfluous str() from formatting linum --- ranger/gui/widgets/browsercolumn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 0344786c..a69b24cc 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -302,7 +302,7 @@ class BrowserColumn(Pager): if linum_mode_is_set: if self.main_column and space - linum_text_len > 2: linum_format = "{0:>" + str(linum_text_len) + "}" - line_number_text = linum_format.format(str(i)) + line_number_text = linum_format.format(i) predisplay_left.append([line_number_text, ["directory"]]) space -= linum_text_len -- cgit 1.4.1-2-gfad0 From 311ecc6cc89c450074a197956b881bc6d613958e Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 19:40:51 +0200 Subject: Add space between end of line number and tag --- ranger/gui/widgets/browsercolumn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index a69b24cc..12e98386 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -301,7 +301,7 @@ class BrowserColumn(Pager): # line number field if linum_mode_is_set: if self.main_column and space - linum_text_len > 2: - linum_format = "{0:>" + str(linum_text_len) + "}" + linum_format = "{0:>" + str(linum_text_len) + "} " line_number_text = linum_format.format(i) predisplay_left.append([line_number_text, ["directory"]]) -- cgit 1.4.1-2-gfad0 From 6dd0a7373824f42ef9fd159c4608efb31a3c8b91 Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 20:06:34 +0200 Subject: Add a "line_numbers" setting --- ranger/container/settings.py | 1 + ranger/gui/widgets/browsercolumn.py | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ranger/container/settings.py b/ranger/container/settings.py index 14ff9bca..7b646744 100644 --- a/ranger/container/settings.py +++ b/ranger/container/settings.py @@ -26,6 +26,7 @@ ALLOWED_SETTINGS = { 'flushinput': bool, 'hidden_filter': str, 'idle_delay': int, + 'line_numbers': bool, 'max_console_history_size': (int, type(None)), 'max_history_size': (int, type(None)), 'metadata_deep_search': bool, diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 12e98386..4de476dc 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -239,8 +239,6 @@ class BrowserColumn(Pager): copied = [f.path for f in self.fm.copy_buffer] - linum_mode_is_set = True - # Set the size of the linum text field to the number of digits in the # number of files in directory. # Setting this to something like the len of (self.scroll_begin + @@ -299,7 +297,7 @@ class BrowserColumn(Pager): space = self.wid # line number field - if linum_mode_is_set: + if self.settings.line_numbers: if self.main_column and space - linum_text_len > 2: linum_format = "{0:>" + str(linum_text_len) + "} " line_number_text = linum_format.format(i) -- cgit 1.4.1-2-gfad0 From 502ceb31e1f957b2d21e7f3dd38ecf284bde207d Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 20:08:37 +0200 Subject: Fix off-by-one error in space calculation --- ranger/gui/widgets/browsercolumn.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 4de476dc..5a72d1b9 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -299,12 +299,18 @@ class BrowserColumn(Pager): # line number field if self.settings.line_numbers: if self.main_column and space - linum_text_len > 2: - linum_format = "{0:>" + str(linum_text_len) + "} " + linum_format = "{0:>" + str(linum_text_len) + "}" + # add separator between line number and tag + linum_format += " " line_number_text = linum_format.format(i) predisplay_left.append([line_number_text, ["directory"]]) space -= linum_text_len + # Delete one additional character for space separator + # between the line number and the tag + space -= 1 + # selection mark tagmark = self._draw_tagged_display(tagged, tagged_marker) tagmarklen = self._total_len(tagmark) -- cgit 1.4.1-2-gfad0 From f9f2a9551f9c83b9924e998704d3cced80c6e80e Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 20:15:28 +0200 Subject: Add self.settings.line_numbers to key This avoids badly cached display_data when changing the setting in a running program. --- ranger/gui/widgets/browsercolumn.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 5a72d1b9..cbd2f0ab 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -275,7 +275,8 @@ class BrowserColumn(Pager): key = (self.wid, selected_i == i, drawn.marked, self.main_column, drawn.path in copied, tagged_marker, drawn.infostring, drawn.vcsstatus, drawn.vcsremotestatus, self.target.has_vcschild, - self.fm.do_cut, current_linemode.name, metakey, active_pane) + self.fm.do_cut, current_linemode.name, metakey, active_pane, + self.settings.line_numbers) if key in drawn.display_data: self.execute_curses_batch(line, drawn.display_data[key]) -- cgit 1.4.1-2-gfad0 From bb5846a689c956a24c44798d32c0c33ad1d97724 Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 20:37:48 +0200 Subject: Create the linum_format just once --- ranger/gui/widgets/browsercolumn.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index cbd2f0ab..89e29a00 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -244,6 +244,9 @@ class BrowserColumn(Pager): # Setting this to something like the len of (self.scroll_begin + # self.hei) leads to ragged field lengths when digit amounts change. linum_text_len = len(str(len(self.target.files))) + linum_format = "{0:>" + str(linum_text_len) + "}" + # add separator between line number and tag + linum_format += " " selected_i = self._get_index_of_selected_file() for line in range(self.hei): @@ -300,9 +303,6 @@ class BrowserColumn(Pager): # line number field if self.settings.line_numbers: if self.main_column and space - linum_text_len > 2: - linum_format = "{0:>" + str(linum_text_len) + "}" - # add separator between line number and tag - linum_format += " " line_number_text = linum_format.format(i) predisplay_left.append([line_number_text, ["directory"]]) -- cgit 1.4.1-2-gfad0 From 56134db6dc6b07711f0d892c15b0bd98567619ad Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 21:10:16 +0200 Subject: Add relative line numbers --- ranger/container/settings.py | 1 + ranger/gui/widgets/browsercolumn.py | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ranger/container/settings.py b/ranger/container/settings.py index 7b646744..be468c21 100644 --- a/ranger/container/settings.py +++ b/ranger/container/settings.py @@ -39,6 +39,7 @@ ALLOWED_SETTINGS = { 'preview_images_method': str, 'preview_max_size': int, 'preview_script': (str, type(None)), + 'relative_line_numbers': bool, 'save_console_history': bool, 'scroll_offset': int, 'shorten_title': int, diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 89e29a00..1dd4aef8 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -191,6 +191,15 @@ class BrowserColumn(Pager): self.set_source(f) Pager.draw(self) + def _format_line_number(self, linum_format, i, selected_i): + line_number = i + if self.settings.relative_line_numbers: + line_number = abs(selected_i - i) + if line_number == 0: + line_number = selected_i + + return linum_format.format(line_number) + def _draw_directory(self): """Draw the contents of a directory""" if self.image: @@ -282,6 +291,12 @@ class BrowserColumn(Pager): self.settings.line_numbers) if key in drawn.display_data: + if self.main_column and self.settings.line_numbers: + line_number_text = self._format_line_number(linum_format, + i, + selected_i) + drawn.display_data[key][0][0] = line_number_text + self.execute_curses_batch(line, drawn.display_data[key]) self.color_reset() continue @@ -303,8 +318,9 @@ class BrowserColumn(Pager): # line number field if self.settings.line_numbers: if self.main_column and space - linum_text_len > 2: - line_number_text = linum_format.format(i) - + line_number_text = self._format_line_number(linum_format, + i, + selected_i) predisplay_left.append([line_number_text, ["directory"]]) space -= linum_text_len -- cgit 1.4.1-2-gfad0 From 3b8181fa029d282770091a16c784916c9c8548cf Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 21:21:54 +0200 Subject: Add comment with line num implementation rationale --- ranger/gui/widgets/browsercolumn.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 1dd4aef8..56b5da78 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -290,7 +290,17 @@ class BrowserColumn(Pager): self.fm.do_cut, current_linemode.name, metakey, active_pane, self.settings.line_numbers) + # Check if current line has not already computed and cached if key in drawn.display_data: + # This conditional is necessary for two things: + # 1) computing relative line numbers, + # 2) switching between relative line numbers and normal. + # + # (1) is necessary because drawn.display_data cache cannot be + # trusted when it comes to line numbers. + # For (2) we could add self.settings.relative_line_numbers to + # key, but we still require a conditional check here for (1), + # and it solves both problems at the same time. if self.main_column and self.settings.line_numbers: line_number_text = self._format_line_number(linum_format, i, -- cgit 1.4.1-2-gfad0 From e815a2fe199745f869e180bf308638df7b7ed67d Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 21:32:05 +0200 Subject: Set linum_text_len to digits of visible files This is changed back from the amount of number of digits in number of files in directory. Computing proper relative line numbers requires recalculation of line numbers for each line (even for cached lines), so there will be no visible ragged line numbers with this setting. --- ranger/gui/widgets/browsercolumn.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 56b5da78..9d14ebc3 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -249,10 +249,8 @@ class BrowserColumn(Pager): copied = [f.path for f in self.fm.copy_buffer] # Set the size of the linum text field to the number of digits in the - # number of files in directory. - # Setting this to something like the len of (self.scroll_begin + - # self.hei) leads to ragged field lengths when digit amounts change. - linum_text_len = len(str(len(self.target.files))) + # visible files in directory. + linum_text_len = len(str(self.scroll_begin + self.hei)) linum_format = "{0:>" + str(linum_text_len) + "}" # add separator between line number and tag linum_format += " " -- cgit 1.4.1-2-gfad0 From 937098a3c100a09a5b6b5c575db3236f1a28c706 Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 21:42:40 +0200 Subject: Delete the directory color attr for line number --- ranger/gui/widgets/browsercolumn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 9d14ebc3..964f000a 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -329,7 +329,7 @@ class BrowserColumn(Pager): line_number_text = self._format_line_number(linum_format, i, selected_i) - predisplay_left.append([line_number_text, ["directory"]]) + predisplay_left.append([line_number_text, []]) space -= linum_text_len # Delete one additional character for space separator -- cgit 1.4.1-2-gfad0 From 42dbfaa51840f725d434232c618e2301f3c162fc Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 21:52:10 +0200 Subject: Disable line numbering by default --- ranger/config/rc.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf index 914b1d0f..cf07b232 100644 --- a/ranger/config/rc.conf +++ b/ranger/config/rc.conf @@ -201,6 +201,10 @@ set metadata_deep_search false # Clear all existing filters when leaving a directory set clear_filters_on_dir_change false +# Disable displaying line numbers in main column +set line_numbers false +set relative_line_numbers false + # =================================================================== # == Local Options # =================================================================== -- cgit 1.4.1-2-gfad0 From b5adbbb7c27b2d8bfd42b67132a93cb71ed656ab Mon Sep 17 00:00:00 2001 From: Mark Rogalski Date: Mon, 16 May 2016 22:02:23 +0200 Subject: Add man description. --- doc/ranger.1 | 9 ++++++++- doc/ranger.pod | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/ranger.1 b/doc/ranger.1 index ac655e78..98c7a0d0 100644 --- a/doc/ranger.1 +++ b/doc/ranger.1 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "RANGER 1" -.TH RANGER 1 "ranger-1.7.2" "04/15/2016" "ranger manual" +.TH RANGER 1 "ranger-1.7.2" "16/05/16" "ranger manual" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -732,6 +732,9 @@ this pattern will hide all files that start with a dot or end with a tilde. The delay that ranger idly waits for user input, in milliseconds, with a resolution of 100ms. Lower delay reduces lag between directory updates but increases \s-1CPU\s0 load. +.IP "line_numbers [bool]" 4 +.IX Item "line_numbers [bool]" +Show line numbers in main column. .IP "max_console_history_size [integer, none]" 4 .IX Item "max_console_history_size [integer, none]" How many console commands should be kept in history? \*(L"none\*(R" will disable the @@ -770,6 +773,10 @@ to disable this feature. Which script should handle generating previews? If the file doesn't exist, or use_preview_script is off, ranger will handle previews itself by just printing the content. +.IP "relative_line_numbers [bool]" 4 +.IX Item "relative_line_numbers [bool]" +Show relative line numbers in main column. Requires \fBline_numbers\fR set to +\&\fBtrue\fR. .IP "save_console_history [bool]" 4 .IX Item "save_console_history [bool]" Should the console history be saved on exit? If disabled, the console history diff --git a/doc/ranger.pod b/doc/ranger.pod index 6b5b1593..2a4a1674 100644 --- a/doc/ranger.pod +++ b/doc/ranger.pod @@ -717,6 +717,10 @@ The delay that ranger idly waits for user input, in milliseconds, with a resolution of 100ms. Lower delay reduces lag between directory updates but increases CPU load. +=item line_numbers [bool] + +Show line numbers in main column. + =item max_console_history_size [integer, none] How many console commands should be kept in history? "none" will disable the @@ -765,6 +769,11 @@ Which script should handle generating previews? If the file doesn't exist, or use_preview_script is off, ranger will handle previews itself by just printing the content. +=item relative_line_numbers [bool] + +Show relative line numbers in main column. Requires B set to +B. + =item save_console_history [bool] Should the console history be saved on exit? If disabled, the console history -- cgit 1.4.1-2-gfad0