[Из песочницы] Elementary OS. Наводим чистоту и порядок в Applications

Здравствуйте! Когда впервые зашла на хабр, поняла, что я дома. Home, Sweet Home.…Всё не решалась написать. Вот, решилась! Пишу. Хорошо иль плохо, но пишу.

d36ad667a52444bca7ce9048bd6d4aaf.jpg

Меня всегда удручал беспорядок в [… всюду, не люблю беспорядок… ] в меню приложений Mandriva, Suse, Ubuntu, Elementary OS (Решила перечислить их в порядке использования. Пишу и ностальгирую). Конечно, ситуация одинакова для поголовного большинства дистрибутивов, так как информацию о том, как и где показывать программу прописывают сами создатели этих программ в *.desktop файлах. И многих из них похоже не волнует тот беспорядок, который происходит от такого халатного отношения к логике построения навигации.

Решила я это исправить. Давно давно давно, страшно давно. И через время, давно… таки исправила. А вам решила и собралась показать вообще только сейчас.Задача: убрать из Applications всё лишнее. При этом не только не потерять в удобстве работы, но и многократно выиграть.

Разобралась как наипростейшим образом добиться того что мне нужно. А нужен мне порядок в меню и при этом работоспособность всех программ. Разные *.desktop файлы имели различную структуру и порядок строк. Одним словом — никакого порядка. Кто в лес, кто по дрова. Изменять их самой и доводить до совершенства задача неблагодарная. Да, я этим когда-то занималась, ещё была тогда на Ubuntu. Бросила) Хотя наработки лежат до сих пор и наверное стоит их выложить как есть. Возможно получу поддержку пользователей в своём начинании, а может и раскритикуют меня в пух и прах так, что и забуду про эту свою давнешнюю идеаллистическую затею как страшный сон. Что поделать, надо пробовать.

Экспериментальным образом поняла что нужно добавлять две строчки

[Desktop Entry] NoDisplay=true в самое начало каждого *.desktop файлаЧто за *.desktop файлы? — Что-то вроде ярлыков в Windows. Находятся в /usr/share/applications/

Написала я несложный bash файл. Визуально разбила его на три части:

То, что я запускаю из консоли. Не хочу что бы обыватели видели специфические приложения. И сами что бы не смущались и меня не смущали что б. То, чему в меню программ делать по сути нечего. Архиваторы, проигрыватели, просмотрщики и прочие. Это обслуживающий персонал, работа которого должна быть изящна, быстра и ненавящива. Текстовые редакторы. Вынесла отдельным блоком для удобства. Так же как и в предшевствующем пункте, на иконку редактора я нажимала быть может несколько раз, первых и из любопытства. Если нам всё таки нужен редактор под рукой то никто не запрещает закрепить его в док. В меню приложений его не будет, а в доке будет. Вот так например

3e8524c717084cba86c3d044d8d4f702.png

Заметка: У меня нативный Scratch как редактор не прижился, но я не нашла ничего лучше Scratch для организации TODO lists и всяких notes. Была влюблена когда-то в Tomboy notes, консольный wyrd, затем в Wunderlist. Много чего перепробовала и остановилась сейчас на связке отзывчивого и простого тестового редактора c фиксацией дерева папок (Scratch) и облачного сервиса (Dropbox). Папки, что на снимке в левом сайдбаре, зафиксированы и никуда не деваются при открытии/закрытии редактора. Удобно. Такой функционал обнаружила случайно и полюбила его.

Код bash скрипта для наведения порядка в меню приложений

#!/bin/bash

# Just not needed for others to know that i have this in my system. # I always can run them from cli. Вот sudo sed -i '1iNoDisplay=true' /usr/share/applications/synaptic.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/synaptic.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/teamviewer-teamviewer9.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/teamviewer-teamviewer9.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/bleachbit.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/bleachbit.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/bleachbit-root.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/bleachbit-root.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/virtualbox.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/virtualbox.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/wireshark.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/wireshark.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/umit.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/umit.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/bum.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/bum.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/gparted.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gparted.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/guake.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/guake.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/luakit.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/luakit.desktop

# Rubbish. То, что не запускаем отдельно, #, а открывается автоматически при открытии соответствующего файла, # основываясь на file associations sudo sed -i '1iNoDisplay=true' /usr/share/applications/dropbox.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/dropbox.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/AdobeAIR.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/AdobeAIR.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/file-roller.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/file-roller.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/caffeine-preferences.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/caffeine-preferences.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/evince.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/evince.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/gdebi.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gdebi.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/gthumb.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gthumb.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/update-manager.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/update-manager.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/vlc.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/vlc.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/pantheon-terminal.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/pantheon-terminal.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/noise.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/noise.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/libreoffice4.3-base.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-base.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/libreoffice4.3-calc.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-calc.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/libreoffice4.3-math.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-math.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/libreoffice4.3-draw.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-draw.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/libreoffice4.3-impress.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-impress.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/libreoffice4.3-writer.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/libreoffice4.3-writer.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/ibus-setup.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/ibus-setup.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/empathy.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/empathy.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/totem.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/totem.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/gxneur.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/gxneur.desktop

# Скрыла, потому что эти приложения доступны из контекстного меню. # Посчитала излишним дублировать их в меню. Время покажет права ли я. sudo sed -i '1iNoDisplay=true' /usr/share/applications/scratch-text-editor.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/scratch-text-editor.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/scribes.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/scribes.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/sublime_text.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/sublime_text.desktop

sudo sed -i '1iNoDisplay=true' /usr/share/applications/atom.desktop sudo sed -i '1i[Desktop Entry]' /usr/share/applications/atom.desktop

#Пример как удалить ошибочную строку после batch edit. Экранируем спецсимволы и ставим параметр 'd' #sudo sed -i '/\[Desktop Entry\] NoDisplay=true/d' /usr/share/applications/synaptic.desktop

Из всех иконок либреофиса оставила лишь одну — центральную.

Сохраняйте и запускайте.

chmod u+x Beautify_menu sh Beautify_menu Одно лишь неудобство. Скрипт необходимо перезапускать после обновлений программ. Так как они стирают старый и записывают новый *.desktop файл. Как следствие, наши правки теряются и нужно повторить скрипт. А как быть когда одна программа обновилась, а другие нет. Что тогда? Не переживайте, многократные строки вида

[Desktop Entry] NoDisplay=true [Desktop Entry] NoDisplay=true [Desktop Entry] NoDisplay=true [Desktop Entry] NoDisplay=true ни на что не влияют.Потому скрипт можно запускать бесконечное множество раз.

На сколько оптимально написан скрипт, оставляю на ваше суждение. Мне лично кажется, что код можно упростить как минимум вдвое. Но как именно, я не знаю. Замучалась экпериментировать и выложила как есть.

Не запускайте этот скрипт слепо. Подумайте, нужно ли вам то, чего добивалась я. Быть может вас всё устраивает.

Если вы солидарны с моей точкой зрения про порядок в меню, не забудьте поправить скрипт «под себя». Желаю всем удачи.

В будущей статье хотела бы познакомить вас со своей консолью и её алиасами. Да много чего лижит в папочке с пометкой «In dev». Мысли мои непоследовательны, знаю.

83bc91a28fd44e4aa7dd1b3e24c548bf.png

Елизавета

© Habrahabr.ru