From 6333ef00cb5eeba691b83bbed84b7ffc2d583508 Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Wed, 22 Jul 2020 16:55:00 +0800 Subject: Add line number in blob view --- git-gmi/git.py | 3 ++- git-gmi/utils.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 git-gmi/utils.py diff --git a/git-gmi/git.py b/git-gmi/git.py index f249ec5..800dc0f 100644 --- a/git-gmi/git.py +++ b/git-gmi/git.py @@ -4,6 +4,7 @@ from datetime import datetime import mimetypes from const import * from config import * +from utils import * mimetypes.add_type("text/gemini", ".gmi") mimetypes.add_type("text/gemini", ".gemini") @@ -273,7 +274,7 @@ class GitGmiRepo: elif blob.size < MAX_DISPLAYED_BLOB_SIZE: response += ( f"=> {blob.name}?raw view raw\n\n" - "```\n" + blob.data.decode("utf-8") + "\n```" + "```\n" + add_line_numbers(blob.data.decode("utf-8")) + "\n```" ) else: response += ( diff --git a/git-gmi/utils.py b/git-gmi/utils.py new file mode 100644 index 0000000..c3dbd59 --- /dev/null +++ b/git-gmi/utils.py @@ -0,0 +1,17 @@ +import math + + +def add_line_numbers(code: str) -> str: + lines = code.splitlines() + if not lines: + return code # empty anyway + + # cannot use math.ceil() here bc lg100=2 + max_digits = math.floor(math.log10(len(lines))) + 1 + + for n, l in enumerate(lines, 1): + digits_in_n = math.floor(math.log10(n)) + 1 + spaces_before_number = max_digits - digits_in_n + lines[n - 1] = " " * spaces_before_number + str(n) + " " + l + + return "\n".join(lines) -- cgit v1.2.3