From cfdc63df2ddff1bc5479757189bfc2772251cb40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Sat, 15 Feb 2025 16:08:25 +0100 Subject: [PATCH] tools/gdctl: Make argcomplete optional While having automatic completions is a very nice feature of gdctl (I had suggested to use it too :)), it's not something that distros may have by default and in particular it's not a package in main in ubuntu. So, make the code less restrictive on completions, since completions is not a core functionality of the tool and it can definitely work without them. Part-of: --- tools/gdctl | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/tools/gdctl b/tools/gdctl index 7d783af50..731df53ee 100755 --- a/tools/gdctl +++ b/tools/gdctl @@ -1,14 +1,21 @@ #!/usr/bin/env python3 import argparse -import argcomplete import sys from dataclasses import dataclass, field -from typing import NamedTuple, Any +from typing import NamedTuple, Any, Optional +from types import ModuleType from gi.repository import GLib, Gio # type: ignore from enum import Enum, Flag -from argcomplete.completers import BaseCompleter, SuppressCompleter + +argcomplete: Optional[ModuleType] = None +BaseCompleter: Any +try: + import argcomplete + from argcomplete.completers import BaseCompleter +except ModuleNotFoundError: + BaseCompleter = object NAME = "org.gnome.Mutter.DisplayConfig" INTERFACE = "org.gnome.Mutter.DisplayConfig" @@ -1447,15 +1454,19 @@ if __name__ == "__main__": type=str, ).completer = MonitorCompleter() # type: ignore[attr-defined] - for action in [ - GroupAction, - SubGroupAction, - AppendToGroup, - AppendToSubGroup, - AppendToGlobal, - ]: - argcomplete.safe_actions.add(action) - argcomplete.autocomplete(parser, default_completer=SuppressCompleter) # type: ignore[arg-type] + if argcomplete: + for action in [ + GroupAction, + SubGroupAction, + AppendToGroup, + AppendToSubGroup, + AppendToGlobal, + ]: + argcomplete.safe_actions.add(action) + + argcomplete.autocomplete( + parser, default_completer=argcomplete.SuppressCompleter + ) # type: ignore[arg-type] args = parser.parse_args()