#!/bin/bash
# Copyright (C) Daniel Napora 2021-25 <dnapora@maboxlinux.org>
# Dependencies: jgmenu, xdotool, gcolor3, gpick, pastel, xdg-utils, xclip, notify-send
# TODO export to .gpl (GIMP,Inkscape)

VERSION="1.0.4"
TEMP_DIR=/tmp/colormenu
ME=${0##*/}

DATA_DIR="/usr/share/$ME"
CNF_DIR="$HOME/.config/colormenu"
CNF_FILE="$CNF_DIR/colormenu.cfg"
RECENT="$CNF_DIR/recent.clr"
USED="$CNF_DIR/.used"
LASTPAL="$CNF_DIR/.palette"
[ ! -d "$CNF_DIR/palettes/my" ] && mkdir -p "$CNF_DIR/palettes/my" 
if [ ! -f $CNF_FILE ]; then
cat <<EOF > ${CNF_FILE}
# Paste mode: hex,rgb or rgba
format=hex
#Action when color is clicked: paste (imadietely) or copy (to clipboard)
action=copy
#What thing to expose on top of main menu: recently picked colors, last used colors or last used palette
expose=wallpaper
#Show HTML colors? yes|no
htmlcolors=yes
#Show built in palettes? (slow)
builtin_palettes=yes
# Random wallpaper dir
walldir=/usr/share/backgrounds
#Position on screen: topleft, top, topright, left, center, right, bottomleft, bottom, bottomright
position=left
EOF
fi
source <(grep = $CNF_FILE)

RANDWALLDIR=${walldir:-/usr/share/backgrounds}

if [ ! -f $RECENT ]; then
cat <<EOF > ${RECENT}
#FFFFFF White
#C0C0C0 Silver
#808080 Gray
#000000 Black
EOF
fi

fgcolor() {
    r=$(printf "%d" 0x${1:1:2}) g=$(printf "%d" 0x${1:3:2}) b=$(printf "%d" 0x${1:5:2})
    [ "$((r*299+g*587+b*114))" -gt 149000 ] && echo "#111111" || echo "#EEEEEE"
}
hex2rgb() {
    r=$(printf "%d" 0x${1:1:2}) g=$(printf "%d" 0x${1:3:2}) b=$(printf "%d" 0x${1:5:2})
    echo "rgb($r, $g, $b)"
}
hex2rgba() {
    r=$(printf "%d" 0x${1:1:2}) g=$(printf "%d" 0x${1:3:2}) b=$(printf "%d" 0x${1:5:2})
    echo "rgba($r, $g, $b, 1.0)"
}
pickcolor() {
    picker=${picker:-gpick}
    command="gpick -pso 2>/dev/null"
    color="$(${command})"
    if [ -n "${color}" ]; then
    echo "$color " > "$RECENT".tmp
    # add on top deduplicate
    awk '!x[$0]++' "$RECENT" >> "$RECENT".tmp
    awk '!x[$0]++' "$RECENT".tmp > "$RECENT"
    [ -n "$1" ] && file="$1"
    echo "$color " >> "$file"
    setvar expose=picked
    fi
    colormenu
}

addcolor() {
    color=$(gcolor3 2>/dev/null)
    if [ -n "${color}" ]; then
    echo "$color " > "$RECENT".tmp
    # add on top deduplicate
    awk '!x[$0]++' "$RECENT" >> "$RECENT".tmp
    awk '!x[$0]++' "$RECENT".tmp > "$RECENT"
    [ -n "$1" ] && file="$1"
    echo "$color " >> "$file"
    setvar expose=picked
    fi
    $ME
}
getcolorcode() {
    if [ $action = "paste" ];then
        case "$format" in
        rgb) clr=$(hex2rgb $1);xdotool type --delay 0 "$clr";;
        rgba) clr=$(hex2rgba $1);xdotool type --delay 0 "$clr";;
        *) xdotool type --delay 0 "$1";;
        esac
    else  # copy to clipboard
        case "$format" in
        rgb) clr=$(hex2rgb $1);echo $clr | tr -d "\n" | xclip -sel c;;
        rgba) clr=$(hex2rgba $1);echo $clr | tr -d "\n" | xclip -sel c;;
        *) clr="$1";echo "$1" | tr -d "\n" | xclip -sel c;;
        esac
        mkdir -p $TEMP_DIR
        FNAME="$TEMP_DIR/${1:1:6}.png"
        convert -size 100x100 xc:"$1" "$FNAME"
        notify-send ColorMenu "$clr copied to clipboard" --icon="$FNAME" --expire-time=120000
    fi
    echo "$1" > "$USED".tmp
    # add on top and deduplicate
    awk '!x[$0]++' "$USED" >> "$USED".tmp
    awk '!x[$0]++' "$USED".tmp > "$USED"
    
    [[ $2 ]] && echo "$2" > "$LASTPAL"
}
recent2palette () {
    DATE=$(date +"%Y%m%d-%H%M%S")
    mkdir -p "$CNF_DIR/palettes/my"
    #grep ^# $RECENT |tac > "$CNF_DIR/palettes/my/My_palette_$DATE.clr"
    grep ^# $RECENT |awk '{ print $1 }'| pastel sort-by brightness|pastel format hex > "$CNF_DIR/palettes/my/My_palette_$DATE.clr"
}
newpalette() {
    DATE=$(date +"%Y%m%d-%H%M%S")
    mkdir -p "$CNF_DIR/palettes/my"
    touch "$CNF_DIR/palettes/my/My_palette_$DATE.clr"
}
palettes() {
    [ -n "$1" ] && pdir="$CNF_DIR/palettes/my/" || pdir="$DATA_DIR/palettes/"
    if [[ -n "$1" ]]; then
    out2+=("^tag(mypalettes)")
    out2+=("^sep($MYPALETTES)")
    else
    out2+=("^tag(builtpalettes)")
    out2+=("^sep($BUILTIN_PAL)")
    fi
    for file in "$pdir"*.clr ;do
    filename=${file##*/}
    palette=${filename%.*}
    pal=${palette//_/ }
    tagname=${palette// /_}
    out2+=("${pal^},^checkout($tagname)")
    out3+=("^tag($tagname)")
    out3+=("^sep(${pal^})")
    out3+=("$EXPOSE_IN_ROOTMENU,$ME setvar expose=$filename;$ME")
    out3+=("^sep()")
    while read -r color name;
    do
    out3+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub>                 <sup> </sup></span></tt>,$ME getcolorcode '$color' '$file',,,#${palette}")
    done < "$file"
    if [[ -n "$1" ]] ; then
    out3+=("^sep()")
    out3+=("$PICK_FROM_SCREEN,$ME pickcolor '$file'")
        if hash gcolor3 2>/dev/null; then
            out3+=("^sep()")
            out3+=("$ADD_FROM_SELECTOR,$ME addcolor '$file'")
        fi
    out3+=("^sep()")
    out3+=("$EDIT_PALFILE,xdg-open '$file'")
    out3+=("^sep($DANGER_ZONE)")
    out3+=("$DELETE_PAL ${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
    out2+=("^sep()")
    out2+=("$ADD_NEW_PAL,$ME newpalette;$ME")
    out2+=("$OPEN_PALDIR,xdg-open $CNF_DIR/palettes/my/")
    fi
}

position() {
    case "$position" in
        ipc) POSITION_MODE="ipc";;
        pointer) POSITION_MODE="pointer";;
        topleft) POSITION_MODE="fixed" MENU_VALIGN="top" MENU_HALIGN="left";;
        top) POSITIOM_MODE="fixed" MENU_VALIGN="top" MENU_HALIGN="center";;
        topright) POSITION_MODE="fixed" MENU_VALIGN="top" MENU_HALIGN="right";;
        left) POSITION_MODE="fixed" MENU_VALIGN="center" MENU_HALIGN="left";;
        right) POSITION_MODE="fixed" MENU_VALIGN="center" MENU_HALIGN="right";;
        bottomleft) POSITION_MODE="fixed" MENU_VALIGN="bottom" MENU_HALIGN="left";;
        bottom) POSITION_MODE="fixed" MENU_VALIGN="bottom" MENU_HALIGN="center";;
        bottomright) POSITION_MODE="fixed" MENU_VALIGN="bottom" MENU_HALIGN="right";;
        center|*) POSITION_MODE="center" MENU_VALIGN="center" MENU_HALIGN="center";;
    esac
}

main () {
if [[ -f /usr/share/mb-jgtools/pipemenu-standalone.cfg ]];then
. /usr/share/mb-jgtools/pipemenu-standalone.cfg
. $HOME/.config/mabox/mabox.conf
fi 
case $LANG in
    pl*)
    COLORMENU="Menu kolorów"
    COPY_COLOR_CODE="Kopiuj kod koloru"
    ACTION="Działanie"
    COLLECT_COLORS="Dodaj kolory"
    PICK_FROM_SCREEN="<b>Pobierz</b> kolor z ekranu..."
    ADD_FROM_SELECTOR="<b>Dodaj</b> kolor..."
    LASTUSED_PAL="Ostatnio używana paleta"
    RECENTLYUSED="Ostatnio użyte kolory"
    RECENTLYPICKED="Ostatnio dodane kolory"
    CLEAR_ALL="Usuń wszystkie"
    CLEAR_ALL2="<b>Usuń</b> wszystkie"
    CLEAR_RECUSED="<b>Usuń</b> ostatnio użyte kolory"
    NEWPAL_FROMREC="<b>Nowa paleta</b> z ostatnio dodanych"
    CLEAR_RECPICKED="<b>Usuń</b> ostatnio dodane"
    REMOVEONE="Usuń tylko jeden kolor..."
    WALLCOLORS="Kolory z tapety"
    RANDWALL="Ustaw <b>losową tapetę</b>"
    IMAGICKCOLORS="Kolory <b>Image Magick</b>"
    HTMLCOLORS="Kolory <b>HTML</b>"
    PALETTE="Paleta:"
    COLORPALETTES="Palety kolorów"
    MYPALETTES="Moje palety"
    ADD_NEW_PAL="<b>Dodaj nową</b> paletę..."
    OPEN_PALDIR="Otwórz katalog z paletami"
    EDIT_PALFILE="<b>Edytuj</b> plik palety"
    DANGER_ZONE="Usuwanie..."
    DELETE_PAL="<b>Usuń</b> paletę:"
    ARE_YOU_SURE="Jesteś pewien?"
    YES="Tak"
    BUILTIN_PAL="Wbudowane palety"
    EXPOSE_IN_ROOTMENU="Pokaż w menu głównym"
    SETTINGS="Ustawienia"
    PREFERENCES="Konfiguruj..."
    HELP="Pomoc"
    ;;
    *)
    COLORMENU="ColorMenu"
    COPY_COLOR_CODE="Copy Color Code"
    ACTION="Action"
    COLLECT_COLORS="Collect Colors"
    PICK_FROM_SCREEN="<b>Pick</b> color from screen..."
    ADD_FROM_SELECTOR="<b>Add</b> color from selector..."
    LASTUSED_PAL="Last used palette"
    RECENTLYUSED="Recently used colors"
    RECENTLYPICKED="Recently picked colors"
    CLEAR_ALL="Clear All"
    CLEAR_ALL2="<b>Clear</b> all"
    CLEAR_RECUSED="<b>Clear</b> recently used colors"
    NEWPAL_FROMREC="<b>New palette</b> from recently picked"
    CLEAR_RECPICKED="<b>Clear</b> recently picked"
    REMOVEONE="Just remove one color..."
    WALLCOLORS="Wallpaper colors"
    RANDWALL="Set <b>random wallpaper</b>"
    IMAGICKCOLORS="<b>Image Magick</b> Colors"
    HTMLCOLORS="<b>HTML</b> colors"
    PALETTE="Palette:"
    COLORPALETTES="Color palettes"
    MYPALETTES="My palettes"
    ADD_NEW_PAL="<b>Add new</b> palette..."
    OPEN_PALDIR="Open palette directory"
    EDIT_PALFILE="<b>Edit</b> palette file"
    DANGER_ZONE="Danger zone..."
    DELETE_PAL="<b>Delete</b> palette:"
    ARE_YOU_SURE="Are you sure?"
    YES="Yes"
    BUILTIN_PAL="Built-in palettes"
    EXPOSE_IN_ROOTMENU="Expose in rootmenu"
    SETTINGS="Settings"
    PREFERENCES="Preferences"
    HELP="About and Help"
    ;;
esac
[ "$1" = "ipc" ] && position="ipc"

MENU_PADDING_TOP=${jgtools_padding:-0}
JGWIDTH="220"
ITEM_HALIGN="center"
jgmenu_icon_size=0
menu_margin_x=${submenu_spacing:-0}
[ $(pidof picom) ] && MENU_RADIUS=$jgtools_radius
#jgmenu_font="Noto Sans Medium 10"

position
mkconfigfile

trap "rm -f ${CONFIG_FILE} ${MENU_ITEMS}" EXIT
out+=("^sep($COLORMENU)")
out+=("^sep()")
out+=("^sep($COLLECT_COLORS...)")
out+=("$PICK_FROM_SCREEN,$ME pickcolor")
if hash gcolor3 2>/dev/null; then
out+=("^sep()")
out+=("$ADD_FROM_SELECTOR,$ME addcolor")
fi


out+=("^sep($ACTION: [$action $format])")
# exposed thing
case "$expose" in
    palette)
        pal=$(cat "$CNF_DIR/.palette")
        filename=${pal##*/}
        palette=${filename%.*}
        out+=("^sep(<i><span font_weight='light'>$LASTUSED_PAL</span> ${palette^}</i>)")
        while read -r color name;do
            out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub>                  <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
        done < "${pal}"
        ;;
    used)
        mapfile -t < $USED
        if (( ${#MAPFILE[@]} > 1 )); then
        out+=("^sep(<i><small>$RECENTLYUSED</small></i>)")
        while read -r color name;do
            out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub>                  <sup> </sup></span></tt> ,$ME getcolorcode '$color'")
        done < <(grep ^# $USED)
        out+=("^sep()")
        out+=("$CLEAR_RECUSED,echo > $USED;$ME")
        fi
    ;;
    picked)
        mapfile -t < $RECENT
        if (( ${#MAPFILE[@]} > 1 )); then
        out+=("^sep(<i><small>$RECENTLYPICKED</small></i>)")
        # for clear/delete 
        out2+=("^tag(pickeddel)")
        out2+=("^sep($CLEAR_ALL)")
        out2+=("$CLEAR_ALL2,echo > $RECENT;$ME")
        out2+=("^sep($REMOVEONE)")
        while read -r color name;do
        
            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")
        done < <(grep ^# $RECENT)
              
        out+=("^sep()")
        out+=("$NEWPAL_FROMREC,$ME recent2palette;$ME")
        out+=("$CLEAR_RECPICKED,^checkout(pickeddel)")
        fi
        ;;
    wallpaper)
        WALLPALDIR="$HOME/.config/colormenu/palettes/wallp"
        mkdir -p "$WALLPALDIR"
        read WALLPATH<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg" |tail -1| cut -d'=' -f2)
        NAME=${WALLPATH////_}
if [[ "${NAME}" =~ ^_home_.* ]]; then
n=${#HOME}
((n++))
NAME=${NAME:${n}}
fi
ext="${WALLPATH##*.}"
#notify-send.sh "Extension" "$ext"

if [ ! -f "$WALLPALDIR/${NAME}.clr" ]; then
	if [ "$ext" == "avif" ];then
	magick ${WALLPATH} -resize 25% /tmp/out.jpg
	magick /tmp/out.jpg -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print substr($3,1,7)}' |pastel sort-by brightness |pastel format hex > "$WALLPALDIR/$NAME.clr"
	else
	magick ${WALLPATH} -resize 25% -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print substr($3,1,7)}' |pastel sort-by brightness |pastel format hex > "$WALLPALDIR/$NAME.clr"
	fi
fi
        
        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/$NAME.clr"
        out+=("^sep()")
        out+=("$RANDWALL,mbwallpaper -o;$ME")
        ;;
    *)
        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(<i><small>$PALETTE ${pal^}</small></i>)")
        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
#if [[ "$CNF_DIR"/palettes/my/*.clr ]]; then
out+=("^sep($COLORPALETTES)")
if [ "$(find "$CNF_DIR"/palettes/my/*.clr -maxdepth 1 -type f -iname \*.clr 2>/dev/null)" ]; then
out+=("$MYPALETTES,^checkout(mypalettes)")
palettes my
fi
if [[ $builtin_palettes == "yes" ]];then
out+=("$BUILTIN_PAL,^checkout(builtpalettes)")
palettes
fi
# WALLPAPER COLORS
if [ "$expose" != "wallpaper" ];then
out+=("$WALLCOLORS,^checkout(wallcolors)")
read WALLPAPER<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg | tail -1|cut -d'=' -f2")
WALLPALDIR="$HOME/.config/colormenu/palettes/wallp"
mkdir -p "$WALLPALDIR"
read WALLPATH<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg" |tail -1| cut -d'=' -f2)
WALLPAPER=${WALLPATH##*/}
if [ ! -f "$WALLPALDIR/$WALLPAPER.clr" ]; then
   convert ${WALLPATH} -resize 25% -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print substr($3,1,7)}' |pastel sort-by brightness |pastel format hex > "$WALLPALDIR/$WALLPAPER.clr"
fi
        #mapfile -t wallcolors < "$WALLPALDIR/$WALLPAPER.clr"
out2+=("^tag(wallcolors)")
out2+=("^sep($WALLCOLORS)")
out2+=("$EXPOSE_IN_ROOTMENU ,$ME setvar expose=wallpaper;$ME")
out2+=("^sep()")
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"
out2+=("^sep()")
out2+=("$RANDWALL,mbwallpaper -o;$ME setvar expose=wallpaper;$ME")
fi

out1+=("$IMAGICKCOLORS,colormenu imagick")



out1+=("^sep($SETTINGS)")
out1+=("$PREFERENCES,^pipe($ME preferences)")

out1+=("^sep()")
LNG=${LANG:0:2}
if [[ -f "/usr/share/colormenu/help/$LNG.html" ]];then
out1+=("$HELP,yhtml /usr/share/colormenu/help/$LNG.html 'Mabox Help - ColorMenu'")
else
out1+=("$HELP,yhtml /usr/share/colormenu/help/en.html 'Mabox Help - ColorMenu'")
fi


if [ $htmlcolors = "yes" ]; then
htmlroot="^sep()
${HTMLCOLORS},^checkout(html)
"
htmlsub="^tag(html)
. ${DATA_DIR}/htmlsub.csv"
htmlclrs=". ${DATA_DIR}/htmlclrs.csv"
else
htmlroot="" htmlsub="" htmlclrs=""
fi


cat << EOF > ${MENU_ITEMS}
$(printf '%s\n' "${out[@]}")
${htmlroot}

$(printf '%s\n' "${out1[@]}")
${htmlsub}
$(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[@]}"
exit 0
}

imagick() {
 if [[ -f /usr/share/mb-jgtools/pipemenu-standalone.cfg ]];then
. /usr/share/mb-jgtools/pipemenu-standalone.cfg
. $HOME/.config/mabox/mabox.conf
fi 
case $LANG in
    pl*) TYPE_TO_SEARCH="pisz aby wyszukać"
    IMAGICKCOLORS="Kolory Image Magick"
    BACK="Wróć do Menu Kolorów"
    ;;
    *) TYPE_TO_SEARCH="type to search"
    IMAGICKCOLORS="Image Magick Colors"
    BACK="Back to ColorMenu"
    ;;
esac
#MENU_PADDING_TOP=${jgtools_padding:-24}
MENU_PADDING_TOP=$((jgtools_padding+24))
JGWIDTH="300"
ITEM_HALIGN="center"
jgmenu_icon_size=0
menu_margin_x=${submenu_spacing:-0}
[ $(pidof picom) ] && MENU_RADIUS=$jgtools_radius
jgmenu_font="Noto Sans Medium 12"
MENU_HALIGN="center"
MENU_VALIGN="center"
TABS="280"
icons=0
iconmargin=0
item_height_factor=240
MENU_HEIGHT_MAX=480
mkconfigfile

trap "rm -f ${CONFIG_FILE} ${MENU_ITEMS}" EXIT  

out+=("^sep($IMAGICKCOLORS)")
out+=("$BACK,colormenu")
out+=("^sep()")

while read -r color name;do
        out+=("<tt><small>$color</small> <span bgcolor='$color'><sub> </sub>                  <sup> </sup></span> $name</tt> ,$ME getcolorcode '$color'")
done < "$DATA_DIR/imagick.txt"

 cat << EOF > ${MENU_ITEMS}
@search,,$((jgtools_padding + 32)),$((jgtools_padding + 4)),292,20,4,left,top,auto,#262626,"""<big></big> <i>$TYPE_TO_SEARCH</i>"""
$(printf '%s\n' "${out[@]}")

EOF
jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null
}
preferences() {
case $LANG in
    pl*)
    SETTINGS="Ustawienia"
    CLICK_ACTION="Akcja po kliknięciu w kolor:"
    EXPOSE="Pokaż w menu głównym:"
    HTMLCOLORS="Kolory HTML:"
    HTML="Pokaż kolory HTML?"
    BUILTIN="Wbudowane palety:"
    BUILT="Pokaż wbudowane palety?"
    PICKER="Pobieranie kolorów z ekranu:"
    POSITION="Pozycja:"
    RESET="Zresetuj ustawienia"
    EDIT_CONF="Edytuj plik konfiguracyjny"
    OPEN_DIR="Otwórz katalog z konfiguracją"
    OUTFORMAT="Format wyjściowy"
    PASTE="<b>paste</b>   (wklej natychmiast)"
    COPY="<b>copy</b>    (kopiuj do schowka)"
    SHOW_IN_ROOT="Pokazuj w menu głównym"
    PICKED="<b>picked</b> ostatnio dodane kolory"
    USED="<b>used</b> ostatnio użyte kolory"
    PALETTE="<b>palette</b> ostatnio użyta paleta"
    WALLPAPER="<b>wallpaper</b> kolory z tapety"
    COLORPICKER="Pobieracz kolorów"
    POS="Pozycja na ekranie"
    ;;
    *)
    SETTINGS="Settings"
    CLICK_ACTION="Color click action:"
    EXPOSE="Expose in rootmenu:"
    HTMLCOLORS="HTML colors:"
    HTML="Show HTML colors?"
    BUILTIN="Built-in palettes:"
    BUILT="Show Built-in palettes?"
    PICKER="Color picker:"
    POSITION="Position:"
    RESET="Reset to defaults"
    EDIT_CONF="Edit config file"
    OPEN_DIR="Open config directory"
    OUTFORMAT="Output format"
    PASTE="<b>paste</b>   (paste color immediately)"
    COPY="<b>copy</b>    (copy color to clipboard)"
    SHOW_IN_ROOT="Show on top of rootmenu"
    PICKED="<b>picked</b> recently picked colors"
    USED="<b>used</b> recently used colors"
    PALETTE="<b>palette</b> recently used palette"
    WALLPAPER="<b>wallpaper</b> colors"
    COLORPICKER="Color Picker"
    POS="Position on screen"
    ;;
esac

out2+=("^sep($SETTINGS)")
out2+=("<tt>$(printf "%-20s %20s" "$CLICK_ACTION" "[<b>$action</b>]")</tt>,^checkout(action)")
out2+=("<tt>$(printf "%-20s %20s" "Format:" "[<b>$format</b>]")</tt>,^checkout(format)")
out2+=("^sep()")
out2+=("<tt>$(printf "%-20s %20s" "$EXPOSE" "[<b>$expose</b>]")</tt>,^checkout(expose)")
out2+=("<tt>$(printf "%-20s %20s" "$HTMLCOLORS" "[<b>$htmlcolors</b>]")</tt>,^checkout(showhtml)")
out2+=("<tt>$(printf "%-20s %20s" "$BUILTIN" "[<b>$builtin_palettes</b>]")</tt>,^checkout(builtinpalettes)")
#out2+=("<tt>$(printf "%-20s %20s" "$PICKER" "[<b>$picker</b>]")</tt>,^checkout(picker)")
out2+=("^sep()")
out2+=("<tt>$(printf "%-20s %20s" "$POSITION" "[<b>$position</b>]")</tt>,^checkout(position)")
out2+=("^sep()")
out2+=("$RESET,rm $CNF_FILE;$ME")
out2+=("^sep()")
out2+=("$EDIT_CONF,xdg-open $CNF_FILE")
out2+=("$OPEN_DIR,xdg-open $CNF_DIR")

out2+=("^tag(format)")
out2+=("^sep($OUTFORMAT)")
out2+=("<b>hex</b>        <i>#579C8E</i>,$ME setvar format=hex;$ME")
out2+=("<b>rgb</b>        <i>rgb(87&#44; 156&#44; 142)</i>,$ME setvar format=rgb;$ME")
out2+=("<b>rgba</b>      <i>rgba(87&#44; 156&#44; 142&#44; 1.0)</i>,$ME setvar format=rgba;$ME")

out2+=("^tag(action)")
out2+=("^sep($CLICK_ACTION)")
out2+=("$PASTE,$ME setvar action=paste;$ME")
out2+=("$COPY,$ME setvar action=copy;$ME")

out2+=("^tag(expose)")
out2+=("^sep($SHOW_IN_ROOT)")
out2+=("$PICKED,$ME setvar expose=picked;$ME")
out2+=("$USED,$ME setvar expose=used;$ME")
out2+=("$PALETTE,$ME setvar expose=palette;$ME")
out2+=("$WALLPAPER,$ME setvar expose=wallpaper;$ME")

out2+=("^tag(showhtml)")
out2+=("^sep($HTML)")
out2+=("yes,$ME setvar htmlcolors=yes;$ME")
out2+=("no,$ME setvar htmlcolors=no;$ME")

out2+=("^tag(builtinpalettes)")
out2+=("^sep($BUILT)")
out2+=("yes,$ME setvar builtin_palettes=yes;$ME")
out2+=("no,$ME setvar builtin_palettes=no;$ME")

#out2+=("^tag(picker)")
#out2+=("^sep($COLORPICKER)")
#out2+=("gpick,$ME setvar picker=gpick;$ME")
#out2+=("xcolor,$ME setvar picker=xcolor;$ME")


out2+=("^tag(position)")
out2+=("^sep($POS)")
out2+=("center,$ME setvar position=center;$ME")
out2+=("topleft,$ME setvar position=topleft;$ME")
out2+=("top,$ME setvar position=top;$ME")
out2+=("topright,$ME setvar position=topright;$ME")
out2+=("left,$ME setvar position=left;$ME")
out2+=("right,$ME setvar position=right;$ME")
out2+=("bottomleft,$ME setvar position=bottomleft;$ME")
out2+=("bottom,$ME setvar position=bottom;$ME")
out2+=("bottomright,$ME setvar position=bottomright;$ME")
printf '%s\n' "${out2[@]}"
}
setvar() {
    search=$(echo $1|cut -d= -f1)
    FILE=${CNF_FILE}
    if grep -Rq $search $FILE
    then #found
        sed -i s/^"$search".*$/"$1"/ $FILE
    else #not found
    echo $1 >> $FILE
fi
}

case "$1" in
    -h|--help|help) usage;;
    --pickcolor|pickcolor) pickcolor "$2";;
    --addcolor|addcolor) addcolor "$2" ;;
    -g|--getcolorcode|getcolorcode) getcolorcode "$2" "$3";;
    -p|preferences) preferences;;
    -s|setvar) setvar "$2";;
    ipc) main "$1";;
    recent2palette) recent2palette ;;
    newpalette) newpalette;;
    imagick) imagick;;
     *) main;;
esac
exit 0
