windows terminal + nyagos で透過


windows terminal に nyagos のプロファイルを追加して、アクリル透明化を有効にしたのだけれども、入力欄が透明化しない・・・

過去に X11 の rxvt などで同じような症状が出たことがあったから、ASCII文字色の指定か?

ということで nyagos のプロンプトの設定を含めていろいろ調べた結果、きれいに透過させられました。

こちらを参考にさせてもらいました。

【NYAGOS】プロンプトで使える特殊文字と ANSI エスケープシーケンスを Lua でラップする

(markdownのフォーマット指定のために .lua にしてますが、%HOMEPATH%.nyagos に保存します)

~/.nyagos.lua
share.org_prompter = nyagos.prompt
nyagos.prompt = function(this)
    local prompt = share.prompt
    local esc = share.escape_sequence

    -- add dir name (with drive letter)
    -- bg.default (=49) だけでいい気もしますが、追加で bg.trans (=60) も足してます
    local pstart = esc.create_sequence(esc.bg.default, esc.bg.trans)
    local prompt_message = string.format('%s[%s]', pstart, prompt.path)

    -- check git branch
    local git_branch_name = nyagos.eval('git rev-parse --abbrev-ref HEAD 2>nul')

    if (git_branch_name ~= '') then
        -- add git branch name
        prompt_message = string.format(prompt_message .. ' [%s]', git_branch_name)
    end

    -- add line break
    prompt_message = prompt_message .. prompt.crlf

    -- add dollar
    prompt_message = prompt_message .. prompt.dollar .. ' '

    return share.org_prompter(prompt_message)
end

share.prompt = {
    eq = '$q', -- equal '='
    dollar = '$$', -- dollar '$'
    time = '$t', -- current time
    date = '$d', -- current date
    path = '$p', -- current path (with drive letter)
    ver = '$v', -- windows version
    drive = '$n', -- current drive letter
    gt = '$g', -- greater than '>'
    lt = '$l', -- less than '<'
    pipe = '$b', -- pipe '|'
    crlf = '$_', -- line break
    esc = '$e', -- escape
    bs = '$h', -- backspace
    amp = '$a', -- ampersand '&'
    l_par = '$c', -- left parenthesis '('
    r_par = '$f', -- right parenthesis ')'
    space = '$s' -- space
}

share.escape_sequence = {
    -- attribute
    attr = {
        off = '0',
        bold = '1',
        bold_off = '21',
        underline = '4',
        underline_off = '24',
        blink = '5',
        blink_off = '25'
    },

    -- foreground
    fg = {
        black = '30',
        red = '31',
        green = '32',
        yellow = '33',
        blue = '34',
        magenta = '35',
        cyan = '36',
        white = '37',
        default = '39',
        -- prefix 'l' is 'Light'
        l_gray = '90',
        l_red = '91',
        l_green = '92',
        l_yellow = '93',
        l_blue = '94',
        l_magenta = '95',
        l_cyan = '96',
        l_white = '97'
    },

    -- background
    bg = {
        black = '40',
        red = '41',
        green = '42',
        yellow = '43',
        blue = '44',
        magenta = '45',
        cyan = '46',
        white = '47',
        default = '49',
        trans = '60',
        -- prefix 'l' is 'Light'
        l_gray = '100',
        l_red = '101',
        l_green = '102',
        l_yellow = '103',
        l_blue = '104',
        l_magenta = '105',
        l_cyan = '106',
        l_white = '107'
    },

    create_sequence = function(...)
        local prompt = share.prompt
        local attrs = {...}
        local joined_attrs = ''

        for n, v in pairs(attrs) do
            local val = tostring(v)
            if val ~= nil then
                joined_attrs = joined_attrs ~= '' and joined_attrs .. ';' .. val or val
            end
        end

        return string.format('%s[%sm', prompt.esc, joined_attrs)
    end
}