My 2nd patch:
https://developer.berlios.de/patch/index.php?func=detailpatch&patch_id=3038&group_id=5358
I use this feature from Visual Studio all the time.
Unfortunately it is platform specific, so I could only make it work for WIN32.
The correct macro to check for is __WXMSW__ not _WIN32.
On linux xdg-open can be used.
Thanks.
Ok Ive updated the patch to use the __WXMSW__ define.
I will try xdg-open when I get back to my linux box, unless someone else wants to do it.
Quote from: codeman on July 24, 2010, 10:07:53 PM
My 2nd patch:
https://developer.berlios.de/patch/index.php?func=detailpatch&patch_id=3038&group_id=5358
I use this feature from Visual Studio all the time.
Unfortunately it is platform specific, so I could only make it work for WIN32.
Nice work.
But I can't apply your patch. (I just copy the patch, and create a a.patch file, then apply the patch by tortoiseSVN, then failed)
but it seems your patch was generated from "msys git" ? Can git used to access cb repo?
Quote from: codeman on July 24, 2010, 10:07:53 PM
https://developer.berlios.de/patch/index.php?func=detailpatch&patch_id=3038&group_id=5358
That is a very nice idea, however, I wonder whether wxWidgets can do that, too (in a cross platform way). Implementing such functionality OS natively should be our last option usually. Did you have a look at wxWidgets API first / ask in a wx forum?
Quote from: ollydbg on July 25, 2010, 05:16:15 AM
Nice work.
But I can't apply your patch. (I just copy the patch, and create a a.patch file, then apply the patch by tortoiseSVN, then failed)
but it seems your patch was generated from "msys git" ? Can git used to access cb repo?
I stored the 10.05 source into a local git repo, and used git to create patches. After some reading, you can apply them to your files using git-apply (you dont need a git repository). I should probably get SVN so that I can work with the latest tree and create compatible patches :P
Quote from: MortenMacFly on July 25, 2010, 09:49:14 AM
That is a very nice idea, however, I wonder whether wxWidgets can do that, too (in a cross platform way). Implementing such functionality OS natively should be our last option usually. Did you have a look at wxWidgets API first / ask in a wx forum?
I did a lot of searching to see if wx has builtin support for it, and I dont think it does. Well just have to do this for Windows, Mac and Linux seperately.
Probably this could help: http://wiki.wxwidgets.org/Launching_The_Default_Browser
But I wasn't able to make it open the directory:
wxMimeTypesManager manager;
wxFileType * filetype = manager.GetFileTypeFromMimeType(wxT("application/x-directory"));
if (filetype)
{
wxString command = filetype->GetOpenCommand(wxT("/home/obfuscated"));
wxExecute(command);
}
codeman: you could use git svn, but the generated patches couldn't be applied in a normal tree, last time I've tried. The git svn was not recognizing the "$Revision:" and similar tags.
Ok I just replaced the patch with one coming from tortoiseSVN from the latest tree (revision 6416). Hopefully that will work for everyone.
Quote from: oBFusCATed on July 25, 2010, 11:34:01 AM
wxMimeTypesManager manager;
wxFileType * filetype = manager.GetFileTypeFromMimeType(wxT("application/x-directory"));
if (filetype)
{
wxString command = filetype->GetOpenCommand(wxT("/home/obfuscated"));
wxExecute(command);
}
I think this only applies to a web browser. What I meant was really the platform's file explorer.
In this thread:
http://forums.wxwidgets.org/viewtopic.php?p=9441
...I found this:
http://forums.wxwidgets.org/viewtopic.php?p=9624#9624
This looks like cross-platform and in addition you can open up in a folder you like.
Strange that there is really no wx core function available. I wonder how it's done in Qt, maybe it can be done similar in wx, too.
Ok here is my latest version that I have tested on Ubuntu - it works very well, except that it wont leave the file selected.
MortenMacFly: were you referring to the wxExecute() command when you said it was cross-platform? We still need to use different commands for the different platforms, like I have, correct?
bool EditorManager::OpenContainingFolder()
{
cbEditor* ed = GetBuiltinEditor(GetActiveEditor());
if (!ed)
return false;
const wxString& fullpath = ed->GetFilename();
#ifdef __WXMSW__
WCHAR cmd[1024]; //CreateProcessW is allowed to modify this for internal processing.
wsprintf(cmd, _("explorer /select,%s"), fullpath.c_str()); //Build the command string to open an explorer window on the folder with the file selected
STARTUPINFOW si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION po;
memset(&po, 0, sizeof(po));
CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &po); //Launch explorer
#else
//Extract the folder name from the file
wxString cmd;
wxFileName::SplitPath(fullpath, &cmd, NULL, NULL);
//Use the xdg-open command, and get the char* string
cmd.Prepend(_("xdg-open "));
wxCharBuffer mbcmd = cmd.mb_str();
system(mbcmd);
#endif
return true;
}
Quote from: codeman on July 25, 2010, 09:07:48 PM
MortenMacFly: were you referring to the wxExecute() command when you said it was cross-platform? We still need to use different commands for the different platforms, like I have, correct?
Partially. In the post I was referring to it shows what to use for "explorer" on the other platforms. Basically you call wxExecute with the system's default file explorer as listed in this post (of Ryan Norton):
http://forums.wxwidgets.org/viewtopic.php?p=9624#9624
Ok shall I change my code to use wxExecute with the three different commands (explorer, xdg-open, open), and then we can put it into the codebase?
Quote from: MortenMacFly on July 25, 2010, 08:19:47 PM
I think this only applies to a web browser. What I meant was really the platform's file explorer.
No it doesn't, mime types can be used by all applications (the Enlightenment WM/shell is using them to recognize files for example).
Please make this configurable, even on windows, some people are not using the exploder, but total commander or something similar.
Now works with all three platforms, using wxExecute.
Im pretty sure the Mac version works, but if someone would like to test it. Ive updated the patch https://developer.berlios.de/patch/index.php?func=detailpatch&patch_id=3038&group_id=5358
bool EditorManager::OpenContainingFolder()
{
cbEditor* ed = GetBuiltinEditor(GetActiveEditor());
if (!ed)
return false;
const wxString& fullpath = ed->GetFilename();
wxString cmd;
#ifdef __WXMSW__
cmd = _("explorer /select,") + fullpath; //Open folder with the file selected
#else
#ifdef __WXMAC__
cmd = _("open -R ") + fullpath; //Open folder with the file selected
#else
//Cant select the file on Linux, so just extract the folder name
wxFileName::SplitPath(fullpath, &cmd, NULL, NULL);
//Use the xdg-open command
cmd = _("xdg-open ") + cmd;
#endif
#endif
wxExecute(cmd);
return true;
}
I would prefer not to hardcode the open-commands, but making them configurable.
The configuration-defaults should be platform specific, so the user can change the default command to his/her needs.
It would be a little bit like "Terminal to launch console apps", but for all platforms and not only for non-windows platforms.
Should not be too hard to implement.
codeman: You can use this:
#if MACRO1
#elif MACRO2
#else
#endif
It will make the code more readable :)
Quote from: jens on July 26, 2010, 06:59:59 AM
I would prefer not to hardcode the open-commands, but making them configurable.
The configuration-defaults should be platform specific, so the user can change the default command to his/her needs.
It would be a little bit like "Terminal to launch console apps", but for all platforms and not only for non-windows platforms.
Should not be too hard to implement.
Ok what about this: In ToolsManager::LoadTools(), we currently do:
void ToolsManager::LoadTools()
{
ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("tools"));
wxArrayString list = cfg->EnumerateSubPaths(_("/"));
for (unsigned int i = 0; i < list.GetCount(); ++i)
{
...
If the list of saved tools returns zero, then we could create a default tool to open the containing folder. For windows this would by default point to explorer, and for linux it would be xdg-open, but then you could change the tool to whatever you wanted. This tool would then be saved and loaded up as normal the next time round.
Only issue is how do we allow that tool to appear in the context menu? - that could be a new custom tool option.
What do you think?
Quote from: codeman on July 27, 2010, 12:01:26 AM
What do you think?
I think what Jens means is a configuration option like in Settings -> Environment -> General settings -> "Shell to run commands in" or "Terminal to launch console programs".
If there would be another option like "explorer to launch" which can be configured (with a checkbox to "use the file name", too for Linux) and the text box is pre-configured with the platform specific default explorer (as you did now) that would be fine and most flexible.
I like the idea of having the option to call the system's file browser from "Tools". It makes sense to me. In fact, under Windows I added explorer to my tools, and passed arguments to make it open the directory of the active project by default.
It would be nice if a special, separated, menu option to browse the project directory would be present under "Tools" in addition to the context menu of the project manager.
Quote from: ptDev on July 27, 2010, 10:08:21 AM
I like the idea of having the option to call the system's file browser from "Tools". It makes sense to me. In fact, under Windows I added explorer to my tools, and passed arguments to make it open the directory of the active project by default.
It would be nice if a special, separated, menu option to browse the project directory would be present under "Tools" in addition to the context menu of the project manager.
This is my current thinking too. The "Open containing folder" feature doesnt need its own dedicated setting field, as Morten suggested. All the functionality to do it is already available in the custom Tools menu. The correct way to do this would be to create default tools for the different platforms, and to allow cusomizing tools to be accessible from the context menu.
Maybe my code segment was not the correct way of creating pre-defined custom tools, but the idea is still sound.
Quote from: codeman on July 27, 2010, 09:43:16 PM
This is my current thinking too. The "Open containing folder" feature doesnt need its own dedicated setting field, as Morten suggested. All the functionality to do it is already available in the custom Tools menu. The correct way to do this would be to create default tools for the different platforms, and to allow cusomizing tools to be accessible from the context menu.
I disagree. Assume you have a project with sub-folders. You can browse to any folder from the project managment pane if you attach the option there. However, from the tools menu you don-t have macros available to tell you the path to browse to. All you can do is e.g. open an Explorer in the path of you project or alike. But not in any sub-path. Try yourself or proof me wrong.
Hi,
I think we should integrate another option. Since the Filemanager and Powershell plugin will be integrated in Code::Blocks it would make sense to have also a context menu like: Open in Filemanager. This would work under windows and linux and it is more convenient to browse within the Filemanager.
What do you think about?
Quote from: mariocup on July 28, 2010, 07:51:23 AM
What do you think about?
True. However, you might really want to browse with the explorer if you want to use Explorer shell extensions like TortoiseSVN or alike (as an example on Windows).
There are too many options in "General setting" panel.
Why not instead by wxAuiNotebook?
Quote from: Loaden on October 01, 2010, 08:41:35 AM
Why not instead by wxAuiNotebook?
Probably splitting into another category would make more sense.