Nautilus in gnome-team ppa hat ein Plugin zum Hinzufügen und Entfernen von Tags und ein Plugin zum Suchen. Als ich das Nautilus-Team um eine neue Panel-Ansicht bat ( https://bugzilla.gnome.org/show_bug.cgi?id=670163 ), erhielt ich diese Antwort.
- the interface that allows to add tracker tags from Nautilus is not part of
Nautilus, but it's an extension
- we will not add any additional side pane, since we intentionally trimmed them
down to Places and Tree for Nautilus 3.0
- I think the best way to do what you want is from Tracker itself; if the UI
utilities shipped with Tracker don't allow you to do this, you should file a
bug against Tracker for it
Deshalb habe ich eigens dafür eine Nautilus-Python-Erweiterung erstellt. Installieren Sie python-nautilus und senden Sie es an den Tracker https://bugzilla.gnome.org/show_bug.cgi?id=670643
sudo apt-get install python nautilus
Kopieren Sie dann den nächsten Code und speichern Sie ihn unter .local / share / nautilus-python / extensions / [filename] .py
#natxooy@gmail.com
#nautilus etiketa bilatzaile
#v 0.1
from gi.repository import Nautilus, GObject
from gi.repository import Gtk as gtk
from gi.repository.GdkPixbuf import Pixbuf
from subprocess import Popen, PIPE, STDOUT,call
from os import path,environ
from sys import platform
from urllib import unquote
from mimetypes import guess_type
import locale
class TagsManager:
def __init__(self):
self.d={}
self.dtag={}
cmd='tracker-tag -t'
p=Popen(cmd,shell=True,stdin=PIPE, stdout=PIPE, stderr=STDOUT,close_fds=True)
output = p.stdout.read()
l=output.split('\n')
while('' in l): l.remove('')
if len(l)>3:
for i in range(2,len(l),3):
if i+2<len(l):self.d[l[i].strip()]=int(l[i+2][:l[i+2].find('f')])
original_list=[i for i in self.d.keys()]
#lk.sort()
decorated = [(s.lower(), s) for s in original_list]
decorated.sort()
lk = [s[1] for s in decorated]
print lk
for tag in lk:
if self.d[tag]<>0:
cmd='tracker-tag -t -s'
p=Popen(cmd,shell=True,stdin=PIPE, stdout=PIPE, stderr=STDOUT,close_fds=True)
output = p.stdout.read()
l=output.split('\n')
ll= [unquote(i.strip()).decode('utf-8') for i in l]
ini=ll.index(tag)
lkini=lk.index(unicode(tag))
if tag==lk[-1]:
resp=ll[ini+1:]
while('' in resp): resp.remove('')
else:
fin=ll.index(lk[lkini+1])
resp=[ll[i] for i in range(ini+1,fin)]
self.dtag[tag]=resp
class Ventana:
def clic(self, widget, event, data=None):
l=[]
lista_nueva=[]
for i in self.todas.get_selection().get_selected_rows()[1]:
t= self.todas.get_model().get_value(self.todas.get_model().get_iter(i), 0)
l.append(t)
if len(l)==1:
lista_nueva=[i for i in self.tm.dtag[l[0]]]
elif len(l)>1:
lista_nueva=[i for i in self.tm.dtag[l[0]]]
for i in l[1:]:
ll=[]
for f in self.tm.dtag[i]:
if f in lista_nueva: ll.append(f)
lista_nueva=[f for f in ll]
else:lista_nueva=[]
self.files.get_model().clear()
lista=[f.encode('utf-8')[7:] for f in lista_nueva]
lf=[i for i in lista if path.isfile(i)]
ld=[i for i in lista if not path.isfile(i)]
lista_nueva=ld+lf
for f in lista_nueva:
mime_type= guess_type(path.basename(f))
if mime_type[0]<>None:
icon= 'gnome-mime-'+mime_type[0].replace('/','-')
else:
print f.encode('utf-8'),path.isfile(f)
if path.isfile(f):icon='gtk-file'
else:icon='folder'
pixbuf = gtk.IconTheme.get_default().load_icon(icon, 48, 0)
self.files.get_model().append([pixbuf,path.basename(f),f])
return False
def open_file(self, iconview, ipath):
model = iconview.get_model()
iter = model.get_iter(ipath)
filename = model.get_value(iter, 2)
if platform == 'linux2':
call(["xdg-open", filename])
return
def __init__(self):
self.tm=TagsManager()
self.paned = gtk.HPaned()
self.existentags = gtk.ListStore(str)
tags=[i for i in self.tm.d.keys()]
tags.sort()
for t in tags:
self.existentags.append([t])
self.todas = gtk.TreeView(self.existentags)
self.todas.get_selection().set_mode(gtk.SelectionMode.MULTIPLE)
cell = gtk.CellRendererText()
self.todas.connect("button_release_event", self.clic, None)
column0=gtk.TreeViewColumn("Tags",cell, text=0)
self.todas.append_column(column0)
scrolled_window = gtk.ScrolledWindow()
scrolled_window.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC)
scrolled_window.add_with_viewport (self.todas)
self.paned.add1(scrolled_window)
self.listfiles = gtk.ListStore(Pixbuf,str,str)
self.files = gtk.IconView.new()
self.files.set_model(self.listfiles)
self.files.set_pixbuf_column(0)
self.files.set_text_column(1)
self.files.connect('item-activated', self.open_file)
scrolled_window2 = gtk.ScrolledWindow()
scrolled_window2.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC)
scrolled_window2.add_with_viewport (self.files)
self.paned.add2(scrolled_window2)
self.paned.set_position(150)
self.paned.show_all()
class PApplication(gtk.Application):
def __init__(self,window):
self.dialog = gtk.Dialog ("Etiketa iragazkia", window, gtk.DialogFlags.MODAL,
(gtk.STOCK_CLOSE, gtk.ResponseType.CLOSE,))
self.dialog.set_icon_name (gtk.STOCK_EDIT)
self.dialog.set_size_request(600, 400)
TS=Ventana()
self.dialog.vbox.pack_start (TS.paned,expand=True, fill=True, padding=0)
class Pr(GObject.GObject, Nautilus.MenuProvider):
def __init__(self):
pass
def ojo(self,menu,window):
d=PApplication(window)
r=d.dialog.run()
d.dialog.destroy()
return
def get_background_items(self, window, files):
return self.menuItem(window)
def get_file_items(self, window, files):
return self.menuItem(window)
def menuItem(self, window):
self.window=window
P = Nautilus.MenuItem(
name="Etiketa iragazkia::Etiketa iragazkia",
label="Etiketa iragazkia",
tip="Etiketa iragazkia"
)
P.connect('activate', self.ojo, window)
return [P]
Und schließlich starten Sie Nautilus neu
nautilus -q
Wenn Sie mit der rechten Maustaste auf eine Datei oder in den Hintergrund klicken, wird ein neuer Menüpunkt "Etiketa iragazkia" (Tag-Filter auf Baskisch) angezeigt.