From a931fe5cfdb436017a34b6965fbf55ef6fc45714 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Feb 2025 20:14:13 +0100 Subject: [PATCH 1/3] Add support for NO_COLOR and FORCE_COLOR --- novelwriter/__init__.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/novelwriter/__init__.py b/novelwriter/__init__.py index a75344ce..57ecfa7e 100644 --- a/novelwriter/__init__.py +++ b/novelwriter/__init__.py @@ -25,6 +25,7 @@ from __future__ import annotations import getopt import logging +import os import sys from typing import TYPE_CHECKING @@ -86,8 +87,11 @@ def main(sysArgs: list | None = None) -> GuiMain | None: if sysArgs is None: sysArgs = sys.argv[1:] + fColor = os.environ.get("FORCE_COLOR") + nColor = os.environ.get("NO_COLOR") + # Valid Input Options - shortOpt = "hv" + shortOpt = "hvc" longOpt = [ "help", "version", @@ -131,7 +135,7 @@ def main(sysArgs: list | None = None) -> GuiMain | None: # Defaults logLevel = logging.WARN - fmtFlags = 0b00 + fmtFlags = 0b01 if fColor else 0b00 confPath = None dataPath = None qtStyle = "Fusion" @@ -161,7 +165,7 @@ def main(sysArgs: list | None = None) -> GuiMain | None: CONFIG.isDebug = True fmtFlags = fmtFlags | 0b10 logLevel = logging.DEBUG - elif inOpt == "--color": + elif inOpt == "--color" and not nColor: fmtFlags = fmtFlags | 0b01 elif inOpt == "--style": qtStyle = inArg From 706c61c550972a3dfe259d344cb89413bd6299f8 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Feb 2025 20:16:47 +0100 Subject: [PATCH 2/3] Add more single character switches --- novelwriter/__init__.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/novelwriter/__init__.py b/novelwriter/__init__.py index 57ecfa7e..59ee4140 100644 --- a/novelwriter/__init__.py +++ b/novelwriter/__init__.py @@ -91,7 +91,7 @@ def main(sysArgs: list | None = None) -> GuiMain | None: nColor = os.environ.get("NO_COLOR") # Valid Input Options - shortOpt = "hvc" + shortOpt = "hvidc" longOpt = [ "help", "version", @@ -124,9 +124,9 @@ def main(sysArgs: list | None = None) -> GuiMain | None: "Usage:\n" " -h, --help Print this message.\n" " -v, --version Print program version and exit.\n" - " --info Print additional runtime information.\n" - " --debug Print debug output. Includes --info.\n" - " --color Add ANSI colors to log output.\n" + " -i, --info Print additional runtime information.\n" + " -d, --debug Print debug output. Includes --info.\n" + " -c, --color Add ANSI colors to log output.\n" " --meminfo Show memory usage information in the status bar.\n" " --style= Sets Qt style flag. Defaults to 'Fusion'.\n" " --config= Alternative config file.\n" @@ -159,22 +159,22 @@ def main(sysArgs: list | None = None) -> GuiMain | None: elif inOpt in ("-v", "--version"): print("novelWriter Version %s [%s]" % (__version__, __date__)) sys.exit(0) - elif inOpt == "--info": + elif inOpt in ("-i", "--info"): logLevel = logging.INFO - elif inOpt == "--debug": + elif inOpt in ("-d", "--debug"): CONFIG.isDebug = True fmtFlags = fmtFlags | 0b10 logLevel = logging.DEBUG - elif inOpt == "--color" and not nColor: + elif inOpt in ("-c", "--color") and not nColor: fmtFlags = fmtFlags | 0b01 + elif inOpt == "--meminfo": + CONFIG.memInfo = True elif inOpt == "--style": qtStyle = inArg elif inOpt == "--config": confPath = inArg elif inOpt == "--data": dataPath = inArg - elif inOpt == "--meminfo": - CONFIG.memInfo = True if fmtFlags & 0b01: # This will overwrite the default level names, and also ensure that From f1fc95d82d936a5084a471192aaaae2c01b3d02a Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Feb 2025 20:45:18 +0100 Subject: [PATCH 3/3] Simplify log colour handling --- novelwriter/__init__.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/novelwriter/__init__.py b/novelwriter/__init__.py index 59ee4140..b548c974 100644 --- a/novelwriter/__init__.py +++ b/novelwriter/__init__.py @@ -81,15 +81,16 @@ LVLP = "{levelname:8}" LVLC = "{levelname:17}" TEXT = "{message:}" +# Read Environment +FORCE_COLOR = bool(os.environ.get("FORCE_COLOR")) +NO_COLOR = bool(os.environ.get("NO_COLOR")) + def main(sysArgs: list | None = None) -> GuiMain | None: """Parse command line, set up logging, and launch main GUI.""" if sysArgs is None: sysArgs = sys.argv[1:] - fColor = os.environ.get("FORCE_COLOR") - nColor = os.environ.get("NO_COLOR") - # Valid Input Options shortOpt = "hvidc" longOpt = [ @@ -135,7 +136,8 @@ def main(sysArgs: list | None = None) -> GuiMain | None: # Defaults logLevel = logging.WARN - fmtFlags = 0b01 if fColor else 0b00 + fmtColor = FORCE_COLOR + fmtLong = False confPath = None dataPath = None qtStyle = "Fusion" @@ -163,10 +165,10 @@ def main(sysArgs: list | None = None) -> GuiMain | None: logLevel = logging.INFO elif inOpt in ("-d", "--debug"): CONFIG.isDebug = True - fmtFlags = fmtFlags | 0b10 + fmtLong = True logLevel = logging.DEBUG - elif inOpt in ("-c", "--color") and not nColor: - fmtFlags = fmtFlags | 0b01 + elif inOpt in ("-c", "--color"): + fmtColor = not NO_COLOR elif inOpt == "--meminfo": CONFIG.memInfo = True elif inOpt == "--style": @@ -176,7 +178,7 @@ def main(sysArgs: list | None = None) -> GuiMain | None: elif inOpt == "--data": dataPath = inArg - if fmtFlags & 0b01: + if fmtColor: # This will overwrite the default level names, and also ensure that # they can be converted back to integer levels logging.addLevelName(logging.DEBUG, f"{BLUE}DEBUG{END}") @@ -185,15 +187,9 @@ def main(sysArgs: list | None = None) -> GuiMain | None: logging.addLevelName(logging.ERROR, f"{RED}ERROR{END}") logging.addLevelName(logging.CRITICAL, f"{RED}CRITICAL{END}") - # Determine Log Format - if fmtFlags == 0b00: - logFmt = f"{LVLP} {TEXT}" - elif fmtFlags == 0b01: - logFmt = f"{LVLC} {TEXT}" - elif fmtFlags == 0b10: - logFmt = f"{TIME} {FILE}:{LINE} {LVLP} {TEXT}" - elif fmtFlags == 0b11: - logFmt = f"{TIME} {BLUE}{FILE}{END}:{WHITE}{LINE}{END} {LVLC} {TEXT}" + logTxt = f"{LVLC} {TEXT}" if fmtColor else f"{LVLP} {TEXT}" + logPos = f"{BLUE}{FILE}{END}:{WHITE}{LINE}{END}" if fmtColor else f"{FILE}:{LINE}" + logFmt = f"{TIME} {logPos} {logTxt}" if fmtLong else logTxt # Setup Logging pkgLogger = logging.getLogger(__package__)