You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自制类neofetch/fastfetch程序的系统信息左侧添加指定ASCII艺术图

如何在自制类neofetch/fastfetch程序的系统信息左侧添加指定ASCII艺术图

嘿,我完全懂你手动把ASCII硬塞到每一行print里的痛苦——不仅繁琐还容易把格式搞乱!其实我们可以用将ASCII艺术图和系统信息分别拆成单行字符串切片,逐行配对拼接的方法,轻松实现左右并排的效果,而且后续修改也方便很多。

具体实现步骤

核心思路就是把ASCII的每一行和系统信息的每一行一一对应,用格式化打印把它们放在同一行,再用边框统一包裹,这样整体布局就规整了。

修改后的完整代码

package main

import (
	"fmt"
	"strings"

	"github.com/jaypipes/ghw"
	"github.com/shirou/gopsutil/v4/cpu"
	"github.com/shirou/gopsutil/v4/mem"
)

func main() {
	v, _ := mem.VirtualMemory()
	c, _ := cpu.Info()
	gpu, _ := ghw.GPU()

	// 1. 把ASCII艺术图拆成每行的字符串切片,保留原始格式
	asciiLines := []string{
		" /\\",
		"/  \\",
		"/    \\",
		"/      \\",
		"/ __  \\",
		"/ |  | \\",
		"/_-'' ''-_\\",
	}

	// 计算内存(注意:GiB是1024^3,所以用1024而非1000换算更准确)
	totalMemGiB := float32(v.Total) / 1024 / 1024 / 1024
	availMem := float32(v.Available) / 1024 / 1024 / 1024
	usedMem := totalMemGiB - availMem

	// 处理CPU型号
	cpuModel := c[0].ModelName
	if strings.Contains(cpuModel, "AMD Ryzen 5 5600H with Radeon Graphics") {
		cpuModel = "AMD Ryzen 5 5600H"
	}

	// 处理GPU型号
	gpu0 := gpu.GraphicsCards[0].DeviceInfo.Product.Name
	gpu1 := gpu.GraphicsCards[1].DeviceInfo.Product.Name
	if strings.Contains(gpu0, "Radeon Vega") {
		gpu0 = "Radeon Vega Series"
	}
	if strings.Contains(gpu1, "GeForce GTX 1650") {
		gpu1 = "GeForce GTX 1650 Series"
	}

	// 2. 把系统信息整理成对应的字符串切片
	infoLines := []string{
		"  : Arch Linux",
		fmt.Sprintf(" ͛ : %s", cpuModel),
		fmt.Sprintf(" ߖ : %.2fGiB / %.2fGiB", usedMem, totalMemGiB),
		fmt.Sprintf("  : %s", gpu0),
		fmt.Sprintf("  : %s", gpu1),
	}

	// 3. 补全信息行的长度,和ASCII行数一致(如果信息行少就补空行)
	for len(infoLines) < len(asciiLines) {
		infoLines = append(infoLines, "")
	}

	// 4. 统一打印边框和内容
	fmt.Println("┌────────────────────────────────────────────────┐")
	for i := 0; i < len(asciiLines); i++ {
		// 格式化每行:左对齐打印ASCII行,然后是信息行,最后用边框包裹
		fmt.Printf("│ %-15s %-30s │\n", asciiLines[i], infoLines[i])
	}
	fmt.Println("└────────────────────────────────────────────────┘")
}

关键细节说明

  1. 拆分ASCII为行切片:把一整段ASCII拆成单个字符串元素,这样就能和系统信息逐行对应,避免手动拼接的麻烦。
  2. 规整系统信息切片:把所有要显示的系统信息提前整理成字符串切片,方便后续和ASCII行配对。
  3. 格式化对齐打印:用%-15s和%-30s实现左对齐排版,确保ASCII和信息部分不会错位,整体视觉更统一。
  4. 内存换算修正:原代码里用/1000计算GiB是不准确的,GiB的标准换算是1024^3,改成/1024/1024/1024后数值会更精准。

这样修改后,你不仅能轻松实现ASCII在左、信息在右的效果,以后要更换ASCII艺术图或者调整系统信息,只需要修改对应的切片内容就行,再也不用逐行改print语句啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:14:30