handle OB rc.xml font and button layout other OB themes
This commit is contained in:
parent
6523ccd67a
commit
07d4274ac3
121
bin/colorizer-ob
121
bin/colorizer-ob
@ -47,6 +47,7 @@ case "$LANG" in
|
|||||||
INACTIVE_BG="Tło nieaktywnego okna"
|
INACTIVE_BG="Tło nieaktywnego okna"
|
||||||
TITLEBAR_TEXT="Tekst paska tytułowego"
|
TITLEBAR_TEXT="Tekst paska tytułowego"
|
||||||
FONT="Czcionka"
|
FONT="Czcionka"
|
||||||
|
FONTSIZE="Rozmiar czcionki"
|
||||||
BOLD="Pogrubienie"
|
BOLD="Pogrubienie"
|
||||||
ITALIC="Kursywa"
|
ITALIC="Kursywa"
|
||||||
TEXTALIGN="Wyrównanie tytułu"
|
TEXTALIGN="Wyrównanie tytułu"
|
||||||
@ -68,6 +69,8 @@ case "$LANG" in
|
|||||||
RAISED="uniesiony - <b>raised</b>"
|
RAISED="uniesiony - <b>raised</b>"
|
||||||
SUNKEN="wklęsły - <b>sunken</b>"
|
SUNKEN="wklęsły - <b>sunken</b>"
|
||||||
BUTTONS="Przyciski"
|
BUTTONS="Przyciski"
|
||||||
|
BUTTONS_LAYOUT="Układ przycisków"
|
||||||
|
LEGEND="Legenda"
|
||||||
GRADIENT_TYPE="Typ Gradientu"
|
GRADIENT_TYPE="Typ Gradientu"
|
||||||
SOLID_COLOR="Jednolity kolor (brak gradientu)"
|
SOLID_COLOR="Jednolity kolor (brak gradientu)"
|
||||||
PRE_GRADIENTS="Gotowe gradienty"
|
PRE_GRADIENTS="Gotowe gradienty"
|
||||||
@ -105,6 +108,7 @@ case "$LANG" in
|
|||||||
TITLEBAR_TEXT="Title Bar Text"
|
TITLEBAR_TEXT="Title Bar Text"
|
||||||
TITLEBAR_FONT="Title Bar Font"
|
TITLEBAR_FONT="Title Bar Font"
|
||||||
FONT="Font"
|
FONT="Font"
|
||||||
|
FONTSIZE="Font size"
|
||||||
BOLD="Bold"
|
BOLD="Bold"
|
||||||
ITALIC="Italic"
|
ITALIC="Italic"
|
||||||
TEXTALIGN="Title align"
|
TEXTALIGN="Title align"
|
||||||
@ -126,6 +130,8 @@ case "$LANG" in
|
|||||||
RAISED="raised"
|
RAISED="raised"
|
||||||
SUNKEN="sunken"
|
SUNKEN="sunken"
|
||||||
BUTTONS="Buttons"
|
BUTTONS="Buttons"
|
||||||
|
BUTTONS_LAYOUT="Buttons Layout"
|
||||||
|
LEGEND="Legend"
|
||||||
GRADIENT_TYPE="Gradient type"
|
GRADIENT_TYPE="Gradient type"
|
||||||
SPLITVERTICAL="SplitVertical"
|
SPLITVERTICAL="SplitVertical"
|
||||||
MIRRORHORIZONTAL="MirrorHorizontal"
|
MIRRORHORIZONTAL="MirrorHorizontal"
|
||||||
@ -154,6 +160,41 @@ case "$LANG" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
getvalues () {
|
||||||
|
read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read ABGTO <<< "$(grep .active.title.bg.colorTo ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read NBG <<< "$(grep .inactive.title.bg.color: ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read NBGTO <<< "$(grep .inactive.title.bg.colorTo ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read AFG <<< "$(grep .active.label.text.color ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read NFG <<< "$(grep .inactive.label.text.color ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read ALINE <<< "$(grep .active.border.color ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read NLINE <<< "$(grep inactive.border.color ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read PHEIGHT <<< "$(grep ^padding.height: ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read PWIDTH <<< "$(grep ^padding.width: ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read TXTJUST <<< "$(grep text.justify ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read HANDLE <<< "$(grep handle.width ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read BORD <<< "$(grep border.width ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read WINRAISED REST <<< "$(grep .title.bg: ${THEMERC} | cut -d':' -f2)"
|
||||||
|
read AHBG <<< "$(grep .active.handle.bg.color: ${THEMERC} | cut -d':' -f2)"
|
||||||
|
if [ "$ABG" == "$AHBG" ];then
|
||||||
|
AHANDLE="yes"
|
||||||
|
else
|
||||||
|
AHANDLE="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
getvaluesrc() {
|
||||||
|
#from RC.xml
|
||||||
|
nspace="http://openbox.org/3.4/rc"
|
||||||
|
cfg="$HOME/.config/openbox/rc.xml"
|
||||||
|
|
||||||
|
FSIZE=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' "$cfg")
|
||||||
|
FNAME=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:name' "$cfg")
|
||||||
|
NDSLIMC=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:titleLayout' "$cfg")
|
||||||
|
WEIGHT=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' "$cfg")
|
||||||
|
SLANT=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' "$cfg")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if [[ -f "$THEMERC" ]] && [[ "$OBTHEME" = "MBcolor"* ]]; then
|
if [[ -f "$THEMERC" ]] && [[ "$OBTHEME" = "MBcolor"* ]]; then
|
||||||
if [ ! -f "${THEMERC}.bak" ]; then
|
if [ ! -f "${THEMERC}.bak" ]; then
|
||||||
@ -185,40 +226,10 @@ if [[ -f "$THEMERC" ]] && [[ "$OBTHEME" = "MBcolor"* ]]; then
|
|||||||
grep ^[^#] "$THEMERC" | grep -qiF -- .text.font: || echo "window.*.text.font: shadow=n:shadowtint=70:shadowoffset=1" >> "$THEMERC"
|
grep ^[^#] "$THEMERC" | grep -qiF -- .text.font: || echo "window.*.text.font: shadow=n:shadowtint=70:shadowoffset=1" >> "$THEMERC"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
getvalues () {
|
|
||||||
read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read ABGTO <<< "$(grep .active.title.bg.colorTo ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read NBG <<< "$(grep .inactive.title.bg.color: ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read NBGTO <<< "$(grep .inactive.title.bg.colorTo ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read AFG <<< "$(grep .active.label.text.color ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read NFG <<< "$(grep .inactive.label.text.color ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read ALINE <<< "$(grep .active.border.color ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read NLINE <<< "$(grep inactive.border.color ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read PHEIGHT <<< "$(grep ^padding.height: ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read PWIDTH <<< "$(grep ^padding.width: ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read TXTJUST <<< "$(grep text.justify ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read HANDLE <<< "$(grep handle.width ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read BORD <<< "$(grep border.width ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read WINRAISED REST <<< "$(grep .title.bg: ${THEMERC} | cut -d':' -f2)"
|
|
||||||
read AHBG <<< "$(grep .active.handle.bg.color: ${THEMERC} | cut -d':' -f2)"
|
|
||||||
if [ "$ABG" == "$AHBG" ];then
|
|
||||||
AHANDLE="yes"
|
|
||||||
else
|
|
||||||
AHANDLE="no"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#from RC.xml
|
|
||||||
nspace="http://openbox.org/3.4/rc"
|
|
||||||
cfg="$HOME/.config/openbox/rc.xml"
|
|
||||||
|
|
||||||
FSIZE=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' "$cfg")
|
|
||||||
FNAME=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:name' "$cfg")
|
|
||||||
NDSLIMC=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:titleLayout' "$cfg")
|
|
||||||
WEIGHT=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' "$cfg")
|
|
||||||
SLANT=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' "$cfg")
|
|
||||||
|
|
||||||
}
|
|
||||||
getvalues
|
getvalues
|
||||||
|
getvaluesrc
|
||||||
|
|
||||||
out+=("^sep($OBTHEME_LBL: <i>$OBTHEME</i>)")
|
out+=("^sep($OBTHEME_LBL: <i>$OBTHEME</i>)")
|
||||||
|
|
||||||
@ -280,12 +291,12 @@ out2+=("Dots,obtctl buttons dots;$me")
|
|||||||
out2+=("^sep()")
|
out2+=("^sep()")
|
||||||
out2+=("Big 12px,obtctl buttons big-12;$me")
|
out2+=("Big 12px,obtctl buttons big-12;$me")
|
||||||
out2+=("Big 14px,obtctl buttons big-14;$me")
|
out2+=("Big 14px,obtctl buttons big-14;$me")
|
||||||
out2+=("^sep(TITLE_LAYOUT)")
|
out2+=("^sep($BUTTONS_LAYOUT)")
|
||||||
[[ "$NDSLIMC" == NDSLIMC ]] && out2+=("<big>綠</big> <tt>full </tt> <b>NDSLIMC</b> (default),obtctl ndslimc NDSLIMC;$me") || out2+=("<big>祿</big> <tt>full </tt> <b>NDSLIMC</b> (default),obtctl ndslimc NDSLIMC;$me")
|
[[ "$NDSLIMC" == NDSLIMC ]] && out2+=("<big>綠</big> <tt>full </tt> <b>NDSLIMC</b> (default),obtctl ndslimc NDSLIMC;$me") || out2+=("<big>祿</big> <tt>full </tt> <b>NDSLIMC</b> (default),obtctl ndslimc NDSLIMC;$me")
|
||||||
[[ "$NDSLIMC" == NLIMC ]] && out2+=("<big>綠</big> <tt>mini </tt> <b>NLIMC</b>,obtctl ndslimc NLIMC;$me") || out2+=("<big>祿</big> <tt>mini </tt> <b>NLIMC</b>,obtctl ndslimc NLIMC;$me")
|
[[ "$NDSLIMC" == NLIMC ]] && out2+=("<big>綠</big> <tt>mini </tt> <b>NLIMC</b>,obtctl ndslimc NLIMC;$me") || out2+=("<big>祿</big> <tt>mini </tt> <b>NLIMC</b>,obtctl ndslimc NLIMC;$me")
|
||||||
[[ "$NDSLIMC" == LIMC ]] && out2+=("<big>綠</big> <tt>mini (no icon)</tt> <b>LIMC</b>,obtctl ndslimc LIMC;$me") || out2+=("<big>祿</big> <tt>mini (no icon)</tt> <b>LIMC</b>,obtctl ndslimc LIMC;$me")
|
[[ "$NDSLIMC" == LIMC ]] && out2+=("<big>綠</big> <tt>mini (no icon)</tt> <b>LIMC</b>,obtctl ndslimc LIMC;$me") || out2+=("<big>祿</big> <tt>mini (no icon)</tt> <b>LIMC</b>,obtctl ndslimc LIMC;$me")
|
||||||
[[ "$NDSLIMC" == CMIL ]] && out2+=("<big>綠</big> <tt>crazy </tt> <b>CMIL</b>,obtctl ndslimc CMIL;$me") || out2+=("<big>祿</big> <tt>crazy </tt> <b>CMIL</b>,obtctl ndslimc CMIL;$me")
|
[[ "$NDSLIMC" == CMIL ]] && out2+=("<big>綠</big> <tt>crazy </tt> <b>CMIL</b>,obtctl ndslimc CMIL;$me") || out2+=("<big>祿</big> <tt>crazy </tt> <b>CMIL</b>,obtctl ndslimc CMIL;$me")
|
||||||
out2+=("^sep(<small>LEGEND</small>)")
|
out2+=("^sep(<small>$LEGEND</small>)")
|
||||||
out2+=("^sep(N:<small> Window icon</small>)")
|
out2+=("^sep(N:<small> Window icon</small>)")
|
||||||
out2+=("^sep(L:<small> Window label (Title)</small>)")
|
out2+=("^sep(L:<small> Window label (Title)</small>)")
|
||||||
out2+=("^sep(I:<small> Iconify (Minimize)</small>)")
|
out2+=("^sep(I:<small> Iconify (Minimize)</small>)")
|
||||||
@ -314,7 +325,7 @@ done
|
|||||||
out2+=("^sep()")
|
out2+=("^sep()")
|
||||||
[[ "$WEIGHT" =~ .*"old" ]] && out2+=("<big></big> <b>$BOLD</b>,obtctl fontweight Normal;$me") || out2+=("<big></big> <b>$BOLD</b>,obtctl fontweight Bold;$me")
|
[[ "$WEIGHT" =~ .*"old" ]] && out2+=("<big></big> <b>$BOLD</b>,obtctl fontweight Normal;$me") || out2+=("<big></big> <b>$BOLD</b>,obtctl fontweight Bold;$me")
|
||||||
[[ "$SLANT" =~ .*"talic" ]] && out2+=("<big></big> <i>$ITALIC</i>,obtctl fontslant Normal;$me") || out2+=("<big></big> <i>$ITALIC</i>,obtctl fontslant Italic;$me")
|
[[ "$SLANT" =~ .*"talic" ]] && out2+=("<big></big> <i>$ITALIC</i>,obtctl fontslant Normal;$me") || out2+=("<big></big> <i>$ITALIC</i>,obtctl fontslant Italic;$me")
|
||||||
out2+=("^sep(size)")
|
out2+=("^sep($FONTSIZE)")
|
||||||
sizes=(8 9 10 11 12 13 14 15 16)
|
sizes=(8 9 10 11 12 13 14 15 16)
|
||||||
for i in "${sizes[@]}"
|
for i in "${sizes[@]}"
|
||||||
do
|
do
|
||||||
@ -416,14 +427,44 @@ out2+=("6,obtctl handlewidth 6;$me")
|
|||||||
out2+=("8,obtctl handlewidth 8;$me")
|
out2+=("8,obtctl handlewidth 8;$me")
|
||||||
out2+=("10,obtctl handlewidth 10;$me")
|
out2+=("10,obtctl handlewidth 10;$me")
|
||||||
|
|
||||||
else
|
else # Theme other than MBColors, we can only edit rc.xml
|
||||||
|
getvaluesrc
|
||||||
out+=("^sep($NOT_SUPORTED_OBTHEME)")
|
out+=("^sep($NOT_SUPORTED_OBTHEME)")
|
||||||
out+=("$SWITCH_TO_MBCOLORS,obtctl theme MBcolors;$me")
|
out+=("$SWITCH_TO_MBCOLORS,obtctl theme MBcolors;$me")
|
||||||
#for i in $(ls $HOME/.themes);do
|
out+=("^sep($TITLEBAR_FONT)")
|
||||||
#if [ -f "$HOME/.themes/${i}/openbox-3/themerc" ]; then
|
out+=("$FONT... [ <b> ${FNAME} ${FSIZE} </b> ],mb-setfont obtitle;$me")
|
||||||
#out+=("$i,obtctl theme $i;$me")
|
out+=("^sep(font family)")
|
||||||
#fi
|
fonts=("Noto Sans" "DejaVu Serif" "Roboto Light" "Inconsolata" "Ubuntu" "Source Code Pro")
|
||||||
#done
|
for i in "${fonts[@]}"
|
||||||
|
do
|
||||||
|
[[ "$FNAME" == "$i" ]] && out+=("<big>綠</big> <span size=\"large\" font_family=\"${i}\">$i</span>,$me") || out+=("<big>祿</big> <span size=\"large\" font_family=\"${i}\">$i</span>,obtctl fontfamily \"${i}\";$me")
|
||||||
|
done
|
||||||
|
out+=("^sep()")
|
||||||
|
[[ "$WEIGHT" =~ .*"old" ]] && out+=("<big></big> <b>$BOLD</b>,obtctl fontweight Normal;$me") || out+=("<big></big> <b>$BOLD</b>,obtctl fontweight Bold;$me")
|
||||||
|
[[ "$SLANT" =~ .*"talic" ]] && out+=("<big></big> <i>$ITALIC</i>,obtctl fontslant Normal;$me") || out+=("<big></big> <i>$ITALIC</i>,obtctl fontslant Italic;$me")
|
||||||
|
out+=("^sep()")
|
||||||
|
out+=("$FONTSIZE [ <b>$FSIZE px</b> ],^checkout(obfsize)")
|
||||||
|
out2+=("^tag(obfsize)")
|
||||||
|
out2+=("^sep($FONTSIZE)")
|
||||||
|
sizes=(8 9 10 11 12 13 14 15 16)
|
||||||
|
for i in "${sizes[@]}"
|
||||||
|
do
|
||||||
|
[[ "$FSIZE" == "$i" ]] && out2+=("<big>綠</big> <b>$i px</b>,obtctl fontsize $i;$me") || out2+=("<big>祿</big> $i px,obtctl fontsize $i;$me")
|
||||||
|
done
|
||||||
|
|
||||||
|
out+=("^sep($BUTTONS_LAYOUT)")
|
||||||
|
[[ "$NDSLIMC" == NDSLIMC ]] && out+=("<big>綠</big> <tt>full </tt> <b>NDSLIMC</b> (default),obtctl ndslimc NDSLIMC;$me") || out+=("<big>祿</big> <tt>full </tt> <b>NDSLIMC</b> (default),obtctl ndslimc NDSLIMC;$me")
|
||||||
|
[[ "$NDSLIMC" == NLIMC ]] && out+=("<big>綠</big> <tt>mini </tt> <b>NLIMC</b>,obtctl ndslimc NLIMC;$me") || out+=("<big>祿</big> <tt>mini </tt> <b>NLIMC</b>,obtctl ndslimc NLIMC;$me")
|
||||||
|
[[ "$NDSLIMC" == LIMC ]] && out+=("<big>綠</big> <tt>mini (no icon)</tt> <b>LIMC</b>,obtctl ndslimc LIMC;$me") || out+=("<big>祿</big> <tt>mini (no icon)</tt> <b>LIMC</b>,obtctl ndslimc LIMC;$me")
|
||||||
|
[[ "$NDSLIMC" == CMIL ]] && out+=("<big>綠</big> <tt>crazy </tt> <b>CMIL</b>,obtctl ndslimc CMIL;$me") || out+=("<big>祿</big> <tt>crazy </tt> <b>CMIL</b>,obtctl ndslimc CMIL;$me")
|
||||||
|
out+=("^sep(<small>$LEGEND</small>)")
|
||||||
|
out+=("^sep(N:<small> Window icon</small>)")
|
||||||
|
out+=("^sep(L:<small> Window label (Title)</small>)")
|
||||||
|
out+=("^sep(I:<small> Iconify (Minimize)</small>)")
|
||||||
|
out+=("^sep(M:<small> Maximize</small>)")
|
||||||
|
out+=("^sep(C:<small> Close</small>)")
|
||||||
|
out+=("^sep(S:<small> Shade (Roll up)</small>)")
|
||||||
|
out+=("^sep(D:<small> Omnipresent (On all desktops)</small>)")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### RUN
|
### RUN
|
||||||
|
19
bin/obtctl
19
bin/obtctl
@ -3,15 +3,18 @@
|
|||||||
OBTHEME=$(awk '/<theme>/ {while (getline n) {if (match(n, /<name>/))
|
OBTHEME=$(awk '/<theme>/ {while (getline n) {if (match(n, /<name>/))
|
||||||
{l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$HOME/.config/openbox/rc.xml")
|
{l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$HOME/.config/openbox/rc.xml")
|
||||||
#echo "$OBTHEME"
|
#echo "$OBTHEME"
|
||||||
if [[ $OBTHEME = MBcolor* ]];then
|
THEMEDIR="$HOME/.themes/$OBTHEME/openbox-3"
|
||||||
|
THEMERC="$HOME/.themes/$OBTHEME/openbox-3/themerc"
|
||||||
|
|
||||||
|
#if [[ $OBTHEME = MBcolor* ]];then
|
||||||
#switch to MBcolors theme
|
#switch to MBcolors theme
|
||||||
THEMEDIR="$HOME/.themes/$OBTHEME/openbox-3"
|
# THEMEDIR="$HOME/.themes/$OBTHEME/openbox-3"
|
||||||
THEMERC="$HOME/.themes/$OBTHEME/openbox-3/themerc"
|
# THEMERC="$HOME/.themes/$OBTHEME/openbox-3/themerc"
|
||||||
else
|
# else
|
||||||
xmlstarlet ed -L -N o="http://openbox.org/3.4/rc" -u '/o:openbox_config/o:theme/o:name' -v "MBcolors" "$HOME/.config/openbox/rc.xml"
|
# xmlstarlet ed -L -N o="http://openbox.org/3.4/rc" -u '/o:openbox_config/o:theme/o:name' -v "MBcolors" "$HOME/.config/openbox/rc.xml"
|
||||||
THEMEDIR="$HOME/.themes/MBcolors/openbox-3"
|
# THEMEDIR="$HOME/.themes/MBcolors/openbox-3"
|
||||||
THEMERC="$HOME/.themes/MBcolors/openbox-3/themerc"
|
# THEMERC="$HOME/.themes/MBcolors/openbox-3/themerc"
|
||||||
fi
|
#fi
|
||||||
|
|
||||||
|
|
||||||
MBCOLORSDIR="$HOME"/.themes/MBcolors/openbox-3/
|
MBCOLORSDIR="$HOME"/.themes/MBcolors/openbox-3/
|
||||||
|
Loading…
Reference in New Issue
Block a user