mirror of
https://github.com/cmderdev/cmder.git
synced 2024-11-13 03:09:10 +08:00
Make "cmder here" work again
The new system works by setting "CMDER_START" if a cmder.exe gets a startup path. The rest is then implemented in the profile.ps1 and init.bat. The new system works as follows: 1.If a startup path is given, cmder.exe sets this as `CMDER_START` and the startup scripts change to that directory. 2.If the usere sets a `CMDER_START` environment variable and this is not overwritten by cmder.exe, this variable is taken as the startup directory by the startup scripts. 3.If not such path is give, the conemu startup dirs is the winner, as the startup scripts don't change anything.
This commit is contained in:
parent
c77641cf03
commit
2c0c6ed416
@ -63,10 +63,12 @@ optpair GetOption()
|
|||||||
|
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
|
// no commandline argument...
|
||||||
pair = optpair(L"/START", L"");
|
pair = optpair(L"/START", L"");
|
||||||
}
|
}
|
||||||
else if (argc == 2 && argv[1][0] != L'/')
|
else if (argc == 2 && argv[1][0] != L'/')
|
||||||
{
|
{
|
||||||
|
// only a single argument: this should be a path...
|
||||||
pair = optpair(L"/START", argv[1]);
|
pair = optpair(L"/START", argv[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -152,7 +154,10 @@ void StartCmder(std::wstring path, bool is_single_mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||||
//SetEnvironmentVariable(L"CMDER_START", path.c_str());
|
if (!streqi(path.c_str(), L""))
|
||||||
|
{
|
||||||
|
SetEnvironmentVariable(L"CMDER_START", path.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
// Send out the Settings Changed message - Once using ANSII...
|
// Send out the Settings Changed message - Once using ANSII...
|
||||||
//SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, NULL);
|
//SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, NULL);
|
||||||
@ -160,13 +165,6 @@ void StartCmder(std::wstring path, bool is_single_mode)
|
|||||||
// ...and once using UniCode (because Windows 8 likes it that way).
|
// ...and once using UniCode (because Windows 8 likes it that way).
|
||||||
//SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) L"Environment", SMTO_ABORTIFHUNG, 5000, NULL);
|
//SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) L"Environment", SMTO_ABORTIFHUNG, 5000, NULL);
|
||||||
|
|
||||||
HKEY cmderStartRegistryKey;
|
|
||||||
if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\cmder", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &cmderStartRegistryKey, 0) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
RegSetValueEx(cmderStartRegistryKey, L"CMDER_START", 0, REG_SZ, (const BYTE*) path.c_str(), path.size() * 2);
|
|
||||||
RegCloseKey(cmderStartRegistryKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
STARTUPINFO si = { 0 };
|
STARTUPINFO si = { 0 };
|
||||||
si.cb = sizeof(STARTUPINFO);
|
si.cb = sizeof(STARTUPINFO);
|
||||||
#if USE_TASKBAR_API
|
#if USE_TASKBAR_API
|
||||||
|
8
vendor/init.bat
vendored
8
vendor/init.bat
vendored
@ -58,7 +58,7 @@
|
|||||||
@if not exist "%CMDER_ROOT%\config\aliases" (
|
@if not exist "%CMDER_ROOT%\config\aliases" (
|
||||||
echo Creating intial aliases in %CMDER_ROOT%\config\aliases
|
echo Creating intial aliases in %CMDER_ROOT%\config\aliases
|
||||||
copy "%CMDER_ROOT%\vendor\aliases.example" "%CMDER_ROOT%\config\aliases" > null
|
copy "%CMDER_ROOT%\vendor\aliases.example" "%CMDER_ROOT%\config\aliases" > null
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Add aliases
|
:: Add aliases
|
||||||
@doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
@doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
||||||
@ -76,12 +76,10 @@
|
|||||||
:: Set home path
|
:: Set home path
|
||||||
@if not defined HOME set HOME=%USERPROFILE%
|
@if not defined HOME set HOME=%USERPROFILE%
|
||||||
|
|
||||||
|
:: This is either a env variable set by the user or the result of
|
||||||
|
:: cmder.exe setting this variable due to a commandline argument or a "cmder here"
|
||||||
@if defined CMDER_START (
|
@if defined CMDER_START (
|
||||||
@cd /d "%CMDER_START%"
|
@cd /d "%CMDER_START%"
|
||||||
) else (
|
|
||||||
@if "%CD%\" == "%CMDER_ROOT%\" (
|
|
||||||
@cd /d "%HOME%"
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@if exist "%CMDER_ROOT%\config\user-profile.cmd" (
|
@if exist "%CMDER_ROOT%\config\user-profile.cmd" (
|
||||||
|
29
vendor/profile.ps1
vendored
29
vendor/profile.ps1
vendored
@ -32,7 +32,7 @@ try {
|
|||||||
# $env:Path += $(";" + $env:CMDER_ROOT + "\vendor\git-for-windows\usr\bin")
|
# $env:Path += $(";" + $env:CMDER_ROOT + "\vendor\git-for-windows\usr\bin")
|
||||||
# set-alias -name "vi" -value "vim"
|
# set-alias -name "vi" -value "vim"
|
||||||
# # I think the below is safer.
|
# # I think the below is safer.
|
||||||
|
|
||||||
new-alias -name "vim" -value $($ENV:CMDER_ROOT + "\vendor\git-for-windows\usr\bin\vim.exe")
|
new-alias -name "vim" -value $($ENV:CMDER_ROOT + "\vendor\git-for-windows\usr\bin\vim.exe")
|
||||||
new-alias -name "vi" -value vim
|
new-alias -name "vi" -value vim
|
||||||
}
|
}
|
||||||
@ -82,34 +82,15 @@ if ($gitStatus) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Move to the wanted location
|
# Move to the wanted location
|
||||||
$cmderStartKey = 'HKCU:\Software\cmder'
|
# This is either a env variable set by the user or the result of
|
||||||
$cmderStartSubKey = 'CMDER_START'
|
# cmder.exe setting this variable due to a commandline argument or a "cmder here"
|
||||||
|
if ( $ENV:CMDER_START ) {
|
||||||
$cmderStart = (Get-Item -Path $cmderStartKey -ErrorAction SilentlyContinue)
|
Set-Location -Path "$ENV:CMDER_START"
|
||||||
|
|
||||||
if ( $cmderStart ) {
|
|
||||||
$cmderStart = $cmderStart.GetValue($cmderStartSubKey)
|
|
||||||
$cmderStart = ($cmderStart).Trim('"').Trim("'")
|
|
||||||
if ( $cmderStart.EndsWith(':') ) {
|
|
||||||
$cmderStart += '\'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ( Get-Item $cmderStart -Force ) -is [System.IO.FileInfo] ) {
|
|
||||||
$cmderStart = Split-Path $cmderStart
|
|
||||||
}
|
|
||||||
|
|
||||||
Set-Location -Path "${cmderStart}"
|
|
||||||
|
|
||||||
Set-ItemProperty -Path $cmderStartKey -Name $cmderStartSubKey -Value $null
|
|
||||||
} else {
|
|
||||||
Set-Location -Path "${env:HOME}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Enhance Path
|
# Enhance Path
|
||||||
$env:Path = "$Env:CMDER_ROOT\bin;$env:Path;$Env:CMDER_ROOT"
|
$env:Path = "$Env:CMDER_ROOT\bin;$env:Path;$Env:CMDER_ROOT"
|
||||||
|
|
||||||
|
|
||||||
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
|
||||||
if(Test-Path $CmderUserProfilePath) {
|
if(Test-Path $CmderUserProfilePath) {
|
||||||
# Create this file and place your own command in there.
|
# Create this file and place your own command in there.
|
||||||
|
Loading…
Reference in New Issue
Block a user