厭倦了單一的黑色背景?來動手美化自己的終端吧!

語言: CN / TW / HK

【導語】:基於 TUI 構建的 Go 終端輸出樣式庫。

簡介

Lip Gloss是一個精美的終端輸出樣式庫,基於TUI構建,可以DIY自己Go終端樣式,定義文字樣式、背景配色等。Lip Gloss對終端渲染採用的是表達性、宣告性的方法。如果你對CSS很熟悉,那Lip Gloss對你來說就很簡單了。

import "github.com/charmbracelet/lipgloss"  
  
var style = lipgloss.NewStyle().  
    Bold(true).  
    Foreground(lipgloss.Color("#FAFAFA")).  
    Background(lipgloss.Color("#7D56F4")).  
    PaddingTop(2).  
    PaddingLeft(4).  
    Width(22)  
  
    fmt.Println(style.Render("Hello, kitty."))

專案地址是:

https://github.com/charmbracelet/lipgloss

顏色設定

Lip Gloss支援以下顏色的配置檔案:

  • ANSI 16 Colors (4-bit)
lipgloss.Color("5")  // magenta  
lipgloss.Color("9")  // red  
lipgloss.Color("12") // light blue  
  • ANSI 256 Colors (8-bit)
lipgloss.Color("86")  // aqua  
lipgloss.Color("201") // hot pink  
lipgloss.Color("202") // orange  
  • True Color (24-bit)
lipgloss.Color("#0000FF") // good ol' 100% blue  
lipgloss.Color("#04B575") // a green  
lipgloss.Color("#3C3C3C") // a dark gray  

這些配置檔案會被自動檢測,並且當前調色盤色域之外的顏色將被自動強制為其最接近的可用值。

  • Adaptive Colors 還可以為淺色和深色背景指定顏色選項:
lipgloss.AdaptiveColor{Light: "236", Dark: "248"}  

內聯格式

Lip Gloss支援通常的ANSI文字格式選項:

var style = lipgloss.NewStyle().  
    Bold(true).  
    Italic(true).  
    Faint(true).  
    Blink(true).  
    Strikethrough(true).  
    Underline(true).  
    Reverse(true)  

塊級格式化

Lip Gloss還支援塊級格式化的規則:

// Padding  
var style = lipgloss.NewStyle().  
    PaddingTop(2).  
    PaddingRight(4).  
    PaddingBottom(2).  
    PaddingLeft(4)  
  
// Margins  
var style = lipgloss.NewStyle().  
    MarginTop(2).  
    RightMarginRight(4).  
    MarginBottom(2).  
    MarginLeft(4)  

還有用於邊距和填充的簡寫語法,語法與CSS相同:

lipgloss.NewStyle().Padding(2)  
  
lipgloss.NewStyle().Margin(2, 4)  
  
lipgloss.NewStyle().Padding(1, 4, 2)  
  
lipgloss.NewStyle().Margin(2, 4, 3, 1)  

文字對齊

可以設定文字左對齊、右對齊、居中顯示:

var style = lipgloss.NewStyle().  
    Width(24).  
    Align(lipgloss.Left).  // 左對齊  
    Align(lipgloss.Right). // 右對齊  
    Align(lipgloss.Center) // 居中  

寬度和高度

設定寬度和高度非常簡單:

var str = lipgloss.NewStyle().  
    Width(24).  
    Height(32).  
    Foreground(lipgloss.Color("63")).  
    Render("What’s for lunch?")  

複製樣式

可以複製樣式,在已有樣式的基礎上覆制並新增新的效果:

var style = lipgloss.NewStyle().Foreground(lipgloss.Color("219"))  
  
var wildStyle = style.Copy().Blink(true)  

繼承樣式

可以從其他樣式繼承:

var styleA = lipgloss.NewStyle().  
    Foreground(lipgloss.Color("229")).  
    Background(lipgloss.Color("63"))  
  
// 只有background會被繼承,因為foreground被重新設定了  
var styleB = lipgloss.NewStyle().  
    Foreground(lipgloss.Color("201")).  
    Inherit(styleA)  

取消樣式

可以設定取消樣式,取消後,複製和繼承都不會使用該樣式:

var style = lipgloss.NewStyle().  
    Bold(true).                        // 加粗  
    UnsetBold().                       // 取消加粗  
    Background(lipgloss.Color("227")). // 背景顏色  
    UnsetBackground()                  // 取消背景顏色  

預期的樣式

有時在開發元件時,您希望確保樣式定義遵守UI中的預期目的,可以強制設定該樣式,不允許其他人再修改相關的這個樣式:

// 強制渲染,忽略margins, padding, borders.  
someStyle.Inline(true).Render("yadda yadda")  
  
// 新增限制,內聯(true),最大寬度(5)  
someStyle.Inline(true).MaxWidth(5).Render("yadda yadda")  
  
// 新增限制,最大寬度(5),最大高度(5)  
someStyle.MaxWidth(5).MaxHeight(5).Render("yadda yadda")  

渲染

使用Render方法:

fmt.Println(lipgloss.NewStyle().Bold(true).Render("Hello, kitty."))  

或者使用Stringer介面:

var style = lipgloss.NewStyle().String("你好,貓咪。").Bold(true)  
  
fmt.Printf("%s\n", style)  

段落連線

水平或垂直連線文字段落:

// 水平合併  
lipgloss.HorizontalJoin(lipgloss.Bottom, paragraphA, paragraphB, paragraphC)  
  
// 垂直合併  
lipgloss.VerticalJoin(lipgloss.Center, paragraphA, paragraphB)  

將文字放在空格中

// 將段落水平居中放置在寬度為80的空間中  
block := lipgloss.PlaceHorizontal(80, lipgloss.Center, fancyStyledParagraph)  
  
// 在高度為30的空間中放置一個段落  
block := lipgloss.PlaceVertical(30, lipgloss.Bottom, fancyStyledParagraph)  
  
// 將段落放在30x80單元格空間的右下角。  
block := lipgloss.Place(30, 80, lipgloss.Right, lipgloss.Bottom, fancyStyledParagraph)  

開源前哨 日常分享熱門、有趣和實用的開源專案。參與維護 10萬+ Star 的開源技術資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。