wallpaper colors and other improvements

master 0.3.0
Daniel Napora 2022-04-22 18:46:38 +02:00
parent a3cd3a96d2
commit bd1fb9ed40
1 changed files with 89 additions and 119 deletions

View File

@ -3,10 +3,9 @@
# Dependencies: jgmenu, xdotool, xcolor, gcolor3, xdg-utils, xclip, notify-send # Dependencies: jgmenu, xdotool, xcolor, gcolor3, xdg-utils, xclip, notify-send
# TODO Imagick colors - separate menu big around 700 named colors # TODO Imagick colors - separate menu big around 700 named colors
# TODO export to .gpl (GIMP,Inkscape) # TODO export to .gpl (GIMP,Inkscape)
# TODO Current Wallpaper palette
# TODO PL translation # TODO PL translation
VERSION="0.2.6" VERSION="0.3.0"
TEMP_DIR=/tmp/colormenu TEMP_DIR=/tmp/colormenu
ME=${0##*/} ME=${0##*/}
@ -26,9 +25,9 @@ action=copy
#What thing to expose on top of main menu: recently picked colors, last used colors or last used palette #What thing to expose on top of main menu: recently picked colors, last used colors or last used palette
expose=picked expose=picked
#Show HTML colors? yes|no #Show HTML colors? yes|no
htmlcolors=no htmlcolors=yes
#Show built in palettes? (slow) #Show built in palettes? (slow)
builtin_palettes=no builtin_palettes=yes
#Position on screen: topleft, top, topright, left, center, right, bottomleft, bottom, bottomright #Position on screen: topleft, top, topright, left, center, right, bottomleft, bottom, bottomright
position=left position=left
EOF EOF
@ -125,46 +124,52 @@ newpalette() {
} }
palettes() { palettes() {
[ -n "$1" ] && pdir="$CNF_DIR/palettes/my/" || pdir="$DATA_DIR/palettes/" [ -n "$1" ] && pdir="$CNF_DIR/palettes/my/" || pdir="$DATA_DIR/palettes/"
if [[ -n "$1" ]]; then
out2+=("^tag(mypalettes)")
out2+=("^sep(My palettes)")
else
out2+=("^tag(builtpalettes)")
out2+=("^sep(Built-in palettes)")
fi
for file in "$pdir"*.clr ;do for file in "$pdir"*.clr ;do
filename=${file##*/} filename=${file##*/}
palette=${filename%.*} palette=${filename%.*}
pal=${palette//_/ } pal=${palette//_/ }
tagname=${palette// /_} tagname=${palette// /_}
out1+=("${pal^},^checkout($tagname)") out2+=("${pal^},^checkout($tagname)")
out2+=("^tag($tagname)") out3+=("^tag($tagname)")
out2+=("^sep(${pal^})") out3+=("^sep(${pal^})")
out3+=("EXPOSE_ON_ROOTMENU,$ME setvar expose=$filename;$ME")
out3+=("^sep()")
while read -r color name; while read -r color name;
do do
#name=$(printf "%22s %s\n" "$name") out3+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt>,$ME getcolorcode '$color' '$file',,,#${palette}")
#fg=$(fgcolor $color)
#out2+=("<tt><span bgcolor='$color' fgcolor='$fg'><sub> </sub>$color<sup>$name </sup></span></tt>,$ME getcolorcode '$color' '$file',,,#${palette}")
out2+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt>,$ME getcolorcode '$color' '$file';$ME setvar expose=palette,,,#${palette}")
done < "$file" done < "$file"
if [[ -n "$1" ]] ; then if [[ -n "$1" ]] ; then
out2+=("^sep()") out3+=("^sep()")
out2+=("<b>Add color...</b> from screen,$ME pickcolor '$file'") out3+=("<b>Add color...</b> from screen,$ME pickcolor '$file'")
if hash gcolor3 2>/dev/null; then if hash gcolor3 2>/dev/null; then
out2+=("^sep()") out3+=("^sep()")
out2+=("<b>Add</b> color from selector...,$ME addcolor '$file'") out3+=("<b>Add</b> color from selector...,$ME addcolor '$file'")
fi fi
out2+=("^sep()") out3+=("^sep()")
out2+=("<b>Edit</b> palette file,xdg-open '$file'") out3+=("<b>Edit</b> palette file,xdg-open '$file'")
out2+=("^sep(Danger zone...)") out3+=("^sep(Danger zone...)")
out2+=("<b>Delete</b> palette: ${palette^},^checkout($tagname-del)") out3+=("<b>Delete</b> palette: ${palette^},^checkout($tagname-del)")
out3+=("^tag($tagname-del)") out4+=("^tag($tagname-del)")
out3+=("^sep(Are you sure?)") out4+=("^sep(Are you sure?)")
out3+=("Yes,rm '$file';$ME") out4+=("Yes,rm '$file';$ME")
fi fi
done done
#if [[ $# = 0 ]] ; then #if [[ $# = 0 ]] ; then
if [[ -n "$1" ]] ; then if [[ -n "$1" ]] ; then
out1+=("^sep()") out2+=("^sep()")
out1+=("<b>Add new</b> palette...,$ME newpalette;$ME") out2+=("<b>Add new</b> palette...,$ME newpalette;$ME")
out1+=("Open palette directory,xdg-open $CNF_DIR/palettes/my/") out2+=("Open palette directory,xdg-open $CNF_DIR/palettes/my/")
fi fi
} }
if [ $htmlcolors = "yes" ] && [ $expose != "html" ]; then if [ $htmlcolors = "yes" ]; then
htmlroot="^sep() htmlroot="^sep()
<b>HTML</b> colors,^checkout(html) <b>HTML</b> colors,^checkout(html)
" "
@ -189,76 +194,7 @@ position() {
center|*) POSITION_MODE="center";; center|*) POSITION_MODE="center";;
esac esac
} }
mkconfigfile() {
if [[ -f /usr/share/mbxtools/configure.inc ]];then
. /usr/share/mbxtools/configure.inc
elif [[ -f /usr/share/mb-jgtools/pipemenu-standalone.cfg ]];then
. /usr/share/mb-jgtools/pipemenu-standalone.cfg
. $HOME/.config/mabox/mabox.conf
else
MENU_ITEMS=$(mktemp)
CONFIG_FILE=$(mktemp)
cat <<EOF > ${CONFIG_FILE}
position_mode = ${POSITION_MODE:-center}
menu_halign = ${MENU_HALIGN:-center}
menu_valign = ${MENU_VALIGN:-center}
csv_cmd = apps
stay_alive = 0
hide_back_items = ${HIDE_BACK_ITEMS:-0}
terminal_exec = terminator
terminal_args = -e
tabs = ${TABS:-220}
menu_border = ${jgtools_border:-0}
# MENU MARGIN
menu_margin_x = ${menu_margin_x:-0}
menu_margin_y = ${panels_topmargin:-0}
sub_spacing = ${submenu_spacing:-2}
menu_width = $JGWIDTH
menu_height_min = ${MENU_HEIGHT_MIN:-0}
menu_height_max = ${MENU_HEIGHT_MAX:-0}
menu_padding_top = ${MENU_PADDING_TOP:-70}
menu_padding_right = ${jgtools_padding:-0}
menu_padding_bottom = ${jgtools_padding:-0}
menu_padding_left = ${jgtools_padding:-0}
menu_radius = ${MENU_RADIUS:-0}
#item_height = ${jgmenu_item_height:-30}
#item_halign = ${ITEM_HALIGN:-left}
#item_padding_x = 4
#item_margin_x = ${item_margin_x:-0}
item_margin_y = ${item_margin_y:-0}
#item_radius = ${item_radius:-2}
#item_border = ${item_border:-0}
columns = ${COLUMNS:-1}
menu_gradient_pos = ${menu_gradient_pos:- none}
#color_menu_bg = ${color_menu_bg:-#222222 80}
#color_menu_bg_to = ${color_menu_bg_to:- #000000 100}
#color_menu_border = ${color_menu_border:-#2f9b85 100}
#color_norm_bg = ${color_norm_bg:-#000000 0}
#color_norm_fg = ${color_norm_fg:-#CCCCCC 100}
#color_sel_bg = ${color_sel_bg:-#169f6f 60}
#color_sel_fg = ${color_sel_fg:-#f8f8f8 100}
#color_sel_border = ${color_sel_border:-#504e65 100}
#color_sep_fg = ${color_sep_fg:-#4D4D4D 100}
#color_sep_bg = ${color_sep_bg:-#262626 100}
#color_title_fg = ${color_title_fg:-#4D4D4D 100}
#color_title_border = ${color_title_border:-#169f6f 100}
#color_title_bg = ${color_title_bg:-#262626 100}
#color_scroll_ind = ${COLOR_SCROLL_IND:-#504e65 100}
sep_markup = weight="bold"
sep_height = ${sep_height:-5}
#font = ${jgmenu_font:-Noto Sans Medium 9}
icon_size = ${jgmenu_icon_size:-16}
icon_theme = ${jgmenu_icon_theme:-Numix-Square}
EOF
fi
}
main () { main () {
# Mabox Linux # Mabox Linux
if [[ -f /usr/share/mb-jgtools/pipemenu-standalone.cfg ]];then if [[ -f /usr/share/mb-jgtools/pipemenu-standalone.cfg ]];then
@ -290,21 +226,12 @@ out+=("<b>Add</b> color from selector...,$ME addcolor")
fi fi
# exposed thing # exposed thing
case "$expose" in case "$expose" in
html)
htmlroot=". ${CNF_DIR}/htmlsub.csv"
htmlsub=". ${CNF_DIR}/htmlclrs.csv"
htmlclrs=""
;;
palette) palette)
pal=$(cat "$CNF_DIR/.palette") pal=$(cat "$CNF_DIR/.palette")
filename=${pal##*/} filename=${pal##*/}
palette=${filename%.*} palette=${filename%.*}
out+=("^sep(<i><span font_weight='light'>Last used palette</span> ${palette^}</i>)") out+=("^sep(<i><span font_weight='light'>Last used palette</span> ${palette^}</i>)")
while read -r color name;do while read -r color name;do
#name=$(printf "%22s %s\n" "$name")
#fg=$(fgcolor $color)
#out+=("<tt><span bgcolor='$color' fgcolor='$fg'><sub> </sub>$color<sup>$name</sup></span></tt>,$ME getcolorcode '$color'")
out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'") out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
done < "${pal}" done < "${pal}"
;; ;;
@ -313,17 +240,13 @@ case "$expose" in
if (( ${#MAPFILE[@]} > 1 )); then if (( ${#MAPFILE[@]} > 1 )); then
out+=("^sep(<i><small>Recently used colors:</small></i>)") out+=("^sep(<i><small>Recently used colors:</small></i>)")
while read -r color name;do while read -r color name;do
#name=$(printf "%22s %s\n" "$name")
#fg=$(fgcolor $color)
#out+=("<tt><span bgcolor='$color' fgcolor='$fg'><sub> </sub>$color<sup>$name</sup></span></tt>,$ME getcolorcode '$color'")
out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'") out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
#out2+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,sed -i '/${color:1:6}/d' $USED;$ME")
done < <(grep ^# $USED) done < <(grep ^# $USED)
out+=("^sep()") out+=("^sep()")
out+=("<b>Clear</b> recently used colors,echo > $USED;$ME") out+=("<b>Clear</b> recently used colors,echo > $USED;$ME")
fi fi
;; ;;
picked|*) picked)
mapfile -t < $RECENT mapfile -t < $RECENT
if (( ${#MAPFILE[@]} > 1 )); then if (( ${#MAPFILE[@]} > 1 )); then
out+=("^sep(<i><small>Recently picked colors:</small></i>)") out+=("^sep(<i><small>Recently picked colors:</small></i>)")
@ -333,30 +256,76 @@ case "$expose" in
out2+=("<b>Clear</b> all,echo > $RECENT;$ME") out2+=("<b>Clear</b> all,echo > $RECENT;$ME")
out2+=("^sep(Just remove one color...)") out2+=("^sep(Just remove one color...)")
while read -r color name;do while read -r color name;do
# name=$(printf "%22s %s\n" "$name")
# fg=$(fgcolor $color)
# out+=("<tt><span bgcolor='$color' fgcolor='$fg'><sub> </sub>$color<sup>$name</sup></span></tt>,$ME getcolorcode '$color'")
out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'") out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
out2+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,sed -i '/${color:1:6}/d' $RECENT;$ME") out2+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,sed -i '/${color:1:6}/d' $RECENT;$ME")
#echo "<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,sed '/${color:1:6}/d' $RECENT;$ME"
done < <(grep ^# $RECENT) done < <(grep ^# $RECENT)
out+=("^sep()") out+=("^sep()")
out+=("<b>New palette</b> from recently picked,$ME recent2palette;$ME") out+=("<b>New palette</b> from recently picked,$ME recent2palette;$ME")
#out+=("<b>Clear</b> recently picked,echo > $RECENT;$ME")
out+=("<b>Clear</b> recently picked,^checkout(pickeddel)") out+=("<b>Clear</b> recently picked,^checkout(pickeddel)")
fi fi
;; ;;
wallpaper)
read WALLPAPER<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg | cut -d'=' -f2")
WALLPALDIR="$HOME/.config/mbxcolors/palettes/wallp"
mkdir -p "$WALLPALDIR"
read WALLPATH<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg" | cut -d'=' -f2)
WALLPAPER=${WALLPATH##*/}
if [ ! -f "$WALLPALDIR/$WALLPAPER.clr" ]; then
convert ${WALLPATH} -resize 25% -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print $3}' > "$WALLPALDIR/$WALLPAPER.clr"
fi
#mapfile -t wallcolors < "$WALLPALDIR/$WALLPAPER.clr"
out+=("^sep(Wallpaper colors)")
while read -r color name;do
out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
done < "$WALLPALDIR/$WALLPAPER.clr"
;;
*)
if [ -f "$DATA_DIR/palettes/$expose" ];then
palfile="$DATA_DIR/palettes/$expose"
elif [ -f "$CNF_DIR/palettes/my/$expose" ];then
palfile="$CNF_DIR/palettes/my/$expose"
fi
if [ $palfile ];then
palette=${expose%.*}
pal=${palette//_/ }
out+=("^sep(Palette: ${pal^})")
while read -r color name;
do
out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt>,$ME getcolorcode '$color' '$file';$ME setvar expose=palette,,,#${palette}")
done < "$palfile"
fi
;;
esac esac
#if [[ "$CNF_DIR"/palettes/my/*.clr ]]; then #if [[ "$CNF_DIR"/palettes/my/*.clr ]]; then
out+=("^sep(Color palettes)")
if [ "$(find "$CNF_DIR"/palettes/my/*.clr -maxdepth 1 -type f -iname \*.clr)" ]; then if [ "$(find "$CNF_DIR"/palettes/my/*.clr -maxdepth 1 -type f -iname \*.clr)" ]; then
out1+=("^sep(My palletes)") out+=("My palettes,^checkout(mypalettes)")
palettes my palettes my
fi fi
if [[ $builtin_palettes == "yes" ]];then if [[ $builtin_palettes == "yes" ]];then
out1+=("^sep(Built-in palettes)") out+=("Built-in palettes,^checkout(builtpalettes)")
palettes palettes
fi fi
# WALLPAPER COLORS
out+=("Current Wallpaper colors,^checkout(wallcolors)")
read WALLPAPER<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg | cut -d'=' -f2")
WALLPALDIR="$HOME/.config/mbxcolors/palettes/wallp"
mkdir -p "$WALLPALDIR"
read WALLPATH<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg" | cut -d'=' -f2)
WALLPAPER=${WALLPATH##*/}
if [ ! -f "$WALLPALDIR/$WALLPAPER.clr" ]; then
convert ${WALLPATH} -resize 25% -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print $3}' > "$WALLPALDIR/$WALLPAPER.clr"
fi
#mapfile -t wallcolors < "$WALLPALDIR/$WALLPAPER.clr"
out2+=("^tag(wallcolors)")
out2+=("^sep(Current wallpaper colors)")
out2+=("EXPOSE_IN_ROOTMENU ,$ME setvar expose=wallpaper;$ME")
while read -r color name;do
out2+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub> <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
done < "$WALLPALDIR/$WALLPAPER.clr"
out1+=("^sep(Settings)") out1+=("^sep(Settings)")
out1+=("Preferences,^pipe($ME preferences)") out1+=("Preferences,^pipe($ME preferences)")
@ -373,6 +342,7 @@ $(printf '%s\n' "${out2[@]}")
${htmlclrs} ${htmlclrs}
$(printf '%s\n' "${out3[@]}") $(printf '%s\n' "${out3[@]}")
$(printf '%s\n' "${out4[@]}")
EOF EOF
jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null
#printf '%s\n' "${out3[@]}" #printf '%s\n' "${out3[@]}"
@ -415,7 +385,7 @@ out2+=("^sep(Show on top of rootmenu)")
out2+=("<b>picked</b> recently picked colors,$ME setvar expose=picked;$ME") out2+=("<b>picked</b> recently picked colors,$ME setvar expose=picked;$ME")
out2+=("<b>used</b> recently used colors,$ME setvar expose=used;$ME") out2+=("<b>used</b> recently used colors,$ME setvar expose=used;$ME")
out2+=("<b>palette</b> recently used palette,$ME setvar expose=palette;$ME") out2+=("<b>palette</b> recently used palette,$ME setvar expose=palette;$ME")
out2+=("<b>html</b> HTML Colors,$ME setvar expose=html;$ME") out2+=("<b>wallpaper</b> colors ,$ME setvar expose=wallpaper;$ME")
out2+=("^tag(showhtml)") out2+=("^tag(showhtml)")
out2+=("^sep(Show HTML colors?)") out2+=("^sep(Show HTML colors?)")