Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
sudo apt-get install alacarte

Мысли мои непоследовательны, знаю.
'1i[Desktop Entry]\nNoDisplay=true'.#!/bin/bash
APPS="synaptic teamviewer-teamviewer9 bleachbit bleachbit-root virtualbox wireshark"
for APP in $APPS; do
FILE=/usr/share/applications/${APP}.desktop
if [[ -f ${FILE} ]] ; then
sed -i '1iNoDisplay=true' ${FILE}
sed -i '1i[Desktop Entry]' ${FILE}
fi
done
#!/bin/bash
APPS="synaptic teamviewer-teamviewer9 bleachbit bleachbit-root virtualbox wireshark"
for APP in $APPS; do
FILE=/usr/share/applications/${APP}.desktop
[[ -f ${FILE} ]] && sed -i -e '1i[Desktop Entry]' -e '1iNoDisplay=true' ${FILE}
done
Неужели ЧАСЫ — настолько важная информация, чтобы держать их по центру экрана в панели задач?
эппловской клавиатурой, magic trackpad, и bluetooth-донглом
Fn. Я когда-то мокрыми руками после душа потрогал клавиатуру своего ноутбука, пара капель воды попали внутрь и с тех пор у меня кнопка Fn не работает. Я не подозревал, насколько я часто ей пользуюсь, сам того не замечая, и теперь постоянно испытываю дичайшее неудобство от её нехватки. Fn-кнопка используется в том числе для регулировки яркости экрана, подсветки, громкости, навигации по плейлисту (которой я, правда, никогда не пользовался), навигации в пределах строки в терминале и т.д.Ctrl, Meta, Alt вместо Ctrl, Opt и Cmd. В принципе, с этим можно бороться при помощи Karabiner (бывший KeyRemap4Macbook), потому что иначе конформистский путь «использовать, как есть» искажает всю суть. К примеру — операция копирования в буфер обмена выполняется Cmd+C. Эти две кнопки находятся очень близко, и нажимаются сведенными указательным и большим пальцем без какого-то напряжения. На PC-клавиатуре пришлось бы нажать или Ctrl+C, для которого большой палец нужно заводить далеко назад к ладони, или Win+C, что всё еще не так удобно. Разница чувствуется, когда через удаленный рабочий стол заходишь на Windows-компьютеры. Еще примеры подобных сочетаний — переключение раскладки через Cmd+Space или вызов настроек через Cmd+,.Fn+Return или Fn+I.ощутимый минус Apple-клавиатур
#!/bin/bash
ROOT="/usr/share/applications";
APPS=(
# Just not needed for others to know that i have this in my system.
# I always can run them from cli. Вот
'bleachbit-root.desktop'
'bleachbit.desktop'
'bum.desktop'
'gparted.desktop'
'guake.desktop'
'luakit.desktop'
'synaptic.desktop'
'teamviewer-teamviewer9.desktop'
'umit.desktop'
'virtualbox.desktop'
'wireshark.desktop'
# Rubbish. То, что не запускаем отдельно,
# а открывается автоматически при открытии соответствующего файла,
# основываясь на file associations
'AdobeAIR.desktop'
'caffeine-preferences.desktop'
'dropbox.desktop'
'empathy.desktop'
'evince.desktop'
'file-roller.desktop'
'gdebi.desktop'
'gthumb.desktop'
'gxneur.desktop'
'ibus-setup.desktop'
'libreoffice4.3-base.desktop'
'libreoffice4.3-calc.desktop'
'libreoffice4.3-draw.desktop'
'libreoffice4.3-impress.desktop'
'libreoffice4.3-math.desktop'
'libreoffice4.3-writer.desktop'
'noise.desktop'
'pantheon-terminal.desktop'
'totem.desktop'
'update-manager.desktop'
'vlc.desktop'
# Скрыла, потому что эти приложения доступны из контекстного меню.
# Посчитала излишним дублировать их в меню. Время покажет права ли я.
'atom.desktop'
'scratch-text-editor.desktop'
'scribes.desktop'
'sublime_text.desktop'
);
for app_name in "${APPS[@]}"; do {
app_path="${ROOT}/${app_name}";
echo -n "${app_path}... ";
if [[ -e "${app_path}" ]]; then {
echo -n $'[Desktop Entry]\nNoDisplay=true\n' >> "${app_path}";
echo "OK";
} else {
echo "NOT FOUND";
}; fi
}; done
echo -n '[Desktop Entry]\nNoDisplay=true\n' >> "${app_path}";
еще перед этим можно воткнутьsed -e 's/[Desktop Entry]\nNoDisplay=true\n//g' "${app_path}" > "${app_path}";
во избежание дубликатов при повторном запуске… :)$, а C-строковый литерал. В вашем варианте следовало бы писать echo -ne, иначе \n будет выведен, как есть.#!/bin/bash
: ${DESKTOP_ROOT:='/usr/share/applications'}
: ${HIDERRC:="${HOME}/.hiderrc"}
function trim() {
local s="${@}";
s="${s#"${s%%[![:space:]]*}"}"; # trim leading whitespace
s="${s%"${s##*[![:space:]]}"}"; # trim trailing whitespace
echo -n "${s}";
};
function describe() {
case "$1" in
'yes') echo -n 'hidden'; ;;
'no') echo -n 'visible'; ;;
esac;
};
function to_bool() {
case "$1" in
'yes') echo -n 'true'; ;;
'no') echo -n 'false'; ;;
esac;
};
function is_shortcut_hidden() {
local state='section';
local hidden='no';
while IFS='' read -r line; do
if [[ "${line}" == '#'* ]]; then {
continue; # skip over comment lines
} fi;
while [[ true ]]; do
case "${state}" in
'section')
if [[ "$(trim ${line})" == '[Desktop Entry]' ]]; then {
state='keyvalue';
} fi;
;;
'keyvalue')
if [[ "${line}" == '['*']' ]]; then {
state='section';
continue; # reinterpret current section
} else {
IFS='=' read -r key value < <(echo "${line}");
if [[ "$(trim ${key})" == "NoDisplay" ]]; then {
case "$(trim ${value})" in
'0' | 'false') hidden='no' ;;
'1' | 'true') hidden='yes' ;;
esac;
} fi;
} fi;
;;
esac;
break;
done;
done < "$1";
echo -n "${hidden}";
};
function read_rc() {
local section_hidden='yes';
local path;
local shortcut_hidden;
if [[ ! -r "${HIDERRC}" ]]; then {
return; # nothing to do if we have no conf
} fi;
while IFS='' read -r line; do
if [[ "${line}" == '#'* ]]; then {
continue; # skip over comment lines
} fi;
case "${line}" in
'[hide]') section_hidden='yes' ;;
'[show]') section_hidden='no' ;;
*)
if [[ "${line}" == '/'* ]]; then { # absolute path
path="${line}";
} else {
path="${DESKTOP_ROOT}/${line}";
} fi;
shortcut_hidden="$(is_shortcut_hidden "${path}")";
if [[ ! "${shortcut_hidden}" == "${section_hidden}" ]]; then { # action!
echo "Shortcut ${path} should be $(describe "${section_hidden}"), but is $(describe "${shortcut_hidden}")";
echo -n $'\n[Desktop Entry]\nNoDisplay='"$(to_bool "${section_hidden}")"$'\n' >> "${path}";
} fi;
;;
esac;
done < <(cat "${HIDERRC}"; echo);
};
read_rc;
# Just not needed for others to know that i have this in my system.
# I always can run them from cli. Вот
bleachbit-root.desktop
bleachbit.desktop
bum.desktop
gparted.desktop
guake.desktop
luakit.desktop
synaptic.desktop
teamviewer-teamviewer9.desktop
umit.desktop
virtualbox.desktop
wireshark.desktop
# Rubbish. То, что не запускаем отдельно,
# а открывается автоматически при открытии соответствующего файла,
# основываясь на file associations
AdobeAIR.desktop
caffeine-preferences.desktop
dropbox.desktop
empathy.desktop
evince.desktop
file-roller.desktop
gdebi.desktop
gthumb.desktop
gxneur.desktop
ibus-setup.desktop
libreoffice4.3-base.desktop
libreoffice4.3-calc.desktop
libreoffice4.3-draw.desktop
libreoffice4.3-impress.desktop
libreoffice4.3-math.desktop
libreoffice4.3-writer.desktop
noise.desktop
pantheon-terminal.desktop
totem.desktop
update-manager.desktop
vlc.desktop
# Скрыла, потому что эти приложения доступны из контекстного меню.
# Посчитала излишним дублировать их в меню. Время покажет права ли я.
atom.desktop
scratch-text-editor.desktop
scribes.desktop
sublime_text.desktop# это комментарий!
# распознаются две секции - [show] и [hide].
# [show] делает все ярлыки в секции видимыми, [hide] их прячет.
# если секция не указана, то это считается [hide]
i_will_be_hidden.desktop
[show]
# если имя файла начинается с "/", считается, что это абсолютный путь к файлу
/absolute/path/to/file.desktop
# иначе имя файла считается относительным от пути в ${DESKTOP_ROOT}
relative/path/to/file.desktop
# секции могут повторяться и перемежаться
[hide]
foo.desktop
spaces are fine too.desktop#!/bin/bash
: ${DESKTOP_ROOT:='/usr/share/applications'}
: ${HIDERRC:="${HOME}/.hiderrc"}
function trim() {
local s="${@}";
s="${s#"${s%%[![:space:]]*}"}"; # trim leading whitespace
s="${s%"${s##*[![:space:]]}"}"; # trim trailing whitespace
echo -n "${s}";
};
function describe() {
case "$1" in
'yes') echo -n 'hidden'; ;;
'no') echo -n 'visible'; ;;
esac;
};
function to_bool() {
case "$1" in
'yes') echo -n 'true'; ;;
'no') echo -n 'false'; ;;
esac;
};
function is_shortcut_hidden() {
local state='section';
local hidden='no';
while IFS='' read -r line; do
if [[ "${line}" == '#'* ]]; then {
continue; # skip over comment lines
} fi;
if [[ "$(trim "${line}")" == '' ]]; then {
continue; # skip over empty lines
} fi;
while [[ true ]]; do
case "${state}" in
'section')
if [[ "$(trim ${line})" == '[Desktop Entry]' ]]; then {
state='keyvalue';
} fi;
;;
'keyvalue')
if [[ "${line}" == '['*']' ]]; then {
state='section';
continue; # reinterpret current section
} else {
IFS='=' read -r key value < <(echo "${line}");
if [[ "$(trim ${key})" == "NoDisplay" ]]; then {
case "$(trim ${value})" in
'0' | 'false') hidden='no' ;;
'1' | 'true') hidden='yes' ;;
esac;
} fi;
} fi;
;;
esac;
break;
done;
done < "$1";
echo -n "${hidden}";
};
function read_rc() {
local section_hidden='yes';
local path;
local shortcut_hidden;
if [[ ! -r "${HIDERRC}" ]]; then {
return; # nothing to do if we have no conf
} fi;
while IFS='' read -r line; do
if [[ "${line}" == '#'* ]]; then {
continue; # skip over comment lines
} fi;
if [[ "$(trim "${line}")" == '' ]]; then {
continue; # skip over empty lines
} fi;
case "${line}" in
'[hide]') section_hidden='yes' ;;
'[show]') section_hidden='no' ;;
*)
if [[ "${line}" == '/'* ]]; then { # absolute path
path="${line}";
} else {
path="${DESKTOP_ROOT}/${line}";
} fi;
if [[ ! -e "${path}" ]]; then {
>&2 echo "Shortcut ${path} is missing!";
continue;
} fi;
shortcut_hidden="$(is_shortcut_hidden "${path}")";
if [[ ! "${shortcut_hidden}" == "${section_hidden}" ]]; then { # action!
echo "Shortcut ${path} should be $(describe "${section_hidden}"), but is $(describe "${shortcut_hidden}")";
echo -n $'\n[Desktop Entry]\nNoDisplay='"$(to_bool "${section_hidden}")"$'\n' >> "${path}";
} fi;
;;
esac;
done < <(cat "${HIDERRC}"; echo);
};
read_rc;
: ${VAR:='value'} лучше, чем просто VAR='value' тем, что если VAR уже назначен до вызова скрипта, то присваивания не произойдет — таким образом, HIDERRC и DESKTOP_ROOT можно переопределить через переменные окружения, при вызове в командной строке (HIDERRC=/private/etc/hiderrc DESKTOP_ROOT=/Applications/ hider.sh) или в каком-нибудь bash_profile на усмотрение.вы натолкнули меня на мысльВот это вас торкнуло!) Простите, я не хотел)))
Elementary OS. Наводим чистоту и порядок в Applications