Improving the Search of Nautilus

This summer I’m really glad to be working again on Nautilus as part of Google Summer of Code. This time, the goal of the project is to improve the Search. Currently, it misses some features that would make searching easier and there are also some performance issues.

So far I worked on Full Text Search. This could be done until now, but from Desktop Search (tracker-needle). Since one of the main functions of Nautilus is searching files, it makes sense for it to include this feature.

Now, if the user chooses so, the search results will no longer include only matches with the file name, but also with the contents of the file. Also, to be more relevant, a short snippet with the context in which the text was found is offered. To get this information, a Tracker query is used, which means that in order to find the files, they will need to be indexed by Tracker.

Until last week I was busy with my exams and those took quite a bit of my time, but now that they’re finally done, I can give my full attention to Nautilus.

Next, I’ll focus on tags, since this is a feature that would sure come in handy at organizing files. So, there are more updates to come in the following weeks 🙂


Improving the Search of Nautilus

Restoring tabs

Being able to restore tabs is a common feature that most web browsers provides to their users and could come in handy for some users of Nautilus since it’s much easier to restore the tab than navigating again to a file that’s somewhere deep in the hierarchy.

In order to be able to restore a tab in Nautilus, we have to keep a list with the minimum of information to recover the tab. This means that we’ll store the history, the view before search, in case the closed tab is a search, so that we know what was the view type before searching and last but not least, the location which was closed. Storing the location also means that the window will now keep a reference of the closed locations.

Restoring a tab can be done the same way as in a web browser, by pressing Ctrl+Shift+T.


Restoring tabs


This year I’ve been to my first GUADEC in Karlsruhe, Germany. It was an awesome week, as I got to meet my mentor in person and a lot of other friendly people. Being part of the GNOME community it’s really amazing !

In the core days, I attended talks and I even had a lightning talk and though I never did this before, I managed to handle it well. Besides this, we also enjoyed other activities, like the picnic, where we played some really fun games, or having some drinks together.

During this week, me, Carlos and Razvan also spent some time together working on Nautilus, reviewing, polishing and discussing ideas about our projects. I really enjoyed this, as discussing in person is much better than doing it online. Besides this, we had a Nautilus BoF as well, where we discussed some interesting things about the past, present and the future of Nautilus.

Apart from these activities, we also did other cool stuff like going on the zip line in the park, or relaxing at the swimming pool, all adding up to making this week an wonderful experience.

I would like to thank GNOME for the sponsorship to attend the conference and let’s hope that I can attend next year in Manchester 🙂



Batch rename updates

Hey everyone, in these past weeks I’ve been working on implementing Allan’s design and now I’m getting closer and closer to having the work completed.

This is how the batch rename dialog looks like now:


The format mode consists of an entry where you can add several tags, like the original file name or numbering. For files with metadata, the user also has the option to add relevant information, like the creation date for photos or the artist of the song for music. The metadata is acquired using a tracker query, then stored and used when needed. Apart from this, there can be written text anywhere between the tags. So, now, for a photo, instead of having a default meaningless name, we could have something like this:

photo 2

If there is added numbering, there is also the option to sort the files based on some criteria.  The Add button pops up a menu with the tags that are currently available. Here is how the menus look like:

Photo 4                                     Photo 3

Keeping the arrows and labels in the listbox the way we wanted proved to be a little more difficult than we expected. The obvious solution was to use GtkSizeGroup to make the labels have the same width, but this proved to be a bad idea due to the big complexity of the GtkSizeGroup, making the dialog completely unusable when renaming a few thousand files. The workaround we used was to have three listboxes instead of one and add both the listboxes that hold the name labels in a GtkSizeGroup. This way, it looks nice and it also takes a decent amount of time.

The replace mode works the same way as it did before, having suffered only a few design changes, like the entries not being on the same row and adding highlight to the replaced text.

Screenshot from 2016-08-04 22-43-37

Conflicts are also handled in a different way now. When a conflict occurs a label with two buttons pops up, so the user will be able to navigate through all the conflicts. When the arrows are clicked, the next/previous row with a conflict is selected in the listbox.

Photo 5

Also, I will be coming to GUADEC, so see you there! 🙂


Batch rename updates

First results

Not so long ago I finished my last exam and though I didn’t manage to spend as much time as I wanted on the project during my exams period, I added two modes for the batch renaming: Add Text and Replace. Add Text is appending/prepending  a string to the name and Replace replaces a string from all files selected with another.  Here is a video of how this modes work.

Something else I approached until now is handling the file conflicts. When renaming multiple files, there’s a chance that one or more files will end up having the name of an already existing file, making the renaming impossible. Until now the user would have seen an expander that shows a list with all the conflicts, but we decided that it would be better to change this design.

Initially, we followed the design of Finder since it seemed good enough, but it actually has some flaws. Carlos decided to ask for ideas on his blog and that turned out really well since we got a lot of good ideas, like using metadata. With the help of that blog post we also got to Alfredo from DeviantArt who offered to help us with design ideas (Here is his work). On the design part we also got help from Allan Day who offered us a very nice mock up, which we decided to use. What I like most about Allan’s design is that it uses tags and this leads to a more flexible renaming process.

I’ve already started working on the new design, so on my next blog post I expect to have some major improvements.

First results

GSoC 2016



Firstly, I’d like to say that I’m really excited that I got accepted to Google Summer of Code 2016 and for having the opportunity to work on such an interesting project as Nautilus.

The first time I learned about open-source and Linux was in the first year at University and since then I’ve been a user of open-source software and now I’m really glad to say that I’ve become a contributor. I started contributing in February this year and one thing that I love about GNOME is the community, which has some really helpful and friendly people. The person who helped me the most is my mentor, Carlos Soriano, who offered me his help every time I needed it, for which I thank him a lot!

This is my first real project that I’m working on and I can say that doing something that you know will actually benefit people gives an amazing feeling. The goal of my project is to provide the ability of renaming multiple files in Nautilus easily, using a simple, nice and intuitive UI. Until now, you could do batch renaming only by using a third party tool, but that meant that you had to spend extra time for a simple task. The way I picture this new feature is by offering several modes of renaming like append/prepend, replace or format.

Here I’ll add updates about my work, so you can follow this blog to see how my project will progress 🙂


GSoC 2016