Index: src/include/editormanager.h
===================================================================
--- src/include/editormanager.h	(revision 6416)
+++ src/include/editormanager.h	(working copy)
@@ -115,6 +115,7 @@
 
         bool UpdateProjectFiles(cbProject* project);
         bool SwapActiveHeaderSource();
+        bool OpenContainingFolder();
         bool CloseActive(bool dontsave = false);
         bool Close(const wxString& filename, bool dontsave = false);
         bool Close(EditorBase* editor, bool dontsave = false);
@@ -155,6 +156,7 @@
         void OnSave(wxCommandEvent& event);
         void OnSaveAll(wxCommandEvent& event);
         void OnSwapHeaderSource(wxCommandEvent& event);
+        void OnOpenContainingFolder(wxCommandEvent& event);
         void OnTabPosition(wxCommandEvent& event);
         void OnProperties(wxCommandEvent& event);
         void OnAddFileToProject(wxCommandEvent& event);
Index: src/sdk/cbeditor.cpp
===================================================================
--- src/sdk/cbeditor.cpp	(revision 6416)
+++ src/sdk/cbeditor.cpp	(working copy)
@@ -633,6 +633,7 @@
 const int idLowerCase = wxNewId();
 const int idSelectAll = wxNewId();
 const int idSwapHeaderSource = wxNewId();
+const int idOpenContainingFolder = wxNewId();
 const int idBookmarks = wxNewId();
 const int idBookmarksToggle = wxNewId();
 const int idBookmarksPrevious = wxNewId();
@@ -676,6 +677,7 @@
     EVT_MENU(idLowerCase, cbEditor::OnContextMenuEntry)
     EVT_MENU(idSelectAll, cbEditor::OnContextMenuEntry)
     EVT_MENU(idSwapHeaderSource, cbEditor::OnContextMenuEntry)
+    EVT_MENU(idOpenContainingFolder, cbEditor::OnContextMenuEntry)
     EVT_MENU(idBookmarksToggle, cbEditor::OnContextMenuEntry)
     EVT_MENU(idBookmarksPrevious, cbEditor::OnContextMenuEntry)
     EVT_MENU(idBookmarksNext, cbEditor::OnContextMenuEntry)
@@ -2650,6 +2652,7 @@
             popup->AppendSeparator();
         }
         popup->Append(idSwapHeaderSource, _("Swap header/source"));
+		popup->Append(idOpenContainingFolder, _("Open containing folder"));
         if(!noeditor)
             popup->AppendSeparator();
 
@@ -2885,6 +2888,8 @@
         control->SelectAll();
     else if (id == idSwapHeaderSource)
         Manager::Get()->GetEditorManager()->SwapActiveHeaderSource();
+	else if (id == idOpenContainingFolder)
+		Manager::Get()->GetEditorManager()->OpenContainingFolder();
     else if (id == idBookmarkAdd)
         control->MarkerAdd(m_pData->m_LastMarginMenuLine, BOOKMARK_MARKER);
     else if (id == idBookmarkRemove)
Index: src/sdk/editormanager.cpp
===================================================================
--- src/sdk/editormanager.cpp	(revision 6416)
+++ src/sdk/editormanager.cpp	(working copy)
@@ -146,6 +146,7 @@
 static const int idNBTabSave = wxNewId();
 static const int idNBTabSaveAll = wxNewId();
 static const int idNBSwapHeaderSource = wxNewId();
+static const int idNBTabOpenContainingFolder = wxNewId();
 static const int idNBTabTop = wxNewId();
 static const int idNBTabBottom = wxNewId();
 static const int idNBProperties = wxNewId();
@@ -190,6 +191,7 @@
     EVT_MENU(idNBTabClose, EditorManager::OnClose)
     EVT_MENU(idNBTabCloseAll, EditorManager::OnCloseAll)
     EVT_MENU(idNBTabCloseAllOthers, EditorManager::OnCloseAllOthers)
+    EVT_MENU(idNBTabOpenContainingFolder, EditorManager::OnOpenContainingFolder)
     EVT_MENU(idNBTabSave, EditorManager::OnSave)
     EVT_MENU(idNBTabSaveAll, EditorManager::OnSaveAll)
     EVT_MENU(idNBSwapHeaderSource, EditorManager::OnSwapHeaderSource)
@@ -1119,6 +1121,35 @@
     return candidateFile;
 }
 
+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;
+}
+
 bool EditorManager::SwapActiveHeaderSource()
 {
     cbEditor* ed = GetBuiltinEditor(GetActiveEditor());
@@ -2777,6 +2808,7 @@
     pop->Append(idNBTabSaveAll, _("Save all"));
     pop->AppendSeparator();
     pop->Append(idNBSwapHeaderSource, _("Swap header/source"));
+    pop->Append(idNBTabOpenContainingFolder, _("Open containing folder"));
     pop->AppendSeparator();
     pop->Append(idNBTabTop, _("Tabs at top"));
     pop->Append(idNBTabBottom, _("Tabs at bottom"));
@@ -2859,6 +2891,11 @@
     Manager::Get()->GetEditorManager()->SwapActiveHeaderSource();
 }
 
+void EditorManager::OnOpenContainingFolder(wxCommandEvent& event)
+{
+    Manager::Get()->GetEditorManager()->OpenContainingFolder();
+}
+
 void EditorManager::OnTabPosition(wxCommandEvent& event)
 {
     long style = m_pNotebook->GetWindowStyleFlag();
