Salut ;
Dans mon répertoire photo, lui même segmenté en sous répertoire qui contient les photos, j'aimerai remplacer l'icone du dossier par une des photos présentes à l'intèrieur.
J'ai bien vu la possibilité de le réaliser via un clique droit sur le dossier --> Proprièté --> image du dossier --> puis sélection d'une photo
Mais évidemment je voudrai pouvoir le faire en ligne de commande pour éviter le fastidieux boulot de le faire à la main.
L'un des problèmes, c'est que j'ignore ou ce fait l'association entre le nom du dossier et la photos.
Quelqu'un serait expliquer comment réaliser cela, ou aurait une partie de la réponse ?
Nautilus : remplacer l'icône du dossier par une photo
- warnaud
- Maître du Kyudo
- Messages : 1640
- Inscription : ven. 11 août 2006, 17:05
- Localisation : Rolle (CH)
tu dois avoir un fichier caché à la racine de ton répertoire, un fichier .quelquechose (note le '.' devant) et c'est dans ce fichier que tu trouveras ton bonheur
Plus ça rate, plus ça a de chance de réussir. En somme, un succès n'est qu'une erreur qui a finit par réussir (même par erreur). Ne déséspérez donc pas et perseverez. Utilisez La Rache™
Patientia quod lard quod barrus planto diligo ut licentia
—¤÷(`[¤*Powered By *¤]´)÷¤—
Archlinux ~ Fvwm ~ Irssi ~ URxvt
Patientia quod lard quod barrus planto diligo ut licentia
—¤÷(`[¤*Powered By *¤]´)÷¤—
Archlinux ~ Fvwm ~ Irssi ~ URxvt
Bon, j'ai fini par trouver quelqu'un qui a fait le boulot. Je me disais bien que je pouvais pas être le seul à vouloir réaliser cette manipe.
http://dwayneb.free.fr/blog/index.php/2 ... splaycover
Chez moi le script marche
Je fais un copier/coller du script. Histoire que si le site disparait, j'ai un lieu ou le repiocher.
http://dwayneb.free.fr/blog/index.php/2 ... splaycover
Chez moi le script marche
Je fais un copier/coller du script. Histoire que si le site disparait, j'ai un lieu ou le repiocher.
Code : Tout sélectionner
#!/usr/bin/python
#---------------------------------------------------------------------------
# @lincense CC-LGPL (http://creativecommons.org/licenses/LGPL/2.1/)
# @author David Bernard
# @version 0.4
#---------------------------------------------------------------------------
#TODO : add option to use the first image as cover for directory with images
# convert "$IMAGE" -thumbnail x200 -resize '200x<' -resize 50% -gravity center -crop 100x100+0+0 cover.png
#TODO : add option to create a snapshot of images directory (??)
#TODO : retreive cover from www for directories with mp3, ogg (eg: http://www.allcdcovers.com/api)
#TODO : generate thumbail
#TODO : convert jpg and gif to png (because KDE only support png)
#---------------------------------------------------------------------------
# CHANGELOG
# 0.4
# * fix bug : in encoding of nautilus metafilename
#
import logging
from optparse import OptionParser
import sys
import os
import os.path
import posix
#for nautilus
import xml.dom.minidom
import urllib
options = None
nautilusMetaDirPath = os.path.join(posix.environ['HOME'], ".nautilus/metafiles")
freedesktopTemplate = """
[Desktop Entry]
Icon=%(iconPath)s
"""
emptyMetafile4Nautilus = """<?xml version="1.0"?>
<directory></directory>
"""
def defineCover(arg, dirname, names) :
logging.info("analyse %s", dirname)
iconPath = findIcon(dirname)
if iconPath != None :
setMeta4Freedesktop(dirname, iconPath)
setMeta4Nautilus(dirname, iconPath)
def findIcon(dirPath):
logging.debug("findIcon of %s", dirPath)
iconPath = os.path.join(dirPath, options.iconName)
if os.path.exists(iconPath) :
return "./" + options.iconName
return None
def setMeta4Freedesktop(dirPath, iconPath):
if not options.freedesktop:
return
logging.debug("set meta for freedesktop of %s", dirPath)
filePath =os.path.join(dirPath, ".directory")
if not isCreateFileAllowed(filePath, "replace"):
return
content = freedesktopTemplate % {'dirPath':dirPath, 'dirName': os.path.basename(dirPath), 'iconPath':iconPath}
createFile(filePath, content)
def setMeta4Nautilus(dirPath, iconPath):
if not options.nautilus:
return
logging.debug("set meta for nautilus of %s", dirPath)
(parentPath, dirName) = os.path.split(dirPath)
dirName = urllib.quote(dirName)
filePath = "//" + parentPath + ".xml"
filePath = urllib.quote(urllib.quote(filePath))
filePath = "file:" + filePath.replace("/", "%2F")
filePath = os.path.join(nautilusMetaDirPath, filePath)
if not isCreateFileAllowed(filePath, "update"):
return
dom = None
if (os.path.exists(filePath)):
dom = xml.dom.minidom.parse(filePath)
else :
dom = xml.dom.minidom.parseString(emptyMetafile4Nautilus)
targetNode = None
for fileNode in dom.getElementsByTagName("file"):
if fileNode.getAttribute("name") == dirName :
targetNode = fileNode
break
if targetNode is None:
targetNode = dom.createElement("file")
targetNode.setAttribute("name", dirName)
dom.getElementsByTagName("directory")[0].appendChild(targetNode)
targetNode.setAttribute("custom_icon", iconPath)
createFile(filePath, dom.toxml())
def isCreateFileAllowed(filePath, action):
logging.debug("try create file : %s", filePath)
if not(options.replaceAlways) and os.path.exists(filePath) :
if options.keepFile or not prompt("meta already exists(%s),\n\t do you want to %s it" % (filePath, action)) :
logging.debug("meta already exist, nothing to do : %s", filePath)
return False
return True
def createFile(filePath, content):
logging.info("create file : %s", filePath)
fileHandle = open(filePath, 'w' )
fileHandle.write(content)
fileHandle.close()
Y = True
y = True
yes = True
O = True
o = True
oui = True
N = False
n = False
no = False
non = False
def prompt(message):
response = input(message + " (Y/N) :")
return response
def main():
parser = OptionParser(usage="usage: %prog [options] dir", version="%prog 0.3")
parser.add_option("-i", "--icon", dest="iconName", default="cover.png", help="filename of icon image (default: cover.png)")
parser.add_option("-f", "--freedesktop", action="store_true", dest="freedesktop", default=False, help="generate freedesktop, KDE .directory file (default: false)")
parser.add_option("-n", "--nautilus", action="store_true", dest="nautilus", default=False, help="generate nautilus metafiles (default: false)")
parser.add_option("-r", "--replaceAlways", dest="replaceAlways", default=False, action="store_true", help="always replace/update files (=> no prompt) (default: false)")
parser.add_option("-k", "--keepFile", dest="keepFile", default=False, action="store_true", help="never replace files (=> no prompt) (default: false)")
parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="don't print status messages to stdout")
parser.add_option("-d", "--debug", action="store_true", dest="debug", default=False, help="print debug messages to stdout")
(options, args) = parser.parse_args()
if len(args) != 1:
parser.error("incorrect number of arguments")
if not options.nautilus and not options.freedesktop:
parser.error("you must choose --nautilus and/or --freedesktop option")
if options.verbose :
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
elif options.debug :
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s')
else :
logging.basicConfig(level=logging.WARNING, format='%(asctime)s %(levelname)s %(message)s')
if options.keepFile :
options.replaceAlways = False
globals()["options"] = options
if options.nautilus and not os.path.exists(nautilusMetaDirPath) :
if prompt("create %s (Y/N)" % nautilusMetaDirPath):
os.path.mkdirs(nautilusMetaDirPath)
else :
options.nautilus = False
dirPath = os.path.abspath(args[0])
os.path.walk(dirPath, defineCover, None)
if __name__ == "__main__":
main()