Внутри проект — обычный JSON, и система считала его просто текстом: открывала редактором и рисовала значок текстового файла. Теперь у него свой тип application/x-nlve-project, свой значок (лист с загнутым углом и знаком программы) и открытие двойным щелчком. Тип объявлен наследником application/json, но не простого текста — иначе редактор снова оказался бы программой по умолчанию. Всё, что нужно для встраивания в рабочий стол, лежит в packaging и ставится скриптом tools/install-desktop.sh в домашний каталог, без прав администратора. Раньше пункт меню и значки существовали только на одной машине и нигде не были записаны.
75 lines
3.2 KiB
Bash
Executable file
75 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
||
# Встраивание в рабочий стол: пункт меню, значки и тип файла проекта.
|
||
#
|
||
# Что делает:
|
||
# - кладёт значок программы и значок файла проекта в ~/.local/share/icons
|
||
# - описывает тип application/x-nlve-project, чтобы *.nlve перестали
|
||
# считаться просто текстом
|
||
# - кладёт пункт меню, который открывает такие файлы нашей программой
|
||
#
|
||
# Всё в домашнем каталоге: прав администратора не нужно, другим
|
||
# пользователям системы ничего не меняется.
|
||
#
|
||
# Запуск: tools/install-desktop.sh [путь к программе]
|
||
# По умолчанию берётся nlve рядом с этим репозиторием.
|
||
set -u
|
||
|
||
HERE=$(cd "$(dirname "$0")/.." && pwd)
|
||
BIN=${1:-$HERE/nlve}
|
||
PKG=$HERE/packaging
|
||
|
||
DATA=${XDG_DATA_HOME:-$HOME/.local/share}
|
||
APPS=$DATA/applications
|
||
MIME=$DATA/mime/packages
|
||
ICONS=$DATA/icons/hicolor
|
||
|
||
note() { echo "== $*"; }
|
||
fail() { echo "$*" >&2; exit 1; }
|
||
|
||
[ -x "$BIN" ] || fail "программы нет или она не запускается: $BIN"
|
||
[ -d "$PKG" ] || fail "нет каталога $PKG"
|
||
|
||
note "Значки"
|
||
for SIZE in 32 48 64 128; do
|
||
mkdir -p "$ICONS/${SIZE}x${SIZE}/apps" "$ICONS/${SIZE}x${SIZE}/mimetypes"
|
||
# convert есть не у всех; без него кладём один размер как есть.
|
||
if command -v convert >/dev/null 2>&1; then
|
||
convert "$PKG/nlve.png" -resize ${SIZE}x${SIZE} \
|
||
"$ICONS/${SIZE}x${SIZE}/apps/nlve.png"
|
||
convert "$PKG/application-x-nlve-project.png" -resize ${SIZE}x${SIZE} \
|
||
"$ICONS/${SIZE}x${SIZE}/mimetypes/application-x-nlve-project.png"
|
||
elif [ "$SIZE" = 128 ]; then
|
||
cp -f "$PKG/nlve.png" "$ICONS/128x128/apps/nlve.png"
|
||
cp -f "$PKG/application-x-nlve-project.png" \
|
||
"$ICONS/128x128/mimetypes/application-x-nlve-project.png"
|
||
fi
|
||
done
|
||
|
||
note "Тип файла проекта"
|
||
mkdir -p "$MIME"
|
||
cp -f "$PKG/application-x-nlve-project.xml" "$MIME/nlve.xml"
|
||
if command -v update-mime-database >/dev/null 2>&1; then
|
||
update-mime-database "$DATA/mime"
|
||
else
|
||
echo "update-mime-database не найдена: тип не зарегистрируется" >&2
|
||
fi
|
||
|
||
note "Пункт меню"
|
||
mkdir -p "$APPS"
|
||
sed -e "s|@BIN@|$BIN|g" -e "s|@DIR@|$(dirname "$BIN")|g" \
|
||
"$PKG/nlve.desktop.in" > "$APPS/nlve.desktop"
|
||
chmod 644 "$APPS/nlve.desktop"
|
||
command -v update-desktop-database >/dev/null 2>&1 &&
|
||
update-desktop-database "$APPS"
|
||
|
||
note "Программа по умолчанию для *.nlve"
|
||
command -v xdg-mime >/dev/null 2>&1 &&
|
||
xdg-mime default nlve.desktop application/x-nlve-project
|
||
|
||
command -v gtk-update-icon-cache >/dev/null 2>&1 &&
|
||
gtk-update-icon-cache -f -t "$ICONS" >/dev/null 2>&1
|
||
|
||
echo
|
||
echo "готово. Проверить: xdg-mime query filetype <файл>.nlve"
|
||
echo "Файловый менеджер может показать новый значок не сразу:"
|
||
echo "ему нужно перечитать базу (обычно достаточно перезапуска)."
|