A menos que você realmente precise da velocidade de C, eu recomendaria uma linguagem de script (Ruby, Python ou similar). Você poderá fazer tarefas sofisticadas sem o tédio de C (sem chamas, por favor).
Veja o que eu faria:
-
Use a interface Python-GTK para criar a GUI: Você só precisa de 4 widgets: A Gtk.Window, uma Gtk.VBox (para armazenar os próximos dois itens), A Gtk.Entry para inserir os tipos de arquivo e um Gtk.TreeView para mostrar os resultados
-
Do Python, você pode combinar facilmente a lista do Gtk.Entry e o comando
find
+ opções + tipos de arquivo, para obter a lista. (Você pode executar o comandofind
desubprocess.checkcall
).
Checkcall
retorna a lista, que você pode mostrar no Gtk.TreeView.
Se você gostaria de aprender Python, existem excelentes tutoriais sobre o 'net. Isso é o tutorial oficial no site do Python . O site learnPython é muito interessante, pois você pode até experimentar seus programas. Este tutorial deve fornecer tudo o que você precisa para usar a GUI coisas em Python com muitos exemplos.
Uma linguagem de script como o Python é ideal para resolver problemas como o que você descreve.
EDIT Eu tive algum tempo e pensei que não seria ruim ter um localizador de GUI compacto. Abaixo está um código de trabalho. Sim, tem mais de 20 linhas, principalmente porque construí toda a GUI no código. Se eu usasse o Glade (um designer de GUI), o código seria reduzido pela metade. Além disso, adicionei uma caixa de diálogo para selecionar a raiz da pesquisa.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# test_finder.py
#
# Copyright 2016 John Coppens <[email protected]>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
from gi.repository import Gtk
import os, fnmatch
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())
self.set_size_request(600, 400)
vbox = Gtk.VBox()
# Pattern entry
self.entry = Gtk.Entry()
self.entry.connect("activate", self.can't open file 'pyfind.py'on_entry_activated)
# Initial path selection
self.path = Gtk.FileChooserButton(title = "Select start path",
action = Gtk.FileChooserAction.SELECT_FOLDER)
self.path.set_current_folder(".")
# The file list + a scroll window
self.list = self.make_file_list()
scrw = Gtk.ScrolledWindow()
scrw.add(self.list)
vbox.pack_start(self.entry, False, False, 0)
vbox.pack_start(self.path, False, False, 0)
vbox.pack_start(scrw, True, True, 0)
self.add(vbox)
self.show_all()
def make_file_list(self):
self.store = Gtk.ListStore(str, str)
filelist = Gtk.TreeView(model = self.store, enable_grid_lines = True)
renderer = Gtk.CellRendererText()
col = Gtk.TreeViewColumn("Files:", renderer, text = 0, sizing = Gtk.TreeViewColumnSizing.AUTOSIZE)
filelist.append_column(col)
col = Gtk.TreeViewColumn("Path:", renderer, text = 1)
filelist.append_column(col)
return filelist
def on_entry_activated(self, entry):
self.store.clear()
patterns = entry.get_text().split()
path = self.path.get_filename()
for root, dirs, files in os.walk(path):
for name in files:
for pat in patterns:
if fnmatch.fnmatch(name, pat):
self.store.append((name, root))
def run(self):
Gtk.main()
def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Manual:
- Verifique se você tem o Python3 instalado (
python -V
). Se não, instale-o. - Salve o programa acima como, por exemplo,
pyfind.py
- Torne-o executável
chmod 755 pyfind.py
- Execute com
./pyfind.py
- Digite o filtro e pressione Enter.
- Se você alterar o caminho, repita 1 (pode evitar isso usando um sinal do FileChooserButton, se desejado)
EDIT2
Não sei ao certo o que está acontecendo no seu caso, mas o log diz que o python3 não está localizando o arquivo pyfind.py. Você pode tornar o arquivo diretamente executável:
Altere a primeira linha do código para:
#!/usr/local/bin/python3
Para tornar o arquivo acima executável, faça (em uma janela de terminal, no diretório onde pyfind.py está):
chmod 755 pyfind.py
Você deve então ser capaz de executar o programa simplesmente assim (novamente, no terminal):
./pyfind.py