1 votes

Détecter si un élément du presse-papiers est une donnée image en utilisant AppleScript

Cela a commencé parce que Je voulais pouvoir coller des captures d'écran ou des images copiées depuis Safari dans des dossiers du Finder. . Voici les étapes pour arriver là où je suis :

  1. Installer pngpaste en utilisant brew install pngpaste .

  2. Make Automator Action rapide et configurer comme :

enter image description here

osascript -e 'set formattedDate to (do shell script "date +'%Y-%m-%dat%H-%M-%S%p'")' -e 'tell application "Finder" to set thePath to the quoted form of (POSIX path of (insertion location as alias) & formattedDate & ".png")' -e 'if ((clipboard info) as string) contains TIFF picture then do shell script "/usr/local/bin/pngpaste " & thePath' -e 'if ((clipboard info) as string) does not contain TIFF picture then tell application "System Events" to keystroke "v" using control down'
  1. Sauvegarder et fermer.
  2. Remplacer la pâte par défaut :

enter image description here

  1. Attribuer une pâte par défaut au service de déclenchement :

enter image description here

LE PROBLÈME : Quel que soit le type de fichier que j'ai dans mon presse-papiers, le script le détecte toujours comme un TIFF et le colle comme un PNG. Comment puis-je résoudre ce problème ?

0 votes

Juste un FYI sur votre problème et probablement pourquoi votre propre flux de travail n'a pas produit les résultats désirés quand je lance 'clipboard info' sur un PNG (à partir d'une capture d'écran) j'obtiens toutes sortes de types d'images dans le résultat - y compris TIFF. Il ne détecte pas réellement qu'il s'agit d'un TIFF, il trouve simplement cette chaîne (avec les GIF, BMP, JPEG et autres). Je pense que c'est un problème de la façon dont le presse-papiers traite les données binaires, mais je n'en suis pas vraiment sûr.

2voto

user3439894 Points 52496

Devoir écrire et maintenir un osascript commande comme vous l'avez fait n'est vraiment pas la meilleure façon de procéder dans ce cas d'utilisation, selon moi.

Utilisation d'un Exécuter AppleScript action au lieu d'un Exécuter le Shell script action les points suivants exemple AppleScript code résoudra le problème que vous rencontrez actuellement, et rendra la code beaucoup plus facile à lire et à modifier :

on run {input, parameters}

    set cbInfoAsString to (clipboard info) as string

    if cbInfoAsString does not contain "«class furl»" and ¬
        cbInfoAsString contains "TIFF picture" then

        set formattedDate to do shell script ¬
            "date -j '+%Y-%m-%d at %I.%M.%S %p'"

        tell application "Finder" to set thePath to ¬
            (insertion location as alias) & ¬
            formattedDate & ".png" as string

        do shell script "/usr/local/bin/pngpaste " & ¬
            the quoted form of the POSIX path of thePath

    else if cbInfoAsString contains "«class furl»" then

        tell application "System Events" to ¬
            keystroke "v" using control down

    end if

end run

Notes :

  • POSIX path fait partie de Ajouts standard pas Finder et ne doit pas être enveloppé dans un tell déclaration de Finder .
  • Si l'on ne fixe pas le date avec le date commande utilisez le -j option .
  • J'ai modifié votre date commande à utiliser Durée de 12 heures comme typiquement Durée de 24 heures n'utilise pas AM/PM et j'ai ajouté des modifications supplémentaires pour le rendre plus lisible, et conforme au système par défaut utilisé avec les captures d'écran.
  • Si vous voulez Durée de 24 heures puis utiliser par exemple : "date -j '+%Y-%m-%d at %H.%M.%S'"
  • Tel que codé, s'il y a autre chose qu'un fichier(s)/dossier(s) ou simplement un image le script ne tentera pas de traiter texte si c'est ce qu'il y a sur le presse-papiers.

0 votes

Cela fonctionne parfaitement. Merci beaucoup !

0 votes

@Landon, RE : "Cela fonctionne parfaitement." -- Compte tenu de l'usage que vous voulez en faire, c'est-à-dire la insertion location retourné par Finder vous avez lire/écrire permissions, cela devrait fonctionner sans problème. Cependant, comme il n'y a pas de gestion des erreurs inclus dans le code cela peut être problématique si le courant insertion location n'est pas accessible en écriture par exemple Récents o Tags est sélectionné dans Finder ou Machintosh HD . J'ai juste pensé que cela valait la peine d'être mentionné.

0 votes

Une approche plus directe qui évite le recours au "pngpaste" serait de write (the clipboard as "PNGf") to f as "PNGf" (après avoir confirmé clipboard info for ”PNGf” != {} et créer le fichier close access (open for access f)f est le chemin posix vers lequel écrire). De même, plutôt que d'appuyer sur une touche pour coller, on peut soit lire le contenu du fichier furl et l'écrire comme précédemment ; ou bien, utiliser le Finder ou System Events pour dupliquer le fichier à partir du chemin stocké dans l'objet furl lui-même à l'objet insertion location . [ Je réalise que ce sont les parties préservées du code de l'OP ].

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X