diff --git a/toot/cli/tui.py b/toot/cli/tui.py index 73110ae..12c82fd 100644 --- a/toot/cli/tui.py +++ b/toot/cli/tui.py @@ -45,6 +45,12 @@ COLOR_OPTIONS = ", ".join(TUI_COLORS.keys()) type=click.Choice(IMAGE_FORMAT_CHOICES), help="Image output format; support varies across terminals. Default: block" ) +@click.option( + "--show-display-names", + is_flag=True, + default=False, + help="Show display names instead of account names in the list view." +) @pass_context def tui( ctx: Context, @@ -54,7 +60,8 @@ def tui( relative_datetimes: bool, cache_size: Optional[int], default_visibility: Optional[str], - image_format: Optional[str] + image_format: Optional[str], + show_display_names: bool, ): """Launches the toot terminal user interface""" if colors is None: @@ -68,6 +75,7 @@ def tui( default_visibility=default_visibility, always_show_sensitive=always_show_sensitive, image_format=image_format, + show_display_names=show_display_names, ) tui = TUI.create(ctx.app, ctx.user, options) tui.run() diff --git a/toot/tui/app.py b/toot/tui/app.py index 483d829..29fe1a0 100644 --- a/toot/tui/app.py +++ b/toot/tui/app.py @@ -40,6 +40,7 @@ class TuiOptions(NamedTuple): cache_size: int default_visibility: Optional[str] image_format: Optional[str] + show_display_names: bool class Header(urwid.WidgetWrap): @@ -97,12 +98,12 @@ class TUI(urwid.Frame): screen: urwid.BaseScreen @staticmethod - def create(app: App, user: User, args: TuiOptions): + def create(app: App, user: User, options: TuiOptions): """Factory method, sets up TUI and an event loop.""" screen = TuiScreen() - screen.set_terminal_properties(args.colors) + screen.set_terminal_properties(options.colors) - tui = TUI(app, user, screen, args) + tui = TUI(app, user, screen, options) palette = PALETTE.copy() overrides = settings.get_setting("tui.palette", dict, {}) diff --git a/toot/tui/timeline.py b/toot/tui/timeline.py index 1aa4936..ab8c78b 100644 --- a/toot/tui/timeline.py +++ b/toot/tui/timeline.py @@ -87,7 +87,7 @@ class Timeline(urwid.Columns): return urwid.ListBox(walker) def build_list_item(self, status): - item = StatusListItem(status, self.tui.options.relative_datetimes) + item = StatusListItem(status, self.tui.options) urwid.connect_signal(item, "click", lambda *args: self.tui.show_context_menu(status)) return urwid.AttrMap(item, None, focus_map={ @@ -593,14 +593,14 @@ class StatusDetails(urwid.Pile): class StatusListItem(SelectableColumns): - def __init__(self, status, relative_datetimes): + def __init__(self, status, options): edited_at = status.original.edited_at # TODO: hacky implementation to avoid creating conflicts for existing # pull requests, refactor when merged. created_at = ( time_ago(status.created_at).ljust(3, " ") - if relative_datetimes + if options.relative_datetimes else status.created_at.strftime("%Y-%m-%d %H:%M") ) @@ -610,6 +610,10 @@ class StatusListItem(SelectableColumns): is_reblog = ("dim", "♺") if status.reblog else " " is_reply = ("dim", "⤶ ") if status.original.in_reply_to else " " + display_name = status.original.author.display_name + account_name = status.original.account + name = display_name if display_name and options.show_display_names else account_name + return super().__init__([ ("pack", SelectableText(("status_list_timestamp", created_at), wrap="clip")), ("pack", urwid.Text(("status_list_timestamp", edited_flag))), @@ -618,7 +622,7 @@ class StatusListItem(SelectableColumns): ("pack", urwid.Text(" ")), ("pack", urwid.Text(reblogged)), ("pack", urwid.Text(" ")), - urwid.Text(("status_list_account", status.original.account), wrap="clip"), + urwid.Text(("status_list_account", name), wrap="clip"), ("pack", urwid.Text(is_reply)), ("pack", urwid.Text(is_reblog)), ("pack", urwid.Text(" ")),