Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

changer les "color labels"

9 réponses
Avatar
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 ?

9 réponses

Avatar
Patrick Stadelmann
In article <le77fg$k83$,
Une Bévue wrote:

ç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
Avatar
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)

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."
--------------------------------------------------------------------------------
Avatar
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
Avatar
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 :

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.
Avatar
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.rb__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...
Avatar
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 :

$ 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
Avatar
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...
Avatar
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
Avatar
Une Bévue
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...