changer les "color labels"

Le
Une Bévue
J'ai googleisé pour savoir comment changer les color labels avec un
script, par ex :

<http://stackoverflow.com/questions/2435580/tagging-files-with-colors-in-os-x-finder-from-shell-scripts>

qui donne :
echo " 0 No color"
echo " 1 Orange"
echo " 2 Red"
echo " 3 Yellow"
echo " 4 Blue"
echo " 5 Purple"
echo " 6 Green"
echo " 7 Gray"

***expérimentalement*** j'ai trouvé :
0 => "No color",
1 => "Gray",
2 => "Green",
3 => "Purple",
4 => "Blue",
5 => "Yellow",
6 => "Red",
7 => "Orange",

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

une idée ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Stadelmann
Le #26000012
In article Une Bévue
ça me retourne le bon label.



Ca retourne ce que tu as passé dans argv ! Nulle part tu ne relis le
label...

Patrick
--
Patrick Stadelmann
Une Bévue
Le #26000142
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)

par exemple, en cli :

$ mdls -name kMDItemFSLabel
/Users/yt/Installations/14_02_21__13_12_34__._bin_scripts_finder_color_label.rb__on_d620.txt
kMDItemFSLabel = 2

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

@label_code2name_read = {
0 => "No color",
1 => "Gray",
2 => "Green",
3 => "Purple",
4 => "Blue",
5 => "Yellow",
6 => "Red",
7 => "Orange",
}
@label_name2code_read = @label_code2name_read.invert
@label_code2name_write = {
0 => "No color",
1 => "Orange",
2 => "Red",
3 => "Yellow",
4 => "Blue",
5 => "Purple",
6 => "Green",
7 => "Gray",
}
@label_name2code_write = @label_code2name_write.invert
@hostname_glob = {
'iMac.local' => '620',
'd620.local' => 'iMac'
}

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
Le #26000302
In article 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>



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 #26000412
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 :

lecture :
@label_code2name_read = {
0 => "No color",
1 => "Gray",
2 => "Green",
3 => "Purple",
4 => "Blue",
5 => "Yellow",
6 => "Red",
7 => "Orange",
}

écriture :
@label_code2name_write = {
0 => "No color",
1 => "Orange",
2 => "Red",
3 => "Yellow",
4 => "Blue",
5 => "Purple",
6 => "Green",
7 => "Gray",
}

c'est cette dernière correspondance que "tout" le monde donne.

MAIS, si au terminal, je lis (sous ML ou Mav) un fichier peint en vert
(code 6 normalement) ça me retourne 2 :

$ mdls -name kMDItemFSLabel <un fichier peint en vert>
kMDItemFSLabel = 2

bon.
Une Bévue
Le #26000692
Bon, le problème existe uniquement à la lecture, sur un fichier en vert,
j'obtiens, au terminal :

$ mdls -name kMDItemFSLabel
/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label.rb__on_iMac.txt
kMDItemFSLabel = 2

label = 2 => rouge...

maintenant, si je fais ça par AppleScript :

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
Le #26004492
In article Une Bévue
Bon, le problème existe uniquement à la lecture, sur un fichier en vert,
j'obtiens, au terminal :

$ mdls -name kMDItemFSLabel
/Users/yt/Installations/14_02_21__13_14_03__._bin_scripts_finder_color_label.r
b__on_iMac.txt
kMDItemFSLabel = 2

label = 2 => rouge...

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 #26004702
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:
?

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
Le #26004692
In article Une Bévue
c'est cet article:
?



Oui, mais surtout la page suivante qui détaille comment c'est implémenté.

Patrick
--
Patrick Stadelmann
Une Bévue
Le #26004822
Le 24/02/2014 12:09, Patrick Stadelmann a écrit :
Oui, mais surtout la page suivante qui détaille comment c'est implémenté.



OK, OK, merci bien.

Je viens de m'apercevoir que les "custom icons" de volumes c'est
différent aussi...
Publicité
Poster une réponse
Anonyme