Hi Jiri,
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@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:
- Prefix the implementation with GEANY_API_SYMBOL.
- 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