From 6f3dd655f72ac260197a680e6f66245c7d2902ff Mon Sep 17 00:00:00 2001 From: joelostblom Date: Tue, 18 Dec 2018 01:26:20 +0100 Subject: Add new linemode classes --- ranger/container/fsobject.py | 4 +++- ranger/core/linemode.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/ranger/container/fsobject.py b/ranger/container/fsobject.py index 37151ecf..33633bcf 100644 --- a/ranger/container/fsobject.py +++ b/ranger/container/fsobject.py @@ -13,6 +13,7 @@ from time import time from ranger.core.linemode import ( DEFAULT_LINEMODE, DefaultLinemode, TitleLinemode, PermissionsLinemode, FileInfoLinemode, MtimeLinemode, SizeMtimeLinemode, + HumanMtimeLinemode, SizeHumanMtimeLinemode ) from ranger.core.shared import FileManagerAware, SettingsAware from ranger.ext.shell_escape import shell_escape @@ -91,7 +92,8 @@ class FileSystemObject( # pylint: disable=too-many-instance-attributes,too-many linemode_dict = dict( (linemode.name, linemode()) for linemode in [DefaultLinemode, TitleLinemode, PermissionsLinemode, FileInfoLinemode, - MtimeLinemode, SizeMtimeLinemode] + MtimeLinemode, SizeMtimeLinemode, HumanMtimeLinemode, + SizeHumanMtimeLinemode] ) def __init__(self, path, preload=None, path_is_abs=False, basename_is_rel_to=None): diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index 3a29b552..b98d50e2 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -131,3 +131,46 @@ class SizeMtimeLinemode(LinemodeBase): return '?' return "%s %s" % (human_readable(fobj.size), datetime.fromtimestamp(fobj.stat.st_mtime).strftime("%Y-%m-%d %H:%M")) + + +class HumanMtimeLinemode(LinemodeBase): + name = "humanmtime" + + def filetitle(self, fobj, metadata): + return fobj.relative_path + + def infostring(self, fobj, metadata): + if fobj.stat is None: + return '?' + file_date = datetime.fromtimestamp(fobj.stat.st_mtime) + time_diff = datetime.now().date() - file_date.date() + if time_diff.days > 364: + return file_date.strftime("%-d %b %Y") + elif time_diff.days > 6: + return file_date.strftime("%-d %b") + elif time_diff.days >= 1: + return file_date.strftime("%a") + else: + return file_date.strftime("%H:%M") + + +class SizeHumanMtimeLinemode(LinemodeBase): + name = "sizehumanmtime" + + def filetitle(self, fobj, metadata): + return fobj.relative_path + + def infostring(self, fobj, metadata): + if fobj.stat is None: + return '?' + size = human_readable(fobj.size) + file_date = datetime.fromtimestamp(fobj.stat.st_mtime) + time_diff = datetime.now().date() - file_date.date() + if time_diff.days > 364: + return "%s %11s" % (size, file_date.strftime("%-d %b %Y")) + if time_diff.days > 6: + return "%s %11s" % (size, file_date.strftime("%-d %b")) + elif time_diff.days >= 1: + return "%s %11s" % (size, file_date.strftime("%a")) + else: + return "%s %11s" % (size, file_date.strftime("%H:%M")) -- cgit 1.4.1-2-gfad0 From 9cc6c4516a73b92a062c4b3d8404c8d57433ac37 Mon Sep 17 00:00:00 2001 From: joelostblom Date: Tue, 18 Dec 2018 01:26:46 +0100 Subject: Add hotkeys to switch to new linemode classes --- ranger/config/rc.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf index 98a059d4..d01f38c1 100644 --- a/ranger/config/rc.conf +++ b/ranger/config/rc.conf @@ -371,8 +371,10 @@ map chain console; eval fm.ui.console.history_move(-1) map Mf linemode filename map Mi linemode fileinfo map Mm linemode mtime +map Mh linemode humanmtime map Mp linemode permissions map Ms linemode sizemtime +map Mg linemode sizehumanmtime map Mt linemode metatitle # Tagging / Marking -- cgit 1.4.1-2-gfad0 From d31046771bafa15b5492078e60caac0a93db99cb Mon Sep 17 00:00:00 2001 From: joelostblom Date: Tue, 25 Dec 2018 22:38:43 +0100 Subject: Remove else after return --- ranger/core/linemode.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index b98d50e2..d95739e1 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -146,12 +146,11 @@ class HumanMtimeLinemode(LinemodeBase): time_diff = datetime.now().date() - file_date.date() if time_diff.days > 364: return file_date.strftime("%-d %b %Y") - elif time_diff.days > 6: + if time_diff.days > 6: return file_date.strftime("%-d %b") - elif time_diff.days >= 1: + if time_diff.days >= 1: return file_date.strftime("%a") - else: - return file_date.strftime("%H:%M") + return file_date.strftime("%H:%M") class SizeHumanMtimeLinemode(LinemodeBase): @@ -170,7 +169,6 @@ class SizeHumanMtimeLinemode(LinemodeBase): return "%s %11s" % (size, file_date.strftime("%-d %b %Y")) if time_diff.days > 6: return "%s %11s" % (size, file_date.strftime("%-d %b")) - elif time_diff.days >= 1: + if time_diff.days >= 1: return "%s %11s" % (size, file_date.strftime("%a")) - else: - return "%s %11s" % (size, file_date.strftime("%H:%M")) + return "%s %11s" % (size, file_date.strftime("%H:%M")) -- cgit 1.4.1-2-gfad0 From 9bd860528f2453b56ca4c4f23fba2b11e026813c Mon Sep 17 00:00:00 2001 From: joelostblom Date: Tue, 25 Dec 2018 22:39:24 +0100 Subject: Choose more recognizable numbers --- ranger/core/linemode.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index d95739e1..c2e11d1a 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -144,9 +144,9 @@ class HumanMtimeLinemode(LinemodeBase): return '?' file_date = datetime.fromtimestamp(fobj.stat.st_mtime) time_diff = datetime.now().date() - file_date.date() - if time_diff.days > 364: + if time_diff.days >= 365: return file_date.strftime("%-d %b %Y") - if time_diff.days > 6: + if time_diff.days >= 7: return file_date.strftime("%-d %b") if time_diff.days >= 1: return file_date.strftime("%a") @@ -165,9 +165,9 @@ class SizeHumanMtimeLinemode(LinemodeBase): size = human_readable(fobj.size) file_date = datetime.fromtimestamp(fobj.stat.st_mtime) time_diff = datetime.now().date() - file_date.date() - if time_diff.days > 364: + if time_diff.days >= 365: return "%s %11s" % (size, file_date.strftime("%-d %b %Y")) - if time_diff.days > 6: + if time_diff.days >= 7: return "%s %11s" % (size, file_date.strftime("%-d %b")) if time_diff.days >= 1: return "%s %11s" % (size, file_date.strftime("%a")) -- cgit 1.4.1-2-gfad0 From e14946c116d707f60d0cfb7e2fb2c3da0490aafb Mon Sep 17 00:00:00 2001 From: joelostblom Date: Tue, 25 Dec 2018 22:52:37 +0100 Subject: Break out common code into helper funciton --- ranger/core/linemode.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index c2e11d1a..a98db193 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -142,15 +142,7 @@ class HumanMtimeLinemode(LinemodeBase): def infostring(self, fobj, metadata): if fobj.stat is None: return '?' - file_date = datetime.fromtimestamp(fobj.stat.st_mtime) - time_diff = datetime.now().date() - file_date.date() - if time_diff.days >= 365: - return file_date.strftime("%-d %b %Y") - if time_diff.days >= 7: - return file_date.strftime("%-d %b") - if time_diff.days >= 1: - return file_date.strftime("%a") - return file_date.strftime("%H:%M") + return print_human_mtime(fobj.stat.st_mtime) class SizeHumanMtimeLinemode(LinemodeBase): @@ -163,12 +155,16 @@ class SizeHumanMtimeLinemode(LinemodeBase): if fobj.stat is None: return '?' size = human_readable(fobj.size) - file_date = datetime.fromtimestamp(fobj.stat.st_mtime) - time_diff = datetime.now().date() - file_date.date() - if time_diff.days >= 365: - return "%s %11s" % (size, file_date.strftime("%-d %b %Y")) - if time_diff.days >= 7: - return "%s %11s" % (size, file_date.strftime("%-d %b")) - if time_diff.days >= 1: - return "%s %11s" % (size, file_date.strftime("%a")) - return "%s %11s" % (size, file_date.strftime("%H:%M")) + return "%s %11s" % (size, print_human_mtime(fobj.stat.st_mtime)) + + +def print_human_mtime(file_mtime): + file_date = datetime.fromtimestamp(file_mtime) + time_diff = datetime.now().date() - file_date.date() + if time_diff.days >= 365: + return file_date.strftime("%-d %b %Y") + if time_diff.days >= 7: + return file_date.strftime("%-d %b") + if time_diff.days >= 1: + return file_date.strftime("%a") + return file_date.strftime("%H:%M") -- cgit 1.4.1-2-gfad0 From dfe2ae6592904a4095d8added21f7f237b9a06dc Mon Sep 17 00:00:00 2001 From: joelostblom Date: Wed, 26 Dec 2018 13:56:12 +0100 Subject: Increase function name accuracy --- ranger/core/linemode.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index a98db193..d7fd717c 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -142,7 +142,7 @@ class HumanMtimeLinemode(LinemodeBase): def infostring(self, fobj, metadata): if fobj.stat is None: return '?' - return print_human_mtime(fobj.stat.st_mtime) + return _human_readable_mtime(fobj.stat.st_mtime) class SizeHumanMtimeLinemode(LinemodeBase): @@ -155,10 +155,10 @@ class SizeHumanMtimeLinemode(LinemodeBase): if fobj.stat is None: return '?' size = human_readable(fobj.size) - return "%s %11s" % (size, print_human_mtime(fobj.stat.st_mtime)) + return "%s %11s" % (size, _human_readable_mtime(fobj.stat.st_mtime)) -def print_human_mtime(file_mtime): +def _human_readable_mtime(file_mtime): file_date = datetime.fromtimestamp(file_mtime) time_diff = datetime.now().date() - file_date.date() if time_diff.days >= 365: -- cgit 1.4.1-2-gfad0 From fc3a9e97c20572dceeb28df12ad4d06380038ba4 Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 23 Apr 2019 23:09:46 +0200 Subject: Move helper into ranger/ext There's already a `human_readable` for size in `ranger/ext`, I figure we might as well add the new helper there, make it easily accessible in other code. Did some renaming, no need to drop the `readable` part to shorten the names. Similarly I changed one of the mappings to be more intuitive. --- ranger/config/rc.conf | 4 ++-- ranger/container/fsobject.py | 6 +++--- ranger/core/linemode.py | 26 +++++++------------------- ranger/ext/human_readable.py | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf index d01f38c1..8913213c 100644 --- a/ranger/config/rc.conf +++ b/ranger/config/rc.conf @@ -371,10 +371,10 @@ map chain console; eval fm.ui.console.history_move(-1) map Mf linemode filename map Mi linemode fileinfo map Mm linemode mtime -map Mh linemode humanmtime +map Mh linemode humanreadablemtime map Mp linemode permissions map Ms linemode sizemtime -map Mg linemode sizehumanmtime +map MH linemode sizehumanreadablemtime map Mt linemode metatitle # Tagging / Marking diff --git a/ranger/container/fsobject.py b/ranger/container/fsobject.py index 33633bcf..a82532c9 100644 --- a/ranger/container/fsobject.py +++ b/ranger/container/fsobject.py @@ -13,7 +13,7 @@ from time import time from ranger.core.linemode import ( DEFAULT_LINEMODE, DefaultLinemode, TitleLinemode, PermissionsLinemode, FileInfoLinemode, MtimeLinemode, SizeMtimeLinemode, - HumanMtimeLinemode, SizeHumanMtimeLinemode + HumanReadableMtimeLinemode, SizeHumanReadableMtimeLinemode ) from ranger.core.shared import FileManagerAware, SettingsAware from ranger.ext.shell_escape import shell_escape @@ -92,8 +92,8 @@ class FileSystemObject( # pylint: disable=too-many-instance-attributes,too-many linemode_dict = dict( (linemode.name, linemode()) for linemode in [DefaultLinemode, TitleLinemode, PermissionsLinemode, FileInfoLinemode, - MtimeLinemode, SizeMtimeLinemode, HumanMtimeLinemode, - SizeHumanMtimeLinemode] + MtimeLinemode, SizeMtimeLinemode, HumanReadableMtimeLinemode, + SizeHumanReadableMtimeLinemode] ) def __init__(self, path, preload=None, path_is_abs=False, basename_is_rel_to=None): diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index d7fd717c..48da3509 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function) from abc import ABCMeta, abstractproperty, abstractmethod from datetime import datetime -from ranger.ext.human_readable import human_readable +from ranger.ext.human_readable import human_readable, human_readable_time from ranger.ext import spawn DEFAULT_LINEMODE = "filename" @@ -133,8 +133,8 @@ class SizeMtimeLinemode(LinemodeBase): datetime.fromtimestamp(fobj.stat.st_mtime).strftime("%Y-%m-%d %H:%M")) -class HumanMtimeLinemode(LinemodeBase): - name = "humanmtime" +class HumanReadableMtimeLinemode(LinemodeBase): + name = "humanreadablemtime" def filetitle(self, fobj, metadata): return fobj.relative_path @@ -142,11 +142,11 @@ class HumanMtimeLinemode(LinemodeBase): def infostring(self, fobj, metadata): if fobj.stat is None: return '?' - return _human_readable_mtime(fobj.stat.st_mtime) + return human_readable_time(fobj.stat.st_mtime) -class SizeHumanMtimeLinemode(LinemodeBase): - name = "sizehumanmtime" +class SizeHumanReadableMtimeLinemode(LinemodeBase): + name = "sizehumanreadablemtime" def filetitle(self, fobj, metadata): return fobj.relative_path @@ -155,16 +155,4 @@ class SizeHumanMtimeLinemode(LinemodeBase): if fobj.stat is None: return '?' size = human_readable(fobj.size) - return "%s %11s" % (size, _human_readable_mtime(fobj.stat.st_mtime)) - - -def _human_readable_mtime(file_mtime): - file_date = datetime.fromtimestamp(file_mtime) - time_diff = datetime.now().date() - file_date.date() - if time_diff.days >= 365: - return file_date.strftime("%-d %b %Y") - if time_diff.days >= 7: - return file_date.strftime("%-d %b") - if time_diff.days >= 1: - return file_date.strftime("%a") - return file_date.strftime("%H:%M") + return "%s %11s" % (size, human_readable_time(fobj.stat.st_mtime)) diff --git a/ranger/ext/human_readable.py b/ranger/ext/human_readable.py index 385e56f4..2a5bc81b 100644 --- a/ranger/ext/human_readable.py +++ b/ranger/ext/human_readable.py @@ -3,6 +3,7 @@ from __future__ import (absolute_import, division, print_function) +from datetime import datetime from ranger.core.shared import SettingsAware @@ -54,6 +55,21 @@ def human_readable(byte, separator=' '): # pylint: disable=too-many-return-stat return '>9000' +def human_readable_time(timestamp): + """Convert a timestamp to an easily readable format. + """ + # Hard to test because it's relative to ``now()`` + date = datetime.fromtimestamp(timestamp) + datediff = datetime.now().date() - date.date() + if datediff.days >= 365: + return date.strftime("%-d %b %Y") + elif datediff.days >= 7: + return date.strftime("%-d %b") + elif datediff.days >= 1: + return date.strftime("%a") + return date.strftime("%H:%M") + + if __name__ == '__main__': import doctest doctest.testmod() -- cgit 1.4.1-2-gfad0 From e51b7e3f8615e6678d86f4dcfac2ff8dd1a7b475 Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 23 Apr 2019 23:31:08 +0200 Subject: Document all the linemodes --- doc/ranger.1 | 10 ++++++++-- doc/ranger.pod | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/ranger.1 b/doc/ranger.1 index 5a159e12..38926f87 100644 --- a/doc/ranger.1 +++ b/doc/ranger.1 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "RANGER 1" -.TH RANGER 1 "ranger-1.9.2" "2018-10-26" "ranger manual" +.TH RANGER 1 "ranger-1.9.2" "2019-04-23" "ranger manual" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -1296,10 +1296,16 @@ Flags: .IX Item "linemode linemodename" Sets the linemode of all files in the current directory. The linemode may be: .Sp -.Vb 6 +.Vb 12 \& "filename": display each line as "..." \& "fileinfo": display each line as "..." +\& "mtime": display each line as "..." in ISO format +\& "humanreadablemtime": display each line as "..." in a human +\& readable format, more precise the more recent \& "permissions": display each line as " " +\& "sizemtime": display each line as "... " in ISO format +\& "humanreadablesizemtime": display each line as "... " +\& in a human readable format, more precise the more recent \& "metatitle": display metadata from .metadata.json files if \& available, fall back to the "filename" linemode if no \& metadata was found. See :meta command. diff --git a/doc/ranger.pod b/doc/ranger.pod index 8fbc8826..b67ded7f 100644 --- a/doc/ranger.pod +++ b/doc/ranger.pod @@ -1382,7 +1382,13 @@ Sets the linemode of all files in the current directory. The linemode may be: "filename": display each line as "..." "fileinfo": display each line as "..." + "mtime": display each line as "..." in ISO format + "humanreadablemtime": display each line as "..." in a human + readable format, more precise the more recent "permissions": display each line as " " + "sizemtime": display each line as "... " in ISO format + "humanreadablesizemtime": display each line as "... " + in a human readable format, more precise the more recent "metatitle": display metadata from .metadata.json files if available, fall back to the "filename" linemode if no metadata was found. See :meta command. -- cgit 1.4.1-2-gfad0 From 6b7b9d5d4ba321f0a2eb507d3b923ef68657ee3b Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Sat, 27 Apr 2019 12:33:05 +0200 Subject: Add a blank line between internal and external imports --- ranger/core/linemode.py | 1 + ranger/ext/human_readable.py | 1 + 2 files changed, 2 insertions(+) diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index 48da3509..85cdbfdb 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -7,6 +7,7 @@ from __future__ import (absolute_import, division, print_function) from abc import ABCMeta, abstractproperty, abstractmethod from datetime import datetime + from ranger.ext.human_readable import human_readable, human_readable_time from ranger.ext import spawn diff --git a/ranger/ext/human_readable.py b/ranger/ext/human_readable.py index 44f23079..94ab3c6f 100644 --- a/ranger/ext/human_readable.py +++ b/ranger/ext/human_readable.py @@ -4,6 +4,7 @@ from __future__ import (absolute_import, division, print_function) from datetime import datetime + from ranger.core.shared import SettingsAware -- cgit 1.4.1-2-gfad0