Explorar el Código

Add force-execute and force linebreak shortcuts

Steven Silvester hace 8 años
padre
commit
ab9f90b0c9
Se han modificado 3 ficheros con 55 adiciones y 3 borrados
  1. 24 0
      src/console/plugin.ts
  2. 21 3
      src/console/widget.ts
  3. 10 0
      src/shortcuts/plugin.ts

+ 24 - 0
src/console/plugin.ts

@@ -206,6 +206,30 @@ function activateConsole(app: JupyterLab, services: IServiceManager, rendermime:
   menu.addItem({ command });
 
 
+  command = 'console:execute-forced';
+  commands.addCommand(command, {
+    label: 'Execute Cell (forced)',
+    execute: () => {
+      if (tracker.currentWidget) {
+        tracker.currentWidget.content.execute(true);
+      }
+    }
+  });
+  palette.addItem({ command, category });
+  menu.addItem({ command });
+
+  command = 'console:linebreak';
+  commands.addCommand(command, {
+    label: 'Insert Line Break',
+    execute: () => {
+      if (tracker.currentWidget) {
+        tracker.currentWidget.content.insertLinebreak();
+      }
+    }
+  });
+  palette.addItem({ command, category });
+  menu.addItem({ command });
+
   command = 'console:interrupt-kernel';
   commands.addCommand(command, {
     label: 'Interrupt Kernel',

+ 21 - 3
src/console/widget.ts

@@ -204,8 +204,11 @@ class ConsoleWidget extends Widget {
 
   /**
    * Execute the current prompt.
+   *
+   * @param force - Whether to force execution without checking code
+   *    completeness.
    */
-  execute(): Promise<void> {
+  execute(force=false): Promise<void> {
     this.dismissCompletion();
 
     if (this._session.status === 'dead') {
@@ -215,17 +218,22 @@ class ConsoleWidget extends Widget {
 
     let prompt = this.prompt;
     prompt.trusted = true;
+    if (force) {
+      return this._execute();
+    }
+
     // Check for code completeness.
     let code = prompt.model.source;
     code = code.slice(0, code.lastIndexOf('\n'));
     return this._session.kernel.isComplete({ code })
     .then(isComplete => {
       switch (isComplete.content.status) {
-      case 'complete':
-        return this._execute();
       case 'incomplete':
         prompt.model.source = code + '\n' + isComplete.content.indent;
         prompt.editor.setCursorPosition(prompt.model.source.length);
+        break;
+      default:
+        return this._execute();
       }
     });
   }
@@ -240,6 +248,16 @@ class ConsoleWidget extends Widget {
     this.newPrompt();
   }
 
+  /**
+   * Insert a line break in the prompt.
+   */
+  insertLinebreak(): void {
+    let prompt = this.prompt;
+    let model = prompt.model;
+    model.source += '\n';
+    prompt.editor.setCursorPosition(model.source.length);
+  }
+
   /**
    * Dismiss the completion widget for a console.
    */

+ 10 - 0
src/shortcuts/plugin.ts

@@ -255,6 +255,16 @@ const SHORTCUTS = [
     selector: '.jp-ConsolePanel',
     keys: ['Enter']
   },
+  {
+    command: 'console:execute-forced',
+    selector: '.jp-ConsolePanel',
+    keys: ['Shift Enter']
+  },
+  {
+    command: 'console:linebreak',
+    selector: '.jp-ConsolePanel',
+    keys: ['Ctrl Enter']
+  },
   {
     command: 'console:dismiss-completion',
     selector: '.jp-ConsolePanel',