Symbolname, der in einer Desktop-Datei verwendet werden soll, wenn verschiedene Symbolthemen unterschiedliche Namen für dieselbe Anwendung verwenden

Symbolname, der in einer Desktop-Datei verwendet werden soll, wenn verschiedene Symbolthemen unterschiedliche Namen für dieselbe Anwendung verwenden

Die Frage

Ich möchte wissen, ob es eine Möglichkeit gibt, in Desktopdateien mehrere Symboloptionen bereitzustellen. In der Desktopdatei, die ich für Android Studio habe, sieht die Symbolzeile beispielsweise so aus:

Icon=/opt/android-studio/bin/studio.png

es funktioniert gut, ABER das Problem ist, dass ich möchte, dass das Symbol dem von mir verwendeten Symboldesign entspricht und nicht immer das gleiche alte „studio.png“. Ich weiß, dass ich das in etwas wie Folgendes ändern kann:

Icon=androidstudio

und wie Sie wissen, funktioniert es gut mit Symbolthemen, die das Android Studio-Symbol mit diesem Namen bereitstellen, also „androidstudio“. Das Problem ist, dass verschiedene Symbolthemen Symbole mit unterschiedlichen Namen für Android Studio bereitstellen, darunter:

  • com.google.AndroidStudio
  • Android Studio
  • androidstudio
  • Studio
  • usw.

Gibt es eine Möglichkeit, alle diese Namen in die Desktopdatei einzufügen, sodass die vom Symboldesign bereitgestellten Namen verwendet werden können?


Was ich versucht habe

Basierend auf dem, was ich in einigen Desktopdateien gesehen hatte, habe ich versucht, verschiedene Werte (d. h. Symbolnamen) durch Semikolons zu trennen, aber das hat nicht funktioniert:

Icon=com.google.AndroidStudio;studio;androidstudio;

Was ich bereits gelesen habe:

Antwort1

Die Art und Weise, wie Sie es angeben, bestimmt auch, wie es funktioniert. Sie geben einen allgemeinen Symbolnamen an, z. B. androidstudio. Das System prüft zunächst, ob Ihr aktuelles Design ein solches Symbol bereitstellt, und verwendet andernfalls ein Symbol eines Ersatzdesigns oder ein allgemeines Symbol. Daher ist es nicht möglich, mehrere alternative Symbole in einer .desktopDatei anzugeben.

Normalerweise verwenden Sie immer nur ein Design. Am einfachsten wäre es daher, das gewünschte Symbol in einer lokalen Kopie der .desktopDatei Ihrer Anwendung fest zu codieren. Sie müssen hierfür kein Root sein. Eine solche lokale Kopie befindet sich in .local/share/applicationsder systemweiten .desktopDatei und überschreibt diese.

Wenn Sie aus irgendeinem Grund lieber das Design wechseln und jedes Mal das designspezifische Symbol für Ihre Anwendung verwenden möchten, können Sie die Symboldatei umbenennen (oder besser noch kopieren), sodass in allen Designs, die Sie verwenden möchten, passende Symbole vorhanden sind. Sie müssen Root sein, um ein systemweites Design auf diese Weise zu bearbeiten.

Antwort2

Nachdem @vanadium sagte, dass es nicht möglich ist, mehrere Symbole gleichzeitig in einer Desktop-Datei bereitzustellen und ich das Symbol entweder hart codieren, umbenennen oder kopieren sollte, dachte ich mir, warum nicht ein Skript dafür schreiben. Das folgende Skript ändert die Desktop-Datei, um das Symbol auf das einzustellen, was das Symboldesign für das Android Studio bereitstellt:

#!/bin/bash

# note 1) run this script when you want to change the icon
# note 2) pass 0 to this script (./script_name 0) to use the studio.png
#   if you want that for some reason
# note 3) before using this script, be sure to edit desktop_file and default_icon variables
# note 4) before using this script, edit the switch (the keyword is 'case' in the script),
#   based on the icon themes you have

# tip: for easier use, go to ~/.bash_aliases and define an alias

desktop_file=~/.local/share/applications/jetbrains-studio.desktop
default_icon=/opt/android-studio/bin/studio.png

function print_use() { echo "Use: $0 0[optional]"; }
function print_done() { echo "android studio icon has changed. enjoy :)"; }

if [[ ! -f $desktop_file ]]; then
    echo "$0: desktop file does not exist. you need to edit this script."
    exit 1
fi

# check and act based on arguments passed to script
if [[ $# -gt 1 ]]; then
    print_use
    exit 1
elif [[ $# -eq 1 ]]; then
    if [[ $1 -eq 0 ]]; then
        sed --in-place "s@^Icon=.*@Icon=$default_icon@" $desktop_file
        print_done
        exit 0
    else
        print_use
        exit 1
    fi
fi


# get the name of the icon theme in use
icon_theme=$(dconf read /org/gnome/desktop/interface/icon-theme)
echo "active icon theme: $icon_theme"
# trim starting and ending single quotes
icon_theme=${icon_theme:1:$((${#icon_theme}-2))}

# choose icon name based on the icon theme name
case $icon_theme in

    Vimix-* | Flat-Remix* | Deepin | Flattery | Gruvbox | Oranchelo | SURU-PLUS* | Korla)
        icon_name="androidstudio"
        ;;

    Tela-red | Uos | Xenlism-Storm)
        icon_name="android-studio"
        ;;

    *)
        echo "no icon found :( ... using the default icon"
        icon_name=$default_icon
        ;;
esac

sed --in-place "s@^Icon=.*@Icon=$icon_name@" $desktop_file
print_done

Ich habe den folgenden Alias ​​in ~/.bash_aliases definiert, sodass ich jetzt jedes Mal, wenn ich das Symboldesign ändere, nur „u“ in mein Terminal eingeben und die Eingabetaste drücken muss:

alias u="$scripts/android_studio_icon.sh"

verwandte Informationen