[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Debian]: farbige Bash



Hi,

Ich hatte gehofft, mich zurückhalten zu können. Leider wird nichts draus,
und ich muß meinen Besserwissersenf dazugeben. Sorry 'bout that :)

On Mon, Jan 18, 1999 at 11:20:08PM +0100, Philipp Frauenfelder wrote:
> 
> Für den farbigen Prompt. In meiner .bash_profile steht
> 
> export PS1='\u:ESC[31m\wESC[m>'

Da sind zwei fehler drin. Mal sehen:
 
> wobei das ESC ein Buchstabe mit ASCII 27 ist (steht in der Doku 
> zu deinem Lieblings-Editor, wie man das macht). Die Farben sind 
> gemäss ISO 6429.

Ich wußte gar nicht, daß es einen ISO Standard gibt. Aber wie immer, es ist
schön das es so viele standards gibt, daß man sich einen aussuchen kann :)

Das eigentliche Problem tritt auf (Fehler nummer 1), daß nicht jede Terminal
emulation Farben (und somit diese Control Sequences) unterstützt. In so
einem Fall (zum Beispiel über Telnet), siehst Du den ganzen Escape Müll als
literal. Die bessere Lösung ist es, den Prompt aus tput Anweisungen zu
generieren:

# ~/.bash_profile: executed by bash(1) for login shells.

[.... hier ist unrelevantes ....]

  set_prompt ()
  {
    local SAVE_CRS=`tput sc 2> /dev/null`
    local RESET_CRS=`tput rc 2> /dev/null`
    local CLOCKPOS=`tput cup 0 90 2> /dev/null`
    local FOREG=`tput setaf 6 2> /dev/null` #4
    local ALT_FOREG=`tput setaf 3 2> /dev/null` #4
    local BACKG=`tput setab 0 2> /dev/null` #6
    local NORMAL=`tput sgr0 2> /dev/null`
    local BOLD=`tput bold 2> /dev/null`

    PS1="\[${NORMAL}${SAVE_CRS}${CLOCKPOS}${FOREG}${BACKG}${BOLD} \@ ${RESET_CRS}${BOLD}${ALT_FOREG}\]\u\[${NORMAL}\]@\h:\w\$ "
  }
  set_prompt


Damit erhältst Du einen gelben username, normales @hostname und den Path,
sowie eine Uhrzeit in Cyan in der rechten oberen Bildschirmecke.

Siehe "man tput" und "man 5 terminfo".

> ANSI definiert lediglich die Escape Sequenzen fuer 
> Terminalsteuerung. Genauer: ANSI X.364, sowie erweitert mit 
> ECMA-48.
> Quelle: On-line Hacker Jargon file (jarg40.txt)

tput funktioniert auf allen Terminals und liefert einfach gar nichts zurück,
wenn die Funktionalität nicht unterstützt wird (du könntest den Error code
überprüfen, um dies abzufangen).
 
> Problem: die bash-Version, die ich benutze (2.01.1-4.1), oder 
> die zugehörige libreadline hat einen Bug: sobald eine Zeile mit 
> unsichtbaren Zeichen (die Farb-Steuerzeichen zum Beispiel) 
> umgebrochen werden soll (langer Befehl etc.), dann kommt nur 
> Müll heraus. Sehr nervig beim Editieren eines vorgehenden 
> Befehls, deshalb habe ich es wieder ausgeschaltet.

Dies ist Dein zweiter Fehler. Du mußt Bash mitteilen, welche Teile deines
Promptes nicht wirklich auf dem Bildschirm als Zeichen erscheinen, damit
diese nicht mitgezählt werden. Dazu klammerst Du die Escape Sequenzen in
\[ \] ein. Klappt wunderbar, wenn man es erst mal raushat.

Mit SAVE_CRS und RESET_CRS kann man das Spiel soweit treiben, daß man
überall auf dem Bildschirm was schreiben kann. Ein Problem bleibt: Der
Scroll Back Puffer wird dadurch verändert. Mir wäre ein Kernel tool ganz
nett, welches die Uhrzeit einfach drüberblendet, ohne den Terminalinhalt zu
ändern. Dann könnte man ganze Applikationen (menues, etc) in die Console
einblenden... klappt natürlich nicht mehr über Telnet :)

Marcus

-- 
"Rhubarb is no Egyptian god."        Debian GNU/Linux        finger brinkmd@ 
Marcus Brinkmann                   http://www.debian.org    master.debian.org
Marcus.Brinkmann@ruhr-uni-bochum.de                        for public  PGP Key
http://homepage.ruhr-uni-bochum.de/Marcus.Brinkmann/       PGP Key ID 36E7CD09
------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <deine emailadresse>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     660


Reply to: