diff --git a/bin/colorizer-conky b/bin/colorizer-conky index 0e86836..0a57ae7 100755 --- a/bin/colorizer-conky +++ b/bin/colorizer-conky @@ -34,6 +34,9 @@ case "$LANG" in NO_CONKY_RUNNING="Brak uruchomionych Conky" RUN_CONKY_SESSION="Uruchom zapisaną sesję" MOVEABLEALL="Ustaw wszystkie (przeciągaj)..." + NOT_FULLY_SUPPORTED="Częściowo wspierane..." + UNSUPPORTED="Conky - częściowo wspierane" + UNSUPPORTED_START="kliknij aby uruchomić" GENERATEFROMWP="Generuj z kolorów tapety" LIGHTBG="Jasne tło" DARKBG="Ciemne tło" @@ -74,6 +77,9 @@ case "$LANG" in NO_CONKY_RUNNING="No Conky running" RUN_CONKY_SESSION="Run Conky session" MOVEABLEALL="Make moveable all..." + NOT_FULLY_SUPPORTED="Partially supported" + UNSUPPORTED="partially supported Conkies" + UNSUPPORTED_START="click to start" GENERATEFROMWP="Generate from wallpaper colors" LIGHTBG="Light Background" DARKBG="Dark Background" @@ -102,7 +108,7 @@ case "$LANG" in RUNNING_CONKIES="Running Conkys" STOP_ALL="Stop All" MORECONKIES="More Conkies Available" - CLICKTOSTART="click to start" + CLICKTOSTART="...click to start" STARTALL="Start all" RESET="Reset" RESETALL="Reset all to defaults" @@ -155,8 +161,9 @@ if pgrep -af "conky.*mbcolor" >/dev/null; then # array with running conkies - only filenames with full path readarray -t running < <(pgrep -af "conky -c " | cut -d' ' -f4) - #array with all supported conkies - for i in "$CONKYDIR"/*.con* "$CONKYDIR"/**/*.con*; do + #array with all conkies found + #for i in "$CONKYDIR"/*.con* "$CONKYDIR"/**/*.con*; do + for i in "$CONKYDIR"/*.conkyrc "$CONKYDIR"/*.conf "$CONKYDIR"/**/*.conkyrc "$CONKYDIR"/**/*.conf; do if [[ "$i" == *mbcolor* ]];then supported+=("$i") else @@ -170,40 +177,60 @@ if pgrep -af "conky.*mbcolor" >/dev/null; then notstarted=($(echo ${running[@]} ${supported[@]} ${unsupported[@]} ${unsupported[@]}| tr ' ' '\n' | sort | uniq -u)) notstarted_unsupported=($(echo ${running[@]} ${supported[@]} ${supported[@]} ${unsupported[@]} | tr ' ' '\n' | sort | uniq -u)) - + RCONKIES="${#running[@]}" + NSCONKIES="${#notstarted[@]}" + ALLSUPP=$(($RCONKIES+$NSCONKIES)) + #notify-send.sh "$ALLSUPP" "$RCONKIES $NSCONKIES" if [[ ${#running[@]} > 0 ]];then out+=("^sep($RUNNING_CONKIES)") for c in ${running[@]};do filename=${c##*/} name=${filename%%_mb*} - title=${name//_/ } + name2=${name%%.con*} + title=${name2//_/ } out+=("${title^},^pipe(conkyctl single ${c})") done out+=("^sep()") out+=("$STOP_ALL (${#running[@]}),conky_toggle;sleep .5;$me") fi if [[ ${#notstarted[@]} > 0 ]];then - out+=("^sep($MORECONKIES)") + out+=("^sep($MORECONKIES)") + if [[ "$ALLSUPP" < 15 ]];then out+=("^sep($CLICKTOSTART)") for c in ${notstarted[@]};do - filename=${c##*/} - name=${filename%%_mb*} - title=${name//_/ } - out+=("${title^},conkyctl startone ${c};$me") + filename=${c##*/} + name=${filename%%_mb*} + title=${name//_/ } + out+=("${title^},conkyctl startone ${c};$me") done if [[ ${#notstarted[@]} > 1 ]];then out+=("^sep()") out+=("$STARTALL (${#notstarted[@]}),conkyctl startall;$me") fi + else # too many conkies - not started go to submenu + out+=("$CLICKTOSTART (${#notstarted[@]}),^checkout(nstarted)") + out2+=("^tag(nstarted)") + for c in ${notstarted[@]};do + filename=${c##*/} + name=${filename%%_mb*} + title=${name//_/ } + out2+=("${title^},conkyctl startone ${c};$me") + done + if [[ ${#notstarted[@]} > 1 ]];then + out2+=("^sep()") + out2+=("$STARTALL (${#notstarted[@]}),conkyctl startall;$me") + fi + fi fi if [[ ${#notstarted_unsupported[@]} > 0 ]];then out+=("^sep()") - out+=("UNSUPPORTED,^checkout(unsup)") + out+=("$NOT_FULLY_SUPPORTED (${#notstarted_unsupported[@]}),^checkout(unsup)") out2+=("^tag(unsup)") - out2+=("^sep(UNSUPPORTED)") + out2+=("^sep($UNSUPPORTED)") + out2+=("^sep($UNSUPPORTED_START)") for c in ${notstarted_unsupported[@]};do filename=${c##*/} - name=${filename%%_mb*} + name=${filename%%.con*} title=${name//_/ } out2+=("${title^},conkyctl startone ${c};$me") done diff --git a/bin/colorizer-pyradio b/bin/colorizer-pyradio index 48d6f5c..bfb0522 100755 --- a/bin/colorizer-pyradio +++ b/bin/colorizer-pyradio @@ -66,7 +66,7 @@ read MB1 MB2 MBFG<<< "$(grep '^Messages Border ' ${THEMERC})" out+=("^sep($COLORIZE_PYRADIO)") #out+=("$START_PYRADIO,terminator --geometry=420x440-20-20 -e pyradio") - out+=("$INFO,notify-send.sh -i music '$INFO_HEAD' '$INFO_TXT' -t 20000") + out+=(" $INFO,notify-send.sh -i music '$INFO_HEAD' '$INFO_TXT' -t 20000") out+=("^sep($GENERATEFROMWP)") out+=("$LIGHTBG,w2theme pyradio light;$me") out+=("$DARKBG,w2theme pyradio dark;$me") @@ -113,13 +113,13 @@ read MB1 MB2 MBFG<<< "$(grep '^Messages Border ' ${THEMERC})" out+=("^sep($CONFIG_AND_DOCS)") #out+=("PyRadio README,cat /usr/share/doc/pyradio/README.html| yad --html --no-buttons --no-escape --height=800 --width=600") - out+=(" $README,xdg-open /usr/share/doc/pyradio/README.html") - out+=(" $MANUAL,^term(man pyradio)") + out+=(" $README,xdg-open /usr/share/doc/pyradio/README.html") + out+=(" $MANUAL,^term(man pyradio)") out+=("^sep()") - out+=(" $EDITCONF,xdg-open ~/.config/pyradio/config") - out+=(" $EDITSTATIONS,xdg-open ~/.config/pyradio/stations.csv") + out+=(" $EDITCONF,xdg-open ~/.config/pyradio/config") + out+=(" $EDITSTATIONS,xdg-open ~/.config/pyradio/stations.csv") out+=("^sep()") - out+=(" $CONFIGDIR,^pipe(jgbrowser ~/.config/pyradio)") + out+=(" $CONFIGDIR,^pipe(jgbrowser ~/.config/pyradio)") ### RUN diff --git a/bin/conkyctl b/bin/conkyctl index 86657a5..fcb3318 100755 --- a/bin/conkyctl +++ b/bin/conkyctl @@ -155,28 +155,28 @@ pos () { ### jak po środku to wyzerować gaps case "$1" in top_left|top_right|bottom_left|bottom_right) - sd "gap_x .*=.*,$" "gap_x = ${def_x}," ${2} - sd "gap_y .*=.*,$" "gap_y = ${def_y}," ${2} + sd "gap_x .*=.*," "gap_x = ${def_x}," ${2} + sd "gap_y .*=.*," "gap_y = ${def_y}," ${2} ;; top_middle|bottom_middle) - sd "gap_x .*=.*,$" "gap_x = 0," ${2} - sd "gap_y .*=.*,$" "gap_y = ${def_y}," ${2} + sd "gap_x .*=.*," "gap_x = 0," ${2} + sd "gap_y .*=.*," "gap_y = ${def_y}," ${2} ;; middle_left|middle_right) - sd "gap_x .*=.*,$" "gap_x = ${def_x}," ${2} - sd "gap_y .*=.*,$" "gap_y = 0," ${2} + sd "gap_x .*=.*," "gap_x = ${def_x}," ${2} + sd "gap_y .*=.*," "gap_y = 0," ${2} ;; middle_middle) - sd "gap_x .*=.*,$" "gap_x = 0," ${2} - sd "gap_y .*=.*,$" "gap_y = 0," ${2} + sd "gap_x .*=.*," "gap_x = 0," ${2} + sd "gap_y .*=.*," "gap_y = 0," ${2} ;; esac } gap_x () { - sd "gap_x .*=.*,$" "gap_x = ${1}," ${2} + sd "gap_x .*=.*," "gap_x = ${1}," ${2} } gap_y () { - sd "gap_y .*=.*,$" "gap_y = ${1}," ${2} + sd "gap_y .*=.*," "gap_y = ${1}," ${2} } setpos () { filename=${1##*/} @@ -310,13 +310,15 @@ saveposall () { while read -r WIN_ID b c X Y rest do conffile=$(xprop -id $WIN_ID |grep WM_COMMAND |cut -d'"' -f6) - pos top_left ${conffile} - #notify-send.sh -t 10000 "${X} ${Y}" "${conffile}" - # improve conky margin calculation here: gap = border_width + border_inner_margin + border_outer_margin - ((X=X+17)) - ((Y=Y+17)) - gap_x ${X} ${conffile} - gap_y ${Y} ${conffile} + if [[ "$conffile" = *"mbcolor"* ]];then + pos top_left ${conffile} + #notify-send.sh -t 10000 "${X} ${Y}" "${conffile}" + # improve conky margin calculation here: gap = border_width + border_inner_margin + border_outer_margin + ((X=X+17)) + ((Y=Y+17)) + gap_x ${X} ${conffile} + gap_y ${Y} ${conffile} + fi done < <(wmctrl -lpG | grep '1 0 ') makedesktoptypeall } @@ -345,6 +347,10 @@ resetcolorsone () { languages () { case "$LANG" in pl*) + UNSUPPORTED="częściowo wspierane!!!" + OLD_SYNTAX_DETECTED=" stara składnia! wykryta..." + CONVERT_OLD="Czy spróbować skonwertować?" + CONVERT_OLD_TRY="Tak, spróbuj konwertować" POSITION="Pozycja" MAKEMOVEABLE="Ustaw wszystkie (poprzez przeciąganie)..." MARKNEWPOS="Nowa pozycja (zaznacz na ekranie)..." @@ -401,6 +407,10 @@ languages () { MOUNTPOINTS="Dyski (punkty montowania)" ;; es*) + UNSUPPORTED="partially supported!!!" + OLD_SYNTAX_DETECTED=" old syntax!!! detected..." + CONVERT_OLD="Try to convert to new syntax?" + CONVERT_OLD_TRY="Yes, try to convert" POSITION="Position" MAKEMOVEABLE="Make moveable all..." MARKNEWPOS="New position (mark on the screen)..." @@ -457,6 +467,10 @@ languages () { MOUNTPOINTS="Discs (mount points)" ;; *) + UNSUPPORTED="partially supported!!!" + OLD_SYNTAX_DETECTED=" old syntax!!! detected..." + CONVERT_OLD="Try to convert to new syntax?" + CONVERT_OLD_TRY="Yes, try to convert" POSITION="Position" MAKEMOVEABLE="Make moveable all..." MARKNEWPOS="New position (mark on the screen)..." @@ -516,10 +530,15 @@ languages () { } single () { + unset NOT_SUPPORTED OLD_SYNTAX + languages filename=${1##*/} name=${filename%%_mb*} title=${name//_/ } + + grep -q "conky.text" "$1" && : || OLD_SYNTAX="true" + # breaks mbclr color picking from contextmenu, leave it as "colorizer-conky -s" for now if [[ "$2" == "s" ]];then me="none none" @@ -560,11 +579,18 @@ single () { if [[ "$filename" == *"mbcolor"* ]];then out+=("^sep(Conky: [ ${title^} ])") else + NOT_SUPPORTED="true" out+=("^sep(Conky: [ ${title^} ]") - out+=("^sep( unsupported!!! )") - + out+=("^sep( ${UNSUPPORTED} )") fi +if [[ "$OLD_SYNTAX" = "true" ]];then + out+=("$OLD_SYNTAX_DETECTED,^checkout(oldsyntax)") + out2+=("^tag(oldsyntax)") + out2+=("^sep($CONVERT_OLD)") + out2+=("\"\"\"$CONVERT_OLD_TRY\"\"\",conkyctl convert_from_old ${1}") + #notify-send.sh "Plik" "${1}" + else out+=(" $POSITION,^checkout(position)") if [[ "$1" =~ "etwork_mbcolor" ]]; then out+=("$NOT_WORKING,conkyctl netdevice") @@ -598,8 +624,11 @@ single () { for i in 0 10 20 30 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360; do out3+=("${i},conkyctl gap_y ${i} ${1};$me") done + if [[ "$NOT_SUPPORTED" != "true" ]];then out2+=("^sep()") out2+=(" $MAKEMOVEABLE,conkyctl makemoveableall") + fi + if [[ "$1" =~ "logo_mbcolor" ]]; then read LSIZE <<< "$(grep minimum_height ${1} | cut -d'=' -f2 | cut -d"," -f1)" @@ -690,12 +719,16 @@ single () { fi out+=("$TRANSPARENT [ $WINTRANS ],^checkout(transsingle)") - if [ "$WINTRANS" == false ];then - out+=(" AbCd $BACKGROUND,^pipe(mbclr '$WINCLR' conkyctl win_bgcolor '${BACKGROUND}' '$me' ${1})") - else - out+=(" transparent $BACKGROUND,^pipe(mbclr '$WINCLR' conkyctl win_bgcolor '${BACKGROUND}' '$me' ${1})") + if [[ "$WINCLR" != "#" ]];then + if [ "$WINTRANS" == false ];then + out+=(" AbCd $BACKGROUND,^pipe(mbclr '$WINCLR' conkyctl win_bgcolor '${BACKGROUND}' '$me' ${1})") + out+=("^sep()") + else + out+=(" transparent $BACKGROUND,^pipe(mbclr '$WINCLR' conkyctl win_bgcolor '${BACKGROUND}' '$me' ${1})") + out+=("^sep()") + fi fi - out+=("^sep()") + if [[ "$1" != *"logo_mbcolor"* ]]; then [[ "$CLR" != "#" ]] && out+=(" AbCd $DEFCOLOR,^pipe(mbclr '$CLR' conkyctl default_color '${DEFCOLOR}' '$me' ${1})") @@ -742,7 +775,7 @@ single () { out2+=("2,conkyctl stippled_borders 2 ${1};$me") out2+=("3,conkyctl stippled_borders 3 ${1};$me") out2+=("4,conkyctl stippled_borders 4 ${1};$me") - +fi #OLD SYNTAX CHECK out+=("^sep()") out+=(" $EDIT ${title^},xdg-open ${1}") out+=("北 $RELOAD ${title^},conkyctl restartone ${1}") @@ -844,7 +877,7 @@ contextmenu () { mkconfigfile - + if [[ "$OLD_SYNTAX" != "true" ]];then echo "color_menu_bg_to=${WINCLR} 100" >> ${CONFIG_FILE} TXTCOLOR=$(pastel textcolor ${WINCLR}|pastel format hex) #notify-send.sh "TXTCOLOR" "${TXTCOLOR} ${menu_gradient_pos}" @@ -875,7 +908,7 @@ contextmenu () { echo "color_sep_fg=${CLR} 10" >> ${CONFIG_FILE} echo "font=${FONT} 10" >> ${CONFIG_FILE} - + fi cat < ${MENU_ITEMS} $(printf '%s\n' "${out[@]}") $(printf '%s\n' "${out2[@]}") @@ -1186,6 +1219,14 @@ newcolorscheme () { savecolorscheme "${themename}" "${1}" fi } +convert_from_old () { + # try to convert from old syntax to new by convert.lua script + #notify-send.sh "Convert func" "${1}" + kill ${1} + convert.lua ${1} + sleep 1 + startone ${1} +} case "$1" in transparent_all) transparent_all "$2";; @@ -1232,5 +1273,6 @@ case "$1" in settheme_all) settheme_all "$2";; newcolorscheme) newcolorscheme "$2";; netdevice) netdevice ;; + convert_from_old) convert_from_old "$2";; *) : ;; esac diff --git a/bin/convert.lua b/bin/convert.lua new file mode 100755 index 0000000..92f9d56 --- /dev/null +++ b/bin/convert.lua @@ -0,0 +1,161 @@ +#! /usr/bin/lua + +local usage = [[ +Usage: convert.lua old_conkyrc [new_conkyrc] + +Tries to convert conkyrc from the old v1.x format to the new, lua-based format. + +Keep in mind that there is no guarantee that the output will work correctly +with conky, or that it will be able to convert every conkyrc. However, it +should provide a good starting point. + +Although you can use this script with only 1 arg and let it overwrite the old +config, it's suggested to use 2 args so that the new config is written in a new +file (so that you have backup if something went wrong). + +Optional: Install dos2unix. We will attempt to use this if it is available +because Conky configs downloaded from Internet sometimes are created on DOS/Windows +machines with different line endings than Conky configs created on Unix/Linux. + +For more information about the new format, read the wiki page + +]]; + +local function quote(s) + if not s:find("[\n'\\]") then + return "'" .. s .. "'"; + end; + local q = ''; + while s:find(']' .. q .. ']', 1, true) do + q = q .. '='; + end; + return string.format('[%s[\n%s]%s]', q, s, q); +end; + +local bool_setting = { + background = true, disable_auto_reload = true, double_buffer = true, draw_borders = true, + draw_graph_borders = true, draw_outline = true, draw_shades = true, extra_newline = true, + format_human_readable = true, no_buffers = true, out_to_console = true, + out_to_wayland = true, + out_to_ncurses = true, out_to_stderr = true, out_to_x = true, override_utf8_locale = true, + own_window = true, own_window_argb_visual = true, own_window_transparent = true, + short_units = true, show_graph_range = true, show_graph_scale = true, + times_in_seconds = true, top_cpu_separate = true, uppercase = true, use_xft = true, + draw_blended = true, forced_redraw = true +}; + +local num_setting = { + border_inner_margin = true, border_outer_margin = true, border_width = true, + cpu_avg_samples = true, diskio_avg_samples = true, gap_x = true, gap_y = true, + imlib_cache_flush_interval = true, imlib_cache_size = true, + max_port_monitor_connections = true, max_text_width = true, max_user_text = true, + maximum_width = true, mpd_port = true, music_player_interval = true, net_avg_samples = true, + own_window_argb_value = true, pad_percents = true, stippled_borders = true, + text_buffer_size = true, top_name_width = true, total_run_times = true, + update_interval = true, update_interval_on_battery = true, xftalpha = true, + xinerama_head = true, +}; + +local split_setting = { + default_bar_size = true, default_gauge_size = true, default_graph_size = true, + minimum_size = true +}; + +local colour_setting = { + color0 = true, color1 = true, color2 = true, color3 = true, color4 = true, color5 = true, + color6 = true, color7 = true, color8 = true, color9 = true, default_color = true, + default_outline_color = true, default_shade_color = true, own_window_colour = true +}; + +local function alignment_map(value) + local map = { m = 'middle', t = 'top', b = 'bottom', r = 'right', l = 'left' }; + if map[value] == nil then + return value; + else + return map[value]; + end; +end; + +local function handle(setting, value) + setting = setting:lower(); + if setting == '' then + return ''; + end; + if split_setting[setting] then + local x, y = value:match('^(%S+)%s*(%S*)$'); + local ret = setting:gsub('_size', '_width = ') .. x .. ','; + if y ~= '' then + ret = ret .. ' ' .. setting:gsub('_size', '_height = ') .. y .. ','; + end; + return '\t' .. ret; + end; + if bool_setting[setting] then + value = value:lower(); + if value == 'yes' or value == 'true' or value == '1' or value == '' then + value = 'true'; + else + value = 'false'; + end; + elseif not num_setting[setting] then + if setting == 'alignment' and value:len() == 2 then + value = alignment_map(value:sub(1,1)) .. '_' .. alignment_map(value:sub(2,2)); + elseif colour_setting[setting] and value:match('^[0-9a-fA-F]+$') then + value = '#' .. value; + elseif setting == 'xftfont' then + setting = 'font'; + end; + value = quote(value); + end; + return '\t' .. setting .. ' = ' .. value .. ','; +end; + +local function convert(s) + local setting, comment = s:match('^([^#]*)#?(.*)\n$'); + if comment ~= '' then + comment = '--' .. comment; + end; + comment = comment .. '\n'; + return handle(setting:match('^%s*(%S*)%s*(.-)%s*$')) .. comment; +end; + +local input; +local output; + +if conky == nil then --> standalone program + -- 1 arg: arg is input and outputfile + -- 2 args: 1st is inputfile, 2nd is outputfile + -- 0, 3 or more args: print usage to STDERR and quit + if #arg == 1 or #arg == 2 then + if os.execute('command -v dos2unix 2>&1 >/dev/null') == 0 then + os.execute('dos2unix ' .. arg[1]); + end + input = io.input(arg[1]); + else + io.stderr:write(usage); + return; + end; +else + -- we are called from conky, the filename is the first argument + input = io.open(..., 'r'); +end; + + +local config = input:read('*a'); +input:close(); + +local settings, text = config:match('^(.-)TEXT\n(.*)$'); + +local converted = 'conky.config = {\n' .. settings:gsub('.-\n', convert) .. '};\n\nconky.text = ' .. + quote(text) .. ';\n'; + +if conky == nil then + if #arg == 2 then + output = io.output(arg[2]); + else + output = io.output(arg[1]); + end + output:write(converted); + output:close(); +else + return assert(load(converted, 'converted config')); +end;