Summary: | wish: colour in tabbar text | ||
---|---|---|---|
Product: | [Applications] konsole | Reporter: | Richard Neill <kde> |
Component: | general | Assignee: | Konsole Developer <konsole-devel> |
Status: | RESOLVED FIXED | ||
Severity: | wishlist | CC: | kde |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Mandrake RPMs | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Richard Neill
2004-05-01 07:23:44 UTC
Why are you using PROMPT_COMMAND and not PS1? Anyway, you can put colors in PS1. Check out the bash help or google. This is not really konsole related. Here's a snippet of my .bashrc: COLOR1="\[\033[0;36m\]" COLOR2="\[\033[0;32m\]" COLOR3="\[\033[0;31m\]" COLOR4="\[\033[0;37m\]" COLOR5="\[\033[1;32m\]" COLOR6="\[\033[1;34m\]" PS1="$COLOR2($COLOR6\u$COLOR5@$COLOR6\h$COLOR2)-($COLOR1\$(date +%H%M)$COLOR2)-($COLOR1\w$COLOR2)$COLOR1>$COLOR4 " if [ "$TERM" != 'linux' ]; then PS1=$PS1"\[\e]30;\w\a\]" fi export PS1 I'm sorry, that wasn't what I meant, and what I wrote wasn't very clear. I do realise that you can colorise the bash prompt itself (and I've done this). However, what I am trying to colorise is the names in the toolbar of konsole. For example, if I have 10 different sessions open, all listed in the toolbar at the bottom of the konsole window, I'd like those where I am root to be highlighted in red, so that they can easily be located. [Perhaps, remote sessions would be in blue and database connections in green]. Also, I'm using PROMPT_COMMAND because that was originally the way it was documented; although I see that PS1 might make more sense. Thanks for your help - and Happy New Year. You can change the icon for each session. Currently, su is red icon and mc is blue icon. You can;t change the color of the tab text which is what you really want. I would suggest change the tab text to something descriptive for what that shell is doing. Perhaps * for root and + for ssh, etc.... this can be done via DCOP calls... dcop konsole-8507 session-1 renameSession whatever or by using some combo of... ..that you can let Konsole set the current directory as the window title? For Bash, put 'export PS1=$PS1"\[\e]0;\H:\w\a\]"' in your ~/.bashrc . ...that you can let Konsole set the current directory as the session name? For Bash, put 'export PS1=$PS1"\[\e]30;\H:\w\a\]"' in your ~/.bashrc . Anyway, adding color to the tab text is unlikely anytime soon... This was easier than I thought. You still can't select the color via an escape code. You have to right-click on the tab and select 'Select Tab Color...' I really don't want to have an escape code for this; perhaps a DCOP call... CVS commit by hindenburg: Allow user to select tab text color. FEATURE: 80725 GUI M +13 -1 konsole.cpp 1.521 M +3 -0 konsole.h 1.201 M +3 -0 main.cpp 1.289 --- kdebase/konsole/konsole/konsole.cpp #1.520:1.521 @@ -256,4 +256,5 @@ Konsole::Konsole(const char* name, int h ,sl_sessionShortCuts(0) ,s_workDir(workdir) +,m_tabColor(QColor()) { isRestored = b_inRestore; @@ -1397,4 +1398,6 @@ void Konsole::saveProperties(KConfig* co key = QString("MasterMode%1").arg(counter); config->writeEntry(key, sessions.current()->isMasterMode()); + key = QString("TabColor%1").arg(counter); + config->writeEntry(key, tabwidget->tabColor((sessions.current())->widget())); QString cwd=sessions.current()->getCwd(); @@ -1426,4 +1429,5 @@ void Konsole::saveProperties(KConfig* co config->writeEntry("DynamicTabHide", b_dynamicTabHide); config->writeEntry("AutoResizeTabs", b_autoResizeTabs); + config->writeEntry("TabColor", tabwidget->tabColor(se->widget())); if (se) { @@ -1547,4 +1551,6 @@ void Konsole::readProperties(KConfig* co b_dynamicTabHide = config->readBoolEntry("DynamicTabHide", false); b_autoResizeTabs = config->readBoolEntry("AutoResizeTabs", false); + m_tabColor = config->readColorEntry("TabColor"); + if ( !m_tabColor.isValid() ) m_tabColor = QColor( Qt::black ); } @@ -1778,5 +1784,5 @@ void Konsole::createSessionTab(TEWidget break; } - tabwidget->setTabColor(widget, QColor(0, 0, 0)); + tabwidget->setTabColor(widget, m_tabColor); } @@ -2906,4 +2912,10 @@ void Konsole::initMasterMode(bool state) } +void Konsole::initTabColor(QColor color) +{ + if ( !color.isValid() ) color = QColor( Qt::black ); + tabwidget->setTabColor( se->widget(), color ); +} + void Konsole::slotToggleMasterMode() { --- kdebase/konsole/konsole/konsole.h #1.200:1.201 @@ -82,4 +82,5 @@ public: void initMonitorSilence(bool on); void initMasterMode(bool on); + void initTabColor(QColor color); void newSession(const QString &program, const QStrList &args, const QString &term, const QString &icon, const QString &title, const QString &cwd); void setSchema(const QString & path); @@ -420,4 +421,6 @@ private: QStringList sl_sessionShortCuts; QString s_workDir; + + QColor m_tabColor; }; --- kdebase/konsole/konsole/main.cpp #1.288:1.289 @@ -509,4 +509,5 @@ extern "C" int KDE_EXPORT kdemain(int ar m->initMonitorSilence(sessionconfig->readBoolEntry("MonitorSilence0",false)); m->initMasterMode(sessionconfig->readBoolEntry("MasterMode0",false)); + m->initTabColor(sessionconfig->readColorEntry("TabColor")); counter++; @@ -545,4 +546,6 @@ extern "C" int KDE_EXPORT kdemain(int ar key = QString("MasterMode%1").arg(counter); m->initMasterMode(sessionconfig->readBoolEntry(key,false)); + key = QString("TabColor%1").arg(counter); + m->initTabColor(sessionconfig->readColorEntry(key)); counter++; } Thank you very much - I shall look forward to using this. One thought: the advantage of escape codes vs DCOP is that a)they are compatible with the way that the rest of the prompts work b)they work over a remote connection. Eg: If I connect to a remote machine (called mocha) via ssh, I can have the remote .bashrc set the tab text: mocha:~/ If I then become root on that machine, the tab text can be updated to *mocha:~/ with a red * to denote root. As I understand it, I don't think this can be done by DCOP. Lastly, thanks very much again or your hard work - much appreciated! Richard SVN commit 414407 by hindenburg: Add ESC code to change tab text color. Since t has to do with window manipulation (according to xterm control seq), I decided to use it with 28. This doesn't do anything according to the specs as far as I can tell. change tab text color : \e[28;<color>t color: 0-16,777,215 CCBUG: 80725 M +3 -0 trunk/KDE/kdebase/konsole/konsole/TEmuVt102.cpp M +1 -0 trunk/KDE/kdebase/konsole/konsole/TEmulation.h M +17 -0 trunk/KDE/kdebase/konsole/konsole/konsole.cpp M +1 -0 trunk/KDE/kdebase/konsole/konsole/konsole.h --- trunk/KDE/kdebase/konsole/konsole/TEmuVt102.cpp #414406:414407 @@ -511,6 +511,9 @@ // resize = \e[8;<row>;<col>t case TY_CSI_PS('t', 8) : changeColLin( q /* col */, p /* lin */ ); break; +// change tab text color : \e[28;<color>t color: 0-16,777,215 + case TY_CSI_PS('t', 28) : emit changeTabTextColor ( p ); break; + case TY_CSI_PS('K', 0) : scr->clearToEndOfLine ( ); break; case TY_CSI_PS('K', 1) : scr->clearToBeginOfLine ( ); break; case TY_CSI_PS('K', 2) : scr->clearEntireLine ( ); break; --- trunk/KDE/kdebase/konsole/konsole/TEmulation.h #414406:414407 @@ -72,6 +72,7 @@ void changeTitle(int arg, const char* str); void notifySessionState(int state); void zmodemDetected(); + void changeTabTextColor(int color); public: --- trunk/KDE/kdebase/konsole/konsole/konsole.cpp #414406:414407 @@ -1984,6 +1984,18 @@ } // Called from emulation +void Konsole::changeTabTextColor( int rgb ) +{ + QColor color; + color.setRgb( rgb ); + if ( !color.isValid() ) { + kdWarning()<<" Invalid RGB color "<<rgb<<endl; + return; + } + tabwidget->setTabColor( se->widget(), color ); +} + +// Called from emulation void Konsole::changeColLin(int columns, int lines) { if (b_allowResize && !b_fixedSize) { @@ -2685,6 +2697,8 @@ this, SLOT(slotGetSessionSchema(TESession*, QString &))); connect( s, SIGNAL(setSessionSchema(TESession*, const QString &)), this, SLOT(slotSetSessionSchema(TESession*, const QString &))); + connect( s->getEmulation(),SIGNAL(changeTabTextColor(int)), + this,SLOT(changeTabTextColor(int)) ); s->widget()->setVTFont(defaultFont);// Hack to set font again after newSession s->setSchemaNo(schmno); @@ -3387,6 +3401,7 @@ disconnect( _se->getEmulation(),SIGNAL(ImageSizeChanged(int,int)), this,SLOT(notifySize(int,int))); disconnect( _se->getEmulation(),SIGNAL(changeColLin(int, int)), this,SLOT(changeColLin(int,int)) ); disconnect( _se->getEmulation(),SIGNAL(changeColumns(int)), this,SLOT(changeColumns(int)) ); + disconnect( _se->getEmulation(),SIGNAL(changeTabTextColor(int)), this,SLOT(changeTabTextColor(int)) ); disconnect( _se,SIGNAL(updateTitle()), this,SLOT(updateTitle()) ); disconnect( _se,SIGNAL(notifySessionState(TESession*,int)), this,SLOT(notifySessionState(TESession*,int)) ); @@ -3486,6 +3501,8 @@ connect( session->getEmulation(),SIGNAL(changeColumns(int)), this,SLOT(changeColumns(int)) ); connect( session->getEmulation(),SIGNAL(changeColLin(int, int)), this,SLOT(changeColLin(int,int)) ); + connect( session->getEmulation(),SIGNAL(changeTabTextColor(int)), this,SLOT(changeTabTextColor(int)) ); + activateSession(session); } --- trunk/KDE/kdebase/konsole/konsole/konsole.h #414406:414407 @@ -156,6 +156,7 @@ void updateKeytabMenu(); void updateRMBMenu(); + void changeTabTextColor(int); void changeColumns(int); void changeColLin(int columns, int lines); void notifySessionState(TESession* session,int state); The only problem I see is that the uses will have to calculate what # to use. I found kcalc works good for HEX->Decimal conversions. My root PS1: \[\033[0;32m\](\[\033[0;31m\]\u\[\033[0;32m\]@\[\033[0;33m\]\h\[\033[0;32m\])-(\[\033[0;36m\]$(date +%H:%M)\[\033[0;32m\])-(\[\033[0;36m\]\w\[\033[0;32m\])\[\033[0;36m\]>\[\033[0;37m\] \[\033[28;16711680t\] 16711680 is FF0000 (RRGGBB) which is red. SVN commit 414464 by hindenburg: Previous code didn't take into account user changing sessions; also detaching session will retain tab text color now. CCBUG: 80725 M +11 -7 trunk/KDE/kdebase/konsole/konsole/konsole.cpp M +1 -1 trunk/KDE/kdebase/konsole/konsole/konsole.h M +8 -0 trunk/KDE/kdebase/konsole/konsole/session.cpp M +2 -0 trunk/KDE/kdebase/konsole/konsole/session.h Hi, I'm currently trying to find a way to differentiate Konsole's tab using ESC codes or something similar. Basically I want the tab background color, or icon to be different for each of my servers. I came across this old ticket, but I'm unsure if it was actually implemented, or the feature still exists? I'm using Konsole 18.12.1 Is there any way to do this still? If so, could somebody please show an example shell command that would send the ESC sequence to change the current tab's color or icon? Thanks |