Мне очень нравится Gnome, но вот некоторых удобств к которым я привык в MacOS иногда всё же не хватает.
Сегодня понял что мне катастрофически не хватает хоткея для очистки корзины — к хорошему быстро привыкаешь, а потому теперь его мне очень не хватает. В общем решил попробовать его приделать.
Сначала поискал готовые решения на форумах и сервисах поиска ответов, наподобие askubuntu, но всё что я нашёл — удаление специальных каталогов, вроде ~/.local/share/Trash или использование программ типа trash-empty (https://askubuntu.com/questions/468721/how-can-i-empty-the-trash-using-terminal)
Честно говоря, выглядит такое решение как ненадёжный костыль.
А вот бы был способ попросить штатный файловый менеджер Nautilus самостоятельно очистить корзину 🤔
Конечно же не сразу, но почему-то подумалось мне про D-Bus шину, о которой я не так давно читал в документации Gnome. В общем начал копать в эту сторону и обнаружил что указанный файловый менеджер имеет столь необходимый мне метод EmptyTrash в своём DBus интерфейсе! 🤩
Осталось только склепать сообщение нужного формата и отправить в шину, а дальше уже Наутилус сделает всё сам.
Тут стоит оговориться – метод ожидает получить два аргумента — простой булев тип true/false для ask_confirmation и некую хэшмапу для некого platform_data, таким образом используется сигнатура (ba{sv}).
Сколько я ни мучил dbus-send, работать животинка упорно отказывалась.
На одном из оверфлоу-подобных сайтов увидел совет использовать прогу gdbus для подобных трюков.
В общем, поковырявшись с gdbus немного, всё получилось — предлагаю рабочий вызов для очистки корзины:
gdbus call \
--session \
--dest=org.gnome.Nautilus \
--object-path=/org/gnome/Nautilus/FileOperations2 \
--method=org.gnome.Nautilus.FileOperations2.EmptyTrash \
true {}
Соответственно, true - установится boolean переменной ask_confirmation, а значение {} в platform_data.
Чтобы чистить корзину без подтверждения, можно заменить true на false.
Дело осталось за малым - добавить в систему хоткей для вызова этой команды.
Это делается тривиально через настройки клавиатуры, но предварительно лучше переписать команду на однострочный вариант, для этого просто уберите все обратные слэши и переносы строки:
gdbus call --session --dest=org.gnome.Nautilus --object-path=/org/gnome/Nautilus/FileOperations2 --method=org.gnome.Nautilus.FileOperations2.EmptyTrash true {}
А затем скопируйте и вставьте в настройках дополнительных комбинаций клавиш: