Inkscape Community
Help Using Inkscape => Beyond the Basics => Topic started by: Eneroth3 on March 18, 2018, 12:17:15 PM
-
Hello
I've used Inkscape scarcely for several years and have just made my first extensions. This is the first code I ever write in Python so forgive me if this is a very basic question.
I have written the plugin code directly in the extension folder in appdata, where Inkscape loads extensions from. I'd like to develop my code in another location, with all extensions in their own directory so I can use GIT, but still want it to be loaded directly into Inkscape so I can test it while I am coding. In SketchUp, which uses Ruby, I can place the following file in the program's plugin folder to achieve this goal.
pattern = "D:/Sketchup Plugins/Working Dir/*/src/"
Dir.glob(pattern).each do |dir|
$LOAD_PATH << dir
Dir.glob("#{dir}/*.rb").each { |p| require p }
end
What would the corresponding code in Python be?
-
1. Are you still using Inkscape 0.91, as it says in your signature? If so, please update before writing any extensions, or you may run against some walls later. Inkscape 0.92.3 will be released within the next couple of days.
2. The correct folder to put user-generated extensions into can be looked up in Inkscape: Edit > Preferences > System: User extensions.
3. Move your extensions out of the other folder before you uninstall Inkscape for installing the new Inkscape version, else they will probably be deleted.
4. Put them into a separate folder somewhere on your hard disk where you want to have your git repositories.
5. Use symlinks that you put into the folder mentioned in 2) for the .py and the .inx file.
6. Sorry, can't help with Ruby -> Python.
7. You could also use Ruby for your Inkscape extensions. This means, though, that you cannot use the functionality provided by inkex.py, but must create your own equivalent to it.
-
1. So far I am but I'll keep my eyes on the new release.
Regarding the other points my goal is not load extensions from a path with a wildcard in it. I'm on Windows and don't have symlinks, and even if I had it would be a bit tedious to manually link every file separately. What I want to do is loading files from "D:/Source/InkscapeExtensions/*/" where * is the project name for each individual extension, just as if the files were all placed in an extension directory.
-
Inkscape will not look into subdirectories. Either use a symlink (Windows does support them: https://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/) or copy everything into your user extensions directory.
Hint: symlinks could potentially also be created automatically with a script.
-
I didn't know Windows supported symlinks :O . You learn something new every day! Link Shell Extension did the trick. For now I'm just creating the links manually, but if I develop more Inkscape extensions (this one was just to help in another project I'm working on) I'll consider scripting it.
The project is hosted on GitHub if anyone is interested: https://github.com/Eneroth3/inkscape-purge-short-lines
Thanks for the help!
-
Lol, yeah, with me being a Linux-only user since 2004, it may seem surprising that I know about it - but it was kind of a joke, to the Linux world, when we learned that Windows finally supports symlinks and even - gasp - multiple desktops! So that stuck ;-)
Glad it works :)
If you're interested in sharing your extensions with a wider audience, you can also put them up at inkscape.org, to end up in the Extensions gallery:
https://inkscape.org/en/gallery/=extension/
Instructions available at https://inkscape.org/en/develop/extensions/#sharing-your-extension
-
I have now added the extension to Inkscape.org, after trying it in the new Inkscape version: https://inkscape.org/en/~eneroth3/%E2%98%85purge-short-lines
Thanks again for the help!
-
Cool :-D Thank you, I think this is a really good addition to the extensions available on the site!