ID_SHOW_LINENUMBERS = wx.NewId()
 ID_AUTO_SAVESETTINGS = wx.NewId()
 ID_SAVEHISTORY = wx.NewId()
 ID_SHOW_LINENUMBERS = wx.NewId()
 ID_AUTO_SAVESETTINGS = wx.NewId()
 ID_SAVEHISTORY = wx.NewId()
 ID_SAVESETTINGS = wx.NewId()
 ID_DELSETTINGSFILE = wx.NewId()
 ID_EDITSTARTUPSCRIPT = wx.NewId()
 ID_SAVESETTINGS = wx.NewId()
 ID_DELSETTINGSFILE = wx.NewId()
 ID_EDITSTARTUPSCRIPT = wx.NewId()
                  'Search for text in the edit buffer')
         m.Append(ID_FINDNEXT, 'Find &Next \tF3',
                  'Find next/previous instance of the search text')
                  'Search for text in the edit buffer')
         m.Append(ID_FINDNEXT, 'Find &Next \tF3',
                  'Find next/previous instance of the search text')
                  'Wrap lines at right edge', wx.ITEM_CHECK)
         m.Append(ID_SHOW_LINENUMBERS, '&Show Line Numbers\tCtrl+Shift+L', 'Show Line Numbers', wx.ITEM_CHECK)
         m.Append(ID_TOGGLE_MAXIMIZE, '&Toggle Maximize\tF11', 'Maximize/Restore Application')
                  'Wrap lines at right edge', wx.ITEM_CHECK)
         m.Append(ID_SHOW_LINENUMBERS, '&Show Line Numbers\tCtrl+Shift+L', 'Show Line Numbers', wx.ITEM_CHECK)
         m.Append(ID_TOGGLE_MAXIMIZE, '&Toggle Maximize\tF11', 'Maximize/Restore Application')
-        m.Append(ID_SAVEHISTORY, '&Save History\tAlt+Ctrl+A', 'Automatically save history on close', wx.ITEM_CHECK)
+
+        self.historyMenu = wx.Menu()
+        self.historyMenu.Append(ID_SAVEHISTORY, '&Autosave History',
+                 'Automatically save history on close', wx.ITEM_CHECK)
+        self.historyMenu.Append(ID_SAVEHISTORYNOW, '&Save History Now',
+                 'Save history')
+        self.historyMenu.Append(ID_CLEARHISTORY, '&Clear History ',
+                 'Clear history')
+        m.AppendMenu(-1, "&History", self.historyMenu, "History Options")
+
-        self.startupMenu.Append(ID_EXECSTARTUPSCRIPT, 'E&xecute Startup Script\tAlt+Ctrl+X', 'Execute Startup Script', wx.ITEM_CHECK)
-        self.startupMenu.Append(ID_EDITSTARTUPSCRIPT, '&Edit Startup Script\tAlt+Ctrl+E', 'Edit Startup Script')
+        self.startupMenu.Append(ID_EXECSTARTUPSCRIPT,
+                                'E&xecute Startup Script',
+                                'Execute Startup Script', wx.ITEM_CHECK)
+        self.startupMenu.Append(ID_EDITSTARTUPSCRIPT,
+                                '&Edit Startup Script...',
+                                'Edit Startup Script')
         m.AppendMenu(ID_STARTUP, '&Startup', self.startupMenu, 'Startup Options')
 
         self.settingsMenu = wx.Menu()
         m.AppendMenu(ID_STARTUP, '&Startup', self.startupMenu, 'Startup Options')
 
         self.settingsMenu = wx.Menu()
-        self.settingsMenu.Append(ID_AUTO_SAVESETTINGS, '&Auto Save Settings\tAlt+Ctrl+A', 'Automatically save settings on close', wx.ITEM_CHECK)
-        self.settingsMenu.Append(ID_SAVESETTINGS, '&Save Settings\tAlt+Ctrl+S', 'Save settings now')
-        self.settingsMenu.Append(ID_DELSETTINGSFILE, '&Revert to default\tAlt+Ctrl+R', 'Revert to the default settings')
+        self.settingsMenu.Append(ID_AUTO_SAVESETTINGS,
+                                 '&Auto Save Settings',
+                                 'Automatically save settings on close', wx.ITEM_CHECK)
+        self.settingsMenu.Append(ID_SAVESETTINGS,
+                                 '&Save Settings',
+                                 'Save settings now')
+        self.settingsMenu.Append(ID_DELSETTINGSFILE,
+                                 '&Revert to default',
+                                 'Revert to the default settings')
         m.AppendMenu(ID_SETTINGS, '&Settings', self.settingsMenu, 'Settings Options')           
 
         m = self.helpMenu = wx.Menu()
         m.Append(ID_HELP, '&Help\tF1', 'Help!')
         m.AppendSeparator()
         m.AppendMenu(ID_SETTINGS, '&Settings', self.settingsMenu, 'Settings Options')           
 
         m = self.helpMenu = wx.Menu()
         m.Append(ID_HELP, '&Help\tF1', 'Help!')
         m.AppendSeparator()
 
         b = self.menuBar = wx.MenuBar()
         b.Append(self.fileMenu, '&File')
 
         b = self.menuBar = wx.MenuBar()
         b.Append(self.fileMenu, '&File')
         self.Bind(wx.EVT_MENU, self.OnShowLineNumbers, id=ID_SHOW_LINENUMBERS)
         self.Bind(wx.EVT_MENU, self.OnAutoSaveSettings, id=ID_AUTO_SAVESETTINGS)
         self.Bind(wx.EVT_MENU, self.OnSaveHistory, id=ID_SAVEHISTORY)
         self.Bind(wx.EVT_MENU, self.OnShowLineNumbers, id=ID_SHOW_LINENUMBERS)
         self.Bind(wx.EVT_MENU, self.OnAutoSaveSettings, id=ID_AUTO_SAVESETTINGS)
         self.Bind(wx.EVT_MENU, self.OnSaveHistory, id=ID_SAVEHISTORY)
         self.Bind(wx.EVT_MENU, self.OnSaveSettings, id=ID_SAVESETTINGS)
         self.Bind(wx.EVT_MENU, self.OnDelSettingsFile, id=ID_DELSETTINGSFILE)
         self.Bind(wx.EVT_MENU, self.OnEditStartupScript, id=ID_EDITSTARTUPSCRIPT)
         self.Bind(wx.EVT_MENU, self.OnExecStartupScript, id=ID_EXECSTARTUPSCRIPT)
         self.Bind(wx.EVT_MENU, self.OnFindText, id=ID_FIND)
         self.Bind(wx.EVT_MENU, self.OnFindNext, id=ID_FINDNEXT)
         self.Bind(wx.EVT_MENU, self.OnSaveSettings, id=ID_SAVESETTINGS)
         self.Bind(wx.EVT_MENU, self.OnDelSettingsFile, id=ID_DELSETTINGSFILE)
         self.Bind(wx.EVT_MENU, self.OnEditStartupScript, id=ID_EDITSTARTUPSCRIPT)
         self.Bind(wx.EVT_MENU, self.OnExecStartupScript, id=ID_EXECSTARTUPSCRIPT)
         self.Bind(wx.EVT_MENU, self.OnFindText, id=ID_FIND)
         self.Bind(wx.EVT_MENU, self.OnFindNext, id=ID_FINDNEXT)
 
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_NEW)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_OPEN)
 
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_NEW)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_OPEN)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_DELSETTINGSFILE)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EXECSTARTUPSCRIPT)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEHISTORY)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_DELSETTINGSFILE)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EXECSTARTUPSCRIPT)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEHISTORY)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EDITSTARTUPSCRIPT)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FIND)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FINDNEXT)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EDITSTARTUPSCRIPT)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FIND)
         self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FINDNEXT)
         
         self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
         self.Bind(wx.EVT_FIND, self.OnFindNext)
         
         self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
         self.Bind(wx.EVT_FIND, self.OnFindNext)
         win.SetUseAntiAliasing(event.IsChecked())
 
     def OnSaveHistory(self, event):
         win.SetUseAntiAliasing(event.IsChecked())
 
     def OnSaveHistory(self, event):
-        self.saveHistory = event.IsChecked()
+        self.autoSaveHistory = event.IsChecked()
+
+    def OnSaveHistoryNow(self, event):
+        self.SaveHistory()
+
+    def OnClearHistory(self, event):
+        self.shell.clearHistory()
 
     def OnAutoSaveSettings(self, event):
         self.autoSaveSettings = event.IsChecked()
 
     def OnAutoSaveSettings(self, event):
         self.autoSaveSettings = event.IsChecked()
         if isinstance(event, wx.FindDialogEvent):
             win = self.findDlg.GetParent()
         else:
             win = wx.Window.FindFocus()
         win.DoFindNext(self.findData, self.findDlg)
         if isinstance(event, wx.FindDialogEvent):
             win = self.findDlg.GetParent()
         else:
             win = wx.Window.FindFocus()
         win.DoFindNext(self.findData, self.findDlg)
 
     def OnUpdateMenu(self, event):
         """Update menu items based on current status and context."""
 
     def OnUpdateMenu(self, event):
         """Update menu items based on current status and context."""
                 event.Check(win.lineNumbers)
             elif id == ID_AUTO_SAVESETTINGS:
                 event.Check(self.autoSaveSettings)
                 event.Check(win.lineNumbers)
             elif id == ID_AUTO_SAVESETTINGS:
                 event.Check(self.autoSaveSettings)
             elif id == ID_SAVESETTINGS:
                 event.Enable(self.config is not None and
                              hasattr(self, 'DoSaveSettings'))
             elif id == ID_SAVESETTINGS:
                 event.Enable(self.config is not None and
                              hasattr(self, 'DoSaveSettings'))
-                event.Check(self.saveHistory and self.dataDir is not None)
+                event.Check(self.autoSaveHistory)
+                event.Enable(self.dataDir is not None)
+            elif id == ID_SAVEHISTORYNOW:
+                event.Enable(self.dataDir is not None and
+                             hasattr(self, 'SaveHistory'))
+            elif id == ID_CLEARHISTORY:
+                event.Enable(self.dataDir is not None)
+                
             elif id == ID_EDITSTARTUPSCRIPT:
                 event.Enable(hasattr(self, 'EditStartupScript'))
             elif id == ID_EDITSTARTUPSCRIPT:
                 event.Enable(hasattr(self, 'EditStartupScript'))
-                event.Enable(hasattr(win, 'DoFindNext') and
-                             self.findData.GetFindString() != '')
-                
+                event.Enable(hasattr(win, 'DoFindNext'))
+
+            elif id == ID_SHOWTOOLS:
+                event.Check(self.ToolsShown())
+                                             
         pos  = wx.Point(config.ReadInt('Window/PosX', -1),
                         config.ReadInt('Window/PosY', -1))
                         
         pos  = wx.Point(config.ReadInt('Window/PosX', -1),
                         config.ReadInt('Window/PosY', -1))
                         
             self.startupScript = os.path.join(self.dataDir, 'startup')
             
         self.autoSaveSettings = False
             self.startupScript = os.path.join(self.dataDir, 'startup')
             
         self.autoSaveSettings = False
         if self.config is not None:
             self.autoSaveSettings = self.config.ReadBool('Options/AutoSaveSettings', False)
             self.execStartupScript = self.config.ReadBool('Options/ExecStartupScript', True)
         if self.config is not None:
             self.autoSaveSettings = self.config.ReadBool('Options/AutoSaveSettings', False)
             self.execStartupScript = self.config.ReadBool('Options/ExecStartupScript', True)
             # always save this one
             self.config.WriteBool('Options/AutoSaveSettings', self.autoSaveSettings)
             if self.autoSaveSettings:
             # always save this one
             self.config.WriteBool('Options/AutoSaveSettings', self.autoSaveSettings)
             if self.autoSaveSettings:
                 f.close()
             except:
                 d = wx.MessageDialog(self, "Error saving history file.",
                                      "Error", wx.ICON_EXCLAMATION)
                 d.ShowModal()
                 d.Destroy()
                 f.close()
             except:
                 d = wx.MessageDialog(self, "Error saving history file.",
                                      "Error", wx.ICON_EXCLAMATION)
                 d.ShowModal()
                 d.Destroy()
                 except:
                     d = wx.MessageDialog(self, "Error loading history file.",
                                          "Error", wx.ICON_EXCLAMATION)
                 except:
                     d = wx.MessageDialog(self, "Error loading history file.",
                                          "Error", wx.ICON_EXCLAMATION)