Найти в Дзене
Tominoff

Очистка корзины в Gnome Nautilus по хоткею как в MacOS

Мне очень нравится Gnome, но вот некоторых удобств к которым я привык в MacOS иногда всё же не хватает.

Сегодня понял что мне катастрофически не хватает хоткея для очистки корзины — к хорошему быстро привыкаешь, а потому теперь его мне очень не хватает. В общем решил попробовать его приделать.

Вот так это работает в MacOS при нажатии комбинации cmd+shift+backspace
Вот так это работает в MacOS при нажатии комбинации cmd+shift+backspace

Сначала поискал готовые решения на форумах и сервисах поиска ответов, наподобие 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 {}

А затем скопируйте и вставьте в настройках дополнительных комбинаций клавиш:

Прописал команду в настройках комбинаций клавиш
Прописал команду в настройках комбинаций клавиш