4.4 KiB
Edison Themes Guide
Edison supports rich syntax highlighting for commands through its theme system. This guide explains how to use and customize themes in Edison.
Available Themes
Edison uses the Rich library's syntax highlighting capabilities, which are powered by Pygments. The following themes are available out of the box:
| Theme Name | Description | Style |
|---|---|---|
| monokai | Default theme with vibrant colors | Dark |
| github-dark | Based on GitHub's dark theme | Dark |
| solarized-dark | Popular dark theme with softer colors | Dark |
| dracula | High contrast dark theme | Dark |
| nord | Bluish dark theme | Dark |
| gruvbox-dark | Retro dark theme with warm colors | Dark |
| one-dark | Based on Atom's One Dark theme | Dark |
| vs | Based on Visual Studio's default theme | Light |
| solarized-light | Light version of the Solarized theme | Light |
| gruvbox-light | Light version of the Gruvbox theme | Light |
Using Themes
You can specify a theme in three ways:
1. In the Configuration File
Edit your edison.yaml file to set the default theme:
ui:
theme: "github-dark" # Change from the default "monokai"
2. Via Command-Line Argument
Specify a theme for a single command:
edison --theme dracula "list all files"
3. In Interactive Mode
The theme specified in the configuration or command-line will be used in interactive mode as well.
Theme Elements
Themes apply different colors to various syntax elements:
- Keywords: Shell keywords like
if,for,while, etc. - Strings: Text enclosed in quotes
- Comments: Lines starting with
#in bash - Variables: Names prefixed with
$in bash - Operators: Symbols like
=,-gt,|, etc. - Functions: Function names and calls
- Numbers: Numeric literals
- Punctuation: Brackets, parentheses, etc.
Creating Custom Themes
While Edison doesn't directly support custom themes, you can create your own by extending the Rich library:
- Create a custom theme file (e.g.,
custom_themes.py):
from pygments.style import Style
from pygments.token import (
Comment, Error, Keyword, Literal, Name, Number, Operator, String, Text
)
class CustomTheme(Style):
"""A custom syntax highlighting theme."""
# Define colors
background_color = "#282c34"
highlight_color = "#3e4451"
# Define token colors
styles = {
Text: "#abb2bf",
Error: "#e06c75",
Comment: "#5c6370",
Keyword: "#c678dd",
Keyword.Reserved: "#c678dd",
Keyword.Namespace: "#c678dd",
Name: "#abb2bf",
Name.Builtin: "#e5c07b",
Name.Function: "#61afef",
Name.Class: "#e5c07b",
Name.Decorator: "#61afef",
Name.Variable: "#e06c75",
Number: "#d19a66",
Operator: "#56b6c2",
String: "#98c379",
}
- Register your theme with Pygments:
from pygments.styles import STYLE_MAP
STYLE_MAP["custom"] = "custom_themes.CustomTheme"
- Use your custom theme:
from edison.utils.markdown_utils import print_command_rich
print_command_rich("ls -la", theme="custom")
Theme Compatibility
Theme appearance may vary depending on:
-
Terminal Capabilities: Some terminals have limited color support or override colors with their own theme settings.
-
Color Schemes: Your terminal's color scheme may affect how themes appear.
-
Font Settings: Certain font features like ligatures can affect the display of syntax-highlighted code.
Troubleshooting
If you're not seeing theme differences:
-
Check Terminal Support: Ensure your terminal supports 256 colors or true color:
echo $TERM echo $COLORTERMFor best results, use a terminal that supports true color (24-bit color).
-
Try High-Contrast Themes: If differences are subtle, try themes with higher contrast like
draculavssolarized-light. -
Use Complex Commands: Simple commands might not have enough syntax elements to show significant differences between themes.
Demo Scripts
Edison includes two demonstration scripts to help you visualize theme differences:
theme_demo.py: Shows the same bash script rendered with different themesedison_theme_demo.py: Demonstrates how Edison's theme functionality works with its markdown_utils module
Run these scripts to see the themes in action:
python theme_demo.py
python edison_theme_demo.py