Alias with space in the name

#1
I hope I'm using proper syntax this time :)

I'm trying to define command alias with space inside.

for example:
content of file the xyz
z1 x1=nothing1
"z2 x2"=nothing2
'z3 x3'=nothing3
`z4 x4`=nothing4​
alias /R xyz & alias
z1=x1=nothing1
"z2=x2"=nothing2
'z3=x3'=nothing3
`z4=x4`=nothing4
None of them is defined:
[Z:\P Apps\PortableApps]"z1 x1" & "z2 x2" & "z3 x3" & "z4 x4
TCC: Unknown command "z1 x1"
TCC: Unknown command "z2 x2"
TCC: Unknown command "z3 x3"
TCC: Unknown command "z4 x4"

Of course, if there would exist file "z1 x1.exe" it could be executed using "z1 x1" command.

Is it possible to create alias with space in name?

====
TCC/LE
 
Last edited:

Charles Dye

Super Moderator
Staff member
May 20, 2008
3,506
46
Albuquerque, NM
prospero.unm.edu
#2
An alias is a command.* An unquoted space ends a command; an unquoted space therefore ends an alias name. If you type
Code:
alias foo bar=baz
... you are creating an alias named FOO, with the value BAR=BAZ. That much makes sense to me. It's even sort of documented, in the BNF in the help page for the ALIAS command.

Why you can't use quotes to create an alias named "FOO BAR" I don't understand. Probably there has never been any demand for such a feature. After all, you'd have to type the quotes to use the alias, which kind of defeats the point of using an alias in the first place.

* Well, unless it's a keystroke alias. Or a directory alias. One of those other things you create with the ALIAS command.
 
#4
You cannot create aliases with embedded whitespace. (And I don't understand why you would want to -- can you elaborate on that?)
If cannot create, another ways exist...

There are two reasons.
In general: I'm using some auto-configuration scripts. My idea is, that they had to be "space aware" as close as possible. As you can see, my latest issues are based on something like "P<space>Apps" directories. Personally I don't like spaces - spaces are difficult to be handled, filenames have to be quoted, filename autocompletion is ugly, *IX tools like MSYS are not space aware, and ... there are many more cons.

Anyway. My script examines specific directories for executables: %BASE_DIR\*\*.exe and assigns aliases to all of them.

1.
Code:
alias %@name[%file]=%@Quote[%TrueName[%file]]
In most cases there is exactly one executable per directory, in my opinion polluting %path in that case is a waste of resources (and it is not good practice).
If I can't embed space into alias - doesn't matter, I'll skip such executables, I'll show warning, or sth.

2.
I have the same executables in several dirs. In particular: I'm using one copy of eclipse per one project. All of them are very different, currently I'm using: 2x C++ CDT, 1* Perl Epic, 1x Java SE. IMO it is the easiest way to avoid influences between very different configurations. It is is easier than maintaining one eclipse and several workspaces. So all aliases from previous example are wrong. The first, the simplest approach was do define aliases like:
Code:
alias "eclipse <parentDir>"=%@Quote[%TrueName[%file]]
If I can't embed space into alias - doesn't matter, I'll create alias for "eclipse" (in that case). Something like (there are missed quotes and "If isFile eclipes.exe" checks, it is only the draft)
Code:
alias eclipse=%BASE_DIR\%1\eclipse.exe
There are some problem in the implementation stage, but it will provide more usable environment - eclipse perl (without quotes) is better then "eclipse perl" (with quotes) :)

-------------------

BTW: I'll share my work (800+ LOC 4Start.btm), but there are some legal issues (I'm working for large SW company, and (in theory) all my ideas belong to my employer; but my employer is not interested in that :)