SolvedConEmu Active tab is hard to see

Good morning Maxim,

I'd like again raise the question about the visibility of the active tab (not in the sense of active split area as Vitaly mentioned in the issue #164, but directly the tab area). Under WIndows 10 (and I guess Windows 8) the default difference between active and inactive tab is almost invisible, which makes it hard to work.
You can check what I mean with the following screenshots:

Thank you and regards,

36 Answers

✔️Accepted Answer

So here's a more concrete proposal: have tab templates support a new %* token for the Selected tab, which would translate to ⬤ in the tab name. See it here in action:


From a19bb4b8fb0185c6c6bf5cf50c5273d9a39b9ee7 Mon Sep 17 00:00:00 2001
From: Christian Boos <>
Date: Sat, 3 Dec 2016 23:49:53 +0100
Subject: [PATCH] gh-552: Add %* format in tab templates for selected indicator

 src/ConEmu/ConEmu.rc         | 2 +-
 src/ConEmu/TabBar.cpp        | 6 ++++++
 src/ConEmuCD/ConsoleMain.cpp | 2 +-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/ConEmu/ConEmu.rc b/src/ConEmu/ConEmu.rc
index 5f1f4a2..e9ec0f6 100644
--- a/src/ConEmu/ConEmu.rc
+++ b/src/ConEmu/ConEmu.rc
@@ -1007,7 +1007,7 @@ BEGIN
     RTEXT           "Charset:",stTabFontCharset,225,79,90,8
     EDITTEXT        tTabConsole,58,130,106,12,ES_AUTOHSCROLL
-    LTEXT           "%s - Title, %c - Console #, %n - Active process name, %p - PID,\n%a - ‘Admin’, %d - current shell directory, %f - folder, %% - %",stTabTemplateDescr,57,110,314,16
+    LTEXT           "%s - Title, %c - Console #, %n - Active process name, %p - PID, %* - Selected tab\n%a - ‘Admin’, %d - current shell directory, %f - folder, %% - %",stTabTemplateDescr,57,110,314,16
     RTEXT           "Maximum tab width (in chars):",stTabLenMax,8,168,123,8
     EDITTEXT        tTabLenMax,135,166,40,12,ES_AUTOHSCROLL
     EDITTEXT        tAdminSuffix,301,189,72,12,ES_AUTOHSCROLL
diff --git a/src/ConEmu/TabBar.cpp b/src/ConEmu/TabBar.cpp
index 5c912e1..60d0d61 100644
--- a/src/ConEmu/TabBar.cpp
+++ b/src/ConEmu/TabBar.cpp
@@ -1597,6 +1597,12 @@ int CTabBarClass::PrepareTab(CTab& pTab, CVirtualConsole *apVCon)
 					_wsprintf(szTmp, SKIPLEN(countof(szTmp)) _T("%i"), pTab->Info.nIndex);
 					pszText = szTmp;
+				case _T('*'): // %* - Selected tab indicator
+					if (gpConEmu->isVConValid(apVCon) == GetCurSel() + 1)
+					{
+						pszText = L"\x2b24";  /*"⬤"*/
+					}
+					break;
 				case _T('p'): case _T('P'): // %p - Active process PID
 					if (!apVCon || !apVCon->RCon())
diff --git a/src/ConEmuCD/ConsoleMain.cpp b/src/ConEmuCD/ConsoleMain.cpp
index 71d2180..0e8cb5c 100644
--- a/src/ConEmuCD/ConsoleMain.cpp
+++ b/src/ConEmuCD/ConsoleMain.cpp
@@ -6980,7 +6980,7 @@ bool IsKeyboardLayoutChanged(DWORD* pdwLayout)
 				wchar_t szErr[80];
 				_wsprintf(szErr, SKIPCOUNT(szErr) L"ConsKeybLayout failed with code=%u forcing to GetKeyboardLayoutName or 0409", nErr);
-				_ASSERTE(FALSE && "ConsKeybLayout failed");
+				// _ASSERTE(FALSE && "ConsKeybLayout failed");
 				if (!GetKeyboardLayoutName(szCurKeybLayout) || (szCurKeybLayout[0] == 0))

@Maximus5, if you like the proposal and would prefer a proper pull request instead of a patch, please tell me.

(the patch also contains an unrelated change in src/ConEmuCD/ConsoleMain.cpp which avoids a "trap" dialog on startup)

Other Answers:

I experimented with several iterations, and found that this snippet works great with the new selected tab indicator

%m ★ <m%M|M%c%m>m%M|M %s%m ★ m

I can always see which tab I'm on... No more guessing.


For a really visible big black square on active tab, go to:
Settings → Main → Tab Bar → Console, and then paste:

%m m %s

Works great 👌

Just a thought: what about altering the formatting of the tab number?

The tabs have currently the following text content:

| <1> cmd.exe | <2> cmd.exe Admin | <3> bash.exe | 

I think it would already be helpful to hint at the active tab at the level of the tab number:

| <1> cmd.exe | *2* cmd.exe Admin | <3> bash.exe | 

(or use some more fancy unicode bracket characters, like ❰2❱, if that's possible in that place)

Alternatively, only keep <n> for the active tab:

| 1: cmd.exe | <2>: cmd.exe Admin | 3: bash.exe | 

Other than maybe putting #552 (comment) @cboos solution into the default config (I'm personally using %m⬤ m), this works great.

Thanks for the great software @Maximus5 !

Related Issues:

ConEmu Arrow keys not working in Bash for Windows
@ErrantErinaceinae Are you kidding? Months??? The issue was created four days ago! This is absolutel...
ConEmu Windows Subsystem For Linux Bash Specify Startup Directory
@NitroBAY Ops I made a mistake The Windows file system is mounted to Windows Subsystem For Linux(WSL...
ConEmu WSL2 no longer working after windows update
Thank you This does indeed work You don't need to specify the user (the default one that corresponds...
ConEmu Active tab is hard to see
So here's a more concrete proposal: have tab templates support a new %* token for the Selected tab w...
ConEmu sometimes ssh crashes when using vi
I got the same problem in a ConEmu tab Doing the same SSH from a new bash window worked as expected ...
ConEmu Scroll wheel does not work in tmux in WSL
@Maximus5 It seems that the culprit here is the set -s escape-time 0 in .tmux.conf! escape-time time...
terminal Typing inside of the default WSL terminal feels amazing, why is it better than every other app?
I really do not mind when someone comes by and decides to tell us that we're doing a good job at som...
pm2 How do I call `pm2` to check if a process with given name is running?
For me the problem was that any of the above solutions I tried gave a non-zero exit code which would...
ripgrep Add support for replace in files
This is more easily accomplished using sed than I think people realize sed is quite a beast and is n...
terminal Guide for build and installation
This information should be included in the Building the Code section of the README file. ...
terminal error 0x80070002 when launching `powershell.exe'
Just add the path of the power shell to the environment variable Thank you It works! %systemroot%\Sy...
gitsome Command "python egg_info" failed with error code 1 in /tmp/pip-build-7SrToZ/gitsome/
I had the same problem on OSX and Solve my issue (I have both python versions installed). ...
bat Ubuntu install error when rg is installed also
As a workaround one can use sudo apt install -o Dpkg::Options::=--force-overwrite bat ripgrep (taken...
terminal Move the solution to VS2019 and v142 toolset
As mentioned in README (also related to #534) If you're running VS2019 ...
pm2 How do you run a TypeScript app with ts-node parameters?
I am using pm2 start ts-node -- -P tsconfig.server.json ./server/index.ts I normally run my app with...
pm2 Latest and pm2 causing issues when using -i max
I know this one is old and closed When I launch my app.js file via pm2 start app.js -i max I get the...
terminal MEGATHREAD: Breaking settings changes in version 0.11!
Out of curiosity BREAKING SETTINGS CHANGES IN 0.11 BREAKING CHANGE We've deleted a lot of legacy set...
terminal Windows Terminal keeps forgetting/can't find my default WSL Ubuntu profile
Happened to me (seemingly) after updating Docker for Windows Haven't had any issues with WSL2 for mo...
ripgrep hidden files to be searched by default
The following is @okdana's solution but with the .git folder remaining ignored: ...
pm2 Systemctl error: PID file not readable (yet)
I have this issue on Arch Linux with Node.js v9.6.1 and pm2 2.10.1 It is strange that it DOES create...
terminal Terminal hangs on exit with 'process exited with code 127' message
@carragom Oh that explains it - closeOnExit is a Profile setting Hi! I've noticed that on newer rele...
pm2 pm2 start npm -- start error
This is still happening on my Windows 10 machine Whatever globally installed program from npm I try ...
bat [fzf] Bat is awesome, but
It's so awesome but whyyyyy Whenever bat detects a non-interactive terminal it will fall back to pri...
pm2 Can't supply command line arguments to script
A standard unix way of doing such things would be something like that: pm2 start script.js -- -d 1 w...
pm2 pm2 for java - Shell script launching java process, stop doesn't stop the java process
Here you go Can we use pm2 for java? If yes can you provide a working example? ...
PowerShell Equivalent of bash set -e
$erroractionpreference = stop only works if Write-Error is called (such as an exception is raised) I...
terminal Alt arrow keys do nothing; key unbinding broken?
This behavior is due to #3585 Proper expected behavior is restored with the following: ...
ripgrep ripgrep no way to exclude directory e.g. Tests and search for all *.c files
@sumonto you're correct $ rg -w str1 -tc -g '!tests/*' would do what you want So is that not working...
pm2 Startup is not starting pm2 daemon and saved process
I had this issue too wanting to run pm2 as root i installed pm2 as global package on ubuntu (aws ins...
exa Static binary downloaded from release not working, lacking libhttp_parser
A sudo apt install libhttp-parser2.1 fixed it for me on ubuntu17 but I don't see why this tool would...
pm2 Spawning PM2 daemon with pm2_home=/home/tealou/.pm2
I got the same problem i had fixed it.. It's because of the version conflict Now i use node version ...
http server it does not work when i reload the browser after navigating to a route.
@thornjad Great it works with SPA: http-server --gzip --proxy http://localhost:8080? ...
ripgrep Option for outputting absolute paths
I don't see how that's a niche problem judging from others mentioning here they have the with the sa...
PowerShell pwsh as a dotnet global tool exhibits very unusual behavior with Ctrl-C
Unless Scoop is using the dotnet global tool wrapper shipped with PowerShell this is likely an issue...
winget cli winget should install an app if there is an exact match (eg 'git')
Fall into the pit of success Search = case insensitive non-exact match Install = case insensitive ex...
http server The header content contains invalid characters?
\http-server\node_modules\ecstatic\lib\ecstatic\etag.js I install the package and write a simple htm...
micro copy paste doesn't work well
Thanks @SrMordred this fixed this issue for me too! Hello I like where micro is going It's truly the...
pm2 Multiple instance of an app (in fork mode) bound to different ports + load balancing using nginx
I was able to launch multiple instances of the same script using json config: pm2.json: ...
winget cli Permission Denied when running from bash
FYI a easy workaround is to add e.g to your .bashrc and alias using winpty (included by default in m...
terminal Vim Cursor shape stays underscore. Not able to change it
@tuyenpm9 that's no $PS1 that's a %PROMPT% setting in CMD:
terminal It is hard to find Microsoft.VCLibs.140.00.UWPDesktop
@atom0s Thanks for the info The seemed a bit shady to me but I can confirm that...
terminal Azure Cloud Shell is readded to the profiles.json file after I remove it and restart terminal.
@Alacritous thanks for not including those invectives Steps to reproduce Open profiles.json through ...
terminal Large number of "'function' is not a member of 'std'" errors
If you're trying to build on VS19 add #include <functional> below #include <filesystem> in LibraryIn...
goaccess Support structured log formats such as JSON
Native JSON support has been added Feel free to build from development to test this out It will be p...
terminal when i open the windows terminal ,its show [error 0x80070002 when launching powershell.exe']
It seems that your PATH environment variable may be damaged and not contain the Windows PowerShell d...
terminal How Do I Build it to Begin With?
Steps: Follow #449 ( If using VS2019 open the p...
pm2 pm2 cluster mode fails to start because `Error: ENOENT, no such file or directory` for process.cwd()
pm2 update solves. same as #1244 This always happen when stop the old server replace the source code...
pm2 Too Many Unstable Restarts
Are you using nvm or n to install pm2? I think it's due to a bad node version from the modules Pleas...
winget cli 0x801901f4 : Internal server error (500) when I try to execute winget list and winget install (Source is down)
The newstore source is down which breaks the client entirely unless you add --source winget to all o...
PowerShell Install-Module errors on install of Azure and AzureRM modules - MacOsX
I followed @alexandair's advice and it worked A step by step though is that you'll need to do the fo...