Skip to content

Instantly share code, notes, and snippets.

@hi5
Created December 26, 2020 15:25
Show Gist options
  • Save hi5/a1a43b0affd8af5963e609e0bbbc8cc3 to your computer and use it in GitHub Desktop.
Save hi5/a1a43b0affd8af5963e609e0bbbc8cc3 to your computer and use it in GitHub Desktop.
Powerline for CMD

Powerline for CMD

I have created a Powerline-like prompt for CMD long time ago.

Syntax: powerline-cmd [/?] [mode [sep]]

  • /? A help message
  • mode A mode for your prompt
  • sep A seperator for your prompt

Example: powerline-cmd nerdfonts2 $B

Modes

Mode name Description
nerdfonts A NerdFonts prompt
blog A Unicode-only prompt
legacy A Unicode-only colored prompt
powerline Same as legacy, but the default seperator is from Powerline
nerdfonts2 A 2-line NerdFonts prompt
blog2 A 2-line Unicode-only prompt
legacy2 A 2-line Unicode-only colored prompt
powerline2 Same as legacy2, but the default seperator is from Powerline

Notes:

  • This script puts name of your host in %appdata%\CMDPowerline\hostname because UserDomain return capitalized hostname. After loading this prompt, a environment variable %UserDomainC% is created.
  • This script sets encoding to UTF-8 so it can use Unicode symbols.
  • If an unknown mode is used, the script fallbacks to legacy prompt.
  • This script also sets the title to CMD[#] at %cd%. As it cleans the Administrator: prefix, I added a # to title.
  • In Terminus, the prompt also reports current directory.
@chcp 65001 > nul
@echo off
if .%1==./? (
echo %0 [/?] [mode [sep]]
echo Sets a Powerline-like prompt
echo /? This help
echo mode A mode for your prompt
echo sep A seperator for your prompt
echo.
echo Modes:
echo nerdfonts A NerdFonts prompt
echo blog A Unicode-only prompt
echo legacy A Unicode-only colored prompt
echo powerline Same as legacy, but the default seperator is from Powerline
echo nerdfonts2 A 2-line NerdFonts prompt
echo blog2 A 2-line Unicode-only prompt
echo legacy2 A 2-line Unicode-only colored prompt
echo powerline2 Same as blog2, but the default seperator is from Powerline
echo.
echo Notes:
echo - This script puts name of your host in %appdata%\CMDPowerline\hostname because UserDomain return very capitalized hostname.
echo After loading this prompt, a environment variable ^%UserDomainC^% is created.
echo - This script sets encoding to UTF-8 so it can use Unicode symbols.
echo - If an unknown mode is used, the script fallbacs to legacy prompt.
echo - This script also sets the title to CMD[#] at ^%cd^%. As it cleans the Administrator: prefix, I added a # to title.
echo - In Terminus, the prompt also reports current directory.
exit /b 0
)
set $PostFix=$E[0m
if defined TERMINUS_PLUGINS set $PostFix=$E]1377;CurrentDir=$P
if not exist %appdata%\CMDPowerline\ md %appdata%\CMDPowerline || echo Can not make directory %appdata%\CMDPowerline\. >&2
if not exist %appdata%\CMDPowerline\hostname (hostname > %appdata%\CMDPowerline\hostname) || echo Can not make file %appdata%\CMDPowerline\hostname. >&2
if exist %appdata%\CMDPowerline\hostname set /p UserDomainC=<%appdata%\CMDPowerline\hostname
if .%1==.nerdfonts (call :nerdfonts %2 & set $sep= & set $postfix= & exit /b 0)
if .%1==.powerline (call :powerline %2 & set $sep= & set $postfix= & exit /b 0)
if .%1==.blog (call :blog %2 & set $sep= & set $postfix= & exit /b 0)
if .%1==.nerdfonts2 (call :nerdfonts2 %2 & set $sep= & set $postfix= & exit /b 0)
if .%1==.powerline2 (call :powerline2 %2 & set $sep= & set $postfix= & exit /b 0)
if .%1==.legacy2 (call :legacy2 %2 & set $sep= & set $postfix= & exit /b 0)
if .%1==.blog2 (call :blog2 %2 & set $sep= & set $postfix= & exit /b 0)
call :legacy %2
exit /b 0
rem =========[1 Line Mode]========
:nerdfonts SEP
if .%1==. (set $sep=) else set $sep=%1
openfiles >nul 2>&1
if ERRORLEVEL 1 (
prompt $E]2;CMD$Sat$S$P$E\$E[43;30m$T$E[0;33;46m%$sep%$E[30;46m%UserName%$E[36;45m%$sep%$E[94m$E[39;45m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$S%$PostFix%
) else (
prompt $E]2;#CMD$Sat$S$P$E\$E[43;30m$T$E[0;33;101m%$sep%$E[30;101m%UserName%$E[91;45m%$sep%$E[94m$E[39;45m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$S%$PostFix%
)
exit /b 0
:legacy SEP
if .%1==. (set $sep=▶) else set $sep=%1
openfiles >nul 2>&1
if ERRORLEVEL 1 (
prompt $E]2;CMD$Sat$S$P$E\$E[43;30m$T$E[0;33;46m%$sep%$E[30;46m%UserName%$E[36;45m%$sep%$E[45;39m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$S%$PostFix%
) else (
prompt $E]2;#CMD$Sat$S$P$E\$E[43;30m$T$E[0;33;101m%$sep%$E[30;101m%UserName%$E[91;45m%$sep%$E[45;39m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$S%$PostFix%
)
exit /b 0
:powerline SEP
if .%1==. (set $sep=) else set $sep=%1
call :legacy %$sep%
exit /b 0
:blog SEP
if .%1==. (set $sep=⟩) else set $sep=%1
openfiles >nul 2>&1
if ERRORLEVEL 1 (
prompt $E]2;CMD$Sat$S$P$E\$T%$sep%%UserName%%$sep%%UserDomainC%%$sep%$M$+$P%$sep%%$PostFix%
) else (
prompt $E]2;#CMD$Sat$S$P$E\$T%$sep%!%UserName%%$sep%%UserDomainC%%$sep%$M$+$P%$sep%%$PostFix%
)
exit /b 0
rem =========[2 Line Mode]========
:nerdfonts2 SEP
if .%1==. (set $sep=) else set $sep=%1
openfiles >nul 2>&1
if ERRORLEVEL 1 (
prompt $E]2;CMD$Sat$S$P$E\╭──$E[43;30m%$SEP%$E[30m$T$E[0;33;46m%$sep%$E[30;46m%UserName%$E[36;45m%$sep%$E[94m$E[39;45m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$_╰▶$S%$PostFix%
) else (
prompt $E]2;#CMD$Sat$S$P$E\╭──$E[43;30m%$SEP%$E[30m$T$E[0;33;101m%$sep%$E[30;101m%UserName%$E[91;45m%$sep%$E[94m$E[39;45m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$_╰▶$S%$PostFix%
)
exit /b 0
:legacy2 SEP
if .%1==. (set $sep=▶) else set $sep=%1
openfiles >nul 2>&1
if ERRORLEVEL 1 (
prompt $E]2;CMD$Sat$S$P$E\╭──$E[43;30m%$SEP%30m$T$E[0;33;46m%$sep%$E[30;46m%UserName%$E[36;45m%$sep%$E[45;39m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$_╰▶$S%$PostFix%
) else (
prompt $E]2;#CMD$Sat$S$P$E\╭──$E[43;30m%$SEP%30m$T$E[0;33;101m%$sep%$E[30;101m%UserName%$E[91;45m%$sep%$E[45;39m%UserDomainC%$E[39;35;103m%$sep%$E[39;103;30m$M$+$P$E[0;93m%$sep%$E[0m$_╰▶$S%$PostFix%
)
exit /b 0
:powerline2 SEP
if .%1==. (set $sep=) else set $sep=%1
call :legacy2 %$sep%
exit /b 0
:blog2 SEP
if .%1==. (set $sep=⟩) else set $sep=%1
openfiles >nul 2>&1
if ERRORLEVEL 1 (
prompt $E]2;CMD$Sat$S$P$E\╭──%$sep%$T%$sep%%UserName%%$sep%%UserDomainC%%$sep%$M$+$P%$sep%$_╰▶$S%$PostFix%
) else (
prompt $E]2;#CMD$Sat$S$P$E\╭──%$sep%$T%$sep%!%UserName%%$sep%%UserDomainC%%$sep%$M$+$P%$sep%$_╰▶$S%$PostFix%
)
exit /b 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment