Динамический Значок корзины в Тире для Прикрепления на Ubuntu 18.04

Я хочу сделать значок корзины для своего прикрепления. Тире для Прикрепления не имеет значка корзины, который я могу добавить, таким образом, я собирался сделать тот. Я хочу Мусор полный значок, когда что-то добавляется к мусору, и я хочу значок Trash Empty, для того, когда нет ничего в мусоре. Кто-то может сказать мне, как сделать это? Вот мой файл на рабочем столе:

[Desktop Entry]
Type=Application
Name=Trash
Comment=Trash
Icon=user-trash
Exec=nautilus trash://
Categories=Utility;
Actions=trash;

[Desktop Action trash]
Name=Empty Trash
Exec=/home/zacharygough/trash.sh -e
2
задан 9 January 2020 в 15:45

1 ответ

Автоматически измените значок .desktop файла, в зависимости от состояния корзины

enter image description here enter image description here

Крошечное использование документа на получение Gio.Filemonitor наблюдать состояние (пустой или не) trash:///

Как использовать

  1. Скопируйте сценарий ниже в пустой файл, назовите его watchout.py
  2. Замена в строках:

    # edit path to .desktop files and icon names below
    self.fpath = "/home/jacob/Desktop/test.desktop"
    self.iconempty = "user-trash"
    self.iconfull = "user-trash-full"
    

    ... self.fpath, и если Вы хотите self.iconempty и self.iconfull

  3. Запустите скрипт с командой:

    python3 /path/to/watchout.py
    

Именно!

Если все хорошо работает, добавьте ту же самую команду для Запущения Приложений.

Сценарий

#!/usr/bin/env python3
from gi.repository import Gio, GLib

class SetTrashIcon:

    def __init__(self):
        # edit path to .desktop file and icon names below
        self.fpath = "/home/jacob/Desktop/test.desktop"
        self.iconempty = "user-trash"
        self.iconfull = "user-trash-full"
        # don't edit below
        self.trashdir = Gio.File.new_for_uri("trash:///")
        monitor = self.trashdir.monitor_directory(0, None)
        monitor.connect("changed", self.actonfile)
        self.currempty = None
        self.check_empty()
        loop = GLib.MainLoop()
        loop.run()

    def replace(self, newicon):
        # set the new icon, replace the Icon- line
        text = open(self.fpath).read()
        toreplace = [s for s in text.split() if s.startswith("Icon=")][0]
        newtext = text.replace(toreplace, "Icon=" + newicon)
        open(self.fpath, "wt").write(newtext)

    def set_icon(self, newempty):
        # if trash state changes, decide which icon to set
        if newempty != self.currempty:
            if newempty:
                self.replace(self.iconempty)
            else:
                self.replace(self.iconfull)
            self.currempty = newempty

    def check_empty(self):
        # check if trash is empty
        newempty = len(list(self.trashdir.enumerate_children(
            "standard::*", Gio.FileQueryInfoFlags.NONE, None
        ))) == 0
        self.set_icon(newempty)

    def actonfile(self, arg1=None, arg2=None, arg3=None, arg4=None):
        # act on changes in the trash content
        if arg4 == Gio.FileMonitorEvent.ATTRIBUTE_CHANGED:
            self.check_empty()

SetTrashIcon()
1
ответ дан 11 January 2020 в 09:41

Другие вопросы по тегам:

Похожие вопросы: