Merge pull request #2523 from daxgames/prompt_config

Prompt config
This commit is contained in:
Dax T Games 2021-04-15 08:27:05 -04:00 committed by GitHub
commit 8d6ce3e4ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 176 additions and 65 deletions

View File

@ -1,5 +1,25 @@
# Change Log # Change Log
## [Unreleased]
### Changes
- Update Git for Windows to 2.31.1
### Adds
- Configurable prompt for `cmd.exe` sessions. See `%cmder_root%\config\cmder_prompt_config.lua`
- Configurable colors
- Option to change `λ` to another character.
- Option to add `[user]@[host]` to the prompt
- Option to use of `~` to represent `$HOME` folder.
- Option to use folder name vs. full working directory path in prompt.
- Option to use single line prompt.
### Fixes
- Git prompt opt-out works better with additional changes to `clink-completions`
## [1.3.18](https://github.com/cmderdev/cmder/tree/v1.3.18) (2021-3-26) ## [1.3.18](https://github.com/cmderdev/cmder/tree/v1.3.18) (2021-3-26)
### Changes ### Changes

View File

@ -1,6 +1,6 @@
@echo off @echo off
:: Find root dir rem Find root dir
if not defined CMDER_ROOT ( if not defined CMDER_ROOT (
for /f "delims=" %%i in ("%~dp0\..\..") do ( for /f "delims=" %%i in ("%~dp0\..\..") do (

View File

@ -1,58 +1,58 @@
@echo off @echo off
:: Below are the default Cmder session settings: rem Below are the default Cmder session settings:
:: rem
:: See "%CMDER_ROOT%\README.md" for details on these settings. rem See "%CMDER_ROOT%\README.md" for details on these settings.
:: rem
:: `Cmder.exe` Arguments: rem `Cmder.exe` Arguments:
:: ---------------------- rem ----------------------
:: rem
:: `/c [cmder_user_cfg_root] rem `/c [cmder_user_cfg_root]
:: set cmder_user_bin=[cmder_user_cfg_root]\bin rem set cmder_user_bin=[cmder_user_cfg_root]\bin
:: set cmder_user_config=[cmder_user_cfg_root]\config rem set cmder_user_config=[cmder_user_cfg_root]\config
:: rem
:: `init.bat` Arguments rem `init.bat` Arguments
:: -------------------- rem --------------------
:: rem
:: `/d` rem `/d`
:: debug_output=0 rem debug_output=0
:: rem
:: `/v` rem `/v`
:: verbose_output=0 rem verbose_output=0
:: rem
:: `/f` rem `/f`
:: fast_init=0 rem fast_init=0
:: rem
:: `/nix_tools` rem `/nix_tools`
:: nix_tools=1 rem nix_tools=1
:: rem
:: `/t` rem `/t`
:: time_init=0 rem time_init=0
:: rem
:: `/max_depth` rem `/max_depth`
:: max_depth=1 rem max_depth=1
:: rem
:: `/user_aliases` rem `/user_aliases`
:: user_aliases= rem user_aliases=
:: rem
:: `/git_install_root` rem `/git_install_root`
:: GIT_INSTALL_ROOT= rem GIT_INSTALL_ROOT=
:: rem
:: `/home` rem `/home`
:: HOME= rem HOME=
:: rem
:: `/svn_ssh` rem `/svn_ssh`
:: SVN_SSH= rem SVN_SSH=
echo Applying Cmder VSCode settings from '%~0'... echo Applying Cmder VSCode settings from '%~0'...
if defined CMDER_CONFIGURED ( if defined CMDER_CONFIGURED (
:: Set Cmder settings here for when VSCode is launched inside Cmder. rem Set Cmder settings here for when VSCode is launched inside Cmder.
set verbose_output=1 set verbose_output=1
) else ( ) else (
:: Set Cmder settings here for when VSCode is launched from outside Cmder. rem Set Cmder settings here for when VSCode is launched from outside Cmder.
set verbose_output=1 set verbose_output=1
) )
:: Set all required Cmder VSCode terminal environment settings above this line. rem Set all required Cmder VSCode terminal environment settings above this line.
echo Applying Cmder VSCode settings is complete! echo Applying Cmder VSCode settings is complete!

68
vendor/clink.lua vendored
View File

@ -21,6 +21,16 @@ local function verbatim(s)
return s return s
end end
-- Extracts only the folder name from the input Path
-- Ex: Input C:\Windows\System32 returns System32
---
local function get_folder_name(path)
local reversePath = string.reverse(path)
local slashIndex = string.find(reversePath, "\\")
return string.sub(path, string.len(path) - slashIndex + 2)
end
--- ---
-- Setting the prompt in clink means that commands which rewrite the prompt do -- Setting the prompt in clink means that commands which rewrite the prompt do
-- not destroy our own prompt. It also means that started cmds (or batch files -- not destroy our own prompt. It also means that started cmds (or batch files
@ -44,17 +54,43 @@ local function set_prompt_filter()
-- also check for square brackets -- also check for square brackets
if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end
-- build our own prompt -- Much of the below was 'borrowed' from https://github.com/AmrEldib/cmder-powerline-prompt
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m -- Symbol displayed for the home dir in the prompt.
-- color codes: "\x1b[1;37;40m" if not prompt_homeSymbol then
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m" prompt_homeSymbol = "~"
local lambda = "λ" end
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", verbatim(cwd))
-- Symbol displayed in the new line below the prompt.
if not prompt_lambSymbol then
prompt_lambSymbol = "λ"
end
if prompt_type == 'folder' then
cwd = get_folder_name(cwd)
end
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
cwd = string.gsub(cwd, clink.get_env("HOME"), prompt_homeSymbol)
end
uah = ''
if prompt_useUserAtHost then
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
end
cr = "\n"
if prompt_singleLine then
cr = ' '
end
if env ~= nil then if env ~= nil then
lambda = "("..env..") "..lambda prompt_lambSymbol = "("..env..") "..prompt_lambSymbol
end end
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", verbatim(lambda))
prompt = uah_color .. "{uah}" .. cwd_color .. "{cwd}{git}{hg}{svn}" .. lamb_color .. cr .. "{lamb} \x1b[0m"
uah_value = string.gsub(prompt, "{uah}", uah)
new_value = string.gsub(uah_value, "{cwd}", cwd)
clink.prompt.value = string.gsub(new_value, "{lamb}", prompt_lambSymbol)
end end
local function percent_prompt_filter() local function percent_prompt_filter()
@ -311,9 +347,9 @@ local function git_prompt_filter()
-- Colors for git status -- Colors for git status
local colors = { local colors = {
clean = "\x1b[1;37;40m", clean = clean_color,
dirty = "\x1b[33;3m", dirty = dirty_color,
conflict = "\x1b[31;1m" conflict = conflict_color
} }
local git_dir = get_git_dir() local git_dir = get_git_dir()
@ -335,7 +371,7 @@ local function git_prompt_filter()
if gitConflict then if gitConflict then
color = colors.conflict color = colors.conflict
end end
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..verbatim(branch)..")") clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..verbatim(branch)..")")
return false return false
@ -356,8 +392,8 @@ local function hg_prompt_filter()
if hg_dir then if hg_dir then
-- Colors for mercurial status -- Colors for mercurial status
local colors = { local colors = {
clean = "\x1b[1;37;40m", clean = clean_color,
dirty = "\x1b[31;1m", dirty = dirty_color,
} }
local pipe = io.popen("hg branch 2>&1") local pipe = io.popen("hg branch 2>&1")
@ -390,8 +426,8 @@ end
local function svn_prompt_filter() local function svn_prompt_filter()
-- Colors for svn status -- Colors for svn status
local colors = { local colors = {
clean = "\x1b[1;37;40m", clean = clean_color,
dirty = "\x1b[31;1m", dirty = dirty_color,
} }
if get_svn_dir() then if get_svn_dir() then

45
vendor/cmder_prompt_config.lua.default vendored Normal file
View File

@ -0,0 +1,45 @@
-- All of the below was 'borrowed' from https://github.com/AmrEldib/cmder-powerline-prompt
--- REQUIRED. config_prompt_type is whether the displayed prompt is the full path or only the folder name
-- Use:
-- "full" for full path like C:\Windows\System32
-- "folder" for folder name only like System32
-- default is full
prompt_type = "full"
--- REQUIRED. config_prompt_useHomeSymbol is whether to show ~ instead of the full path to the user's home folder
-- Use true or false
-- default is false
prompt_useHomeSymbol = false
-- Symbols
-- REQUIRED. Prompt displayed instead of user's home folder e.g. C:\Users\username
-- default is '~'
prompt_homeSymbol = "~"
-- REQUIRED. Symbol displayed in the new line below the prompt.
-- default is 'λ'
prompt_lambSymbol = "λ"
-- REQUIRED. Adds [user]@[host] to the beginning of the prompt like bash
-- default is false
prompt_useUserAtHost = false
-- REQUIRED. If true prompt is a single line instead of default two line prompt.
-- default is false
prompt_singleLine = false
-- Prompt Attributes
--
-- Colors
-- Green: "\x1b[1;33;40m"
-- Yellow: "\x1b[1;32;40m"
-- Light Grey: "\x1b[1;30;40m"
-- Prompt Element Colors
uah_color = "\x1b[1;33;40m" -- Green = uah = [user]@[hostname]
cwd_color = "\x1b[1;32;40m" -- Yellow cwd = Current Working Directory
lamb_color = "\x1b[1;30;40m" -- Light Grey = Lambda Color
clean_color = "\x1b[1;37;40m"
dirty_color = "\x1b[33;3m"
conflict_color = "\x1b[31;1m"

10
vendor/init.bat vendored
View File

@ -154,6 +154,11 @@ if "%CMDER_CLINK%" == "1" (
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup. echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.
) )
if not exist "%CMDER_USER_CONFIG%\cmder_prompt_config.lua" (
echo Creating Cmder prompt config file: "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
)
REM Cleanup lagacy Clink Settings file REM Cleanup lagacy Clink Settings file
if exist "%CMDER_USER_CONFIG%\settings" if exist "%CMDER_USER_CONFIG%\clink_settings" ( if exist "%CMDER_USER_CONFIG%\settings" if exist "%CMDER_USER_CONFIG%\clink_settings" (
del "%CMDER_USER_CONFIG%\settings" del "%CMDER_USER_CONFIG%\settings"
@ -171,6 +176,11 @@ if "%CMDER_CLINK%" == "1" (
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup. echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
) )
if not exist "%CMDER_ROOT%\config\cmder_prompt_config.lua" (
echo Creating Cmder prompt config file: "%CMDER_ROOT%\config\cmder_prompt_config.lua"
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_ROOT%\config\cmder_prompt_config.lua"
)
REM Cleanup lagacy Clink Settings file REM Cleanup lagacy Clink Settings file
if exist "%CMDER_ROOT%\config\settings" if exist "%CMDER_ROOT%\config\clink_settings" ( if exist "%CMDER_ROOT%\config\settings" if exist "%CMDER_ROOT%\config\clink_settings" (
del "%CMDER_ROOT%\config\settings" del "%CMDER_ROOT%\config\settings"

4
vendor/sources.json vendored
View File

@ -1,8 +1,8 @@
[ [
{ {
"name": "git-for-windows", "name": "git-for-windows",
"version": "v2.29.1.windows.1", "version": "v2.31.1.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.29.1.windows.1/PortableGit-2.29.1-64-bit.7z.exe" "url": "https://github.com/git-for-windows/git/releases/download/v2.31.1.windows.1/PortableGit-2.31.1-64-bit.7z.exe"
}, },
{ {
"name": "clink", "name": "clink",