mirror of
				https://github.com/cmderdev/cmder.git
				synced 2025-10-31 17:32:27 +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:
		| @@ -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); |  | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user