175 lines
6.4 KiB
Python
175 lines
6.4 KiB
Python
from typing import Dict
|
|
|
|
from prompt_toolkit.styles import BaseStyle, Style, merge_styles
|
|
from prompt_toolkit.styles.pygments import style_from_pygments_cls
|
|
from prompt_toolkit.utils import is_conemu_ansi, is_windows, is_windows_vt100_supported
|
|
from pygments.styles import get_all_styles, get_style_by_name
|
|
|
|
__all__ = ["get_all_code_styles", "get_all_ui_styles", "generate_style"]
|
|
|
|
|
|
def get_all_code_styles() -> Dict[str, BaseStyle]:
|
|
"""
|
|
Return a mapping from style names to their classes.
|
|
"""
|
|
result: Dict[str, BaseStyle] = {
|
|
name: style_from_pygments_cls(get_style_by_name(name))
|
|
for name in get_all_styles()
|
|
}
|
|
result["win32"] = Style.from_dict(win32_code_style)
|
|
return result
|
|
|
|
|
|
def get_all_ui_styles() -> Dict[str, BaseStyle]:
|
|
"""
|
|
Return a dict mapping {ui_style_name -> style_dict}.
|
|
"""
|
|
return {
|
|
"default": Style.from_dict(default_ui_style),
|
|
"blue": Style.from_dict(blue_ui_style),
|
|
}
|
|
|
|
|
|
def generate_style(python_style: BaseStyle, ui_style: BaseStyle) -> BaseStyle:
|
|
"""
|
|
Generate Pygments Style class from two dictionaries
|
|
containing style rules.
|
|
"""
|
|
return merge_styles([python_style, ui_style])
|
|
|
|
|
|
# Code style for Windows consoles. They support only 16 colors,
|
|
# so we choose a combination that displays nicely.
|
|
win32_code_style = {
|
|
"pygments.comment": "#00ff00",
|
|
"pygments.keyword": "#44ff44",
|
|
"pygments.number": "",
|
|
"pygments.operator": "",
|
|
"pygments.string": "#ff44ff",
|
|
"pygments.name": "",
|
|
"pygments.name.decorator": "#ff4444",
|
|
"pygments.name.class": "#ff4444",
|
|
"pygments.name.function": "#ff4444",
|
|
"pygments.name.builtin": "#ff4444",
|
|
"pygments.name.attribute": "",
|
|
"pygments.name.constant": "",
|
|
"pygments.name.entity": "",
|
|
"pygments.name.exception": "",
|
|
"pygments.name.label": "",
|
|
"pygments.name.namespace": "",
|
|
"pygments.name.tag": "",
|
|
"pygments.name.variable": "",
|
|
}
|
|
|
|
|
|
default_ui_style = {
|
|
"control-character": "ansiblue",
|
|
# Classic prompt.
|
|
"prompt": "bold",
|
|
"prompt.dots": "noinherit",
|
|
# (IPython <5.0) Prompt: "In [1]:"
|
|
"in": "bold #008800",
|
|
"in.number": "",
|
|
# Return value.
|
|
"out": "#ff0000",
|
|
"out.number": "#ff0000",
|
|
# Completions.
|
|
"completion.builtin": "",
|
|
"completion.param": "#006666 italic",
|
|
"completion.keyword": "fg:#008800",
|
|
"completion.keyword fuzzymatch.inside": "fg:#008800",
|
|
"completion.keyword fuzzymatch.outside": "fg:#44aa44",
|
|
# Separator between windows. (Used above docstring.)
|
|
"separator": "#bbbbbb",
|
|
# System toolbar
|
|
"system-toolbar": "#22aaaa noinherit",
|
|
# "arg" toolbar.
|
|
"arg-toolbar": "#22aaaa noinherit",
|
|
"arg-toolbar.text": "noinherit",
|
|
# Signature toolbar.
|
|
"signature-toolbar": "bg:#44bbbb #000000",
|
|
"signature-toolbar current-name": "bg:#008888 #ffffff bold",
|
|
"signature-toolbar operator": "#000000 bold",
|
|
"docstring": "#888888",
|
|
# Validation toolbar.
|
|
"validation-toolbar": "bg:#440000 #aaaaaa",
|
|
# Status toolbar.
|
|
"status-toolbar": "bg:#222222 #aaaaaa",
|
|
"status-toolbar.title": "underline",
|
|
"status-toolbar.inputmode": "bg:#222222 #ffffaa",
|
|
"status-toolbar.key": "bg:#000000 #888888",
|
|
"status-toolbar key": "bg:#000000 #888888",
|
|
"status-toolbar.pastemodeon": "bg:#aa4444 #ffffff",
|
|
"status-toolbar.pythonversion": "bg:#222222 #ffffff bold",
|
|
"status-toolbar paste-mode-on": "bg:#aa4444 #ffffff",
|
|
"record": "bg:#884444 white",
|
|
"status-toolbar more": "#ffff44",
|
|
"status-toolbar.input-mode": "#ffff44",
|
|
# The options sidebar.
|
|
"sidebar": "bg:#bbbbbb #000000",
|
|
"sidebar.title": "bg:#668866 #ffffff",
|
|
"sidebar.label": "bg:#bbbbbb #222222",
|
|
"sidebar.status": "bg:#dddddd #000011",
|
|
"sidebar.label selected": "bg:#222222 #eeeeee",
|
|
"sidebar.status selected": "bg:#444444 #ffffff bold",
|
|
"sidebar.separator": "underline",
|
|
"sidebar.key": "bg:#bbddbb #000000 bold",
|
|
"sidebar.key.description": "bg:#bbbbbb #000000",
|
|
"sidebar.helptext": "bg:#fdf6e3 #000011",
|
|
# # Styling for the history layout.
|
|
# history.line: '',
|
|
# history.line.selected: 'bg:#008800 #000000',
|
|
# history.line.current: 'bg:#ffffff #000000',
|
|
# history.line.selected.current: 'bg:#88ff88 #000000',
|
|
# history.existinginput: '#888888',
|
|
# Help Window.
|
|
"window-border": "#aaaaaa",
|
|
"window-title": "bg:#bbbbbb #000000",
|
|
# Meta-enter message.
|
|
"accept-message": "bg:#ffff88 #444444",
|
|
# Exit confirmation.
|
|
"exit-confirmation": "bg:#884444 #ffffff",
|
|
}
|
|
|
|
|
|
# Some changes to get a bit more contrast on Windows consoles.
|
|
# (They only support 16 colors.)
|
|
if is_windows() and not is_conemu_ansi() and not is_windows_vt100_supported():
|
|
default_ui_style.update(
|
|
{
|
|
"sidebar.title": "bg:#00ff00 #ffffff",
|
|
"exitconfirmation": "bg:#ff4444 #ffffff",
|
|
"toolbar.validation": "bg:#ff4444 #ffffff",
|
|
"menu.completions.completion": "bg:#ffffff #000000",
|
|
"menu.completions.completion.current": "bg:#aaaaaa #000000",
|
|
}
|
|
)
|
|
|
|
|
|
blue_ui_style = {}
|
|
blue_ui_style.update(default_ui_style)
|
|
# blue_ui_style.update({
|
|
# # Line numbers.
|
|
# Token.LineNumber: '#aa6666',
|
|
#
|
|
# # Highlighting of search matches in document.
|
|
# Token.SearchMatch: '#ffffff bg:#4444aa',
|
|
# Token.SearchMatch.Current: '#ffffff bg:#44aa44',
|
|
#
|
|
# # Highlighting of select text in document.
|
|
# Token.SelectedText: '#ffffff bg:#6666aa',
|
|
#
|
|
# # Completer toolbar.
|
|
# Token.Toolbar.Completions: 'bg:#44bbbb #000000',
|
|
# Token.Toolbar.Completions.Arrow: 'bg:#44bbbb #000000 bold',
|
|
# Token.Toolbar.Completions.Completion: 'bg:#44bbbb #000000',
|
|
# Token.Toolbar.Completions.Completion.Current: 'bg:#008888 #ffffff',
|
|
#
|
|
# # Completer menu.
|
|
# Token.Menu.Completions.Completion: 'bg:#44bbbb #000000',
|
|
# Token.Menu.Completions.Completion.Current: 'bg:#008888 #ffffff',
|
|
# Token.Menu.Completions.Meta: 'bg:#449999 #000000',
|
|
# Token.Menu.Completions.Meta.Current: 'bg:#00aaaa #000000',
|
|
# Token.Menu.Completions.ProgressBar: 'bg:#aaaaaa',
|
|
# Token.Menu.Completions.ProgressButton: 'bg:#000000',
|
|
# })
|