Bash code anpassung an die fenstergröße

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Bash code anpassung an die fenstergröße

Beitrag von Voyager_MP » 16.12.2005 19:09:07

Code: Alles auswählen

PS1='\[\033[1;30m\]====================================================================================\n\
\[\033[1;30m\]\t      \h:\w\n========\n\[\033[1;34m\]\u@\h\[\033[1;30m\] -=> \[\033[1;30m\]\[\033[0;0m\]'
So sieht mein prompt in der bashrc aus,

leider vergrößert er sich nicht dynamisch, wenn ich wenn ich die fenstergröße verändere.

Wie kann ich das verbessern ?

Oder anders Beispiel, wie schaffe ich es das ich wenn ich ein init script schreibe, jedesmal das "done" unabhänig von der fenstergröße, ganz links habe ?
Gruß Michel

yeti

Beitrag von yeti » 16.12.2005 21:23:59

Ein Skript, das während seines Laufes Fenstergrößenänderungen bemerkt:

Code: Alles auswählen

#!/bin/bash

trap on_winch 28

on_winch() {
        eval $(resize)
        echo resized: $COLUMNS $LINES
}

while true ; do
        :
done
Den Prompt anpassen kannst Du wahrscheinlich besser über den PROMPT_COMMAND-Haken. In diese Variable kannst Du Code eintragen, der vor dem Prompt ausgeführt wird, z.B. also nachschauen per "resize", welche Fenstergröße nun gerade aktüll ist... (siehe "man bash")
Init-Scripte brauchen wohl auch nur einmal am Anfang die Auflösung zu ermitteln...
Es geht übrigens auch per "tput"... das finde ich fast noch einfacher:

Code: Alles auswählen

echo $(tput cols) $(tput lines)
Den Schieber positionieren, Farbe, Fettschrift usw kann man auch per "tput" handhaben, hartkodierte Escapes sind im Zweifel völlig unportabel...
Viel Spaß damit!

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 02.01.2006 15:08:03

danke, kannst du mir das mal etwas auführlicher erklären,

wenn ich sehe wie breit das fenster ist, wie kann ich ihm dann sagen wieviele zeichen er schreiben soll ?
Gruß Michel

yeti

Beitrag von yeti » 03.01.2006 16:35:56

Code: Alles auswählen

# strstr zeichen anzahl ... zeichen anzahl-mal echo-en

strstr () 
{ 
    case $2 in 
        0)
            return
        ;;
        1)
            echo "$1"
        ;;
        *)
            echo $(strstr "$1" $(($2/2)))$(strstr "$1" $(($2-$2/2)))
        ;;
    esac
}

# on_winch ... Handler für Fenstergrößenwechsel

on_winch () 
{ 
    PS1=$(strstr = $(tput cols))
}

trap on_winch 28

# einmal manüll aufrufen, damit der Prompt erstmalig gebaut wird

on_winch
Setz das mal in Deine .bash_profile oder .bashrc oder beide, je nachdem, wie Du die Startup-Files organisiert hast.
Dies Beispiel baut bei jedem Fenstergrößenwechsel einen neuen Prompt, in diesem Fall Fensterbreite mal das "="-Zeichen.

Antworten