Sublime Forum

How to get currently open project path


Hey guys,

I couldn’t find anything regarding this in the APIs. Can someone tell me if it’s possible to:

a) Determine if a project is currently open
b) If so, retrieve its root’s path



1 Like


The API is rather limited in regards to project support.

To determine whether a project has been loaded, you may trap the onProjectLoad event. I don’t think you can tell what project file has been loaded, though.



Too bad :frowning: I really wanted to get all Tortoise (svn/git) options in a quickSelect panel, I guess I’ll have it only work per file for now, and stick to global shortcuts for the rest, there I can get the $ProjectDir. Hope we’ll get more access to information in the APIs later on.



I recently created a TortoiseSVN plugin that is on the community wiki. I only use key bindings/menus for now, but I think converting it to use a quickpanel would be nice. I really just use $ProjectDir right in my bindings. Actually, the plugin is ONLY bindings, so thats why I don’t have the issue you are experiencing. It would be nice to have access to all the same sublime vars from within plugin code thought too.



[quote=“burn”]a) Determine if a project is currently open
b) If so, retrieve its root’s path

“window.project()” will tell you if a project is open
“window.project().fileName()” will tell you its path

I don’t think it’s documented, so it’s possible it changes in the future.
Anyways, you can get more hidden info like that by introspecting variables. Try “dir(window)” and “dir(window.project())”



Cool! I was too lazy to check. Also, looking into Packages/Default may help to learn other undocumented API calls.



Just re-asking here for this thread was more discussed than the previous one: does anyone know the project() was changed for Sublime 2? I’m pretty sure it doesn’t exist in the window instances anymore…



From what I can tell, the only project information available in the api is window.folders(), which gives you a list of the project folders.



Right. But if you’re working on a project which its containing folder is not in your sublime-project file, then you still can’t know the path of your project.



Sublime 3 API has sublime.window()[0].project_file_name() … ime.Window



The sublime.Window Class has a project_file_name() function, but is missing a corresponding set_project_file_name(). Is this a thing that can be added?



Why set_project_data(data) is not enough? Or what do you actually would like to do?



When a new person joins the project and opens sublime, I want to load a specific .sublime-project file for them based on their discipline.

Ideally, I would like to open a sublime project from a python script, such that sublime.Window project_file_name() returns the file name of the project I opened.

My problem with set_project_data() is that since it’s not associated with a file, I can never be sure if the window’s project data actually contains the data I want, or if the data is outdated.



I’m not sure I fully understand your use case here, but you can add any arbitrary keys that you want to the project data (as you can in the sublime-project file), so you could use that to add something to the anonymous project data to allow you to distinguish it in a manner similar to asking Sublime what file it was loaded from.

1 Like