mirror of
https://github.com/cmderdev/cmder.git
synced 2025-04-17 23:22:31 +08:00
Merge pull request #358 from vladimir-kotikov/alias-rework
Rework `alias` command to not to use external tools
This commit is contained in:
commit
6c69536295
@ -1,6 +1,12 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
set ALIASES=%CMDER_ROOT%\config\aliases
|
||||||
|
|
||||||
|
if ["%*"] == [""] echo Use /? for help & echo. & goto :p_show
|
||||||
if ["%1"] == ["/?"] goto:p_help
|
if ["%1"] == ["/?"] goto:p_help
|
||||||
if ["%1"] == ["/reload"] goto:p_reload
|
if ["%1"] == ["/reload"] goto:p_reload
|
||||||
|
:: /d flag for delete existing alias
|
||||||
|
if ["%1"] == ["/d"] goto:p_del %*
|
||||||
if ["%2"] == [""] echo Insufficient parameters. & goto:p_help
|
if ["%2"] == [""] echo Insufficient parameters. & goto:p_help
|
||||||
::validate alias
|
::validate alias
|
||||||
setlocal
|
setlocal
|
||||||
@ -14,21 +20,36 @@ if not ["%_temp%"] == ["%_temp2%"] (
|
|||||||
goto:eof
|
goto:eof
|
||||||
)
|
)
|
||||||
|
|
||||||
echo %* >> "%CMDER_ROOT%\config\aliases"
|
:: replace already defined alias
|
||||||
doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
findstr /b /v /i "%_temp%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||||
perl "%CMDER_ROOT%\scripts\clean_aliases.pl"
|
echo %* >> "%ALIASES%.tmp" && type "%ALIASES%.tmp" > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||||
echo Alias created
|
doskey /macrofile="%ALIASES%"
|
||||||
endlocal
|
endlocal
|
||||||
goto:eof
|
goto:eof
|
||||||
|
|
||||||
|
:p_del
|
||||||
|
findstr /b /v /i "%2=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||||
|
type "%ALIASES%".tmp > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||||
|
doskey /macrofile=%ALIASES%
|
||||||
|
goto:eof
|
||||||
|
|
||||||
:p_reload
|
:p_reload
|
||||||
doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
doskey /macrofile="%ALIASES%"
|
||||||
echo Aliases reloaded
|
echo Aliases reloaded
|
||||||
goto:eof
|
goto:eof
|
||||||
|
|
||||||
|
:p_show
|
||||||
|
type "%ALIASES%" || echo No aliases found at "%ALIASES%"
|
||||||
|
goto :eof
|
||||||
|
|
||||||
:p_help
|
:p_help
|
||||||
echo.Usage:
|
echo.Usage:
|
||||||
echo. alias name=full command
|
echo. alias [/reload] [/d] [name=full command]
|
||||||
|
echo. /reload Reload the aliases file
|
||||||
|
echo. /d Delete an alias (must be followed by the alias name)
|
||||||
|
echo.
|
||||||
|
echo. If alias is called with any parameters, it will display the list of existing aliases.
|
||||||
|
echo. In the command, you can use the following notations:
|
||||||
echo. $* allows the alias to assume all the parameters of the supplied command.
|
echo. $* allows the alias to assume all the parameters of the supplied command.
|
||||||
echo. $1-$9 Allows you to seperate parameter by number, much like %%1 in batch.
|
echo. $1-$9 Allows you to seperate parameter by number, much like %%1 in batch.
|
||||||
echo. $T is the command seperator, allowing you to string several commands together into one alias.
|
echo. $T is the command seperator, allowing you to string several commands together into one alias.
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
@echo off
|
|
||||||
if ["%1"] == ["/?"] goto:p_help
|
|
||||||
if ["%1"] == [""] echo Insufficient parameters. & goto:p_help
|
|
||||||
|
|
||||||
setlocal
|
|
||||||
|
|
||||||
:: Check if alias exists
|
|
||||||
doskey /macros | findstr /b %1= >NUL || goto :p_not_found
|
|
||||||
|
|
||||||
:: Remove alias from current shell
|
|
||||||
doskey %1=
|
|
||||||
|
|
||||||
:: Remove alias from aliases file
|
|
||||||
copy /y "%CMDER_ROOT%\config\aliases" "%TEMP%\aliases.prev" >NUL
|
|
||||||
type "%TEMP%\aliases.prev" | findstr /b /v %1= > "%CMDER_ROOT%\config\aliases"
|
|
||||||
echo Alias removed
|
|
||||||
|
|
||||||
endlocal
|
|
||||||
goto:eof
|
|
||||||
|
|
||||||
:p_not_found
|
|
||||||
echo Alias not defined.
|
|
||||||
goto:eof
|
|
||||||
|
|
||||||
:p_help
|
|
||||||
echo.Usage:
|
|
||||||
echo. unalias name
|
|
||||||
echo. For more information, read DOSKEY/?
|
|
@ -4,3 +4,4 @@ ls=ls --color $*
|
|||||||
pwd=cd
|
pwd=cd
|
||||||
clear=cls
|
clear=cls
|
||||||
history=cat %CMDER_ROOT%\config\.history
|
history=cat %CMDER_ROOT%\config\.history
|
||||||
|
unalias=alias /d $1
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
# Cmder adds aliases to its aliases file without caring for duplicates.
|
|
||||||
# This can result in the aliases file becoming bloated. This script cleans
|
|
||||||
#the aliases file.
|
|
||||||
use Env;
|
|
||||||
|
|
||||||
my %aliases;
|
|
||||||
my $alias_file = $CMDER_ROOT . "/config/aliases";
|
|
||||||
|
|
||||||
# First step
|
|
||||||
# Read the aliases file line by line, and put every entry in
|
|
||||||
# a dictionary. The newer aliases being the last, the new will
|
|
||||||
# always be kept over the old.
|
|
||||||
open (my $file_handle, '<', $alias_file) or die "cannot open '$alias_file' $!";
|
|
||||||
while(my $line = <$file_handle>)
|
|
||||||
{
|
|
||||||
if ($line =~ /([^=\s<>]+)=(.*)/)
|
|
||||||
{
|
|
||||||
$aliases{ $1 } = $2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "Invalid alias: $line"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close($file_handle);
|
|
||||||
|
|
||||||
|
|
||||||
# Second step
|
|
||||||
# Write back the aliases. Sort them to make the file look nice.
|
|
||||||
open(my $file_handle, '>', $alias_file) or die "cannot open '$alias_file' $!";
|
|
||||||
foreach my $key (sort keys %aliases)
|
|
||||||
{
|
|
||||||
print $file_handle "$key=$aliases{ $key }\n";
|
|
||||||
}
|
|
||||||
close($file_handle);
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user