Windows Terminal可以通過–tabColor指點標簽的顏色,那麼問題來了,有甚麼簡單好寫的算法把「目錄名」轉成十六進制顏色代碼?
方案 1:预设一些颜色,随机分配。这样颜色可控,不会出现丑的配色,而且也看不出来究竟是不是通过文字生成。
方案 2:如果想要和文字相关,可以用 ChatGPT,例如,问 ChatGPT 「下载」是什么颜色,让它用色值回答。
你想要什么样的映射?意义接近的名称映射到接近的颜色?或者是字面字词接近的映射到接近的颜色?还是让接近的名称映射到不同的颜色,方便区分?
第一种可以用 embedding 再降维,比如 BERT;第二种可以直接用字节值算,不过处理插入和删除会比较麻烦;第三种可以算个散列值,取前三个字节,比如 MD5。
這個實現是簡單,但是就沒了一目了然的作用。
過於奢侈 ![]()
按字面映射就好。
就是不知道有沒有好的算法。
可不可以,取文字的unicode 然后拼接一下,生成一个hex格式的颜色?
GPT了一段powershell代码
function Get-MD5Color {
param (
[Parameter(Mandatory=$true)]
[string] $InputString
)
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$utf8 = New-Object -TypeName System.Text.UTF8Encoding
$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($InputString)))
# Remove '-' from the hash and take the first 6 characters
$color = $hash.Replace("-", "").Substring(0, 6)
return $color
}
# 使用示例
$color = Get-MD5Color -InputString "Hello, World!"
Write-Host "HEX color is #$color"
如果目录名称长度是固定的, 那么算法效果会比较好.
但是现实中, 目录名称有可能很长, 也可能很短, 有可能是英文,日文,中文.
这串字符如果用md5算法, 就能获得固定长度的数值(128bit).
所以, 你可以把目录名的md5值作为唯一值.
比如 db7a0ca2a346dd5633c923143810ef9a 的md5值. 是32个字符组成.
如果你图省事, 只需要截取其中长度为6个字符串即可.
必然是一个16进制的颜色代码.
但是这样很难获得比较好的视觉效果. 起码跟目录名本身的含义无关.
這其實重點在於樓主想要達到什麼樣的目的?
僅僅是爲了讓不同目錄名不同顏色來區分標籤,那甚至直接用當前時刻作爲參數去算色值就行,長度固定範圍確定,覺得顏色不喜歡再生成一次就行;同理用隨機數字或者再添加一些參數例如按目錄字數算出亮度值之類的,已經足夠用了。
要是爲了明確區分不同目錄乃至於達到看色識目錄的地步,那就用一個文件來記錄已知目錄和對應的顏色,每遇到新目錄就隨機組合出新顏色並記錄;三個顏色通道各選八個階來組合都有512种顏色了;記錄數達到512后之後就順序取用前512种顏色繼續記錄下去(要是樓主絕對色覺足夠厲害,那當然也可以取更多階來擴充),依此循環。
的確想要看色識目錄,最好是有固定的算法而不是隨機,部分不滿意的就指定。
无意中看到