Vinnaren i pepparkakshustävlingen!
2016-06-18, 00:21
  #1
Medlem
Jag vill ha en function som ändrar tema åt mig, just nu har jag en funktion som öppnar de filer jag vill ändra där jag kan ändra attributen själv.
Kod:
edit-theme(){
    for f in ~/.config/colors/*; do $EDITOR $f; done;
    $EDITOR ~/.Xresources;
    $EDITOR ~/.xinitrc;
}

Vad jag är ute efter är att man ska kunna skicka med ett att attribut på och filerna ändrar automatiskt inehållet:

Något i stil med edit-theme($name)

.xinitrc
Kod:
feh --bg-scale ~/.config/wallpapers/$name.jpg

.Xresources
Kod:
#include ".config/colors/$name"
Citera
2016-06-18, 00:41
  #2
Medlem
fimbuls avatar
Antingen skapar du olika konfigfiler på sidan om och låter bash kopiera in de du vill ha, eller så läser du på om hur "sed" funkar.
Citera
2016-06-18, 16:57
  #3
Medlem
Jag får ut rätt info från sed. Men när jag försöker skriva till .xinitrc (testfile) så blir den tom.

Kod:
set-theme(){
    WALLPAPER="feh --bg-scale ~\/.config\/wallpapers\/";

    if [ -f ~/.config/colors/$1 ]; then
       sed "s/$WALLPAPER.*/$WALLPAPER$1.jpg/g" ~/testfile > ~/testfile;
    else
       echo "Theme does not exist."
    fi
}
Citera
2016-06-18, 20:09
  #4
Moderator
vhes avatar
Citat:
Ursprungligen postat av Boroshlawa
Jag får ut rätt info från sed. Men när jag försöker skriva till .xinitrc (testfile) så blir den tom.

Kod:
set-theme(){
    WALLPAPER="feh --bg-scale ~\/.config\/wallpapers\/";

    if [ -f ~/.config/colors/$1 ]; then
       sed "s/$WALLPAPER.*/$WALLPAPER$1.jpg/g" ~/testfile > ~/testfile;
    else
       echo "Theme does not exist."
    fi
}

Det är ingen bra ide att använda samma fil som in och output, när du gör shell-redirection sådär. Det första som kommer hända är att ~/testfile trunkeras av operatorn >, därefter så börjar sed läsa den tomma filen, och avsluta utan att göra något. Mellanlagra datan i en tempfil.

[edit]: Vill du abusa evalueringsordningen borde du komma undan med följande snusk:
Kod:
( rm ~/testfile && sed "s/$WALLPAPER.*/$WALLPAPER$1.jpg/g" > ~/testfile ) < ~/testfile

...men det är lite åt det magiska hållet.
__________________
Senast redigerad av vhe 2016-06-18 kl. 20:14.
Citera
2016-06-19, 00:41
  #5
Medlem
Citat:
Ursprungligen postat av vhe
Det är ingen bra ide att använda samma fil som in och output, när du gör shell-redirection sådär. Det första som kommer hända är att ~/testfile trunkeras av operatorn >, därefter så börjar sed läsa den tomma filen, och avsluta utan att göra något. Mellanlagra datan i en tempfil.

Det löste sig när jag gjorde en echo och sen skrev till filen. Men det är en en bättre idé att göra en fil i /tmp och sen skriva till filen?

Kod:
theme-set(){
    WALLPAPER="feh --bg-scale ~\/.config\/wallpapers\/";
    COLORSCHEME="#include \".config\/colors\/";

    if [ -f ~/.config/colors/$1 ]; then
       echo "$(sed "s/$WALLPAPER.*/$WALLPAPER$1.jpg/g" ~/.xinitrc)" > ~/.xinitrc;
       echo "$(sed "s/$COLORSCHEME.*\"/$COLORSCHEME$1\"/g" ~/.Xresources)" > ~/.Xresources;

        COLORFILE="$(grep "#include \".config\/colors\/.*\"" ~/.Xresources | cut -f 2 -d "\"")";
        BORDER_A="$(cat $COLORFILE | grep borderA | cut -f 2 -d "#")";
        BORDER_B="$(cat $COLORFILE | grep borderB | cut -f 2 -d "#")";
        if [ ! -z $BORDER_A ]; then
            echo "$(sed "s/myNormalBorderColor.*/myNormalBorderColor = \"#$BORDER_A\"/g" ~/.xmonad/xmonad.hs)" > ~/.xmonad/xmonad.hs;
        fi
        if [ ! -z $BORDER_B ]; then
            echo "$(sed "s/myFocusedBorderColor.*/myFocusedBorderColor = \"#$BORDER_B\"/g" ~/.xmonad/xmonad.hs)"  > ~/.xmonad/xmonad.hs;
        fi
    else
       echo "Theme does not exist."
    fi
}
Citera
2016-06-19, 06:38
  #6
Medlem
Citat:
Ursprungligen postat av Boroshlawa
Det löste sig när jag gjorde en echo och sen skrev till filen. Men det är en en bättre idé att göra en fil i /tmp och sen skriva till filen?
...

Nej, det skulle bara "tillföra förvirring". Använd /tmp som en "slask" för typ mellanresultat och sådant som aldrig behöver sparas.
För filer som har en given plats i filsystemet är det bättre att hålla sig i rätt katalog.

En "klassiker" är ju .OLD-filer (enligt valfri/lämplig namnkonvention): Då börjar skriptet med att byta namn på originalet till en backup-version och använder som input, med "rätt" namn som output.
(Fast ur felsäkerhetssynvinkel är det ännu bättre att skapa en .NEW, och SIST göra namnbyten om/när allt gått bra.)
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback