diff --git a/bin/mbxcolors b/bin/mbxcolors index 81ea5d7..14a2b48 100755 --- a/bin/mbxcolors +++ b/bin/mbxcolors @@ -5,7 +5,7 @@ # TODO export to .gpl (GIMP,Inkscape) # TODO PL translation -VERSION="0.3.1" +VERSION="0.9.0" TEMP_DIR=/tmp/colormenu ME=${0##*/} @@ -26,6 +26,8 @@ action=copy expose=picked #Show HTML colors? yes|no htmlcolors=yes +#Color picker (gpick or xcolor) +picker=gpick #Show built in palettes? (slow) builtin_palettes=yes #Position on screen: topleft, top, topright, left, center, right, bottomleft, bottom, bottomright @@ -56,11 +58,14 @@ hex2rgba() { echo "rgba($r, $g, $b, 1.0)" } pickcolor() { - #color=$(colorpicker --short --one-shot --preview) - #color=$(xcolor --preview-size "${preview-size:-255}" --scale "${scale:-8}") size=${xcolor_preview_size:-255} scale=${xcolor_scale:-8} + picker=${picker:-gpick} + if [ "$picker" == "gpick" ]; then + command="gpick -pso 2>/dev/null" + else command="xcolor --preview-size ${size} --scale ${scale}" + fi color="$(${command})" if [ -n "${color}" ]; then echo "$color " > "$RECENT".tmp @@ -103,7 +108,7 @@ getcolorcode() { mkdir -p $TEMP_DIR FNAME="$TEMP_DIR/${1:1:6}.png" convert -size 100x100 xc:"$1" "$FNAME" - notify-send ColorMenu "$clr" --icon="$FNAME" --expire-time=120000 + notify-send ColorMenu "$clr copied to clipboard" --icon="$FNAME" --expire-time=120000 fi echo "$1" > "$USED".tmp # add on top and deduplicate @@ -126,10 +131,10 @@ palettes() { [ -n "$1" ] && pdir="$CNF_DIR/palettes/my/" || pdir="$DATA_DIR/palettes/" if [[ -n "$1" ]]; then out2+=("^tag(mypalettes)") - out2+=("^sep(My palettes)") + out2+=("^sep($MYPALETTES)") else out2+=("^tag(builtpalettes)") - out2+=("^sep(Built-in palettes)") + out2+=("^sep($BUILTIN_PAL)") fi for file in "$pdir"*.clr ;do filename=${file##*/} @@ -139,7 +144,7 @@ palettes() { out2+=("${pal^},^checkout($tagname)") out3+=("^tag($tagname)") out3+=("^sep(${pal^})") - out3+=("EXPOSE_IN_ROOTMENU,$ME setvar expose=$filename;$ME") + out3+=("$EXPOSE_IN_ROOTMENU,$ME setvar expose=$filename;$ME") out3+=("^sep()") while read -r color name; do @@ -169,16 +174,6 @@ palettes() { fi } -if [ $htmlcolors = "yes" ]; then -htmlroot="^sep() -HTML colors,^checkout(html) -" -htmlsub="^tag(html) -. ${DATA_DIR}/htmlsub.csv" -htmlclrs=". ${DATA_DIR}/htmlclrs.csv" -else -htmlroot="" htmlsub="" htmlclrs="" -fi position() { case "$position" in ipc) POSITION_MODE="ipc";; @@ -191,17 +186,67 @@ position() { 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";; + center|*) POSITION_MODE="center" MENU_VALIGN="center" MENU_HALIGN="center";; esac } main () { -# Mabox Linux 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" + PICK_FROM_SCREEN="Pobierz kolor z ekranu..." + ADD_FROM_SELECTOR="Dodaj kolor..." + LASTUSED_PAL="Ostatnio używana paleta" + RECENTLYUSED="Ostatnio użyte kolory" + RECENTLYPICKED="Ostatnio dodane kolory" + CLEAR_ALL="Usuń wszystkie" + CLEAR_ALL2="Usuń wszystkie" + CLEAR_RECUSED="Usuń ostatnio użyte kolory" + NEWPAL_FROMREC="Nowa paleta z ostatnio dodanych" + CLEAR_RECPICKED="Usuń ostatnio dodane" + REMOVEONE="Usuń tylko jeden kolor..." + WALLCOLORS="Kolory z tapety" + IMAGICKCOLORS="Kolory Image Magick" + HTMLCOLORS="Kolory HTML" + PALETTE="Paleta:" + COLORPALETTES="Palety kolorów" + MYPALETTES="Moje palety" + BUILTIN_PAL="Wbudowane palety" + EXPOSE_IN_ROOTMENU="Pokaż w menu głównym" + SETTINGS="Ustawienia" + PREFERENCES="Konfiguruj..." + QUIT="Wyjdź" + ;; + *) + COLORMENU="ColorMenu" + PICK_FROM_SCREEN="Pick color from screen..." + ADD_FROM_SELECTOR="Add color from selector..." + LASTUSED_PAL="Last used palette" + RECENTLYUSED="Recently used colors" + RECENTLYPICKED="Recently picked colors" + CLEAR_ALL="Clear All" + CLEAR_ALL2="Clear all" + CLEAR_RECUSED="Clear recently used colors" + NEWPAL_FROMREC="New palette from recently picked" + CLEAR_RECPICKED="Clear recently picked" + REMOVEONE="Just remove one color..." + WALLCOLORS="Wallpaper colors" + IMAGICKCOLORS="Image Magick Colors" + HTMLCOLORS="HTML colors" + PALETTE="Palette:" + COLORPALETTES="Color palettes" + MYPALETTES="My palettes" + BUILTIN_PAL="Built-in palettes" + EXPOSE_IN_ROOTMENU="Expose in rootmenu" + SETTINGS="Settings" + PREFERENCES="Preferences" + QUIT="Quit" + ;; +esac [ "$1" = "ipc" ] && position="ipc" MENU_PADDING_TOP=${jgtools_padding:-0} @@ -213,16 +258,15 @@ menu_margin_x=${submenu_spacing:-0} #jgmenu_font="Noto Sans Medium 10" position - mkconfigfile trap "rm -f ${CONFIG_FILE} ${MENU_ITEMS}" EXIT -out+=("^sep(ColorMenu [$action $format])") +out+=("^sep($COLORMENU [$action $format])") #out+=("^sep( mbx colors [$action $format])") -out+=("Pick color from screen...,$ME pickcolor") +out+=("$PICK_FROM_SCREEN,$ME pickcolor") if hash gcolor3 2>/dev/null; then out+=("^sep()") -out+=("Add color from selector...,$ME addcolor") +out+=("$ADD_FROM_SELECTOR,$ME addcolor") fi # exposed thing case "$expose" in @@ -230,7 +274,7 @@ case "$expose" in pal=$(cat "$CNF_DIR/.palette") filename=${pal##*/} palette=${filename%.*} - out+=("^sep(Last used palette ${palette^})") + out+=("^sep($LASTUSED_PAL ${palette^})") while read -r color name;do out+=("$color ,$ME getcolorcode '$color'") done < "${pal}" @@ -238,23 +282,23 @@ case "$expose" in used) mapfile -t < $USED if (( ${#MAPFILE[@]} > 1 )); then - out+=("^sep(Recently used colors:)") + out+=("^sep($RECENTLYUSED)") while read -r color name;do out+=("$color ,$ME getcolorcode '$color'") done < <(grep ^# $USED) out+=("^sep()") - out+=("Clear recently used colors,echo > $USED;$ME") + out+=("$CLEAR_RECUSED,echo > $USED;$ME") fi ;; picked) mapfile -t < $RECENT if (( ${#MAPFILE[@]} > 1 )); then - out+=("^sep(Recently picked colors:)") + out+=("^sep($RECENTLYPICKED)") # for clear/delete out2+=("^tag(pickeddel)") - out2+=("^sep(Clear All)") - out2+=("Clear all,echo > $RECENT;$ME") - out2+=("^sep(Just remove one color...)") + out2+=("^sep($CLEAR_ALL)") + out2+=("$CLEAR_ALL2,echo > $RECENT;$ME") + out2+=("^sep($REMOVEONE)") while read -r color name;do out+=("$color ,$ME getcolorcode '$color'") @@ -262,8 +306,8 @@ case "$expose" in done < <(grep ^# $RECENT) out+=("^sep()") - out+=("New palette from recently picked,$ME recent2palette;$ME") - out+=("Clear recently picked,^checkout(pickeddel)") + out+=("$NEWPAL_FROMREC,$ME recent2palette;$ME") + out+=("$CLEAR_RECPICKED,^checkout(pickeddel)") fi ;; wallpaper) @@ -276,7 +320,7 @@ case "$expose" in 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)") + out+=("^sep($WALLCOLORS)") while read -r color name;do out+=("$color ,$ME getcolorcode '$color'") done < "$WALLPALDIR/$WALLPAPER.clr" @@ -290,7 +334,7 @@ case "$expose" in if [ $palfile ];then palette=${expose%.*} pal=${palette//_/ } - out+=("^sep(Palette: ${pal^})") + out+=("^sep($PALETTE ${pal^})") while read -r color name; do out+=("$color ,$ME getcolorcode '$color' '$file';$ME setvar expose=palette,,,#${palette}") @@ -300,17 +344,17 @@ case "$expose" in esac #if [[ "$CNF_DIR"/palettes/my/*.clr ]]; then -out+=("^sep(Color palettes)") +out+=("^sep($COLORPALETTES)") if [ "$(find "$CNF_DIR"/palettes/my/*.clr -maxdepth 1 -type f -iname \*.clr)" ]; then -out+=("My palettes,^checkout(mypalettes)") +out+=("$MYPALETTES,^checkout(mypalettes)") palettes my fi if [[ $builtin_palettes == "yes" ]];then -out+=("Built-in palettes,^checkout(builtpalettes)") +out+=("$BUILTIN_PAL,^checkout(builtpalettes)") palettes fi # WALLPAPER COLORS -out+=("Current Wallpaper colors,^checkout(wallcolors)") +out+=("$WALLCOLORS,^checkout(wallcolors)") read WALLPAPER<<< $(grep file "$HOME/.config/nitrogen/bg-saved.cfg | cut -d'=' -f2") WALLPALDIR="$HOME/.config/mbxcolors/palettes/wallp" mkdir -p "$WALLPALDIR" @@ -321,17 +365,29 @@ if [ ! -f "$WALLPALDIR/$WALLPAPER.clr" ]; then fi #mapfile -t wallcolors < "$WALLPALDIR/$WALLPAPER.clr" out2+=("^tag(wallcolors)") -out2+=("^sep(Current wallpaper colors)") -out2+=("EXPOSE_IN_ROOTMENU ,$ME setvar expose=wallpaper;$ME") +out2+=("^sep($WALLCOLORS)") +out2+=("$EXPOSE_IN_ROOTMENU ,$ME setvar expose=wallpaper;$ME") out2+=("^sep()") while read -r color name;do out2+=("$color ,$ME getcolorcode '$color'") done < "$WALLPALDIR/$WALLPAPER.clr" - -out1+=("^sep(Settings)") -out1+=("Preferences,^pipe($ME preferences)") +out1+=("$IMAGICKCOLORS,mbxcolors imagick") +out1+=("^sep($SETTINGS)") +out1+=("$PREFERENCES,^pipe($ME preferences)") out1+=("^sep()") -out1+=("QUIT,^quit()") +out1+=("$QUIT,^quit()") + +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[@]}") @@ -351,55 +407,158 @@ exit 0 } imagick() { - echo "not implemented" + 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+12)) +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,mbxcolors") +out+=("^sep()") + +while read -r color name;do + out+=("$color $name ,$ME getcolorcode '$color'") +done < "$DATA_DIR/imagick.txt" + + cat << EOF > ${MENU_ITEMS} +@search,,25,15,292,20,4,left,top,auto,#262626,""" $TYPE_TO_SEARCH""" +$(printf '%s\n' "${out[@]}") + +EOF +jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null } preferences() { -out2+=("^sep(Settings)") +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="paste (wklej natychmiast)" + COPY="copy (kopiuj do schowka)" + SHOW_IN_ROOT="Pokazuj w menu głównym" + PICKED="picked ostatnio dodane kolory" + USED="used ostatnio użyte kolory" + PALETTE="palette ostatnio użyta paleta" + WALLPAPER="wallpaper 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="paste (paste color immediately)" + COPY="copy (copy color to clipboard)" + SHOW_IN_ROOT="Show on top of rootmenu" + PICKED="picked recently picked colors" + USED="used recently used colors" + PALETTE="palette recently used palette" + WALLPAPER="wallpaper colors" + COLORPICKER="Color Picker" + POS="Position on screen" + ;; +esac -out2+=("$(printf "%-20s %20s" "Color click action:" "[$action]"),^checkout(action)") +out2+=("^sep($SETTINGS)") +out2+=("$(printf "%-20s %20s" "$CLICK_ACTION" "[$action]"),^checkout(action)") out2+=("$(printf "%-20s %20s" "Format:" "[$format]"),^checkout(format)") out2+=("^sep()") -out2+=("$(printf "%-20s %20s" "Expose on top:" "[$expose]"),^checkout(expose)") -out2+=("$(printf "%-20s %20s" "HTML colors:" "[$htmlcolors]"),^checkout(showhtml)") -out2+=("$(printf "%-20s %20s" "Built-in palettes:" "[$builtin_palettes]"),^checkout(builtinpalettes)") +out2+=("$(printf "%-20s %20s" "$EXPOSE" "[$expose]"),^checkout(expose)") +out2+=("$(printf "%-20s %20s" "$HTMLCOLORS:" "[$htmlcolors]"),^checkout(showhtml)") +out2+=("$(printf "%-20s %20s" "$BUILTIN" "[$builtin_palettes]"),^checkout(builtinpalettes)") +out2+=("$(printf "%-20s %20s" "$PICKER" "[$picker]"),^checkout(picker)") out2+=("^sep()") -out2+=("$(printf "%-20s %20s" "Position:" "[$position]"),^checkout(position)") +out2+=("$(printf "%-20s %20s" "$POSITION" "[$position]"),^checkout(position)") out2+=("^sep()") -out2+=("Reset to defaults,rm $CNF_FILE;$ME") +out2+=("$RESET,rm $CNF_FILE;$ME") out2+=("^sep()") -out2+=("Edit config file,xdg-open $CNF_FILE") -out2+=("Open config directory,xdg-open $CNF_DIR") +out2+=("$EDIT_CONF,xdg-open $CNF_FILE") +out2+=("$OPEN_DIR,xdg-open $CNF_DIR") out2+=("^tag(format)") -out2+=("^sep(Output format)") +out2+=("^sep($OUTFORMAT)") out2+=("hex #579C8E,$ME setvar format=hex;$ME") out2+=("rgb rgb(87, 156, 142),$ME setvar format=rgb;$ME") out2+=("rgba rgba(87, 156, 142, 1.0),$ME setvar format=rgba;$ME") out2+=("^tag(action)") -out2+=("^sep(Color action)") -out2+=("paste (paste color immediately),$ME setvar action=paste;$ME") -out2+=("copy (copy color to clipboard),$ME setvar action=copy;$ME") +out2+=("^sep($CLICK_ACTION)") +out2+=("$PASTE,$ME setvar action=paste;$ME") +out2+=("$COPY,$ME setvar action=copy;$ME") out2+=("^tag(expose)") -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+=("wallpaper colors ,$ME setvar expose=wallpaper;$ME") +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(Show HTML colors?)") +out2+=("^sep($HTML)") out2+=("yes,$ME setvar htmlcolors=yes;$ME") out2+=("no,$ME setvar htmlcolors=no;$ME") out2+=("^tag(builtinpalettes)") -out2+=("^sep(Show Built-in palettes?)") +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(Position on screen)") +out2+=("^sep($POS)") out2+=("center,$ME setvar position=center;$ME") out2+=("topleft,$ME setvar position=topleft;$ME") out2+=("top,$ME setvar position=top;$ME") diff --git a/share/applications/mbxcolors-imagick.desktop b/share/applications/mbxcolors-imagick.desktop new file mode 100644 index 0000000..26a9ff6 --- /dev/null +++ b/share/applications/mbxcolors-imagick.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Image Magick colors +Name[pl]=Kolory Image Magick +Comment=Image Magick colors picker +Keywords= +StartupNotify=false +Icon=mbxcolors +TryExec=mbxcolors imagick +Exec=mbxcolors imagick +Categories=Graphics; +#NoDisplay=true diff --git a/share/applications/mbxcolors.desktop b/share/applications/mbxcolors.desktop index 10aa96d..fe10e4d 100644 --- a/share/applications/mbxcolors.desktop +++ b/share/applications/mbxcolors.desktop @@ -1,7 +1,8 @@ [Desktop Entry] Version=1.0 Type=Application -Name=MBX Colors +Name=ColorMenu +Name[pl]=Menu Kolorów Comment=Pick, paste and manage colors Keywords= StartupNotify=false