diff options
| author | Olivier Gayot <olivier.gayot@sigexec.com> | 2023-05-14 18:33:49 +0200 | 
|---|---|---|
| committer | Olivier Gayot <olivier.gayot@sigexec.com> | 2023-05-14 18:43:05 +0200 | 
| commit | 73382682c8cfb3c87cae9d46d00c25829bbb9150 (patch) | |
| tree | c5e4ddc5f256d1ebea6ed9bcb2af201b546321fb | |
| parent | 255f7df0df82206f9fcc26a707b1f7a86d146cb6 (diff) | |
When using the menu, do not exit after applying a profile
By default, when using the TUI, we will now stay in the menu after
applying a profile. This allows to more easily fix the display is things
go wrong after applying a profile.
That said, sometimes the old behavior may be needed, so one can use the
`run --apply-exit` option.
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
| -rw-r--r-- | monitor_menu/__main__.py | 30 | 
1 files changed, 18 insertions, 12 deletions
| diff --git a/monitor_menu/__main__.py b/monitor_menu/__main__.py index fce1a65..91942e2 100644 --- a/monitor_menu/__main__.py +++ b/monitor_menu/__main__.py @@ -127,7 +127,7 @@ class MonitorMenu:          self.profiles = profiles          self.d = dialog.Dialog(autowidgetsize=True) -    def run(self, graphical_server: GraphicalServer | None = None): +    def run(self, *, graphical_server: GraphicalServer | None = None, apply_exit=False):          choices = []          i = 0 @@ -135,17 +135,20 @@ class MonitorMenu:              choices.append((str(i), p.name))              i += 1 -        code, profile_idx = self.d.menu( -                'Select the profile you want to use.', -                choices=choices) +        while True: +            code, profile_idx = self.d.menu( +                    'Select the profile you want to use.', +                    choices=choices) -        if code in (self.d.ESC, self.d.CANCEL): -            return +            if code in (self.d.ESC, self.d.CANCEL): +                return -        try: -            self.profiles[int(profile_idx)].apply(graphical_server=graphical_server) -        except IndexError: -            raise NoMatchingProfile from None +            try: +                self.profiles[int(profile_idx)].apply(graphical_server=graphical_server) +                if apply_exit: +                    return +            except IndexError: +                raise NoMatchingProfile from None  def main(): @@ -153,7 +156,8 @@ def main():      parser.add_argument("--log-level", "--loglevel", type=LogLevel, default="info")      parser.add_argument("--graphical-server", choices=("wayland", "xorg"))      subparser = parser.add_subparsers(dest="command") -    subparser.add_parser("run") +    run_parser = subparser.add_parser("run") +    run_parser.add_argument("--apply-exit", action="store_true")      apply_parser = subparser.add_parser("apply")      identifier_group = apply_parser.add_mutually_exclusive_group(required=True)      identifier_group.add_argument("--index", type=int) @@ -172,8 +176,10 @@ def main():      profiles = [Profile.from_json_dict(item) for item in data]      match args.command: -        case "run" | None: +        case None:              MonitorMenu(profiles).run(graphical_server=args.graphical_server) +        case "run": +            MonitorMenu(profiles).run(apply_exit=args.apply_exit, graphical_server=args.graphical_server)          case "apply":              if args.index is not None:                  try: | 
