如何在 albert 启动器中禁用图像缓存

如何在 albert 启动器中禁用图像缓存

我正在尝试开发一个扩展来显示颜色代码作为图标,但是 Albert 正在缓存所使用的图像(SVG/PNG)。

以下是代码片段:

# import cairosvg
import albert
import time
import os
import re


__title__ = "colors"
__version__ = "0.4.2"
__triggers__ = "col "
__authors__ = "scmanjarrez"
# __exec_deps__ = ["cairosvg"]

CWD = os.path.dirname(__file__)
HEX = re.compile(r'#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})', re.IGNORECASE)
RGB = re.compile(r'\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)|'
                 r'(\d{1,3})\s(\d{1,3})\s(\d{1,3})')


# Can be omitted
def initialize():
    pass


# Can be omitted
def finalize():
    pass


def parse_line(line):
    hex = True
    match = HEX.match(line)
    if match:
        col = (match.group(1), match.group(2), match.group(3))
    else:
        hex = False
        match = RGB.match(line)
        if match:
            col = (match.group(1), match.group(2), match.group(3))
            if match.group(1) is None:
                col = (match.group(4), match.group(5), match.group(6))
    if hex:
        hexcol = f"#{col[0]}{col[1]}{col[2]}"
        rgbcol = (f"({int(col[0], 16)}, "
                  f"{int(col[1], 16)}, "
                  f"{int(col[2], 16)})")
    else:
        hexcol = f"#{col[0]:x}{col[1]:x}{col[2]:x}"
        rgbcol = (f"({int(col[0])}, "
                  f"{int(col[1])}, "
                  f"{int(col[2])})")
    return hexcol, rgbcol


def handleQuery(query):
    if not query.isTriggered:
        return

    results = []

    if not query.string:
        item = albert.Item()
        item.icon = f"{CWD}/cwheel.svg"
        item.text = "Albert color plugin"
        item.subtext = "Allowed formats: (r,g,b), r g b and #rrggbb."
        results.append(item)
    else:
        newsvg = ''
        with open(f"{CWD}/color.svg", 'r') as cf:
            svg = cf.read()
            hexcol, rgbcol = parse_line(query.string)
            newsvg = re.sub(r'fill:.*?;', f'fill:{hexcol};', svg)
        if newsvg:
            with open(f"{CWD}/color.svg", 'w') as cf:
                cf.write(newsvg)
            # cairosvg.svg2png(
            #     url=f"{CWD}/color.svg", write_to="/tmp/color.png")
            item = albert.Item()
            item.icon = f"{CWD}/color.svg"
            # item.icon = "/tmp/color.png"
            item.text = f"hex: {hexcol} | rgb: {rgbcol}"
            results.append(item)
    return results

即使我改变触发器,它也使用相同的颜色,但 SVG/PNG 在文件资源管理器中正确更新。

在此处输入图片描述

答案1

目前这是不可能的。出于性能原因,图标会被缓存。但是,您可以使用名称中的 RGB 代码为每种颜色创建一个文件。这会使缓存膨胀,但由于您使用 /tmp,因此这应该不是什么大问题。

相关内容