##// END OF EJS Templates
Expanded %exit magic in qtconsole to not exit without prompting and...
Erik Tollerud -
Show More
@@ -111,6 +111,7 b' class IPythonWidget(FrontendWidget):'
111 self._payload_source_page : self._handle_payload_page,
111 self._payload_source_page : self._handle_payload_page,
112 self._payload_source_loadpy : self._handle_payload_loadpy }
112 self._payload_source_loadpy : self._handle_payload_loadpy }
113 self._previous_prompt_obj = None
113 self._previous_prompt_obj = None
114 self._keep_kernel_on_exit = None
114
115
115 # Initialize widget styling.
116 # Initialize widget styling.
116 if self.style_sheet:
117 if self.style_sheet:
@@ -424,6 +425,7 b' class IPythonWidget(FrontendWidget):'
424 self._edit(item['filename'], item['line_number'])
425 self._edit(item['filename'], item['line_number'])
425
426
426 def _handle_payload_exit(self, item):
427 def _handle_payload_exit(self, item):
428 self._keep_kernel_on_exit = item['keepkernel']
427 self.exit_requested.emit()
429 self.exit_requested.emit()
428
430
429 def _handle_payload_loadpy(self, item):
431 def _handle_payload_loadpy(self, item):
@@ -60,7 +60,10 b' class MainWindow(QtGui.QMainWindow):'
60 def closeEvent(self, event):
60 def closeEvent(self, event):
61 """ Reimplemented to prompt the user and close the kernel cleanly.
61 """ Reimplemented to prompt the user and close the kernel cleanly.
62 """
62 """
63 keepkernel = self._frontend._keep_kernel_on_exit
63 kernel_manager = self._frontend.kernel_manager
64 kernel_manager = self._frontend.kernel_manager
65
66 if keepkernel is None:
64 if kernel_manager and kernel_manager.channels_running:
67 if kernel_manager and kernel_manager.channels_running:
65 title = self.window().windowTitle()
68 title = self.window().windowTitle()
66 cancel = QtGui.QMessageBox.Cancel
69 cancel = QtGui.QMessageBox.Cancel
@@ -86,7 +89,7 b' class MainWindow(QtGui.QMainWindow):'
86 event.accept()
89 event.accept()
87 elif reply == 0: # close Console
90 elif reply == 0: # close Console
88 if not self._existing:
91 if not self._existing:
89 # I have the kernel: don't quit, just close the window
92 # Have kernel: don't quit, just close the window
90 self._app.setQuitOnLastWindowClosed(False)
93 self._app.setQuitOnLastWindowClosed(False)
91 self.deleteLater()
94 self.deleteLater()
92 event.accept()
95 event.accept()
@@ -103,7 +106,16 b' class MainWindow(QtGui.QMainWindow):'
103 event.accept()
106 event.accept()
104 else:
107 else:
105 event.ignore()
108 event.ignore()
106
109 elif keepkernel: #close console but leave kernel running
110 if kernel_manager and kernel_manager.channels_running:
111 if not self._existing:
112 # I have the kernel: don't quit, just close the window
113 self._app.setQuitOnLastWindowClosed(False)
114 event.accept()
115 else: #close console and kernel
116 if kernel_manager and kernel_manager.channels_running:
117 kernel_manager.shutdown_kernel()
118 event.accept()
107
119
108 #-----------------------------------------------------------------------------
120 #-----------------------------------------------------------------------------
109 # Main entry point
121 # Main entry point
@@ -78,6 +78,7 b' class ZMQInteractiveShell(InteractiveShell):'
78 """A subclass of InteractiveShell for ZMQ."""
78 """A subclass of InteractiveShell for ZMQ."""
79
79
80 displayhook_class = Type(ZMQDisplayHook)
80 displayhook_class = Type(ZMQDisplayHook)
81 keepkernel = None
81
82
82 def init_environment(self):
83 def init_environment(self):
83 """Configure the user's environment.
84 """Configure the user's environment.
@@ -111,6 +112,7 b' class ZMQInteractiveShell(InteractiveShell):'
111 payload = dict(
112 payload = dict(
112 source='IPython.zmq.zmqshell.ZMQInteractiveShell.ask_exit',
113 source='IPython.zmq.zmqshell.ZMQInteractiveShell.ask_exit',
113 exit=True,
114 exit=True,
115 keepkernel=self.keepkernel,
114 )
116 )
115 self.payload_manager.write_payload(payload)
117 self.payload_manager.write_payload(payload)
116
118
@@ -564,4 +566,15 b' class ZMQInteractiveShell(InteractiveShell):'
564 )
566 )
565 self.payload_manager.write_payload(payload)
567 self.payload_manager.write_payload(payload)
566
568
569 def magic_Exit(self, parameter_s=''):
570 """Exit IPython. If the -k option is provided, the kernel will be left
571 running. Otherwise, it will shutdown without prompting.
572 """
573 opts,args = self.parse_options(parameter_s,'k')
574 self.shell.keepkernel = opts.has_key('k')
575 self.shell.ask_exit()
576
577 # Add aliases as magics so all common forms work: exit, quit, Exit, Quit.
578 magic_exit = magic_quit = magic_Quit = magic_Exit
579
567 InteractiveShellABC.register(ZMQInteractiveShell)
580 InteractiveShellABC.register(ZMQInteractiveShell)
General Comments 0
You need to be logged in to leave comments. Login now