Nyagos 리포지토리 분기 이름 표시 프롬프트의 예
nyagos 4.1.9
로 움직이는 prompt 표시(브랜치명 있음)의 초기화 파일05/14 추가 일부 수정
이전 여러 곳에서 모아 모았던 것(4.0.x 정도용)이 움직이지 않게 되었기 때문에 대개조한 것.
참고
ぅ tp://ぅ아우세 rs. 오 rg / uki / Sp t tjoin
ぃ tp // m / cd5 / ms / b9 149c69416, 9c
ぃ tp // m / cd5 / ms / 69928401489입니다 1c107
기타
.nyagos
-- comment
-- prompt
-- 関数定義がうまくいかないので、クロージャ内のローカル関数にする
nyagos.prompt = function(this)
------------------------------------------------
-- strをpatで分割しテーブルを返す
-- code from 'http://lua-users.org/wiki/SplitJoin'
local function split(str, pat)
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t, cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
------------------------------------------------
-- srcの末尾から改行を取り除く
local function chomp(src)
return string.gsub(src, "[\r\n]+$", "")
end
------------------------------------------------
-- 最下層nのディレクトリ名だけ表示する文字列生成
-- fix nyagos 4.0x api
local function getCompressedPath(num)
local wd = nyagos.getwd()
local env = nyagos.env
local path = chomp(wd)
local buff = path
local drive = nil
-- HOME以下の場合
local home = env.home or env.userprofile
if path:find(home)then
drive = '~'
path = path:gsub(home, '~')
buff = path
end
-- 通常のドライブ
if drive == nil then
drive = buff:match('(%w+:)\\')
buff = buff:gsub('%w+:\\', '')
end
-- UNCパス
if drive == nil then
drive = buff:match('(\\\\.-)\\')
buff = buff:gsub('\\\\.-\\', '')
end
local tbl = split(buff, "[\\/]")
if #tbl > num then
buff = "/..."
for i = #tbl - (num - 1), #tbl do
buff = buff .. '/' .. tbl[i]
end
path = drive .. buff
end
return path
end
------------------------------------------------
-- エスケープシーケンスを削除
local function removeEscapeSequence(src)
-- FIXME : なぜか'$e%[(%d+;)+1m'でマッチしない
return src:gsub('$e%[%d+;%d+;1m',''):gsub('$e%[%d+;1m','')
end
------------------------------------------------
-- 文字列の幅を取得
-- 半角文字:1, 全角文字:2 にカウント
local function getStringWidth(src)
local width = 0
for p, c in utf8.codes(src) do
if (0 ~= bit32.band(c, 0x7FFFFF80)) then
if (0xFF61 <= c and c <= 0xFF9F) then
width = width + 1
else
width = width + 2
end
else
width = width + 1
end
end
return width
end
------------------------------------------------
-- PROMPT生成部分
-- branch name append
local function makePrompt(pathBlock)
local prompt = ''
if (pathBlock ~= '') then
prompt = pathBlock
else
prompt = '$e[30;40;1m[' .. getCompressedPath(3):gsub('\\', '/') .. ']$e[37;1m'
end
local hgbranch = nyagos.eval('hg branch 2> nul')
local gitbranch = nyagos.eval('git rev-parse --abbrev-ref HEAD 2> nul')
local rprompt = ''
if (hgbranch ~= '') then
rprompt = rprompt .. '$e[30;40;1m[$e[33;40;1m' .. hgbranch .. '$e[30;40;1m]$e[37;1m'
end
if (gitbranch ~= '') then
rprompt = rprompt .. '$e[30;40;1m[$e[33;40;1m' .. gitbranch .. '$e[30;40;1m]$e[37;1m'
end
local pad = nyagos.getviewwidth() - getStringWidth(removeEscapeSequence(prompt .. rprompt))
for i = 1, pad-1 do
prompt = prompt .. ' '
end
return prompt .. rprompt .. '\n$ '
end
------------------------------------------------
-- path,title,prompt
local path = getCompressedPath(3):gsub('\\', '/')
local title = ''
local pathBlock = ''
if nyagos.elevated() then
title = path .. " - NYAGOS(admin)"
pathBlock = '$e[30;40;1m[$e[40;31;1m'..path..'$e[30;40;1m]$e[37;1m'
else
title = path .. " - NYAGOS"
pathBlock = '$e[30;40;1m[$e[40;36;1m'..path..'$e[30;40;1m]$e[37;1m'
end
return nyagos.default_prompt(makePrompt(pathBlock),title)
end
------------------------------------------------
이런 식으로
Reference
이 문제에 관하여(Nyagos 리포지토리 분기 이름 표시 프롬프트의 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tsuyoshi_cho/items/d029825b6d8d3688da92텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)