Show More
@@ -111,6 +111,7 b' class IPythonWidget(FrontendWidget):' | |||
|
111 | 111 | self._payload_source_page : self._handle_payload_page, |
|
112 | 112 | self._payload_source_loadpy : self._handle_payload_loadpy } |
|
113 | 113 | self._previous_prompt_obj = None |
|
114 | self._keep_kernel_on_exit = None | |
|
114 | 115 | |
|
115 | 116 | # Initialize widget styling. |
|
116 | 117 | if self.style_sheet: |
@@ -424,6 +425,7 b' class IPythonWidget(FrontendWidget):' | |||
|
424 | 425 | self._edit(item['filename'], item['line_number']) |
|
425 | 426 | |
|
426 | 427 | def _handle_payload_exit(self, item): |
|
428 | self._keep_kernel_on_exit = item['keepkernel'] | |
|
427 | 429 | self.exit_requested.emit() |
|
428 | 430 | |
|
429 | 431 | def _handle_payload_loadpy(self, item): |
@@ -60,7 +60,10 b' class MainWindow(QtGui.QMainWindow):' | |||
|
60 | 60 | def closeEvent(self, event): |
|
61 | 61 | """ Reimplemented to prompt the user and close the kernel cleanly. |
|
62 | 62 | """ |
|
63 | keepkernel = self._frontend._keep_kernel_on_exit | |
|
63 | 64 | kernel_manager = self._frontend.kernel_manager |
|
65 | ||
|
66 | if keepkernel is None: | |
|
64 | 67 | if kernel_manager and kernel_manager.channels_running: |
|
65 | 68 | title = self.window().windowTitle() |
|
66 | 69 | cancel = QtGui.QMessageBox.Cancel |
@@ -86,7 +89,7 b' class MainWindow(QtGui.QMainWindow):' | |||
|
86 | 89 | event.accept() |
|
87 | 90 | elif reply == 0: # close Console |
|
88 | 91 | if not self._existing: |
|
89 |
|
|
|
92 | # Have kernel: don't quit, just close the window | |
|
90 | 93 | self._app.setQuitOnLastWindowClosed(False) |
|
91 | 94 | self.deleteLater() |
|
92 | 95 | event.accept() |
@@ -103,7 +106,16 b' class MainWindow(QtGui.QMainWindow):' | |||
|
103 | 106 | event.accept() |
|
104 | 107 | else: |
|
105 | 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 | 121 | # Main entry point |
@@ -78,6 +78,7 b' class ZMQInteractiveShell(InteractiveShell):' | |||
|
78 | 78 | """A subclass of InteractiveShell for ZMQ.""" |
|
79 | 79 | |
|
80 | 80 | displayhook_class = Type(ZMQDisplayHook) |
|
81 | keepkernel = None | |
|
81 | 82 | |
|
82 | 83 | def init_environment(self): |
|
83 | 84 | """Configure the user's environment. |
@@ -111,6 +112,7 b' class ZMQInteractiveShell(InteractiveShell):' | |||
|
111 | 112 | payload = dict( |
|
112 | 113 | source='IPython.zmq.zmqshell.ZMQInteractiveShell.ask_exit', |
|
113 | 114 | exit=True, |
|
115 | keepkernel=self.keepkernel, | |
|
114 | 116 | ) |
|
115 | 117 | self.payload_manager.write_payload(payload) |
|
116 | 118 | |
@@ -564,4 +566,15 b' class ZMQInteractiveShell(InteractiveShell):' | |||
|
564 | 566 | ) |
|
565 | 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 | 580 | InteractiveShellABC.register(ZMQInteractiveShell) |
General Comments 0
You need to be logged in to leave comments.
Login now