#!/usr/bin/env python """ Example of the fancy ZSH prompt that @anki-code was using. The theme is coming from the xonsh plugin from the xxh project: https://github.com/xxh/xxh-plugin-xonsh-theme-bar See: - https://github.com/xonsh/xonsh/issues/3356 - https://github.com/prompt-toolkit/python-prompt-toolkit/issues/1111 """ import datetime from prompt_toolkit import prompt from prompt_toolkit.application import get_app from prompt_toolkit.formatted_text import ( HTML, fragment_list_width, merge_formatted_text, to_formatted_text, ) from prompt_toolkit.styles import Style style = Style.from_dict( { "username": "#aaaaaa italic", "path": "#ffffff bold", "branch": "bg:#666666", "branch exclamation-mark": "#ff0000", "env": "bg:#666666", "left-part": "bg:#444444", "right-part": "bg:#444444", "padding": "bg:#444444", } ) def get_prompt() -> HTML: """ Build the prompt dynamically every time its rendered. """ left_part = HTML( "" " root " " abc " "~/.oh-my-zsh/themes" "" ) right_part = HTML( " " " master! " " py36 " " " "" ) % (datetime.datetime.now().isoformat(),) used_width = sum( [ fragment_list_width(to_formatted_text(left_part)), fragment_list_width(to_formatted_text(right_part)), ] ) total_width = get_app().output.get_size().columns padding_size = total_width - used_width padding = HTML("%s") % (" " * padding_size,) return merge_formatted_text([left_part, padding, right_part, "\n", "# "]) def main() -> None: while True: answer = prompt(get_prompt, style=style, refresh_interval=1) print("You said: %s" % answer) if __name__ == "__main__": main()