[Geany-Devel] Devel Digest, Vol 93, Issue 3

Jiří Techet techet at xxxxx
Thu Dec 17 09:54:22 UTC 2015


Hi Per,

I have written some notes below how Djynn's project management differs from
ProjectOrganizer and some rationale for why I went that way. In my opinion
the core functionality is quite similar.

On Wed, Dec 16, 2015 at 4:09 PM, Per Löwgren <per.lowgren at gmail.com> wrote:

> Hello,
>
> I reply to all of your posts in one message. Hope that's ok.
>
> Basically, the terminology Djynn use is:
> * workspace: a set of projects
>

There's nothing like that in ProjectOrganizer - as I didn't want to
duplicate functionality which is already in Geany, I just kept things
simple in this respect so switching between projects is done using Geany's
standard project opening functionality and recent projects. Maybe we could
increase the number of the shown recent projects so it's easier to open
projects for people with many projects.


> * project: a set of files, organised into a directory tree, that may or
> may not be opened
>

This is the same in ProjectOrganizer. Moreover, ProjectOrganizer stores its
config into the standard Geany project file so there's a single project
file. I believe there are two project files in your case the Djynn one and
the Geany one and this "two-project" thing makes things a bit confusing for
users. Did you know you can store your config options into the Geany
project file using the API?


> * session: a set of opened documents in the editor
>

This is how it's in Geany too, there's just a single session per project -
on project opening your previous session is restored.


>
> In Geany, a project is the configuration of the project, including editing
> and building.
>

Since ProjectOrganizer is an extension of Geany project, there's no
distinction between Geany project and ProjectOrganizer project - they are
one.


In answer to your question: The session manager; it switches between
> sessions, and stores many sessions. When switching between sessions, all
> opened documents are stored in the present session's file; then all opened
> documents are closed; then the documents in the next session are opened.
>

ProjectOrganizer does basically nothing with sessions and uses Geany's
session management.


>
>
> > Sounds like reasonable usage, I think you can just open Geany pull
> request
> > to make these public. To make a function public, you just need to:
> >
> > 1. Prefix the implementation with GEANY_API_SYMBOL.
> > 2. Add some user-visible API documentation with a docstring (see other
> API
> > functions in the code to have an idea how it should look)
> > 3. Move the function declarations above GEANY_PRIVATE in the header.
> >
> > That's about it.
>
> That would work on my computer, but not on Launchpad, or for anyone else.
>

Here I meant you could make a pull request to Geany so it can be merged to
Geany and available for everyone in the next release.

The Project Organizer is an interesting plugin, they are similar, but works
> very differently.
>

I don't think it's so different, IMO the only big extra things in Djynn are
the workspace management and session management.

If we can agree on a common "vision", I'd happily contribute to that.
>

I can describe the vision of PorjectOrganizer. What I tried to make was a
file-aware Geany project (Geany itself doesn't know about the files, it
just stores base directory, build options and some common settings for
project) in a minimalistic way and reuse as much as possible from Geany
itself without duplicating functionality.


> Djynn has regex pattern add files on a per directory basis, i.e. you can
> add a directory and tell to search files according to pattern, and recurse
> into subfolders,
>

There's a single glob file pattern list per project in ProjectOrganizer
defined in project properties. The advantage of a glob pattern over regex
is that Geany uses it too and it can be passed to the Find in Files dialog
so a pattern defined at a single place in the project config is used for
everything.

but you can still have fixed files added too; e.g. you can add files from
> the project source directory, and also add `~/.config/project/file.conf`
> etc.
>

You can attach an arbitrary number of "external directories" to a project
in ProjectOrganizer and have their files displayed in the sidebar (and get
them indexed with the tag manager if needed). It's just not per file but
per directory.

To sum up the differences:

* Djynn can have multiple workspaces, ProjectOrganizer just uses Geany's
single "workspace" (basically the "recent projects" list).

For me this is sufficient, I find the workspace concept a bit too
heavyweight for an editor like Geany. Switching between recent projects
using Geany's built-in functionality is nice and simple.

However, if the project open/close methods are added to the API, some
workspace manager plugin could be made and it could even coexist with the
ProjectOrganizer plugin.

* ProjectOrganizer's project has a single session (like Geany) while Djynn
can have multiple.

I don't know if I'd ever use more sessions per project so I'm not planning
to add it to ProjectOrganizer.

Again, this is quite independent of the ProjectOrganizer functionality and
could be done in a separate plugin.

* There's a single project file/definition in ProjectOrganizer, if I
understand correctly there are two in Djynn.

I find the ProjectOrganizer way better in this case.

* Files belonging to a project are defined similarly in both plugins (glob
patterns vs regex), there's a possibility to add files external to the
project directory in both plugins.

More or less similar.

* In Djynn there is the possibility to add individual files, the tree can
be reorganized by drag and drop. There's no such thing in ProjectOrganizer
which basically mirrors the file system structure.

Contrary to Djynn, ProjectOrganizer is designed to work for huge projects
with thousands of files. When working on such big projects with many
collaborators, files and directories get renamed, deleted, added quite
often and what you manually add to the project gets invalid in this case.
Updating the project every time you make "git pull" is very annoying. For
this reason there's no configuration describing how the tree should look or
what files are in the project - just a directory (plus the external
directories) and a glob pattern. I know this might be limiting a bit for
you but I'd really like to keep it this way.

Do you think the "vision" of ProjectOrganizer is somehow compatible with
your vision of Djynn or is its minimalistic approach too limiting for you?

Cheers,

Jiri
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.geany.org/pipermail/devel/attachments/20151217/7191fd2a/attachment.html>


More information about the Devel mailing list