From bd1fb9ed40478db594c2de93c2be54d91813af4e Mon Sep 17 00:00:00 2001 From: Daniel Napora Date: Fri, 22 Apr 2022 18:46:38 +0200 Subject: [PATCH] wallpaper colors and other improvements --- bin/mbxcolors | 208 +++++++++++++++++++++----------------------------- 1 file changed, 89 insertions(+), 119 deletions(-) diff --git a/bin/mbxcolors b/bin/mbxcolors index 28c71cf..0d1faed 100755 --- a/bin/mbxcolors +++ b/bin/mbxcolors @@ -3,10 +3,9 @@ # Dependencies: jgmenu, xdotool, xcolor, gcolor3, xdg-utils, xclip, notify-send # TODO Imagick colors - separate menu big around 700 named colors # TODO export to .gpl (GIMP,Inkscape) -# TODO Current Wallpaper palette # TODO PL translation -VERSION="0.2.6" +VERSION="0.3.0" TEMP_DIR=/tmp/colormenu 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 expose=picked #Show HTML colors? yes|no -htmlcolors=no +htmlcolors=yes #Show built in palettes? (slow) -builtin_palettes=no +builtin_palettes=yes #Position on screen: topleft, top, topright, left, center, right, bottomleft, bottom, bottomright position=left EOF @@ -125,46 +124,52 @@ newpalette() { } palettes() { [ -n "$1" ] && pdir="$CNF_DIR/palettes/my/" || pdir="$DATA_DIR/palettes/" - for file in "$pdir"*.clr;do + 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 filename=${file##*/} palette=${filename%.*} pal=${palette//_/ } tagname=${palette// /_} - out1+=("${pal^},^checkout($tagname)") - out2+=("^tag($tagname)") - out2+=("^sep(${pal^})") + out2+=("${pal^},^checkout($tagname)") + out3+=("^tag($tagname)") + out3+=("^sep(${pal^})") + out3+=("EXPOSE_ON_ROOTMENU,$ME setvar expose=$filename;$ME") + out3+=("^sep()") while read -r color name; do - #name=$(printf "%22s %s\n" "$name") - #fg=$(fgcolor $color) - #out2+=(" $color$name ,$ME getcolorcode '$color' '$file',,,#${palette}") - out2+=("$color ,$ME getcolorcode '$color' '$file';$ME setvar expose=palette,,,#${palette}") + out3+=("$color ,$ME getcolorcode '$color' '$file',,,#${palette}") done < "$file" if [[ -n "$1" ]] ; then - out2+=("^sep()") - out2+=("Add color... from screen,$ME pickcolor '$file'") + out3+=("^sep()") + out3+=("Add color... from screen,$ME pickcolor '$file'") if hash gcolor3 2>/dev/null; then - out2+=("^sep()") - out2+=("Add color from selector...,$ME addcolor '$file'") + out3+=("^sep()") + out3+=("Add color from selector...,$ME addcolor '$file'") fi - out2+=("^sep()") - out2+=("Edit palette file,xdg-open '$file'") - out2+=("^sep(Danger zone...)") - out2+=("Delete palette: ${palette^},^checkout($tagname-del)") - out3+=("^tag($tagname-del)") - out3+=("^sep(Are you sure?)") - out3+=("Yes,rm '$file';$ME") + out3+=("^sep()") + out3+=("Edit palette file,xdg-open '$file'") + out3+=("^sep(Danger zone...)") + out3+=("Delete palette: ${palette^},^checkout($tagname-del)") + out4+=("^tag($tagname-del)") + out4+=("^sep(Are you sure?)") + out4+=("Yes,rm '$file';$ME") fi done #if [[ $# = 0 ]] ; then if [[ -n "$1" ]] ; then - out1+=("^sep()") - out1+=("Add new palette...,$ME newpalette;$ME") - out1+=("Open palette directory,xdg-open $CNF_DIR/palettes/my/") + out2+=("^sep()") + out2+=("Add new palette...,$ME newpalette;$ME") + out2+=("Open palette directory,xdg-open $CNF_DIR/palettes/my/") fi } -if [ $htmlcolors = "yes" ] && [ $expose != "html" ]; then +if [ $htmlcolors = "yes" ]; then htmlroot="^sep() HTML colors,^checkout(html) " @@ -189,76 +194,7 @@ position() { center|*) POSITION_MODE="center";; 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 < ${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 () { # Mabox Linux if [[ -f /usr/share/mb-jgtools/pipemenu-standalone.cfg ]];then @@ -290,21 +226,12 @@ out+=("Add color from selector...,$ME addcolor") fi # exposed thing case "$expose" in - - html) - htmlroot=". ${CNF_DIR}/htmlsub.csv" - htmlsub=". ${CNF_DIR}/htmlclrs.csv" - htmlclrs="" - ;; palette) pal=$(cat "$CNF_DIR/.palette") filename=${pal##*/} palette=${filename%.*} out+=("^sep(Last used palette ${palette^})") while read -r color name;do - #name=$(printf "%22s %s\n" "$name") - #fg=$(fgcolor $color) - #out+=(" $color$name,$ME getcolorcode '$color'") out+=("$color ,$ME getcolorcode '$color'") done < "${pal}" ;; @@ -313,17 +240,13 @@ case "$expose" in if (( ${#MAPFILE[@]} > 1 )); then out+=("^sep(Recently used colors:)") while read -r color name;do - #name=$(printf "%22s %s\n" "$name") - #fg=$(fgcolor $color) - #out+=(" $color$name,$ME getcolorcode '$color'") out+=("$color ,$ME getcolorcode '$color'") - #out2+=("$color ,sed -i '/${color:1:6}/d' $USED;$ME") done < <(grep ^# $USED) out+=("^sep()") out+=("Clear recently used colors,echo > $USED;$ME") fi ;; - picked|*) + picked) mapfile -t < $RECENT if (( ${#MAPFILE[@]} > 1 )); then out+=("^sep(Recently picked colors:)") @@ -333,30 +256,76 @@ case "$expose" in out2+=("Clear all,echo > $RECENT;$ME") out2+=("^sep(Just remove one color...)") while read -r color name;do - # name=$(printf "%22s %s\n" "$name") - # fg=$(fgcolor $color) - # out+=(" $color$name,$ME getcolorcode '$color'") + out+=("$color ,$ME getcolorcode '$color'") out2+=("$color ,sed -i '/${color:1:6}/d' $RECENT;$ME") - #echo "$color ,sed '/${color:1:6}/d' $RECENT;$ME" done < <(grep ^# $RECENT) - + out+=("^sep()") out+=("New palette from recently picked,$ME recent2palette;$ME") - #out+=("Clear recently picked,echo > $RECENT;$ME") out+=("Clear recently picked,^checkout(pickeddel)") 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+=("$color ,$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+=("$color ,$ME getcolorcode '$color' '$file';$ME setvar expose=palette,,,#${palette}") + done < "$palfile" + fi + ;; + esac #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 -out1+=("^sep(My palletes)") +out+=("My palettes,^checkout(mypalettes)") palettes my fi if [[ $builtin_palettes == "yes" ]];then -out1+=("^sep(Built-in palettes)") +out+=("Built-in palettes,^checkout(builtpalettes)") palettes 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+=("$color ,$ME getcolorcode '$color'") +done < "$WALLPALDIR/$WALLPAPER.clr" out1+=("^sep(Settings)") out1+=("Preferences,^pipe($ME preferences)") @@ -373,6 +342,7 @@ $(printf '%s\n' "${out2[@]}") ${htmlclrs} $(printf '%s\n' "${out3[@]}") +$(printf '%s\n' "${out4[@]}") EOF jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null #printf '%s\n' "${out3[@]}" @@ -415,7 +385,7 @@ out2+=("^sep(Show on top of rootmenu)") out2+=("picked recently picked colors,$ME setvar expose=picked;$ME") out2+=("used recently used colors,$ME setvar expose=used;$ME") out2+=("palette recently used palette,$ME setvar expose=palette;$ME") -out2+=("html HTML Colors,$ME setvar expose=html;$ME") +out2+=("wallpaper colors ,$ME setvar expose=wallpaper;$ME") out2+=("^tag(showhtml)") out2+=("^sep(Show HTML colors?)")