From f9ce1ef3d5e646a25f7eb53e5f79fe0e94142cc7 Mon Sep 17 00:00:00 2001 From: nojhan Date: Fri, 17 Jan 2025 16:02:53 +0100 Subject: [PATCH] feat(vertical): display date in ISO Update doc. --- README.md | 48 ++++++++++++++++++++++++++++++++++++------ src/clibard/clibard.py | 6 ++---- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 66b3a1f..6eee3c5 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,36 @@ Usage Command arguments ----------------- -> usage: clibard.py [-h] [-l {h,v,horizontal,vertical}] [--test NB_ITEMS] [--send NB_ITEMS] +> usage: clibard.py [-h] [-l {h,v,horizontal,vertical}] [--test NB_ITEMS] +> [--send NB_ITEMS] +> > options: > -h, --help show this help message and exit > -l {h,v,horizontal,vertical}, --layout {h,v,horizontal,vertical} -> How to display notifications. `horizontal` = as many of the last notifications that fit on a single line, clear out the old ones. `vertical` = keep -> printing new notifications on new lines. +> How to display notifications. `horizontal` = as many of +> the last notifications that fit on a single line, clear +> out the old ones. `vertical` = keep printing new +> notifications on new lines. +> --test NB_ITEMS Print NB_ITEMS fake notifications and quit. +> --send NB_ITEMS Send NB_ITEMS fake notifications on the D-Bus and quit. + + +Display +------- + +Each notification is displayed as a colored block made of up to four segments, +showing in order: +1. the *date*, +2. the *application* having issued the notification, +3. the *summary* of the notification (e.g. chat systems usually display the user, here), +4. the *body* of the message. + +The color of the notification block's application and summary depends +on the *urgency* of the notification: +- *low* in green, +- *normal* in blue, +- *critical* in orange, +- *unknown* in light purple. Signaling @@ -43,7 +67,8 @@ SIGUSR1 will refresh the display, SIGUSR2 will erase any notification in the cache and clear the display (if it can). Note that with the horizontal layout, refreshing the display actually changes -the display. Erasing the cache will remove any on-screen notification. +the display. Erasing the cache will remove any on-screen notification +if you use the horizontal layout. With the vertical layout, this does nothing on the display. @@ -51,16 +76,25 @@ Layouts ======= The default layout is the horizontal one. + +Horizontal +---------- + This will display on a single line, and overwrite it as soon as an update is received. +Dates are given in a "natural" human-readable way. When refreshing its display in the horizontal layout, the displayed dates will be refreshed as well. However, it does not show all the cached notifications, but only the few last ones that can fit the current width of the terminal. + +Vertical +-------- + The vertical layout simply prints a new line as soon as the CLI bard receive a notification. The display cannot be cleared nor refreshed. -Most notably, the dates of notifications will all be "now". -However, the terminal does display all the received notifications, if you can -scroll back enough. +Most notably, date is displayed in the ISO-8601 format, down to the minute. +However, your terminal should retain all the received notifications, +if you can scroll back enough. diff --git a/src/clibard/clibard.py b/src/clibard/clibard.py index aeee8fd..0f1fb8f 100755 --- a/src/clibard/clibard.py +++ b/src/clibard/clibard.py @@ -212,7 +212,6 @@ class MessageLine(Message): body = " ".join(self.body.split()) self.print_segment("body", body, console) self.print_segment("none", "", console) - console.print("", end="\n") console.print(end, end="") return len(hdate) + len(self.app) + len(self.summary) + len(self.body) + 6 @@ -220,10 +219,9 @@ class MessageLine(Message): class MessageParagraph(Message): def print_on(self, console = None, end = ""): - hdate = humanize.naturaltime(self.date) + hdate = self.date.strftime("%Y-%m-%d %H:%M") if console != None: - # console.print(" ", end="") - # self.print_segment("date", hdate, console) + self.print_segment("date", hdate, console) self.print_segment(self.urgency, self.app, console, prefix = "bold") self.print_segment(f"summary_{self.urgency}", self.summary, console, prefix = "bold") self.print_segment("none", "", console)