@select inside alias gives different (insanely small) window

Jun 19, 2008
14
0
TCC 26.02.42 x64 Windows 10 [Version 10.0.19041.630]

I'm trying to see if I can upgrade my ancient 4NT to TCC. In 4NT, I had the following alias:
@alias gd `set gd_sel=%@select[%[DATRLB]\4nt\gd.txt, 1, 1, 20, 80, 'gd: Goto Directory'] &^ iff "%[gd_sel]" != "" then &^ iff isdir %@word[1,%[gd_sel]] then &^ cdd %@word[1,%[gd_sel]] &^ else &^ echo "That directory doesn't exist! (%[gd_sel])" &^ endiff &^ else &^ echo "OK, no selection. (%[gd_sel])" &^ endiff &^ `
(DATRLB is just a directory prefix). In TCC, this produces a tiny window with absurdly small text:

foo.png


However, if I cut and paste the first line in the alias into my console, it produces an @SELECT window of normal size. Likewise, if I make that cut and paste into an alias, it still seems to work fine, making it hard to create a more minimal example. I can't see any relevant changes in any of the command I'm using. I'm stuck. Any ideas where to look for the problem?

Making a selection in the tiny window also produces the text "The process ID is nnnn" (where nnnn is a presumably real process ID). So maybe I've gotten something really messed up when trying to just drop TCC in as a 4NT replacement.
 
Jun 19, 2008
14
0
Hmmm, well, docs say TCC switches behavior depending on whether width is >= 150; that seems to be true interactively at least.

@SELECT TCC internal variable function
If the specified width is < 150, the top, left, bottom, right parameters are assumed to be rows/columns relative to the TCC window. If the width is >= 150, the parameters are assumed to be screen coordinates (in pixels).
Do I misunderstand the help file?
 
Jun 19, 2008
14
0
Through tedious binary search, it appears that tcc, unlike 4nt, does not like the space after the final endiff. If I change this:
Code:
endiff &^
to this:
Code:
endiff&^
then the select window is normal, no message about a process ID, etc. Wonder what's really going on there?
Here's a simple alias that I guess spawns another process for reasons I can't grasp:
Code:
@alias bug1 `&^
iff "1" == "1" then &^
    echo one with everything &^
endiff &^
`
But if you remove the space after the endiff, it behaves normally.
 
Jun 19, 2008
14
0
Just typing endiff & followed by Enter produces a message like "The process ID is nnnn". Or, I guess you can substitute any command for the endiff and get the same result.
 

Charles Dye

Super Moderator
Staff member
May 20, 2008
4,689
106
Albuquerque, NM
prospero.unm.edu
Just typing endiff & followed by Enter produces a message like "The process ID is nnnn". Or, I guess you can substitute any command for the endiff and get the same result.
Documented but obscure feature; the trailing ampersand is an alternative (Linuxy) way of doing a DETACH.

I'm not sure it should work with ENDIFF, though. Seeing as how ENDIFF is not actually a command.
 
Jun 19, 2008
14
0
Documented but obscure feature; the trailing ampersand is an alternative (Linuxy) way of doing a DETACH.

I'm not sure it should work with ENDIFF, though. Seeing as how ENDIFF is not actually a command.
Thanks, one mystery solved. I assume you're referring to the one-line note in the help file entry for DETACH? The space required before the ampersand (for DETACH, but not for separating commands!) remains undocumented, unless its lurking somewhere else.

I can't tell if the documentation saying the pseudovariable %+ "is deprecated as of Take Command v17, and most support has been removed in v20" applies to TCC. If that can't be relied on, then I guess writing robust batch files requires being aware of the obscure rules for parsing of & and hoping nobody changes the command separator outside the batch file.
 
Jun 19, 2008
14
0
And the unusable tiny select window can be produced as simply as:
Code:
echo foo >foo.txt
%@select[foo.txt, 1, 1, 20, 80, 'bugg'] &
Removing the trailing space-ampersand produces the correct size selection window.

Possibly it should refuse to run rather than go bonkers in this situation.
 

Similar threads