diff --git a/docs/USAGE.md b/docs/USAGE.md index bce6391..35234f8 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -11,9 +11,10 @@ tuimble --host mumble.example.com --user myname | Key | Action | |-----|--------| -| `q` | Quit | +| `F1` | Toggle self-deafen | | `F4` | Push-to-talk (configurable) | | `Enter` | Send message | +| `q` | Quit | | `Ctrl+C` | Quit | ## Push-to-Talk Modes diff --git a/src/tuimble/app.py b/src/tuimble/app.py index 375f2ec..145c8dd 100644 --- a/src/tuimble/app.py +++ b/src/tuimble/app.py @@ -53,6 +53,7 @@ class StatusBar(Static): ptt_active = reactive(False) connected = reactive(False) + self_deaf = reactive(False) server_info = reactive("") def render(self) -> str: @@ -67,17 +68,20 @@ class StatusBar(Static): if self.ptt_active: ptt_sym = "[#e0af68]\u25cf[/]" - ptt_full = f"{ptt_sym} TX" + ptt_full = f"{ptt_sym} [bold]TX[/bold]" else: ptt_sym = "[#565f89]\u25cb[/]" ptt_full = f"{ptt_sym} idle" + deaf_sym = "[#f7768e]\u2298[/]" if self.self_deaf else "" + deaf_full = "[#f7768e]\u2298[/] deaf" if self.self_deaf else "" + if w < 40: - return f" {conn_sym} {ptt_sym}" + return f" {conn_sym} {deaf_sym}{ptt_sym}" if w < 60: - return f" {conn_full} {ptt_full}" + return f" {conn_full} {deaf_full}{' ' if deaf_full else ''}{ptt_full}" info = f" [dim]{self.server_info}[/]" if self.server_info else "" - return f" {conn_full} {ptt_full}{info}" + return f" {conn_full} {deaf_full}{' ' if deaf_full else ''}{ptt_full}{info}" class ChannelTree(Static): @@ -238,6 +242,7 @@ class TuimbleApp(App): """ BINDINGS = [ + ("f1", "toggle_deaf", "Deafen"), ("q", "quit", "Quit"), ("ctrl+c", "quit", "Quit"), ] @@ -406,6 +411,21 @@ class TuimbleApp(App): tree = self.query_one("#sidebar", ChannelTree) tree.set_state(channels, users_by_channel) + # -- deafen -------------------------------------------------------------- + + def action_toggle_deaf(self) -> None: + """Toggle self-deafen.""" + deafened = not self._audio.deafened + self._audio.deafened = deafened + self._client.set_self_deaf(deafened) + status = self.query_one("#status", StatusBar) + status.self_deaf = deafened + chatlog = self.query_one("#chatlog", ChatLog) + if deafened: + chatlog.write("[#f7768e]\u2298 deafened[/]") + else: + chatlog.write("[#9ece6a]\u2713 undeafened[/]") + # -- PTT ----------------------------------------------------------------- def on_key(self, event: events.Key) -> None: