Samstag, 24. Juli 2010

Nautilus-Erweiterung mit Python

Heute gab es bei mir ja schon eine Explorer-Erweiterung mit Python. Das gleiche benötige ich auch am heimischen Rechner - nur unter Nautilus:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib
import easygui
import logging
import nautilus
import os

CCDFOLDERS =  [
 'source',
 'bin',
 'build',
 'lib',
 'resource',
 ]

class CcdDirStructureExtension(nautilus.MenuProvider):

 def __init__(self):
  pass
 
 
 def _alertError(self, message):
  easygui.msgbox(message, title='Alert', ok_button='Mist!')
 
 
 def _create_ccd_structure(self, foldername):
  ok = easygui.ynbox(msg=u'wirklich eine CCD-Struktur ersellen in\n' + foldername,
   title=u'Erstellen bestägen', choices=('Ja, bitte', 'Nein, danke'))
  if ok == 0:
   return

  if  not os.path.isdir(foldername):
   self._alertError(foldername + u'\nist kein Verzeichnis. Abgebrochen.')
   return

  try:
   for ccd in CCDFOLDERS:
    dir = os.path.join(foldername, ccd)
    os.mkdir(dir)
  except Exception, e:
   self._alertError(e)
   raise
 
 
 def menu_activate(self, menu, file):
  """Called when the user selects the menu."""
  filename = urllib.unquote(file.get_uri()[7:])
  self._create_ccd_structure(filename)


 def get_file_items(self, window, files):
  """Called when the user selects a file in Nautilus."""  
  if len(files) != 1:
   return
   
  file = files[0]
  if not file.is_directory() or file.get_uri_scheme() != 'file':
   return

  return self._get_MenuItemForFile(file)
  

 def get_background_items(self, window, file):
  """Called when the user clicks the background of a Nautilus-Window"""
  if not file.is_directory() or file.get_uri_scheme() != 'file':
   return
  return self._get_MenuItemForFile(file)


 def _get_MenuItemForFile(self, file):
  item = nautilus.MenuItem("NautilusPython::ccd-dir::create",
   "CCD-Struktur", 
   "erstellt eine CCD-Verzeichnisstruktur in %s" % file.get_name())
  item.connect("activate", self.menu_activate, file)
  return item,


if __name__ == '__main__':
 print 'This is a Nautilus extenion. Copy it to ${HOME}/.nautilus/python-extensions/ and restart Nautilus. Have fun.'
Der Code gehört bei Installierten Nautilus-Python-Bindings nach ${HOME}/.nautilus/python‑extensions/ und sollte ausführbar sein (chmod 755).
Die Dialoge werden von EasyGui erstellt, irgendwie gab es Probleme gtk-Dialoge zu erzeugen...

Keine Kommentare:

Kommentar veröffentlichen