从模板构建文件并添加调整(将图像变成 conky 配置)

Build files from template and add tweaks (turn images into conky configs)

我发现了非常好的 Pinterest 图片,我想将它们随机显示在我的桌面上。我已经有一个脚本可以从目录中随机调用 conky 配置。 (然后我手动制作 bash 一次调用 1 到 3+ 个 conkies 的脚本)

尝试编写一些 python 脚本,但没有...我把它复杂化了。这是 GIT FILES:

我本来打算展示我的代码,但它太大太乱了。

本来我只是把所有的图片和它们的宽度、高度、路径和文件名都读出来分开的txt文件。像 width.txt、path.txt 等。看起来像这些(这些是 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

然后我有一个 python 脚本将数据转换为数组,然后一个一个地构建文件。不知怎么的,我遇到了语法错误等等。我没有在这里包含代码,因为它太长了,我正在考虑从 scratch 开始。

基本上我会创建一个与图像同名的新文件,然后用图像大小和路径替换下面的配置变量(WIDTH、HEIGHT 等)。

模板Conky配置:

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}

]];

这是conky配置的最终结果。

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}

]];

所以,只需要一种简单的方法将图像放入 conkies 中,稍后我可以从 bash 脚本中调用它。 Python 或 Bash 脚本即可。

这是我要查找的内容:

  1. 从目录中的每个图像构建一个 conky 配置。假设 dir_pins
  2. 每个 conky 都应该与图像同名。 (这是我的问题)
  3. 可以是python或bash脚本,有想法但更喜欢这2.

就是这样,如前所述,我已经有了一个脚本来自动 运行 我的配置。非常感谢您的帮助。并乐于接受新想法。

在Python中您可以从所有文件中读取数据

all_widths = open('width.txt').read().splitlines()
all_heights = open('width.txt').read().splitlines()
all_pathes = open('path.txt').read().splitlines()

并使用 zip()widthpath

分组
for width, height, path in zip(all_widths, all_height, all_pathes):
    print(width, height, path)
    # generate conky text

然后你可以使用带有所有段落的文本,并将 {} 放在你想要放置数据的地方以生成新文本。因为它使用 {} 来识别值的位置,所以它需要 {{}} 来表示正常的 {}

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)

现在你必须使用图像文件名来为 conky 文件创建名称(我不知道它使用什么扩展名所以我使用 .txt

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()

完整代码但未经测试:

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()

顺便说一下:您可以使用 os.listdir()os.walk() 直接从磁盘获取图像的路径。和模块 PIL 获取图像的大小。

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()