Comment définir le programme par défaut pour ouvrir un certain type de fichier dans un certain dossier?

21

En plus d'être un Panda, je suis aussi un artiste, je fais mes œuvres principalement dans GIMP et enregistre mes photos dans un certain répertoire sur mon ordinateur. Cependant, j'ai un léger inconvénient car j'enregistre mes images au jpegformat, cependant le programme par défaut pour ouvrir jpegs est le Image Viewer, et si je le change pour plus GIMPde commodité avec mon illustration, cela signifie que tous les autres jpegs sur mon ordinateur s'ouvrent GIMP, et Je ne veux pas qu'ils le fassent donc c'est là que le problème commence ...

Je me demande donc s'il y a un moyen de faire en sorte que tous les jpegs soient ouverts dans ce répertoire sur mon ordinateur GIMP, mais tous les autres jpegailleurs dans le Image Viewer?

Braiam
la source
Uniquement pour Nautilus / Files ou aussi pour xdg-open?
AB
@AB: Je dirais les deux si cela peut être fait.
Car xdg-opendans un terminal, vous devrez changer le type de mime de vos images.
AB
Ou vous pouvez également utiliser le script dans ma réponse avec le chemin d'image complet.
AB
4
Ne jamais utiliser .jpegcomme format intermédiaire! Cela entraîne une perte de génération . Pourquoi ne pas simplement enregistrer les images sous .xcf, qui sont toujours ouvertes automatiquement avec GIMP?
leftaroundabout

Réponses:

21

Vous avez besoin d'un desktopfichier et d'un script wrapper:

  1. Le desktopdossier

    • Créer un fichier de bureau

      nano ~/.local/share/applications/jpeg-wrapper.desktop
      
    • Ajoutez la configuration ci-dessous (changez la propriété pour Name)

      [Desktop Entry]
      Name=Special or Standard
      Comment=Open a JPEG depending of the path
      Exec=/home/user/bin/jpeg-wrapper %f
      Icon=
      Terminal=false
      Type=Application
      Categories=Editor;
      StartupNotify=true
      MimeType=image/jpeg;
      
    • Remplacez userdans Exec=/home/user/bin/jpeg-wrapper %fvotre nom d' utilisateur, la sortie

      echo $USER
      
    • Remplacez le nom de l'icône Icon=par un nom ou un chemin de votre choix

    • Permet MimeType=image/jpegde spécifier les types de fichiers MIME auxquels la décision doit s'appliquer. Séparez plusieurs types de mime via;

      Obtenez le type mime via

      mimetype your_file
      

      par exemple pour un fichier texte

      text/plain
      
  2. Le script wrapper

    • Créer un nouveau script

      mkdir -p ~/bin
      nano ~/bin/jpeg-wrapper
      
    • Ajoutez le code ci-dessous

      #!/usr/bin/env bash
      image_path=$(dirname "$1")
      my_special_path="$HOME/tmp"
      open_with_special="gimp"
      open_with_standard="eog"
      
      if [[ $(mimetype -b "$1") == "image/jpeg" ]] && [[ "$image_path" == "$my_special_path"* ]]; then
              "$open_with_special" "$1"
      else
              "$open_with_standard" "$1"
      fi
    • Accédez my_special_pathà votre dossier d' illustrations . Tous les sous-dossiers sont également pris en compte.

    • Modification open_with_specialde votre application spéciale (par exemple gimp)

    • Rendez votre script wrapper exécutable

      chmod +x ~/bin/jpeg-wrapper
      
  3. Redémarrez Unity / GNOME Shell, par exemple pour GNOME Shell Alt- F2, tapez retEnter

  4. Associer un ou plusieurs types de fichiers au fichier de bureau

    • Ouvrez votre gestionnaire de fichiers et faites un clic droit sur un fichier pour lequel la décision est d'appliquer

    • Cliquez sur Properties

    • Activez l'onglet Open With

    • Sélectionnez l'entrée Special or Standard

    • Cliquez sur Set as default

  5. Profitez ;)

Script vérifié ici .

UN B
la source
Est-ce que je change la Namevaleur?
Non, changez le nom comme vous le souhaitez.
AB
En outre, votre script a un léger problème ... Uhm ... Tous les fichiers de mon dossier d'illustrations s'ouvrent désormais correctement dans GIMP, et de même pour tous les sous-répertoires, mais si un fichier n'est pas dans cette zone, il ne s'ouvre tout simplement pas du tout.
Permettez-moi de le vérifier.
AB
Ok, ça marche bien maintenant que vous avez supprimé la boucle infinie. ;)