• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Another impossible feature?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Another impossible feature?


  • Subject: Re: Another impossible feature?
  • From: Yvan KOENIG <email@hidden>
  • Date: Sat, 11 Mar 2017 20:35:42 +0100


I discovered a behavior which I missed.
Getting the URL of the posix path to an alias returns an URL pointing to the original item.
So, the late version posted set correctly the tag upon the original but fails to set it to the alias.
Here is a corrected version.
As I'm not sure that it's a safe way to get the location of the original, I kept the instruction triggering URLByResolvingAliasFileAtURL.

##################################
# on idle.app
# This script MUST be saved as a stay open application
# In real life put it in the list of files to launch on boot.
# to try, just double click its icon
##################################


use AppleScript version "2.4" # Yosemite or higher
use framework "Foundation"
use scripting additions

property reverseTheList : true
# true = build a list whose 7 last items are reversed from standard one
# false = use the standard list but calculate the correct index

#=====
(*
on run
--
end run

#=====

on idle
*)
local |⌘|, p2d, theAliases, tagNames, nbNames, skipHidden, anAlias
local aliasURL, originalURL, theError, fileManager, theFiles, nbItems, indx, theTag
# Some instructions triggered only once
set |⌘| to current application
set p2d to path to desktop as text
set theAliases to {"my alias", "tempo"} #<<<<<<<<<<<<<<<<<<<<<<< Edit to fit your needs
# Grab the standard list of tag names
set tagNames to (|⌘|'s NSWorkspace's sharedWorkspace()'s fileLabels()) as list
(*
1 -- "Aucun", none
2 -- "Gris", gray
3 -- "Vert", green
4 -- "Violet", purple
5 -- "Bleu", blue
6 -- "Jaune", yellow
7 -- "Rouge", red
8 -- "Orange", orange
*)
(*
# Don't ask me why, the labels are ordered backwards compared to tag names.
tell application "Finder"
set label index of anItem to 1 # orange it's 8th tagName
set label index of anItem to 2 # red  it's 7th tagName
set label index of anItem to 3 # yellow  it's 6th tagName
set label index of anItem to 4 # blue  it's 5th tagName
set label index of anItem to 5 # purple  it's 4th tagName
set label index of anItem to 6 # green  it's 3rd tagName
set label index of anItem to 7 # gray  it's 2nd tagName
end tell
*)
set labelNames to reverse of tagNames
set nbNames to count tagNames
set skipHidden to (|⌘|'s NSDirectoryEnumerationSkipsHiddenFiles)
set fileManager to |⌘|'s NSFileManager's defaultManager()

# Now the loop
repeat with anAlias in theAliases
set POSIXAlias to POSIX path of (p2d & anAlias)
set aliasURL to (|⌘|'s class "NSURL"'s fileURLWithPath:POSIXAlias)
log "aliasURL : " & aliasURL
set {originalURL, theError} to (|⌘|'s class "NSURL"'s URLByResolvingAliasFileAtURL:aliasURL options:0 |error|:(reference)) # Thank's to Shane STANLEY
log "originalURL : " & originalURL
set POSIXOriginal to originalURL's |path| as text
set theFiles to (fileManager's contentsOfDirectoryAtURL:originalURL includingPropertiesForKeys:{} options:skipHidden |error|:(missing value))
set nbItems to count theFiles


# A bit of trickery to apply Robert's wishes based upon the fact that he is accustomed to work with label indexes.
# What need to work with tags, not with labels ?
# If we never apply a tag to an item, we may clear its label with : set label index of anItem to 0
# If we apply - at least once - a tag, we are unable to get rid of it with : set label index of anItem to 0
# Yes, you understood, tags are a drug like crack ;-)
if reverseTheList then


if nbItems = 0 then
set indx to nbNames
else
set indx to nbItems
log indx
if (indx + 1) ≥ nbNames then set indx to nbNames - 1
log indx
end if
set theTag to labelNames's item indx
else
if nbItems + 1 ≥ nbNames then
set indx to 2
else if nbItems = 0 then
set indx to 1
else
set indx to nbNames + 1 - nbItems
end if
set theTag to tagNames's item indx
end if
log theTag
(my setTags:{theTag} forItem:POSIXOriginal)
(my setTags:{theTag} forItem:POSIXAlias)


end repeat
(*
return 10 # period of 10 seconds. You may use 5 seconds #<<<<<<<<<<<<<<<<<<<<<<< Edit to fit your needs
end idle
*)
# Handler borrowed to Shane STANLEY
-- Replace tags; pass a list of the new tags plus an URL
on setTags:tagList forItem:fileOrPOSIXPath
local |⌘|, thisURL, theResult, theError


set |⌘| to current application
if class of fileOrPOSIXPath is not text then set fileOrPOSIXPath to POSIX path of fileOrPOSIXPath
set thisURL to |⌘|'s class "NSURL"'s fileURLWithPath:fileOrPOSIXPath -- make URL
set {theResult, theError} to thisURL's setResourceValue:tagList forKey:(|⌘|'s NSURLTagNamesKey) |error|:(reference)
if theResult as boolean is false then error (theError's |localizedDescription|() as text)


end setTags:forItem:

#=====

on quit
continue quit
end quit

#=====



Eureka, I think that I understood why the tag names are in reverse order.
It's the easy way to get the name linked to a label index.

use AppleScript version "2.4" # Yosemite or higher
use framework "Foundation"
use scripting additions

set |⌘| to current application
set targetFile to choose file
# Grab the standard list of tags
set tagNames to (|⌘|'s NSWorkspace's sharedWorkspace()'s fileLabels()) as list
(*
1 -- "Aucun", none
2 -- "Gris", gray
3 -- "Vert", green
4 -- "Violet", purple
5 -- "Bleu", blue
6 -- "Jaune", yellow
7 -- "Rouge", red
8 -- "Orange", orange
*)
set labelNames to (reverse of tagNames)
(*
1 -- "Orange", orange
2 -- "Rouge", red
3 -- "Jaune", yellow
4 -- "Bleu", blue
5 -- "Violet", purple
6 -- "Vert", green
7 -- "Gris", gray
8 -- "Aucun", none
*)
repeat with indx from 1 to 7
tell application "Finder" to set label index of targetFile to indx
log "indx = " & indx & "  colorname = " & labelNames's item indx
end repeat
set indx to 0
tell application "Finder" to set label index of targetFile to indx
log "indx = " & indx & "  colorname = " & last item of labelNames


Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) samedi 11 mars 2017 20:34:54







 _______________________________________________
Do not post admin requests to the list. They will be ignored.
AppleScript-Users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
Archives: http://lists.apple.com/archives/applescript-users

This email sent to email@hidden

  • Follow-Ups:
    • Re: Another impossible feature?
      • From: Yvan KOENIG <email@hidden>
References: 
 >Rép: Another impossible feature? (From: Yvan KOENIG <email@hidden>)
 >Re: Another impossible feature? (From: Yvan KOENIG <email@hidden>)

  • Prev by Date: Re: Posix Path
  • Next by Date: Re: Another impossible feature?
  • Previous by thread: Re: Another impossible feature?
  • Next by thread: Re: Another impossible feature?
  • Index(es):
    • Date
    • Thread