I found very good Pinterest pictures which I want to randomly show on my desktop. I already have a script(s) that randomly call conky configs from a directory. (Then I manually make bash scripts that call from 1 to 3+ conkies at a time)
Tried to do some python scripting but it didn't... I over complicated it. Here's the GIT FILES:
I was planning to show my code but it's too big and messy.
Originally I just read all the images and their Width, Height, Path and File name to separate txt files. Like width.txt, path.txt,etc. Looked like these (These is the Path.txt):
/home/omarali/scripts/conky/conky-sets/images/record.jpg
/home/omarali/scripts/conky/conky-sets/images/subtle.jpg
/home/omarali/scripts/conky/conky-sets/images/trust.jpg
Then I had a python script to convert the data to arrays and then build files one by one. Somehow I got syntax errors and etc. I didn't include the code here since it's too long and I'm considering to start from scratch.
Essentially I would make a new file that has the same name as the image then replace below config variables (WIDTH,HEIGHT,etc) with the images size and path.
The template Conky config:
conky.config = {
--Various settings
double_buffer = true, -- eliminates flicker
--Windows
own_window = true, -- create your own window to draw
own_window_argb_visual = true, -- use ARGB
own_window_type = 'override', -- keeps the image in the back
--Placement
alignment = 'middle_middle', -- position of the conky
--#########################################################################################
--######################## THE IMPORTANT CHANGABLE STUFF #######################
--#########################################################################################
minimum_width = WIDTH, -- minimum height of window
minimum_height = HEIGHT, -- minimum height of window
};
conky.text = [[
${image PATH -s SIZE}
]];
This is the final result of the conky config.
conky.config = {
minimum_width = 800, -- minimum height of window
minimum_height = 1300, -- minimum height of window
};
conky.text = [[
${image /home/omarali/scripts/conky/conky-sets/images/record.jpg -s 800x1300}
]];
So, Just need a simple way to put the images into a conkies that I can later call from a bash script. Python or Bash script will do.
Here what I'm looking for:
That's it, as mentioned before I already have a script to auto run my configs. Really appreciate your help. And open to new ideas.
In Python you can read data from all files
all_widths = open('width.txt').read().splitlines()
all_heights = open('width.txt').read().splitlines()
all_pathes = open('path.txt').read().splitlines()
and use zip()
to group width
with path
for width, height, path in zip(all_widths, all_height, all_pathes):
print(width, height, path)
# generate conky text
and then you can use text with all paragrath and put {}
in places in which you want to put data to generate new text. Because it use {}
to recognize places for values so it need {{
and }}
for normal {
, }
template = '''conky.config = {{
minimum_width = {WIDTH}, -- minimum height of window
minimum_height = {HEIGHT}, -- minimum height of window
}};
conky.text = [[
${{image {PATH} -s {WIDTH}x{HEIGHT}}}
]];'''
for width, height, path in zip(all_widths, all_height, all_pathes):
new_text = template.format(WIDTH=width, HEIGHT=height, PATH=path)
print(new_text)
Now you have to use image filename to create name for conky file (I don't know what extension it uses so I use .txt
)
new_name = path.replace('.jpg', '.txt')
or only last part of path
new_name = path.split('/')[-1].replace('.jpg', '.txt')
and then you can save text
f = open(new_name, 'w')
f.write(new_text)
f.close()
Full code but not tested:
template = '''conky.config = {{
minimum_width = {WIDTH}, -- minimum height of window
minimum_height = {HEIGHT}, -- minimum height of window
}};
conky.text = [[
${{image {PATH} -s {WIDTH}x{HEIGHT}}}
]];'''
all_widths = open('width.txt').read().splitlines()
all_heights = open('width.txt').read().splitlines()
all_pathes = open('path.txt').read().splitlines()
for width, height, path in zip(all_widths, all_height, all_pathes):
new_text = template.format(WIDTH=width, HEIGHT=height, PATH=path)
#new_name = path.replace('.jpg', '.txt')
new_name = path.split('/')[-1].replace('.jpg', '.txt')
f = open(new_name, 'w')
f.write(new_text)
f.close()
By the way: you could use os.listdir()
or os.walk()
to get pathes for images directly from disk. And module PIL
to get sizes of images.
template = '''conky.config = {{
minimum_width = {WIDTH}, -- minimum height of window
minimum_height = {HEIGHT}, -- minimum height of window
}};
conky.text = [[
${{image {PATH} -s {WIDTH}x{HEIGHT}}}
]];'''
from PIL import Image
directory = '/home/omarali/scripts/conky/conky-sets/images/'
for filename in os.listdir(directory):
path = os.path.join(directory, filename)
width, height = Image.open(path).size
new_text = template.format(WIDTH=width, HEIGHT=height, PATH=path)
new_name = filename.replace('.jpg', '.txt')
f = open(new_name, 'w')
f.write(new_text)
f.close()