diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-19 15:47:44 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-19 15:47:44 +1000 |
| commit | 0714622d09e764c82c9b748ce8845fdbc11608fb (patch) | |
| tree | 026e084e36a12e60fdd8e5fb2ffca80f924f047f | |
| parent | screenshot: use shell for region (diff) | |
| download | caelestia-cli-0714622d09e764c82c9b748ce8845fdbc11608fb.tar.gz caelestia-cli-0714622d09e764c82c9b748ce8845fdbc11608fb.tar.bz2 caelestia-cli-0714622d09e764c82c9b748ce8845fdbc11608fb.zip | |
shell: filter log
| -rw-r--r-- | completions/caelestia.fish | 1 | ||||
| -rw-r--r-- | src/caelestia/parser.py | 9 | ||||
| -rw-r--r-- | src/caelestia/subcommands/shell.py | 21 |
3 files changed, 22 insertions, 9 deletions
diff --git a/completions/caelestia.fish b/completions/caelestia.fish index 7e310da..0314a78 100644 --- a/completions/caelestia.fish +++ b/completions/caelestia.fish @@ -28,6 +28,7 @@ set -l not_seen "$seen shell && not $seen $commands" complete -c caelestia -n $not_seen -s 'd' -l 'daemon' -d 'Start the shell detached' complete -c caelestia -n $not_seen -s 's' -l 'show' -d 'Print all IPC commands' complete -c caelestia -n $not_seen -s 'l' -l 'log' -d 'Print the shell log' +complete -c caelestia -n $not_seen -l 'log-rules' -d 'Log rules to apply' complete -c caelestia -n $not_seen -a 'mpris' -d 'Mpris control' complete -c caelestia -n $not_seen -a 'drawers' -d 'Toggle drawers' complete -c caelestia -n $not_seen -a 'wallpaper' -d 'Wallpaper control (for internal use)' diff --git a/src/caelestia/parser.py b/src/caelestia/parser.py index e39b29c..271b97c 100644 --- a/src/caelestia/parser.py +++ b/src/caelestia/parser.py @@ -20,13 +20,12 @@ def parse_args() -> (argparse.ArgumentParser, argparse.Namespace): shell_parser.add_argument("message", nargs="*", help="a message to send to the shell") shell_parser.add_argument("-d", "--daemon", action="store_true", help="start the shell detached") shell_parser.add_argument("-s", "--show", action="store_true", help="print all shell IPC commands") + shell_parser.add_argument("-l", "--log", action="store_true", help="print the shell log") shell_parser.add_argument( - "-l", - "--log", - nargs="?", - const="quickshell.dbus.properties.warning=false;quickshell.dbus.dbusmenu.warning=false;quickshell.service.notifications.warning=false;quickshell.service.sni.host.warning=false", + "--log-rules", + default="quickshell.dbus.properties.warning=false;quickshell.dbus.dbusmenu.warning=false;quickshell.service.notifications.warning=false;quickshell.service.sni.host.warning=false", metavar="RULES", - help="print the shell log", + help="log rules to apply", ) # Create parser for toggle opts diff --git a/src/caelestia/subcommands/shell.py b/src/caelestia/subcommands/shell.py index e8017fe..fc3321b 100644 --- a/src/caelestia/subcommands/shell.py +++ b/src/caelestia/subcommands/shell.py @@ -1,6 +1,8 @@ import subprocess from argparse import Namespace +from caelestia.utils.paths import c_cache_dir + class Command: args: Namespace @@ -20,22 +22,33 @@ class Command: self.message(*self.args.message) else: # Start the shell - args = ["qs", "-n", "-c", "caelestia"] + args = ["qs", "-n", "-c", "caelestia", "--log-rules", self.args.log_rules] if self.args.daemon: args.append("-d") - subprocess.run(args) + subprocess.run(args) + else: + shell = subprocess.Popen(args, stdout=subprocess.PIPE, universal_newlines=True) + for line in shell.stdout: + if self.filter_log(line): + print(line, end="") def shell(self, *args: list[str]) -> str: return subprocess.check_output(["qs", "-c", "caelestia", *args], text=True) + def filter_log(self, line: str) -> bool: + return ( + "QProcess: Destroyed while process" not in line + and f"Cannot open: file://{c_cache_dir}/imagecache/" not in line + ) + def print_ipc(self) -> None: print(self.shell("ipc", "show"), end="") def print_log(self) -> None: - log = self.shell("log") + log = self.shell("log", "-r", self.args.log_rules) # FIXME: remove when logging rules are added/warning is removed for line in log.splitlines(): - if "QProcess: Destroyed while process" not in line: + if self.filter_log(line): print(line) def message(self, *args: list[str]) -> None: |