quand je dis "expérimentalement", je veux dire qu'au finder j'ai changé
la couleur d'un fichier (sous Mavericks) puis j'ai lu au shell sa
couleur par :
/usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
bon, ensuite j'écris un osascript pour setter la couleur :
osascript - $label $file << EOF
on run argv
set labelIndex to (item 1 of argv as number)
tell application "Finder"
set theFile to POSIX file (item 2 of argv) as alias
set label index of theFile to labelIndex
end tell
return (item 1 of argv as number)
end run
EOF
ça me retourne le bon label.
MAIS, si je lis après coup le label (avec "mdls -name kMDItemFSLabel
...") ça ne me retourne pas la même chose...
par exemple si je choisis 2 avec osascript, ça me lit 6 avec mdls...
Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le label...
Patrick -- Patrick Stadelmann
Une Bévue
Le 21/02/2014 11:54, Patrick Stadelmann a écrit :
Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le label...
Euh, je ne pige pas.
Peut-être n'ais-je pas été clair.
je set le label par : osascript - $label $file << EOF on run argv set labelIndex to (item 1 of argv as number) tell application "Finder" set theFile to POSIX file (item 2 of argv) as alias set label index of theFile to labelIndex end tell return (item 1 of argv as number) end run EOF
puis je le relis par : /usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
(en fait ces deux fonctions sont wrappées par du ruby (voire + bas)
j'obtiens donc 2 alors que mon fichier est en vert (6)...
même chose sur Mavericks et Mountain Lion
le script (j'ai "rusé" en ayant deux hashes lecture/écriture) : -------------------------------------------------------------------------------- #!/usr/bin/env ruby # encoding: utf-8
$: << "#{ENV['HOME']}/lib/ruby2.0"
require 'rubygems' require 'open3'
def getHostname hostname = "UNKNOWN" o, s = Open3.capture2("/bin/hostname") if s.exitstatus == 0 o.each_line do |line| hostname = line.chomp end end return hostname end def getFileColorLabel(file) label_code = 0 o, s = Open3.capture2("/usr/bin/mdls -name kMDItemFSLabel '#{file}'") if s.exitstatus == 0 o.each_line do |line| label_code = line.chomp.gsub(/^kMDItemFSLabel = (d*)/, '1').to_i end end return @label_code2name_read[label_code] end def setFileColorLabel(file, label_name) label_code = @label_name2code_write[label_name] cmd = "osascript - #{label_code} '#{file}' << EOF on run argv set labelIndex to (item 1 of argv as number) tell application "Finder" set theFile to POSIX file (item 2 of argv) as alias set label index of theFile to labelIndex end tell return (item 1 of argv as number) end run EOF " o, s = Open3.capture2(cmd) if s.exitstatus == 0 return s.exitstatus, getFileColorLabel(file) end return s.exitstatus, "unknown" end
i = 0 Dir.glob("#{ENV['HOME']}/Installations/*#{@hostname_glob[getHostname]}*").each do |file| #puts file label_name = getFileColorLabel(file) #puts "File "#{File.basename(file)}" is of label #{label}, "#{label_name}"" if label_name == 'Green' #puts "File "#{File.basename(file)}" label is "#{label_name}"" else status, label_name = setFileColorLabel(file, 'Green') puts "File "#{File.basename(file)}" label changed to "#{label_name}"" if status == 0 puts "Unable to change file "#{File.basename(file)}" color." if status != 0 i += 1 end end puts "#{i} file(s) colored." --------------------------------------------------------------------------------
Le 21/02/2014 11:54, Patrick Stadelmann a écrit :
Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le
label...
Euh, je ne pige pas.
Peut-être n'ais-je pas été clair.
je set le label par :
osascript - $label $file << EOF
on run argv
set labelIndex to (item 1 of argv as number)
tell application "Finder"
set theFile to POSIX file (item 2 of argv) as alias
set label index of theFile to labelIndex
end tell
return (item 1 of argv as number)
end run
EOF
puis je le relis par :
/usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
(en fait ces deux fonctions sont wrappées par du ruby (voire + bas)
j'obtiens donc 2 alors que mon fichier est en vert (6)...
même chose sur Mavericks et Mountain Lion
le script (j'ai "rusé" en ayant deux hashes lecture/écriture) :
--------------------------------------------------------------------------------
#!/usr/bin/env ruby
# encoding: utf-8
$: << "#{ENV['HOME']}/lib/ruby2.0"
require 'rubygems'
require 'open3'
def getHostname
hostname = "UNKNOWN"
o, s = Open3.capture2("/bin/hostname")
if s.exitstatus == 0
o.each_line do |line|
hostname = line.chomp
end
end
return hostname
end
def getFileColorLabel(file)
label_code = 0
o, s = Open3.capture2("/usr/bin/mdls -name kMDItemFSLabel '#{file}'")
if s.exitstatus == 0
o.each_line do |line|
label_code = line.chomp.gsub(/^kMDItemFSLabel = (d*)/, '1').to_i
end
end
return @label_code2name_read[label_code]
end
def setFileColorLabel(file, label_name)
label_code = @label_name2code_write[label_name]
cmd = "osascript - #{label_code} '#{file}' << EOF
on run argv
set labelIndex to (item 1 of argv as number)
tell application "Finder"
set theFile to POSIX file (item 2 of argv) as alias
set label index of theFile to labelIndex
end tell
return (item 1 of argv as number)
end run
EOF
"
o, s = Open3.capture2(cmd)
if s.exitstatus == 0
return s.exitstatus, getFileColorLabel(file)
end
return s.exitstatus, "unknown"
end
i = 0
Dir.glob("#{ENV['HOME']}/Installations/*#{@hostname_glob[getHostname]}*").each
do |file|
#puts file
label_name = getFileColorLabel(file)
#puts "File "#{File.basename(file)}" is of label #{label},
"#{label_name}""
if label_name == 'Green'
#puts "File "#{File.basename(file)}" label is "#{label_name}""
else
status, label_name = setFileColorLabel(file, 'Green')
puts "File "#{File.basename(file)}" label changed to
"#{label_name}"" if status == 0
puts "Unable to change file "#{File.basename(file)}" color." if
status != 0
i += 1
end
end
puts "#{i} file(s) colored."
--------------------------------------------------------------------------------
Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le label...
Euh, je ne pige pas.
Peut-être n'ais-je pas été clair.
je set le label par : osascript - $label $file << EOF on run argv set labelIndex to (item 1 of argv as number) tell application "Finder" set theFile to POSIX file (item 2 of argv) as alias set label index of theFile to labelIndex end tell return (item 1 of argv as number) end run EOF
puis je le relis par : /usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
(en fait ces deux fonctions sont wrappées par du ruby (voire + bas)
j'obtiens donc 2 alors que mon fichier est en vert (6)...
même chose sur Mavericks et Mountain Lion
le script (j'ai "rusé" en ayant deux hashes lecture/écriture) : -------------------------------------------------------------------------------- #!/usr/bin/env ruby # encoding: utf-8
$: << "#{ENV['HOME']}/lib/ruby2.0"
require 'rubygems' require 'open3'
def getHostname hostname = "UNKNOWN" o, s = Open3.capture2("/bin/hostname") if s.exitstatus == 0 o.each_line do |line| hostname = line.chomp end end return hostname end def getFileColorLabel(file) label_code = 0 o, s = Open3.capture2("/usr/bin/mdls -name kMDItemFSLabel '#{file}'") if s.exitstatus == 0 o.each_line do |line| label_code = line.chomp.gsub(/^kMDItemFSLabel = (d*)/, '1').to_i end end return @label_code2name_read[label_code] end def setFileColorLabel(file, label_name) label_code = @label_name2code_write[label_name] cmd = "osascript - #{label_code} '#{file}' << EOF on run argv set labelIndex to (item 1 of argv as number) tell application "Finder" set theFile to POSIX file (item 2 of argv) as alias set label index of theFile to labelIndex end tell return (item 1 of argv as number) end run EOF " o, s = Open3.capture2(cmd) if s.exitstatus == 0 return s.exitstatus, getFileColorLabel(file) end return s.exitstatus, "unknown" end
i = 0 Dir.glob("#{ENV['HOME']}/Installations/*#{@hostname_glob[getHostname]}*").each do |file| #puts file label_name = getFileColorLabel(file) #puts "File "#{File.basename(file)}" is of label #{label}, "#{label_name}"" if label_name == 'Green' #puts "File "#{File.basename(file)}" label is "#{label_name}"" else status, label_name = setFileColorLabel(file, 'Green') puts "File "#{File.basename(file)}" label changed to "#{label_name}"" if status == 0 puts "Unable to change file "#{File.basename(file)}" color." if status != 0 i += 1 end end puts "#{i} file(s) colored." --------------------------------------------------------------------------------
Patrick Stadelmann
In article <le7i89$3if$, Une Bévue wrote:
Le 21/02/2014 11:54, Patrick Stadelmann a écrit : > Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le > label...
Euh, je ne pige pas.
Peut-être n'ais-je pas été clair.
je set le label par : osascript - $label $file << EOF on run argv set labelIndex to (item 1 of argv as number) tell application "Finder" set theFile to POSIX file (item 2 of argv) as alias set label index of theFile to labelIndex end tell return (item 1 of argv as number) end run EOF
puis je le relis par : /usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
La valeur retournée par osascript est celle que tu lui a passée, tu pourrais mettre en commentaire le bloc "tell" que tu observerais toujours que "ça me retourne le bon label".
A mon avis labelIndex n'est pas du bon type (integer j'imagine). Ca peut être du texte, ou pire, une référence du type "item 1 of <list>", raison pour laquelle la modification n'est pas effectuée.
Patrick -- Patrick Stadelmann
In article <le7i89$3if$1@shakotay.alphanet.ch>,
Une Bévue <unbewusst.sein@fai.invalid> wrote:
Le 21/02/2014 11:54, Patrick Stadelmann a écrit :
> Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le
> label...
Euh, je ne pige pas.
Peut-être n'ais-je pas été clair.
je set le label par :
osascript - $label $file << EOF
on run argv
set labelIndex to (item 1 of argv as number)
tell application "Finder"
set theFile to POSIX file (item 2 of argv) as alias
set label index of theFile to labelIndex
end tell
return (item 1 of argv as number)
end run
EOF
puis je le relis par :
/usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
La valeur retournée par osascript est celle que tu lui a passée, tu
pourrais mettre en commentaire le bloc "tell" que tu observerais
toujours que "ça me retourne le bon label".
A mon avis labelIndex n'est pas du bon type (integer j'imagine). Ca peut
être du texte, ou pire, une référence du type "item 1 of <list>", raison
pour laquelle la modification n'est pas effectuée.
Patrick
--
Patrick Stadelmann <Patrick.Stadelmann@unine.ch>
Le 21/02/2014 11:54, Patrick Stadelmann a écrit : > Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le > label...
Euh, je ne pige pas.
Peut-être n'ais-je pas été clair.
je set le label par : osascript - $label $file << EOF on run argv set labelIndex to (item 1 of argv as number) tell application "Finder" set theFile to POSIX file (item 2 of argv) as alias set label index of theFile to labelIndex end tell return (item 1 of argv as number) end run EOF
puis je le relis par : /usr/bin/mdls -name kMDItemFSLabel <le fichier en question>
La valeur retournée par osascript est celle que tu lui a passée, tu pourrais mettre en commentaire le bloc "tell" que tu observerais toujours que "ça me retourne le bon label".
A mon avis labelIndex n'est pas du bon type (integer j'imagine). Ca peut être du texte, ou pire, une référence du type "item 1 of <list>", raison pour laquelle la modification n'est pas effectuée.
Patrick -- Patrick Stadelmann
Une Bévue
Le 21/02/2014 15:38, Patrick Stadelmann a écrit :
La valeur retournée par osascript est celle que tu lui a passée, tu pourrais mettre en commentaire le bloc "tell" que tu observerais toujours que "ça me retourne le bon label".
oui, d'accord c'est juste pour retourner qqc. mais la fonction ruby, elle, retourne getFileColorLabel(file).
A mon avis labelIndex n'est pas du bon type (integer j'imagine). Ca peut être du texte, ou pire, une référence du type "item 1 of <list>", raison pour laquelle la modification n'est pas effectuée.
non, la modification est bien effectuée Mais je dois demander 2 pour avoir 6 et vice versa.
je vois bien que la modif est effectuée car j'ai bien mes fichiers en vert comme demandé avec cette "astuce" d'utiliser des hashes différents pour lecture et écriture :
La valeur retournée par osascript est celle que tu lui a passée, tu
pourrais mettre en commentaire le bloc "tell" que tu observerais
toujours que "ça me retourne le bon label".
oui, d'accord c'est juste pour retourner qqc.
mais la fonction ruby, elle, retourne getFileColorLabel(file).
A mon avis labelIndex n'est pas du bon type (integer j'imagine). Ca peut
être du texte, ou pire, une référence du type "item 1 of <list>", raison
pour laquelle la modification n'est pas effectuée.
non, la modification est bien effectuée Mais je dois demander 2 pour
avoir 6 et vice versa.
je vois bien que la modif est effectuée car j'ai bien mes fichiers en
vert comme demandé avec cette "astuce" d'utiliser des hashes différents
pour lecture et écriture :
La valeur retournée par osascript est celle que tu lui a passée, tu pourrais mettre en commentaire le bloc "tell" que tu observerais toujours que "ça me retourne le bon label".
oui, d'accord c'est juste pour retourner qqc. mais la fonction ruby, elle, retourne getFileColorLabel(file).
A mon avis labelIndex n'est pas du bon type (integer j'imagine). Ca peut être du texte, ou pire, une référence du type "item 1 of <list>", raison pour laquelle la modification n'est pas effectuée.
non, la modification est bien effectuée Mais je dois demander 2 pour avoir 6 et vice versa.
je vois bien que la modif est effectuée car j'ai bien mes fichiers en vert comme demandé avec cette "astuce" d'utiliser des hashes différents pour lecture et écriture :
maintenant, si je fais ça par AppleScript : <http://stackoverflow.com/questions/1464641/how-to-see-what-label-color-is-on-a-file-folder-from-within-termnal-mac-os-x>
tell application "Finder" set theArg to POSIX file ("/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label.rb__on_iMac.txt") as alias set labelIndex to (get label index of theArg) end tell
{labelIndex}
j'obtiens 6 soit la BONNE VALEUR...
Bon, le problème existe uniquement à la lecture, sur un fichier en vert,
j'obtiens, au terminal :
maintenant, si je fais ça par AppleScript :
<http://stackoverflow.com/questions/1464641/how-to-see-what-label-color-is-on-a-file-folder-from-within-termnal-mac-os-x>
tell application "Finder"
set theArg to POSIX file
("/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label.rb__on_iMac.txt")
as alias
set labelIndex to (get label index of theArg)
end tell
maintenant, si je fais ça par AppleScript : <http://stackoverflow.com/questions/1464641/how-to-see-what-label-color-is-on-a-file-folder-from-within-termnal-mac-os-x>
tell application "Finder" set theArg to POSIX file ("/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label.rb__on_iMac.txt") as alias set labelIndex to (get label index of theArg) end tell
{labelIndex}
j'obtiens 6 soit la BONNE VALEUR...
Patrick Stadelmann
In article <le8apn$n7v$, Une Bévue wrote:
Bon, le problème existe uniquement à la lecture, sur un fichier en vert, j'obtiens, au terminal :
maintenant, si je fais ça par AppleScript : <http://stackoverflow.com/questions/1464641/how-to-see-what-label-color-is-on- a-file-folder-from-within-termnal-mac-os-x>
tell application "Finder" set theArg to POSIX file ("/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label .rb__on_iMac.txt") as alias set labelIndex to (get label index of theArg) end tell
{labelIndex}
j'obtiens 6 soit la BONNE VALEUR...
Il y a eu des changements dans Mavericks vu que maintenant on peut mette plusieurs tags sur le même fichier. Les incohérences ci-dessus viennent peut-être de là (il me semble que l'article de Jon Siracusa sur OS X 10.9 parle de cela).
Patrick -- Patrick Stadelmann
In article <le8apn$n7v$1@shakotay.alphanet.ch>,
Une Bévue <unbewusst.sein@fai.invalid> wrote:
Bon, le problème existe uniquement à la lecture, sur un fichier en vert,
j'obtiens, au terminal :
maintenant, si je fais ça par AppleScript :
<http://stackoverflow.com/questions/1464641/how-to-see-what-label-color-is-on-
a-file-folder-from-within-termnal-mac-os-x>
tell application "Finder"
set theArg to POSIX file
("/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label
.rb__on_iMac.txt")
as alias
set labelIndex to (get label index of theArg)
end tell
{labelIndex}
j'obtiens 6 soit la BONNE VALEUR...
Il y a eu des changements dans Mavericks vu que maintenant on peut mette
plusieurs tags sur le même fichier. Les incohérences ci-dessus viennent
peut-être de là (il me semble que l'article de Jon Siracusa sur OS X
10.9 parle de cela).
Patrick
--
Patrick Stadelmann <Patrick.Stadelmann@unine.ch>
maintenant, si je fais ça par AppleScript : <http://stackoverflow.com/questions/1464641/how-to-see-what-label-color-is-on- a-file-folder-from-within-termnal-mac-os-x>
tell application "Finder" set theArg to POSIX file ("/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label .rb__on_iMac.txt") as alias set labelIndex to (get label index of theArg) end tell
{labelIndex}
j'obtiens 6 soit la BONNE VALEUR...
Il y a eu des changements dans Mavericks vu que maintenant on peut mette plusieurs tags sur le même fichier. Les incohérences ci-dessus viennent peut-être de là (il me semble que l'article de Jon Siracusa sur OS X 10.9 parle de cela).
Patrick -- Patrick Stadelmann
Une Bévue
Le 24/02/2014 09:47, Patrick Stadelmann a écrit :
Il y a eu des changements dans Mavericks vu que maintenant on peut mette plusieurs tags sur le même fichier. Les incohérences ci-dessus viennent peut-être de là (il me semble que l'article de Jon Siracusa sur OS X 10.9 parle de cela).
ben oui, je savais ça, aussi j'ai pris le soin de ne peindre qu'une couleur...
c'est cet article: <http://arstechnica.com/apple/2013/10/os-x-10-9/8/> ?
bon, je vois le binz, ça "marche" sur ML et mav avec le même osascript, mais bon, ça reste suspendu aux nouveaux tags...
Le 24/02/2014 09:47, Patrick Stadelmann a écrit :
Il y a eu des changements dans Mavericks vu que maintenant on peut mette
plusieurs tags sur le même fichier. Les incohérences ci-dessus viennent
peut-être de là (il me semble que l'article de Jon Siracusa sur OS X
10.9 parle de cela).
ben oui, je savais ça, aussi j'ai pris le soin de ne peindre qu'une
couleur...
c'est cet article:
<http://arstechnica.com/apple/2013/10/os-x-10-9/8/>
?
bon, je vois le binz, ça "marche" sur ML et mav avec le même osascript,
mais bon, ça reste suspendu aux nouveaux tags...
Il y a eu des changements dans Mavericks vu que maintenant on peut mette plusieurs tags sur le même fichier. Les incohérences ci-dessus viennent peut-être de là (il me semble que l'article de Jon Siracusa sur OS X 10.9 parle de cela).
ben oui, je savais ça, aussi j'ai pris le soin de ne peindre qu'une couleur...
c'est cet article: <http://arstechnica.com/apple/2013/10/os-x-10-9/8/> ?
bon, je vois le binz, ça "marche" sur ML et mav avec le même osascript, mais bon, ça reste suspendu aux nouveaux tags...
Patrick Stadelmann
In article <lef8vt$kiu$, Une Bévue wrote:
c'est cet article: <http://arstechnica.com/apple/2013/10/os-x-10-9/8/> ?
Oui, mais surtout la page suivante qui détaille comment c'est implémenté.
Patrick -- Patrick Stadelmann
In article <lef8vt$kiu$1@shakotay.alphanet.ch>,
Une Bévue <unbewusst.sein@fai.invalid> wrote:
c'est cet article:
<http://arstechnica.com/apple/2013/10/os-x-10-9/8/>
?
Oui, mais surtout la page suivante qui détaille comment c'est implémenté.
Patrick
--
Patrick Stadelmann <Patrick.Stadelmann@unine.ch>