Open daxgames opened 1 month ago
So this is now broken on my Windows 11.
cmder.exe /task cmd
- Works great!
cmder.exe /task powershell
- Works great!
cmder.exe /task bash
- Works NOT!
cmder.exe /task mintty
- Works NOT!
No idea why.
Double clicking on the below works:
And these are what cmder.exe uses to launch bash
and mintty
.
Need to run them differently I guess but I don't know how. I believe it works on Windows 10 not certain though.
@daxgames It appears you're essentially opening mintty.exe
which I believe is a terminal emulator in of itself (like ConEmu.exe
and conhost.exe
(the "Windows console") already are) which doesn't make sense.
We open the shell (e.g. cmd.exe
or bash.exe
) in those terminals, e.g. mintty + bash. So the solution would be NOT to do this in your code:
"%ProgramFiles%\git\usr\bin\mintty.exe" /bin/bash -l
And do this instead:
"%ProgramFiles%\git\usr\bin\bash.exe" -l
I don't believe it would make a difference on Win10/Win11 though.
I'm a bit tight on time so I can't exactly verify, but at my workplace whenever I need to use bash, I always call bash.exe
from the PATH, and if I call mintty.exe
instead, I'll always get the mintty terminal emulator instead.
Sidenote, if you'd like some Windows 10 VMs, let me know so I can set one up for the you so you can clone the development version of Cmder in it for testing, if it helps. I can spin one up at work for this purpose.
@DRSDavidSoft the last time I tested this on Windows 10 it all worked perfectly. I would not have opened the PR if it hadn't. I'm not sure I ever tested it in Windows 11 prior to yesterday.
One thing I noticed on Windows 11 testing that I hadn't seen on Windows 10 is that cmd and powershell are opening up in Windows Terminal instead of cmd.exe and powershell.exe 'legacy' windows.
Here it is working on Windows 10, built by the vagrant+packer branch of Cmder, today same code:
I think the difference is Windows 11 prefers Windows Terminal and Windows 10 prefers conhost.exe????
@daxgames It appears you're essentially opening
mintty.exe
which I believe is a terminal emulator in of itself (likeConEmu.exe
andconhost.exe
(the "Windows console") already are) which doesn't make sense.
You are missing the original point of Cmder for Windows, aka Cmder Micro, was to launch the terminal emulators that are already there since none are included with Cmder. It just does not work on Windows 11 as it does on Windows 10.
@daxgames I believe the idealistic approach is for Cmder's launcher to hand over the task of choosing the terminal emulator (be it WT, conhost
, ConEmu, mintty
) to the OS, which currently is not case. It feels to me that we should either specifically run a shell or run a shell + terminal from the launcher, not do one case for cmd/powershell and the other for bash.
So, preferably, we should off hand the terminal part to OS and just launch the shell. The code needs to be modified for this so that Cmder.exe
will launch a shell in the current terminal, or spawn a new terminal if it's launched from the GUI.
Alternatively, we should launch a terminal and run the shell in it. This can be mintty
, conhost
, WT, ConEmu.
In my humble opinion it doesn't make sense to bind bash to mintty. Sure, git-for-windows and mingw install both, but it doesn't mean that bash is exlusive to mintty. Bash can be ran in WT & conhost, and mintty can host clink, powershell, etc.
This is just my opinion, I'll be glad to hear what you think.
I like the fact there is an embedded terminal emulator and there always should be. Cmder is after all a portable shell env. I also like that there are currently choices of embedded terminal emulators. I don't believe it should just be up to whatever is installed and available on the OS unless that is what the user wants.
I think your previous reply is what I said in my previous post but to be clear this PR attemps to:
In the absence of a Cmder
embedded terminal emulator, launch the selected shell in whatever emulator is currently available whilt maintaining the ability to launch the same session types as prior releases of Cmder[cmd, powershell, bash, mintty(bash)].
So, preferably, we should off hand the terminal part to OS and just launch the shell. The code needs to be modified for this so that
Cmder.exe
will launch a shell in the current terminal, or spawn a new terminal if it's launched from the GUI.Alternatively, we should launch a terminal and run the shell in it. This can be
mintty
,conhost
, WT, ConEmu.
Basically above is what happens in Windows 10.
The code in this PR does the following if there is no Cmder
embedded terminal emulator:
cmder /task powershell
runs PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%CMDER_ROOT%\vendor\profile.ps1'''"
cmder /task cmd
runs cmd.exe -k "%cmder_root%\vendor\init.bat"
cmder /task bash
runs cmd.exe -c "%CMDER_ROOT%\vendor\start_git_bash.cmd"
-k
on Windows 10 left an orphaned cmd.exe
window.start_git_bash.cmd
script is doing.cmder /task mintty
runs cmd.exe -c "%CMDER_ROOT%\vendor\start_git_mintty.cmd"
-k
on Windows 10 left an orphaned cmd.exe
window.%CMDER_ROOT%\vendor\start_git_bash.cmd
, finds mintty
in well known locations and runs it.Cmder
releases.start_git_mintty.cmd
script is doing or as you hav suggested get rid of mintty
completely. More on this below.In my humble opinion it doesn't make sense to bind bash to mintty. Sure, git-for-windows and mingw install both, but it doesn't mean that bash is exlusive to mintty. Bash can be ran in WT & conhost, and mintty can host clink, powershell, etc.
I REALLY don't care about mintty
, I don't use it, and no one said we should bind bash
to it. I was just trying to allow what Cmder
does today minus the embedded terminal emulator and today Cmder
can launch bash
using mintty
or simply
a bash
session. I did not want someone opening a bug report with the subject of 'Where's my mintty
session in Cmder Micro
?'
Anything you mentioned above and not currently in this PR is way beyond my knowledge of C++. It is simply not worth the time it would take me to figure out something I will never use. What I initially did works great on Windows 10 and I do not have the time required to figure out how to get a similar outcome on Windows 11+.
Great poins, as always, @daxgames.
I need to investigate the difference between Windows 10 and Windows 11 regarding this, as the main support for 10 is basically ending in about a year or so according to Microsoft and it will enter extended support. Hopefully I'll understand the issue and solve it so it will work the same way it did on 10.
Regarding handing some of the batch tasks to the launcher, I agree with your points. Also, I have been wanting to do a re-write of the launcher with the intent of modularizing its code into re-usable sections for a while now. I would like to put my focus into the development branch and move some of the batch tasks into the launcher, if that helps. We can decide which functionality is best suited as a script and which one is best to be written in C++.
Thanks as always for implementing this! 👍🏻
Adds
Cmder.exe /task cmder [/a]
.Cmder.exe /task bash [/a]
.Cmder.exe /task mintty [/a]
.Cmder.exe /task powershell [/a]
.Cmder.exe
command line argument/a
used to start native terminal sessions asAdministrator